├── .gitignore ├── LICENSE.md ├── README.md ├── api ├── .eslintrc.js ├── LICENSE.md ├── README.md ├── package.json ├── schema.js ├── server.js ├── tests │ └── country-name.js └── yarn.lock ├── packages └── web │ └── .next │ ├── build-manifest.json │ ├── cache │ └── next-babel-loader │ │ ├── content-v2 │ │ └── sha512 │ │ │ ├── 14 │ │ │ └── 76 │ │ │ │ └── 36c2393156a3be6c20a446f0ef62bd5e3257cb8ffaf9a585158e29384d255fa729f382c22fdafee2ec07b70a41ffbf1bad8bf972e3283179164fb5f23893 │ │ │ ├── 21 │ │ │ └── b2 │ │ │ │ └── 0e94a1780bb6caac57785c6e8dd7bfae30d5db9cc9dc07e7d520fd6b63de7f3a880f1d3ff24ed960b3aa29e85ce80e602c81f94b4ef42fd8608d7f969770 │ │ │ ├── 22 │ │ │ └── 27 │ │ │ │ └── 8fc6e88ff9f309054a2298b49562258a9b6092917ed74ff8fd407a01b402b43c01448d072d517443eead80bc37cf3e7b12b16759871466a11fbe2bde11e8 │ │ │ ├── 24 │ │ │ └── 1c │ │ │ │ └── 2547ab613037f11b0fc37588e29ae6aca16fa4aaef986ff3b93ea7e62f40e9b9d32cbaa1afa29a18fb5b98e095beed2f908a54a56a665b3a5b30c9a4ceb2 │ │ │ ├── 28 │ │ │ └── 95 │ │ │ │ └── a3faa427ddc836119e7c9f6bcee8ca3547d442ba62d410ed38250ff9c9828f6bd0263ca5071808196f066252671d6a336849a180d08feb3fdf5598ba9fce │ │ │ ├── 43 │ │ │ └── d1 │ │ │ │ └── 7d78821ac49227532b5588a81b2acfbe9a48a2e20480141512a58f1fa588a362e38d1ad64237b6fe173a3b402c50ac4f14ccb377be135577df8da563ba1d │ │ │ ├── 67 │ │ │ └── 5d │ │ │ │ └── ec897cfae93131338f4557417be3b48cbc58176b06b938cf9fac98a85c9286f8347feca5cba078765d938d50a70d8ec9b50dfec3196f8f32f18f22f4c025 │ │ │ ├── 75 │ │ │ └── cf │ │ │ │ └── a0ae8867d82c5161a357243daba8b82e4f744163206aa5c6653f37c1e0339c3eb5437ac55ab1f6b65e77d74a769400f8499afc130289d1be439e0866a94b │ │ │ ├── 85 │ │ │ ├── 11 │ │ │ │ └── 446d13ae67ce90e8fc3c013d2adc37666c22afe0092708e79c62fe4b219f4bd367fdbaff0c222c5034f8964d8eb5ef549806c85569c575ed504826a4b58f │ │ │ └── b3 │ │ │ │ └── 638d23d10307273f8f3210cf07297fe12f6892a9f9acdd6d85f30b0b39173847039d7f21033db817f26c8a9b0af29eb75773d49070b22f3f72c4b6f86bc0 │ │ │ ├── 86 │ │ │ └── 82 │ │ │ │ └── cd4116fb57d15a4b4f938814b03c54813cb7211953d890013ada4d244311fdff277b44e63c079ee4d9c90b2ee22e185a224ec4c5a7a3c6789671d5e7e465 │ │ │ ├── 87 │ │ │ └── 81 │ │ │ │ └── 2aacc0c20290bc32260527af451bf9d3d5ae544b0a8720fe4db2e2cde3a1a1a87133c9cb7f780c06ca864879fbaaa7e61976c5db1cb7d242c04d7224520c │ │ │ ├── 88 │ │ │ └── 6f │ │ │ │ └── 748c55e436c28776616670ec0c51ca27c07b52afbcb8b0cf8d9664f2f8e1bd39e0ee4b97600df4e657ffe1a0b62ea1d9cc5e8c794a1595f4e425000a37c6 │ │ │ ├── 90 │ │ │ └── 11 │ │ │ │ └── 8af6fe839f5c3dc125f4246099a4c207099fbd9536a0a51e523cd23b51aac8538588f919fe1f7b0bef829f227e713f6555b69231a375593c6609bc7870c7 │ │ │ ├── 91 │ │ │ └── 56 │ │ │ │ └── d00835a9addc908c25c57132c7dc77e5ae7e881b691e436c48c87b8e64f3d71569a59d0cf0bc462d9072fc76f5833ff6033ecbfd9fe28db09412ff8ff5eb │ │ │ ├── 92 │ │ │ └── 4a │ │ │ │ └── 938c08e7814a0609dac34005789ae990b573380dac5e1fe440f4f4a1538b7645f700ca728ece818c8a16fa4a198119513a0a6bc4c873b125a52170606b15 │ │ │ ├── 99 │ │ │ └── 5c │ │ │ │ └── 542a9a75fd3c2fc8d8b04b7cf3c99b520b4ed9a8a966541f65cf134bd9d05440294e8a2d1d70673e9d23f35723fdb2fbaf486e68a8b2d85e50224edf07bb │ │ │ ├── 02 │ │ │ └── 89 │ │ │ │ └── 29e4380d5c125b82948068f794d81ca0f8dd026d8998f164e9c40177e0767cf291ff9f3d8bee6b9b9227e54318878320e543fcaa9958046aec3978282ff3 │ │ │ ├── 04 │ │ │ └── ba │ │ │ │ └── f0bc10e9b2b8455577c11656aa6ba7789db2755846f985d3e2ff31c87ec18e9054b686371153e8624f6771685ea9fb85c03dd56638fbdec166d3c2b6f855 │ │ │ ├── 06 │ │ │ └── 2c │ │ │ │ └── 3c43a5eb73c04b6fbf38e2b6765329484c551535e98f455b4f6ff4ecf9aa954fdaf6bfff7712ba4875379f010c55420d5bb2896ac6d9d0a525a60c8b4034 │ │ │ ├── 1b │ │ │ └── 82 │ │ │ │ └── aa9e4c3df5809defe689511b77a622d9d90dc63d4c593992353f4c40fbb6217611b34ab450e8234729e8e38d07e7b8020d7d2e3a289232c281e24b79ad68 │ │ │ ├── 2c │ │ │ └── 73 │ │ │ │ └── e3a6a9fd13e9849201da4ef2e16250e87b7a4df8df2fe2d48943743df232ce98c4c802e010cc90a3dace2ee4601bba00f8bb0345c175635cda0d47ec481d │ │ │ ├── 3e │ │ │ ├── 03 │ │ │ │ └── d799ae42b062eb2034de9208588d54bd1c520d4520df4b0ddeb4ec03edac63d157f2f87f2405f59da8054238563c68f4aa8c49042b60ce673cc1ad9ff8ae │ │ │ └── 3e │ │ │ │ └── 13ed474cebb6d51c4b77ff3fd35e7022532fccba76e058788c182761219e69460a3dc2af7723ecd73b1c55e1f0de4cde72c763f795cba44e8fc7f9a1f103 │ │ │ ├── 4d │ │ │ └── 73 │ │ │ │ └── 291f713038343245b13fe21b1f98d322220446cbd59a5dd393d9c34774cefcf51a944a4f65ad930a9f0f9602f766c8ed272c356bdb3ce6494dce2e3d9503 │ │ │ ├── 5b │ │ │ └── f3 │ │ │ │ └── b385b30b86baf396f24f69a49bbb05c81b3396198e23573e4a4f41c4677e7ee4d372852924d768e8889d6193a128a6c80fc588d171104e48b301e6865543 │ │ │ ├── 7b │ │ │ └── d1 │ │ │ │ └── 7628e01021cbb9fb0e146563acb33ca9a74ae94123cdd7e137fe4b103f8cdaa5aad72b519ab39e409eebe2ceae818503f5d99a5774c3dc63228bccf952be │ │ │ ├── 7d │ │ │ ├── 10 │ │ │ │ └── bde420edd75a4533fad35a3f18445439574176d7e9bc2cb54dd67a090bdd875d0493c026c13febc0ee02f919cc979abe0737ca3a10587d6ac60f4006c5f5 │ │ │ └── 6c │ │ │ │ └── f4bb492d2c42021afea15e3471c6589d23df605acc993d0f8558ac9cfd227b911854ee80f2515d1a25b99d4335b0c81689c795c3cb8bcbaa514073ade236 │ │ │ ├── 9a │ │ │ └── 26 │ │ │ │ └── de61d9d209c3fc7b134d6683ddd29c42ec4961e645ef2a90d6cb56baaba93507d80e8211afb428eefa40dc1401825fe46e19ca927b24d733fdaa392ba605 │ │ │ ├── 9b │ │ │ └── 5f │ │ │ │ └── 490678e27a061fee370547e15e7a830761357ed4ae1b08d7f44914f237e1e52f997deb1cc24033474460f9eb4a7d4378f35c5e6b3e0ede6cde313803b339 │ │ │ ├── a2 │ │ │ └── 46 │ │ │ │ └── 5c660887eb07294a58caae4977c2d72ab117fab991fc6a73ed307c53e9ab743bd152dfba8c717c18a897b57984f6c2a7ebfac47b8d723c2f741070e5414f │ │ │ ├── a3 │ │ │ └── 63 │ │ │ │ └── 5e0235422cfddb7fd3bc57e41b4fd0392f84d34b182f801b8744e2994000e68f79ff44585e3444951fc12229818326803f5fe6b4be0b6fbd44a87c3fee28 │ │ │ ├── aa │ │ │ └── 2d │ │ │ │ └── d8550d6b8067bfd9f4503aeb3253c5a5df7b90b6303dbad78c099de15e862f91dbea1f27f6dff55a3ad260bfb9ef663a4c2312b69f52377a4a7b9e41009c │ │ │ ├── ac │ │ │ └── 4b │ │ │ │ └── ecd7098418e97af6bd46f5f8503b6ba0cc378ccfb01edf80f965db90db1328d1769d4f2458b124be0826bf1afef53b5b4b7264bf01a291a654cb0f6b57be │ │ │ ├── b1 │ │ │ └── 37 │ │ │ │ └── 3c5192bf29e268fceb98ad6aa1f5c98a8617f07df2d4b6a766b0f65cedf90810eda927e0e6cb31a9a2ad308a602e9c0d11d92eb421038b83cba5683bd479 │ │ │ ├── b5 │ │ │ ├── 81 │ │ │ │ └── e167e33d9344ba8ffb523ce73fd218bbf3cfc9101c64f7981dddde53a26098ecea1a5b3172450709c2c00b4bed5d5522b2b2eb36c65b325b8216f55e9a0f │ │ │ └── ee │ │ │ │ └── e7f56d5ad95c1c7ca8a643e710c2d9ba4d5d0635624a2ed13a6b5b530ea4f083d530e95ef5483b39aa9f114f0d059788c9f2dc86739e902cf09868cee75a │ │ │ ├── b8 │ │ │ └── ee │ │ │ │ └── 08ea4a3095748947e4a36985d9e3e30461d2836c72eadec8586b801a6864120698f119bda23696f7753878f3490a299e1de0c071535cb9cb9598b939a8ab │ │ │ ├── ba │ │ │ └── 08 │ │ │ │ └── cc3f29451aa3626a25f912d5462541b33149cddef2c0efc7039b41b6304b2cce12291dcd691e94bb68b2d30de551d6d0d85b23c06bf50e00a0bd73fc4fd6 │ │ │ ├── bf │ │ │ ├── 46 │ │ │ │ └── 6ff36591d7945f7b9b34b83a8cc1cdf3c69588046a65850f2658e0d6de88ce53ca6a26bd09b6c5d6474650eb2c69c549a95c1bea9bc5d7b4d5712806723a │ │ │ └── 6b │ │ │ │ └── 455f07fd236414f2817051d55c6fdee1b1180e1022d830506d16f164ff6a063110c37fae0c17b099b9e40cf38088597703df5873b97c81b3dc666c5ac0b7 │ │ │ ├── c0 │ │ │ ├── 67 │ │ │ │ └── fcc3b1455d66ae294c87a9409d66efc73899fa05adae7e80e7f651b0650044dca7a9b53b88f3b383957876c3c4413333b6983aa65bb612974d2f321c9b9e │ │ │ └── a0 │ │ │ │ └── 1a09fc5f030bbb6d2b1c69b823cad2c564d5c42d42afe778c6c83e46d8a301967c005523c0d8ad79af28ab617225b13d5bb5c3141676f09c51a4dee43045 │ │ │ ├── c7 │ │ │ └── 50 │ │ │ │ └── 02becab5a89af98538f9c5d858bfd9e972f0b609f982e01c4c6e7cf2c67abb0ae0ba813935af6dbcdc02b170b63f6afc2dd4c5a13911b69b72a999f48b1b │ │ │ ├── ce │ │ │ └── 67 │ │ │ │ └── bf4dd7684db0e793c4da135099efd974d845185c852e205570dd12d03356d98ae39d6979ac65ad8980027b9e3d852cfa764a51af6613e7e3231cf3a227cd │ │ │ ├── cf │ │ │ └── 51 │ │ │ │ └── 80431355ddea018836a4d2dc94f2b70ba3a807e64fbc49dbec43685193e284c7cafd0bdf77cf0f1ee823d55985a647ae888d5b29979c39787b50d4c3abbb │ │ │ ├── df │ │ │ └── 6c │ │ │ │ └── 9d7af3c41001f06e9f0ad6ef1efeec916327d50113faea7b09a294a856954c1b4085d9f8e8e17bfc76ab4d84ca087a2483070bff1da186562f08f31ec257 │ │ │ ├── e2 │ │ │ └── ec │ │ │ │ └── ae80dab6972de77ba33f09eb1b6dabd0ee63bd06d517cc66c2de39b89e45d5013ea66c597d11eeea32d0092f369ae3334f788f43bf4c665dd8a6d1601ac9 │ │ │ ├── e4 │ │ │ └── 93 │ │ │ │ └── c6022c497e97a549438e1162c4085a2162186447602ed0f035444579561b93cd3de2194c54c9a0ad42b77ed58fe3bb1c26acb2d492a521dd9f4d4f33dded │ │ │ ├── e5 │ │ │ └── dd │ │ │ │ └── d4ecdf7ab424090302c1677d7cda226f05bb6a8772fd7ad8f2f107c261308ecb08851a28a3dae5f6d093b588527347a2c17c01475d3033d999df17680c79 │ │ │ ├── e9 │ │ │ └── 20 │ │ │ │ └── 3b1389f2e905721efee9b034bad3cadb2e72a2b72eeef1bba3c35ece7ecfc982e3d126c06358d289d4f9823ab072e204c6bcb3dafde5fad1b2ccfb08fd14 │ │ │ ├── f9 │ │ │ └── e6 │ │ │ │ └── f4e6b6865c60f9fdee3e424dd021ec9c83005a0cf5ef9c5fdaa0373e9be3748ec3013e8ffc250e7be3ebe1fc308cf2196d20aba90f4974a85f907c85b655 │ │ │ └── fd │ │ │ └── c1 │ │ │ └── f8764f4bf31bd074b125215bc55d614397d4c396803aea33327edbe47af3e84d70487a5abc3e81f92e955850ce451aaa6cf3deaf4b60f4bba56ff2a719bf │ │ └── index-v5 │ │ ├── 21 │ │ └── 97 │ │ │ └── 1eb026bd6097b1225ce45643b865d0e2f5bb8dc6befe449a55c3c469deb4 │ │ ├── 35 │ │ └── cb │ │ │ └── 639220b05f2a7e3dfd7f9ffa5a2ce43065393f60ac484eba153c0d1dbe76 │ │ ├── 40 │ │ └── 32 │ │ │ └── 5d3c3f617bb62364878b847ec1d0edef124a33dd46da0dabdabeb4a435f8 │ │ ├── 41 │ │ └── 58 │ │ │ └── b945488e101d002be4ed3e34447febe16d8235098881247a32a1d92c393e │ │ ├── 43 │ │ ├── c8 │ │ │ └── 9b64247b2823c4da49da9ed355e8dcd53f3b3cdc583bf4e4cbc39f9b1776 │ │ └── eb │ │ │ └── 80f04d299fd3a276d5edb837e9e52bb007740e949f06cd6d0c45f2fbf1d0 │ │ ├── 44 │ │ └── fc │ │ │ └── 652e71e5af8a6f6b7eb4869220dcbabf45696bb8a9e0f9632f5d0ee0d383 │ │ ├── 45 │ │ └── 93 │ │ │ └── 824dbce7d4b21dbef4bb102e7e0cb76107294be70e8e46805704616e3726 │ │ ├── 46 │ │ └── 28 │ │ │ └── 4162b0941695c619fcfe915781b57fb0754666d6ed45971c73af58c51ac8 │ │ ├── 52 │ │ └── 34 │ │ │ └── 35d230f05b89f54f762ea1d978ccd85767d6092702b43cc5d561da128f42 │ │ ├── 58 │ │ └── f6 │ │ │ └── b4ae7b37fcdf0aa39930247c8cfa05a474f65bfc0f89f2c9702593a17d2e │ │ ├── 65 │ │ └── a5 │ │ │ └── 4a361c20c0867ac482e761ab866b478140fc1561886c0f252a7fca8d18ba │ │ ├── 69 │ │ └── ba │ │ │ └── 4281c2975ed41e82f25b8070b4d71794f8db8fcbf78111671aaa6e71028a │ │ ├── 76 │ │ └── 77 │ │ │ └── 2535d5450375d6aaf6793df3009370f595651fd0da3ec38146b5ae5ce0bb │ │ ├── 87 │ │ └── 39 │ │ │ └── 8f2b657e730f8fe2337cbf2c9435eda78c863c13a6b907ccac10459eb36a │ │ ├── 90 │ │ └── b0 │ │ │ └── 7323907dcd875344c786c5563a8ea5f468ac0816f36167ac0b98475ae1b2 │ │ ├── 93 │ │ └── e4 │ │ │ └── 0839fa0b844808a6259ab7566ec89373f33c519e5bb18d730167ec2fd92a │ │ ├── 04 │ │ └── 9d │ │ │ └── e9e322f05e8e281d2fd6dcf19fbacd4794f8fa082e07536724ee2cf7a0aa │ │ ├── 06 │ │ └── 66 │ │ │ └── d28417c915461462859fd4a39a8d1869cd8023f0337d1f2b438c808c7fa2 │ │ ├── 08 │ │ └── 19 │ │ │ └── 629dde5b0aa15ec3e6b4c36d31c27032bb53fb0d440031e033e51a3b3b14 │ │ ├── 2a │ │ └── 0d │ │ │ └── 18f8917110be07485be1aaa6bd2ed994e3720d10bc24f5767402647b38d3 │ │ ├── 2b │ │ └── 79 │ │ │ └── 77096b6b95a07d014c82d9e4b6183b5164772503612f12a64e1f159fffff │ │ ├── 4a │ │ └── 25 │ │ │ └── 035091352ea2759b58d9a12a8ec0b73a4be9faaf6301a4d81842424bd009 │ │ ├── 4b │ │ └── 3a │ │ │ └── ded5561d7427e7e3b889dcffbcebfbca645a4ec23f2e0c74ac591f559feb │ │ ├── 5b │ │ └── c1 │ │ │ └── 5dbea1a4c2df6ccd87af682e6cfca258441f9fe62c1d94c27b877749e549 │ │ ├── 6b │ │ └── 85 │ │ │ └── d439de9793e2bddd9e7d6b2bb6b5d24c9c67bea0f038973b464f3dfa83e2 │ │ ├── 7b │ │ └── 4d │ │ │ └── 1154239c6dc27f21debcd4df8743ffd3273b7846077163360fe972103b45 │ │ ├── 7d │ │ └── a8 │ │ │ └── e118cfa6f775db5afc8d951d1a6f2bea4734ce942cae6721aca8484e28bd │ │ ├── 9d │ │ └── 92 │ │ │ └── 0e43d9acb5cf0688e3fa1177a0390ffbb0d641fabc14ea21b5e1b7dbfe62 │ │ ├── a0 │ │ └── 95 │ │ │ └── b82f8fda7756a0a9f379fd20e40c757449bca83ade21e8a8ec5e4a8ad903 │ │ ├── a1 │ │ ├── 64 │ │ │ └── e7a485d220a3c3ffbf5fc3486f6a09e4c85bb6f43c8f3297f78f8457cad8 │ │ └── 1f │ │ │ └── 83d460a439c6a366c04a2a6641e31b88a1772b38170f061e2f7bb664c6af │ │ ├── a6 │ │ └── 91 │ │ │ └── 917b494b58b3529e9581f8402e82982b6f57f29041d1df81ba07ccfc090c │ │ ├── af │ │ └── f6 │ │ │ └── 88790be13693e886e8ff2c5d391bdc407ed4bb307db2556923bdcb0218a2 │ │ ├── b2 │ │ ├── df │ │ │ └── 4d50209b1caef80872e33e89b39e41e1bbeb9a42b103aedadbd8bc9bb88d │ │ └── f1 │ │ │ └── 6e7c4b2efd48bacfaedc62f8d9f74dd88775d8169cc50a215860fd80b7fc │ │ ├── b7 │ │ └── a5 │ │ │ └── 768a36503bd8413751cb47741f2e57dbb16d7713c7c17d412ae082c040fd │ │ ├── b8 │ │ └── de │ │ │ └── ee35e8488418a4f7dcf40a767f1a003c0d579c6b49b1e66d8dca17933ded │ │ ├── b9 │ │ └── 0d │ │ │ └── 80b49396fc82cd78851c1849830d8fb2236dfb1daa2042fa61df56ae941a │ │ ├── ca │ │ └── ef │ │ │ └── 224f89b91fbcb2f984bd367d8ed8699a9966020242bc85a21fae7a815da0 │ │ ├── d3 │ │ └── e2 │ │ │ └── d2931e24cfcea1f665a4ee386de5b2a72abcb500b702c518674a7d9a1e28 │ │ ├── d4 │ │ └── 2e │ │ │ └── 60a6cacbb781a762021782e3f2fb88adfac1015db12763408ecdcc94bd98 │ │ ├── d5 │ │ └── c6 │ │ │ └── c264f9f0c367a2776810ea8ba8de177a903cdefe64d79c2e0e5a607afc3b │ │ ├── da │ │ └── 72 │ │ │ └── 352b005c7c0daa7fe4b787ea3c7b9479a001b0f80ee9cb56eca5bfdce7cc │ │ ├── e1 │ │ └── f2 │ │ │ └── 26c1445ecac3892e14956d258b1dced528dccb126389fedecddd99676cd2 │ │ ├── e9 │ │ ├── 20 │ │ │ └── 45f90fd03f6b94bb7ada93c85114c2154a4676f79b5c423a267761da9ca2 │ │ └── dd │ │ │ └── 021a70e4ff50bc89ee0c1c4a209946b287bfd84363f5ccc65448e915d9e4 │ │ ├── ea │ │ └── ea │ │ │ └── 58e331e65075ab5f809d67436a28124513fc847b3fb5ad9ef9330d3b0bc1 │ │ ├── eb │ │ └── 91 │ │ │ └── 56bc3f9e4a85f3e8339dc90261045014486b48254c700f9a3827e2f750fa │ │ ├── ec │ │ └── 66 │ │ │ └── 481d0769f18ed44c7fafbf5362380c99a8e3c5ed244bbb8bd9ec596ad54b │ │ ├── f0 │ │ └── c0 │ │ │ └── 804bd23296495d401496c415580d590c47a6468b893139f1bc738869b18c │ │ ├── f1 │ │ └── 23 │ │ │ └── 1529a8ada489461db681304f79120bded9d0ff905d7094ee384ce99d3fd2 │ │ ├── fc │ │ └── 87 │ │ │ └── 63354bdab854c5ed453cec1d1abc115ab9e5f816abf1cf7dd25a83d61ab3 │ │ └── fe │ │ └── 91 │ │ └── b57b12c3aa52ade6668d60343443b0360ef73f7561685689af464935f68c │ ├── react-loadable-manifest.json │ ├── server │ ├── init-server.js.js │ ├── on-error-server.js.js │ ├── pages-manifest.json │ ├── pages │ │ ├── _app.js │ │ ├── _document.js │ │ └── _error.js │ └── ssr-module-cache.js │ └── static │ ├── chunks │ ├── 0.js │ ├── amp.js │ ├── main.js │ ├── pages │ │ ├── _app.js │ │ └── _error.js │ ├── polyfills.js │ ├── react-refresh.js │ └── webpack.js │ └── development │ ├── _buildManifest.js │ └── _ssgManifest.js ├── pipeline.png └── web ├── .gitignore ├── README.md ├── apollo-client.js ├── package.json ├── pages ├── _app.js ├── api │ └── hello.js ├── capitals.js └── index.js ├── public ├── favicon.ico └── vercel.svg ├── styles ├── Home.module.css └── globals.css ├── tests ├── integration │ └── capitals.js └── unit │ └── hello.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | ## License 2 | 3 | MIT License 4 | 5 | Copyright (c) 2021 Rendered Text 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 8 | 9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JavaScript Monorepo Demo 2 | 3 | [![Build Status](https://semaphore-demos.semaphoreci.com/badges/semaphore-demo-monorepo-javascript/branches/final.svg)](https://semaphore-demos.semaphoreci.com/projects/semaphore-demo-monorepo-javascript) 4 | 5 | This demo repository teaches you how to use [Yarn Workspaces](https://classic.yarnpkg.com/en/docs/workspaces/) and [Lerna](https://lerna.js.org/) to manage JavaScript [monorepos](https://semaphoreci.com/blog/what-is-monorepo). You’ll build a monorepo from two separate applications. 6 | 7 | Check the `final` branch to see the end result. 8 | 9 | ## Contents 10 | 11 | This repository contains two projects. Their folders are: 12 | 13 | - `api`: An API that returns geographical information. 14 | - `web`: A static website generated from the information returned by the API. 15 | 16 | You can run each project independently or in combination. Check each folder to learn how to run them piecemeal. The next section shows how to run them together. 17 | 18 | ## Setup monorepo with Yarn workspaces 19 | 20 | 1. Fork this repo. 21 | 2. Clone it to your machine. 22 | 3. Download latest yarn version. 23 | ```bash 24 | $ yarn set version berry 25 | ``` 26 | 4. Initialize top-level `package.json`. 27 | ```bash 28 | $ yarn init -w 29 | ``` 30 | 5. Move projects to their workspaces. 31 | ```bash 32 | $ git mv api web packages 33 | $ yarn workspaces list 34 | ``` 35 | 6. Install all modules. 36 | ```bash 37 | $ yarn install 38 | ``` 39 | 7. Delete old `yarn.lock` 40 | ```bash 41 | $ git rm packages/api/yarn.lock packages/web/yarn.lock 42 | ``` 43 | 7. Add the new files to the repository. This will also commit all dependencies. 44 | ```bash 45 | $ git add .yarnrc.yml .yarn yarn.lock .gitattributes .gitignore package.json .pnp.js 46 | $ git commit -m "finalize monorepo setup" 47 | $ git push 48 | ``` 49 | You can peek at the final state of the pipeline in the `final` branch. 50 | 51 | ![Final pipeline](./pipeline.png) 52 | 53 | ## Run development version 54 | 55 | ```bash 56 | $ yarn workspace api start & 57 | $ yarn workspace web dev 58 | ``` 59 | 60 | ### Run tests 61 | 62 | ```bash 63 | # Linting 64 | $ yarn workspace api lint 65 | $ yarn workspace web test 66 | 67 | # Unit tests - api 68 | $ yarn workspace api start & 69 | $ yarn workspace api test 70 | 71 | # Unit tests - web 72 | $ yarn workspace web test 73 | 74 | # Integration tests 75 | $ yarn workspace api start & 76 | $ yarn workspace web build 77 | $ yarn workspace web start & 78 | $ yarn workspace web test-integration 79 | ``` 80 | ### Add modules in one workspace 81 | 82 | ```bash 83 | $ yarn workspace add 84 | ``` 85 | ### Run scripts 86 | 87 | ```bash 88 | $ yarn worksapce run 89 | ``` 90 | ## Build static site 91 | 92 | ```bash 93 | $ yarn workspace api start & 94 | $ yarn workspace web build 95 | $ yarn workspace web export 96 | ``` 97 | 98 | ## Tips for Yarn 99 | 100 | A note about Yarn Plug’n’play: scripts running from `Scripts` in `package.json` or with the `yarn run` command will work. But if you run a program directly as `node app.js` it will fail. Instead, run it like `yarn node app.js` this will initialize PnP. 101 | 102 | If you’re using zero-installs and accepting PRs from untrusted sources, it’s a good idea to add a cache check job somewhere in your CI pipeline. This command will re-download all the modules and check them against the cache to ensure none of the dependencies were modified maliciously. 103 | 104 | ```bash 105 | yarn install --check-cache 106 | ``` 107 | 108 | ## Setup a monorepo with Lerna 109 | 110 | To setup a monorepo with Lerna + NPM, first initialize the repository. 111 | 112 | ```bash 113 | $ lerna init 114 | $ lerna import api 115 | $ lerna import web 116 | ``` 117 | 118 | Now Lerna should detect the monorepo. 119 | 120 | ```bash 121 | $ lerna ls 122 | api 123 | web 124 | found 2 packages 125 | ``` 126 | 127 | With `bootstrap`, Lerna downloads dependencies with NPM and links the packages. 128 | 129 | ```bash 130 | $ lerna bootstrap 131 | ``` 132 | 133 | Run the tests for each package in the monorepo. 134 | 135 | ```bash 136 | $ lerna exec npm run lint 137 | $ lerna exec npm dev & 138 | $ lerna exec npm test 139 | $ lerna exec npm run test integration 140 | ``` 141 | 142 | Push the updates to the repository. 143 | 144 | ```bash 145 | $ git add lerna.json package.json packages 146 | $ git commit -m "install lerna, ready to publish" 147 | ``` 148 | 149 | Publish the new version to NPM. You need to be already-authenticated with `npm login`. 150 | 151 | ```bash 152 | $ lerna version 153 | $ lerna publish from-git 154 | ``` 155 | 156 | ## Tips for coupling Lerna and Workspaces 157 | 158 | Add the following lines to `lerna.json`. 159 | 160 | ```json 161 | "npmClient": "yarn", 162 | "useWorkspaces": true 163 | ``` 164 | 165 | ## License 166 | 167 | MIT License 168 | 169 | Copyright (c) 2021 Rendered Text 170 | 171 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 172 | 173 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 174 | 175 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 176 | -------------------------------------------------------------------------------- /api/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "env": { 3 | "browser": true, 4 | "es2021": true 5 | }, 6 | "parserOptions": { 7 | "ecmaVersion": 12, 8 | "sourceType": "module" 9 | }, 10 | "rules": { 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /api/LICENSE.md: -------------------------------------------------------------------------------- 1 | ## License 2 | 3 | MIT License 4 | 5 | Copyright (c) 2021 Rendered Text 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 8 | 9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /api/README.md: -------------------------------------------------------------------------------- 1 | # Countries GraphQL API Server 2 | 3 | The code in this project is based on [trevorblades/countries](https://github.com/trevorblades/countries). 4 | 5 | The API serves data about continents, countries, and states. For example the query: 6 | 7 | ```graphql 8 | { 9 | country(code: "BR") { 10 | name 11 | native 12 | capital 13 | emoji 14 | currency 15 | languages { 16 | code 17 | name 18 | } 19 | } 20 | } 21 | ``` 22 | 23 | Returns: 24 | 25 | ```graphql 26 | { 27 | "data": { 28 | "country": { 29 | "name": "Brazil", 30 | "native": "Brasil", 31 | "capital": "Brasília", 32 | "emoji": "🇧🇷", 33 | "currency": "BRL", 34 | "languages": [ 35 | { 36 | "code": "pt", 37 | "name": "Portuguese" 38 | } 39 | ] 40 | } 41 | } 42 | } 43 | ``` 44 | 45 | ## Running it 46 | 47 | To build the project: 48 | 49 | ```bash 50 | $ yarn install 51 | ``` 52 | 53 | To run the server 54 | 55 | ```bash 56 | $ yarn start 57 | ``` 58 | 59 | To run unit tests 60 | 61 | ```bash 62 | $ yarn start & 63 | $ yarn test 64 | ``` 65 | ## Using the server 66 | 67 | Start the server and open a browser at [port 4000](http://localhost:4000). You'll get a dashboard to run queries. 68 | 69 | You can also point a GraphQL client to port 4000, or use curl: 70 | 71 | ```bash 72 | $ curl -X POST -H "Content-Type: application/json" --data '{ "query": "{ country(code: \"BR\") { name native capital emoji currency languages { code name }}}" }' http://localhost:4000 73 | 74 | {"data":{"country":{"name":"Brazil","native":"Brasil","capital":"Brasília","emoji":"🇧🇷","currency":"BRL","languages":[{"code":"pt","name":"Portuguese"}]}}} 75 | ``` 76 | ## License 77 | 78 | MIT License 79 | 80 | Copyright (c) 2021 Rendered Text 81 | 82 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 83 | 84 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 85 | 86 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 87 | -------------------------------------------------------------------------------- /api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api", 3 | "description": "A GraphQL API server that servers information about countries, cities, and continents. Based on trevorblades/countries.", 4 | "author": "Tomas Fernandez", 5 | "repository": "https://github.com/TomFern/semaphore-demo-monorepo-javascript", 6 | "version": "1.0.0.", 7 | "scripts": { 8 | "start": "node server.js", 9 | "lint": "eslint *.js tests/*.js", 10 | "test": "node tests/*.js ", 11 | "test-integration": "echo 'No integration tests for this package'" 12 | }, 13 | "dependencies": { 14 | "apollo-server": "^2.22.2", 15 | "countries-list": "^2.6.1", 16 | "graphql": "^15.5.0", 17 | "graphql-request": "^3.4.0", 18 | "provinces": "^1.11.0", 19 | "sift": "^13.5.0" 20 | }, 21 | "devDependencies": { 22 | "chai": "^4.3.4", 23 | "eslint": "^7.24.0" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /api/schema.js: -------------------------------------------------------------------------------- 1 | // schema definition by: https://github.com/trevorblades/countries 2 | 3 | const sift = require('sift'); 4 | const provinces = require('provinces'); 5 | const {gql} = require('apollo-server'); 6 | const {continents, countries, languages} = require('countries-list'); 7 | 8 | const typeDefs = gql` 9 | type Continent { 10 | code: ID! 11 | name: String! 12 | countries: [Country!]! 13 | } 14 | 15 | type Country { 16 | code: ID! 17 | name: String! 18 | native: String! 19 | phone: String! 20 | continent: Continent! 21 | capital: String 22 | currency: String 23 | languages: [Language!]! 24 | emoji: String! 25 | emojiU: String! 26 | states: [State!]! 27 | } 28 | 29 | type State { 30 | code: String 31 | name: String! 32 | country: Country! 33 | } 34 | 35 | type Language { 36 | code: ID! 37 | name: String 38 | native: String 39 | rtl: Boolean! 40 | } 41 | 42 | input StringQueryOperatorInput { 43 | eq: String 44 | ne: String 45 | in: [String] 46 | nin: [String] 47 | regex: String 48 | glob: String 49 | } 50 | 51 | input CountryFilterInput { 52 | code: StringQueryOperatorInput 53 | currency: StringQueryOperatorInput 54 | continent: StringQueryOperatorInput 55 | } 56 | 57 | input ContinentFilterInput { 58 | code: StringQueryOperatorInput 59 | } 60 | 61 | input LanguageFilterInput { 62 | code: StringQueryOperatorInput 63 | } 64 | 65 | type Query { 66 | continents(filter: ContinentFilterInput): [Continent!]! 67 | continent(code: ID!): Continent 68 | countries(filter: CountryFilterInput): [Country!]! 69 | country(code: ID!): Country 70 | languages(filter: LanguageFilterInput): [Language!]! 71 | language(code: ID!): Language 72 | } 73 | `; 74 | 75 | function filterToSift(filter = {}) { 76 | return sift( 77 | Object.entries(filter).reduce( 78 | (acc, [key, operators]) => ({ 79 | ...acc, 80 | [key]: operatorsToSift(operators) 81 | }), 82 | {} 83 | ) 84 | ); 85 | } 86 | 87 | function operatorsToSift(operators) { 88 | return Object.entries(operators).reduce( 89 | (acc, [operator, value]) => ({ 90 | ...acc, 91 | ['$' + operator]: value 92 | }), 93 | {} 94 | ); 95 | } 96 | 97 | const resolvers = { 98 | Country: { 99 | capital: country => country.capital || null, 100 | currency: country => country.currency || null, 101 | continent: ({continent}) => ({ 102 | code: continent, 103 | name: continents[continent] 104 | }), 105 | languages: country => 106 | country.languages.map(code => { 107 | const language = languages[code]; 108 | return { 109 | ...language, 110 | code 111 | }; 112 | }), 113 | states: country => 114 | provinces.filter(province => province.country === country.code) 115 | }, 116 | State: { 117 | code: state => state.short, 118 | country: state => countries[state.country] 119 | }, 120 | Continent: { 121 | countries: continent => 122 | Object.entries(countries) 123 | .filter(entry => entry[1].continent === continent.code) 124 | .map(([code, country]) => ({ 125 | ...country, 126 | code 127 | })) 128 | }, 129 | Language: { 130 | rtl: language => Boolean(language.rtl) 131 | }, 132 | Query: { 133 | continent(parent, {code}) { 134 | const name = continents[code]; 135 | return ( 136 | name && { 137 | code, 138 | name 139 | } 140 | ); 141 | }, 142 | continents: (parent, {filter}) => 143 | Object.entries(continents) 144 | .map(([code, name]) => ({ 145 | code, 146 | name 147 | })) 148 | .filter(filterToSift(filter)), 149 | country(parent, {code}) { 150 | const country = countries[code]; 151 | return ( 152 | country && { 153 | ...country, 154 | code 155 | } 156 | ); 157 | }, 158 | countries: (parent, {filter}) => 159 | Object.entries(countries) 160 | .map(([code, country]) => ({ 161 | ...country, 162 | code 163 | })) 164 | .filter(filterToSift(filter)), 165 | language(parent, {code}) { 166 | const language = languages[code]; 167 | return ( 168 | language && { 169 | ...language, 170 | code 171 | } 172 | ); 173 | }, 174 | languages: (parent, {filter}) => 175 | Object.entries(languages) 176 | .map(([code, language]) => ({ 177 | ...language, 178 | code 179 | })) 180 | .filter(filterToSift(filter)) 181 | } 182 | }; 183 | 184 | module.exports = { 185 | typeDefs: typeDefs, 186 | resolvers: resolvers 187 | } 188 | 189 | // const server = new ApolloServer({ 190 | // typeDefs, 191 | // resolvers, 192 | // introspection: true, 193 | // playground: true, 194 | // engine: { 195 | // apiKey: process.env.ENGINE_API_KEY 196 | // } 197 | // }); 198 | 199 | // server.listen({port: process.env.PORT || 4000}).then(({url}) => { 200 | // console.log(`🚀 Server ready at ${url}`); 201 | // }); 202 | -------------------------------------------------------------------------------- /api/server.js: -------------------------------------------------------------------------------- 1 | 2 | // start a GraphQL server on $PORT (4000) 3 | 4 | const {ApolloServer, gql} = require('apollo-server'); 5 | const {typeDefs, resolvers} = require('./schema.js'); 6 | 7 | const server = new ApolloServer({ 8 | typeDefs, 9 | resolvers, 10 | introspection: true, 11 | playground: true, 12 | engine: { 13 | apiKey: process.env.ENGINE_API_KEY 14 | } 15 | }); 16 | 17 | server.listen({port: process.env.PORT || 4000}).then(({url}) => { 18 | console.log(`🚀 Server ready at ${url}`); 19 | }); -------------------------------------------------------------------------------- /api/tests/country-name.js: -------------------------------------------------------------------------------- 1 | const { request } = require('graphql-request'); 2 | const { assert } = require('chai'); 3 | 4 | const query = `{ 5 | country(code: "BR") { 6 | name 7 | native 8 | capital 9 | emoji 10 | currency 11 | languages { 12 | code 13 | name 14 | } 15 | } 16 | }`; 17 | 18 | request('http://localhost:4000', query).then(data => { 19 | assert.equal(data.country.name, 'Brazil'); 20 | assert.equal(data.country.capital, 'Brasília'); 21 | }); -------------------------------------------------------------------------------- /packages/web/.next/build-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "polyfillFiles": [ 3 | "static/chunks/polyfills.js" 4 | ], 5 | "devFiles": [ 6 | "static/chunks/react-refresh.js" 7 | ], 8 | "ampDevFiles": [ 9 | "static/chunks/webpack.js", 10 | "static/chunks/amp.js" 11 | ], 12 | "lowPriorityFiles": [ 13 | "static/development/_buildManifest.js", 14 | "static/development/_ssgManifest.js" 15 | ], 16 | "pages": { 17 | "/_app": [ 18 | "static/chunks/webpack.js", 19 | "static/chunks/main.js", 20 | "static/chunks/pages/_app.js" 21 | ], 22 | "/_error": [ 23 | "static/chunks/webpack.js", 24 | "static/chunks/main.js", 25 | "static/chunks/pages/_error.js" 26 | ] 27 | }, 28 | "ampFirstPages": [] 29 | } -------------------------------------------------------------------------------- /packages/web/.next/cache/next-babel-loader/content-v2/sha512/02/89/29e4380d5c125b82948068f794d81ca0f8dd026d8998f164e9c40177e0767cf291ff9f3d8bee6b9b9227e54318878320e543fcaa9958046aec3978282ff3: -------------------------------------------------------------------------------- 1 | {"ast":null,"code":"\"use strict\";\n\nvar _regeneratorRuntime = require(\"/home/tom/rr/semaphore-demo-monorepo-javascript/packages/web/node_modules/@babel/runtime/regenerator\");\n\nvar _asyncToGenerator = require(\"/home/tom/rr/semaphore-demo-monorepo-javascript/packages/web/node_modules/@babel/runtime/helpers/asyncToGenerator\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _router = _interopRequireDefault(require(\"next/router\"));\n\nvar _onDemandEntriesUtils = require(\"./on-demand-entries-utils\");\n\nvar _default = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {\n var assetPrefix;\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n assetPrefix = _ref.assetPrefix;\n\n _router[\"default\"].ready(function () {\n _router[\"default\"].events.on('routeChangeComplete', _onDemandEntriesUtils.setupPing.bind(void 0, assetPrefix, function () {\n return _router[\"default\"].pathname;\n }));\n });\n\n (0, _onDemandEntriesUtils.setupPing)(assetPrefix, function () {\n return _router[\"default\"].pathname;\n }, _onDemandEntriesUtils.currentPage); // prevent HMR connection from being closed when running tests\n\n if (!process.env.__NEXT_TEST_MODE) {\n document.addEventListener('visibilitychange', function (_event) {\n var state = document.visibilityState;\n\n if (state === 'visible') {\n (0, _onDemandEntriesUtils.setupPing)(assetPrefix, function () {\n return _router[\"default\"].pathname;\n }, true);\n } else {\n (0, _onDemandEntriesUtils.closePing)();\n }\n });\n window.addEventListener('beforeunload', function () {\n (0, _onDemandEntriesUtils.closePing)();\n });\n }\n\n case 4:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n return function _default(_x) {\n return _ref2.apply(this, arguments);\n };\n}();\n\nexports[\"default\"] = _default;","map":{"version":3,"sources":["../../../client/dev/on-demand-entries-client.js"],"names":["Router","setupPing","currentPage","process","document","_event","state","window"],"mappings":";;;;;;;;;;;AAAA,IAAA,OAAA,GAAA,sBAAA,CAAA,OAAA,CAAA,aAAA,CAAA,CAAA;;AACA,IAAA,qBAAA,GAAA,OAAA,CAAA,2BAAA,CAAA;;;uEAEe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAA,WAAA,QAAA,WAAA;;AACbA,YAAAA,OAAAA,WAAAA,CAAAA,KAAAA,CAAa,YAAM;AACjBA,cAAAA,OAAAA,WAAAA,CAAAA,MAAAA,CAAAA,EAAAA,CAAAA,qBAAAA,EAEEC,qBAAAA,CAAAA,SAAAA,CAAAA,IAAAA,CAAAA,KAAAA,CAAAA,EAAAA,WAAAA,EAAkC;AAAA,uBAAMD,OAAAA,WAAAA,CAF1CA,QAEoC;AAAA,eAAlCC,CAFFD;AADFA,aAAAA;;AAOA,aAAA,GAAA,qBAAA,CAAA,SAAA,EAAA,WAAA,EAAuB;AAAA,qBAAMA,OAAAA,WAAAA,CAA7B,QAAuB;AAAA,aAAvB,EAA8CE,qBAAAA,CAA9C,WAAA,EARa,CAUb;;AACA,gBAAI,CAACC,OAAO,CAAPA,GAAAA,CAAL,gBAAA,EAAmC;AACjCC,cAAAA,QAAQ,CAARA,gBAAAA,CAAAA,kBAAAA,EAA+CC,UAAAA,MAAD,EAAY;AACxD,oBAAMC,KAAK,GAAGF,QAAQ,CAAtB,eAAA;;AACA,oBAAIE,KAAK,KAAT,SAAA,EAAyB;AACvB,mBAAA,GAAA,qBAAA,CAAA,SAAA,EAAA,WAAA,EAAuB;AAAA,2BAAMN,OAAAA,WAAAA,CAA7B,QAAuB;AAAA,mBAAvB,EAAA,IAAA;AADF,iBAAA,MAEO;AACL,mBAAA,GAAA,qBAAA,CAAA,SAAA;AAEH;AAPDI,eAAAA;AASAG,cAAAA,MAAM,CAANA,gBAAAA,CAAAA,cAAAA,EAAwC,YAAM;AAC5C,iBAAA,GAAA,qBAAA,CAAA,SAAA;AADFA,eAAAA;AAIH;;AAzBc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G","sourcesContent":["import Router from 'next/router'\nimport { setupPing, currentPage, closePing } from './on-demand-entries-utils'\n\nexport default async ({ assetPrefix }) => {\n Router.ready(() => {\n Router.events.on(\n 'routeChangeComplete',\n setupPing.bind(this, assetPrefix, () => Router.pathname)\n )\n })\n\n setupPing(assetPrefix, () => Router.pathname, currentPage)\n\n // prevent HMR connection from being closed when running tests\n if (!process.env.__NEXT_TEST_MODE) {\n document.addEventListener('visibilitychange', (_event) => {\n const state = document.visibilityState\n if (state === 'visible') {\n setupPing(assetPrefix, () => Router.pathname, true)\n } else {\n closePing()\n }\n })\n\n window.addEventListener('beforeunload', () => {\n closePing()\n })\n }\n}\n"]},"metadata":{},"sourceType":"script"} -------------------------------------------------------------------------------- /packages/web/.next/cache/next-babel-loader/content-v2/sha512/06/2c/3c43a5eb73c04b6fbf38e2b6765329484c551535e98f455b4f6ff4ecf9aa954fdaf6bfff7712ba4875379f010c55420d5bb2896ac6d9d0a525a60c8b4034: -------------------------------------------------------------------------------- 1 | {"ast":null,"code":"'use strict';\n\nvar ansiRegex = require('ansi-regex');\n\nmodule.exports = function (string) {\n return typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n};","map":{"version":3,"sources":["/home/tom/rr/semaphore-demo-monorepo-javascript/packages/web/node_modules/strip-ansi/index.js"],"names":["ansiRegex","require","module","exports","string","replace"],"mappings":"AAAA;;AACA,IAAMA,SAAS,GAAGC,OAAO,CAAC,YAAD,CAAzB;;AAEAC,MAAM,CAACC,OAAP,GAAiB,UAAAC,MAAM;AAAA,SAAI,OAAOA,MAAP,KAAkB,QAAlB,GAA6BA,MAAM,CAACC,OAAP,CAAeL,SAAS,EAAxB,EAA4B,EAA5B,CAA7B,GAA+DI,MAAnE;AAAA,CAAvB","sourcesContent":["'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n"]},"metadata":{},"sourceType":"script"} -------------------------------------------------------------------------------- /packages/web/.next/cache/next-babel-loader/content-v2/sha512/14/76/36c2393156a3be6c20a446f0ef62bd5e3257cb8ffaf9a585158e29384d255fa729f382c22fdafee2ec07b70a41ffbf1bad8bf972e3283179164fb5f23893: -------------------------------------------------------------------------------- 1 | {"ast":null,"code":"\"use strict\";\n\nexports.__esModule = true;\nexports.parseRelativeUrl = parseRelativeUrl;\n\nvar _utils = require(\"../../utils\");\n\nvar _querystring = require(\"./querystring\");\n/**\n* Parses path-relative urls (e.g. `/hello/world?foo=bar`). If url isn't path-relative\n* (e.g. `./hello`) then at least base must be.\n* Absolute urls are rejected with one exception, in the browser, absolute urls that are on\n* the current origin will be parsed as relative\n*/\n\n\nfunction parseRelativeUrl(url, base) {\n var globalBase = new URL(false ? 'http://n' : (0, _utils.getLocationOrigin)());\n var resolvedBase = base ? new URL(base, globalBase) : globalBase;\n\n var _URL = new URL(url, resolvedBase),\n pathname = _URL.pathname,\n searchParams = _URL.searchParams,\n search = _URL.search,\n hash = _URL.hash,\n href = _URL.href,\n origin = _URL.origin;\n\n if (origin !== globalBase.origin) {\n throw new Error(\"invariant: invalid relative URL, router received \".concat(url));\n }\n\n return {\n pathname: pathname,\n query: (0, _querystring.searchParamsToUrlQuery)(searchParams),\n search: search,\n hash: hash,\n href: href.slice(globalBase.origin.length)\n };\n}","map":{"version":3,"sources":["../../../../../next-server/lib/router/utils/parse-relative-url.ts"],"names":["globalBase","resolvedBase","base","origin","pathname","query","search","hash","href"],"mappings":";;;;;AAAA,IAAA,MAAA,GAAA,OAAA,CAAA,aAAA,CAAA;;AACA,IAAA,YAAA,GAAA,OAAA,CAAA,eAAA,CAAA;AAEA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAAA,gBAAA,CAAA,GAAA,EAAA,IAAA,EAAsD;AAC3D,MAAMA,UAAU,GAAG,IAAA,GAAA,CACjB,QAAA,UAAA,GAA6C,CAAA,GAAA,MAAA,CAD/C,iBAC+C,GAD5B,CAAnB;AAGA,MAAMC,YAAY,GAAGC,IAAI,GAAG,IAAA,GAAA,CAAA,IAAA,EAAH,UAAG,CAAH,GAAzB,UAAA;;AAJ2D,aAKI,IAAA,GAAA,CAAA,GAAA,EAA/D,YAA+D,CALJ;AAAA,MAKrD,QALqD,QAKrD,QALqD;AAAA,MAKrD,YALqD,QAKrD,YALqD;AAAA,MAKrD,MALqD,QAKrD,MALqD;AAAA,MAKrD,IALqD,QAKrD,IALqD;AAAA,MAKrD,IALqD,QAKrD,IALqD;AAAA,MAKrD,MALqD,QAKrD,MALqD;;AAS3D,MAAIC,MAAM,KAAKH,UAAU,CAAzB,MAAA,EAAkC;AAChC,UAAM,IAAA,KAAA,4DAAN,GAAM,EAAN;AAEF;;AAAA,SAAO;AACLI,IAAAA,QADK,EACLA,QADK;AAELC,IAAAA,KAAK,EAAE,CAAA,GAAA,YAAA,CAAA,sBAAA,EAFF,YAEE,CAFF;AAGLC,IAAAA,MAHK,EAGLA,MAHK;AAILC,IAAAA,IAJK,EAILA,IAJK;AAKLC,IAAAA,IAAI,EAAEA,IAAI,CAAJA,KAAAA,CAAWR,UAAU,CAAVA,MAAAA,CALnB,MAKQQ;AALD,GAAP;AAOD","sourcesContent":["import { getLocationOrigin } from '../../utils'\nimport { searchParamsToUrlQuery } from './querystring'\n\n/**\n * Parses path-relative urls (e.g. `/hello/world?foo=bar`). If url isn't path-relative\n * (e.g. `./hello`) then at least base must be.\n * Absolute urls are rejected with one exception, in the browser, absolute urls that are on\n * the current origin will be parsed as relative\n */\nexport function parseRelativeUrl(url: string, base?: string) {\n const globalBase = new URL(\n typeof window === 'undefined' ? 'http://n' : getLocationOrigin()\n )\n const resolvedBase = base ? new URL(base, globalBase) : globalBase\n const { pathname, searchParams, search, hash, href, origin } = new URL(\n url,\n resolvedBase\n )\n if (origin !== globalBase.origin) {\n throw new Error(`invariant: invalid relative URL, router received ${url}`)\n }\n return {\n pathname,\n query: searchParamsToUrlQuery(searchParams),\n search,\n hash,\n href: href.slice(globalBase.origin.length),\n }\n}\n"]},"metadata":{},"sourceType":"script"} -------------------------------------------------------------------------------- /packages/web/.next/cache/next-babel-loader/content-v2/sha512/1b/82/aa9e4c3df5809defe689511b77a622d9d90dc63d4c593992353f4c40fbb6217611b34ab450e8234729e8e38d07e7b8020d7d2e3a289232c281e24b79ad68: -------------------------------------------------------------------------------- 1 | {"ast":null,"code":"import { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nvar _jsxFileName = \"/home/tom/rr/semaphore-demo-monorepo-javascript/packages/web/pages/_app.js\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport '../styles/globals.css';\n\nfunction MyApp({\n Component,\n pageProps\n}) {\n return /*#__PURE__*/_jsxDEV(Component, _objectSpread({}, pageProps), void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 4,\n columnNumber: 10\n }, this);\n}\n\nexport default MyApp;","map":{"version":3,"sources":["/home/tom/rr/semaphore-demo-monorepo-javascript/packages/web/pages/_app.js"],"names":["MyApp","Component","pageProps"],"mappings":";;;;;;;;;AAAA,OAAO,uBAAP;;AAEA,SAASA,KAAT,CAAe;AAAEC,EAAAA,SAAF;AAAaC,EAAAA;AAAb,CAAf,EAAyC;AACvC,sBAAO,QAAC,SAAD,oBAAeA,SAAf;AAAA;AAAA;AAAA;AAAA,UAAP;AACD;;AAED,eAAeF,KAAf","sourcesContent":["import '../styles/globals.css'\n\nfunction MyApp({ Component, pageProps }) {\n return \n}\n\nexport default MyApp\n"]},"metadata":{},"sourceType":"module"} -------------------------------------------------------------------------------- /packages/web/.next/cache/next-babel-loader/content-v2/sha512/24/1c/2547ab613037f11b0fc37588e29ae6aca16fa4aaef986ff3b93ea7e62f40e9b9d32cbaa1afa29a18fb5b98e095beed2f908a54a56a665b3a5b30c9a4ceb2: -------------------------------------------------------------------------------- 1 | {"ast":null,"code":"\"use strict\";\n\nexports.__esModule = true;\nexports.normalizeLocalePath = normalizeLocalePath;\n\nfunction normalizeLocalePath(pathname, locales) {\n var detectedLocale; // first item will be empty string from splitting at first char\n\n var pathnameParts = pathname.split('/');\n (locales || []).some(function (locale) {\n if (pathnameParts[1].toLowerCase() === locale.toLowerCase()) {\n detectedLocale = locale;\n pathnameParts.splice(1, 1);\n pathname = pathnameParts.join('/') || '/';\n return true;\n }\n\n return false;\n });\n return {\n pathname: pathname,\n detectedLocale: detectedLocale\n };\n}","map":{"version":3,"sources":["../../../../next-server/lib/i18n/normalize-locale-path.ts"],"names":["pathnameParts","pathname","locales","locale","detectedLocale"],"mappings":";;;;;AAAO,SAAA,mBAAA,CAAA,QAAA,EAAA,OAAA,EAML;AACA,MAAA,cAAA,CADA,CAEA;;AACA,MAAMA,aAAa,GAAGC,QAAQ,CAARA,KAAAA,CAAtB,GAAsBA,CAAtB;AAEC,GAACC,OAAO,IAAR,EAAA,EAAA,IAAA,CAAsBC,UAAAA,MAAD,EAAY;AAChC,QAAIH,aAAa,CAAbA,CAAa,CAAbA,CAAAA,WAAAA,OAAmCG,MAAM,CAA7C,WAAuCA,EAAvC,EAA6D;AAC3DC,MAAAA,cAAc,GAAdA,MAAAA;AACAJ,MAAAA,aAAa,CAAbA,MAAAA,CAAAA,CAAAA,EAAAA,CAAAA;AACAC,MAAAA,QAAQ,GAAGD,aAAa,CAAbA,IAAAA,CAAAA,GAAAA,KAAXC,GAAAA;AACA,aAAA,IAAA;AAEF;;AAAA,WAAA,KAAA;AAPD,GAAA;AAUD,SAAO;AACLA,IAAAA,QADK,EACLA,QADK;AAELG,IAAAA,cAFF,EAEEA;AAFK,GAAP;AAID","sourcesContent":["export function normalizeLocalePath(\n pathname: string,\n locales?: string[]\n): {\n detectedLocale?: string\n pathname: string\n} {\n let detectedLocale: string | undefined\n // first item will be empty string from splitting at first char\n const pathnameParts = pathname.split('/')\n\n ;(locales || []).some((locale) => {\n if (pathnameParts[1].toLowerCase() === locale.toLowerCase()) {\n detectedLocale = locale\n pathnameParts.splice(1, 1)\n pathname = pathnameParts.join('/') || '/'\n return true\n }\n return false\n })\n\n return {\n pathname,\n detectedLocale,\n }\n}\n"]},"metadata":{},"sourceType":"script"} -------------------------------------------------------------------------------- /packages/web/.next/cache/next-babel-loader/content-v2/sha512/28/95/a3faa427ddc836119e7c9f6bcee8ca3547d442ba62d410ed38250ff9c9828f6bd0263ca5071808196f066252671d6a336849a180d08feb3fdf5598ba9fce: -------------------------------------------------------------------------------- 1 | {"ast":null,"code":"module.exports = function () {\n \"use strict\";\n\n var e = {\n 161: function _(e) {\n e.exports = function () {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$onlyFirst = _ref.onlyFirst,\n e = _ref$onlyFirst === void 0 ? false : _ref$onlyFirst;\n\n var r = [\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:[a-zA-Z\\\\d]*(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\", \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");\n return new RegExp(r, e ? undefined : \"g\");\n };\n },\n 301: function _(e, r, t) {\n var _ = t(161);\n\n e.exports = function (e) {\n return typeof e === \"string\" ? e.replace(_(), \"\") : e;\n };\n }\n };\n var r = {};\n\n function __nccwpck_require__(t) {\n if (r[t]) {\n return r[t].exports;\n }\n\n var _ = r[t] = {\n exports: {}\n };\n\n var n = true;\n\n try {\n e[t](_, _.exports, __nccwpck_require__);\n n = false;\n } finally {\n if (n) delete r[t];\n }\n\n return _.exports;\n }\n\n __nccwpck_require__.ab = __dirname + \"/\";\n return __nccwpck_require__(301);\n}();","map":{"version":3,"sources":["/home/tom/rr/semaphore-demo-monorepo-javascript/packages/web/node_modules/next/dist/compiled/strip-ansi/index.js"],"names":["module","exports","e","onlyFirst","r","join","RegExp","undefined","t","_","replace","__nccwpck_require__","n","ab","__dirname"],"mappings":"AAAAA,MAAM,CAACC,OAAP,GAAgB,YAAI;AAAC;;AAAa,MAAIC,CAAC,GAAC;AAAC,SAAI,WAAAA,CAAC,EAAE;AAACA,MAAAA,CAAC,CAACD,OAAF,GAAW,YAA0B;AAAA,uFAAL,EAAK;AAAA,kCAAxBE,SAAwB;AAAA,YAAdD,CAAc,+BAAZ,KAAY;;AAAC,YAAME,CAAC,GAAC,CAAC,6FAAD,EAA+F,0DAA/F,EAA2JC,IAA3J,CAAgK,GAAhK,CAAR;AAA6K,eAAO,IAAIC,MAAJ,CAAWF,CAAX,EAAaF,CAAC,GAACK,SAAD,GAAW,GAAzB,CAAP;AAAqC,OAAxP;AAA0P,KAAnQ;AAAoQ,SAAI,WAACL,CAAD,EAAGE,CAAH,EAAKI,CAAL,EAAS;AAAC,UAAMC,CAAC,GAACD,CAAC,CAAC,GAAD,CAAT;;AAAeN,MAAAA,CAAC,CAACD,OAAF,GAAW,UAAAC,CAAC;AAAA,eAAE,OAAOA,CAAP,KAAW,QAAX,GAAoBA,CAAC,CAACQ,OAAF,CAAUD,CAAC,EAAX,EAAc,EAAd,CAApB,GAAsCP,CAAxC;AAAA,OAAZ;AAAuD;AAAxV,GAAN;AAAgW,MAAIE,CAAC,GAAC,EAAN;;AAAS,WAASO,mBAAT,CAA6BH,CAA7B,EAA+B;AAAC,QAAGJ,CAAC,CAACI,CAAD,CAAJ,EAAQ;AAAC,aAAOJ,CAAC,CAACI,CAAD,CAAD,CAAKP,OAAZ;AAAoB;;AAAA,QAAIQ,CAAC,GAACL,CAAC,CAACI,CAAD,CAAD,GAAK;AAACP,MAAAA,OAAO,EAAC;AAAT,KAAX;;AAAwB,QAAIW,CAAC,GAAC,IAAN;;AAAW,QAAG;AAACV,MAAAA,CAAC,CAACM,CAAD,CAAD,CAAKC,CAAL,EAAOA,CAAC,CAACR,OAAT,EAAiBU,mBAAjB;AAAsCC,MAAAA,CAAC,GAAC,KAAF;AAAQ,KAAlD,SAAyD;AAAC,UAAGA,CAAH,EAAK,OAAOR,CAAC,CAACI,CAAD,CAAR;AAAY;;AAAA,WAAOC,CAAC,CAACR,OAAT;AAAiB;;AAAAU,EAAAA,mBAAmB,CAACE,EAApB,GAAuBC,SAAS,GAAC,GAAjC;AAAqC,SAAOH,mBAAmB,CAAC,GAAD,CAA1B;AAAgC,CAA7nB,EAAf","sourcesContent":["module.exports=(()=>{\"use strict\";var e={161:e=>{e.exports=(({onlyFirst:e=false}={})=>{const r=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:[a-zA-Z\\\\d]*(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(r,e?undefined:\"g\")})},301:(e,r,t)=>{const _=t(161);e.exports=(e=>typeof e===\"string\"?e.replace(_(),\"\"):e)}};var r={};function __nccwpck_require__(t){if(r[t]){return r[t].exports}var _=r[t]={exports:{}};var n=true;try{e[t](_,_.exports,__nccwpck_require__);n=false}finally{if(n)delete r[t]}return _.exports}__nccwpck_require__.ab=__dirname+\"/\";return __nccwpck_require__(301)})();"]},"metadata":{},"sourceType":"script"} -------------------------------------------------------------------------------- /packages/web/.next/cache/next-babel-loader/content-v2/sha512/2c/73/e3a6a9fd13e9849201da4ef2e16250e87b7a4df8df2fe2d48943743df232ce98c4c802e010cc90a3dace2ee4601bba00f8bb0345c175635cda0d47ec481d: -------------------------------------------------------------------------------- 1 | {"ast":null,"code":"\"use strict\";\n\nexports.__esModule = true;\nexports.AmpStateContext = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nvar AmpStateContext = /*#__PURE__*/_react[\"default\"].createContext({});\n\nexports.AmpStateContext = AmpStateContext;\n\nif (true) {\n AmpStateContext.displayName = 'AmpStateContext';\n}","map":{"version":3,"sources":["../../../next-server/lib/amp-context.ts"],"names":["AmpStateContext","React"],"mappings":";;;;;AAAA,IAAA,MAAA,GAAA,sBAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA;;;;;;AAEO;;AAAA,IAAMA,eAAmC,GAAA,aAAGC,MAAAA,WAAAA,CAAAA,aAAAA,CAA5C,EAA4CA,CAA5C;;;;AAEP,UAA2C;AACzCD,EAAAA,eAAe,CAAfA,WAAAA,GAAAA,iBAAAA;AACD","sourcesContent":["import React from 'react'\n\nexport const AmpStateContext: React.Context = React.createContext({})\n\nif (process.env.NODE_ENV !== 'production') {\n AmpStateContext.displayName = 'AmpStateContext'\n}\n"]},"metadata":{},"sourceType":"script"} -------------------------------------------------------------------------------- /packages/web/.next/cache/next-babel-loader/content-v2/sha512/43/d1/7d78821ac49227532b5588a81b2acfbe9a48a2e20480141512a58f1fa588a362e38d1ad64237b6fe173a3b402c50ac4f14ccb377be135577df8da563ba1d: -------------------------------------------------------------------------------- 1 | {"ast":null,"code":"\"use strict\";\n\nvar _classCallCheck = require(\"/home/tom/rr/semaphore-demo-monorepo-javascript/packages/web/node_modules/@babel/runtime/helpers/classCallCheck\");\n\nvar _createClass = require(\"/home/tom/rr/semaphore-demo-monorepo-javascript/packages/web/node_modules/@babel/runtime/helpers/createClass\");\n\nvar _inherits = require(\"/home/tom/rr/semaphore-demo-monorepo-javascript/packages/web/node_modules/@babel/runtime/helpers/inherits\");\n\nvar _possibleConstructorReturn = require(\"/home/tom/rr/semaphore-demo-monorepo-javascript/packages/web/node_modules/@babel/runtime/helpers/possibleConstructorReturn\");\n\nvar _getPrototypeOf = require(\"/home/tom/rr/semaphore-demo-monorepo-javascript/packages/web/node_modules/@babel/runtime/helpers/getPrototypeOf\");\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _head = _interopRequireDefault(require(\"../next-server/lib/head\"));\n\nvar statusCodes = {\n 400: 'Bad Request',\n 404: 'This page could not be found',\n 405: 'Method Not Allowed',\n 500: 'Internal Server Error'\n};\n\nfunction _getInitialProps(_ref) {\n var res = _ref.res,\n err = _ref.err;\n var statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404;\n return {\n statusCode: statusCode\n };\n}\n/**\n* `Error` component used for handling errors.\n*/\n\n\nvar Error = /*#__PURE__*/function (_react$default$Compon) {\n _inherits(Error, _react$default$Compon);\n\n var _super = _createSuper(Error);\n\n function Error() {\n _classCallCheck(this, Error);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Error, [{\n key: \"render\",\n value: function render() {\n var statusCode = this.props.statusCode;\n var title = this.props.title || statusCodes[statusCode] || 'An unexpected error has occurred';\n return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n style: styles.error\n }, /*#__PURE__*/_react[\"default\"].createElement(_head[\"default\"], null, /*#__PURE__*/_react[\"default\"].createElement(\"title\", null, statusCode, \": \", title)), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null, /*#__PURE__*/_react[\"default\"].createElement(\"style\", {\n dangerouslySetInnerHTML: {\n __html: 'body { margin: 0 }'\n }\n }), statusCode ? /*#__PURE__*/_react[\"default\"].createElement(\"h1\", {\n style: styles.h1\n }, statusCode) : null, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n style: styles.desc\n }, /*#__PURE__*/_react[\"default\"].createElement(\"h2\", {\n style: styles.h2\n }, title, \".\"))));\n }\n }]);\n\n return Error;\n}(_react[\"default\"].Component);\n\nexports[\"default\"] = Error;\nError.displayName = 'ErrorPage';\nError.getInitialProps = _getInitialProps;\nError.origGetInitialProps = _getInitialProps;\nvar styles = {\n error: {\n color: '#000',\n background: '#fff',\n fontFamily: '-apple-system, BlinkMacSystemFont, Roboto, \"Segoe UI\", \"Fira Sans\", Avenir, \"Helvetica Neue\", \"Lucida Grande\", sans-serif',\n height: '100vh',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n },\n desc: {\n display: 'inline-block',\n textAlign: 'left',\n lineHeight: '49px',\n height: '49px',\n verticalAlign: 'middle'\n },\n h1: {\n display: 'inline-block',\n borderRight: '1px solid rgba(0, 0, 0,.3)',\n margin: 0,\n marginRight: '20px',\n padding: '10px 23px 10px 0',\n fontSize: '24px',\n fontWeight: 500,\n verticalAlign: 'top'\n },\n h2: {\n fontSize: '14px',\n fontWeight: 'normal',\n lineHeight: 'inherit',\n margin: 0,\n padding: 0\n }\n};","map":{"version":3,"sources":["../../pages/_error.tsx"],"names":["statusCodes","statusCode","res","err","Error","React","Component","displayName","getInitialProps","_getInitialProps","origGetInitialProps","title","styles","__html","error","color","background","fontFamily","height","textAlign","display","flexDirection","alignItems","justifyContent","desc","lineHeight","verticalAlign","h1","borderRight","margin","marginRight","padding","fontSize","fontWeight","h2"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,MAAA,GAAA,sBAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA;;AACA,IAAA,KAAA,GAAA,sBAAA,CAAA,OAAA,CAAA,yBAAA,CAAA,CAAA;;AAGA,IAAMA,WAAuC,GAAG;AAC9C,OAD8C,aAAA;AAE9C,OAF8C,8BAAA;AAG9C,OAH8C,oBAAA;AAI9C,OAJF;AAAgD,CAAhD;;AAYA,SAAA,gBAAA,OAGsD;AAAA,MAH5B,GAG4B,QAH5B,GAG4B;AAAA,MAHtD,GAGsD,QAHtD,GAGsD;AACpD,MAAMC,UAAU,GACdC,GAAG,IAAIA,GAAG,CAAVA,UAAAA,GAAwBA,GAAG,CAA3BA,UAAAA,GAAyCC,GAAG,GAAGA,GAAG,CAAN,UAAA,GAD9C,GAAA;AAEA,SAAO;AAAEF,IAAAA,UAAT,EAASA;AAAF,GAAP;AAGF;AAAA;AACA;AACA;;;IACe,K;;;;;;;;;;;;;6BAMJ;AAAA,UACD,UADC,GACgB,KAAvB,KADO,CACD,UADC;AAEP,UAAMU,KAAK,GACT,KAAA,KAAA,CAAA,KAAA,IACAX,WAAW,CADX,UACW,CADX,IADF,kCAAA;AAKA,aAAA,aACE,MAAA,WAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAK,QAAA,KAAK,EAAEY,MAAM,CAAlB;AAAA,OAAA,EAAA,aACE,MAAA,WAAA,CAAA,aAAA,CAAC,KAAD,WAAA,EAAA,IAAA,EAAA,aACE,MAAA,WAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAFJ,KAEI,CADF,CADF,EAAA,aAME,MAAA,WAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,EAAA,aACE,MAAA,WAAA,CAAA,aAAA,CAAA,OAAA,EAAA;AAAO,QAAA,uBAAuB,EAAE;AAAEC,UAAAA,MAAM,EAD1C;AACkC;AAAhC,OAAA,CADF,EAEGZ,UAAU,GAAA,aAAG,MAAA,WAAA,CAAA,aAAA,CAAA,IAAA,EAAA;AAAI,QAAA,KAAK,EAAEW,MAAM,CAAjB;AAAA,OAAA,EAAH,UAAG,CAAH,GAFb,IAAA,EAAA,aAGE,MAAA,WAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAK,QAAA,KAAK,EAAEA,MAAM,CAAlB;AAAA,OAAA,EAAA,aACE,MAAA,WAAA,CAAA,aAAA,CAAA,IAAA,EAAA;AAAI,QAAA,KAAK,EAAEA,MAAM,CAAjB;AAAA,OAAA,EAAA,KAAA,EAXR,GAWQ,CADF,CAHF,CANF,CADF;AAbuE;;;;EAAhCP,MAAAA,WAAAA,CAAMC,S;;;AAA5BF,K,CACZG,WADYH,GACE,WADFA;AAAAA,K,CAGZI,eAHYJ,GAGMK,gBAHNL;AAAAA,K,CAIZM,mBAJYN,GAIUK,gBAJVL;AAgCrB,IAAMQ,MAA4C,GAAG;AACnDE,EAAAA,KAAK,EAAE;AACLC,IAAAA,KAAK,EADA,MAAA;AAELC,IAAAA,UAAU,EAFL,MAAA;AAGLC,IAAAA,UAAU,EAHL,2HAAA;AAKLC,IAAAA,MAAM,EALD,OAAA;AAMLC,IAAAA,SAAS,EANJ,QAAA;AAOLC,IAAAA,OAAO,EAPF,MAAA;AAQLC,IAAAA,aAAa,EARR,QAAA;AASLC,IAAAA,UAAU,EATL,QAAA;AAULC,IAAAA,cAAc,EAXmC;AAC5C,GAD4C;AAcnDC,EAAAA,IAAI,EAAE;AACJJ,IAAAA,OAAO,EADH,cAAA;AAEJD,IAAAA,SAAS,EAFL,MAAA;AAGJM,IAAAA,UAAU,EAHN,MAAA;AAIJP,IAAAA,MAAM,EAJF,MAAA;AAKJQ,IAAAA,aAAa,EAnBoC;AAc7C,GAd6C;AAsBnDC,EAAAA,EAAE,EAAE;AACFP,IAAAA,OAAO,EADL,cAAA;AAEFQ,IAAAA,WAAW,EAFT,4BAAA;AAGFC,IAAAA,MAAM,EAHJ,CAAA;AAIFC,IAAAA,WAAW,EAJT,MAAA;AAKFC,IAAAA,OAAO,EALL,kBAAA;AAMFC,IAAAA,QAAQ,EANN,MAAA;AAOFC,IAAAA,UAAU,EAPR,GAAA;AAQFP,IAAAA,aAAa,EA9BoC;AAsB/C,GAtB+C;AAiCnDQ,EAAAA,EAAE,EAAE;AACFF,IAAAA,QAAQ,EADN,MAAA;AAEFC,IAAAA,UAAU,EAFR,QAAA;AAGFR,IAAAA,UAAU,EAHR,SAAA;AAIFI,IAAAA,MAAM,EAJJ,CAAA;AAKFE,IAAAA,OAAO,EAtCX;AAiCM;AAjC+C,CAArD","sourcesContent":["import React from 'react'\nimport Head from '../next-server/lib/head'\nimport { NextPageContext } from '../next-server/lib/utils'\n\nconst statusCodes: { [code: number]: string } = {\n 400: 'Bad Request',\n 404: 'This page could not be found',\n 405: 'Method Not Allowed',\n 500: 'Internal Server Error',\n}\n\nexport type ErrorProps = {\n statusCode: number\n title?: string\n}\n\nfunction _getInitialProps({\n res,\n err,\n}: NextPageContext): Promise | ErrorProps {\n const statusCode =\n res && res.statusCode ? res.statusCode : err ? err.statusCode! : 404\n return { statusCode }\n}\n\n/**\n * `Error` component used for handling errors.\n */\nexport default class Error

extends React.Component

{\n static displayName = 'ErrorPage'\n\n static getInitialProps = _getInitialProps\n static origGetInitialProps = _getInitialProps\n\n render() {\n const { statusCode } = this.props\n const title =\n this.props.title ||\n statusCodes[statusCode] ||\n 'An unexpected error has occurred'\n\n return (\n

\n \n \n {statusCode}: {title}\n \n \n
\n