{"_id":"@8thwall/xrextras","_rev":"10-94d1f3fa317190006009a4b55b2a29b8","name":"@8thwall/xrextras","dist-tags":{"alpha":"1.0.0-alpha.4","latest":"1.0.0"},"versions":{"1.0.0-alpha.0":{"name":"@8thwall/xrextras","version":"1.0.0-alpha.0","keywords":["8thwall","xrextras","xr","augmented reality","webxr"],"author":{"name":"8th Wall Team"},"license":"MIT","_id":"@8thwall/xrextras@1.0.0-alpha.0","maintainers":[{"name":"dat-8thwall","email":"dat@8thwall.com"},{"name":"atomarch","email":"atomarch@gmail.com"},{"name":"cmbartschat8","email":"christoph@8thwall.com"},{"name":"waynehsu64","email":"wayne@8thwall.com"},{"name":"kaci8","email":"kaci@8thwall.com"}],"homepage":"https://8thwall.org","bugs":{"url":"https://github.com/8thwall/8thwall/issues"},"dist":{"shasum":"7b9704a83129cfc6c3d13aafb049f47b982b13f4","tarball":"https://registry.npmjs.org/@8thwall/xrextras/-/xrextras-1.0.0-alpha.0.tgz","fileCount":26,"integrity":"sha512-bUlfp1uOC5E4h3dFruEzd3xzM8+ozri1hGVb1ZoyybgX4xc+QgijeKZGIlRHPBERChDrC2nq+UwBw/obMcWXpw==","signatures":[{"sig":"MEYCIQCCJgLeGWLbNVBxrAzTZdziHNyy/yHVKa9ypTqaEfjeVwIhAJ78aBgKpTlSnMJg5998aGSuRAd6lP8lhRxwGHOxqPW9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":358447},"main":"dist/index.js","gitHead":"319831b33bcd1a79f91c59ec19c5548d96471384","scripts":{"dev":"webpack server --devtool eval --mode development","build":"webpack","clean":"rm -rf dist","prepack":"npm run clean && npm run build"},"_npmUser":{"name":"cmbartschat8","email":"christoph@8thwall.com"},"jsdelivr":"dist/xrextras.js","repository":{"url":"git+https://github.com/8thwall/8thwall.git","type":"git","directory":"packages/xrextras"},"_npmVersion":"9.6.7","description":"Helper libraries that support and extend the capabilities of the 8th Wall Engine.","directories":{},"_nodeVersion":"18.17.1","_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.88.1","ts-loader":"^9.4.4","css-loader":"^6.8.1","typescript":"^5.1.6","html-loader":"^4.2.0","text-loader":"^0.0.1","webpack-cli":"^5.1.4","style-loader":"^3.3.3","@types/aframe":"^1.2.2","webpack-dev-server":"^4.15.1","copy-webpack-plugin":"^13.0.1"},"_npmOperationalInternal":{"tmp":"tmp/xrextras_1.0.0-alpha.0_1773965664687_0.5111860517894515","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.1":{"name":"@8thwall/xrextras","version":"1.0.0-alpha.1","keywords":["8thwall","xrextras","xr","augmented reality","webxr"],"author":{"name":"8th Wall Team"},"license":"MIT","_id":"@8thwall/xrextras@1.0.0-alpha.1","maintainers":[{"name":"dat-8thwall","email":"dat@8thwall.com"},{"name":"atomarch","email":"atomarch@gmail.com"},{"name":"cmbartschat8","email":"christoph@8thwall.com"},{"name":"waynehsu64","email":"wayne@8thwall.com"},{"name":"kaci8","email":"kaci@8thwall.com"}],"homepage":"https://8thwall.org","bugs":{"url":"https://github.com/8thwall/8thwall/issues"},"dist":{"shasum":"de2e2048a609f54f4d1eb1cdd476e8ee83b16a63","tarball":"https://registry.npmjs.org/@8thwall/xrextras/-/xrextras-1.0.0-alpha.1.tgz","fileCount":30,"integrity":"sha512-RHmHoTFIhk/Ec+Md5RWGHQw6aKE5XaUYKCeA2/MY/IjsDKLMTq6SKRjJkX24sHIFlc20uSgDR/kw0zPLbO2mHQ==","signatures":[{"sig":"MEUCIE2Toxz3W3r3+FukUAlnDNvzLR2DQ4Om5leyMAKwApKdAiEAi3XDIuluKj3IcpxupZOg32rdAFHeU+bjwCcQ3DxsaXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":506885},"main":"dist/index.js","gitHead":"995183b1ac1ff69bef6f233adb54f69f33457b16","scripts":{"dev":"webpack server --devtool eval --mode development","build":"webpack","clean":"rm -rf dist","prepack":"npm run clean && npm run build"},"_npmUser":{"name":"cmbartschat8","email":"christoph@8thwall.com"},"jsdelivr":"dist/xrextras.js","repository":{"url":"git+https://github.com/8thwall/8thwall.git","type":"git","directory":"packages/xrextras"},"_npmVersion":"9.6.7","description":"Helper libraries that support and extend the capabilities of the 8th Wall Engine.","directories":{},"_nodeVersion":"18.17.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.88.1","ts-loader":"^9.4.4","css-loader":"^6.8.1","typescript":"^5.1.6","html-loader":"^4.2.0","text-loader":"^0.0.1","webpack-cli":"^5.1.4","style-loader":"^3.3.3","@types/aframe":"^1.2.2","webpack-dev-server":"^4.15.1","copy-webpack-plugin":"^13.0.1"},"_npmOperationalInternal":{"tmp":"tmp/xrextras_1.0.0-alpha.1_1773968249821_0.6218758724655498","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.2":{"name":"@8thwall/xrextras","version":"1.0.0-alpha.2","keywords":["8thwall","xrextras","xr","augmented reality","webxr"],"author":{"name":"8th Wall Team"},"license":"MIT","_id":"@8thwall/xrextras@1.0.0-alpha.2","maintainers":[{"name":"dat-8thwall","email":"dat@8thwall.com"},{"name":"atomarch","email":"atomarch@gmail.com"},{"name":"cmbartschat8","email":"christoph@8thwall.com"},{"name":"waynehsu64","email":"wayne@8thwall.com"},{"name":"kaci8","email":"kaci@8thwall.com"}],"homepage":"https://8thwall.org","bugs":{"url":"https://github.com/8thwall/8thwall/issues"},"dist":{"shasum":"beac8cc9cc8122474cfe414cb3bc98ed231b3cad","tarball":"https://registry.npmjs.org/@8thwall/xrextras/-/xrextras-1.0.0-alpha.2.tgz","fileCount":30,"integrity":"sha512-UoQqGiwYEdol2uocnqBP1doNl3+2yMCxyteRVyVF0SjeBRbpvGaSuP05yXWKpgzHbI1uqFW/i8y0xRz9ZuZY6Q==","signatures":[{"sig":"MEYCIQCUGV1ZmvC2oPKFbanZVGH/gWl0II5kFuuRPZ1LkDARggIhAJ5V/HQjhw6p/+icNYClE+MHQBEIatvzPC7me6x48Hea","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":507430},"main":"dist/index.js","gitHead":"3a952f8cdcebad7537065dd55ced5fdd7ff44808","scripts":{"dev":"webpack server --devtool eval --mode development","build":"webpack","clean":"rm -rf dist","prepack":"npm run clean && npm run build"},"_npmUser":{"name":"cmbartschat8","email":"christoph@8thwall.com"},"repository":{"url":"git+https://github.com/8thwall/8thwall.git","type":"git","directory":"packages/xrextras"},"_npmVersion":"10.9.7","description":"8th Wall utilites providing bonus functionality","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.88.1","ts-loader":"^9.4.4","css-loader":"^6.8.1","typescript":"^5.1.6","html-loader":"^4.2.0","text-loader":"^0.0.1","webpack-cli":"^5.1.4","style-loader":"^3.3.3","@types/aframe":"^1.2.2","webpack-dev-server":"^4.15.1","copy-webpack-plugin":"^13.0.1"},"_npmOperationalInternal":{"tmp":"tmp/xrextras_1.0.0-alpha.2_1775151737119_0.935634357587434","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.4":{"name":"@8thwall/xrextras","version":"1.0.0-alpha.4","keywords":["8thwall","xrextras","xr","augmented reality","loading screen","almost there","webxr"],"author":{"name":"8th Wall Team"},"license":"MIT","_id":"@8thwall/xrextras@1.0.0-alpha.4","maintainers":[{"name":"dat-8thwall","email":"dat@8thwall.com"},{"name":"atomarch","email":"atomarch@gmail.com"},{"name":"cmbartschat8","email":"christoph@8thwall.org"},{"name":"waynehsu64","email":"wayne@8thwall.com"},{"name":"kaci8","email":"kaci@8thwall.com"}],"homepage":"https://8thwall.org","bugs":{"url":"https://github.com/8thwall/8thwall/issues"},"dist":{"shasum":"8750161427a8b5cebaae855174487f390b43f844","tarball":"https://registry.npmjs.org/@8thwall/xrextras/-/xrextras-1.0.0-alpha.4.tgz","fileCount":30,"integrity":"sha512-Wjy9sPjXLwGT0b/6ZAneLj56d1fu+WSAXeNXIN67P29+WGqlqSWFIlfPu6rmrJ3C+WP3a6BSGLGvhRPcnZRpsg==","signatures":[{"sig":"MEUCIC2sLoWaXp+UO+59yqbMsZ3AfBcQsMrEYMYcUaLV8wnDAiEAhhjegM+0YH2FAonNTpXAPKiexBWjBogc3TO2OT70opY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":508556},"main":"dist/index.js","gitHead":"964817332847eb04eb2fb924f8e0d00f1066ac44","scripts":{"dev":"webpack server --devtool eval --mode development","build":"webpack && cp src/entry.js dist/index.js","clean":"rm -rf dist","prepack":"npm run clean && npm run build"},"_npmUser":{"name":"cmbartschat8","email":"christoph@8thwall.org"},"repository":{"url":"git+https://github.com/8thwall/8thwall.git","type":"git","directory":"packages/xrextras"},"_npmVersion":"10.9.7","description":"Helper utilities building on top of the 8th Wall Engine","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.88.1","ts-loader":"^9.4.4","css-loader":"^6.8.1","typescript":"^5.1.6","html-loader":"^4.2.0","text-loader":"^0.0.1","webpack-cli":"^5.1.4","style-loader":"^3.3.3","@types/aframe":"^1.2.2","webpack-dev-server":"^4.15.1","copy-webpack-plugin":"^13.0.1"},"_npmOperationalInternal":{"tmp":"tmp/xrextras_1.0.0-alpha.4_1775499873810_0.8710995412821538","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@8thwall/xrextras","version":"1.0.0","keywords":["8thwall","xrextras","xr","augmented reality","loading screen","almost there","webxr"],"author":{"name":"8th Wall Team"},"license":"MIT","_id":"@8thwall/xrextras@1.0.0","maintainers":[{"name":"dat-8thwall","email":"dat@8thwall.com"},{"name":"atomarch","email":"atomarch@gmail.com"},{"name":"cmbartschat8","email":"christoph@8thwall.org"},{"name":"waynehsu64","email":"wayne@8thwall.com"},{"name":"kaci8","email":"kaci@8thwall.com"}],"homepage":"https://8thwall.org","bugs":{"url":"https://github.com/8thwall/8thwall/issues"},"dist":{"shasum":"20059285fc68ad9615cff45d1e804a697a1193b6","tarball":"https://registry.npmjs.org/@8thwall/xrextras/-/xrextras-1.0.0.tgz","fileCount":30,"integrity":"sha512-9lOLzQK6liELjMr9ltF81o1SkXJpkXx16ZFURtjZOwZXTTH5jIwBRNnbeKIbC6TqjCL/KOZyFEzOMyQQIAkDow==","signatures":[{"sig":"MEYCIQCz0zpGiLpixs213EFfx+j89FBdE0G/CG5J/GpRUTI/aAIhAIpNpZYYrQfs3d/XkrkNH5HMnqsN3pJ+Y5iJbGGJV6CX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":508572},"main":"index.js","gitHead":"b37bcb317e51ae7c8a41644eb3dec7f3931ce48f","scripts":{"dev":"webpack server --devtool eval --mode development","build":"webpack && cp src/entry.js index.js","clean":"rm -rf dist","prepack":"npm run clean && npm run build"},"_npmUser":{"name":"cmbartschat8","email":"christoph@8thwall.org"},"repository":{"url":"git+https://github.com/8thwall/8thwall.git","type":"git","directory":"packages/xrextras"},"_npmVersion":"10.9.7","description":"Helper utilities building on top of the 8th Wall Engine","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.88.1","ts-loader":"^9.4.4","css-loader":"^6.8.1","typescript":"^5.1.6","html-loader":"^4.2.0","text-loader":"^0.0.1","webpack-cli":"^5.1.4","style-loader":"^3.3.3","@types/aframe":"^1.2.2","webpack-dev-server":"^4.15.1","copy-webpack-plugin":"^13.0.1"},"_npmOperationalInternal":{"tmp":"tmp/xrextras_1.0.0_1775600214120_0.24646634198819517","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-03-20T00:14:24.577Z","modified":"2026-04-07T22:49:12.709Z","1.0.0-alpha.0":"2026-03-20T00:14:24.881Z","1.0.0-alpha.1":"2026-03-20T00:57:29.971Z","1.0.0-alpha.2":"2026-04-02T17:42:17.350Z","1.0.0-alpha.4":"2026-04-06T18:24:33.997Z","1.0.0":"2026-04-07T22:16:54.375Z"},"bugs":{"url":"https://github.com/8thwall/8thwall/issues"},"author":{"name":"8th Wall Team"},"license":"MIT","homepage":"https://8thwall.org","keywords":["8thwall","xrextras","xr","augmented reality","loading screen","almost there","webxr"],"repository":{"url":"git+https://github.com/8thwall/8thwall.git","type":"git","directory":"packages/xrextras"},"description":"Helper utilities building on top of the 8th Wall Engine","maintainers":[{"email":"christoph@8thwall.org","name":"cmbartschat8"},{"email":"kaci@8thwall.org","name":"kaci.gl"}],"readme":"# XR Extras\n\nThis library provides modules that extend the\n[Camera Pipeline Module framework](https://docs.8thwall.com/web/#camerapipelinemodule) in\n[8th Wall XR](https://8thwall.com/products-web.html) to handle common application needs.\n\n## Usage\n\n### Option 1: Script tag\n\n```html\n<script src=\"https://cdn.jsdelivr.net/npm/@8thwall/xrextras@1/dist/xrextras.js\" crossorigin=\"anonymous\"></script>\n```\n\n### Option 2: npm\n\n```\nnpm install @8thwall/xrextras\n```\n\nYou will need to copy the included artifacts into your dist folder, for example in webpack:\n\n```js\nnew CopyWebpackPlugin({\n  patterns: [\n    {\n      from: 'node_modules/@8thwall/xrextras/dist',\n      to: 'external/xrextras',\n    }\n  ]\n})\n```\n\nYou can then load the library by adding the following to index.html:\n\n```html\n<script src=\"./external/xrextras/xrextras.js\"></script>\n```\n\nWhen you import the package, a simple helper for accessing window.XRExtras is provided. The expectation is still that the script tag is added to the HTML. \n\n```js\nimport * as XRExtras from '@8thwall/xrextras'\nXRExtras.DebugWebViews.enableLogToScreen()\n```\n\n## Development\n\nStart the development server with:\n\n```bash\nnpm install\nnpm run dev\n```\n\nTest pages will be available at https://localhost:9000/test/index.html and https://localhost:9000/test/index-aframe.html, and xrextras itself can be tested on other projects by replacing the existing script tag with:\n\n```html\n<script src=\"https://localhost:9000/xrextras.js\"></script>\n```\n\nSee [RELEASING.md](./RELEASING.md) for release instructions.\n\n## Hello World\n\n### Native JS\n\nindex.html:\n\n```html\n<html>\n  <head>\n    <title>XR Extras: Camera Pipeline</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n\n    <!-- XR Extras - provides utilities like load screen, error handling, and gesture control helpers.\n         See https://github.com/8thwall/web/tree/master/xrextras/ -->\n    <script src=\"./external/xrextras/xrextras.js\"></script>\n\n    <!-- Landing Pages - see https://www.8thwall.com/docs/web/#landing-pages -->\n    <script src='./external/landing-page/landing-page.js'></script>\n\n    <!-- 8th Wall Engine -->\n    <script async src=\"./external/xr/xr.js\"></script>\n\n    <script src=\"index.js\"></script>\n  </head>\n  <body>\n    <canvas id=\"camerafeed\"></canvas>\n  </body>\n</html>\n```\n\nindex.js:\n\n```javascript\nconst onxrloaded = () => {\n  XR8.addCameraPipelineModules([  // Add camera pipeline modules.\n    // Existing pipeline modules.\n    XR8.GlTextureRenderer.pipelineModule(),       // Draws the camera feed.\n    window.LandingPage.pipelineModule(),          // Detects unsupported browsers and gives hints.\n    XRExtras.FullWindowCanvas.pipelineModule(),   // Modifies the canvas to fill the window.\n    XRExtras.Loading.pipelineModule(),            // Manages the loading screen on startup.\n    XRExtras.RuntimeError.pipelineModule(),       // Shows an error image on runtime error.\n  ])\n\n  XR8.run({canvas: document.getElementById('camerafeed')})   // Request permissions and run camera.\n}\n\nwindow.XR8 ? onxrloaded() : window.addEventListener('xrloaded', onxrloaded)\n```\n\n### AFrame\n\nindex.html:\n\n```html\n<html>\n  <head>\n    <title>XRExtras: A-FRAME</title>\n\n    <!-- We've included a slightly modified version of A-Frame, which fixes some polish concerns -->\n    <script src=\"./external/scripts/8frame-1.5.0.min.js\"></script>\n\n    <!-- XR Extras - provides utilities like load screen, error handling, and gesture control helpers.\n         See https://github.com/8thwall/web/tree/master/xrextras/ -->\n    <script src=\"./external/xrextras/xrextras.js\"></script>\n\n    <!-- Landing Pages - see https://www.8thwall.com/docs/web/#landing-pages -->\n    <script src='./external/landing-page/landing-page.js'></script>\n\n    <!-- 8th Wall Engine -->\n      <script async src=\"./external/xr/xr.js\"></script>\n  </head>\n\n  <body>\n    <!-- Add the 'xrweb' attribute to your scene to make it an 8th Wall Web A-FRAME scene. -->\n    <a-scene\n      xrweb\n      landing-pages\n      xrextras-loading\n      xrextras-runtime-error\n      xrextras-tap-recenter>\n\n      <a-camera position=\"0 8 8\"></a-camera>\n\n      <a-entity\n        light=\"type: directional; castShadow: true; intensity: 0.8; shadowCameraTop: 7;\n               shadowMapHeight: 1024; shadowMapWidth: 1024;\"\n        position=\"1 4.3 2.5\">\n      </a-entity>\n\n      <a-entity\n        light=\"type: directional; castShadow: false; intensity: 0.5;\" position=\"-0.8 3 1.85\">\n      </a-entity>\n\n      <a-light type=\"ambient\" intensity=\"1\"></a-light>\n\n      <a-box\n        position=\"-1.7 0.5 -2\" rotation=\"0 45 0\" shadow\n        material=\"roughness: 0.8; metalness: 0.2; color: #00EDAF;\">\n      </a-box>\n\n      <a-sphere\n        position=\"-1.175 1.25 -5.2\" radius=\"1.25\" shadow\n        material=\"roughness: 0.8; metalness: 0.2; color: #DD0065;\">\n      </a-sphere>\n\n      <a-cylinder\n        position=\"2 0.75 -1.85\" radius=\"0.5\" height=\"1.5\" shadow\n        material=\"roughness: 0.8; metalness: 0.2; color: #FCEE21;\">\n      </a-cylinder>\n\n      <a-circle position=\"0 0 -4\" rotation=\"-90 0 0\" radius=\"4\" shadow\n        material=\"roughness: 0.8; metalness: 0.5; color: #AD50FF\">\n      </a-circle>\n    </a-scene>\n  </body>\n</html>\n```\n\n## API\n\n### Pipeline Modules\n\nQuick Reference:\n\n```javascript\n  XR8.addCameraPipelineModules([  // Add camera pipeline modules.\n    // Existing pipeline modules.\n    XR8.GlTextureRenderer.pipelineModule(),       // Draws the camera feed.\n    window.LandingPage.pipelineModule(),          // Detects unsupported browsers and gives hints.\n    XRExtras.FullWindowCanvas.pipelineModule(),   // Modifies the canvas to fill the window.\n    XRExtras.Loading.pipelineModule(),            // Manages the loading screen on startup.\n    XRExtras.RuntimeError.pipelineModule(),       // Shows an error image on runtime error.\n    XRExtras.PwaInstaller.pipelineModule(),       // Displays a prompt to add to home screen.\n  ])\n```\n\nPipeline Modules:\n\n* LandingPage.pipelineModule(): Detects if the user is not on a supported device or browser, and\nprovides helpful information for how to view the XR experience.\n* FullWindowCanvas.pipelineModule(): Makes sure that the camera display canvas fills the full\nbrowser window across device orientation changes, etc.\n* Loading.pipelineModule(): Displays a loading overlay and camera permissions prompt while\nlibraries are loading, and while the camera is starting up.\n* RuntimeError.pipelineModule(): Shows an error image when an error occurs at runtime.\n* PwaInstaller.pipelineModule(): Displays a prompt to add to home screen.\n\n### AFrame Components\n\nQuick Reference:\n\n```html\n    <a-scene\n      xrweb\n      landing-pages\n      xrextras-loading\n      xrextras-runtime-error\n      xrextras-tap-recenter>\n```\n\nJavascript Functions:\n\n* XRExtras.AFrame.registerXrExtrasComponents(): Registers the XR Extras AFrame components if they\naren't already registered. If AFrame is loaded befor XR Extras, then there is no need to call this\nmethod. In the case that AFrame is loaded late and you need to explicitly register the components,\nyou can call this method.\n\nAFrame Components:\n\n* landing-pages: Detects if the user is not on a supported device or browser, and provides\nhelpful information for how to view the XR experience.\n* xrextras-loading: Displays a loading overlay and camera permissions prompt while the scene and\nlibraries are loading, and while the camera is starting up.\n* xrextras-runtime-error: Hides the scene and shows an error image when an error occurs at runtime.\n* xrextras-tap-recenter: Calls 'XR.recenter()' when the AFrame scene is tapped.\n\n### Other\n\nFonts: Provides common .css for fonts used by various modules.\n\nDebugWebViews: Provides utilities for debugging javascript while it runs in browsers embedded in\napplications.\n\nQuick Reference:\n\n```html\n    <script src=\"./external/xrextras/xrextras.js\"></script>\n    <script>\n      const screenlog = () => {\n        window.XRExtras.DebugWebViews.enableLogToScreen()\n        console.log('screenlog enabled')\n      }\n      window.XRExtras ? screenlog() : window.addEventListener('xrextrasloaded', screenlog)\n    </script>\n```\n\n","readmeFilename":"README.md"}