shelfware 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{BZuUK3cr.js → Bzmuhhqm.js} +1 -1
  3. package/.output/public/_nuxt/{6IstVYrV.js → CJmYvhe6.js} +1 -1
  4. package/.output/public/_nuxt/CMk5jOCS.js +1 -0
  5. package/.output/public/_nuxt/DJQqUjJu.js +2 -0
  6. package/.output/public/_nuxt/DfJzPSBi.js +1 -0
  7. package/.output/public/_nuxt/EBA28doP.js +14 -0
  8. package/.output/public/_nuxt/builds/latest.json +1 -1
  9. package/.output/public/_nuxt/builds/meta/bc384f67-a2f8-4b6b-9aa1-cb68fb93d366.json +1 -0
  10. package/.output/public/_nuxt/entry.CKteCcdN.css +2 -0
  11. package/.output/public/_nuxt/error-404.1qC5mjOI.css +1 -0
  12. package/.output/public/_nuxt/error-500.BcOmuN7K.css +1 -0
  13. package/.output/public/_nuxt/rWsrwf2L.js +36 -0
  14. package/.output/public/_nuxt/{C_VgD9ZI.js → sK9Xse3o.js} +1 -1
  15. package/.output/server/chunks/nitro/nitro.mjs +102 -102
  16. package/.output/server/chunks/routes/renderer.mjs +1 -1
  17. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  18. package/.output/server/package.json +1 -1
  19. package/README.md +11 -1
  20. package/bin/launch.d.mts +54 -0
  21. package/bin/launch.mjs +111 -24
  22. package/bin/shelfware.mjs +8 -3
  23. package/package.json +7 -3
  24. package/.output/public/_nuxt/9C5WUlLE.js +0 -36
  25. package/.output/public/_nuxt/BXXtFil5.js +0 -1
  26. package/.output/public/_nuxt/BeLyMmd4.js +0 -1
  27. package/.output/public/_nuxt/DB5Vxbte.js +0 -2
  28. package/.output/public/_nuxt/DMg0j7gv.js +0 -14
  29. package/.output/public/_nuxt/builds/meta/4c307968-4837-497b-a570-d6ee336accc4.json +0 -1
  30. package/.output/public/_nuxt/entry.b3_DJTEt.css +0 -2
  31. package/.output/public/_nuxt/error-404.CHsn7XF-.css +0 -1
  32. package/.output/public/_nuxt/error-500.Bawx2bLr.css +0 -1
