generated from nhcarrigan/template
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
23df8a3423
|
|||
|
7b8cda989b
|
|||
| 8ed53738e0 |
@@ -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
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
"packageManager": "pnpm@10.7.1",
|
||||
"devDependencies": {
|
||||
"@nhcarrigan/eslint-config": "5.2.0",
|
||||
"@types/node": "25.2.3",
|
||||
"@types/node": "22.14.0",
|
||||
"cspell": "8.18.1",
|
||||
"eslint": "9.24.0",
|
||||
"tsx": "4.19.3",
|
||||
|
||||
Generated
+27
-27
@@ -10,10 +10,10 @@ importers:
|
||||
devDependencies:
|
||||
'@nhcarrigan/eslint-config':
|
||||
specifier: 5.2.0
|
||||
version: 5.2.0(@typescript-eslint/utils@8.29.1(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)(playwright@1.51.1)(react@19.1.0)(typescript@5.7.3)(vitest@3.1.1(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1))
|
||||
version: 5.2.0(@typescript-eslint/utils@8.29.1(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)(playwright@1.51.1)(react@19.1.0)(typescript@5.7.3)(vitest@3.1.1(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1))
|
||||
'@types/node':
|
||||
specifier: 25.2.3
|
||||
version: 25.2.3
|
||||
specifier: 22.14.0
|
||||
version: 22.14.0
|
||||
cspell:
|
||||
specifier: 8.18.1
|
||||
version: 8.18.1
|
||||
@@ -25,7 +25,7 @@ importers:
|
||||
version: 4.19.3
|
||||
vitest:
|
||||
specifier: 3.1.1
|
||||
version: 3.1.1(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1)
|
||||
version: 3.1.1(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1)
|
||||
yaml:
|
||||
specifier: 2.7.1
|
||||
version: 2.7.1
|
||||
@@ -645,8 +645,8 @@ packages:
|
||||
'@types/json5@0.0.29':
|
||||
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
|
||||
|
||||
'@types/node@25.2.3':
|
||||
resolution: {integrity: sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==}
|
||||
'@types/node@22.14.0':
|
||||
resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==}
|
||||
|
||||
'@types/normalize-package-data@2.4.4':
|
||||
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
|
||||
@@ -2146,8 +2146,8 @@ packages:
|
||||
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
undici-types@7.16.0:
|
||||
resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
|
||||
undici-types@6.21.0:
|
||||
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
|
||||
|
||||
update-browserslist-db@1.1.3:
|
||||
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
|
||||
@@ -2674,7 +2674,7 @@ snapshots:
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.0': {}
|
||||
|
||||
'@nhcarrigan/eslint-config@5.2.0(@typescript-eslint/utils@8.29.1(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)(playwright@1.51.1)(react@19.1.0)(typescript@5.7.3)(vitest@3.1.1(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1))':
|
||||
'@nhcarrigan/eslint-config@5.2.0(@typescript-eslint/utils@8.29.1(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)(playwright@1.51.1)(react@19.1.0)(typescript@5.7.3)(vitest@3.1.1(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1))':
|
||||
dependencies:
|
||||
'@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.24.0)
|
||||
'@eslint/compat': 1.2.4(eslint@9.24.0)
|
||||
@@ -2683,7 +2683,7 @@ snapshots:
|
||||
'@stylistic/eslint-plugin': 2.12.1(eslint@9.24.0)(typescript@5.7.3)
|
||||
'@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)(typescript@5.7.3)
|
||||
'@typescript-eslint/parser': 8.19.0(eslint@9.24.0)(typescript@5.7.3)
|
||||
'@vitest/eslint-plugin': 1.1.24(@typescript-eslint/utils@8.29.1(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)(typescript@5.7.3)(vitest@3.1.1(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1))
|
||||
'@vitest/eslint-plugin': 1.1.24(@typescript-eslint/utils@8.29.1(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)(typescript@5.7.3)(vitest@3.1.1(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1))
|
||||
eslint: 9.24.0
|
||||
eslint-plugin-deprecation: 3.0.0(eslint@9.24.0)(typescript@5.7.3)
|
||||
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)
|
||||
@@ -2696,7 +2696,7 @@ snapshots:
|
||||
playwright: 1.51.1
|
||||
react: 19.1.0
|
||||
typescript: 5.7.3
|
||||
vitest: 3.1.1(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1)
|
||||
vitest: 3.1.1(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1)
|
||||
transitivePeerDependencies:
|
||||
- '@typescript-eslint/utils'
|
||||
- eslint-import-resolver-typescript
|
||||
@@ -2797,9 +2797,9 @@ snapshots:
|
||||
|
||||
'@types/json5@0.0.29': {}
|
||||
|
||||
'@types/node@25.2.3':
|
||||
'@types/node@22.14.0':
|
||||
dependencies:
|
||||
undici-types: 7.16.0
|
||||
undici-types: 6.21.0
|
||||
|
||||
'@types/normalize-package-data@2.4.4': {}
|
||||
|
||||
@@ -2955,13 +2955,13 @@ snapshots:
|
||||
'@typescript-eslint/types': 8.29.1
|
||||
eslint-visitor-keys: 4.2.0
|
||||
|
||||
'@vitest/eslint-plugin@1.1.24(@typescript-eslint/utils@8.29.1(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)(typescript@5.7.3)(vitest@3.1.1(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1))':
|
||||
'@vitest/eslint-plugin@1.1.24(@typescript-eslint/utils@8.29.1(eslint@9.24.0)(typescript@5.7.3))(eslint@9.24.0)(typescript@5.7.3)(vitest@3.1.1(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1))':
|
||||
dependencies:
|
||||
'@typescript-eslint/utils': 8.29.1(eslint@9.24.0)(typescript@5.7.3)
|
||||
eslint: 9.24.0
|
||||
optionalDependencies:
|
||||
typescript: 5.7.3
|
||||
vitest: 3.1.1(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1)
|
||||
vitest: 3.1.1(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1)
|
||||
|
||||
'@vitest/expect@3.1.1':
|
||||
dependencies:
|
||||
@@ -2970,13 +2970,13 @@ snapshots:
|
||||
chai: 5.2.0
|
||||
tinyrainbow: 2.0.0
|
||||
|
||||
'@vitest/mocker@3.1.1(vite@6.2.5(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1))':
|
||||
'@vitest/mocker@3.1.1(vite@6.2.5(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1))':
|
||||
dependencies:
|
||||
'@vitest/spy': 3.1.1
|
||||
estree-walker: 3.0.3
|
||||
magic-string: 0.30.17
|
||||
optionalDependencies:
|
||||
vite: 6.2.5(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1)
|
||||
vite: 6.2.5(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1)
|
||||
|
||||
'@vitest/pretty-format@3.1.1':
|
||||
dependencies:
|
||||
@@ -4645,7 +4645,7 @@ snapshots:
|
||||
has-symbols: 1.1.0
|
||||
which-boxed-primitive: 1.1.1
|
||||
|
||||
undici-types@7.16.0: {}
|
||||
undici-types@6.21.0: {}
|
||||
|
||||
update-browserslist-db@1.1.3(browserslist@4.24.4):
|
||||
dependencies:
|
||||
@@ -4662,13 +4662,13 @@ snapshots:
|
||||
spdx-correct: 3.2.0
|
||||
spdx-expression-parse: 3.0.1
|
||||
|
||||
vite-node@3.1.1(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1):
|
||||
vite-node@3.1.1(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1):
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
debug: 4.4.0
|
||||
es-module-lexer: 1.6.0
|
||||
pathe: 2.0.3
|
||||
vite: 6.2.5(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1)
|
||||
vite: 6.2.5(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1)
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
- jiti
|
||||
@@ -4683,21 +4683,21 @@ snapshots:
|
||||
- tsx
|
||||
- yaml
|
||||
|
||||
vite@6.2.5(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1):
|
||||
vite@6.2.5(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1):
|
||||
dependencies:
|
||||
esbuild: 0.25.2
|
||||
postcss: 8.5.3
|
||||
rollup: 4.39.0
|
||||
optionalDependencies:
|
||||
'@types/node': 25.2.3
|
||||
'@types/node': 22.14.0
|
||||
fsevents: 2.3.3
|
||||
tsx: 4.19.3
|
||||
yaml: 2.7.1
|
||||
|
||||
vitest@3.1.1(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1):
|
||||
vitest@3.1.1(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1):
|
||||
dependencies:
|
||||
'@vitest/expect': 3.1.1
|
||||
'@vitest/mocker': 3.1.1(vite@6.2.5(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1))
|
||||
'@vitest/mocker': 3.1.1(vite@6.2.5(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1))
|
||||
'@vitest/pretty-format': 3.1.1
|
||||
'@vitest/runner': 3.1.1
|
||||
'@vitest/snapshot': 3.1.1
|
||||
@@ -4713,11 +4713,11 @@ snapshots:
|
||||
tinyexec: 0.3.2
|
||||
tinypool: 1.0.2
|
||||
tinyrainbow: 2.0.0
|
||||
vite: 6.2.5(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1)
|
||||
vite-node: 3.1.1(@types/node@25.2.3)(tsx@4.19.3)(yaml@2.7.1)
|
||||
vite: 6.2.5(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1)
|
||||
vite-node: 3.1.1(@types/node@22.14.0)(tsx@4.19.3)(yaml@2.7.1)
|
||||
why-is-node-running: 2.3.0
|
||||
optionalDependencies:
|
||||
'@types/node': 25.2.3
|
||||
'@types/node': 22.14.0
|
||||
transitivePeerDependencies:
|
||||
- jiti
|
||||
- less
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# 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
|
||||
strictPeerDependencies: true
|
||||
# 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
|
||||
+42
-3
@@ -28,6 +28,42 @@ const htmlBeginning = `<!DOCTYPE html>
|
||||
const htmlEnd = ` </main>
|
||||
</body>
|
||||
<script src="./dates.js"></script>
|
||||
<script>
|
||||
var _cdnStyle = null;
|
||||
var _condensedSections = [];
|
||||
|
||||
window.addEventListener("beforeprint", function() {
|
||||
_cdnStyle = document.getElementById("nhcarrigan-global-styles");
|
||||
if (_cdnStyle) { _cdnStyle.remove(); }
|
||||
});
|
||||
window.addEventListener("afterprint", function() {
|
||||
if (_cdnStyle) { document.head.appendChild(_cdnStyle); _cdnStyle = null; }
|
||||
_condensedSections.forEach(function(el) { el.style.display = ""; });
|
||||
_condensedSections = [];
|
||||
});
|
||||
|
||||
function downloadFile(url, filename) {
|
||||
fetch(url)
|
||||
.then(function(r) { return r.blob(); })
|
||||
.then(function(blob) {
|
||||
var a = document.createElement("a");
|
||||
a.href = URL.createObjectURL(blob);
|
||||
a.download = filename;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
document.body.removeChild(a);
|
||||
URL.revokeObjectURL(a.href);
|
||||
});
|
||||
}
|
||||
|
||||
function printCondensed() {
|
||||
["certifications", "projects", "publications"].forEach(function(id) {
|
||||
var el = document.getElementById(id);
|
||||
if (el) { el.style.display = "none"; _condensedSections.push(el); }
|
||||
});
|
||||
window.print();
|
||||
}
|
||||
</script>
|
||||
</html>`;
|
||||
|
||||
const request = await fetch(
|
||||
@@ -114,9 +150,12 @@ const heading = `<h1>${yaml.name}</h1>
|
||||
<a href="#projects">Projects</a> |
|
||||
<a href="#publications">Publications</a> |
|
||||
</p>
|
||||
<p id="formats">
|
||||
Get this resume in <a href="https://data.nhcarrigan.com/resume.yml">YAML</a> or <a href="https://data.nhcarrigan.com/resume.json">JSON</a> format. You can also <span style="text-decoration: underline" onclick="window.print();return false;">print</span> the resume (and optionally save as a PDF).
|
||||
</p>
|
||||
<div id="formats">
|
||||
<button onclick="downloadFile('https://data.nhcarrigan.com/resume.yml', 'resume.yml')">Download YAML</button>
|
||||
<button onclick="downloadFile('https://data.nhcarrigan.com/resume.json', 'resume.json')">Download JSON</button>
|
||||
<button onclick="window.print()">Print Resume</button>
|
||||
<button onclick="printCondensed()">Print Condensed Resume</button>
|
||||
</div>
|
||||
<p class="cta">
|
||||
Interested in hiring me?
|
||||
<a href="https://testimonials.nhcarrigan.com" target="_blank"
|
||||
|
||||
@@ -42,6 +42,9 @@ hr {
|
||||
box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.7);
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
footer {
|
||||
z-index: 1;
|
||||
}
|
||||
}
|
||||
@media print {
|
||||
:root {
|
||||
@@ -50,6 +53,15 @@ hr {
|
||||
* {
|
||||
color: black;
|
||||
font-family: "Times New Roman", serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
h1 {
|
||||
text-align: center;
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
.info {
|
||||
text-align: center;
|
||||
}
|
||||
video,
|
||||
footer,
|
||||
|
||||
Reference in New Issue
Block a user