Compare commits

..

7 Commits

Author SHA1 Message Date
naomi 9c40549e3b release: v4.1.0
Node.js CI / CI (push) Successful in 25s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 2m1s
2026-04-16 17:53:00 -07:00
naomi 9f997d6e03 chore: unstrict peer deps for CI
Node.js CI / CI (push) Successful in 24s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 57s
Whatever god damn
2026-04-16 15:26:43 -07:00
naomi a13eb8dbec feat: update treenation badge, add tree counter, adjust media queries
Node.js CI / CI (push) Failing after 18s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 54s
2026-04-16 14:54:34 -07:00
naomi 2351245698 release: v4.0.1 2026-04-16 14:54:32 -07:00
naomi f67c0ec850 chore: merge remote changes
Node.js CI / CI (push) Successful in 21s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 2m46s
2026-03-03 13:43:45 -08:00
hikari 6de20dbdee fix: move @import before @font-face and remove Vampyr font 2026-03-03 13:43:04 -08:00
hikari c477cebe92 chore: replace .npmrc with pnpm-workspace.yaml
Node.js CI / CI (push) Successful in 26s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m23s
2026-03-02 16:26:46 -08:00
5 changed files with 84 additions and 74 deletions
-25
View File
@@ -1,25 +0,0 @@
# Package Manager Configuration
# Force pnpm usage - breaks npm/yarn intentionally
node-linker=pnpm
# Security: Disable all lifecycle scripts
ignore-scripts=true
enable-pre-post-scripts=false
# Security: Require packages to be 10+ days old before installation
minimum-release-age=14400
# Security: Verify package integrity hashes
verify-store-integrity=true
# Security: Enforce strict trust policies
trust-policy=strict
# Security: Strict peer dependency resolution
strict-peer-dependencies=true
# Performance: Use symlinks for node_modules
symlink=true
# Lockfile: Ensure lockfile is not modified during install
frozen-lockfile=false
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "website-headers", "name": "website-headers",
"version": "4.0.0", "version": "4.1.0",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"type": "module", "type": "module",
@@ -24,7 +24,7 @@
"concurrently": "9.1.0", "concurrently": "9.1.0",
"eslint": "9.17.0", "eslint": "9.17.0",
"globals": "15.14.0", "globals": "15.14.0",
"terser": "5.46.0", "terser": "5.37.0",
"tsx": "4.19.2", "tsx": "4.19.2",
"typescript": "5.7.2" "typescript": "5.7.2"
} }
+22 -29
View File
@@ -10,7 +10,7 @@ importers:
devDependencies: devDependencies:
'@nhcarrigan/eslint-config': '@nhcarrigan/eslint-config':
specifier: 5.0.0 specifier: 5.0.0
version: 5.0.0(@typescript-eslint/utils@8.18.1(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(playwright@1.49.1)(react@19.0.0)(typescript@5.7.2)(vitest@2.1.8(@types/node@22.10.2)(terser@5.46.0)) version: 5.0.0(@typescript-eslint/utils@8.18.1(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(playwright@1.49.1)(react@19.0.0)(typescript@5.7.2)(vitest@2.1.8(@types/node@22.10.2)(terser@5.37.0))
'@nhcarrigan/typescript-config': '@nhcarrigan/typescript-config':
specifier: 4.0.0 specifier: 4.0.0
version: 4.0.0(typescript@5.7.2) version: 4.0.0(typescript@5.7.2)
@@ -27,8 +27,8 @@ importers:
specifier: 15.14.0 specifier: 15.14.0
version: 15.14.0 version: 15.14.0
terser: terser:
specifier: 5.46.0 specifier: 5.37.0
version: 5.46.0 version: 5.37.0
tsx: tsx:
specifier: 4.19.2 specifier: 4.19.2
version: 4.19.2 version: 4.19.2
@@ -752,11 +752,6 @@ packages:
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
hasBin: true hasBin: true
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
ajv@6.12.6: ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
@@ -1931,8 +1926,8 @@ packages:
resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==}
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^14.18.0 || >=16.0.0}
terser@5.46.0: terser@5.37.0:
resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==} resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==}
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
@@ -2385,7 +2380,7 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2 '@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/sourcemap-codec': 1.5.0
'@nhcarrigan/eslint-config@5.0.0(@typescript-eslint/utils@8.18.1(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(playwright@1.49.1)(react@19.0.0)(typescript@5.7.2)(vitest@2.1.8(@types/node@22.10.2)(terser@5.46.0))': '@nhcarrigan/eslint-config@5.0.0(@typescript-eslint/utils@8.18.1(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(playwright@1.49.1)(react@19.0.0)(typescript@5.7.2)(vitest@2.1.8(@types/node@22.10.2)(terser@5.37.0))':
dependencies: dependencies:
'@eslint/compat': 1.2.4(eslint@9.17.0) '@eslint/compat': 1.2.4(eslint@9.17.0)
'@eslint/eslintrc': 3.2.0 '@eslint/eslintrc': 3.2.0
@@ -2393,7 +2388,7 @@ snapshots:
'@stylistic/eslint-plugin': 2.12.0(eslint@9.17.0)(typescript@5.7.2) '@stylistic/eslint-plugin': 2.12.0(eslint@9.17.0)(typescript@5.7.2)
'@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2) '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)
'@typescript-eslint/parser': 8.17.0(eslint@9.17.0)(typescript@5.7.2) '@typescript-eslint/parser': 8.17.0(eslint@9.17.0)(typescript@5.7.2)
'@vitest/eslint-plugin': 1.1.14(@typescript-eslint/utils@8.18.1(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)(vitest@2.1.8(@types/node@22.10.2)(terser@5.46.0)) '@vitest/eslint-plugin': 1.1.14(@typescript-eslint/utils@8.18.1(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)(vitest@2.1.8(@types/node@22.10.2)(terser@5.37.0))
eslint: 9.17.0 eslint: 9.17.0
eslint-plugin-deprecation: 3.0.0(eslint@9.17.0)(typescript@5.7.2) eslint-plugin-deprecation: 3.0.0(eslint@9.17.0)(typescript@5.7.2)
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.17.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.17.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)
@@ -2406,7 +2401,7 @@ snapshots:
playwright: 1.49.1 playwright: 1.49.1
react: 19.0.0 react: 19.0.0
typescript: 5.7.2 typescript: 5.7.2
vitest: 2.1.8(@types/node@22.10.2)(terser@5.46.0) vitest: 2.1.8(@types/node@22.10.2)(terser@5.37.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@typescript-eslint/utils' - '@typescript-eslint/utils'
- eslint-import-resolver-typescript - eslint-import-resolver-typescript
@@ -2671,13 +2666,13 @@ snapshots:
'@typescript-eslint/types': 8.18.1 '@typescript-eslint/types': 8.18.1
eslint-visitor-keys: 4.2.0 eslint-visitor-keys: 4.2.0
'@vitest/eslint-plugin@1.1.14(@typescript-eslint/utils@8.18.1(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)(vitest@2.1.8(@types/node@22.10.2)(terser@5.46.0))': '@vitest/eslint-plugin@1.1.14(@typescript-eslint/utils@8.18.1(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)(vitest@2.1.8(@types/node@22.10.2)(terser@5.37.0))':
dependencies: dependencies:
'@typescript-eslint/utils': 8.18.1(eslint@9.17.0)(typescript@5.7.2) '@typescript-eslint/utils': 8.18.1(eslint@9.17.0)(typescript@5.7.2)
eslint: 9.17.0 eslint: 9.17.0
optionalDependencies: optionalDependencies:
typescript: 5.7.2 typescript: 5.7.2
vitest: 2.1.8(@types/node@22.10.2)(terser@5.46.0) vitest: 2.1.8(@types/node@22.10.2)(terser@5.37.0)
'@vitest/expect@2.1.8': '@vitest/expect@2.1.8':
dependencies: dependencies:
@@ -2686,13 +2681,13 @@ snapshots:
chai: 5.1.2 chai: 5.1.2
tinyrainbow: 1.2.0 tinyrainbow: 1.2.0
'@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.10.2)(terser@5.46.0))': '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))':
dependencies: dependencies:
'@vitest/spy': 2.1.8 '@vitest/spy': 2.1.8
estree-walker: 3.0.3 estree-walker: 3.0.3
magic-string: 0.30.17 magic-string: 0.30.17
optionalDependencies: optionalDependencies:
vite: 5.4.11(@types/node@22.10.2)(terser@5.46.0) vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0)
'@vitest/pretty-format@2.1.8': '@vitest/pretty-format@2.1.8':
dependencies: dependencies:
@@ -2731,8 +2726,6 @@ snapshots:
acorn@8.14.0: {} acorn@8.14.0: {}
acorn@8.15.0: {}
ajv@6.12.6: ajv@6.12.6:
dependencies: dependencies:
fast-deep-equal: 3.1.3 fast-deep-equal: 3.1.3
@@ -4161,10 +4154,10 @@ snapshots:
'@pkgr/core': 0.1.1 '@pkgr/core': 0.1.1
tslib: 2.8.1 tslib: 2.8.1
terser@5.46.0: terser@5.37.0:
dependencies: dependencies:
'@jridgewell/source-map': 0.3.6 '@jridgewell/source-map': 0.3.6
acorn: 8.15.0 acorn: 8.14.0
commander: 2.20.3 commander: 2.20.3
source-map-support: 0.5.21 source-map-support: 0.5.21
@@ -4273,13 +4266,13 @@ snapshots:
spdx-correct: 3.2.0 spdx-correct: 3.2.0
spdx-expression-parse: 3.0.1 spdx-expression-parse: 3.0.1
vite-node@2.1.8(@types/node@22.10.2)(terser@5.46.0): vite-node@2.1.8(@types/node@22.10.2)(terser@5.37.0):
dependencies: dependencies:
cac: 6.7.14 cac: 6.7.14
debug: 4.4.0 debug: 4.4.0
es-module-lexer: 1.5.4 es-module-lexer: 1.5.4
pathe: 1.1.2 pathe: 1.1.2
vite: 5.4.11(@types/node@22.10.2)(terser@5.46.0) vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- less - less
@@ -4291,7 +4284,7 @@ snapshots:
- supports-color - supports-color
- terser - terser
vite@5.4.11(@types/node@22.10.2)(terser@5.46.0): vite@5.4.11(@types/node@22.10.2)(terser@5.37.0):
dependencies: dependencies:
esbuild: 0.21.5 esbuild: 0.21.5
postcss: 8.4.49 postcss: 8.4.49
@@ -4299,12 +4292,12 @@ snapshots:
optionalDependencies: optionalDependencies:
'@types/node': 22.10.2 '@types/node': 22.10.2
fsevents: 2.3.3 fsevents: 2.3.3
terser: 5.46.0 terser: 5.37.0
vitest@2.1.8(@types/node@22.10.2)(terser@5.46.0): vitest@2.1.8(@types/node@22.10.2)(terser@5.37.0):
dependencies: dependencies:
'@vitest/expect': 2.1.8 '@vitest/expect': 2.1.8
'@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.2)(terser@5.46.0)) '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.2)(terser@5.37.0))
'@vitest/pretty-format': 2.1.8 '@vitest/pretty-format': 2.1.8
'@vitest/runner': 2.1.8 '@vitest/runner': 2.1.8
'@vitest/snapshot': 2.1.8 '@vitest/snapshot': 2.1.8
@@ -4320,8 +4313,8 @@ snapshots:
tinyexec: 0.3.1 tinyexec: 0.3.1
tinypool: 1.0.2 tinypool: 1.0.2
tinyrainbow: 1.2.0 tinyrainbow: 1.2.0
vite: 5.4.11(@types/node@22.10.2)(terser@5.46.0) vite: 5.4.11(@types/node@22.10.2)(terser@5.37.0)
vite-node: 2.1.8(@types/node@22.10.2)(terser@5.46.0) vite-node: 2.1.8(@types/node@22.10.2)(terser@5.37.0)
why-is-node-running: 2.3.0 why-is-node-running: 2.3.0
optionalDependencies: optionalDependencies:
'@types/node': 22.10.2 '@types/node': 22.10.2
+22
View File
@@ -0,0 +1,22 @@
# Security
# Do not execute any scripts of installed packages (project scripts still run)
ignoreDepScripts: true
# Do not automatically run pre/post scripts (e.g. preinstall, postbuild)
enablePrePostScripts: false
# Only allow packages published at least 10 days ago (reduces risk of compromised packages)
minimumReleaseAge: 14400
# Fail if a package's trust level has decreased compared to previous releases
trustPolicy: no-downgrade
# Ignore trust policy for packages published more than 1 year ago (predates provenance signing)
trustPolicyIgnoreAfter: 525960
# Fail if there are missing or invalid peer dependencies
# We are temporarily disabling this to allow for the development of the website-headers package
strictPeerDependencies: false
# Prevent transitive dependencies from using exotic sources (git repos, direct tarball URLs)
blockExoticSubdeps: true
# Lockfile
# Allow the lockfile to be updated during install (set to true in CI for stricter reproducibility)
preferFrozenLockfile: false
+38 -18
View File
@@ -180,14 +180,10 @@ nhcarriganHeadersLargeIcon.href
const nhcarriganHeadersStyles = document.createElement("style"); const nhcarriganHeadersStyles = document.createElement("style");
nhcarriganHeadersStyles.id = "nhcarrigan-global-styles"; nhcarriganHeadersStyles.id = "nhcarrigan-global-styles";
nhcarriganHeadersStyles.innerHTML = ` nhcarriganHeadersStyles.innerHTML = `
@font-face {
font-family: 'Vampyr';
src: url('https://cdn.nhcarrigan.com/fonts/vampyr.ttf') format('truetype');
}
/* Import fun and whimsical fonts! */ /* Import fun and whimsical fonts! */
@import url('https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&family=Creepster&family=Griffy&family=Henny+Penny&display=swap'); @import url('https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&family=Creepster&family=Griffy&family=Henny+Penny&display=swap');
:root { :root {
/* Witchy Purple Rose Palette */ /* Witchy Purple Rose Palette */
--witch-purple: #2B1B3D; --witch-purple: #2B1B3D;
@@ -686,7 +682,7 @@ pre {
} }
.mystical-text { .mystical-text {
font-family: 'Henny Penny', 'Vampyr', cursive; font-family: 'Henny Penny', cursive;
letter-spacing: 2px; letter-spacing: 2px;
text-shadow: 2px 2px 4px rgba(68, 39, 90, 0.4); text-shadow: 2px 2px 4px rgba(68, 39, 90, 0.4);
} }
@@ -703,20 +699,43 @@ pre {
text-shadow: none; text-shadow: none;
} }
@media screen and (max-width: 625px) { @media screen and (max-width: 1000px) {
#tree-nation-offset-website { #tree-nation-tree-counter {
display: none; display: none;
} }
footer, #footer-inner-container {
height: 50px;
justify-content: space-around;
}
main {
margin-bottom: 60px;
}
} }
@media screen and (max-width: 425px) { @media screen and (max-width: 835px) {
#theme-select-button {
font-size: 10pt;
padding: 8px 16px;
}
#show-socials-button {
font-size: 10pt;
padding: 8px 16px;
}
}
@media screen and (max-width: 768px) {
#tree-nation-offset-website {
display: none;
}
}
@media screen and (max-width: 625px) {
footer, #footer-inner-container {
height: 75px;
justify-content: space-around;
}
main {
margin-bottom: 85px;
}
#footer-copyright {
font-size: 10pt;
}
}
@media screen and (max-width: 560px) {
#donate-badge { #donate-badge {
display: none; display: none;
} }
@@ -736,6 +755,7 @@ pre {
const nhcarriganHeadersFooter = document.createElement("footer"); const nhcarriganHeadersFooter = document.createElement("footer");
nhcarriganHeadersFooter.innerHTML = ` nhcarriganHeadersFooter.innerHTML = `
<div id="footer-inner-container"> <div id="footer-inner-container">
<div id="tree-nation-tree-counter" data-widget-type="tree-counter" data-tree-nation-code="52a9395caa57df28" data-lang="en" data-theme="dark"></div>
<p id="footer-copyright" style="margin: 0; display: flex; align-items: center;">&copy; <a href="https://nhcarrigan.com" target="_blank" style="margin-left: 5px;">Naomi Carrigan</a></p> <p id="footer-copyright" style="margin: 0; display: flex; align-items: center;">&copy; <a href="https://nhcarrigan.com" target="_blank" style="margin-left: 5px;">Naomi Carrigan</a></p>
<button id="show-socials-button" type="button"> <button id="show-socials-button" type="button">
<i class="fa-solid fa-share-nodes"></i> Connect with Us <i class="fa-solid fa-share-nodes"></i> Connect with Us
@@ -746,7 +766,7 @@ nhcarriganHeadersFooter.innerHTML = `
<a id="donate-badge" href="https://buy.stripe.com/cN24iTfqu1j6b3afZ2" target="_blank" rel="noreferrer"> <a id="donate-badge" href="https://buy.stripe.com/cN24iTfqu1j6b3afZ2" target="_blank" rel="noreferrer">
<img src="https://cdn.nhcarrigan.com/donate.png" alt="Donate" style="width: 70px; height: 70px;"> <img src="https://cdn.nhcarrigan.com/donate.png" alt="Donate" style="width: 70px; height: 70px;">
</a> </a>
<div id="tree-nation-offset-website"></div> <div id="tree-nation-offset-website" data-widget-type="offset-website" data-tree-nation-code="a17464e0cd351220" data-lang="en" data-theme="dark"></div>
</div> </div>
<div id="social-list"> <div id="social-list">
<div class="social-list-item"> <div class="social-list-item">
@@ -808,7 +828,7 @@ nhcarriganHeadersFooter.innerHTML = `
const nhcarriganHeadersTreeNation = document.createElement("script"); const nhcarriganHeadersTreeNation = document.createElement("script");
nhcarriganHeadersTreeNation.src nhcarriganHeadersTreeNation.src
= "https://widgets.tree-nation.com/js/widgets/v1/widgets.min.js?v=1.0"; = "https://widgets.tree-nation.com/js/widgets/v3/widgets.min.js";
const nhcarriganHeadersTreeNationBottom = document.createElement("script"); const nhcarriganHeadersTreeNationBottom = document.createElement("script");
nhcarriganHeadersTreeNationBottom.defer = true; nhcarriganHeadersTreeNationBottom.defer = true;
nhcarriganHeadersTreeNationBottom.async = true; nhcarriganHeadersTreeNationBottom.async = true;