{"_id":"@_linked/server","_rev":"15-9fe62d79cd5b5cfe14fda36528f2a6e4","name":"@_linked/server","dist-tags":{"latest":"2.3.0"},"versions":{"1.0.8":{"name":"@_linked/server","version":"1.0.8","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@1.0.8","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"821dae8b6b2f7ce923b6a3c1449c242a2ecf169d","tarball":"https://registry.npmjs.org/@_linked/server/-/server-1.0.8.tgz","fileCount":13,"integrity":"sha512-YIdcJfxFlX6iQu0piBzbuQFV+VGg//gj7BOdTZlXK9iQGWWoe+O0dVB8Oe8y4gEl456ilCCdgkP4tHMMbI3ROg==","signatures":[{"sig":"MEQCIC1sXKjo6VlFWscHpr7ROFIbJ6elA3GNAw8htdZI+QQ1AiAkGNnp+V5SGOshg09gzA/FAHMi2ZIdHCDxQmhWRrpPpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17703},"main":"lib/cjs/index.js","types":"dist/lincd-server.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js","require":"./lib/cjs/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","require":"./lib/cjs/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","require":"./lib/cjs/*.js"}},"gitHead":"8bf145fa4a1886ef2c1d48ff7f0b5e8af84a9821","scripts":{"build":"yarn linked build","start":"npm exec linked dev","postpublish":"npm exec linked register","prepublishOnly":"yarn linked build production"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","lincd-sioc":"~1.0","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"~1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.2.5","cross-env":"^7.0.3","@types/node":"^20.12.7","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.0.8_1776893374659_0.35912151333723763","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@_linked/server","version":"2.0.0","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.0.0","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"756e2baeef2e5904ac80086e4f856673af34f425","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.0.0.tgz","fileCount":13,"integrity":"sha512-Rx8LHl02xoJU38QWZY+p5YpDNWoJL6Ig8icyuXJU6xMeYU883SeUhkyPacSSEO+KbL+vYJh04pNjh/PgGWPZ4w==","signatures":[{"sig":"MEUCIQDh83rjFHlZCHC2RcB2UppsZ9SUhnRdxemewYm2c7Z4cgIgK4044Vdy57+V7LOTT7IUzPi9q6ldyAzLcne43Rqg/E4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19977},"main":"lib/cjs/index.js","types":"dist/lincd-server.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js","require":"./lib/cjs/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","require":"./lib/cjs/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","require":"./lib/cjs/*.js"}},"gitHead":"20339a2ce7a691af2c83ca8733f778afe47c6a31","scripts":{"build":"yarn linked build","start":"npm exec linked dev","postpublish":"npm exec linked register","prepublishOnly":"yarn linked build production"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","lincd-sioc":"~1.0","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"~1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.2.5","cross-env":"^7.0.3","@types/node":"^20.12.7","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.0.0_1780830747725_0.8106665030498612","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@_linked/server","version":"2.0.1","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.0.1","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"98e75ab222ddb83e8f8bafe6c3ce568f8868af4a","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.0.1.tgz","fileCount":13,"integrity":"sha512-Q44qqQAkp3IBpsH9O2KiUsuKksGAlqfkqYxrOQJ78XfvsAxTJV5bp5sXY2Cx/Mu50D7Z7PJEnltJj0z0zHlFsA==","signatures":[{"sig":"MEYCIQCeiieGzRo+JH/BjknSklTho+ies5c92FT6FE7dh+z7mgIhAPNB3xebGHmYbOi87f9Y+/e20v0sbTNZyUsaF+Xqn2RZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20463},"main":"lib/cjs/index.js","types":"dist/lincd-server.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js","require":"./lib/cjs/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","require":"./lib/cjs/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","require":"./lib/cjs/*.js"}},"gitHead":"6940564d7cad0412fff9547f41c7940c75ac26c7","scripts":{"build":"yarn linked build","start":"npm exec linked dev","postpublish":"npm exec linked register","prepublishOnly":"yarn linked build production"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","lincd-sioc":"~1.0","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"~1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.2.5","cross-env":"^7.0.3","@types/node":"^20.12.7","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.0.1_1780831415034_0.4595327993464864","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@_linked/server","version":"2.0.2","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.0.2","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"a40c32f627b38e7b072d395cfbdda17d58ca13a7","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.0.2.tgz","fileCount":55,"integrity":"sha512-sxk/67m6qsI3H2nq29ebEG2lcDTUNaTA9TBkb00WuEo5U3+WwQtcm77qyoS4hKvk4MF22RYlJ6RM45z/QU2ugg==","signatures":[{"sig":"MEUCIEici3dw8bMrCDrvo3juETRLu8NABL/WzSxe+9iUNPpyAiEAjtLpC4rOzfmII2DAKLTR3lh3ujNPu40QV05dUKAzM1o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172546},"main":"lib/cjs/index.js","types":"dist/lincd-server.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js","require":"./lib/cjs/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","require":"./lib/cjs/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","require":"./lib/cjs/*.js"}},"gitHead":"9687aa7d68f6ad2e5ad3b65d9a6a4df80d07d3c0","scripts":{"build":"yarn linked build","start":"npm exec linked dev","postpublish":"npm exec linked register","prepublishOnly":"yarn linked build production"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","lincd-sioc":"~1.0","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"~1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.2.5","cross-env":"^7.0.3","@types/node":"^20.12.7","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.0.2_1780831756559_0.12051729962539914","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"@_linked/server","version":"2.0.3","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.0.3","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"48055c40ef5b62d69913fa2a9892801c15556350","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.0.3.tgz","fileCount":101,"integrity":"sha512-hb3pm1R/ykKLkIWloc+MzH41K4gREEjmuMR3+rRoir9h52JlID11vB9/Hf2MPkOj2QzY7m30fV1jwAhlSnIaQA==","signatures":[{"sig":"MEUCIHyOzBLQH5EREcz1kWzUh38H5y9Zg46YKFWif9qNRYNtAiEA4cnz0DomkU+xIq+9zuXFjepfZneIuTX80a/myA4Ea48=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":354299},"main":"lib/cjs/index.js","types":"dist/lincd-server.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js","require":"./lib/cjs/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","require":"./lib/cjs/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","require":"./lib/cjs/*.js"}},"gitHead":"caf642e293c0bb62b590f4bc380b5fc468190390","scripts":{"build":"rimraf ./lib && yarn build-esm && yarn build-cjs && yarn copy-to-lib && yarn dual-package","start":"npm exec linked dev","build-cjs":"echo \"compiling CJS\" && rimraf ./lib/cjs && yarn tsc -p tsconfig-cjs.json","build-esm":"echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json","copy-to-lib":"echo 'copying CSS + JSON assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/esm && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/cjs","dual-package":"echo 'adding package.json to each lib folder for dual output support' && yarn tsconfig-to-dual-package ./tsconfig-cjs.json ./tsconfig-esm.json"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","lincd-sioc":"~1.0","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"~1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.2.5","copyfiles":"^2.4.1","cross-env":"^7.0.3","@types/node":"^20.12.7","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.0.3_1780835843447_0.18633510954794685","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@_linked/server","version":"2.1.0","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.1.0","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"2a83a74f4ba89b8b8aae2e8534de34da443960d7","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.1.0.tgz","fileCount":56,"integrity":"sha512-mySPGEqBsO7agC+rADVWC9v6HrGFodNwFF+iAASrnq6/wZ0/ZmcPckPPpEaP9kv8vj9Kus4KWk68yCqK8IhSPQ==","signatures":[{"sig":"MEQCIBrc+nCD0ZjZb6/1KnMISUltKbWx6yRHvo3zZN0a4GVGAiBABzdzNnxvFGgRgEQftvEthYaB5y8EnaUtfLICdMo4EQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":211942},"main":"lib/esm/index.js","type":"module","types":"./lib/esm/index.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js","development":"./src/index.ts"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","development":"./src/*.ts"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","development":"./src/*.ts"}},"gitHead":"55adbebaa1bd644ec1511e45cec0aa4e278e8621","scripts":{"build":"rimraf ./lib && yarn build-esm && yarn copy-to-lib","start":"npm exec linked dev","build-esm":"echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json","copy-to-lib":"echo 'copying CSS + JSON assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/esm"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"~1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.2.5","copyfiles":"^2.4.1","cross-env":"^7.0.3","@types/node":"^20.12.7","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.1.0_1783332085706_0.15640062686176348","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@_linked/server","version":"2.1.1","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.1.1","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"77f309c0325ef3c43b4921beb436093ef90a081d","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.1.1.tgz","fileCount":56,"integrity":"sha512-RUHmyzFRSzZbal0bNK8vq/Iu8lIU4MqvZ9+4qQFnb3TDJOmbl4Zly31iAg96J53Uc57icDtIEGQ7AGiz5cDJxg==","signatures":[{"sig":"MEQCIB1l0hqVy8RN21nF2DFM0v5QtZjxPozLdG4sX84K2SJTAiBInI6Oe6sfUs6OW37M5QHQ+w1pxx3Wev4/cwshW0fAHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":212235},"main":"lib/esm/index.js","type":"module","types":"./lib/esm/index.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js","development":"./src/index.ts"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","development":"./src/*.ts"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js","development":"./src/*.ts"}},"gitHead":"c693c69e6e1740185f5221107640f118394be20e","scripts":{"build":"rimraf ./lib && yarn build-esm && yarn copy-to-lib","start":"npm exec linked dev","build-esm":"echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json","copy-to-lib":"echo 'copying CSS + JSON assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/esm"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"~1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.2.5","copyfiles":"^2.4.1","cross-env":"^7.0.3","@types/node":"^20.12.7","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.1.1_1783357960051_0.9797249002116852","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@_linked/server","version":"2.1.2","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.1.2","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"c5cdc236f971f641500052e99705997e40525927","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.1.2.tgz","fileCount":56,"integrity":"sha512-FLqrAHpmXY5wAmKrzMvC+EYIRY/QnLJILyXfYgVzrnG+OTxDcqAmO2j3GjHpi0uudcS6ODRuh/ZTfeRao8+jPA==","signatures":[{"sig":"MEQCIDDOubh7kPwC9LDKBTqTQAtJToCQJoZRm+zXkevYyn8kAiB7SwDIG24jqz/wudvc3w05VeqL/Kp6TUVmliMSOwEu+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":212571},"main":"lib/esm/index.js","type":"module","types":"./lib/esm/index.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"}},"gitHead":"ea4ba54a970d98b2da06b40442537dde1297496e","scripts":{"build":"rimraf ./lib && yarn build-esm && yarn copy-to-lib","start":"npm exec linked dev","build-esm":"echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json","copy-to-lib":"echo 'copying CSS + JSON assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/esm"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"~1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.2.5","copyfiles":"^2.4.1","cross-env":"^7.0.3","@types/node":"^20.12.7","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.1.2_1783408461918_0.3778363656884296","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"@_linked/server","version":"2.1.3","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.1.3","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"115cd7389e5225359d2c643ae7a0583340cd4d17","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.1.3.tgz","fileCount":56,"integrity":"sha512-g+tQvblggP51plIkJQvQEc+1E95uU6yzU/xuQaK+sG7juLJelpNO66XWSGy2Ue1b0ZMEyG45UCcYlLh28vBkqg==","signatures":[{"sig":"MEYCIQCtbA60Zw8+1rHlN35O6121dBsbPVHVSt+2KPlfXN4EBQIhAIAkp0oIpawHErQCLXJOasFuQ1nE9Cs9brNNVYBSdhLy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":215368},"main":"lib/esm/index.js","type":"module","types":"./lib/esm/index.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"}},"gitHead":"49cf1a84f0a8b01c9162bbd5cae1c37c5d7cdb39","scripts":{"build":"rimraf ./lib && yarn build-esm && yarn copy-to-lib","start":"npm exec linked dev","build-esm":"echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json","copy-to-lib":"echo 'copying CSS + JSON assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/esm"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"~1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.2.5","copyfiles":"^2.4.1","cross-env":"^7.0.3","@types/node":"^20.12.7","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.1.3_1783842973593_0.020153792870115872","host":"s3://npm-registry-packages-npm-production"}},"2.1.4":{"name":"@_linked/server","version":"2.1.4","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.1.4","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"2062139c20c77b29c20a514533c36c03140c261c","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.1.4.tgz","fileCount":56,"integrity":"sha512-YLTvqoQMziPCBkgw7H8dImeshNvCwOtY8ao5XJJYwxSDjn6/gYje2cbheaUdbZhssQkmwmANbSWDiTpf1+cDng==","signatures":[{"sig":"MEYCIQDOOZ0o5Ger3NL3MR1HeWJsJJ3+GTwXzKKtmdk6iT+uXwIhANs2rl/Y9+rCJ4NzDATy0wVzFrLWLRNobHkGhzEW97rE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":215368},"main":"lib/esm/index.js","type":"module","types":"./lib/esm/index.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"}},"gitHead":"5cb9d4ee2e60a61594dcfc98a69c69a6e26e31c3","scripts":{"build":"rimraf ./lib && yarn build-esm && yarn copy-to-lib","start":"npm exec linked dev","build-esm":"echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json","copy-to-lib":"echo 'copying CSS + JSON assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/esm"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"^1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.2.5","copyfiles":"^2.4.1","cross-env":"^7.0.3","@types/node":"^20.12.7","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.1.4_1784217095779_0.8347048976261833","host":"s3://npm-registry-packages-npm-production"}},"2.1.5":{"name":"@_linked/server","version":"2.1.5","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.1.5","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"4fb289e73ec03bfbd500245b628875033c886c23","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.1.5.tgz","fileCount":56,"integrity":"sha512-RYzk9Q2l+qlW68jg7EfuFEZ8gFhDlWEo9Ni4dNEwRDQZAWFminsm2s5d0tHNnMXIlEuMC+W9w9dYrQ2b7oN8Ag==","signatures":[{"sig":"MEYCIQDAIB7bigvVfevevx9GWrxpO9M1mQs74fXsb/mbr3FoVgIhAMPm75kGhpLRTNAYaSuAu1GRrDiXLMhZaVcVQ0q7Y+7z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218903},"main":"lib/esm/index.js","type":"module","types":"./lib/esm/index.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"}},"gitHead":"ffb8cbf45c4fe7458743728ae60a860d91144a5f","scripts":{"build":"rimraf ./lib && yarn build-esm && yarn copy-to-lib","start":"npm exec linked dev","build-esm":"echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json","copy-to-lib":"echo 'copying CSS + JSON assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/esm"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"^1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.2.5","copyfiles":"^2.4.1","cross-env":"^7.0.3","@types/node":"^20.12.7","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.1.5_1788161095070_0.22409646154233798","host":"s3://npm-registry-packages-npm-production"}},"2.1.6":{"name":"@_linked/server","version":"2.1.6","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.1.6","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"b283676dcf09b5e7fec6e798031b8645ea6ea1e7","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.1.6.tgz","fileCount":61,"integrity":"sha512-M7DbaumDbxhB9hppP4R4I4gfQqpqzy/7McyXFRL0psSA80qxq5lLxwkacvbJjc7HfCsBB5MZvnwIGC6APAdPDg==","signatures":[{"sig":"MEQCIFNt5mgKvDiBlcWQpJvLIcOKTd2i9URD9R84YpnH7T15AiAhT8p6+XnLzaBprJM/Jw0Gdr9A/+7176+UsAtxMCS+oQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232726},"main":"lib/esm/index.js","type":"module","types":"./lib/esm/index.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"}},"gitHead":"a9129362addb57c386e9cdd93d4b02cd85193c50","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules npx jest --config jest.config.cjs","build":"rimraf ./lib && yarn build-esm && yarn copy-to-lib","start":"npm exec linked dev","build-esm":"echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json","copy-to-lib":"echo 'copying CSS + JSON assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/esm"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.2.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"^1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.4.12","prettier":"3.2.5","copyfiles":"^2.4.1","cross-env":"^7.0.3","@types/jest":"^29.5.14","@types/node":"^20.12.7","@jest/globals":"^29.7.0","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.1.6_1788163258621_0.6406692547618646","host":"s3://npm-registry-packages-npm-production"}},"2.1.7":{"name":"@_linked/server","version":"2.1.7","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.1.7","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"dist":{"shasum":"4020e351b9a5b5cacd7a170c9f1ddb2aa16d0156","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.1.7.tgz","fileCount":61,"integrity":"sha512-wGLM7uqT8a18FtaFNwNs62E+6NQ33YQ2h5l5EHmAiEpQpV/uNvjWotH0SaCcxmrJ232vjjoe1mKxsKHP6Q/GOg==","signatures":[{"sig":"MEUCIQDTjML8OF7buzdMpTwlf3BitipZXfb/iSZaf/pz3m3iHAIgU1xm1pNMso/+eoJkwjAipwr6mg6CuT0NbGwgIBMtc9U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233587},"main":"lib/esm/index.js","type":"module","types":"./lib/esm/index.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"}},"gitHead":"8a2cda6b5d997a321dec572c0a7978d44260e69e","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules npx jest --config jest.config.cjs","build":"rimraf ./lib && yarn build-esm && yarn copy-to-lib","start":"npm exec linked dev","build-esm":"echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json","copy-to-lib":"echo 'copying CSS + JSON assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/esm"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.17.0","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"^1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.4.12","prettier":"3.2.5","copyfiles":"^2.4.1","cross-env":"^7.0.3","@types/jest":"^29.5.14","@types/node":"^20.12.7","@jest/globals":"^29.7.0","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.1.7_1788177353245_0.6934831802371373","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@_linked/server","version":"2.2.0","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","_id":"@_linked/server@2.2.0","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"homepage":"https://github.com/linked-cm/server#readme","bugs":{"url":"https://github.com/linked-cm/server/issues"},"dist":{"shasum":"0554ef3f8378274942e8e6b492d649f28b332c74","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.2.0.tgz","fileCount":61,"integrity":"sha512-aZp0C8G4svbKjBwtMw1X4ktsyDfYVfS4Fx6kybf/RSPWvE4uEvGw7+Qq04ujpC8xGa1o5j4POu8Foy0KtBUMiw==","signatures":[{"sig":"MEYCIQCH/gYYo3jffWD5djjRmM3Hv/IPU8wpMNkxkV4RLYBk8gIhALkyAThyEuMwcYR00IAm5aJNTrgiDLsBT9ctC8nOlhJE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_linked%2fserver@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":243169},"main":"lib/esm/index.js","type":"module","types":"./lib/esm/index.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"}},"gitHead":"2db7c4f14bc8321e6d05507261d221ff45842cb1","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules npx jest --config jest.config.cjs","build":"rimraf ./lib && yarn build-esm && yarn copy-to-lib","start":"npm exec linked dev","build-esm":"echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json","copy-to-lib":"echo 'copying CSS + JSON assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/esm"},"_npmUser":{"name":"rene_reborn","email":"email@rene.life","approver":{"name":"rene_reborn","email":"email@rene.life"}},"repository":{"url":"git+https://github.com/linked-cm/server.git","type":"git"},"_npmVersion":"11.19.1","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.18.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"^1.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.4.12","prettier":"3.2.5","copyfiles":"^2.4.1","cross-env":"^7.0.3","@types/jest":"^29.5.14","@types/node":"^20.12.7","@jest/globals":"^29.7.0","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_2.2.0_1789398240486_0.7132500581290695","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"_id":"@_linked/server@2.3.0","bugs":{"url":"https://github.com/linked-cm/server/issues"},"dist":{"shasum":"7be4bb403b0e1dad52879735ad0287f17ba76eec","tarball":"https://registry.npmjs.org/@_linked/server/-/server-2.3.0.tgz","integrity":"sha512-X6F79zX2rDSMWaDqECEgfhi1ic6UJtk4uVQUo3CfaPAZXUqeaSihmrqXXtLZWaWjPVUM6mZrhqWPPQmRe0W6lg==","fileCount":61,"unpackedSize":247444,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_linked%2fserver@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC9A9RMqRj7Uu66fF6HMuOX7in8EQV311Yv0u6a6w9EiAIgSuqQMrdtYk/hCftF+51ZU4W+HGJxXsvOli/VUjKsUew="}]},"main":"lib/esm/index.js","name":"@_linked/server","type":"module","types":"./lib/esm/index.d.ts","author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"module":"lib/esm/index.js","exports":{".":{"types":"./lib/esm/index.d.ts","import":"./lib/esm/index.js"},"./*":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"},"./*.js":{"types":"./lib/esm/*.d.ts","import":"./lib/esm/*.js"}},"gitHead":"e62605fd32ca4950acebeb0aeba1b540cd4cf29f","license":"ISC","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules npx jest --config jest.config.cjs","build":"rimraf ./lib && yarn build-esm && yarn copy-to-lib","start":"npm exec linked dev","build-esm":"echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json","copy-to-lib":"echo 'copying CSS + JSON assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' 'src/**/*.json' lib/esm"},"version":"2.3.0","_npmUser":{"name":"rene_reborn","email":"email@rene.life","approver":{"name":"rene_reborn","email":"email@rene.life"}},"homepage":"https://github.com/linked-cm/server#readme","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"repository":{"url":"git+https://github.com/linked-cm/server.git","type":"git"},"_npmVersion":"11.19.1","description":"HTTP server & utilities for LINCD applications, running on node.js.","directories":{},"maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"_nodeVersion":"22.16.0","dependencies":{"n3":"^1.17.2","cors":"^2.8.5","cron":"^4.3.4","open":"^8.4.0","chalk":"4.1.2","react":"^18.2","sharp":"^0.34.4","rimraf":"^5.0.5","adm-zip":"^0.5.16","express":"^4.18.3","webpack":"^5.90.3","archiver":"^7.0.1","is-object":"^1.0.2","node-hook":"^1.0.0","react-dom":"^18.2","typescript":"^5.7.3","body-parser":"^1.20.2","compression":"^1.7.4","@_linked/cli":"^1.2","autoprefixer":"^10.4.18","fetch-cookie":"^3.1.0","tough-cookie":"^6.0.0","zip-a-folder":"^3.1.8","@_linked/core":"^2.18.1","node-addon-api":"^8.2.2","proper-lockfile":"^4.1.2","react-router-dom":"^6.22.3","react-error-boundary":"^4.0.13","@_linked/server-utils":"^1.2.0","webpack-dev-middleware":"^7.0.0","webpack-hot-middleware":"^2.26.1","tsconfig-to-dual-package":"^1.2.0"},"linkedPackage":true,"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["lib/esm/*"]}},"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.4.12","prettier":"3.2.5","copyfiles":"^2.4.1","cross-env":"^7.0.3","@types/jest":"^29.5.14","@types/node":"^20.12.7","@jest/globals":"^29.7.0","@changesets/cli":"^2.29.8","@types/react-dom":"^18.0.6","@changesets/changelog-github":"^0.5.2","typescript-plugin-css-modules":"^5.1.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/server_2.3.0_1789416532441_0.05577700749442327"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-22T21:29:34.549Z","modified":"2026-09-14T20:08:52.807Z","1.0.8":"2026-04-22T21:29:34.802Z","2.0.0":"2026-06-07T11:12:27.865Z","2.0.1":"2026-06-07T11:23:35.168Z","2.0.2":"2026-06-07T11:29:16.768Z","2.0.3":"2026-06-07T12:37:23.617Z","2.1.0":"2026-07-06T10:01:25.870Z","2.1.1":"2026-07-06T17:12:40.191Z","2.1.2":"2026-07-07T07:14:22.045Z","2.1.3":"2026-07-12T07:56:13.731Z","2.1.4":"2026-07-16T15:51:35.920Z","2.1.5":"2026-08-31T07:24:55.222Z","2.1.6":"2026-08-31T08:00:58.763Z","2.1.7":"2026-08-31T11:55:53.393Z","2.2.0":"2026-09-14T15:04:00.604Z","2.3.0":"2026-09-14T20:08:52.534Z"},"bugs":{"url":"https://github.com/linked-cm/server/issues"},"author":{"url":"https://github.com/flyon","name":"René Verheij","email":"rpwverheij@gmail.com"},"license":"ISC","homepage":"https://github.com/linked-cm/server#readme","keywords":["lincd","server","nodejs","express","linked data","interoperable","semantic web","web3"],"repository":{"url":"git+https://github.com/linked-cm/server.git","type":"git"},"description":"HTTP server & utilities for LINCD applications, running on node.js.","maintainers":[{"name":"rene_reborn","email":"email@rene.life"}],"readme":"# LINCD Server\n\nThis package provides a `LincdServer` which can be used to instantiate a LINCD backend environment on node.js.\n\nIf you use `npx lincd-cli create-app [name]` it will already set everything up for you to use `LincdServer`.\nTo see how it's used, open `your-site/backend/server.js`.\n\nIf you require any additional features, feel free to make a request at the LINCD Discord server.\nIf you want to further adjust the functionality of LincdServer yourself, either extend it or clone this repo locally.\n\n---\n\n## Table of contents\n\n- [Environment Variables](#environment-variables)\n- [Calling methods on the backend](#calling-methods-on-the-backend)\n  - [Shape providers](#shape-providers)\n  - [Generic backend providers](#generic-backend-providers)\n  - [Gotchas](#gotchas)\n  - [Error semantics](#error-semantics)\n- [API-only servers (`server.apiOnly`)](#api-only-servers-serverapionly)\n- [Provider lifecycle and HMR](#provider-lifecycle-and-hmr)\n  - [When to implement `dispose()`](#when-to-implement-dispose)\n  - [Route tracking helpers](#route-tracking-helpers)\n  - [Examples](#examples)\n- [Shapes](#shapes)\n  - [LocalFileStore](#localfilestore)\n- [TODO](#todo)\n\n---\n\n## Environment Variables\n\n```properties\n# The port on which the server will listen\nPORT=3000\n\n# A descriptive URI for where the app's data can live\nDATA_ROOT=https://app.my-site.com/data\n\n# The site's URL - will also be used for LocalFileStore\nSITE_ROOT=http://localhost:3000  # or https://app.my-site.com\n\n# \"development\" or \"production\"\nNODE_ENV=development\n```\n\n## Calling methods on the backend\n\nWhen you use LincdServer, you can also implement backend methods that you can access from the frontend.\n\nThere is two ways to do this:\n\n### Shape providers\n\nWith Shape providers you can connect shapes to a backend method.\n\nLet's say for example you want to send an email to a specific person from the server.\nYou could do that from a Person shape like so:\n\n```typescript\nimport { linkedShape } from '../package';\nimport { Shape } from '@_linked/core/lib/shapes/Shape';\nimport { Server } from 'lincd-server/lib/utils/Server';\n\n@linkedShape\nexport class Person extends Shape {\n  sendEmail(subject: string, message: string): Promise<boolean> {\n    return Server.call(this, 'sendEmail', subject, message);\n  }\n}\n```\n\nNote that `Server.call()` first takes the instance of the shape, then the method name and than any number of arguments\nto be passed on.\n\nTo implement the backend, create `src/shapes/PersonProvider.ts`:\n\n```typescript\nimport Person from './Person';\nimport { ShapeProvider } from 'lincd-server-utils/lib/utils/ShapeProvider';\n\nexport class PersonProvider extends ShapeProvider {\n  static shape = Person;\n\n  static sendEmail(person: Person, subject: string, message: string): boolean {\n    //send email to person\n    //mail(person.mailbox,subject,message);\n  }\n}\n```\n\nHere, PersonProvider first of all registers itself as a provider of the `Person` shape with `static shape = Person`.\n\nThen it implements the method (sendEmail()) as a a _static_ method, which receives an instance of the shape it is\nconnected to as its first argument.\n\nTo make sure the provider is _compiled_ but _not bundled_ you need to add it to `tsconfig`.\n\nThe recommended way to do that is with a providers index file `src/providers.ts`.\nThis file will re-export all providers of your package:\n\n```typescript\n//src/providers.ts\nexport * from './shapes/PersonProvider';\n```\n\nFinally, add `providers.ts` to your `src/tsconfig.json`:\n\n```json5\n//tsconfig.json\n{\n  //...\n  files: ['./src/index.ts', './src/providers.ts'],\n}\n```\n\nThat's all that's required to connect your frontend shapes to backend code.\n\n### Generic backend providers\n\nSometimes you want to exchange data with the backend without any specific shape being involved.\n\nFor such generic backend methods, you can use generic backend providers:\n\nAdd a src/backend.ts file and include it in tsconfig.json:\n\n```json5\n//tsconfig.json\n{\n  //...\n  files: ['./src/index.ts', './src/backend.ts'],\n}\n```\n\nIn `backend.ts`, export a default class that implements `IBackendProvider`.\nIn this class you can implement methods, which you can then call from the frontend.\n\nFor example:\n\n```typescript\n//src/backend.ts\nimport { IBackendProvider } from 'lincd-server/lib/interfaces/IBackendProvider';\n\nexport default class MyPackageBackendProvider implements IBackendProvider {\n  login(email: string, password: string) {\n    //do login\n    return Promise.resolve(user);\n  }\n}\n```\n\nWith this example you could call the login method from the frontend like so:\n\n```typescript\nimport { packageName } from '../package';\nimport { Server } from 'lincd-server/lib/utils/Server';\n\nServer.call(packageName, 'login', email, password).then((user) => {\n  //...\n});\n```\n\nNote that you can have **only one** generic backend provider per package.\n\n### Gotchas\n\n**The packageName you pass to Server.call() must match with the package that contains the provider.**\n\nIf you get a warning on the backend saying\n\n```\nGeneric provider [providerName] of [packageName] does not have a method called [methodName]\n```\n\nthen make sure that the `packageName` you pass to `Server.call(packageName)` is imported from _the same package_ as\nwhere the provider lives. Generally, this means you call `Server.call` from a component in the same package as the\nProvider (and import packageName from `src/package.ts`). If you want to call a method from another package, then import\npackageName from that package, or manually type it.\n\n### Error semantics\n\nThe `/call/...` routes answer as follows:\n\n| Situation | Response |\n| --- | --- |\n| The provider method returns a value | `200` with the JSON result (`null` when the method returns nothing and has not written the response itself) |\n| The provider method throws | `500 {\"error\": \"internal server error...\"}`. The stack is included in development only. |\n| No provider handles the call (no provider for the package or shape, or the provider has no such method) | `501 {\"error\": \"No provider for <pkg>/<method>\"}` |\n\nWhat the caller sees depends on how it calls:\n\n- **`Server.call` from the frontend (over HTTP).** By default a non-2xx response logs a warning and resolves `undefined`. Pass `{ method, rejectOnError: true }` as the method to reject with a `ServerCallError` instead. The error carries `status` and the server's `error` message.\n\n  ```typescript\n  Server.call(this, { method: 'sendEmail', rejectOnError: true }, subject, message);\n  ```\n\n- **`Server.call` on the backend.** Here it calls the `LinkedServer` directly.\n  - A provider method that throws always rejects.\n  - An unmatched call resolves `undefined` by default and rejects with a 501 `ServerCallError` when `rejectOnError` is set.\n- **`BackendAPIStore`.** It always uses `rejectOnError`, so a failed query rejects with the status and message. A successful call resolves with whatever the provider returned, `undefined` included.\n\n## API-only servers (`server.apiOnly`)\n\nA backend that serves no frontend app (e.g. started with `linked start --api-only`) can set `apiOnly` in its server config:\n\n```typescript\nnew LinkedServer({\n  server: {\n    apiOnly: true,\n    //...\n  },\n});\n```\n\nWith `apiOnly` the server skips page rendering. It installs no SPA catch-all, so a `GET` for a page that no route handles gets express's plain `404` instead of the app shell. The `/call/...` and `/api/...` routes and the routes that providers register work as usual.\n\n## Provider lifecycle and HMR\n\nEvery provider — generic (`BackendProvider`) or shape-scoped (`ShapeProvider`) — has a lifecycle the framework drives:\n\n1. **Construction** — `LincdServer.indexPackageBackendProviders(pkg)` reads `${pkg}/backend`, finds every exported provider class, calls `new providerClass(server, lincdServer)` for each.\n2. **Boot hooks** — `setupBeforeControllers()`, `setupBeforeCatchAllControllers()`, `setupAfterControllers()` run in that order during server startup.\n3. **Per-request** — `initRequest(req, res)` then `supplyDataForRequest(req, res, data)` on every incoming request.\n4. **Dispose** — `dispose()` runs when the provider is being torn down. In dev mode this happens on HMR (a watched source file in the same package changed) and on graceful shutdown. In production it only runs on shutdown.\n\nThe dispose step is what makes hot-reload safe. Without it, anything the constructor or boot hooks registered — Express routes, middleware, listeners, timers, global-singleton mutations — would accumulate every time the source file changed. The framework calls `dispose()` on the OLD provider before replacing it with a freshly-instantiated one.\n\n### When to implement `dispose()`\n\nImplement `dispose()` when your provider does any of the following at construction or boot:\n\n- Registers Express routes (`this.server.get/post/...`) or middleware (`this.server.use(...)`).\n- Holds `setInterval` / `setTimeout` handles.\n- Subscribes to event listeners (LINCD events like `onAccountWillBeRemoved`, or any `EventEmitter`-style API).\n- Mutates a global singleton (e.g. `LinkedStorage.setDefaultDataset(...)`, `Auth.userType = ...`).\n- Opens long-lived connections (DB pools, WebSockets) that the framework can't close on its own.\n\nIf your provider only exports class definitions or implements stateless RPC methods, you don't need to override `dispose()` — the base class's no-op is correct.\n\n### Route tracking helpers\n\n`BackendProvider` ships two protected helpers to make route disposal one line:\n\n```typescript\nprotected registerRoute(\n  method: 'get' | 'post' | 'put' | 'delete' | 'patch' | 'use',\n  path: string,\n  handler: express.RequestHandler,\n): void;\n\nprotected disposeRoutes(): void;\n```\n\n`registerRoute()` does the underlying `this.server.<method>(path, handler)` call AND pushes the entry onto `this.trackedRoutes`. `disposeRoutes()` walks `this.server._router.stack` and splices out every layer the provider registered.\n\nFor middleware (`method === 'use'`), pass `'/'` as the path to mount globally. Specific mount paths are also supported.\n\n### Examples\n\n**A route-registering provider:**\n\n```typescript\nexport default class MyProvider extends BackendProvider {\n  setupBeforeControllers() {\n    this.registerRoute('get', '/api/things', async (_req, res) => {\n      res.json({things: await Thing.getAll()});\n    });\n    this.registerRoute('post', '/api/things', async (req, res) => {\n      const t = await Thing.create(req.body);\n      res.json(t);\n    });\n  }\n\n  async dispose() {\n    this.disposeRoutes();\n  }\n}\n```\n\n**A stateful provider with a timer and a listener:**\n\n```typescript\nexport default class CacheProvider extends BackendProvider {\n  private refreshTimer?: NodeJS.Timeout;\n  private invalidationListener?: (id: string) => void;\n  private cache = new Map<string, any>();\n\n  constructor(s: any, ls: any) {\n    super(s, ls);\n    this.refreshTimer = setInterval(() => this.refresh(), 60_000);\n    this.invalidationListener = (id) => this.cache.delete(id);\n    someEvents.on('thing-changed', this.invalidationListener);\n  }\n\n  async dispose() {\n    if (this.refreshTimer) clearInterval(this.refreshTimer);\n    if (this.invalidationListener) {\n      someEvents.off('thing-changed', this.invalidationListener);\n    }\n    this.cache.clear();\n  }\n\n  async refresh() { /* ... */ }\n}\n```\n\n**A provider that mutates a global singleton:**\n\nSuch singletons (e.g. `LinkedStorage.setDefaultDataset`) often hold live connections that survive HMR by design — recreating them every reload would tear down working DB handles. Do NOT undo the mutation in `dispose()`; document that this part of the provider only updates on full restart (the `r<enter>` shortcut in `linked start`).\n\n> **Note on disposal time:** if your `dispose()` takes longer than ~5 seconds it will be abandoned with a warning so HMR doesn't stall the dev loop. In-flight requests held by the old provider keep running on the old code; new requests hit the new instance.\n\n## Shapes\n\nThis section will be a brief overview of the shapes that are included in this package, along with example usage of each\nshape.\n\n### LocalFileStore\n\nThis is the default file store for LINCD. It is a simple file store that stores files in a local directory. Its usage\nfollows the general pattern of other file stores in LINCD:\n\n- Define all storage locations when the server or application starts up\n- Access methods of the file store through the `LinkedFileStorage` class\n  - e.g. `LinkedFileStorage.saveFile(\"path/to/save-file.as\", fileBuffer)`\n\nIt's important to note that this file store is not suitable for frontend usage - it's intended to be used in an\nenvironment that has access to the [`fs` module](https://nodejs.org/api/fs.html).\n\n```ts\nimport { LinkedFileStorage } from '@_linked/core/lib/utils/LinkedFileStorage';\nimport { LocalFileStore } from 'lincd-server/lib/shapes/LocalFileStore';\nimport path from 'path';\n\nconst pathToStore = path.join(process.cwd(), 'my-file-store');\nconst store = new LocalFileStore('my-file-store', pathToStore);\nLinkedFileStorage.setDefaultStore(store);\n```\n\n## TODO\n\n- [ ] Add tests\n- [ ] Refactor `NodeFileStore` to `LocalQuadStore` as to not confuse FileStores with QuadStores\n","readmeFilename":"readme.md"}