{"_id":"@agoric/compartment-mapper","_rev":"18-44864eb0cec81d66da517f733a039e3e","name":"@agoric/compartment-mapper","dist-tags":{"latest":"0.2.4"},"versions":{"0.1.0":{"name":"@agoric/compartment-mapper","version":"0.1.0","author":{"name":"Agoric"},"license":"Apache-2.0","_id":"@agoric/compartment-mapper@0.1.0","maintainers":[{"name":"kriskowal","email":"kris.kowal@cixar.com"},{"name":"michaelfig","email":"michael@fig.org"},{"name":"katesills","email":"kate@agoric.com"},{"name":"warner","email":"warner-npm@lothar.com"},{"name":"erights","email":"erights@gmail.com"}],"dist":{"shasum":"ea5d749c1063823866495086ebec6b17a1131281","tarball":"https://registry.npmjs.org/@agoric/compartment-mapper/-/compartment-mapper-0.1.0.tgz","fileCount":20,"integrity":"sha512-gv+BJaW0nkKENWBNtR+/rgnECbH7pvu47PjWGfFg2hhkA8rJFfOS/mtsEdD+xMLvjYSpNfvmBE/ZX6RKWF+gWw==","signatures":[{"sig":"MEUCIQDh/hBMOLYVmhzBIyyvmoKNipqbF7hsyFWxxabooC5JsgIgB1G3u8HTJ8pGHKee/Pw0pVWTR+dGeIFNIyZgamT3nlU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1959929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaT7nCRA9TVsSAnZWagAAp9IP/1jB2CgI9FLV33SxAkhN\nKxxXwlFs7O/4eLuRRN6hydFCg7ZdDUBHTT5kLfjzlbNbS89RJNgO4PgCQFoO\n3pry3lg2XxQeN9O2rvfJHe/4B+9ZeekGK+vQjmltLrf/s5XhmWmSDOfXB0wp\n5/f6GhuQZzzmE9OwfWysNjJ22w3/2iY7/IEsVA2C9jDXwYPf/Pq0oW/PTn1u\nvyY++mUbOw8jF6uaX+PxLrn8HEvycrj4xMr2e2EKRCDRHfVYlf2i1FqFtiIo\n960Q0b+S7Oz2vRqqk3X1wnl2gbha6Ub6BObGpHw8U31/YUbjTA4A7UWzSVcs\nS6xCLGSq6U9W8gatSaWqohHsOUibdomuQ3+i0kmKUTiU9Xvt/WREh43euncD\n1LSxOSaGIQEayxPOVOz7XkdqMSwYjHiBN7Td6J5N5/6tRkk4kOHRS/QiC8w4\nbf70rXEBckaQ6Fu0fS+v+HV+qBIdIfdkxHU1ZgAhCOmX9a0lZHpsoqCmPvUX\nd4xl9JszjV4TvDHQC1HJbGWqmR3vfbXZTFdwTteLqeAaBcPeCzVnjpdCmGp6\nBr3auJXsLHsGfIsIM3XJ0hPUX9SKBZMN8miI+UxGZ3iS5WxrT69Kko1IpNOE\nJCc8md4GsNzO1K7WquTEHaVm6XybstkR0vPR9aiLk4b0kzHwRgTCIVcO30c4\naGDD\r\n=kVuj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/compartment-mapper.cjs","type":"module","module":"./src/main.js","exports":{"import":"./src/main.js","require":"./dist/compartment-mapper.cjs"},"scripts":{"qt":"tap --no-esm --no-coverage --reporter spec 'test/**/*.test.js'","lint":"eslint '**/*.js'","test":"yarn build && yarn qt","build":"rollup --config rollup.config.js","clean":"rm -rf dist","depcheck":"depcheck","lint-fix":"eslint --fix '**/*.js'","prepublish":"yarn clean && yarn build"},"_npmUser":{"name":"kriskowal","email":"kris.kowal@cixar.com"},"deprecated":"Use @endo/compartment-mapper","_npmVersion":"6.14.5","description":"The compartment mapper assembles Node applications in a sandbox","directories":{},"_nodeVersion":"14.5.0","dependencies":{"ses":"^0.10.1","jszip":"^3.4.0","@babel/parser":"^7.8.4","@babel/traverse":"^7.8.4"},"_hasShrinkwrap":false,"devDependencies":{"tap":"^14.10.5","tape":"^4.12.1","eslint":"^6.8.0","rollup":"^2.0.0","@rollup/plugin-json":"^4.1.0","eslint-plugin-import":"^2.19.1","eslint-config-prettier":"^6.9.0","eslint-plugin-prettier":"^3.1.2","@rollup/plugin-commonjs":"^13.0.0","eslint-config-airbnb-base":"^14.0.0","@rollup/plugin-node-resolve":"^9.0.0","eslint-plugin-eslint-comments":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/compartment-mapper_0.1.0_1600732902493_0.5021618736786002","host":"s3://npm-registry-packages"}},"0.2.0":{"name":"@agoric/compartment-mapper","version":"0.2.0","author":{"name":"Agoric"},"license":"Apache-2.0","_id":"@agoric/compartment-mapper@0.2.0","maintainers":[{"name":"kriskowal","email":"kris.kowal@cixar.com"},{"name":"michaelfig","email":"michael@fig.org"},{"name":"katesills","email":"kate@agoric.com"},{"name":"warner","email":"warner-npm@lothar.com"},{"name":"erights","email":"erights@gmail.com"}],"dist":{"shasum":"f80e8c3eb76fafe16816d099fd45433ce8b22f82","tarball":"https://registry.npmjs.org/@agoric/compartment-mapper/-/compartment-mapper-0.2.0.tgz","fileCount":30,"integrity":"sha512-8KxNUJxfr/tgMNdCxYkx8ZhMZlKV7VknMbaDOqqw6BElFfZVyZe6tFGGyC8wCkqfLcEVZt75gQ+nl0fukXv3RA==","signatures":[{"sig":"MEUCICBROc4wwuLn+YJ4H0J/UU8z0a7NNC9GfB86cmjVzMIVAiEAnrfu+unb6K4CTeT+jo7QMkZ0E6xpCdKu0SW887AheNI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":185910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfodlmCRA9TVsSAnZWagAArEUP/2faRcl5IybIO7xByHDm\nj2EI5jkNdeEIxZK7tZLIJIDJdehu60nEEU1ovIqF8+2cVPe64nqYPk7Nbdk0\nT+bD/8SshP0pi+uenz4f5OuGvLG+fCY60wg3dPFX+XvIK6cvUJpZytiGtFal\nim35CrY3MM33peENZmb1nYAAoT2T8HdAgP8T8j4eG6PzlUU1VcgN8XnjGlem\nRSWXKYWtBxE1k9+MCtcd9Q90tA6tg+pbr4gu+e+ynrSu77PqFraaEIGWlUEs\nBNMRXiN8lC0twnOLFQfWKQ3+iVESpFcs7MJ++96qhIsopnL3XXNT3VKaXCPr\nkuOjwrziAru86/8bYhRQOMEC7XdVd2ctp4Oe9Mn4yySH6wMPdWD2RG5wWW32\nA18kINj31po4E+5CroCUI2Ni2rE93JkskbHyGvA2FmagPKNdpyfxsLjh+/Os\nq8Xo+nArI+Iq2b83whalkfNWuU8vYkdSN0ThWid3kK3Xj1LTLzDvvuun9sRn\nu81In+9WO1mN311wTVt8c/BoBT8A3Nvmz6epWcST+jTL9GXrkuRq5ITmYbB3\nxM11haMI3uBWC/FHmX7uezXfrqAwRcZTbitRVrZ6NNnh5IY+RegZ7CWb9WuR\nOYrghA/0gXrz2hGbNEGStfWvAZg/WBLj9wC+JD4z4RFKR47fE+jdNH/d59mE\nzB0t\r\n=jlcX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/compartment-mapper.cjs","type":"module","module":"./src/main.js","exports":{"import":"./src/main.js","require":"./dist/compartment-mapper.cjs"},"scripts":{"qt":"tap --no-esm --no-coverage --reporter spec 'test/**/*.test.js'","lint":"eslint '**/*.js'","test":"yarn build && yarn qt","build":"rollup --config rollup.config.js","clean":"rm -rf dist","depcheck":"depcheck","lint-fix":"eslint --fix '**/*.js'","prepublish":"yarn clean && yarn build"},"_npmUser":{"name":"kriskowal","email":"kris.kowal@cixar.com"},"deprecated":"Use @endo/compartment-mapper","_npmVersion":"6.14.5","description":"The compartment mapper assembles Node applications in a sandbox","directories":{},"_nodeVersion":"14.5.0","dependencies":{"ses":"^0.11.0"},"_hasShrinkwrap":false,"devDependencies":{"tap":"^14.10.5","tape":"^4.12.1","eslint":"^6.8.0","rollup":"^2.0.0","@rollup/plugin-json":"^4.1.0","eslint-plugin-import":"^2.19.1","eslint-config-prettier":"^6.9.0","eslint-plugin-prettier":"^3.1.2","@rollup/plugin-commonjs":"^13.0.0","eslint-config-airbnb-base":"^14.0.0","@rollup/plugin-node-resolve":"^9.0.0","eslint-plugin-eslint-comments":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/compartment-mapper_0.2.0_1604442469991_0.5002695603241303","host":"s3://npm-registry-packages"}},"0.2.1":{"name":"@agoric/compartment-mapper","version":"0.2.1","author":{"name":"Agoric"},"license":"Apache-2.0","_id":"@agoric/compartment-mapper@0.2.1","maintainers":[{"name":"kriskowal","email":"kris.kowal@cixar.com"},{"name":"michaelfig","email":"michael@fig.org"},{"name":"katesills","email":"kate@agoric.com"},{"name":"warner","email":"warner-npm@lothar.com"},{"name":"erights","email":"erights@gmail.com"}],"dist":{"shasum":"8ff980baff857403317852fcd1b005ebe9ab2523","tarball":"https://registry.npmjs.org/@agoric/compartment-mapper/-/compartment-mapper-0.2.1.tgz","fileCount":30,"integrity":"sha512-rEKDq9l8t/R1QwG9DZFTDkVIpU5Kn1itNmRteafbVtSMeos3DHofvwyHpYqrpHlF80RQ7degK42mJrqv6H1wFA==","signatures":[{"sig":"MEUCIDto1/6pICZxT/e0xMgk7qQUZHxzz2l5mFXkM1v4S1m1AiEAhfwNAlh463fEUGTaWFmzHbUxN57S46ob/Eiwvk3bdE8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":188404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfo5TyCRA9TVsSAnZWagAAYg8P/0F7Iy3yAbrjEx9gsoUs\nkULUYil5rkiJDy8ck8D9OsACm/9UMlNuKlJ4mtBgltrsLn7biWuDoaiHSLGQ\npy7B0sOAZ2zno6qE/WkiW673gwVmU6xFThVkFqxJ9AYWmwDcjmaAnu4QISko\nWr0yrYTctEZpKR54fBpKmp+iBVzuh3hec2BxeFIX5PJ0GkvgkZV/p5oyDyCr\n5bg95EgzVlUhULLkK1UUr0tzB98iEuaSsK8htZBvtT4HIH2VaonFXyE/JjtM\nJZ3CrwS9ua+xmTRVvdESkJ2DqwZsPgsNPtF8sGKRgBd5kozr6Lomtx1C5Mxa\nEU8ibBjsYJUl27O0mPXZlJAeopxGHUCaKFR4WmbUmjTPpxsqS/AlqZ5jGmEk\nmCGBI04pBs9IcW9+Ucqf25a8H83vJPABnKX7C17dBtheUWUSDR14dudkvBSr\nUTCxf3WkZOyauo0CQ5cl5JPvJF0jEHI7twwZqsCuiVlLJ956VNPUYVoIfH/L\nLDCQMbvq/vkWn0oYF1yUOtWVF7zZjUo7+Hppp1BolT3ANIitnVB1WyumTtBR\ngxTpg00e255VcGUv9SxqGx+l4Wlov/MDhwbryiN3mrU4n+hckZKrFMpvPlxc\nQPkILZauNWcxy36U3T3xMROsiZUushhhFEulLZAx/F2WFTR4UrCGTLD3slIS\nlVy+\r\n=u1kZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/compartment-mapper.cjs","type":"module","module":"./src/main.js","exports":{"import":"./src/main.js","require":"./dist/compartment-mapper.cjs"},"scripts":{"qt":"tap --no-esm --no-coverage --reporter spec 'test/**/*.test.js'","lint":"eslint '**/*.js'","test":"yarn build && yarn qt","build":"rollup --config rollup.config.js","clean":"rm -rf dist","depcheck":"depcheck","lint-fix":"eslint --fix '**/*.js'","prepublish":"yarn clean && yarn build"},"_npmUser":{"name":"kriskowal","email":"kris.kowal@cixar.com"},"deprecated":"Use @endo/compartment-mapper","_npmVersion":"6.14.5","description":"The compartment mapper assembles Node applications in a sandbox","directories":{},"_nodeVersion":"14.5.0","dependencies":{"ses":"^0.11.0"},"_hasShrinkwrap":false,"devDependencies":{"tap":"^14.10.5","tape":"^4.12.1","eslint":"^6.8.0","rollup":"^2.0.0","@rollup/plugin-json":"^4.1.0","eslint-plugin-import":"^2.19.1","eslint-config-prettier":"^6.9.0","eslint-plugin-prettier":"^3.1.2","@rollup/plugin-commonjs":"^13.0.0","eslint-config-airbnb-base":"^14.0.0","@rollup/plugin-node-resolve":"^9.0.0","eslint-plugin-eslint-comments":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/compartment-mapper_0.2.1_1604556017542_0.6637258816267146","host":"s3://npm-registry-packages"}},"0.2.2":{"name":"@agoric/compartment-mapper","version":"0.2.2","author":{"name":"Agoric"},"license":"Apache-2.0","_id":"@agoric/compartment-mapper@0.2.2","maintainers":[{"name":"kriskowal","email":"kris.kowal@cixar.com"},{"name":"michaelfig","email":"michael@fig.org"},{"name":"katesills","email":"kate@agoric.com"},{"name":"warner","email":"warner-npm@lothar.com"},{"name":"erights","email":"erights@gmail.com"}],"dist":{"shasum":"6db3bb58e86d06da32d8d9db0e98d14494aa9ad9","tarball":"https://registry.npmjs.org/@agoric/compartment-mapper/-/compartment-mapper-0.2.2.tgz","fileCount":30,"integrity":"sha512-mUg1CLl2gic5GJY9IuUi2UeQN+ZnLVmaDdeFckTeOAs/06stGwltwz6yOC1QZQ28W4XIAvGr+JDdRX74gfBoFQ==","signatures":[{"sig":"MEYCIQDXgE3ScsDv9jJEPtKmzNmO+UYj7C8Q8xfbL3l5uQOrrgIhAPkqR6l0XFPqM41Zyhlnf+YjPP9DZlpGut228X2Q1U3H","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":189838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpHr4CRA9TVsSAnZWagAAExcQAIZAmDc/e7KWB1zGcy/Q\nbTgBOE6ptmA9HugieGmyA3XRWYTWTkZpEZOg6vgInUpIZgrpyfRTMSRSKwTh\nVOYGLC4tHvo3ySo1JsSW0zIlth/Xsmo7uvvZOLw83RBglXTDmXzsoTJJ2Or/\nIn8dVYljxnqnX1eEWs2TNADC5FxQeK5QXRLI8dQ4MvdDhEv/PtzHJnx02+gl\nofX3VaiGuy0t2vVfwzaIwLUcpV3MDmLsegMoFYhsFxb1KLyMxUzS7W/Xs/ZX\nvt5HTEinlOAtg4anW+41zWdi+/XSW/DTnfdndazQ1mXz0/gasLZQcgNYvF2W\nXzTiO7gfEEMyvI0P8q6TVPkMehkd/eCgfi7XSEpbikLiHRZINtdvMbfM8r6M\nob/pfj5VUs8zeq1EgoE63R57yExYSpdWO9cJsC8MmfzxkgveKxkWzdrqlcxR\nMefwZZLmVWJtgQaRjiVhSlV0EirXv43i7fOmseTOJFs2QtZJRCPYHTLPQrqi\nQfrEb4SwHtqGPm0gb7hiY1p72LMAkiWzTmi9tCcxQyFZ9K9hpyphkYlBPwta\nvrE6z7JJSOZpoQ0XdirSWzMTRkcJQ4sjnu25Cnw081wULXB63DOakaVIJp0z\nr8t72u+Hx3SaDmqqEBC9TETzLbpYsibpZWBkrngL9Y8x7uje+a99omXbM3IF\ntZwt\r\n=kHlM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/compartment-mapper.cjs","type":"module","module":"./src/main.js","exports":{"import":"./src/main.js","require":"./dist/compartment-mapper.cjs"},"scripts":{"qt":"tap --no-esm --no-coverage --reporter spec 'test/**/*.test.js'","lint":"eslint '**/*.js'","test":"yarn build && yarn qt","build":"rollup --config rollup.config.js","clean":"rm -rf dist","depcheck":"depcheck","lint-fix":"eslint --fix '**/*.js'","prepublish":"yarn clean && yarn build"},"_npmUser":{"name":"kriskowal","email":"kris.kowal@cixar.com"},"deprecated":"Use @endo/compartment-mapper","_npmVersion":"6.14.5","description":"The compartment mapper assembles Node applications in a sandbox","directories":{},"_nodeVersion":"14.5.0","dependencies":{"ses":"^0.11.0"},"_hasShrinkwrap":false,"devDependencies":{"tap":"^14.10.5","tape":"^4.12.1","eslint":"^6.8.0","rollup":"^2.0.0","@rollup/plugin-json":"^4.1.0","eslint-plugin-import":"^2.19.1","eslint-config-prettier":"^6.9.0","eslint-plugin-prettier":"^3.1.2","@rollup/plugin-commonjs":"^13.0.0","eslint-config-airbnb-base":"^14.0.0","@rollup/plugin-node-resolve":"^9.0.0","eslint-plugin-eslint-comments":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/compartment-mapper_0.2.2_1604614903639_0.16040571181381558","host":"s3://npm-registry-packages"}},"0.2.3":{"name":"@agoric/compartment-mapper","version":"0.2.3","author":{"name":"Agoric"},"license":"Apache-2.0","_id":"@agoric/compartment-mapper@0.2.3","maintainers":[{"name":"kriskowal","email":"kris.kowal@cixar.com"},{"name":"michaelfig","email":"michael@fig.org"},{"name":"katesills","email":"kate@agoric.com"},{"name":"warner","email":"warner-npm@lothar.com"},{"name":"erights","email":"erights@gmail.com"}],"dist":{"shasum":"f0f9d048528a98d99329c593ff813952c9e7de29","tarball":"https://registry.npmjs.org/@agoric/compartment-mapper/-/compartment-mapper-0.2.3.tgz","fileCount":30,"integrity":"sha512-2xTFCMLhbT1aiClD3GpEDcPilczM5je2sSyAZPqrguciIXgdQVb/qF6uLFj/L9gVL2LS2yrPV4ZC8B+xRn7YpQ==","signatures":[{"sig":"MEQCICHOwzqxCsEfS49rP+UuovjhW3KH3p+BjitchERlK/gZAiAumR6+JSBGmB86XLq6tAkGTO4i+F0lX1o/Soo9UZDyWw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":189854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpLHGCRA9TVsSAnZWagAAAQ8P/30vOnKR/hFvhGh4Hqh4\njhKCh56C2JL1KKmy/9SUGYBEQGIOD9Fur1XwiOqQ6N828Vyy0H6ZD2uHLPEr\n+F9Tw506BnaH53g3klokkkSHccAMu9AhZl0iglSZ0y0bDqOUE3tbf8PbMPYr\nhx8NExwWtpWk2K6UugHKSWuwPznPmF8WOYJXhWHOzzNneeRcfwS1SDcHYFu5\njTJTvAUzE3LXt0ZeCNtiYL9tFIOxW195JbXFM7cWczsQVOZHUPpbz2xMtaXJ\nrDFcDOSXy22inKRvOIEcDJMZyv4K2N2xdymSxON4GqXH/TEzIjIZeM2OtQI6\nfgmXExyYAM1r6TI7TUMZeynZqPDGoiwRPJuojKxbH2O13tXF+MAQrJoe8ciY\nbjUlhtIroAsmJEl1OT01lLFv6Dfs161/qoUFZ4XPcBaYZkXTHBXyJThpB+vo\nG+KyOwCDOlVS8HlgOEXfH2SYJY0UYtoylaOVT+0t4WPYBQaC//7U0qI3qo/d\nD5nP/CY+j1z0VNWOAdFdmJbByWX4qQzjA7ZhVSt9u1D1UjBkWWw00VtdpKUx\nyLTUzBrKlBSuxV935QO4Cx87pLNVnbazZG+vaHeOTuqEuT8EVKEAGvjox49G\nJ8qzgBfhKihtFOxz5/C8XZdaycYdSEoJ7BRnTXEqeknpNpiiLVv1lpm/noPp\nM5cf\r\n=sl6W\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/compartment-mapper.cjs","type":"module","module":"./src/main.js","exports":{"import":"./src/main.js","require":"./dist/compartment-mapper.cjs"},"scripts":{"qt":"tap --no-esm --no-coverage --reporter spec 'test/**/*.test.js'","lint":"eslint '**/*.js'","test":"yarn build && yarn qt","build":"rollup --config rollup.config.js","clean":"rm -rf dist","depcheck":"depcheck","lint-fix":"eslint --fix '**/*.js'","prepublish":"yarn clean && yarn build"},"_npmUser":{"name":"kriskowal","email":"kris.kowal@cixar.com"},"deprecated":"Use @endo/compartment-mapper","_npmVersion":"6.14.5","description":"The compartment mapper assembles Node applications in a sandbox","directories":{},"_nodeVersion":"14.5.0","dependencies":{"ses":"^0.11.0"},"_hasShrinkwrap":false,"devDependencies":{"tap":"^14.10.5","tape":"^4.12.1","eslint":"^6.8.0","rollup":"^2.0.0","@rollup/plugin-json":"^4.1.0","eslint-plugin-import":"^2.19.1","eslint-config-prettier":"^6.9.0","eslint-plugin-prettier":"^3.1.2","@rollup/plugin-commonjs":"^13.0.0","eslint-config-airbnb-base":"^14.0.0","@rollup/plugin-node-resolve":"^9.0.0","eslint-plugin-eslint-comments":"^3.1.2"},"_npmOperationalInternal":{"tmp":"tmp/compartment-mapper_0.2.3_1604628934098_0.28203343401741043","host":"s3://npm-registry-packages"}},"0.2.4":{"name":"@agoric/compartment-mapper","version":"0.2.4","author":{"name":"Agoric"},"license":"Apache-2.0","_id":"@agoric/compartment-mapper@0.2.4","maintainers":[{"name":"warner","email":"warner-npm@lothar.com"},{"name":"erights","email":"erights@gmail.com"},{"name":"katesills","email":"kate@agoric.com"},{"name":"michaelfig","email":"michael@fig.org"},{"name":"kriskowal","email":"kris.kowal@cixar.com"}],"ava":{"files":["test/**/test-*.js"],"require":[]},"dist":{"shasum":"db78b3d3c34db2204aba6eaa29155a3e0a371e73","tarball":"https://registry.npmjs.org/@agoric/compartment-mapper/-/compartment-mapper-0.2.4.tgz","fileCount":31,"integrity":"sha512-HppJtvTQP9R/a55dX+7H4xXYlj6oPmvN9xVvWVk+BDEq0//AiS1/3qpV+R6B34raNvBPatsBzYuhZQjdHSw3+A==","signatures":[{"sig":"MEUCIHEXDX9MJMZm2g51+jfJWtHJfaGf06kNw84X1/oXvg54AiEA3kKz86batIs9OwmAd8A9mhucnY/Z+qIXIFEbBDqiLSY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":221113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY/KfCRA9TVsSAnZWagAAiuQQAIwClTGrVQ/9C1exJDjs\n+p+CTzzxfDnNJJ5dE5lA8CcyBe6uux+ndIdyFhyxb6PiZSrZaLVjG78l93Fz\nYULQ7GgwvjYnlejfBp4G4Zs/rFlNeadMqj7h/OYfk2wKONm16gNWuFdmBRd4\nHlX3DdsAcEfYEqcrXx2gqNN8W/rMtXcuRs9Oa2B6EOo+Tqr11NIrKylHe3z+\n7ZlLUfh5nklM6MSM3c3nK5VZSYFmCamE08Ja7+lffg1K1iMvRkIamSyW+oG5\n1aUcflro2h5UN0EOEZw905jKOECLs3NQwjGgM9FHTWfPoy6Wf03702VSEloA\nGLmBJkekfL//SSOZKNkfsFJeNDCzAS8/rrzdQZMhczzyeYMahAqQCardYWL/\nbc75Tj1mJXS5iVqQISJ6AgJO6obYcC0OBz+47+KFi6DS880yrWPFukTI8and\n1b/+wgHysG/2Pyk4v2MgD+pOkGMH6C6soW3IeakIVLpvndn+OkKdj7/OQ8cL\nGdYrtIpsX8+S21WQEG1zOeRFCX6O4LZFkeRqh8Nbcn4n3omvquf4H+n6Dtc3\nlnwoUVqFPtOc5lM+9Qzt1eDTyYRnpUadvZcQ3znce3kuG7J04DimgnvfZrrZ\ntClKFdqIkH+UEtRNfY/y+VkmghLsQn6EjE/D1qwVn1IHGQxBwLrDbWYOUeO+\naSFG\r\n=13lt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/compartment-mapper.cjs","type":"module","unpkg":"./dist/compartment-mapper.umd.js","module":"./src/main.js","browser":"./dist/compartment-mapper.umd.js","exports":{"import":"./src/main.js","browser":"./dist/compartment-mapper.umd.js","require":"./dist/compartment-mapper.cjs"},"scripts":{"lint":"yarn lint:types && yarn lint:js","test":"ava","build":"rollup --config rollup.config.js","clean":"rm -rf dist","lint:js":"eslint '**/*.js'","lint-fix":"eslint --fix '**/*.js'","lint:types":"tsc --build jsconfig.json","prepublish":"yarn clean && yarn build"},"_npmUser":{"name":"kriskowal","email":"kris.kowal@cixar.com"},"prettier":{"singleQuote":true,"trailingComma":"all"},"deprecated":"Use @endo/compartment-mapper","_npmVersion":"6.14.5","description":"The compartment mapper assembles Node applications in a sandbox","directories":{},"_nodeVersion":"14.5.0","dependencies":{"ses":"^0.12.6"},"eslintConfig":{"extends":["@agoric"]},"_hasShrinkwrap":false,"devDependencies":{"ava":"^3.12.1","rollup":"^2.0.0","@rollup/plugin-json":"^4.1.0","@agoric/eslint-config":"^0.1.0","@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/compartment-mapper_0.2.4_1617162910541_0.07443273062753653","host":"s3://npm-registry-packages"}}},"time":{"created":"2020-09-22T00:01:42.204Z","modified":"2026-05-05T21:03:41.534Z","0.1.0":"2020-09-22T00:01:42.670Z","0.2.0":"2020-11-03T22:27:50.125Z","0.2.1":"2020-11-05T06:00:17.683Z","0.2.2":"2020-11-05T22:21:43.797Z","0.2.3":"2020-11-06T02:15:34.261Z","0.2.4":"2021-03-31T03:55:10.689Z"},"author":{"name":"Agoric"},"license":"Apache-2.0","description":"The compartment mapper assembles Node applications in a sandbox","maintainers":[{"email":"erights@gmail.com","name":"erights"},{"email":"mathieu+npmjs@agoric.com","name":"mhofman"},{"email":"michael@fig.org","name":"michaelfig"},{"email":"kris.kowal@cixar.com","name":"kriskowal"},{"email":"devops@agoric.com","name":"agoricbot"},{"email":"mujahidkay@gmail.com","name":"mujahidkay"},{"email":"richard.gibson@gmail.com","name":"gibson042"},{"email":"sam@agoric.com","name":"samsiegart"}],"readme":"# Compartment mapper\n\n> :warning: CommonJS support is temporarily disabled, pending a solution for\n> heuristic static analysis that does not entrain any Node.js built-ins.\n\nThe compartment mapper builds _compartment maps_ for Node.js style\napplications, finding their dependencies and describing how to create\n[Compartments][] for each package in the application.\n\nCreating a compartment map for a Node.js application allows us to harness\nthe SES module loader to encapsulate each dependency and grant the least\nnecessary authority to each third-party package, mitigating prototype pollution\nattacks and some supply chain attacks.\nSince most Node.js packages do not modify objects in global scope,\nmany libraries and applications work in Compartments without modification.\n\nThe `importLocation` function runs a compartmentalized application off the file\nsystem.\nThe `globals` are properties to add to the `globalThis` in the global scope\nof the application's main package compartment.\nThe `modules` are built-in modules to grant the application's main package\ncompartment.\n\n```js\nimport fs from \"fs\";\nimport { importLocation } from \"@agoric/compartment-mapper\";\n\n// ...\n\nconst modules = { fs };\nconst globals = { console };\n\nconst read = async location =>\n  fs.promises.readFile(new URL(location).pathname);\n\nconst { namespace } = await importLocation(\n  read,\n  moduleLocation,\n  {\n    globals,\n    modules\n  }\n);\n```\n\nThe compartment mapper does nothing to arrange for the realm to be frozen.\nThe application using the compartment mapper is responsible for applying the\n[SES] shim (if necessary) and calling `lockdown` to freeze the realm (if\nnecessary).\nThe compartment mapper is also not coupled specifically to Node.js IO and does\nnot import any powerful modules like `fs`.\nThe user must provide `read` and `write` functions from whatever IO powers they\nhave.\n\n> TODO\n>\n> A future version will allow application authors to distribute their choices\n> of globals and built-in modules to third-party packages within the\n> application, as with [LavaMoat].\n\nThe `importLocation` function uses `loadLocation`.\nUsing `loadLocation` directly allows for deferred execution or multiple runs\nwith different globals or modules in the same process.\nCalling `loadLocation` returns an `Application` object with an\n`import({ globals?, modules? })` method.\n\nUse `writeArchive` to capture an application in an archival format.\nArchives are `zip` files with a `compartment-map.json` manifest file.\n\n```js\nimport fs from \"fs\";\nimport { writeArchive } from \"@agoric/compartment-mapper\";\n\nconst read = async location =>\n  fs.promises.readFile(new URL(location).pathname);\nconst write = async (location, content) =>\n  fs.promises.writeFile(new URL(location).pathname, content);\n\nawait writeArchive(\n  write,\n  read,\n  new URL('app.zip', import.meta.url).toString(), // the archive to write\n  new URL('app.js', import.meta.url).toString() // the application to capture\n);\n```\n\nThe `writeArchive` function uses `makeArchive`.\nUsing `makeArchive` directly gives you the archive bytes.\n\nUse `importArchive` to run an application from an archive.\nNote the similarity to `importLocation`.\n\n```js\nimport fs from \"fs\";\nimport { importArchive } from \"@agoric/compartment-mapper\";\n\n// ...\n\nconst modules = { fs };\nconst globals = { console };\n\nconst read = async location =>\n  fs.promises.readFile(new URL(location).pathname);\n\nconst { namespace } = await importArchive(\n  read,\n  archiveLocation,\n  {\n    globals,\n    modules\n  }\n);\n```\n\nThe `importArchive` function composes `loadArchive` and `parseArchive`.\nUse `loadArchive` to defer execution or run multiple times with varying\nglobals.\nUse `parseArchive` to construct a runner from the bytes of an archive.\nThe `loadArchive` and `parseArchive` functions return an `Application`\nobject with an `import({ globals?, modules? })` method.\n\n# Package Descriptors\n\nThe compartment mapper uses [Compartments], one for each Node.js package your\napplication needs.\nThe compartment mapper generates a compartment graph from Node.js packaged\nmodule descriptors: the `package.json` files of the application and all its\ndependencies.\nConsequently, an application must have a `package.json`.\n\nEach package has its own descriptor, `package.json`.\nSome standard properties of the descriptor are relevant and used by a\ncompartment map.\n\n* `name`\n* `type`\n* `main`\n* `exports`\n* `browser`\n* `dependencies`\n* `files`\n\nThe compartment map will contain one compartment for each `package.json`\nnecessary to build the application.\nLike Node.js, the compartment mapper trusts the package manager to arrange the\npackages such that a satisfactory version of every package's dependencies rests\nin a parent directory, under `node_modules`.\n\nThe `main`, `browser`, and `exports` properties determine the modules each\npackage exports to other compartments.\n\nThe `exports` property describes [package entry points] and can be influenced\nby build _tags_.\nCurrently, the only tag supported by the compartment mapper is `import`, which\nindicates that the module map should use ESM modules over CommonJS modules or\nother variants.\n\n> TODO\n>\n> A future version may reveal other tags like `browser` to prepare an\n> application for use in a web client.\n> For this case, the compartment mapper would prepare a JSON manifest like an\n> `importmap` (if not precisely an `importmap`).\n> The \"compartment map\" would be consistent except when the dependency graph\n> changes so updates could be automated with a `postinstall` script.\n> Preparing a web application for production would follow a process similar to\n> creating an archive, but with the `browser` build tag.\n\nThe `browser` and `require` tags are well-known but not yet supported.\nThe `browser` tag will apply for compartment maps generated for use on the web.\nThe `require` tag is a fallback for environments that do not support ESM and\nwill never apply.\n\nIf no `exports` apply to the root of the compartment namespace (`\".\"`),\nthe `main` property serves as a default.\n\n> TODO\n>\n> The absence of `exports` implies that _all_ of the modules in the package are\n> valid entries.\n> The compartment mapper does not yet support packages that do not name all of\n> their exports in `package.json`, which is unfortunately a significant portion\n> of packages in `npm`.\n\n> TODO\n>\n> A future version may also respect the `imports` property.\n\n> TODO\n>\n> A future version may also respect wildcard patterns in `exports` and\n> `imports`.\n\nThe `files` property indicates all of the files in the package that\nshould be vended out to applications.\nThe file set implicitly includes all `**.js`, `**.mjs`, and `**.cjs` files.\nThe file set implicitly excludes anything under `node_modules`.\n\nWith the compartment mapper, just as in Node.js, a module specifier that has no\nextension may refer either to the file with the `js` extension, or if that file\ndoes not exist, to the `index.js` file in the directory with the same name.\n\n> TODO\n>\n> The compartment mapper does not yet do anything with the `files` globs but a\n> future version of the compartment mapper will collect these in archives.\n> The compartment mapper should eventually provide the means for any\n> compartment to access its own files using an attenuated `fs` module or\n> `fetch` global, in conjunction with usable values for `import.meta.url` in\n> ECMAScript modules or `__dirname` and `__filename` in CommonJS modules.\n\nOfficially beginning with Node.js 14, Node.js treats `.mjs` files as ECMAScript\nmodules and `.cjs` files as CommonJS modules.\nThe `.js` extension indicates a CommonJS module by default, to maintain\nbackward compatibility.\nHowever, packages that have a `type` property that explicitly says `module`\nwill treat a `.js` file as an ECMAScript module.\n\nThis unforunately conflicts with packages written to work with the ECMAScript\nmodule system emulator in the `esm` package on npm, which allows every file\nwith the `js` extension to be an ECMAScript module that presents itself to\nNode.js as a CommonJS module.\nTo overcome such obstacles, the compartment mapper will accept a non-standard\n`parsers` property in `package.json` that maps file extensions, specifically\n`js` to the corresponding language name, one of `mjs` for ECMAScript modules,\n`cjs` for CommonJS modules, and `json` for JSON modules.\nAll other language names are reserved and the defaults for files with the\nextensions `cjs`, `mjs`, and `json` default to the language of the same name\nunless overridden.\nIf compartment mapper sees `parsers`, it ignores `type`, so these can\ncontradict where using the `esm` emulator requires.\n\n```json\n{\n  \"parsers\": {\"js\": \"mjs\"}\n}\n```\n\nMany Node.js applications using CommonJS modules expect to be able to `require`\na JSON file like `package.json`.\nThe compartment mapper supports loading JSON modules from any type of module.\nAs of Node.js 14, Node does not support importing JSON using ECMAScript\n`import` directives, so using this feature may limit compatibility with the\nNode.js platform.\n\nThe compartment mapper supports loading CommonJS modules from ECMAScript\nmodules as well as ECMAScript modules importing CommonJS modules.\nThis presumes that the CommonJS modules exclusively use `require` calls with a\nsingle string argument, where `require` is not lexically bound, to declare\ntheir shallow dependencies, so that these modules and their transitive\ndependencies can be loaded before any module executes.\nAs of Node.js 14, Node does not support loading ECMAScript modules from\nCommonJS modules, so using this feature may limit compatibility with the\nNode.js platform.\n\n> TODO A future version may introduce language plugins, so a package may state\n> that files with a particular extension are either parsed or linked with\n> another module.\n\n> TODO\n>\n> The compartment mapper may elect to respect some properties specified for\n> import maps.\n\n> TODO\n>\n> A future version of the compartment mapper may add support for\n> source-to-source translation in the scope of a package or compartment.\n> This would be expressed in `package.json` using a property like\n> `translate` that would contain a map from file extension\n> to a module that exports a suitable translator.\n>\n> For browser applications, the compartment mapper would use the translator\n> modules in two modes.\n> During development, the compartment mapper would be able to load the\n> translator in the client, with the `browser` tag.\n> The compartment mapper would also be able to run the translator in a separate\n> non-browser compartment during bundling, so the translator can be excluded\n> from the production application and archived applications.\n\n> TODO\n>\n> The compartment mapper may also add support for compartment map plugins that\n> would recognize packages in `devDependencies` that need to introduce globals.\n> For example, _packages_ that use JSX and a virtual DOM would be able to add a\n> module-to-module translator and endow the compartment with the `h` the\n> translated modules need.\n\n# Design\n\nEach of the workflows the compartment mapper executes a portion of one sequence\nof underlying internals.\n\n* search (`search.js`): Scan the parent directories of a given `moduleLocation`\n  until successfully finding and reading a `package.json` for the containing\n  application.\n* map compartments from Node.js packages (`node-modules.js`): Find and gather\n  all the `package.json` files for the application's transitive dependencies.\n  Use these to construct a compartment map describing how to construct a\n  `Compartment` for each application package and how to link the modules each\n  exports in the compartments that import them.\n* load compartments (`archive.js`): Using `compartment.load`, or\n  implicitly through `compartment.import`, create a module graph for the\n  application's entire working set.\n  When creating an archive, this does not execute any of the modules.\n  The compartment mapper uses the compartments and a special `importHook` that\n  records the text of every module the main module needed.\n* import modules (`import.js`, `import-archive.js`): Actually execute the\n  working set.\n\nAround this sequence, we can enter late or depart early to store or retrieve an\narchive.\nThe compartment mapper provides workflows that use `read` and `write` hooks\nwhen interacting with a filesystem or work with the archive bytes directly.\n\nThis diagram represents the the workflows of each of the public methods like\n`importLocation`.\nEach column of pipes `|` is a workflow from top to bottom.\nEach asterisk `*` denotes a step that is taken by that workflow.\nThe dotted lines `.'. : '.'` indicate carrying an archive file from the end of\none workflow to the beginning of another, either as bytes or a location.\n\nIn the diagram, \"powers\" refer to globals and built-in modules that may provide\ncapabilities to a compartment graph.\nFor `writeArchive` and `makeArchive`, these may be provided but will be ignored\nsince the application does not execute.\n\n```\n                 loadLocation  writeArchive\n             importLocation |  | makeArchive\n                          | |  | |\n                          | |  | |      parseArchive\n                          | |  | |      | loadArchive\n                          | |  | |      | | importArchive\n                          | |  | |      | | |...\n               search ->  * *  * *      | |'| . '\n     map compartments ->  * *  * *   .'.| | |' : :\n         read archive ->  |    | |  '   | * *  : :\n       unpack archive ->  |    | |  :   * * *  : :\nassemble compartments ->  *    * *  :       *  : : <- powers\n    load compartments ->  *    * *  :       *  : :\n       import modules ->  *    | |  :       *  : :\n         pack archive ->       * *  '          : :\n        write archive ->       * '.' <- data   : :\n                               '..............'  : <- files\n                                '...............'\n```\n\n# Compartment maps\n\nThe compartment mapper works by generating a _compartment map_ from your\napplication workspace and all of the `node_modules` it needs.\nA compartment map is similar to a lock file because it collects information\nfrom all of the installed modules.\nA compartment map describes how to construct compartments for each\npackage in your application and link their module namespaces.\n\nThe compartment map shape:\n\n```ts\n// CompartmentMap describes how to prepare compartments\n// to run an application.\ntype CompartmentMap = {\n  tags: Tags,\n  entry: Entry,\n  compartments: Record<CompartmentName, Compartment>,\n  realms: Record<RealmName, Realm>, // TODO\n};\n\n// Tags are the build tags for the compartment.\n// These may include terms like \"browser\", meaning\n// each compartment uses the implementation of each\n// module suitable for use in a browser environment.\ntype Tags = Array<Tag>;\ntype Tag = string;\n\n// Entry is a reference to the module that is the module to initially import.\ntype Entry = CompartmentModule;\n\n// CompartmentName is an arbitrary string to name\n// a compartment for purposes of inter-compartment linkage.\ntype CompartmentName = string;\n\n// Compartment describes where to find the modules\n// for a compartment and how to link the compartment\n// to modules in other compartments, or to built-in modules.\ntype Compartment = {\n  location: Location,\n  modules: ModuleMap,\n  parsers: ParserMap,\n  types: ModuleParserMap,\n  scopes: ScopeMap,\n  // The name of the realm to run the compartment within.\n  // The default is a single frozen realm that has no name.\n  realm: RealmName? // TODO\n};\n\n// Location is the URL relative to the compartment-map.json's\n// containing location to the compartment's files.\ntype Location = string;\n\n// ModuleMap describes modules available in the compartment\n// that do not correspond to source files in the same compartment.\ntype ModuleMap = Record<InternalModuleSpecifier, Module>;\n\n// Module describes a module in a compartment.\ntype Module = CompartmentModule | FileModule | ExitModule;\n\n// CompartmentModule describes a module that isn't in the same\n// compartment and how to introduce it to the compartment's\n// module namespace.\ntype CompartmentModule = {\n  // The name of the foreign compartment:\n  // TODO an absent compartment name may imply either\n  // that the module is an internal alias of the\n  // same compartment, or given by the user.\n  compartment: CompartmentName?,\n  // The name of the module in the foreign compartment's\n  // module namespace:\n  module: ExternalModuleSpecifier?,\n};\n\n// FileLocation is a URL for a module's file relative to the location of the\n// containing compartment.\ntype FileLocation = string\n\n// FileModule is a module from a file.\n// When loading modules off a file system (src/import.js), the assembler\n// does not need any explicit FileModules, and instead relies on the\n// compartment to declare a ParserMap and optionally ModuleParserMap and\n// ScopeMap.\n// The compartment mapper provides a Compartment importHook and moduleMapHook\n// that will search the filesystem for candidate module files and infer the\n// type from the extension when necessary.\ntype FileModule = {\n   location: FileLocation,\n   parser: Parser,\n};\n\n// ExitName is the name of a built-in module, to be threaded in from the\n// modules passed to the module executor.\ntype ExitName = string;\n\n// ExitModule refers to a module that comes from outside the compartment map.\ntype ExitModule = {\n  exit: ExitName\n};\n\n// InternalModuleSpecifier is the module specifier\n// in the namespace of the native compartment.\ntype InternalModuleSpecifier = string;\n\n// ExternalModuleSpecifier is the module specifier\n// in the namespace of the foreign compartment.\ntype ExternalModuleSpecifier = string;\n\n// ParserMap indicates which parser to use to construct static module records\n// from sources, for each supported file extension.\n// For parity with Node.js, a package with `\"type\": \"module\"` in its\n// `package.json` would have a parser map of `{\"js\": \"mjs\", \"cjs\": \"cjs\",\n// \"mjs\": \"mjs\"}`.\n// If `\"module\"` is not defined in package.json, the legacy parser map // is\n// `{\"js\": \"cjs\", \"cjs\": \"cjs\", \"mjs\": \"mjs\"}`.\n// The compartment mapper adds `{\"json\": \"json\"}` for good measure in both\n// cases, although Node.js (as of version 0.14.5) does not support importing\n// JSON modules from ESM.\ntype ParserMap = Record<Extension, Parser>;\n\n// Extension is a file extension such as \"js\" for \"main.js\" or \"\" for \"README\".\ntype Extension = string;\n\n// Parser is a union of built-in parsers for static module records.\n// \"mjs\" corresponds to ECMAScript modules.\n// \"cjs\" corresponds to CommonJS modules.\n// \"json\" corresponds to JSON.\ntype Parser = \"mjs\" | \"cjs\" | \"json\";\n\n// ModuleParserMap is a table of internal module specifiers\n// to the parser that should be used, regardless of that module's\n// extension.\n// Node.js allows the \"module\" property in package.json to denote\n// a file that is an ECMAScript module, regardless of its extension.\n// This is the mechanism that allows the compartment mapper to respect that\n// behavior.\ntype ModuleParserMap = Record<InternalModuleSpecifier, Parser>;\n\n// ScopeMap is a map from internal module specifier prefixes\n// like \"dependency\" or \"@organization/dependency\" to another\n// compartment.\n// The compartment mapper uses this to build a moduleMapHook that can dynamically\n// generate entries for a compartment's moduleMap into Node.js packages that do\n// not explicitly state their \"exports\".\n// For these modules, any specifier under that prefix corresponds\n// to a link into some internal module of the foreign compartment.\n>> When the compartment mapper creates an archive, it captures all of the Modules\n>> explicitly and erases the scopes entry.\ntype ScopeMap = Record<InternalModuleSpecifier, Scope>;\n\n// Scope describes the compartment to use for all ad-hoc\n// entries in the compartment's module map.\ntype Scope = {\n  compartment: CompartmentName\n};\n\n\n// TODO everything hereafter...\n\n// Realm describes another realm to contain one or more\n// compartments.\n// The default realm is frozen by lockdown with no\n// powerful references.\ntype Realm = {\n  // TODO lockdown options\n};\n\n// RealmName is an arbitrary identifier for realms\n// for reference from any Compartment description.\n// No names are reserved; the default realm has no name.\ntype RealmName = string;\n\n// ModuleParameter indicates that the module does not come from\n// another compartment but must be passed expressly into the\n// application by the user.\n// For example, the Node.js `fs` built-in module provides\n// powers that must be expressly granted to an application\n// and may be attenuated or limited by the compartment mapper on behalf of the\n// user.\n// The string value is the name of the module to be provided\n// in the application's given module map.\ntype ModuleParameter = string;\n```\n\n# Compartment map policies\n\n> TODO\n>\n> A compartment map policy is a file that will sit beside an application that\n> expresses what powerful objects should pass into the compartment for each\n> package of an application.\n>\n> MetaMask's [LavaMoat] generates a `lavalmoat.config.json` file that serves\n> the same purposes, using a tool called TOFU: _trust on first use_.\n\n  [LavaMoat]: https://github.com/LavaMoat/lavamoat\n  [Compartments]: https://github.com/Agoric/SES-shim/blob/master/packages/ses/README.md#compartment\n  [LavaMoat]: https://github.com/LavaMoat/lavamoat\n  [package entry points]: https://nodejs.org/api/esm.html#esm_package_entry_points\n","readmeFilename":"README.md"}