@@ -4056,7 +4056,7 @@ function _expandFromEnv(value) {
4056
4056
  const _inlineRuntimeConfig = {
4057
4057
  "app": {
4058
4058
  "baseURL": "/",
4059
- "buildId": "4c307968-4837-497b-a570-d6ee336accc4",
4059
+ "buildId": "bc384f67-a2f8-4b6b-9aa1-cb68fb93d366",
4060
4060
  "buildAssetsDir": "/_nuxt/",
4061
4061
  "cdnURL": ""
4062
4062
  },
@@ -4500,7 +4500,7 @@ async function errorHandler(error, event) {
4500
4500
 
4501
4501
  const script = "\"use strict\";(()=>{const o=window,e=document.documentElement,c=[\"dark\",\"light\"],s=getStorageValue(\"localStorage\",\"nuxt-color-mode\")||\"system\";let r=s===\"system\"?f():s;const l=e.getAttribute(\"data-color-mode-forced\");l&&(r=l),i(r),o[\"__NUXT_COLOR_MODE__\"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=\"\"+t+\"\",n=\"\";e.classList?e.classList.add(a):e.className+=\" \"+a,n&&e.setAttribute(\"data-\"+n,t)}function d(t){const a=\"\"+t+\"\",n=\"\";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,\"g\"),\"\"),n&&e.removeAttribute(\"data-\"+n)}function u(t){return o.matchMedia(\"(prefers-color-scheme\"+t+\")\")}function f(){if(o.matchMedia&&u(\"\").media!==\"not all\"){for(const t of c)if(u(\":\"+t).matches)return t}return\"light\"}})();function getStorageValue(o,e){switch(o){case\"localStorage\":try{return window.localStorage.getItem(e)}catch{return null}case\"sessionStorage\":try{return window.sessionStorage.getItem(e)}catch{return null}case\"cookie\":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=(\"; \"+window.document.cookie).split(\"; \"+o+\"=\");if(c.length===2){const s=c.pop();return s?s.split(\";\").shift():null}}";
4502
4502
 
4503
- const _sy8WL5gvfy834j9E8qs4pEkXtOnD5hjDQZM7n5pkxM = (function(nitro) {
4503
+ const _4H4culGvQ1Dp8myD2WdjQ3S6IGUumm_St2Zw0wwTTE = (function(nitro) {
4504
4504
  nitro.hooks.hook("render:html", (htmlContext) => {
4505
4505
  htmlContext.head.push(`<script>${script}<\/script>`);
4506
4506
  });
@@ -4559,122 +4559,122 @@ function tokenMatches(actual, expected) {
4559
4559
  return timingSafeEqual(a, b);
4560
4560
  }
4561
4561
 
4562
- const _QOaOEwx81eDlZeFZjWojtfFoitcjIhtHIqt37VdYuSg = defineNitroPlugin(() => {
4562
+ const _YY93QxfadySKCpwmDM6dAIPqjH6q5NYi1I7q0CwP0w = defineNitroPlugin(() => {
4563
4563
  if (!isWellFormedToken(process.env.NUXT_PUBLIC_SHELFWARE_TOKEN)) {
4564
4564
  process.env.NUXT_PUBLIC_SHELFWARE_TOKEN = `sw_${randomBytes(32).toString("hex")}`;
4565
4565
  }
4566
4566
  });
4567
4567
 
4568
4568
  const plugins = [
4569
- _sy8WL5gvfy834j9E8qs4pEkXtOnD5hjDQZM7n5pkxM,
4570
- _QOaOEwx81eDlZeFZjWojtfFoitcjIhtHIqt37VdYuSg
4569
+ _4H4culGvQ1Dp8myD2WdjQ3S6IGUumm_St2Zw0wwTTE,
4570
+ _YY93QxfadySKCpwmDM6dAIPqjH6q5NYi1I7q0CwP0w
4571
4571
  ];
4572
4572
 
4573
4573
  const assets = {
4574
- "/_nuxt/6IstVYrV.js": {
4575
- "type": "text/javascript; charset=utf-8",
4576
- "etag": "\"e90-QSo0QKAvkvHEus5Dhcj+CyKCqD4\"",
4577
- "mtime": "2026-09-06T10:58:49.045Z",
4578
- "size": 3728,
4579
- "path": "../public/_nuxt/6IstVYrV.js"
4580
- },
4581
4574
  "/_nuxt/BDNMzG2s.js": {
4582
4575
  "type": "text/javascript; charset=utf-8",
4583
4576
  "etag": "\"54-MasMfSk/A98C3Gn9uIOxtFxkWNw\"",
4584
- "mtime": "2026-09-06T10:58:49.045Z",
4577
+ "mtime": "2026-09-06T17:42:02.389Z",
4585
4578
  "size": 84,
4586
4579
  "path": "../public/_nuxt/BDNMzG2s.js"
4587
4580
  },
4588
- "/_nuxt/BXXtFil5.js": {
4581
+ "/_nuxt/BW3xJdEx.js": {
4589
4582
  "type": "text/javascript; charset=utf-8",
4590
- "etag": "\"1bd2-NDdun38lYj0OD2wayMdetDX3ehc\"",
4591
- "mtime": "2026-09-06T10:58:49.045Z",
4592
- "size": 7122,
4593
- "path": "../public/_nuxt/BXXtFil5.js"
4583
+ "etag": "\"2da-zDmvCG/tLW/peRiDRHBkm+3Edw4\"",
4584
+ "mtime": "2026-09-06T17:42:02.389Z",
4585
+ "size": 730,
4586
+ "path": "../public/_nuxt/BW3xJdEx.js"
4594
4587
  },
4595
- "/_nuxt/BZuUK3cr.js": {
4588
+ "/_nuxt/Bzmuhhqm.js": {
4596
4589
  "type": "text/javascript; charset=utf-8",
4597
- "etag": "\"d4e-rtWL1k144ZrYuBUrIE7FN7q4gDI\"",
4598
- "mtime": "2026-09-06T10:58:49.045Z",
4590
+ "etag": "\"d4e-gP63vGSa9YNUx8rX9IMYEHDofck\"",
4591
+ "mtime": "2026-09-06T17:42:02.389Z",
4599
4592
  "size": 3406,
4600
- "path": "../public/_nuxt/BZuUK3cr.js"
4593
+ "path": "../public/_nuxt/Bzmuhhqm.js"
4601
4594
  },
4602
- "/_nuxt/BW3xJdEx.js": {
4595
+ "/_nuxt/CJmYvhe6.js": {
4603
4596
  "type": "text/javascript; charset=utf-8",
4604
- "etag": "\"2da-zDmvCG/tLW/peRiDRHBkm+3Edw4\"",
4605
- "mtime": "2026-09-06T10:58:49.045Z",
4606
- "size": 730,
4607
- "path": "../public/_nuxt/BW3xJdEx.js"
4597
+ "etag": "\"e90-WCRBrvGTpCy77xWxtXI2/olAzuA\"",
4598
+ "mtime": "2026-09-06T17:42:02.389Z",
4599
+ "size": 3728,
4600
+ "path": "../public/_nuxt/CJmYvhe6.js"
4608
4601
  },
4609
- "/_nuxt/BeLyMmd4.js": {
4602
+ "/_nuxt/CMk5jOCS.js": {
4610
4603
  "type": "text/javascript; charset=utf-8",
4611
- "etag": "\"1c1-HX03BAMzK3TbabTUt+zazZac6jY\"",
4612
- "mtime": "2026-09-06T10:58:49.045Z",
4613
- "size": 449,
4614
- "path": "../public/_nuxt/BeLyMmd4.js"
4604
+ "etag": "\"1c01-lGS5cFf7bjhmRvkeRxUtYYhz3dw\"",
4605
+ "mtime": "2026-09-06T17:42:02.389Z",
4606
+ "size": 7169,
4607
+ "path": "../public/_nuxt/CMk5jOCS.js"
4615
4608
  },
4616
- "/_nuxt/9C5WUlLE.js": {
4609
+ "/_nuxt/DJQqUjJu.js": {
4617
4610
  "type": "text/javascript; charset=utf-8",
4618
- "etag": "\"76057-x5s6sLzHAii+nwAfxpSA3vSHenw\"",
4619
- "mtime": "2026-09-06T10:58:49.046Z",
4620
- "size": 483415,
4621
- "path": "../public/_nuxt/9C5WUlLE.js"
4611
+ "etag": "\"9f1d-Ja0Ka8FFBfh/wxDphcm6zq2k/Aw\"",
4612
+ "mtime": "2026-09-06T17:42:02.389Z",
4613
+ "size": 40733,
4614
+ "path": "../public/_nuxt/DJQqUjJu.js"
4622
4615
  },
4623
- "/_nuxt/C_VgD9ZI.js": {
4616
+ "/_nuxt/DfJzPSBi.js": {
4624
4617
  "type": "text/javascript; charset=utf-8",
4625
- "etag": "\"16e9b-CaBNJIMBZbSuSxfSRmsiBioAcZc\"",
4626
- "mtime": "2026-09-06T10:58:49.045Z",
4627
- "size": 93851,
4628
- "path": "../public/_nuxt/C_VgD9ZI.js"
4618
+ "etag": "\"1c1-4bfhhLtFN8RKoheWCeIIphoXgv0\"",
4619
+ "mtime": "2026-09-06T17:42:02.389Z",
4620
+ "size": 449,
4621
+ "path": "../public/_nuxt/DfJzPSBi.js"
4629
4622
  },
4630
- "/_nuxt/error-404.CHsn7XF-.css": {
4623
+ "/_nuxt/error-404.1qC5mjOI.css": {
4631
4624
  "type": "text/css; charset=utf-8",
4632
- "etag": "\"97d-2Jv1I5SVRWWiHcs7d0fjdFylhP4\"",
4633
- "mtime": "2026-09-06T10:58:49.046Z",
4625
+ "etag": "\"97d-ClY1xVMSVUOi3w+npB6k6oGQGlM\"",
4626
+ "mtime": "2026-09-06T17:42:02.389Z",
4634
4627
  "size": 2429,
4635
- "path": "../public/_nuxt/error-404.CHsn7XF-.css"
4628
+ "path": "../public/_nuxt/error-404.1qC5mjOI.css"
4636
4629
  },
4637
- "/_nuxt/error-500.Bawx2bLr.css": {
4630
+ "/_nuxt/error-500.BcOmuN7K.css": {
4638
4631
  "type": "text/css; charset=utf-8",
4639
- "etag": "\"772-1WbEnJKsOodm+94L4M1TNGEMGdA\"",
4640
- "mtime": "2026-09-06T10:58:49.046Z",
4632
+ "etag": "\"772-O0XjmZiN9Tmmh4xccNArXpeMXMg\"",
4633
+ "mtime": "2026-09-06T17:42:02.390Z",
4641
4634
  "size": 1906,
4642
- "path": "../public/_nuxt/error-500.Bawx2bLr.css"
4635
+ "path": "../public/_nuxt/error-500.BcOmuN7K.css"
4643
4636
  },
4644
- "/_nuxt/builds/latest.json": {
4645
- "type": "application/json",
4646
- "etag": "\"47-A62hsqMqrttpShO9U5Ab+nBZHXY\"",
4647
- "mtime": "2026-09-06T10:58:49.041Z",
4648
- "size": 71,
4649
- "path": "../public/_nuxt/builds/latest.json"
4637
+ "/_nuxt/EBA28doP.js": {
4638
+ "type": "text/javascript; charset=utf-8",
4639
+ "etag": "\"25526-S2M2g51QVQiD0lfERMcQ2TJCNvo\"",
4640
+ "mtime": "2026-09-06T17:42:02.389Z",
4641
+ "size": 152870,
4642
+ "path": "../public/_nuxt/EBA28doP.js"
4650
4643
  },
4651
- "/_nuxt/entry.b3_DJTEt.css": {
4644
+ "/_nuxt/entry.CKteCcdN.css": {
4652
4645
  "type": "text/css; charset=utf-8",
4653
- "etag": "\"2fd30-a1fPhKsI3m5s3WkUz/aQvIKj6Ow\"",
4654
- "mtime": "2026-09-06T10:58:49.046Z",
4655
- "size": 195888,
4656
- "path": "../public/_nuxt/entry.b3_DJTEt.css"
4646
+ "etag": "\"300c8-0WAu9DRw8xrNZdnpJNGrjxOdjtk\"",
4647
+ "mtime": "2026-09-06T17:42:02.389Z",
4648
+ "size": 196808,
4649
+ "path": "../public/_nuxt/entry.CKteCcdN.css"
4657
4650
  },
4658
- "/_nuxt/DMg0j7gv.js": {
4651
+ "/_nuxt/sK9Xse3o.js": {
4659
4652
  "type": "text/javascript; charset=utf-8",
4660
- "etag": "\"25529-MrmjBHZKW5MJ6UC+MAR50nTTq7U\"",
4661
- "mtime": "2026-09-06T10:58:49.046Z",
4662
- "size": 152873,
4663
- "path": "../public/_nuxt/DMg0j7gv.js"
4653
+ "etag": "\"16ebc-llACAH/LeVfHtbCyV/Od8ae+rn8\"",
4654
+ "mtime": "2026-09-06T17:42:02.390Z",
4655
+ "size": 93884,
4656
+ "path": "../public/_nuxt/sK9Xse3o.js"
4657
+ },
4658
+ "/_nuxt/builds/latest.json": {
4659
+ "type": "application/json",
4660
+ "etag": "\"47-y/Uibk2CT3wmZ2jWKLpHXHWksOc\"",
4661
+ "mtime": "2026-09-06T17:42:02.382Z",
4662
+ "size": 71,
4663
+ "path": "../public/_nuxt/builds/latest.json"
4664
4664
  },
4665
- "/_nuxt/DB5Vxbte.js": {
4665
+ "/_nuxt/rWsrwf2L.js": {
4666
4666
  "type": "text/javascript; charset=utf-8",
4667
- "etag": "\"9f1f-lZvm375DqcFM+vOcKc2rvEVowVM\"",
4668
- "mtime": "2026-09-06T10:58:49.045Z",
4669
- "size": 40735,
4670
- "path": "../public/_nuxt/DB5Vxbte.js"
4667
+ "etag": "\"7606d-30wm5zPsBwgXACgEnaCLHx2ZHVk\"",
4668
+ "mtime": "2026-09-06T17:42:02.390Z",
4669
+ "size": 483437,
4670
+ "path": "../public/_nuxt/rWsrwf2L.js"
4671
4671
  },
4672
- "/_nuxt/builds/meta/4c307968-4837-497b-a570-d6ee336accc4.json": {
4672
+ "/_nuxt/builds/meta/bc384f67-a2f8-4b6b-9aa1-cb68fb93d366.json": {
4673
4673
  "type": "application/json",
4674
- "etag": "\"58-vdwrkuxkvo48U14qzidl95rF2gw\"",
4675
- "mtime": "2026-09-06T10:58:49.040Z",
4674
+ "etag": "\"58-t+Qo1Xc7SXVzy2SU0Q6z9Np3At0\"",
4675
+ "mtime": "2026-09-06T17:42:02.343Z",
4676
4676
  "size": 88,
4677
- "path": "../public/_nuxt/builds/meta/4c307968-4837-497b-a570-d6ee336accc4.json"
4677
+ "path": "../public/_nuxt/builds/meta/bc384f67-a2f8-4b6b-9aa1-cb68fb93d366.json"
4678
4678
  }
4679
4679
  };
4680
4680
 
@@ -4821,7 +4821,7 @@ function getAsset (id) {
4821
4821
 
4822
4822
  const METHODS = /* @__PURE__ */ new Set(["HEAD", "GET"]);
4823
4823
  const EncodingMap = { gzip: ".gz", br: ".br" };
4824
- const _tlswgW = eventHandler((event) => {
4824
+ const _WmhSKo = eventHandler((event) => {
4825
4825
  if (event.method && !METHODS.has(event.method)) {
4826
4826
  return;
4827
4827
  }
@@ -4885,14 +4885,14 @@ const _tlswgW = eventHandler((event) => {
4885
4885
  return readAsset(id);
4886
4886
  });
4887
4887
 
4888
- const _v67BtD = defineEventHandler((event) => {
4888
+ const _bZ6qrV = defineEventHandler((event) => {
4889
4889
  if (!isAllowedHost(getRequestHeader(event, "host"), expectedPort(process.env))) {
4890
4890
  setResponseStatus(event, 403);
4891
4891
  return { error: "Host not allowed" };
4892
4892
  }
4893
4893
  });
4894
4894
 
4895
- const _5cPz3u = defineEventHandler((event) => {
4895
+ const _IXLPhU = defineEventHandler((event) => {
4896
4896
  var _a;
4897
4897
  const method = event.method.toUpperCase();
4898
4898
  if (method === "GET" || method === "HEAD" || method === "OPTIONS") return;
@@ -4915,33 +4915,33 @@ const _5cPz3u = defineEventHandler((event) => {
4915
4915
 
4916
4916
  const _SxA8c9 = defineEventHandler(() => {});
4917
4917
 
4918
- const _lazy_qOPFff = () => import('../routes/api/_..._.mjs');
4919
- const _lazy_Sow6wq = () => import('../routes/api/health.get.mjs');
4920
- const _lazy_iUT6p9 = () => import('../routes/api/skills.get.mjs');
4921
- const _lazy_N1Eb6F = () => import('../routes/api/skills/_id_.get.mjs');
4922
- const _lazy_gDlnHU = () => import('../routes/api/skills/_id_.put.mjs');
4923
- const _lazy_WLPUzg = () => import('../routes/api/skills/_id/file.get.mjs');
4924
- const _lazy_BDJKLn = () => import('../routes/api/skills/delete.post.mjs');
4925
- const _lazy_5j2vs5 = () => import('../routes/api/skills/quarantine.post.mjs');
4926
- const _lazy_p56u7_ = () => import('../routes/api/skills/restore.post.mjs');
4927
- const _lazy_U5uhtF = () => import('../routes/renderer.mjs');
4918
+ const _lazy_i3xXvc = () => import('../routes/api/_..._.mjs');
4919
+ const _lazy_ODywhX = () => import('../routes/api/health.get.mjs');
4920
+ const _lazy_QLBXsz = () => import('../routes/api/skills.get.mjs');
4921
+ const _lazy_phqsH7 = () => import('../routes/api/skills/_id_.get.mjs');
4922
+ const _lazy_E5xWx6 = () => import('../routes/api/skills/_id_.put.mjs');
4923
+ const _lazy_zp4eSy = () => import('../routes/api/skills/_id/file.get.mjs');
4924
+ const _lazy_GSqKbk = () => import('../routes/api/skills/delete.post.mjs');
4925
+ const _lazy_8aROGo = () => import('../routes/api/skills/quarantine.post.mjs');
4926
+ const _lazy_Z7y_Vb = () => import('../routes/api/skills/restore.post.mjs');
4927
+ const _lazy_ZyvLhi = () => import('../routes/renderer.mjs');
4928
4928
 
4929
4929
  const handlers = [
4930
- { route: '', handler: _tlswgW, lazy: false, middleware: true, method: undefined },
4931
- { route: '', handler: _v67BtD, lazy: false, middleware: true, method: undefined },
4932
- { route: '', handler: _5cPz3u, lazy: false, middleware: true, method: undefined },
4933
- { route: '/api/**', handler: _lazy_qOPFff, lazy: true, middleware: false, method: undefined },
4934
- { route: '/api/health', handler: _lazy_Sow6wq, lazy: true, middleware: false, method: "get" },
4935
- { route: '/api/skills', handler: _lazy_iUT6p9, lazy: true, middleware: false, method: "get" },
4936
- { route: '/api/skills/:id', handler: _lazy_N1Eb6F, lazy: true, middleware: false, method: "get" },
4937
- { route: '/api/skills/:id', handler: _lazy_gDlnHU, lazy: true, middleware: false, method: "put" },
4938
- { route: '/api/skills/:id/file', handler: _lazy_WLPUzg, lazy: true, middleware: false, method: "get" },
4939
- { route: '/api/skills/delete', handler: _lazy_BDJKLn, lazy: true, middleware: false, method: "post" },
4940
- { route: '/api/skills/quarantine', handler: _lazy_5j2vs5, lazy: true, middleware: false, method: "post" },
4941
- { route: '/api/skills/restore', handler: _lazy_p56u7_, lazy: true, middleware: false, method: "post" },
4942
- { route: '/__nuxt_error', handler: _lazy_U5uhtF, lazy: true, middleware: false, method: undefined },
4930
+ { route: '', handler: _WmhSKo, lazy: false, middleware: true, method: undefined },
4931
+ { route: '', handler: _bZ6qrV, lazy: false, middleware: true, method: undefined },
4932
+ { route: '', handler: _IXLPhU, lazy: false, middleware: true, method: undefined },
4933
+ { route: '/api/**', handler: _lazy_i3xXvc, lazy: true, middleware: false, method: undefined },
4934
+ { route: '/api/health', handler: _lazy_ODywhX, lazy: true, middleware: false, method: "get" },
4935
+ { route: '/api/skills', handler: _lazy_QLBXsz, lazy: true, middleware: false, method: "get" },
4936
+ { route: '/api/skills/:id', handler: _lazy_phqsH7, lazy: true, middleware: false, method: "get" },
4937
+ { route: '/api/skills/:id', handler: _lazy_E5xWx6, lazy: true, middleware: false, method: "put" },
4938
+ { route: '/api/skills/:id/file', handler: _lazy_zp4eSy, lazy: true, middleware: false, method: "get" },
4939
+ { route: '/api/skills/delete', handler: _lazy_GSqKbk, lazy: true, middleware: false, method: "post" },
4940
+ { route: '/api/skills/quarantine', handler: _lazy_8aROGo, lazy: true, middleware: false, method: "post" },
4941
+ { route: '/api/skills/restore', handler: _lazy_Z7y_Vb, lazy: true, middleware: false, method: "post" },
4942
+ { route: '/__nuxt_error', handler: _lazy_ZyvLhi, lazy: true, middleware: false, method: undefined },
4943
4943
  { route: '/__nuxt_island/**', handler: _SxA8c9, lazy: false, middleware: false, method: undefined },
4944
- { route: '/**', handler: _lazy_U5uhtF, lazy: true, middleware: false, method: undefined }
4944
+ { route: '/**', handler: _lazy_ZyvLhi, lazy: true, middleware: false, method: undefined }
4945
4945
  ];
4946
4946
 
4947
4947
  function createNitroApp() {
@@ -185,7 +185,7 @@ function encodeForwardSlashes(str) {
185
185
 
186
186
  const renderSSRHeadOptions = {"omitLineBreaks":true};
187
187
 
188
- const entryFileName = "9C5WUlLE.js";
188
+ const entryFileName = "rWsrwf2L.js";
189
189
 
190
190
  //#region src/runtime/handlers/renderer.ts
191
191
  globalThis.__buildAssetsURL = buildAssetsURL;
@@ -1,3 +1,3 @@
1
- const client_precomputed = ((h,j,k,m,o,q,u,x,z,A)=>({dependencies:{"_C_VgD9ZI.js":{scripts:{},styles:{},preload:{"_C_VgD9ZI.js":h={resourceType:"script",module:true,prefetch:true,preload:true,file:"C_VgD9ZI.js",name:"nuxt"}},prefetch:{}},"_BW3xJdEx.js":{scripts:{},styles:{},preload:{"_BW3xJdEx.js":j={resourceType:"script",module:true,prefetch:true,preload:true,file:"BW3xJdEx.js",name:"defu"}},prefetch:{}},"_DB5Vxbte.js":{scripts:{},styles:{},preload:{"_DB5Vxbte.js":k={resourceType:"script",module:true,prefetch:true,preload:true,file:"DB5Vxbte.js",name:"ready",imports:["_C_VgD9ZI.js","_BW3xJdEx.js"]},"_C_VgD9ZI.js":h,"_BW3xJdEx.js":j},prefetch:{}},"_BXXtFil5.js":{scripts:{},styles:{},preload:{"_BXXtFil5.js":m={resourceType:"script",module:true,prefetch:true,preload:true,file:"BXXtFil5.js",name:"config",imports:["_C_VgD9ZI.js","_BW3xJdEx.js"]},"_C_VgD9ZI.js":h,"_BW3xJdEx.js":j},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":{scripts:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q={resourceType:"script",module:true,prefetch:true,preload:true,file:"9C5WUlLE.js",name:"entry",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js",isEntry:true,imports:["_C_VgD9ZI.js","_DB5Vxbte.js","_BW3xJdEx.js","_BXXtFil5.js"],dynamicImports:o=["../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-404.vue","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-500.vue"],css:["entry.b3_DJTEt.css"]}},styles:{"entry.b3_DJTEt.css":u={file:"entry.b3_DJTEt.css",resourceType:"style",prefetch:true,preload:true}},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q,"entry.b3_DJTEt.css":u,"_C_VgD9ZI.js":h,"_DB5Vxbte.js":k,"_BW3xJdEx.js":j,"_BXXtFil5.js":m},prefetch:{"entry.b3_DJTEt.css":u}},"_BDNMzG2s.js":{scripts:{},styles:{},preload:{"_BDNMzG2s.js":x={resourceType:"script",module:true,prefetch:true,preload:true,file:"BDNMzG2s.js",name:"_plugin-vue_export-helper"}},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-404.vue":{scripts:{},styles:{"error-404.CHsn7XF-.css":z={file:"error-404.CHsn7XF-.css",resourceType:"style",prefetch:true,preload:true},"entry.b3_DJTEt.css":u},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-404.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"6IstVYrV.js",name:"error-404",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-404.vue",isDynamicEntry:true,imports:["_C_VgD9ZI.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"],css:["error-404.CHsn7XF-.css"]},"error-404.CHsn7XF-.css":z,"_C_VgD9ZI.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q,"entry.b3_DJTEt.css":u,"_DB5Vxbte.js":k,"_BW3xJdEx.js":j,"_BXXtFil5.js":m,"_BDNMzG2s.js":x},prefetch:{"error-404.CHsn7XF-.css":z,"entry.b3_DJTEt.css":u}},"error-404.CHsn7XF-.css":{scripts:{},styles:{},preload:{"error-404.CHsn7XF-.css":z},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-500.vue":{scripts:{},styles:{"error-500.Bawx2bLr.css":A={file:"error-500.Bawx2bLr.css",resourceType:"style",prefetch:true,preload:true},"entry.b3_DJTEt.css":u},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-500.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"BZuUK3cr.js",name:"error-500",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-500.vue",isDynamicEntry:true,imports:["_C_VgD9ZI.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"],css:["error-500.Bawx2bLr.css"]},"error-500.Bawx2bLr.css":A,"_C_VgD9ZI.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q,"entry.b3_DJTEt.css":u,"_DB5Vxbte.js":k,"_BW3xJdEx.js":j,"_BXXtFil5.js":m,"_BDNMzG2s.js":x},prefetch:{"error-500.Bawx2bLr.css":A,"entry.b3_DJTEt.css":u}},"error-500.Bawx2bLr.css":{scripts:{},styles:{},preload:{"error-500.Bawx2bLr.css":A},prefetch:{}},"entry.b3_DJTEt.css":{scripts:{},styles:{},preload:{"entry.b3_DJTEt.css":u},prefetch:{}},"pages/index.vue":{scripts:{},styles:{"entry.b3_DJTEt.css":u},preload:{"pages/index.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"BeLyMmd4.js",name:"pages",src:"pages/index.vue",isDynamicEntry:true,imports:["_C_VgD9ZI.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"]},"_C_VgD9ZI.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q,"entry.b3_DJTEt.css":u,"_DB5Vxbte.js":k,"_BW3xJdEx.js":j,"_BXXtFil5.js":m,"_BDNMzG2s.js":x},prefetch:{"entry.b3_DJTEt.css":u}},"pages/skills/[id].vue":{scripts:{},styles:{"entry.b3_DJTEt.css":u},preload:{"pages/skills/[id].vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"DMg0j7gv.js",name:"_id_",src:"pages/skills/[id].vue",isDynamicEntry:true,imports:["_C_VgD9ZI.js","_DB5Vxbte.js","_BXXtFil5.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js"]},"_C_VgD9ZI.js":h,"_DB5Vxbte.js":k,"_BW3xJdEx.js":j,"_BXXtFil5.js":m,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q,"entry.b3_DJTEt.css":u},prefetch:{"entry.b3_DJTEt.css":u}}},entrypoints:["../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js"],modules:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-404.vue":{file:"6IstVYrV.js",resourceType:"script",mimeType:void 0,module:true},"error-404.CHsn7XF-.css":{file:"error-404.CHsn7XF-.css",resourceType:"style",mimeType:void 0,module:void 0},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-500.vue":{file:"BZuUK3cr.js",resourceType:"script",mimeType:void 0,module:true},"error-500.Bawx2bLr.css":{file:"error-500.Bawx2bLr.css",resourceType:"style",mimeType:void 0,module:void 0},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":{file:"9C5WUlLE.js",resourceType:"script",mimeType:void 0,module:true,dynamicImports:o},"entry.b3_DJTEt.css":{file:"entry.b3_DJTEt.css",resourceType:"style",mimeType:void 0,module:void 0},"_BDNMzG2s.js":{file:"BDNMzG2s.js",resourceType:"script",mimeType:void 0,module:true},"_BW3xJdEx.js":{file:"BW3xJdEx.js",resourceType:"script",mimeType:void 0,module:true},"_BXXtFil5.js":{file:"BXXtFil5.js",resourceType:"script",mimeType:void 0,module:true},"_C_VgD9ZI.js":{file:"C_VgD9ZI.js",resourceType:"script",mimeType:void 0,module:true},"_DB5Vxbte.js":{file:"DB5Vxbte.js",resourceType:"script",mimeType:void 0,module:true},"pages/index.vue":{file:"BeLyMmd4.js",resourceType:"script",mimeType:void 0,module:true},"pages/skills/[id].vue":{file:"DMg0j7gv.js",resourceType:"script",mimeType:void 0,module:true}}}))();
1
+ const client_precomputed = ((h,j,k,m,o,q,u,x,z,A)=>({dependencies:{"_sK9Xse3o.js":{scripts:{},styles:{},preload:{"_sK9Xse3o.js":h={resourceType:"script",module:true,prefetch:true,preload:true,file:"sK9Xse3o.js",name:"nuxt"}},prefetch:{}},"_BW3xJdEx.js":{scripts:{},styles:{},preload:{"_BW3xJdEx.js":j={resourceType:"script",module:true,prefetch:true,preload:true,file:"BW3xJdEx.js",name:"defu"}},prefetch:{}},"_DJQqUjJu.js":{scripts:{},styles:{},preload:{"_DJQqUjJu.js":k={resourceType:"script",module:true,prefetch:true,preload:true,file:"DJQqUjJu.js",name:"ready",imports:["_sK9Xse3o.js","_BW3xJdEx.js"]},"_sK9Xse3o.js":h,"_BW3xJdEx.js":j},prefetch:{}},"_CMk5jOCS.js":{scripts:{},styles:{},preload:{"_CMk5jOCS.js":m={resourceType:"script",module:true,prefetch:true,preload:true,file:"CMk5jOCS.js",name:"config",imports:["_sK9Xse3o.js","_BW3xJdEx.js"]},"_sK9Xse3o.js":h,"_BW3xJdEx.js":j},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":{scripts:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q={resourceType:"script",module:true,prefetch:true,preload:true,file:"rWsrwf2L.js",name:"entry",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js",isEntry:true,imports:["_sK9Xse3o.js","_DJQqUjJu.js","_BW3xJdEx.js","_CMk5jOCS.js"],dynamicImports:o=["../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-404.vue","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-500.vue"],css:["entry.CKteCcdN.css"]}},styles:{"entry.CKteCcdN.css":u={file:"entry.CKteCcdN.css",resourceType:"style",prefetch:true,preload:true}},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q,"entry.CKteCcdN.css":u,"_sK9Xse3o.js":h,"_DJQqUjJu.js":k,"_BW3xJdEx.js":j,"_CMk5jOCS.js":m},prefetch:{"entry.CKteCcdN.css":u}},"_BDNMzG2s.js":{scripts:{},styles:{},preload:{"_BDNMzG2s.js":x={resourceType:"script",module:true,prefetch:true,preload:true,file:"BDNMzG2s.js",name:"_plugin-vue_export-helper"}},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-404.vue":{scripts:{},styles:{"error-404.1qC5mjOI.css":z={file:"error-404.1qC5mjOI.css",resourceType:"style",prefetch:true,preload:true},"entry.CKteCcdN.css":u},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-404.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"CJmYvhe6.js",name:"error-404",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-404.vue",isDynamicEntry:true,imports:["_sK9Xse3o.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"],css:["error-404.1qC5mjOI.css"]},"error-404.1qC5mjOI.css":z,"_sK9Xse3o.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q,"entry.CKteCcdN.css":u,"_DJQqUjJu.js":k,"_BW3xJdEx.js":j,"_CMk5jOCS.js":m,"_BDNMzG2s.js":x},prefetch:{"error-404.1qC5mjOI.css":z,"entry.CKteCcdN.css":u}},"error-404.1qC5mjOI.css":{scripts:{},styles:{},preload:{"error-404.1qC5mjOI.css":z},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-500.vue":{scripts:{},styles:{"error-500.BcOmuN7K.css":A={file:"error-500.BcOmuN7K.css",resourceType:"style",prefetch:true,preload:true},"entry.CKteCcdN.css":u},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-500.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"Bzmuhhqm.js",name:"error-500",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-500.vue",isDynamicEntry:true,imports:["_sK9Xse3o.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"],css:["error-500.BcOmuN7K.css"]},"error-500.BcOmuN7K.css":A,"_sK9Xse3o.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q,"entry.CKteCcdN.css":u,"_DJQqUjJu.js":k,"_BW3xJdEx.js":j,"_CMk5jOCS.js":m,"_BDNMzG2s.js":x},prefetch:{"error-500.BcOmuN7K.css":A,"entry.CKteCcdN.css":u}},"error-500.BcOmuN7K.css":{scripts:{},styles:{},preload:{"error-500.BcOmuN7K.css":A},prefetch:{}},"entry.CKteCcdN.css":{scripts:{},styles:{},preload:{"entry.CKteCcdN.css":u},prefetch:{}},"pages/index.vue":{scripts:{},styles:{"entry.CKteCcdN.css":u},preload:{"pages/index.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"DfJzPSBi.js",name:"pages",src:"pages/index.vue",isDynamicEntry:true,imports:["_sK9Xse3o.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"]},"_sK9Xse3o.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q,"entry.CKteCcdN.css":u,"_DJQqUjJu.js":k,"_BW3xJdEx.js":j,"_CMk5jOCS.js":m,"_BDNMzG2s.js":x},prefetch:{"entry.CKteCcdN.css":u}},"pages/skills/[id].vue":{scripts:{},styles:{"entry.CKteCcdN.css":u},preload:{"pages/skills/[id].vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"EBA28doP.js",name:"_id_",src:"pages/skills/[id].vue",isDynamicEntry:true,imports:["_sK9Xse3o.js","_DJQqUjJu.js","_CMk5jOCS.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js"]},"_sK9Xse3o.js":h,"_DJQqUjJu.js":k,"_BW3xJdEx.js":j,"_CMk5jOCS.js":m,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q,"entry.CKteCcdN.css":u},prefetch:{"entry.CKteCcdN.css":u}}},entrypoints:["../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js"],modules:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-404.vue":{file:"CJmYvhe6.js",resourceType:"script",mimeType:void 0,module:true},"error-404.1qC5mjOI.css":{file:"error-404.1qC5mjOI.css",resourceType:"style",mimeType:void 0,module:void 0},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-500.vue":{file:"Bzmuhhqm.js",resourceType:"script",mimeType:void 0,module:true},"error-500.BcOmuN7K.css":{file:"error-500.BcOmuN7K.css",resourceType:"style",mimeType:void 0,module:void 0},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":{file:"rWsrwf2L.js",resourceType:"script",mimeType:void 0,module:true,dynamicImports:o},"entry.CKteCcdN.css":{file:"entry.CKteCcdN.css",resourceType:"style",mimeType:void 0,module:void 0},"_BDNMzG2s.js":{file:"BDNMzG2s.js",resourceType:"script",mimeType:void 0,module:true},"_BW3xJdEx.js":{file:"BW3xJdEx.js",resourceType:"script",mimeType:void 0,module:true},"_CMk5jOCS.js":{file:"CMk5jOCS.js",resourceType:"script",mimeType:void 0,module:true},"_DJQqUjJu.js":{file:"DJQqUjJu.js",resourceType:"script",mimeType:void 0,module:true},"_sK9Xse3o.js":{file:"sK9Xse3o.js",resourceType:"script",mimeType:void 0,module:true},"pages/index.vue":{file:"DfJzPSBi.js",resourceType:"script",mimeType:void 0,module:true},"pages/skills/[id].vue":{file:"EBA28doP.js",resourceType:"script",mimeType:void 0,module:true}}}))();
2
2
 
3
3
  export { client_precomputed as default };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shelfware-prod",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
package/README.md CHANGED
@@ -24,7 +24,7 @@ Skills outside your home directory (project-level `.claude/skills` inside a repo
24
24
 
25
25
  - **`npx shelfware` prints "coming soon".** Your npx cache still holds the `0.0.1` placeholder. Run `npx shelfware@latest` once; npx then caches the real release.
26
26
  - **The browser did not open.** Copy the URL from the `shelfware at http://127.0.0.1:<port>` line, or start with `--no-open` and open it yourself.
27
- - **Port in use.** Pass `--port <n>`; without it shelfware tries 3781 through 3800.
27
+ - **Port in use.** An explicit `--port <n>` that is taken is refused at once with a one-line message; without either the flag or PORT shelfware tries 3781 through 3800. A typo in a flag prints the message and the help text instead of a stack trace.
28
28
  - **The catalog is empty.** Check that your skills live under `$HOME/.<tool>/skills`; other locations are not scanned yet.
29
29
 
30
30
  ## What you get
@@ -42,6 +42,16 @@ Skills outside your home directory (project-level `.claude/skills` inside a repo
42
42
  - No CORS headers, ever. File reads and saves are contained to the skill's directory; symlinks are never followed for destructive actions.
43
43
  - Nothing leaves the machine. There is no network feature.
44
44
 
45
+ ## Security scanners
46
+
47
+ Supply-chain scanners such as Socket.dev raise a few alerts on this package. None of them is shelfware's own code; all come from the prebuilt Nuxt server that ships in `.output/`:
48
+
49
+ - **"Obfuscated code"** in `entities/…/decode-data-html.js`: the HTML entity table of the `entities` library, stored as Base64 and decoded into a `Uint16Array` at load time. Byte-identical to the published `entities` package.
50
+ - **"Dynamic code execution"** in `source-map-js` and the Vue compiler: `new Function` used by a sort routine and by Vue's template compiler. shelfware never compiles templates at runtime (`ssr: false`, no runtime compiler).
51
+ - **"URL strings"**: the Iconify API hosts baked into `@nuxt/icon` (the provider is disabled and every icon is bundled), XML namespaces, documentation links in framework error messages, and file names such as `SKILL.md` that merely contain a dot.
52
+
53
+ The launcher itself uses only Node built-ins, binds `127.0.0.1`, spawns nothing but your browser opener, and has no `preinstall`/`install`/`postinstall` scripts. `pnpm pack:verify` packs and runs the exact tarball through `npx` before every release, refusing to run against a stale build, and releases are published from GitHub Actions with npm provenance.
54
+
45
55
  ## Credits
46
56
 
47
57
  Scanner rules, audit heuristics and the quarantine format are ported from [skill-cabinet](https://github.com/subsy/skill-cabinet) (MIT), whose audit rules were adapted from [Adaptive Skills](https://github.com/wangsoft/Adaptive-Skills) (MIT). shelfware is a rebuild in Nuxt 4 with an editor and a hardened local security model.
@@ -0,0 +1,54 @@
1
+ // Types for bin/launch.mjs. Hand-written: keep every export here in step with the .mjs.
2
+
3
+ export const DEFAULT_PORT: 3781
4
+ export const PORT_ATTEMPTS: 20
5
+ export const HOST: '127.0.0.1'
6
+ export const TOKEN_ENV: 'NUXT_PUBLIC_SHELFWARE_TOKEN'
7
+ export const HELP: string
8
+
9
+ export type Env = Record<string, string | undefined>
10
+
11
+ export interface ParsedArgs {
12
+ help: boolean
13
+ port: number | null
14
+ open: boolean
15
+ }
16
+
17
+ /** The subset of child_process.spawn the launcher relies on, so tests can pass a stub. */
18
+ export type SpawnLike = (
19
+ cmd: string,
20
+ args: string[],
21
+ options: { stdio: 'ignore', detached: true, env: Env },
22
+ ) => { unref?: () => void, on?: (event: 'error', listener: (err: Error) => unknown) => unknown }
23
+
24
+ export interface LaunchOptions {
25
+ argv?: string[]
26
+ env?: Env
27
+ importServer: () => Promise<unknown>
28
+ log?: (line: string) => void
29
+ exit?: (code: number) => unknown
30
+ entry?: string
31
+ spawn?: SpawnLike
32
+ }
33
+
34
+ export function makeToken(): string
35
+ export function parseArgs(argv?: string[], env?: Env): ParsedArgs
36
+ export function portReason(code: string): string
37
+ export function checkPort(port: number, host?: string): Promise<string | null>
38
+ export function isPortFree(port: number, host?: string): Promise<boolean>
39
+ export function pickPort(start?: number, options?: { attempts?: number, host?: string }): Promise<number>
40
+ export function probeHealth(port: number, host?: string): Promise<boolean>
41
+ export function waitForHealth(
42
+ port: number,
43
+ options?: {
44
+ timeoutMs?: number
45
+ intervalMs?: number
46
+ host?: string
47
+ probe?: (port: number, host: string) => Promise<boolean>
48
+ signal?: AbortSignal
49
+ },
50
+ ): Promise<boolean>
51
+ export function openBrowser(url: string, options?: { platform?: string, spawn?: SpawnLike, env?: Env }): { cmd: string, args: string[] }
52
+ export function serverEntry(binDir?: string): string
53
+ export function describeError(err: unknown): string
54
+ export function launch(options: LaunchOptions): Promise<{ port: number, url: string } | null>