diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..71b7098 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,13 @@ +{ + "name": "javascript", + "image": "mcr.microsoft.com/vscode/devcontainers/javascript-node", + "customizations": { + "vscode": { + "extensions": [ + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode" + ], + "settings": {} + } + } +} \ No newline at end of file diff --git a/.github/workflows/javascript.yaml b/.github/workflows/javascript.yaml new file mode 100644 index 0000000..c438756 --- /dev/null +++ b/.github/workflows/javascript.yaml @@ -0,0 +1,18 @@ +name: javascript + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Check Out Repository + uses: actions/checkout@v4 + + # - name: Lint + # uses: pnpm run lint + diff --git a/.gitignore b/.gitignore index 7a0d334..b07d187 100755 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,9 @@ web_modules/ # Optional npm cache directory .npm +# pnpm +.pnpm-store + # Optional eslint cache .eslintcache @@ -130,3 +133,4 @@ dist .pnp.* DS_Store +.DS_Store \ No newline at end of file diff --git a/.spellcheck_exceptions_dictionary.txt b/.spellcheck_exceptions_dictionary.txt new file mode 100644 index 0000000..b5b8d0a --- /dev/null +++ b/.spellcheck_exceptions_dictionary.txt @@ -0,0 +1,28 @@ +# acronyms + +# authors +Kernighan +Ritchie +praisetompane + +# concepts + + +# course codes: + + +# technology: +yaml +llvm +pyspelling + + +# institutions: +roadmap +pypi +hackerrank + + +# urls: +https +src \ No newline at end of file diff --git a/README.md b/README.md index bf30bea..d5bc491 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # JavaScript -**objective**: an in-depth study of JavaScript, its implementation and ecosystem. +**objective**: An in-depth study of JavaScript's implementation and ecosystem. ## Language Details: - [language specification](https://ecma-international.org/publications-and-standards/standards/ecma-262/) @@ -38,15 +38,20 @@ - jest ## Use Cases: -- [Applications for Language]() -- Large Implementations: -- Database Integration: -- Web Development: +- [Applications for JavaScript]() ## Learning Resources: -- [roadmap](https://roadmap.sh/javascript) +- [JavaScript](https://roadmap.sh/javascript) +- [TypeScript](https://roadmap.sh/typescript) - practice problems + +## Spell Check: + +```shell +pnpm run lint +``` + # References: **Disclaimer**: This is an ongoing and incomplete project to unpack these concepts and serve as my distributed memory. \ No newline at end of file diff --git a/application_projects/README.md b/application_projects/README.md deleted file mode 100755 index 1c715e0..0000000 --- a/application_projects/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Larger implementations to test the language -* https://github.com/praisetompane/the_unique_wather_app \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..396fa89 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,26 @@ +import js from "@eslint/js"; +import globals from "globals"; +import c_spell_plugin from "@cspell/eslint-plugin/configs"; + +export default [ + js.configs.recommended, + c_spell_plugin.recommended, + { + rules: { + "no-unused-vars": "error", + "no-undef": "error", + "@cspell/spellchecker": [ + "error", + { customWordListFile: ".spellcheck_exceptions_dictionary.txt" }, + ], + }, + languageOptions: { + ecmaVersion: 2024, + globals: { + //...globals.node, + //...globals.jest, + }, + }, + ignores: ["legacy/*"] + } +]; diff --git a/package.json b/package.json new file mode 100644 index 0000000..52dd3de --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "scripts": { + "lint": "eslint ." + }, + "devDependencies": { + "eslint": "^9.21.0", + "@cspell/eslint-plugin": "^8.8.2", + "@eslint/js": "^9.3.0" + }, + "type": "module" +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..8b07653 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1390 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@cspell/eslint-plugin': + specifier: ^8.8.2 + version: 8.17.5(eslint@9.21.0) + '@eslint/js': + specifier: ^9.3.0 + version: 9.21.0 + eslint: + specifier: ^9.21.0 + version: 9.21.0 + +packages: + + '@cspell/cspell-bundled-dicts@8.17.5': + resolution: {integrity: sha512-b/Ntabar+g4gsRNwOct909cvatO/auHhNvBzJZfyFQzryI1nqHMaSFuDsrrtzbhQkGJ4GiMAKCXZC2EOdHMgmw==} + engines: {node: '>=18'} + + '@cspell/cspell-pipe@8.17.5': + resolution: {integrity: sha512-VOIfFdIo3FYQFcSpIyGkqHupOx0LgfBrWs79IKnTT1II27VUHPF+0oGq0WWf4c2Zpd8tzdHvS3IUhGarWZq69g==} + engines: {node: '>=18'} + + '@cspell/cspell-resolver@8.17.5': + resolution: {integrity: sha512-5MhYInligPbGctWxoklAKxtg+sxvtJCuRKGSQHHA0JlCOLSsducypl780P6zvpjLK59XmdfC+wtFONxSmRbsuA==} + engines: {node: '>=18'} + + '@cspell/cspell-service-bus@8.17.5': + resolution: {integrity: sha512-Ur3IK0R92G/2J6roopG9cU/EhoYAMOx2um7KYlq93cdrly8RBAK2NCcGCL7DbjQB6C9RYEAV60ueMUnQ45RrCQ==} + engines: {node: '>=18'} + + '@cspell/cspell-types@8.17.5': + resolution: {integrity: sha512-91y2+0teunRSRZj940ORDA3kdjyenrUiM+4j6nQQH24sAIAJdRmQl2LG3eUTmeaSReJGkZIpnToQ6DyU5cC88Q==} + engines: {node: '>=18'} + + '@cspell/dict-ada@4.1.0': + resolution: {integrity: sha512-7SvmhmX170gyPd+uHXrfmqJBY5qLcCX8kTGURPVeGxmt8XNXT75uu9rnZO+jwrfuU2EimNoArdVy5GZRGljGNg==} + + '@cspell/dict-al@1.1.0': + resolution: {integrity: sha512-PtNI1KLmYkELYltbzuoztBxfi11jcE9HXBHCpID2lou/J4VMYKJPNqe4ZjVzSI9NYbMnMnyG3gkbhIdx66VSXg==} + + '@cspell/dict-aws@4.0.9': + resolution: {integrity: sha512-bDYdnnJGwSkIZ4gzrauu7qzOs/ZAY/FnU4k11LgdMI8BhwMfsbsy2EI1iS+sD/BI5ZnNT9kU5YR3WADeNOmhRg==} + + '@cspell/dict-bash@4.2.0': + resolution: {integrity: sha512-HOyOS+4AbCArZHs/wMxX/apRkjxg6NDWdt0jF9i9XkvJQUltMwEhyA2TWYjQ0kssBsnof+9amax2lhiZnh3kCg==} + + '@cspell/dict-companies@3.1.14': + resolution: {integrity: sha512-iqo1Ce4L7h0l0GFSicm2wCLtfuymwkvgFGhmu9UHyuIcTbdFkDErH+m6lH3Ed+QuskJlpQ9dM7puMIGqUlVERw==} + + '@cspell/dict-cpp@6.0.4': + resolution: {integrity: sha512-IvXx3TlM+OL0CFriapk7ZHmeY89dSSdo/BZ3DGf+WUS+BWd64H+z/xr3xkkqY0Eu6MV/vdzNfkLm5zl45FDMGg==} + + '@cspell/dict-cryptocurrencies@5.0.4': + resolution: {integrity: sha512-6iFu7Abu+4Mgqq08YhTKHfH59mpMpGTwdzDB2Y8bbgiwnGFCeoiSkVkgLn1Kel2++hYcZ8vsAW/MJS9oXxuMag==} + + '@cspell/dict-csharp@4.0.6': + resolution: {integrity: sha512-w/+YsqOknjQXmIlWDRmkW+BHBPJZ/XDrfJhZRQnp0wzpPOGml7W0q1iae65P2AFRtTdPKYmvSz7AL5ZRkCnSIw==} + + '@cspell/dict-css@4.0.17': + resolution: {integrity: sha512-2EisRLHk6X/PdicybwlajLGKF5aJf4xnX2uuG5lexuYKt05xV/J/OiBADmi8q9obhxf1nesrMQbqAt+6CsHo/w==} + + '@cspell/dict-dart@2.3.0': + resolution: {integrity: sha512-1aY90lAicek8vYczGPDKr70pQSTQHwMFLbmWKTAI6iavmb1fisJBS1oTmMOKE4ximDf86MvVN6Ucwx3u/8HqLg==} + + '@cspell/dict-data-science@2.0.7': + resolution: {integrity: sha512-XhAkK+nSW6zmrnWzusmZ1BpYLc62AWYHZc2p17u4nE2Z9XG5DleG55PCZxXQTKz90pmwlhFM9AfpkJsYaBWATA==} + + '@cspell/dict-django@4.1.4': + resolution: {integrity: sha512-fX38eUoPvytZ/2GA+g4bbdUtCMGNFSLbdJJPKX2vbewIQGfgSFJKY56vvcHJKAvw7FopjvgyS/98Ta9WN1gckg==} + + '@cspell/dict-docker@1.1.12': + resolution: {integrity: sha512-6d25ZPBnYZaT9D9An/x6g/4mk542R8bR3ipnby3QFCxnfdd6xaWiTcwDPsCgwN2aQZIQ1jX/fil9KmBEqIK/qA==} + + '@cspell/dict-dotnet@5.0.9': + resolution: {integrity: sha512-JGD6RJW5sHtO5lfiJl11a5DpPN6eKSz5M1YBa1I76j4dDOIqgZB6rQexlDlK1DH9B06X4GdDQwdBfnpAB0r2uQ==} + + '@cspell/dict-elixir@4.0.7': + resolution: {integrity: sha512-MAUqlMw73mgtSdxvbAvyRlvc3bYnrDqXQrx5K9SwW8F7fRYf9V4vWYFULh+UWwwkqkhX9w03ZqFYRTdkFku6uA==} + + '@cspell/dict-en-common-misspellings@2.0.9': + resolution: {integrity: sha512-O/jAr1VNtuyCFckbTmpeEf43ZFWVD9cJFvWaA6rO2IVmLirJViHWJUyBZOuQcesSplzEIw80MAYmnK06/MDWXQ==} + + '@cspell/dict-en-gb@1.1.33': + resolution: {integrity: sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==} + + '@cspell/dict-en_us@4.3.33': + resolution: {integrity: sha512-HniqQjzPVn24NEkHooBIw1cH+iO3AKMA9oDTwazUYQP1/ldqXsz6ce4+fdHia2nqypmic/lHVkQgIVhP48q/sA==} + + '@cspell/dict-filetypes@3.0.11': + resolution: {integrity: sha512-bBtCHZLo7MiSRUqx5KEiPdGOmXIlDGY+L7SJEtRWZENpAKE+96rT7hj+TUUYWBbCzheqHr0OXZJFEKDgsG/uZg==} + + '@cspell/dict-flutter@1.1.0': + resolution: {integrity: sha512-3zDeS7zc2p8tr9YH9tfbOEYfopKY/srNsAa+kE3rfBTtQERAZeOhe5yxrnTPoufctXLyuUtcGMUTpxr3dO0iaA==} + + '@cspell/dict-fonts@4.0.4': + resolution: {integrity: sha512-cHFho4hjojBcHl6qxidl9CvUb492IuSk7xIf2G2wJzcHwGaCFa2o3gRcxmIg1j62guetAeDDFELizDaJlVRIOg==} + + '@cspell/dict-fsharp@1.1.0': + resolution: {integrity: sha512-oguWmHhGzgbgbEIBKtgKPrFSVAFtvGHaQS0oj+vacZqMObwkapcTGu7iwf4V3Bc2T3caf0QE6f6rQfIJFIAVsw==} + + '@cspell/dict-fullstack@3.2.5': + resolution: {integrity: sha512-XNmNdovPUS9Vc2JvfBscy8zZfwyxR11sB4fxU2lXh7LzUvOn2/OkKAzj41JTdiWfVnJ/yvsRkspe+b7kr+DIQw==} + + '@cspell/dict-gaming-terms@1.1.0': + resolution: {integrity: sha512-46AnDs9XkgJ2f1Sqol1WgfJ8gOqp60fojpc9Wxch7x+BA63g4JfMV5/M5x0sI0TLlLY8EBSglcr8wQF/7C80AQ==} + + '@cspell/dict-git@3.0.4': + resolution: {integrity: sha512-C44M+m56rYn6QCsLbiKiedyPTMZxlDdEYAsPwwlL5bhMDDzXZ3Ic8OCQIhMbiunhCOJJT+er4URmOmM+sllnjg==} + + '@cspell/dict-golang@6.0.18': + resolution: {integrity: sha512-Mt+7NwfodDwUk7423DdaQa0YaA+4UoV3XSxQwZioqjpFBCuxfvvv4l80MxCTAAbK6duGj0uHbGTwpv8fyKYPKg==} + + '@cspell/dict-google@1.0.8': + resolution: {integrity: sha512-BnMHgcEeaLyloPmBs8phCqprI+4r2Jb8rni011A8hE+7FNk7FmLE3kiwxLFrcZnnb7eqM0agW4zUaNoB0P+z8A==} + + '@cspell/dict-haskell@4.0.5': + resolution: {integrity: sha512-s4BG/4tlj2pPM9Ha7IZYMhUujXDnI0Eq1+38UTTCpatYLbQqDwRFf2KNPLRqkroU+a44yTUAe0rkkKbwy4yRtQ==} + + '@cspell/dict-html-symbol-entities@4.0.3': + resolution: {integrity: sha512-aABXX7dMLNFdSE8aY844X4+hvfK7977sOWgZXo4MTGAmOzR8524fjbJPswIBK7GaD3+SgFZ2yP2o0CFvXDGF+A==} + + '@cspell/dict-html@4.0.11': + resolution: {integrity: sha512-QR3b/PB972SRQ2xICR1Nw/M44IJ6rjypwzA4jn+GH8ydjAX9acFNfc+hLZVyNe0FqsE90Gw3evLCOIF0vy1vQw==} + + '@cspell/dict-java@5.0.11': + resolution: {integrity: sha512-T4t/1JqeH33Raa/QK/eQe26FE17eUCtWu+JsYcTLkQTci2dk1DfcIKo8YVHvZXBnuM43ATns9Xs0s+AlqDeH7w==} + + '@cspell/dict-julia@1.1.0': + resolution: {integrity: sha512-CPUiesiXwy3HRoBR3joUseTZ9giFPCydSKu2rkh6I2nVjXnl5vFHzOMLXpbF4HQ1tH2CNfnDbUndxD+I+7eL9w==} + + '@cspell/dict-k8s@1.0.10': + resolution: {integrity: sha512-313haTrX9prep1yWO7N6Xw4D6tvUJ0Xsx+YhCP+5YrrcIKoEw5Rtlg8R4PPzLqe6zibw6aJ+Eqq+y76Vx5BZkw==} + + '@cspell/dict-kotlin@1.1.0': + resolution: {integrity: sha512-vySaVw6atY7LdwvstQowSbdxjXG6jDhjkWVWSjg1XsUckyzH1JRHXe9VahZz1i7dpoFEUOWQrhIe5B9482UyJQ==} + + '@cspell/dict-latex@4.0.3': + resolution: {integrity: sha512-2KXBt9fSpymYHxHfvhUpjUFyzrmN4c4P8mwIzweLyvqntBT3k0YGZJSriOdjfUjwSygrfEwiuPI1EMrvgrOMJw==} + + '@cspell/dict-lorem-ipsum@4.0.4': + resolution: {integrity: sha512-+4f7vtY4dp2b9N5fn0za/UR0kwFq2zDtA62JCbWHbpjvO9wukkbl4rZg4YudHbBgkl73HRnXFgCiwNhdIA1JPw==} + + '@cspell/dict-lua@4.0.7': + resolution: {integrity: sha512-Wbr7YSQw+cLHhTYTKV6cAljgMgcY+EUAxVIZW3ljKswEe4OLxnVJ7lPqZF5JKjlXdgCjbPSimsHqyAbC5pQN/Q==} + + '@cspell/dict-makefile@1.0.4': + resolution: {integrity: sha512-E4hG/c0ekPqUBvlkrVvzSoAA+SsDA9bLi4xSV3AXHTVru7Y2bVVGMPtpfF+fI3zTkww/jwinprcU1LSohI3ylw==} + + '@cspell/dict-markdown@2.0.9': + resolution: {integrity: sha512-j2e6Eg18BlTb1mMP1DkyRFMM/FLS7qiZjltpURzDckB57zDZbUyskOFdl4VX7jItZZEeY0fe22bSPOycgS1Z5A==} + peerDependencies: + '@cspell/dict-css': ^4.0.17 + '@cspell/dict-html': ^4.0.11 + '@cspell/dict-html-symbol-entities': ^4.0.3 + '@cspell/dict-typescript': ^3.2.0 + + '@cspell/dict-monkeyc@1.0.10': + resolution: {integrity: sha512-7RTGyKsTIIVqzbvOtAu6Z/lwwxjGRtY5RkKPlXKHEoEAgIXwfDxb5EkVwzGQwQr8hF/D3HrdYbRT8MFBfsueZw==} + + '@cspell/dict-node@5.0.6': + resolution: {integrity: sha512-CEbhPCpxGvRNByGolSBTrXXW2rJA4bGqZuTx1KKO85mwR6aadeOmUE7xf/8jiCkXSy+qvr9aJeh+jlfXcsrziQ==} + + '@cspell/dict-npm@5.1.27': + resolution: {integrity: sha512-LGss1yrjhxSmxL4VfMC+UBDMVHfqHudgC7b39M74EVys+nNC4/lqDHacb6Aw7i6aUn9mzdNIkdTTD+LdDcHvPA==} + + '@cspell/dict-php@4.0.14': + resolution: {integrity: sha512-7zur8pyncYZglxNmqsRycOZ6inpDoVd4yFfz1pQRe5xaRWMiK3Km4n0/X/1YMWhh3e3Sl/fQg5Axb2hlN68t1g==} + + '@cspell/dict-powershell@5.0.14': + resolution: {integrity: sha512-ktjjvtkIUIYmj/SoGBYbr3/+CsRGNXGpvVANrY0wlm/IoGlGywhoTUDYN0IsGwI2b8Vktx3DZmQkfb3Wo38jBA==} + + '@cspell/dict-public-licenses@2.0.13': + resolution: {integrity: sha512-1Wdp/XH1ieim7CadXYE7YLnUlW0pULEjVl9WEeziZw3EKCAw8ZI8Ih44m4bEa5VNBLnuP5TfqC4iDautAleQzQ==} + + '@cspell/dict-python@4.2.15': + resolution: {integrity: sha512-VNXhj0Eh+hdHN89MgyaoSAexBQKmYtJaMhucbMI7XmBs4pf8fuFFN3xugk51/A4TZJr8+RImdFFsGMOw+I4bDA==} + + '@cspell/dict-r@2.1.0': + resolution: {integrity: sha512-k2512wgGG0lTpTYH9w5Wwco+lAMf3Vz7mhqV8+OnalIE7muA0RSuD9tWBjiqLcX8zPvEJr4LdgxVju8Gk3OKyA==} + + '@cspell/dict-ruby@5.0.7': + resolution: {integrity: sha512-4/d0hcoPzi5Alk0FmcyqlzFW9lQnZh9j07MJzPcyVO62nYJJAGKaPZL2o4qHeCS/od/ctJC5AHRdoUm0ktsw6Q==} + + '@cspell/dict-rust@4.0.11': + resolution: {integrity: sha512-OGWDEEzm8HlkSmtD8fV3pEcO2XBpzG2XYjgMCJCRwb2gRKvR+XIm6Dlhs04N/K2kU+iH8bvrqNpM8fS/BFl0uw==} + + '@cspell/dict-scala@5.0.7': + resolution: {integrity: sha512-yatpSDW/GwulzO3t7hB5peoWwzo+Y3qTc0pO24Jf6f88jsEeKmDeKkfgPbYuCgbE4jisGR4vs4+jfQZDIYmXPA==} + + '@cspell/dict-shell@1.1.0': + resolution: {integrity: sha512-D/xHXX7T37BJxNRf5JJHsvziFDvh23IF/KvkZXNSh8VqcRdod3BAz9VGHZf6VDqcZXr1VRqIYR3mQ8DSvs3AVQ==} + + '@cspell/dict-software-terms@4.2.5': + resolution: {integrity: sha512-CaRzkWti3AgcXoxuRcMijaNG7YUk/MH1rHjB8VX34v3UdCxXXeqvRyElRKnxhFeVLB/robb2UdShqh/CpskxRg==} + + '@cspell/dict-sql@2.2.0': + resolution: {integrity: sha512-MUop+d1AHSzXpBvQgQkCiok8Ejzb+nrzyG16E8TvKL2MQeDwnIvMe3bv90eukP6E1HWb+V/MA/4pnq0pcJWKqQ==} + + '@cspell/dict-svelte@1.0.6': + resolution: {integrity: sha512-8LAJHSBdwHCoKCSy72PXXzz7ulGROD0rP1CQ0StOqXOOlTUeSFaJJlxNYjlONgd2c62XBQiN2wgLhtPN+1Zv7Q==} + + '@cspell/dict-swift@2.0.5': + resolution: {integrity: sha512-3lGzDCwUmnrfckv3Q4eVSW3sK3cHqqHlPprFJZD4nAqt23ot7fic5ALR7J4joHpvDz36nHX34TgcbZNNZOC/JA==} + + '@cspell/dict-terraform@1.1.0': + resolution: {integrity: sha512-G55pcUUxeXAhejstmD35B47SkFd4uqCQimc+CMgq8Nx0dr03guL2iMsz8faRWQGkCnGimX8S91rbOhDv9p/heg==} + + '@cspell/dict-typescript@3.2.0': + resolution: {integrity: sha512-Pk3zNePLT8qg51l0M4g1ISowYAEGxTuNfZlgkU5SvHa9Cu7x/BWoyYq9Fvc3kAyoisCjRPyvWF4uRYrPitPDFw==} + + '@cspell/dict-vue@3.0.4': + resolution: {integrity: sha512-0dPtI0lwHcAgSiQFx8CzvqjdoXROcH+1LyqgROCpBgppommWpVhbQ0eubnKotFEXgpUCONVkeZJ6Ql8NbTEu+w==} + + '@cspell/dynamic-import@8.17.5': + resolution: {integrity: sha512-tY+cVkRou+0VKvH+K1NXv8/R7mOlW3BDGSs9fcgvhatj0m00Yf8blFC7tE4VVI9Qh2bkC/KDFqM24IqZbuwXUQ==} + engines: {node: '>=18.0'} + + '@cspell/eslint-plugin@8.17.5': + resolution: {integrity: sha512-RzFwtn1VZG10tELJlJ78soicAWYSLHEUqTLPR0Yi3gRMFqAz1HXkklKXuP4Qamul/vIbhHTKePK2bd/0ipVEuQ==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^7 || ^8 || ^9 + + '@cspell/filetypes@8.17.5': + resolution: {integrity: sha512-Fj6py2Rl+FEnMiXhRQUM1A5QmyeCLxi6dY/vQ0qfH6tp6KSaBiaC8wuPUKhr8hKyTd3+8lkUbobDhUf6xtMEXg==} + engines: {node: '>=18'} + + '@cspell/strong-weak-map@8.17.5': + resolution: {integrity: sha512-Z4eo+rZJr1086wZWycBiIG/n7gGvVoqn28I7ZicS8xedRYu/4yp2loHgLn4NpxG3e46+dNWs4La6vinod+UydQ==} + engines: {node: '>=18'} + + '@cspell/url@8.17.5': + resolution: {integrity: sha512-GNQqST7zI85dAFVyao6oiTeg5rNhO9FH1ZAd397qQhvwfxrrniNfuoewu8gPXyP0R4XBiiaCwhBL7w9S/F5guw==} + engines: {node: '>=18.0'} + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.12.0': + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.0': + resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.21.0': + resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.7': + resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + engines: {node: '>=18.18'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + clear-module@4.1.2: + resolution: {integrity: sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==} + engines: {node: '>=8'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + comment-json@4.2.5: + resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + engines: {node: '>= 6'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cspell-config-lib@8.17.5: + resolution: {integrity: sha512-XDc+UJO5RZ9S9e2Ajz332XjT7dv6Og2UqCiSnAlvHt7t/MacLHSPARZFIivheObNkWZ7E1iWI681RxKoH4o40w==} + engines: {node: '>=18'} + + cspell-dictionary@8.17.5: + resolution: {integrity: sha512-O/Uuhv1RuDu+5WYQml0surudweaTvr+2YJSmPSdlihByUSiogCbpGqwrRow7wQv/C5p1W1FlFjotvUfoR0fxHA==} + engines: {node: '>=18'} + + cspell-glob@8.17.5: + resolution: {integrity: sha512-OXquou7UykInlGV5et5lNKYYrW0dwa28aEF995x1ocANND7o0bbHmFlbgyci/Lp4uFQai8sifmfFJbuIg2IC/A==} + engines: {node: '>=18'} + + cspell-grammar@8.17.5: + resolution: {integrity: sha512-st2n+FVw25MvMbsGb3TeJNRr6Oih4g14rjOd/UJN0qn+ceH360SAShUFqSd4kHHu2ADazI/TESFU6FRtMTPNOg==} + engines: {node: '>=18'} + hasBin: true + + cspell-io@8.17.5: + resolution: {integrity: sha512-oevM/8l0s6nc1NCYPqNFumrW50QSHoa6wqUT8cWs09gtZdE2AWG0U6bIE8ZEVz6e6FxS+6IenGKTdUUwP0+3fg==} + engines: {node: '>=18'} + + cspell-lib@8.17.5: + resolution: {integrity: sha512-S3KuOrcST1d2BYmTXA+hnbRdho5n3w5GUvEaCx3QZQBwAPfLpAwJbe2yig1TxBpyEJ5LqP02i/mDg1pUCOP0hQ==} + engines: {node: '>=18'} + + cspell-trie-lib@8.17.5: + resolution: {integrity: sha512-9hjI3nRQxtGEua6CgnLbK3sGHLx9dXR/BHwI/csRL4dN5GGRkE5X3CCoy1RJVL7iGFLIzi43+L10xeFRmWniKw==} + engines: {node: '>=18'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.21.0: + resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-equals@5.2.2: + resolution: {integrity: sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==} + engines: {node: '>=6.0.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + gensequence@7.0.0: + resolution: {integrity: sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==} + engines: {node: '>=18'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parent-module@2.0.0: + resolution: {integrity: sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==} + engines: {node: '>=8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@cspell/cspell-bundled-dicts@8.17.5': + dependencies: + '@cspell/dict-ada': 4.1.0 + '@cspell/dict-al': 1.1.0 + '@cspell/dict-aws': 4.0.9 + '@cspell/dict-bash': 4.2.0 + '@cspell/dict-companies': 3.1.14 + '@cspell/dict-cpp': 6.0.4 + '@cspell/dict-cryptocurrencies': 5.0.4 + '@cspell/dict-csharp': 4.0.6 + '@cspell/dict-css': 4.0.17 + '@cspell/dict-dart': 2.3.0 + '@cspell/dict-data-science': 2.0.7 + '@cspell/dict-django': 4.1.4 + '@cspell/dict-docker': 1.1.12 + '@cspell/dict-dotnet': 5.0.9 + '@cspell/dict-elixir': 4.0.7 + '@cspell/dict-en-common-misspellings': 2.0.9 + '@cspell/dict-en-gb': 1.1.33 + '@cspell/dict-en_us': 4.3.33 + '@cspell/dict-filetypes': 3.0.11 + '@cspell/dict-flutter': 1.1.0 + '@cspell/dict-fonts': 4.0.4 + '@cspell/dict-fsharp': 1.1.0 + '@cspell/dict-fullstack': 3.2.5 + '@cspell/dict-gaming-terms': 1.1.0 + '@cspell/dict-git': 3.0.4 + '@cspell/dict-golang': 6.0.18 + '@cspell/dict-google': 1.0.8 + '@cspell/dict-haskell': 4.0.5 + '@cspell/dict-html': 4.0.11 + '@cspell/dict-html-symbol-entities': 4.0.3 + '@cspell/dict-java': 5.0.11 + '@cspell/dict-julia': 1.1.0 + '@cspell/dict-k8s': 1.0.10 + '@cspell/dict-kotlin': 1.1.0 + '@cspell/dict-latex': 4.0.3 + '@cspell/dict-lorem-ipsum': 4.0.4 + '@cspell/dict-lua': 4.0.7 + '@cspell/dict-makefile': 1.0.4 + '@cspell/dict-markdown': 2.0.9(@cspell/dict-css@4.0.17)(@cspell/dict-html-symbol-entities@4.0.3)(@cspell/dict-html@4.0.11)(@cspell/dict-typescript@3.2.0) + '@cspell/dict-monkeyc': 1.0.10 + '@cspell/dict-node': 5.0.6 + '@cspell/dict-npm': 5.1.27 + '@cspell/dict-php': 4.0.14 + '@cspell/dict-powershell': 5.0.14 + '@cspell/dict-public-licenses': 2.0.13 + '@cspell/dict-python': 4.2.15 + '@cspell/dict-r': 2.1.0 + '@cspell/dict-ruby': 5.0.7 + '@cspell/dict-rust': 4.0.11 + '@cspell/dict-scala': 5.0.7 + '@cspell/dict-shell': 1.1.0 + '@cspell/dict-software-terms': 4.2.5 + '@cspell/dict-sql': 2.2.0 + '@cspell/dict-svelte': 1.0.6 + '@cspell/dict-swift': 2.0.5 + '@cspell/dict-terraform': 1.1.0 + '@cspell/dict-typescript': 3.2.0 + '@cspell/dict-vue': 3.0.4 + + '@cspell/cspell-pipe@8.17.5': {} + + '@cspell/cspell-resolver@8.17.5': + dependencies: + global-directory: 4.0.1 + + '@cspell/cspell-service-bus@8.17.5': {} + + '@cspell/cspell-types@8.17.5': {} + + '@cspell/dict-ada@4.1.0': {} + + '@cspell/dict-al@1.1.0': {} + + '@cspell/dict-aws@4.0.9': {} + + '@cspell/dict-bash@4.2.0': + dependencies: + '@cspell/dict-shell': 1.1.0 + + '@cspell/dict-companies@3.1.14': {} + + '@cspell/dict-cpp@6.0.4': {} + + '@cspell/dict-cryptocurrencies@5.0.4': {} + + '@cspell/dict-csharp@4.0.6': {} + + '@cspell/dict-css@4.0.17': {} + + '@cspell/dict-dart@2.3.0': {} + + '@cspell/dict-data-science@2.0.7': {} + + '@cspell/dict-django@4.1.4': {} + + '@cspell/dict-docker@1.1.12': {} + + '@cspell/dict-dotnet@5.0.9': {} + + '@cspell/dict-elixir@4.0.7': {} + + '@cspell/dict-en-common-misspellings@2.0.9': {} + + '@cspell/dict-en-gb@1.1.33': {} + + '@cspell/dict-en_us@4.3.33': {} + + '@cspell/dict-filetypes@3.0.11': {} + + '@cspell/dict-flutter@1.1.0': {} + + '@cspell/dict-fonts@4.0.4': {} + + '@cspell/dict-fsharp@1.1.0': {} + + '@cspell/dict-fullstack@3.2.5': {} + + '@cspell/dict-gaming-terms@1.1.0': {} + + '@cspell/dict-git@3.0.4': {} + + '@cspell/dict-golang@6.0.18': {} + + '@cspell/dict-google@1.0.8': {} + + '@cspell/dict-haskell@4.0.5': {} + + '@cspell/dict-html-symbol-entities@4.0.3': {} + + '@cspell/dict-html@4.0.11': {} + + '@cspell/dict-java@5.0.11': {} + + '@cspell/dict-julia@1.1.0': {} + + '@cspell/dict-k8s@1.0.10': {} + + '@cspell/dict-kotlin@1.1.0': {} + + '@cspell/dict-latex@4.0.3': {} + + '@cspell/dict-lorem-ipsum@4.0.4': {} + + '@cspell/dict-lua@4.0.7': {} + + '@cspell/dict-makefile@1.0.4': {} + + '@cspell/dict-markdown@2.0.9(@cspell/dict-css@4.0.17)(@cspell/dict-html-symbol-entities@4.0.3)(@cspell/dict-html@4.0.11)(@cspell/dict-typescript@3.2.0)': + dependencies: + '@cspell/dict-css': 4.0.17 + '@cspell/dict-html': 4.0.11 + '@cspell/dict-html-symbol-entities': 4.0.3 + '@cspell/dict-typescript': 3.2.0 + + '@cspell/dict-monkeyc@1.0.10': {} + + '@cspell/dict-node@5.0.6': {} + + '@cspell/dict-npm@5.1.27': {} + + '@cspell/dict-php@4.0.14': {} + + '@cspell/dict-powershell@5.0.14': {} + + '@cspell/dict-public-licenses@2.0.13': {} + + '@cspell/dict-python@4.2.15': + dependencies: + '@cspell/dict-data-science': 2.0.7 + + '@cspell/dict-r@2.1.0': {} + + '@cspell/dict-ruby@5.0.7': {} + + '@cspell/dict-rust@4.0.11': {} + + '@cspell/dict-scala@5.0.7': {} + + '@cspell/dict-shell@1.1.0': {} + + '@cspell/dict-software-terms@4.2.5': {} + + '@cspell/dict-sql@2.2.0': {} + + '@cspell/dict-svelte@1.0.6': {} + + '@cspell/dict-swift@2.0.5': {} + + '@cspell/dict-terraform@1.1.0': {} + + '@cspell/dict-typescript@3.2.0': {} + + '@cspell/dict-vue@3.0.4': {} + + '@cspell/dynamic-import@8.17.5': + dependencies: + '@cspell/url': 8.17.5 + import-meta-resolve: 4.1.0 + + '@cspell/eslint-plugin@8.17.5(eslint@9.21.0)': + dependencies: + '@cspell/cspell-types': 8.17.5 + '@cspell/url': 8.17.5 + cspell-lib: 8.17.5 + eslint: 9.21.0 + synckit: 0.9.2 + + '@cspell/filetypes@8.17.5': {} + + '@cspell/strong-weak-map@8.17.5': {} + + '@cspell/url@8.17.5': {} + + '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0)': + dependencies: + eslint: 9.21.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.2': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.12.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.21.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.7': + dependencies: + '@eslint/core': 0.12.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.2': {} + + '@pkgr/core@0.1.1': {} + + '@types/estree@1.0.6': {} + + '@types/json-schema@7.0.15': {} + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + array-timsort@1.0.3: {} + + balanced-match@1.0.2: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + callsites@3.1.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + clear-module@4.1.2: + dependencies: + parent-module: 2.0.0 + resolve-from: 5.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + comment-json@4.2.5: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + + concat-map@0.0.1: {} + + core-util-is@1.0.3: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cspell-config-lib@8.17.5: + dependencies: + '@cspell/cspell-types': 8.17.5 + comment-json: 4.2.5 + yaml: 2.7.0 + + cspell-dictionary@8.17.5: + dependencies: + '@cspell/cspell-pipe': 8.17.5 + '@cspell/cspell-types': 8.17.5 + cspell-trie-lib: 8.17.5 + fast-equals: 5.2.2 + + cspell-glob@8.17.5: + dependencies: + '@cspell/url': 8.17.5 + micromatch: 4.0.8 + + cspell-grammar@8.17.5: + dependencies: + '@cspell/cspell-pipe': 8.17.5 + '@cspell/cspell-types': 8.17.5 + + cspell-io@8.17.5: + dependencies: + '@cspell/cspell-service-bus': 8.17.5 + '@cspell/url': 8.17.5 + + cspell-lib@8.17.5: + dependencies: + '@cspell/cspell-bundled-dicts': 8.17.5 + '@cspell/cspell-pipe': 8.17.5 + '@cspell/cspell-resolver': 8.17.5 + '@cspell/cspell-types': 8.17.5 + '@cspell/dynamic-import': 8.17.5 + '@cspell/filetypes': 8.17.5 + '@cspell/strong-weak-map': 8.17.5 + '@cspell/url': 8.17.5 + clear-module: 4.1.2 + comment-json: 4.2.5 + cspell-config-lib: 8.17.5 + cspell-dictionary: 8.17.5 + cspell-glob: 8.17.5 + cspell-grammar: 8.17.5 + cspell-io: 8.17.5 + cspell-trie-lib: 8.17.5 + env-paths: 3.0.0 + fast-equals: 5.2.2 + gensequence: 7.0.0 + import-fresh: 3.3.1 + resolve-from: 5.0.0 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + xdg-basedir: 5.1.0 + + cspell-trie-lib@8.17.5: + dependencies: + '@cspell/cspell-pipe': 8.17.5 + '@cspell/cspell-types': 8.17.5 + gensequence: 7.0.0 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + env-paths@3.0.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-scope@8.2.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.21.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.0 + '@eslint/js': 9.21.0 + '@eslint/plugin-kit': 0.2.7 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-equals@5.2.2: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + gensequence@7.0.0: {} + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + globals@14.0.0: {} + + has-flag@4.0.0: {} + + has-own-prop@2.0.0: {} + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-meta-resolve@4.1.0: {} + + imurmurhash@0.1.4: {} + + ini@4.1.1: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + isexe@2.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + ms@2.1.3: {} + + natural-compare@1.4.0: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parent-module@2.0.0: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + picomatch@2.3.1: {} + + prelude-ls@1.2.1: {} + + punycode@2.3.1: {} + + repeat-string@1.6.1: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + synckit@0.9.2: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.8.1 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-uri@3.1.0: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + xdg-basedir@5.1.0: {} + + yaml@2.7.0: {} + + yocto-queue@0.1.0: {} diff --git a/tutorials/legacy/APIRequests.html b/src/legacy/APIRequests.html similarity index 100% rename from tutorials/legacy/APIRequests.html rename to src/legacy/APIRequests.html diff --git a/tutorials/legacy/APIRequests.js b/src/legacy/APIRequests.js similarity index 100% rename from tutorials/legacy/APIRequests.js rename to src/legacy/APIRequests.js diff --git a/tutorials/legacy/ArraysAndFunctions.js b/src/legacy/ArraysAndFunctions.js similarity index 100% rename from tutorials/legacy/ArraysAndFunctions.js rename to src/legacy/ArraysAndFunctions.js diff --git a/tutorials/legacy/Belong.js b/src/legacy/Belong.js similarity index 100% rename from tutorials/legacy/Belong.js rename to src/legacy/Belong.js diff --git a/tutorials/legacy/BlackJackBetOrHold.js b/src/legacy/BlackJackBetOrHold.js similarity index 100% rename from tutorials/legacy/BlackJackBetOrHold.js rename to src/legacy/BlackJackBetOrHold.js diff --git a/tutorials/legacy/CapitaliseWords.js b/src/legacy/CapitaliseWords.js similarity index 100% rename from tutorials/legacy/CapitaliseWords.js rename to src/legacy/CapitaliseWords.js diff --git a/tutorials/legacy/Chuncky.js b/src/legacy/Chuncky.js similarity index 100% rename from tutorials/legacy/Chuncky.js rename to src/legacy/Chuncky.js diff --git a/tutorials/legacy/CreatingElements.html b/src/legacy/CreatingElements.html similarity index 100% rename from tutorials/legacy/CreatingElements.html rename to src/legacy/CreatingElements.html diff --git a/tutorials/legacy/Destroyer.js b/src/legacy/Destroyer.js similarity index 100% rename from tutorials/legacy/Destroyer.js rename to src/legacy/Destroyer.js diff --git a/tutorials/legacy/FalseBouncer.js b/src/legacy/FalseBouncer.js similarity index 100% rename from tutorials/legacy/FalseBouncer.js rename to src/legacy/FalseBouncer.js diff --git a/tutorials/legacy/ImplementationOfNew.js b/src/legacy/ImplementationOfNew.js similarity index 100% rename from tutorials/legacy/ImplementationOfNew.js rename to src/legacy/ImplementationOfNew.js diff --git a/tutorials/legacy/LongestWord.js b/src/legacy/LongestWord.js similarity index 100% rename from tutorials/legacy/LongestWord.js rename to src/legacy/LongestWord.js diff --git a/tutorials/legacy/Lookup.js b/src/legacy/Lookup.js similarity index 100% rename from tutorials/legacy/Lookup.js rename to src/legacy/Lookup.js diff --git a/tutorials/legacy/MadLib.js b/src/legacy/MadLib.js similarity index 100% rename from tutorials/legacy/MadLib.js rename to src/legacy/MadLib.js diff --git a/tutorials/legacy/Mutations.js b/src/legacy/Mutations.js similarity index 100% rename from tutorials/legacy/Mutations.js rename to src/legacy/Mutations.js diff --git a/tutorials/legacy/OOP.js b/src/legacy/OOP.js similarity index 100% rename from tutorials/legacy/OOP.js rename to src/legacy/OOP.js diff --git a/tutorials/legacy/Palindrome.js b/src/legacy/Palindrome.js similarity index 100% rename from tutorials/legacy/Palindrome.js rename to src/legacy/Palindrome.js diff --git a/tutorials/legacy/Randoms.js b/src/legacy/Randoms.js similarity index 100% rename from tutorials/legacy/Randoms.js rename to src/legacy/Randoms.js diff --git a/tutorials/legacy/Remainder.js b/src/legacy/Remainder.js similarity index 100% rename from tutorials/legacy/Remainder.js rename to src/legacy/Remainder.js diff --git a/tutorials/legacy/Rot13Decipher.js b/src/legacy/Rot13Decipher.js similarity index 100% rename from tutorials/legacy/Rot13Decipher.js rename to src/legacy/Rot13Decipher.js diff --git a/tutorials/legacy/Slasher.js b/src/legacy/Slasher.js similarity index 100% rename from tutorials/legacy/Slasher.js rename to src/legacy/Slasher.js diff --git a/tutorials/legacy/Truncate.js b/src/legacy/Truncate.js similarity index 100% rename from tutorials/legacy/Truncate.js rename to src/legacy/Truncate.js diff --git a/tutorials/legacy/continueStatement.html b/src/legacy/continueStatement.html similarity index 100% rename from tutorials/legacy/continueStatement.html rename to src/legacy/continueStatement.html diff --git a/tutorials/legacy/errorHandling.html b/src/legacy/errorHandling.html similarity index 100% rename from tutorials/legacy/errorHandling.html rename to src/legacy/errorHandling.html diff --git a/tutorials/legacy/errorHandling2.html b/src/legacy/errorHandling2.html similarity index 100% rename from tutorials/legacy/errorHandling2.html rename to src/legacy/errorHandling2.html diff --git a/tutorials/legacy/factorial.js b/src/legacy/factorial.js similarity index 100% rename from tutorials/legacy/factorial.js rename to src/legacy/factorial.js diff --git a/tutorials/legacy/functions.html b/src/legacy/functions.html similarity index 100% rename from tutorials/legacy/functions.html rename to src/legacy/functions.html diff --git a/tutorials/legacy/largestNumbers.js b/src/legacy/largestNumbers.js similarity index 100% rename from tutorials/legacy/largestNumbers.js rename to src/legacy/largestNumbers.js diff --git a/tutorials/legacy/multiDimensionalMultiplication.js b/src/legacy/multiDimensionalMultiplication.js similarity index 100% rename from tutorials/legacy/multiDimensionalMultiplication.js rename to src/legacy/multiDimensionalMultiplication.js diff --git a/tutorials/legacy/objects.js b/src/legacy/objects.js similarity index 100% rename from tutorials/legacy/objects.js rename to src/legacy/objects.js diff --git a/tutorials/legacy/reduce.js b/src/legacy/reduce.js similarity index 100% rename from tutorials/legacy/reduce.js rename to src/legacy/reduce.js diff --git a/tutorials/legacy/reverse.js b/src/legacy/reverse.js similarity index 100% rename from tutorials/legacy/reverse.js rename to src/legacy/reverse.js diff --git a/tutorials/legacy/sort.js b/src/legacy/sort.js similarity index 100% rename from tutorials/legacy/sort.js rename to src/legacy/sort.js diff --git a/tutorials/legacy/this.js b/src/legacy/this.js similarity index 85% rename from tutorials/legacy/this.js rename to src/legacy/this.js index 1413e48..ff1ba58 100755 --- a/tutorials/legacy/this.js +++ b/src/legacy/this.js @@ -5,7 +5,7 @@ let talk = function() { let boromir = { //speak: talk.bind(this), speak: talk, - sound: 'One does simly walk into mordor!' + sound: 'One does not simply walk into mordor!' } let gollum = { diff --git a/tutorials/legacy/validation.html b/src/legacy/validation.html similarity index 100% rename from tutorials/legacy/validation.html rename to src/legacy/validation.html diff --git a/tutorials/js_basics/browsers/0_index.html b/src/runtimes/browser/0_index.html similarity index 100% rename from tutorials/js_basics/browsers/0_index.html rename to src/runtimes/browser/0_index.html diff --git a/tutorials/js_basics/browsers/0_index.js b/src/runtimes/browser/0_index.js similarity index 100% rename from tutorials/js_basics/browsers/0_index.js rename to src/runtimes/browser/0_index.js diff --git a/tutorials/js_basics/browsers/1_variables.js b/src/runtimes/browser/1_variables.js similarity index 100% rename from tutorials/js_basics/browsers/1_variables.js rename to src/runtimes/browser/1_variables.js diff --git a/tutorials/js_basics/browsers/2_constants.js b/src/runtimes/browser/2_constants.js similarity index 100% rename from tutorials/js_basics/browsers/2_constants.js rename to src/runtimes/browser/2_constants.js diff --git a/src/runtimes/node/0_def.txt b/src/runtimes/node/0_def.txt new file mode 100755 index 0000000..eb7542e --- /dev/null +++ b/src/runtimes/node/0_def.txt @@ -0,0 +1,41 @@ +def node: + - event driven IO + - non-blocking IO framework + - a tool for networking + written on top of Google V8(Dahl, 2011) + + - single-threaded process + - share-nothing model + must use a protocol to talk to other process + - protocol = {tcp, http, grpc ...} + + - applications: + - networking services + - ... +properties (Dahl, 2011): + the program never: + - stops + - sleep + - execute IO and wait + example: open file, fetch URL + + NB: the ability to sleep is sealed off completely in node. + You can only idle: + in idle: + - CPU usage goes to zero + - OS unschedules it + + hence non-blocking + examples: + src/node/0_non_block_1.js + src/node/0_non_block.js + + process exit: + - node waits until all calla=backs are resolved + before gracefull automatically existing + +alternatives: + Deno: https://github.com/denoland + +References: + Dahl, R. Introduction to Node.js with Ryan Dahl. 2011. https://www.youtube.com/watch?v=jo_B4LTHi3I \ No newline at end of file diff --git a/src/runtimes/node/0_non_block.js b/src/runtimes/node/0_non_block.js new file mode 100755 index 0000000..2440d64 --- /dev/null +++ b/src/runtimes/node/0_non_block.js @@ -0,0 +1,6 @@ +setTimeout(() => console.log("World"), 200); +console.log("Hello"); +/* +References: + Dahl, R. Introduction to Node.js with Ryan Dahl. 2011. https://www.youtube.com/watch?v=jo_B4LTHi3I +*/ \ No newline at end of file diff --git a/src/runtimes/node/1_0_http.js b/src/runtimes/node/1_0_http.js new file mode 100755 index 0000000..cbafb0c --- /dev/null +++ b/src/runtimes/node/1_0_http.js @@ -0,0 +1,25 @@ +let http = require("http") + +// user: call to createServer executed every time a request comes into received on the server +// NB: not every time a connection is made to the server +let server = http.createServer((req, res) => { + console.log("request received"); + res.writeHead(200, {"Content-Type": "text/plain"}) + res.end("Hello World"); // response body + console.log("request completed"); +}); + +server.listen(8000) + +/* added default headers: + Keep-Alive: timeout=5 = persistent connection to the server. the TCP connection stays alive and is reused. + Transfer-Encoding: chunked = used to enable variable length responses + used for streaming. node returns values from downstream server immediately it receives it, + it does not buffer the results in the server memory + +*/ + +/* +References: + Dahl, R. Introduction to Node.js with Ryan Dahl. 2011. https://www.youtube.com/watch?v=jo_B4LTHi3I +*/ \ No newline at end of file diff --git a/src/runtimes/node/1_1_http_chunked.js b/src/runtimes/node/1_1_http_chunked.js new file mode 100755 index 0000000..ce3f822 --- /dev/null +++ b/src/runtimes/node/1_1_http_chunked.js @@ -0,0 +1,56 @@ +let http = require("http") + + +let server = http.createServer((req, res) => { + //console.log("request received"); + res.writeHead(200, {"Content-Type": "text/plain"}); + res.write("Hello\n"); + setTimeout(() => { + res.end("World\n"); + }, 2000); + //console.log("request completed"); +}); + + +server.listen(8000); + +/* + - semantics: + "Hello" is returned to the client + Then 2 seconds later "World" is returned + + NB: in between the 2 seconds, the server can still receive and process requests + because it idles but does NOT sleep(Dahl, 2011). + example: + `ab -n 100 -c 100 http://127.0.0.1:8000/` + all the requests are handled in ~2 seconds, because there is no waiting. + if thre was: + each subsequent request-response cycle would be 2 seconds later: + i.e. 1st one = 2 seconds + 2nd one = 4 seconds + 3rd one = 6 seconds + + implication: node handles concurrency very well + because it never sleeps, it can always handle another connection (Dahl, 2011). + + this means it generally performs better than a traditional webserver + especially under high concurrency loads + + application: + can be used to implement highly web servers (Dahl, 2011). + - client receiption of responses: + HTTP 1.1. handles informing the client when the response is complete: + That's the reason for the 'Transfer-Encoding: chunked' header (Dahl, 2011) + +*/ + +/* + test: + curl -i http://localhost:8000 + +*/ + +/* +References: + Dahl, R. Introduction to Node.js with Ryan Dahl. 2011. https://www.youtube.com/watch?v=jo_B4LTHi3I +*/ \ No newline at end of file diff --git a/src/runtimes/node/2_0_tcp.js b/src/runtimes/node/2_0_tcp.js new file mode 100755 index 0000000..d08b841 --- /dev/null +++ b/src/runtimes/node/2_0_tcp.js @@ -0,0 +1,18 @@ +let tcp = require("net") + +let server = tcp.createServer((socket) => { + socket.write("Hello\n"); + socket.end("World\n"); +}); + +server.listen(8000); + +/* + test: + telnet localhost 8000 +*/ + +/* +References: + Dahl, R. Introduction to Node.js with Ryan Dahl. 2011. https://www.youtube.com/watch?v=jo_B4LTHi3I +*/ \ No newline at end of file diff --git a/src/runtimes/node/2_1_tcp_receive_data.js b/src/runtimes/node/2_1_tcp_receive_data.js new file mode 100755 index 0000000..0cd18e5 --- /dev/null +++ b/src/runtimes/node/2_1_tcp_receive_data.js @@ -0,0 +1,28 @@ +let tcp = require("net") + +let server = tcp.createServer((socket) => { + socket.write("Hello\n"); + socket.write("World\n"); + + socket.on("data", (data) => { + + socket.write("data received: " + data); + }) +}); + +server.listen(8000); + +/* + test: + nc localhost 8000 + first output: + Hello + World + input: aaaa + output: data received:aaaa +*/ + +/* +References: + Dahl, R. Introduction to Node.js with Ryan Dahl. 2011. https://www.youtube.com/watch?v=jo_B4LTHi3I +*/ \ No newline at end of file diff --git a/src/runtimes/node/2_2_tcp_app_chat.js b/src/runtimes/node/2_2_tcp_app_chat.js new file mode 100755 index 0000000..34638d8 --- /dev/null +++ b/src/runtimes/node/2_2_tcp_app_chat.js @@ -0,0 +1,42 @@ +let tcp = require("net") + +let sockets = []; + +let server = tcp.createServer((socket) => { + sockets.push(socket); //register socket(i.e. connected person/client) + + socket.on("data", (data) => { + //broadcast to everyone connected to server(i.e. every socket) + for(let i = 0; i < sockets.length; i++){ + if(sockets[i] == socket) continue; //do not broadcast to self + sockets[i].write(data); + } + }); + + //clean up disconnected sockets + socket.on("end", () => { + let disconnected_socket_index = sockets.indexOf(socket); + sockets.splice(disconnected_socket_index, 1); + } +) ; +}); + +server.listen(8000); + +/* + test: + nc localhost 8000 // first_client + nc localhost 8000 // second_client + + on first_client + input = hello + output: none + on second_client + output = hello + +*/ + +/* +References: + Dahl, R. Introduction to Node.js with Ryan Dahl. 2011. https://www.youtube.com/watch?v=jo_B4LTHi3I +*/ \ No newline at end of file diff --git a/src/runtimes/node/legacy/Events/app.js b/src/runtimes/node/legacy/Events/app.js new file mode 100755 index 0000000..b726f8d --- /dev/null +++ b/src/runtimes/node/legacy/Events/app.js @@ -0,0 +1,15 @@ +//let Emitter = require('./emitter') +let Emitter = require('events')//Using Nodes Event emitter +let events = require('./config').events + +let emtr = new Emitter() + +//Registering events and listeners +emtr.on(events.GREET, () => console.log('A greeting happened')) +emtr.on(events.GREET, () => console.log('I am responding to a "greet" event§')) +emtr.on(events.SYSTEMDATESCHANGED, () => console.log('It is a new day')) + +//Emitting and event + +emtr.emit('greet') +emtr.emit('SystemDatesChanged') \ No newline at end of file diff --git a/src/runtimes/node/legacy/Events/config.js b/src/runtimes/node/legacy/Events/config.js new file mode 100755 index 0000000..bd3e92c --- /dev/null +++ b/src/runtimes/node/legacy/Events/config.js @@ -0,0 +1,6 @@ +module.exports = { + events : { + GREET: 'greet', + SYSTEMDATESCHANGED: 'SystemDatesChanged' + } +} diff --git a/src/runtimes/node/legacy/Events/emitter.js b/src/runtimes/node/legacy/Events/emitter.js new file mode 100755 index 0000000..ec398c0 --- /dev/null +++ b/src/runtimes/node/legacy/Events/emitter.js @@ -0,0 +1,18 @@ +//Look at the events.js module in Node for a more robust implementation +function Emitter() { + this.events = {} +} + +//type =eventType, listener = function +Emitter.prototype.on = function(type, listener) { + this.events[type] = this.events[type] || [] + this.events[type].push(listener) +} + +Emitter.prototype.emit = function(type) { + if(this.events[type]) { + this.events[type].forEach((listener) => listener()) + } +} + +module.exports = Emitter \ No newline at end of file diff --git a/src/runtimes/node/legacy/Modules/app_folder_module.js b/src/runtimes/node/legacy/Modules/app_folder_module.js new file mode 100755 index 0000000..edf345c --- /dev/null +++ b/src/runtimes/node/legacy/Modules/app_folder_module.js @@ -0,0 +1,4 @@ +var greet = require('./greet') + +greet.english(); +greet.spanish(); \ No newline at end of file diff --git a/src/runtimes/node/legacy/Modules/app_module_patterns.js b/src/runtimes/node/legacy/Modules/app_module_patterns.js new file mode 100755 index 0000000..dc17af6 --- /dev/null +++ b/src/runtimes/node/legacy/Modules/app_module_patterns.js @@ -0,0 +1,24 @@ +var greet1 = require('./patterns/greet1'); +greet1(); + +var greet2 = require('./patterns/greet2').greet; +greet2(); + +var greet3 = require('./patterns/greet3'); +greet3.greet(); +greet3.greeting = 'Changed Hello world!!'; + +var greet3b = require('./patterns/greet3'); +greet3b.greet(); + +var Greet4 = require('./patterns/greet4'); +var grtr = new Greet4; +grtr.greet(); + +var greet5 = require('./patterns/greet5'); +greet5.greet(); +console.log(greet5.greeting); +/* + Does not work, because the variable is not revealed/exposed + Seems to not work even if I export the varaible, why? : I wasn't not printing it, duh@@@!!??' +*/ diff --git a/src/runtimes/node/legacy/Modules/greet/english.js b/src/runtimes/node/legacy/Modules/greet/english.js new file mode 100755 index 0000000..41d3f8e --- /dev/null +++ b/src/runtimes/node/legacy/Modules/greet/english.js @@ -0,0 +1,7 @@ +var greetings = require('./greetingsloader') + +var greet = function(){ + console.log(greetings.en) +} + +module.exports = greet \ No newline at end of file diff --git a/src/runtimes/node/legacy/Modules/greet/greetings.json b/src/runtimes/node/legacy/Modules/greet/greetings.json new file mode 100755 index 0000000..711a60b --- /dev/null +++ b/src/runtimes/node/legacy/Modules/greet/greetings.json @@ -0,0 +1,4 @@ +{ + "en": "Hello", + "es": "Hola" +} \ No newline at end of file diff --git a/src/runtimes/node/legacy/Modules/greet/greetingsloader.js b/src/runtimes/node/legacy/Modules/greet/greetingsloader.js new file mode 100755 index 0000000..744afea --- /dev/null +++ b/src/runtimes/node/legacy/Modules/greet/greetingsloader.js @@ -0,0 +1,3 @@ +var greetings = require('./greetings.json') + +module.exports = greetings \ No newline at end of file diff --git a/src/runtimes/node/legacy/Modules/greet/index.js b/src/runtimes/node/legacy/Modules/greet/index.js new file mode 100755 index 0000000..1850d4c --- /dev/null +++ b/src/runtimes/node/legacy/Modules/greet/index.js @@ -0,0 +1,7 @@ +var english = require('./english') +var spanish = require('./spanish') + +module.exports = { + english: english, + spanish: spanish +} \ No newline at end of file diff --git a/src/runtimes/node/legacy/Modules/greet/spanish.js b/src/runtimes/node/legacy/Modules/greet/spanish.js new file mode 100755 index 0000000..3cb0052 --- /dev/null +++ b/src/runtimes/node/legacy/Modules/greet/spanish.js @@ -0,0 +1,7 @@ +var greetings = require('./greetingsloader') + +var greet = function(){ + console.log(greetings.es) +} + +module.exports = greet \ No newline at end of file diff --git a/src/runtimes/node/legacy/Modules/patterns/greet1.js b/src/runtimes/node/legacy/Modules/patterns/greet1.js new file mode 100755 index 0000000..bdbb901 --- /dev/null +++ b/src/runtimes/node/legacy/Modules/patterns/greet1.js @@ -0,0 +1,4 @@ +//override the modules's exports with a function +module.exports = function(){ + console.log('Hello world'); +}; diff --git a/src/runtimes/node/legacy/Modules/patterns/greet2.js b/src/runtimes/node/legacy/Modules/patterns/greet2.js new file mode 100755 index 0000000..f2eb692 --- /dev/null +++ b/src/runtimes/node/legacy/Modules/patterns/greet2.js @@ -0,0 +1,5 @@ +//Add a property to the module's exports + +module.exports.greet = function(){ + console.log('Hello world!'); +}; diff --git a/src/runtimes/node/legacy/Modules/patterns/greet3.js b/src/runtimes/node/legacy/Modules/patterns/greet3.js new file mode 100755 index 0000000..de10b8e --- /dev/null +++ b/src/runtimes/node/legacy/Modules/patterns/greet3.js @@ -0,0 +1,12 @@ +/* overide the module's exports with your own object + We're using a function constructor here. + This same object is returned for any subsequent calls of require('./greet3') +*/ +function Greetr(){ + this.greeting = 'Hello world!!'; + this.greet = function(){ + console.log(this.greeting); + } +} + +module.exports = new Greetr(); diff --git a/src/runtimes/node/legacy/Modules/patterns/greet4.js b/src/runtimes/node/legacy/Modules/patterns/greet4.js new file mode 100755 index 0000000..724ee09 --- /dev/null +++ b/src/runtimes/node/legacy/Modules/patterns/greet4.js @@ -0,0 +1,13 @@ +/* overide the module's exports with your own object + We're using a function constructor here. + This same object is returned for any subsequent calls of require('./greet3') + What if you want to create different objects? Answer is below +*/ +function Greetr(){ + this.greeting = 'Hello world!!!'; + this.greet = function(){ + console.log(this.greeting); + } +} + +module.exports = Greetr; diff --git a/src/runtimes/node/legacy/Modules/patterns/greet5.js b/src/runtimes/node/legacy/Modules/patterns/greet5.js new file mode 100755 index 0000000..f7d94bc --- /dev/null +++ b/src/runtimes/node/legacy/Modules/patterns/greet5.js @@ -0,0 +1,16 @@ +/* + The revealing module pattern + + You only expose what you want the world to see (an interface) + variables like greeeting are hidden from the client of this module in this implementation +*/ +var greeting = 'Hello world!!!!'; + +function greet(){ + console.log(greeting); +} + +module.exports = { + greet: greet, + greeting: greeting +} diff --git a/src/runtimes/node/legacy/Prototypes.js b/src/runtimes/node/legacy/Prototypes.js new file mode 100755 index 0000000..5ae9a81 --- /dev/null +++ b/src/runtimes/node/legacy/Prototypes.js @@ -0,0 +1,15 @@ +function Person(firstname, lastname){ + this.firstname = firstname + this.lastname = lastname +} + +Person.prototype.greet = function(){ + console.log("Hello " + this.firstname + " " + this.lastname) +} + +let john = new Person("John", "Doe"); +let jane = new Person("Jane", "Doe"); + +console.log(john) +john.greet() +jane.greet() \ No newline at end of file diff --git a/src/runtimes/node/legacy/server/SimpleHTTPServer.java b/src/runtimes/node/legacy/server/SimpleHTTPServer.java new file mode 100755 index 0000000..aa32813 --- /dev/null +++ b/src/runtimes/node/legacy/server/SimpleHTTPServer.java @@ -0,0 +1,24 @@ +import com.sun.net.httpserver.HttpServer; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpExchange; + +import java.io.IOException; +import java.net.InetSocketAddress; + +public class SimpleHTTPServer { + public static void main(String[] args) { + HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0) + server.createContext("/", new Handler()); + } +} + +static class Handler implements HttpHandler { + @Override + public void handle(HttpExchange exchange) throws IOException { + for (int i = 0; i < 100000; i++) { + for (int j = 0; j < 100000; j++) { + int result = i * j; + } + } + } +} \ No newline at end of file diff --git a/src/runtimes/node/legacy/server/test_server.js b/src/runtimes/node/legacy/server/test_server.js new file mode 100755 index 0000000..d64a45f --- /dev/null +++ b/src/runtimes/node/legacy/server/test_server.js @@ -0,0 +1,15 @@ +let http = require("http"); + +let server = http.createServer((req, res) => { + console.log("I got a request"); + for (i = 0; i < 100000; i++) { + for (j = 0; j < 100000; j++) { + i * j + } + } + res.end("done"); +}); + +console.log("starting server"); +server.listen(8000) +console.log("server listening"); diff --git a/tutorials/js_basics/README.md b/tutorials/js_basics/README.md deleted file mode 100755 index 8b8f0f5..0000000 --- a/tutorials/js_basics/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# js_basics - -# References: -- JavaScript Tutorial for Beginners: Learn JavaScript in 1 Hour: https://youtu.be/W6NZfCO5SIk \ No newline at end of file