From c971279e1c2605b1dda53a852448d020d2f47ff4 Mon Sep 17 00:00:00 2001 From: adrianbienias Date: Sun, 6 Aug 2023 15:45:05 +0000 Subject: [PATCH] deploy: 007de5517072d6d8a0ccb6c04b504bcca1955308 --- 100-bugow-js.html | 8 ++++---- .../05b581c3-2b7e-4ad7-b168-648f9849ebc6.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../05b581c3-2b7e-4ad7-b168-648f9849ebc6/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../07a13b0b-35fe-4c30-90b0-1ef7527d7732.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../07a13b0b-35fe-4c30-90b0-1ef7527d7732/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../0c3c689a-2e16-4c7a-b6c9-5333cc00289b.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../0c3c689a-2e16-4c7a-b6c9-5333cc00289b/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../0dd66a7d-2f2e-43ca-80f5-b9ffa606279e.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../0e1bfcac-da2c-4569-9dde-eb6c281eef1a.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../0e1bfcac-da2c-4569-9dde-eb6c281eef1a/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../111bba83-a18f-4245-ae3d-66e71e46db03.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../111bba83-a18f-4245-ae3d-66e71e46db03/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../1257df57-264f-4f1c-984c-89222207e885.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../1257df57-264f-4f1c-984c-89222207e885/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../12e5df98-c0ca-429c-a9e8-8517c1873211.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../12e5df98-c0ca-429c-a9e8-8517c1873211/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../1342370d-03e0-4f0b-aa22-69e05fc64d53.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../1342370d-03e0-4f0b-aa22-69e05fc64d53/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../13faa6fb-1dfe-41df-9f96-62618e9ca0c4.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../13faa6fb-1dfe-41df-9f96-62618e9ca0c4/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../14a8fddb-055c-4504-841b-cb3f1ba5d802.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../14a8fddb-055c-4504-841b-cb3f1ba5d802/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../16de4343-9b81-49c5-92ea-e3e6b377132f.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../16de4343-9b81-49c5-92ea-e3e6b377132f/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../1748706a-b38f-403a-ab65-6666bd6bede7.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../1748706a-b38f-403a-ab65-6666bd6bede7/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../17c27ac8-01d9-463d-84b4-f81cee835696.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../17c27ac8-01d9-463d-84b4-f81cee835696/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../1be29c44-56a0-4d02-81e3-8c93f17b434b.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../1be29c44-56a0-4d02-81e3-8c93f17b434b/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../28eab874-606d-49f2-bc6c-f8382476a776.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../28eab874-606d-49f2-bc6c-f8382476a776/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../2b40ab53-0110-4a5a-b43e-92e4ab97fd2a.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../2d8e841d-6b9b-4a0b-9a66-cf92bea23295.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../2d8e841d-6b9b-4a0b-9a66-cf92bea23295/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../2da281dc-b213-448d-b3d2-4b90f901b93f.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../2da281dc-b213-448d-b3d2-4b90f901b93f/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../31a6b892-4183-4589-a877-6c172e38d143.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../31a6b892-4183-4589-a877-6c172e38d143/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../35bf86c2-709d-4277-ac0d-0c74937a59d0.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../35bf86c2-709d-4277-ac0d-0c74937a59d0/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../39272e37-d6ce-4e24-bb1b-b8476234fdcc.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../39272e37-d6ce-4e24-bb1b-b8476234fdcc/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../3bf409bd-9ebd-4cea-8666-c410aec718c8.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../3bf409bd-9ebd-4cea-8666-c410aec718c8/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../3c9e16d8-b6bf-426a-9572-863deaced7c7.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../3c9e16d8-b6bf-426a-9572-863deaced7c7/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../3f068db0-5299-4701-866c-36414d360814.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../3f068db0-5299-4701-866c-36414d360814/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../4049d287-c406-4bb7-926c-43627310b896.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../4049d287-c406-4bb7-926c-43627310b896/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../4090ba91-2b59-42f2-93d5-e1ecb4cc1166.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../4090ba91-2b59-42f2-93d5-e1ecb4cc1166/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../47183b47-e13d-4247-9ef5-a447a35e530c.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../47183b47-e13d-4247-9ef5-a447a35e530c/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../49405a75-e352-4a37-8afd-d231628e01e1.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../49405a75-e352-4a37-8afd-d231628e01e1/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../4a3a28c4-f782-4ef5-911f-4f08799f54b8.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../4a3a28c4-f782-4ef5-911f-4f08799f54b8/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../4fc04c98-b27d-4eb9-9a44-a69d790f60f7.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../4fc04c98-b27d-4eb9-9a44-a69d790f60f7/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../52fbfe20-45e9-4a02-adc1-cb03d30fb6e9.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../546817c4-7ea0-4bdb-90a3-438d4c17693d.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../546817c4-7ea0-4bdb-90a3-438d4c17693d/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../574c299a-b9ec-4b8c-b2db-63e41365ae59.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../574c299a-b9ec-4b8c-b2db-63e41365ae59/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../5838b978-3b1c-433d-b118-9801923593e0.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../5838b978-3b1c-433d-b118-9801923593e0/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../5964c80d-0d4d-42ac-be8b-827cfc1a5a07.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../5964c80d-0d4d-42ac-be8b-827cfc1a5a07/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../5bdd1571-fc82-4acb-82e5-3280ff6344c0.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../5bdd1571-fc82-4acb-82e5-3280ff6344c0/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../5cc2e5b1-db79-420b-8820-67d4d5acaddb.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../5cc2e5b1-db79-420b-8820-67d4d5acaddb/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../5e53d805-c959-40a2-9acd-f85e690d58e8.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../5e53d805-c959-40a2-9acd-f85e690d58e8/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../602b9a01-9e69-4966-9cc6-610bebf8466b.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../602b9a01-9e69-4966-9cc6-610bebf8466b/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../62d658b2-cf12-4c95-ab39-11a4d12acae6.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../62d658b2-cf12-4c95-ab39-11a4d12acae6/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../63408939-dd63-4ec2-9eca-719a80260815.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../63408939-dd63-4ec2-9eca-719a80260815/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../64e0f8f8-ce00-4d01-bdf1-df6d85759a3c.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../69dd4421-faf2-484d-ab27-26a65940faf7.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../69dd4421-faf2-484d-ab27-26a65940faf7/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../6bc1f45c-7f3e-4207-854f-e4ac9843f8b6.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../6eb2ef7d-4568-4481-b56d-868c1bcd4071.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../6eb2ef7d-4568-4481-b56d-868c1bcd4071/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../71c6322b-f4cb-4ab0-9497-0b618c975d01.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../71c6322b-f4cb-4ab0-9497-0b618c975d01/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../74f05a57-ccd6-44f8-a982-aacec55d6132.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../74f05a57-ccd6-44f8-a982-aacec55d6132/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../7a984008-730d-41bf-be00-1493e1c1cdc6.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../7a984008-730d-41bf-be00-1493e1c1cdc6/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../855033cb-80dc-4fd0-9371-f770d65ea1d6.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../855033cb-80dc-4fd0-9371-f770d65ea1d6/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../86e9f1ca-3f32-445a-a15f-4ce1b6850096.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../86e9f1ca-3f32-445a-a15f-4ce1b6850096/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../87616015-586b-4477-ac08-cb1bc0e28e09.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../87616015-586b-4477-ac08-cb1bc0e28e09/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../880c49ad-04a2-41f3-a4e0-bbc863aa5ec9.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../88306d48-4df5-4c3e-9452-4fee2be681fd.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../88306d48-4df5-4c3e-9452-4fee2be681fd/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../8bf80212-90d8-4c9b-b6af-3a60223e0fe0.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../8bf80212-90d8-4c9b-b6af-3a60223e0fe0/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../8c1883e7-6c29-41ff-938b-81d605c565ed.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../8c1883e7-6c29-41ff-938b-81d605c565ed/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../9040ce84-a478-468c-aca6-16b9f909e115.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../9040ce84-a478-468c-aca6-16b9f909e115/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../90b2a251-a246-4713-adfc-adf089197961.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../90b2a251-a246-4713-adfc-adf089197961/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../967dd2e3-34d2-4e05-b56d-5c54782406d2.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../967dd2e3-34d2-4e05-b56d-5c54782406d2/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../979ce6b4-71f8-4d13-80ea-8ab3a2b99a03.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../98a75ad0-f321-4391-8167-a4dea7dfe153.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../98a75ad0-f321-4391-8167-a4dea7dfe153/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../a06206c4-6029-4865-9d92-d2bfdd3a82c4.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../a06206c4-6029-4865-9d92-d2bfdd3a82c4/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../a1ef5a9e-88dc-454f-9db1-9d21dbea6927.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../a1ef5a9e-88dc-454f-9db1-9d21dbea6927/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../a8adcbd8-2151-494e-b538-44c1503f3beb.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../a8adcbd8-2151-494e-b538-44c1503f3beb/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../ae0d38e8-00ed-416c-b87f-460de2a76ed5.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../ae0d38e8-00ed-416c-b87f-460de2a76ed5/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../aefeac4f-fef6-4b65-b2cf-bd41c4111a8e.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../b18ad5f3-9589-4ff0-b9b2-43a9b5374aed.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../b2d2c3dc-7b6e-4d08-a448-193140af5c91.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../b2d2c3dc-7b6e-4d08-a448-193140af5c91/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../b625f893-5173-40ab-b1ce-257b5bff5910.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../b625f893-5173-40ab-b1ce-257b5bff5910/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../b799ee88-187a-41d3-8a50-7e5b422aa2e2.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../b799ee88-187a-41d3-8a50-7e5b422aa2e2/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../b85b88a3-7e88-4091-a7f1-62ee08894050.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../b85b88a3-7e88-4091-a7f1-62ee08894050/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../b99780c7-a6bb-486a-a223-b9fc7979d8a2.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../b99780c7-a6bb-486a-a223-b9fc7979d8a2/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../bb05d968-36d2-4e0d-b17f-d60291b46bf3.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../bb05d968-36d2-4e0d-b17f-d60291b46bf3/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../bc9e86bd-8ba9-4163-941f-b605d24e56a5.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../bc9e86bd-8ba9-4163-941f-b605d24e56a5/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../bdf71c4c-20af-48f1-a556-386ecddf1fc4.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../bdf71c4c-20af-48f1-a556-386ecddf1fc4/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../be9e0eb9-ec46-4b89-bfc2-04922a0381fe.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../be9e0eb9-ec46-4b89-bfc2-04922a0381fe/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../c240b7f1-fb67-434c-9965-b41432f128c6.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../c240b7f1-fb67-434c-9965-b41432f128c6/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../c4b37568-5a7d-44d1-89c8-b3f517b0c000.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../c4b37568-5a7d-44d1-89c8-b3f517b0c000/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../c58e01be-7092-47d4-ba65-cffd25192ba4.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../c58e01be-7092-47d4-ba65-cffd25192ba4/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../cdc9845a-3304-4646-b257-3238bad1e179.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../cdc9845a-3304-4646-b257-3238bad1e179/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../cf71a652-cfb3-4406-b6c8-89594f7546ff.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../cf71a652-cfb3-4406-b6c8-89594f7546ff/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../d05d69bf-78ae-4c42-a213-81006fa7e6cb.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../d05d69bf-78ae-4c42-a213-81006fa7e6cb/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../dd95137e-f378-4224-a3e7-5db4b217508e.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../dd95137e-f378-4224-a3e7-5db4b217508e/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../df58179e-11c5-4987-9cf7-d513ef33ba6a.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../df58179e-11c5-4987-9cf7-d513ef33ba6a/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../e5651472-8df9-4bec-bea5-f9d5afb419bf.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../e5651472-8df9-4bec-bea5-f9d5afb419bf/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../e8edc07f-955c-4e36-b25f-7f49bcf55645.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../e8edc07f-955c-4e36-b25f-7f49bcf55645/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../ee9b7199-3dfc-4496-be53-7c45a02e3ddf.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../ee9b7199-3dfc-4496-be53-7c45a02e3ddf/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../f4493212-ffba-4a48-818a-b82a22bce47a.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../f4493212-ffba-4a48-818a-b82a22bce47a/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../f6dca2d4-892a-4b22-a34c-1c6ded328020.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../f6dca2d4-892a-4b22-a34c-1c6ded328020/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../f8fc4c9a-f11e-4205-99a3-19115d81b37f.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../f8fc4c9a-f11e-4205-99a3-19115d81b37f/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../fa73295e-34e5-4f5c-9098-291e3770e4b0.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../fa73295e-34e5-4f5c-9098-291e3770e4b0/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../fbd04755-cc69-4e14-ba17-5172fba6d6bf.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../fbd04755-cc69-4e14-ba17-5172fba6d6bf/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- .../ffc67d5d-0437-493c-b712-e1e3571caaef.html | 8 ++++---- .../bugCode.html | 8 ++++---- .../bugDescription.html | 8 ++++---- .../ffc67d5d-0437-493c-b712-e1e3571caaef/links.html | 8 ++++---- .../solutionCode.html | 8 ++++---- .../solutionDescription.html | 8 ++++---- 100-bugow-js/sukces.html | 8 ++++---- 100-bugow-js/wymagane-potwierdzenie.html | 8 ++++---- 100-bugow-js/wypisanie.html | 8 ++++---- 404.html | 8 ++++---- assets/js/095e46f4.5aeb9e93.js | 1 - assets/js/095e46f4.bf6f824c.js | 1 + assets/js/11aee4d5.c40984c7.js | 1 - assets/js/11aee4d5.d7c1eefc.js | 1 + .../{156f22fa.74bcfb89.js => 156f22fa.4d6acf4c.js} | 2 +- .../{2fa374a5.38699639.js => 2fa374a5.6a48127a.js} | 2 +- .../{35121e98.38641288.js => 35121e98.1777a417.js} | 2 +- assets/js/3bd3cc6c.0f107830.js | 1 + assets/js/3bd3cc6c.c9a35244.js | 1 - .../{4618a95d.64bed50c.js => 4618a95d.fd0794d7.js} | 2 +- assets/js/4ee797cf.7d5db699.js | 1 - assets/js/4ee797cf.c811aaab.js | 1 + assets/js/5299bf45.058222c2.js | 1 + assets/js/5299bf45.2babb11b.js | 1 - assets/js/7b98acb0.8579954b.js | 1 + assets/js/7b98acb0.b9fbae0b.js | 1 - assets/js/84991166.883bffe2.js | 1 - assets/js/84991166.c5c96d02.js | 1 + assets/js/8b1c1229.28ab392f.js | 1 - assets/js/8b1c1229.bdbfd260.js | 1 + .../{935f2afb.ba798bfc.js => 935f2afb.f8d74f66.js} | 2 +- assets/js/9e9a17b9.212044eb.js | 1 + assets/js/9e9a17b9.4b0aacbc.js | 1 - .../{a0420386.09b24d23.js => a0420386.ff732ebf.js} | 2 +- assets/js/a79cfbf2.0050f52e.js | 1 + assets/js/a79cfbf2.a8ddedc6.js | 1 - .../{b92b9e7e.98259401.js => b92b9e7e.c7bb9953.js} | 2 +- assets/js/c9805ddd.550713fc.js | 1 - assets/js/c9805ddd.abb51093.js | 1 + assets/js/f65f218b.7cfe538c.js | 1 - assets/js/f65f218b.9a2cdf63.js | 1 + assets/js/{main.e2dfac10.js => main.bfe5da37.js} | 4 ++-- ...0.js.LICENSE.txt => main.bfe5da37.js.LICENSE.txt} | 0 ...ime~main.ee1e5838.js => runtime~main.cb057a9d.js} | 2 +- backend/api-zaplecza.html | 8 ++++---- backend/api-zaplecza/graphql.html | 8 ++++---- backend/api-zaplecza/restful-api.html | 8 ++++---- backend/bazy-danych.html | 8 ++++---- .../bazy-danych/mapowanie-obiektowo-relacyjne.html | 8 ++++---- backend/brokery-wiadomosci.html | 8 ++++---- backend/ciagla-integracja-i-wdrazanie.html | 8 ++++---- backend/infrastuktura.html | 8 ++++---- backend/monitoring.html | 8 ++++---- backend/node-js.html | 8 ++++---- backend/obsluga-emaili.html | 8 ++++---- .../darmowy-system-do-email-marketingu-osems.html | 8 ++++---- .../przekierowywanie-emaili-przez-cloudflare.html | 8 ++++---- backend/projektowanie-backendu.html | 8 ++++---- backend/serwery-internetowe.html | 8 ++++---- backend/silniki-wyszukiwania.html | 8 ++++---- backend/systemy-zarzadzania-trescia.html | 8 ++++---- backend/wierwsz-polecen.html | 8 ++++---- backend/wirtualizacja-i-konteneryzacja.html | 8 ++++---- digitalocean.html | 8 ++++---- discord.html | 8 ++++---- facebook.html | 8 ++++---- frontend/aplikacje-mobilne.html | 8 ++++---- frontend/biblioteki.html | 8 ++++---- frontend/css.html | 8 ++++---- ...ebugowanie-css-przez-narzedzia-developerskie.html | 8 ++++---- .../css/menu-mobilne-w-html-css-bez-javascript.html | 8 ++++---- .../css/organizacja-styli-css-i-preprocesory.html | 8 ++++---- frontend/css/tailwind-css.html | 8 ++++---- frontend/css/wprowadzenie-w-css.html | 8 ++++---- frontend/dostepnosc.html | 8 ++++---- frontend/frontend.html | 8 ++++---- frontend/html.html | 8 ++++---- ...ultimedia-osadzanie-skrypty-sledzenie-edycji.html | 8 ++++---- frontend/html/rdzen-metadane-sekcje.html | 8 ++++---- ...-formularze-elementy-interaktywne-komponenty.html | 8 ++++---- frontend/html/tekst.html | 8 ++++---- frontend/html/wprowadzenie-do-htmla.html | 8 ++++---- frontend/html/zadanie-domowe.html | 8 ++++---- frontend/javascript.html | 8 ++++---- .../automatyzacja-zadan-w-przegladarce-z-js.html | 8 ++++---- .../nie-uzywaj-luznego-porownania-w-javascript.html | 8 ++++---- frontend/javascript/node-js-na-frontendzie copy.html | 8 ++++---- frontend/javascript/podstawy-javascript.html | 8 ++++---- ...nie-drzewa-w-javascript-zadanie-rekrutacyjne.html | 8 ++++---- frontend/javascript/wprowadzenie-w-typescript.html | 8 ++++---- frontend/komponenty.html | 8 ++++---- frontend/pakiety-i-pakowarki.html | 8 ++++---- frontend/pakiety-i-pakowarki/webpack-4.html | 8 ++++---- ...perski-serwer-webpack-i-gorace-przeladowania.html | 8 ++++---- .../webpack-4/generowanie-pliku-html-z-szablonu.html | 8 ++++---- .../pakiety-i-pakowarki/webpack-4/ladowarki.html | 8 ++++---- .../webpack-4/plik-konfiguracyjny.html | 8 ++++---- .../webpack-4/podstawowy-sposob-uzycia.html | 8 ++++---- .../webpack-4/podzial-plikow-konfiguracyjnych.html | 8 ++++---- .../rozwiazywanie-sciezek-importu-plikow.html | 8 ++++---- ...-deweloperski-mapa-zrodla-i-obserwacja-zmian.html | 8 ++++---- frontend/progresywne-aplikacje.html | 8 ++++---- frontend/react.html | 8 ++++---- ...moizowanie-cacheowanie-na-przykladzie-reacta.html | 8 ++++---- ...iarki-fragmentow-kodu-z-kolorowaniem-skladni.html | 8 ++++---- frontend/seo.html | 8 ++++---- frontend/svg.html | 8 ++++---- frontend/webassembly.html | 8 ++++---- frontend/zarzadzanie-stanem.html | 8 ++++---- frontend/zarzadzanie-stanem/podstawy-reduxa.html | 8 ++++---- .../podstawy-reduxa/asynchroniczne-akcje.html | 8 ++++---- .../podstawy-reduxa/koncept-dzialania-redux-a.html | 8 ++++---- .../podstawy-reduxa/laczenie-reduktorow.html | 8 ++++---- .../modyfikowanie-stanu-magazynu.html | 8 ++++---- .../modyfikowanie-stanu-pojedynczych-elementow.html | 8 ++++---- .../podzial-kodu-na-mniejsze-pliki.html | 8 ++++---- .../predefiniowane-typy-akcji-i-kreatory-akcji.html | 8 ++++---- .../przygotowanie-srodowiska-deweloperskiego.html | 8 ++++---- .../podstawy-reduxa/redux-thunk.html | 8 ++++---- .../podstawy-reduxa/zarzadzanie-wieloma-stanami.html | 8 ++++---- frontend/zarzadzanie-stanem/redux.html | 8 ++++---- fullstack/autentykacja-i-autoryzacja.html | 8 ++++---- .../implementacja-autentykacji.html | 8 ++++---- .../implementacja-autentykacji/logowanie.html | 8 ++++---- .../implementacja-autentykacji/obsluga-sesji.html | 8 ++++---- .../projekt-systemu-uwierzytelniania.html | 8 ++++---- .../implementacja-autentykacji/rejestracja.html | 8 ++++---- .../implementacja-autentykacji/wylogowanie.html | 8 ++++---- fullstack/fullstack.html | 8 ++++---- fullstack/next-js.html | 8 ++++---- fullstack/next-js/mini-projekt-z-next-js.html | 8 ++++---- .../hosting-aplikacji-w-serwisie-vercel.html | 8 ++++---- .../inne-serwisy-hostingowe-i-cloud-development.html | 8 ++++---- .../instalacja-niezbednego-oprogramowania.html | 8 ++++---- .../korzystanie-z-bazy-danych-mongodb-i-prismy.html | 8 ++++---- .../obsluga-formularza-i-api.html | 8 ++++---- .../stworzenie-strony-glownej.html | 8 ++++---- .../system-kontroli-wersji-git-i-serwis-github.html | 8 ++++---- fullstack/next-js/warsztat-next-js-2022-12-20.html | 8 ++++---- fullstack/paginacja.html | 8 ++++---- fullstack/powiadomienia-push.html | 8 ++++---- fullstack/przetwarzanie-platnosci.html | 8 ++++---- fullstack/sledzenie.html | 8 ++++---- fullstack/trasowanie.html | 8 ++++---- fullstack/websocket.html | 8 ++++---- github.html | 8 ++++---- index.html | 8 ++++---- instagram.html | 8 ++++---- lunr-index-1691335443042.json | 1 - lunr-index-1691336563638.json | 1 + lunr-index.json | 2 +- podstawy/aplikacje.html | 8 ++++---- podstawy/architektura-oprogramowania.html | 8 ++++---- podstawy/bezpieczenstwo.html | 8 ++++---- podstawy/debugowanie.html | 8 ++++---- podstawy/dns-i-domeny.html | 8 ++++---- podstawy/dokumentacje.html | 8 ++++---- podstawy/dokumentacje/jak-czytac-dokumentacje.html | 8 ++++---- podstawy/dokumentacje/jak-tworzyc-dokumentacje.html | 8 ++++---- podstawy/edytory-kodu.html | 8 ++++---- podstawy/edytory-kodu/formatowanie-kodu.html | 8 ++++---- podstawy/edytory-kodu/vim.html | 8 ++++---- podstawy/edytory-kodu/visual-studio-code.html | 8 ++++---- podstawy/haszowanie.html | 8 ++++---- podstawy/hosting.html | 8 ++++---- ...-hosting-statycznych-stron-w-serwisie-github.html | 8 ++++---- ...uracja-wlasnego-serwera-wirtualnego-vps copy.html | 8 ++++---- ...-strony-internetowe-z-twojego-komputera copy.html | 8 ++++---- podstawy/informatyka.html | 8 ++++---- podstawy/jezyki-programowania.html | 8 ++++---- podstawy/jezyki-programowania/c.html | 8 ++++---- podstawy/jezyki-programowania/javascript.html | 8 ++++---- podstawy/jezyki-programowania/php.html | 8 ++++---- podstawy/jezyki-programowania/python.html | 8 ++++---- podstawy/jezyki-programowania/scratch.html | 8 ++++---- podstawy/kontrola-wersji.html | 8 ++++---- podstawy/kontrola-wersji/github.html | 8 ++++---- podstawy/kontrola-wersji/inspekcja-kodu.html | 8 ++++---- podstawy/kontrola-wersji/podstawy-gita.html | 8 ++++---- .../kontrola-wersji/podstawy-gita/czym-jest-git.html | 8 ++++---- .../kontrola-wersji/podstawy-gita/etykietowanie.html | 8 ++++---- ...e-laczenie-galezi-i-rozwiazywanie-konfliktow.html | 8 ++++---- .../ignorowanie-plikow-i-katalogow.html | 8 ++++---- .../kontrola-wersji/podstawy-gita/instalacja.html | 8 ++++---- .../podstawy-gita/korzystanie-z-dokumentacji.html | 8 ++++---- .../podstawy-gita/podrozowanie-w-czasie.html | 8 ++++---- ...ficznym-interfejsem-git-w-visual-studio-code.html | 8 ++++---- .../praca-ze-zdalnym-repozytorium-github.html | 8 ++++---- .../tymczasowe-przechowywanie-zmian.html | 8 ++++---- podstawy/licencje.html | 8 ++++---- podstawy/pamiec-podreczna.html | 8 ++++---- podstawy/praca-w-it.html | 8 ++++---- podstawy/praca-w-it/backend-developer.html | 8 ++++---- podstawy/praca-w-it/devops-qa-i-inne.html | 8 ++++---- podstawy/praca-w-it/frontend-developer.html | 8 ++++---- podstawy/praca-w-it/ux-ui-designer.html | 8 ++++---- podstawy/programowanie.html | 8 ++++---- podstawy/programowanie/algorytmy.html | 8 ++++---- podstawy/programowanie/api.html | 8 ++++---- podstawy/programowanie/frameworki-i-biblioteki.html | 8 ++++---- .../programowanie/paradygmaty-programowania.html | 8 ++++---- podstawy/programowanie/struktury-i-bazy-danych.html | 8 ++++---- .../typowanie-statyczne-i-dynamiczne.html | 8 ++++---- podstawy/programowanie/wyrazenia-regularne.html | 8 ++++---- podstawy/programowanie/wzorce-projektowe.html | 8 ++++---- podstawy/siec.html | 8 ++++---- podstawy/siec/jak-dziala-internet.html | 8 ++++---- podstawy/sprzet-komputerowy.html | 8 ++++---- podstawy/sprzet-komputerowy/system-binarny.html | 8 ++++---- .../system-binarny/podstawy-systemu-binarnego.html | 8 ++++---- .../system-binarny/system-binarny.html | 8 ++++---- podstawy/systemy-operacyjne.html | 8 ++++---- podstawy/systemy-operacyjne/chrome-os.html | 8 ++++---- podstawy/systemy-operacyjne/free-bsd.html | 8 ++++---- podstawy/systemy-operacyjne/linux.html | 8 ++++---- podstawy/systemy-operacyjne/macos-i-ios.html | 8 ++++---- podstawy/systemy-operacyjne/windows.html | 8 ++++---- podstawy/testowanie.html | 8 ++++---- ...dy-testow-jednostkowych-integracyjnych-i-e2e.html | 8 ++++---- podstawy/testowanie/wprowadzenie-do-testowania.html | 8 ++++---- podstawy/warstwy-abstrakcji.html | 8 ++++---- podstawy/wydajnosc.html | 8 ++++---- podstawy/zarzadzanie-projektami.html | 8 ++++---- search-doc-1691335443042.json | 1 - search-doc-1691336563638.json | 1 + search-doc.json | 2 +- tags.html | 8 ++++---- tags/a-11-y.html | 8 ++++---- tags/accessibility.html | 8 ++++---- tags/agile.html | 8 ++++---- tags/algorytm.html | 8 ++++---- tags/api.html | 8 ++++---- tags/app.html | 8 ++++---- tags/apple.html | 8 ++++---- tags/auth.html | 8 ++++---- tags/axios.html | 8 ++++---- tags/backend.html | 8 ++++---- tags/big-o.html | 8 ++++---- tags/binary.html | 8 ++++---- tags/bsd.html | 8 ++++---- tags/bug.html | 8 ++++---- tags/bundle.html | 8 ++++---- tags/cache.html | 8 ++++---- tags/cd.html | 8 ++++---- tags/chrome.html | 8 ++++---- tags/ci.html | 8 ++++---- tags/cli.html | 8 ++++---- tags/cloud.html | 8 ++++---- tags/cloudflare.html | 8 ++++---- tags/cms.html | 8 ++++---- tags/code-review.html | 8 ++++---- tags/cpu.html | 8 ++++---- tags/cr.html | 8 ++++---- tags/cs.html | 8 ++++---- tags/css.html | 8 ++++---- tags/database.html | 8 ++++---- tags/db.html | 8 ++++---- tags/ddd.html | 8 ++++---- tags/design-patterns.html | 8 ++++---- tags/designer.html | 8 ++++---- tags/dev-tools.html | 8 ++++---- tags/developer.html | 8 ++++---- tags/dns.html | 8 ++++---- tags/docker.html | 8 ++++---- tags/docs.html | 8 ++++---- tags/e-2-e.html | 8 ++++---- tags/elasticsearch.html | 8 ++++---- tags/email.html | 8 ++++---- tags/es-lint.html | 8 ++++---- tags/free-bsd.html | 8 ++++---- tags/frontend.html | 8 ++++---- tags/ftp.html | 8 ++++---- tags/full-stack.html | 8 ++++---- tags/git-hub.html | 8 ++++---- tags/git.html | 8 ++++---- tags/google.html | 8 ++++---- tags/grafana.html | 8 ++++---- tags/graph-ql.html | 8 ++++---- tags/hardware.html | 8 ++++---- tags/hash.html | 8 ++++---- tags/hosting.html | 8 ++++---- tags/html.html | 8 ++++---- tags/http.html | 8 ++++---- tags/i-o.html | 8 ++++---- tags/i-os.html | 8 ++++---- tags/ia-c.html | 8 ++++---- tags/iaa-s.html | 8 ++++---- tags/ide.html | 8 ++++---- tags/integration.html | 8 ++++---- tags/internet.html | 8 ++++---- tags/ip.html | 8 ++++---- tags/it.html | 8 ++++---- tags/jasmine.html | 8 ++++---- tags/java-script.html | 8 ++++---- tags/jest.html | 8 ++++---- tags/js.html | 8 ++++---- tags/kafka.html | 8 ++++---- tags/kernel.html | 8 ++++---- tags/libs.html | 8 ++++---- tags/linux.html | 8 ++++---- tags/lucene.html | 8 ++++---- tags/mac-os.html | 8 ++++---- tags/marketing.html | 8 ++++---- tags/memo.html | 8 ++++---- tags/microsoft.html | 8 ++++---- tags/mobile.html | 8 ++++---- tags/mocha.html | 8 ++++---- tags/mongo-db.html | 8 ++++---- tags/network.html | 8 ++++---- tags/next-js.html | 8 ++++---- tags/nginx.html | 8 ++++---- tags/no-sql.html | 8 ++++---- tags/node-js.html | 8 ++++---- tags/notification.html | 8 ++++---- tags/npm.html | 8 ++++---- tags/oop.html | 8 ++++---- tags/orm.html | 8 ++++---- tags/os.html | 8 ++++---- tags/osems.html | 8 ++++---- tags/owasp.html | 8 ++++---- tags/pagination.html | 8 ++++---- tags/pay-u.html | 8 ++++---- tags/performance.html | 8 ++++---- tags/php.html | 8 ++++---- tags/prettier.html | 8 ++++---- tags/prism.html | 8 ++++---- tags/prisma.html | 8 ++++---- tags/prometheus.html | 8 ++++---- tags/przelewy-24.html | 8 ++++---- tags/push.html | 8 ++++---- tags/pwa.html | 8 ++++---- tags/rabbit-mq.html | 8 ++++---- tags/ram.html | 8 ++++---- tags/react.html | 8 ++++---- tags/readme.html | 8 ++++---- tags/redux.html | 8 ++++---- tags/reg-ex.html | 8 ++++---- tags/res-tful.html | 8 ++++---- tags/rest.html | 8 ++++---- tags/routing.html | 8 ++++---- tags/rx-js.html | 8 ++++---- tags/sass.html | 8 ++++---- tags/scrum.html | 8 ++++---- tags/scss.html | 8 ++++---- tags/security.html | 8 ++++---- tags/self-hosting.html | 8 ++++---- tags/sem-ver.html | 8 ++++---- tags/seo.html | 8 ++++---- tags/serverless.html | 8 ++++---- tags/smtp.html | 8 ++++---- tags/solr.html | 8 ++++---- tags/sql.html | 8 ++++---- tags/ssd.html | 8 ++++---- tags/ssh.html | 8 ++++---- tags/state.html | 8 ++++---- tags/stripe.html | 8 ++++---- tags/svg.html | 8 ++++---- tags/tailwind-css.html | 8 ++++---- tags/tailwind.html | 8 ++++---- tags/tcp-ip.html | 8 ++++---- tags/tdd.html | 8 ++++---- tags/testing-library.html | 8 ++++---- tags/testing.html | 8 ++++---- tags/tpay.html | 8 ++++---- tags/tracking.html | 8 ++++---- tags/ts.html | 8 ++++---- tags/type-script.html | 8 ++++---- tags/ui.html | 10 +++++----- tags/unit.html | 8 ++++---- tags/uptime.html | 8 ++++---- tags/ux.html | 10 +++++----- tags/vcs.html | 8 ++++---- tags/vercel.html | 8 ++++---- tags/vim.html | 8 ++++---- tags/virtualbox.html | 8 ++++---- tags/vite.html | 8 ++++---- tags/vm.html | 8 ++++---- tags/vps.html | 8 ++++---- tags/vs-code.html | 8 ++++---- tags/web-components.html | 8 ++++---- tags/web-server.html | 8 ++++---- tags/web-socket.html | 8 ++++---- tags/webpack.html | 8 ++++---- tags/windows.html | 8 ++++---- tags/zabbix.html | 8 ++++---- twitter.html | 8 ++++---- ...tania-designerem-ux-ui-potrzeba-10000-godzin.html | 12 ++++++------ ux-ui/praktyczne-szkolenie-projektowania-ux-ui.html | 8 ++++---- .../material-uzupelniajacy-ui.html | 8 ++++---- .../nagranie-z-webinaru-ux.html | 12 ++++++------ ...owanie-interfejsu-i-doswiadczen-uzytkownikow.html | 8 ++++---- .../detale.html | 12 ++++++------ .../dostosowanie-ilustracji.html | 12 ++++++------ .../dostosowanie-typografii-i-kolorow.html | 12 ++++++------ .../formularzdostepnosci-uslugi.html | 8 ++++---- .../glebia.html | 8 ++++---- .../identyfikacja-marki.html | 12 ++++++------ .../korzystanie-z-figmy.html | 12 ++++++------ .../mapa-strony.html | 12 ++++++------ .../persona-uzytkownika.html | 12 ++++++------ .../projektowanie-szkieletu.html | 8 ++++---- .../prototyp.html | 8 ++++---- .../przygotowanie-elementow-szkieletu.html | 12 ++++++------ .../rozmieszczenie-grafik.html | 8 ++++---- .../scenariusze-uzytkownika.html | 12 ++++++------ .../schemat-dzialan-uzytkownika.html | 12 ++++++------ .../tablica-inspiracji.html | 12 ++++++------ .../tresci-graficzne.html | 12 ++++++------ .../tresci-tekstowe.html | 12 ++++++------ .../wprowadzenie.html | 8 ++++---- .../zapoznanie-z-interfejsem.html | 8 ++++---- ux-ui/projektowanie-ux-ui.html | 12 ++++++------ ux-ui/projektowanie-vs-kodowanie.html | 8 ++++---- ...ektowanie-interfejsu-strony-internetowej-gls.html | 8 ++++---- ux-ui/roznice-miedzy-ux-ui.html | 8 ++++---- youtube.html | 8 ++++---- 1011 files changed, 3944 insertions(+), 3944 deletions(-) delete mode 100644 assets/js/095e46f4.5aeb9e93.js create mode 100644 assets/js/095e46f4.bf6f824c.js delete mode 100644 assets/js/11aee4d5.c40984c7.js create mode 100644 assets/js/11aee4d5.d7c1eefc.js rename assets/js/{156f22fa.74bcfb89.js => 156f22fa.4d6acf4c.js} (61%) rename assets/js/{2fa374a5.38699639.js => 2fa374a5.6a48127a.js} (65%) rename assets/js/{35121e98.38641288.js => 35121e98.1777a417.js} (62%) create mode 100644 assets/js/3bd3cc6c.0f107830.js delete mode 100644 assets/js/3bd3cc6c.c9a35244.js rename assets/js/{4618a95d.64bed50c.js => 4618a95d.fd0794d7.js} (55%) delete mode 100644 assets/js/4ee797cf.7d5db699.js create mode 100644 assets/js/4ee797cf.c811aaab.js create mode 100644 assets/js/5299bf45.058222c2.js delete mode 100644 assets/js/5299bf45.2babb11b.js create mode 100644 assets/js/7b98acb0.8579954b.js delete mode 100644 assets/js/7b98acb0.b9fbae0b.js delete mode 100644 assets/js/84991166.883bffe2.js create mode 100644 assets/js/84991166.c5c96d02.js delete mode 100644 assets/js/8b1c1229.28ab392f.js create mode 100644 assets/js/8b1c1229.bdbfd260.js rename assets/js/{935f2afb.ba798bfc.js => 935f2afb.f8d74f66.js} (90%) create mode 100644 assets/js/9e9a17b9.212044eb.js delete mode 100644 assets/js/9e9a17b9.4b0aacbc.js rename assets/js/{a0420386.09b24d23.js => a0420386.ff732ebf.js} (65%) create mode 100644 assets/js/a79cfbf2.0050f52e.js delete mode 100644 assets/js/a79cfbf2.a8ddedc6.js rename assets/js/{b92b9e7e.98259401.js => b92b9e7e.c7bb9953.js} (64%) delete mode 100644 assets/js/c9805ddd.550713fc.js create mode 100644 assets/js/c9805ddd.abb51093.js delete mode 100644 assets/js/f65f218b.7cfe538c.js create mode 100644 assets/js/f65f218b.9a2cdf63.js rename assets/js/{main.e2dfac10.js => main.bfe5da37.js} (99%) rename assets/js/{main.e2dfac10.js.LICENSE.txt => main.bfe5da37.js.LICENSE.txt} (100%) rename assets/js/{runtime~main.ee1e5838.js => runtime~main.cb057a9d.js} (97%) delete mode 100644 lunr-index-1691335443042.json create mode 100644 lunr-index-1691336563638.json delete mode 100644 search-doc-1691335443042.json create mode 100644 search-doc-1691336563638.json diff --git a/100-bugow-js.html b/100-bugow-js.html index a7ed6ab92..d0c531ec6 100644 --- a/100-bugow-js.html +++ b/100-bugow-js.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

100 Bugów JS 🪲

Poznaj lepiej JavaScript, odnajdując drobne błędy w kodzie.

Zapisz się podając swój email, a przez 100 dni będziesz otrzymywał na swoją skrzynkę krótki fragment kodu JavaScript z ukrytym błędem.

Każda wiadomość będzie zawierać również link do rozwiązania.

- - + + \ No newline at end of file diff --git a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6.html b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6.html index 60ced7a91..64bb1016c 100644 --- a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6.html +++ b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #098

🪲 Znajdź buga

function nested(a) {
return function (b) {
return function (c) {
return function (d) {
a = 0
return a + b + c + d
}
b = 0
}
}
}

console.log(nested(1)(2)(3)(4))

Jak wartość zostanie zalogowana do konsoli?

Czy cały kod w przykładzie jest napisany prawidłowo?

🧪 Rozwiązanie

function nested(a) {
return function (b) {
return function (c) {
return function (d) {
a = 0
return a + b + c + d
}
// b = 0
}
}
}

console.log(nested(1)(2)(3)(4)) // 9

JavaScript umożliwia zamykanie funkcji wewnątrz innej. Umożliwia też zwracanie funkcji z funkcji.

Jest to przydatny sposób np. na przechowywanie informacji w zmiennych, które nie ulegają zniszczeniu po wykonaniu funkcji.

Jest to też efektywny sposób na tworzenie fabryki funkcji, które mogą różnić się stanem początkowym, ale współdzielić tą samą logikę.

Te dwa koncepty w JavaScript'u nazywamy closure czyli domknięcia oraz currying czyli wyprawianie.

Przejdźmy do odnalezienia błędu w kodzie. W naszym przypadku błąd w występuje w postaci próby nadpisania parametru b.

Jest to niemożliwe ze względu na wystąpienie tego fragmentu kodu po wyrażeniu return.

Każde wyrażenie return wewnątrz funkcji zakańcza wykonywanie dalszego jej kodu (z wyjątkiem użycia return w try/catch gdy dodatkowo użyte zostanie finally).

b = 0 jest więc martwym kodem, który nigdy nie zostaje wykonany.

a = 0 jest już jednak skuteczne i nadpisuje przekazany w głównej funkcji nested() parametr a, zmieniając jego wartość na 0.

Sam zapis nested(1)(2)(3)(4) to po prostu ciąg wywołań zagnieżdżonych funkcji, jedna po drugiej.

Wywołanie nested(1) zwraca funkcję zagnieżdżoną na pierwszym poziomie. Funkcja ta z kolei zwraca kolejną funkcję, którą znów możemy wykonać.

Moglibyśmy zapisać to również jako const fn1 = nested(1), a następnie wywołać fn1(2) przypisując zwróconą z takiego wywołania funkcję do kolejnej stałej const fn2 = fn1(2), itd.

Finalnie, wywołanie ostatniej funkcji z całego ciągu zagnieżdżeń, powoduje zsumowanie argumentów przekazanych do każdej z tych funkcji.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugCode.html b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugCode.html index 143af682a..251a4617b 100644 --- a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugCode.html +++ b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function nested(a) {
return function (b) {
return function (c) {
return function (d) {
a = 0
return a + b + c + d
}
b = 0
}
}
}

console.log(nested(1)(2)(3)(4))
- - + + \ No newline at end of file diff --git a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugDescription.html b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugDescription.html index 8a4263bbb..824f8b568 100644 --- a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugDescription.html +++ b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jak wartość zostanie zalogowana do konsoli?

Czy cały kod w przykładzie jest napisany prawidłowo?

- - + + \ No newline at end of file diff --git a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/links.html b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/links.html index d11e9d53c..b7dfe8d74 100644 --- a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/links.html +++ b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionCode.html b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionCode.html index 3b4048740..7bc102773 100644 --- a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionCode.html +++ b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function nested(a) {
return function (b) {
return function (c) {
return function (d) {
a = 0
return a + b + c + d
}
// b = 0
}
}
}

console.log(nested(1)(2)(3)(4)) // 9
- - + + \ No newline at end of file diff --git a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionDescription.html b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionDescription.html index 9642e4c19..3416e621e 100644 --- a/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionDescription.html +++ b/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

JavaScript umożliwia zamykanie funkcji wewnątrz innej. Umożliwia też zwracanie funkcji z funkcji.

Jest to przydatny sposób np. na przechowywanie informacji w zmiennych, które nie ulegają zniszczeniu po wykonaniu funkcji.

Jest to też efektywny sposób na tworzenie fabryki funkcji, które mogą różnić się stanem początkowym, ale współdzielić tą samą logikę.

Te dwa koncepty w JavaScript'u nazywamy closure czyli domknięcia oraz currying czyli wyprawianie.

Przejdźmy do odnalezienia błędu w kodzie. W naszym przypadku błąd w występuje w postaci próby nadpisania parametru b.

Jest to niemożliwe ze względu na wystąpienie tego fragmentu kodu po wyrażeniu return.

Każde wyrażenie return wewnątrz funkcji zakańcza wykonywanie dalszego jej kodu (z wyjątkiem użycia return w try/catch gdy dodatkowo użyte zostanie finally).

b = 0 jest więc martwym kodem, który nigdy nie zostaje wykonany.

a = 0 jest już jednak skuteczne i nadpisuje przekazany w głównej funkcji nested() parametr a, zmieniając jego wartość na 0.

Sam zapis nested(1)(2)(3)(4) to po prostu ciąg wywołań zagnieżdżonych funkcji, jedna po drugiej.

Wywołanie nested(1) zwraca funkcję zagnieżdżoną na pierwszym poziomie. Funkcja ta z kolei zwraca kolejną funkcję, którą znów możemy wykonać.

Moglibyśmy zapisać to również jako const fn1 = nested(1), a następnie wywołać fn1(2) przypisując zwróconą z takiego wywołania funkcję do kolejnej stałej const fn2 = fn1(2), itd.

Finalnie, wywołanie ostatniej funkcji z całego ciągu zagnieżdżeń, powoduje zsumowanie argumentów przekazanych do każdej z tych funkcji.

- - + + \ No newline at end of file diff --git a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732.html b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732.html index c0f63262a..0a93bfb6a 100644 --- a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732.html +++ b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #029

🪲 Znajdź buga

let booleanValue = false

if (booleanValue = !false) {
console.log("It's not false!")
}

Czy w powyższym przykładzie konsola coś zaloguje, czy nie?

🧪 Rozwiązanie

let booleanValue = false

if (booleanValue === !false) {
console.log("It's not false!")
}

W przykładzie z błędem, w konsoli zostanie zalogowana wartość It's not false!

W kodzie pojawił się błąd wewnątrz instrukcji warunkowej. Zamiast operatora porównania użyty został operator przypisania.

W przypadku operatora przypisania, domyślnie zwracana jest wartość przypisywana.

booleanValue = !false to po prostu przypisanie zanegowanej wartości false, czyli wartości true.

Przypisanie true do zmiennej booleanValue zwraca wartość true, więc instrukcja warunkowa się wykonuje i console.log() zostaje wywołany.

Naprawienie błędu polega na poprawieniu błędnie użytego operatora przypisania i zastąpieniu go operatorem porównania.

Możemy też użyć alternatywnej konstrukcji i zamiast === !false, zapisać to jako !== false.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugCode.html b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugCode.html index f6c80a6a0..7a8dac975 100644 --- a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugCode.html +++ b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let booleanValue = false

if (booleanValue = !false) {
console.log("It's not false!")
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugDescription.html b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugDescription.html index a03a66348..f4415bf38 100644 --- a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugDescription.html +++ b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy w powyższym przykładzie konsola coś zaloguje, czy nie?

- - + + \ No newline at end of file diff --git a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/links.html b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/links.html index a7791c1ba..727c39933 100644 --- a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/links.html +++ b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionCode.html b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionCode.html index 722dd9c8a..38dd4746c 100644 --- a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionCode.html +++ b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let booleanValue = false

if (booleanValue === !false) {
console.log("It's not false!")
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionDescription.html b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionDescription.html index c04e74b93..cf93393c3 100644 --- a/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionDescription.html +++ b/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, w konsoli zostanie zalogowana wartość It's not false!

W kodzie pojawił się błąd wewnątrz instrukcji warunkowej. Zamiast operatora porównania użyty został operator przypisania.

W przypadku operatora przypisania, domyślnie zwracana jest wartość przypisywana.

booleanValue = !false to po prostu przypisanie zanegowanej wartości false, czyli wartości true.

Przypisanie true do zmiennej booleanValue zwraca wartość true, więc instrukcja warunkowa się wykonuje i console.log() zostaje wywołany.

Naprawienie błędu polega na poprawieniu błędnie użytego operatora przypisania i zastąpieniu go operatorem porównania.

Możemy też użyć alternatywnej konstrukcji i zamiast === !false, zapisać to jako !== false.

- - + + \ No newline at end of file diff --git a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b.html b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b.html index d060ce6d7..5a942681f 100644 --- a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b.html +++ b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #003

🪲 Znajdź buga

const numA = "8"
const numB = "4"

console.log(numA * numB)
console.log(numA / numB)
console.log(numA + numB)
console.log(numA - numB)

Jakie wyniki powyższych działań zostaną zalogowane do konsoli?

🧪 Rozwiązanie

const numA = 8
const numB = 4

console.log(numA * numB)
console.log(numA / numB)
console.log(numA + numB)
console.log(numA - numB)

W przykładzie z błędem, wszystkie działania oprócz "8" + "4" zwrócą poprawne wyniki. Jedynie "8" + "4" zwróci "84".

Aby naprawić ten błąd musimy zapisywać liczby w formacie liczbowym, zamiast jako ciągi znaków.

Wystarczy więc pozbyć się cudzysłowu, zapisując liczby jako 8 i 4.

W przedstawionych działaniach tylko dodawanie zwraca błędny wynik, ponieważ w odróżnieniu od pozostałych operatorów, + ma dwojakie działanie. Sumuje wartości liczbowe lub łączy ciągi znaków.

Jeśli któryś ze składników działania dodawania jest ciągiem znaków, JavaScript zamienia również pozostałe składniki na ciągi znaków i łączy je ze sobą.

"text" + 1 (string + number) zwróci "text1" (string)

5 + "5" (number + string) zwróci "55" (string)

5 + 5 (number + number) zwróci 10 (number)

Pozostałe operatory, przed wykonaniem działania, dokonują konwersji typów danych na typ liczbowy.

Przykładowo, "5" - 5 (string - number) będzie skonwertowane na 5 - 5 (number - number) i zwróci 0 (number).

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugCode.html b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugCode.html index 15df9ef7d..6bee08f9d 100644 --- a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugCode.html +++ b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numA = "8"
const numB = "4"

console.log(numA * numB)
console.log(numA / numB)
console.log(numA + numB)
console.log(numA - numB)
- - + + \ No newline at end of file diff --git a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugDescription.html b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugDescription.html index 18a46e86b..12c488709 100644 --- a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugDescription.html +++ b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wyniki powyższych działań zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/links.html b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/links.html index 35368ae43..4bc5e5b10 100644 --- a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/links.html +++ b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionCode.html b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionCode.html index 3a5b45bf4..2005b8db2 100644 --- a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionCode.html +++ b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numA = 8
const numB = 4

console.log(numA * numB)
console.log(numA / numB)
console.log(numA + numB)
console.log(numA - numB)
- - + + \ No newline at end of file diff --git a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionDescription.html b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionDescription.html index 112db8e6c..a1e2b791e 100644 --- a/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionDescription.html +++ b/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, wszystkie działania oprócz "8" + "4" zwrócą poprawne wyniki. Jedynie "8" + "4" zwróci "84".

Aby naprawić ten błąd musimy zapisywać liczby w formacie liczbowym, zamiast jako ciągi znaków.

Wystarczy więc pozbyć się cudzysłowu, zapisując liczby jako 8 i 4.

W przedstawionych działaniach tylko dodawanie zwraca błędny wynik, ponieważ w odróżnieniu od pozostałych operatorów, + ma dwojakie działanie. Sumuje wartości liczbowe lub łączy ciągi znaków.

Jeśli któryś ze składników działania dodawania jest ciągiem znaków, JavaScript zamienia również pozostałe składniki na ciągi znaków i łączy je ze sobą.

"text" + 1 (string + number) zwróci "text1" (string)

5 + "5" (number + string) zwróci "55" (string)

5 + 5 (number + number) zwróci 10 (number)

Pozostałe operatory, przed wykonaniem działania, dokonują konwersji typów danych na typ liczbowy.

Przykładowo, "5" - 5 (string - number) będzie skonwertowane na 5 - 5 (number - number) i zwróci 0 (number).

- - + + \ No newline at end of file diff --git a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e.html b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e.html index 8b65cf0f1..28224e6bb 100644 --- a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e.html +++ b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #069

🪲 Znajdź buga

let a
let { a: b = "foo" } = { a }

console.log(a)
console.log(b)

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

let a
let { a: b = "foo" } = { a }

console.log(a) // undefined
console.log(b) // "foo"

Przejdźmy po kolei przez operacje jakie wykonuje JavaScript.

Utworzona zostaje zmienna a bez przypisania wartości, czyli jej wartość to undefined.

Operator przypisania = przechodzi do ewaluacji wartości po prawej stronie operatora.

Utworzony zostaje obiekt z własnością a, której wartość to undefined.

Destrukturyzując obiekt, przemianowujemy własność obiektu o nazwie a na nazwę b, tworząc tym samym zmienną b.

Wprowadzony zostaje domyślny parametr "foo", który zostaje przypisany jako wartość zmiennej, w przypadku gdy wartość destrukturyzowanej własności obiektu okazałaby się fałszywa.

Z uwagi na to, że obiekt ma kształt { a: undefined }, to rozbijając go na zmienną a, przemianowaną na b, wartość własności a jest fałszywa, zostaje więc użyty parametr domyślny "foo".

Finalnie utworzona zostaje więc zmienna b z wartością "foo".

Zmienna a nie ulega po drodze żadnym modyfikacjom i zachowuje swoją początkową wartość undefined.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugCode.html b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugCode.html index 7f1c0d28a..94952a960 100644 --- a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugCode.html +++ b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let a
let { a: b = "foo" } = { a }

console.log(a)
console.log(b)
- - + + \ No newline at end of file diff --git a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugDescription.html b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugDescription.html index 996323e92..4c4414f89 100644 --- a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugDescription.html +++ b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/links.html b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/links.html index 2bbafef48..a17b1be38 100644 --- a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/links.html +++ b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionCode.html b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionCode.html index ff8ad1e54..194e80c53 100644 --- a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionCode.html +++ b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let a
let { a: b = "foo" } = { a }

console.log(a) // undefined
console.log(b) // "foo"
- - + + \ No newline at end of file diff --git a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionDescription.html b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionDescription.html index d0e704c3a..fc28d5c98 100644 --- a/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionDescription.html +++ b/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Przejdźmy po kolei przez operacje jakie wykonuje JavaScript.

Utworzona zostaje zmienna a bez przypisania wartości, czyli jej wartość to undefined.

Operator przypisania = przechodzi do ewaluacji wartości po prawej stronie operatora.

Utworzony zostaje obiekt z własnością a, której wartość to undefined.

Destrukturyzując obiekt, przemianowujemy własność obiektu o nazwie a na nazwę b, tworząc tym samym zmienną b.

Wprowadzony zostaje domyślny parametr "foo", który zostaje przypisany jako wartość zmiennej, w przypadku gdy wartość destrukturyzowanej własności obiektu okazałaby się fałszywa.

Z uwagi na to, że obiekt ma kształt { a: undefined }, to rozbijając go na zmienną a, przemianowaną na b, wartość własności a jest fałszywa, zostaje więc użyty parametr domyślny "foo".

Finalnie utworzona zostaje więc zmienna b z wartością "foo".

Zmienna a nie ulega po drodze żadnym modyfikacjom i zachowuje swoją początkową wartość undefined.

- - + + \ No newline at end of file diff --git a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a.html b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a.html index 5f474a5b4..d9f717619 100644 --- a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a.html +++ b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #054

🪲 Znajdź buga

const func1 = function (...arguments) {
console.log(arguments)
}
const func2 = (...arguments) => {
console.log(arguments)
}

const func3 = function (a, b) {
console.log(arguments)
}
const func4 = (a, b) => {
console.log(arguments)
}

func1("foo", "bar")
func2("foo", "bar")
func3("foo", "bar")
func4("foo", "bar")

Czy powyższe wywołania funkcji, zalogują do konsoli przekazane argumenty?

🧪 Rozwiązanie

const func1 = function (...arguments) {
console.log(arguments)
}
const func2 = (...arguments) => {
console.log(arguments)
}

const func3 = function (a, b) {
console.log(arguments)
}
const func4 = (a, b) => {
console.log(arguments)
}

func1("foo", "bar") // ["foo", "bar"]
func2("foo", "bar") // ["foo", "bar"]
func3("foo", "bar") // { 0: "foo", 1: "bar"}
func4("foo", "bar") // arguments is not defined

Wywołania func1() i func2() zalogują do konsoli to samo, czyli tablice z listą przekazanych argumentów.

Nazwę parametru reszty (występującego po wielokropku) możemy zdefiniować dowolnie, nie musi nazywać się arguments.

Następnie w tak zdefiniowanym parametrze reszty otrzymujemy dostęp do tablicy z pozostałymi parametrami przekazanymi do funkcji.

Pozostałymi, czyli jeśli w funkcji zdefiniujemy np. func(a, ...rest), to w rest będziemy mieli dostęp do tablicy z resztą parametrów, bez parametru a.

W kolejnych funkcjach, func3() i func4() wywołane zostały predefiniowane obiekty arguments.

Funkcje mają dostęp do takiego obiektu, mimo, że nie jest on wyraźnie zadeklarowany. Podobna sytuacja ma miejsce np. z this.

Analogicznie do this, obiekt arguments jest dostępny tylko w przypadku deklaracji funkcji z użyciem słowa kluczowego function. Jeśli zdefiniowana funkcja jest funkcją strzałkową, wtedy obiekt arguments nie jest dostępny.

W wywołaniu func4() JavaScript wyrzuci więc błąd ReferenceError: arguments is not defined.

Jeśli jednak sprawdzisz kod w środowisku StackBlitz (Plac zabaw poniżej), obiekt arguments wewnątrz funkcji strzałkowej zwróci dziwne rzeczy.

Jest to spowodowane zdefiniowaniem obiektu arguments w globalnym zakresie poprzez StackBlitz i to samo zostanie zwrócone gdy wywołamy console.log(arguments) bezpośrednio w globalnym polu, bez zagnieżdżania go w funkcji

Podsumowując, preferowane jest używanie parametru reszty, zamiast predefiniowanego obiektu arguments.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugCode.html b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugCode.html index 90553224b..62b16b7e4 100644 --- a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugCode.html +++ b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const func1 = function (...arguments) {
console.log(arguments)
}
const func2 = (...arguments) => {
console.log(arguments)
}

const func3 = function (a, b) {
console.log(arguments)
}
const func4 = (a, b) => {
console.log(arguments)
}

func1("foo", "bar")
func2("foo", "bar")
func3("foo", "bar")
func4("foo", "bar")
- - + + \ No newline at end of file diff --git a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugDescription.html b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugDescription.html index 715f83665..203210cbe 100644 --- a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugDescription.html +++ b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy powyższe wywołania funkcji, zalogują do konsoli przekazane argumenty?

- - + + \ No newline at end of file diff --git a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/links.html b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/links.html index 5b7a5be5a..f1e223eef 100644 --- a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/links.html +++ b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionCode.html b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionCode.html index 89fe784e7..c65850eef 100644 --- a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionCode.html +++ b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const func1 = function (...arguments) {
console.log(arguments)
}
const func2 = (...arguments) => {
console.log(arguments)
}

const func3 = function (a, b) {
console.log(arguments)
}
const func4 = (a, b) => {
console.log(arguments)
}

func1("foo", "bar") // ["foo", "bar"]
func2("foo", "bar") // ["foo", "bar"]
func3("foo", "bar") // { 0: "foo", 1: "bar"}
func4("foo", "bar") // arguments is not defined
- - + + \ No newline at end of file diff --git a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionDescription.html b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionDescription.html index 76549fd41..e13d376e5 100644 --- a/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionDescription.html +++ b/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Wywołania func1() i func2() zalogują do konsoli to samo, czyli tablice z listą przekazanych argumentów.

Nazwę parametru reszty (występującego po wielokropku) możemy zdefiniować dowolnie, nie musi nazywać się arguments.

Następnie w tak zdefiniowanym parametrze reszty otrzymujemy dostęp do tablicy z pozostałymi parametrami przekazanymi do funkcji.

Pozostałymi, czyli jeśli w funkcji zdefiniujemy np. func(a, ...rest), to w rest będziemy mieli dostęp do tablicy z resztą parametrów, bez parametru a.

W kolejnych funkcjach, func3() i func4() wywołane zostały predefiniowane obiekty arguments.

Funkcje mają dostęp do takiego obiektu, mimo, że nie jest on wyraźnie zadeklarowany. Podobna sytuacja ma miejsce np. z this.

Analogicznie do this, obiekt arguments jest dostępny tylko w przypadku deklaracji funkcji z użyciem słowa kluczowego function. Jeśli zdefiniowana funkcja jest funkcją strzałkową, wtedy obiekt arguments nie jest dostępny.

W wywołaniu func4() JavaScript wyrzuci więc błąd ReferenceError: arguments is not defined.

Jeśli jednak sprawdzisz kod w środowisku StackBlitz (Plac zabaw poniżej), obiekt arguments wewnątrz funkcji strzałkowej zwróci dziwne rzeczy.

Jest to spowodowane zdefiniowaniem obiektu arguments w globalnym zakresie poprzez StackBlitz i to samo zostanie zwrócone gdy wywołamy console.log(arguments) bezpośrednio w globalnym polu, bez zagnieżdżania go w funkcji

Podsumowując, preferowane jest używanie parametru reszty, zamiast predefiniowanego obiektu arguments.

- - + + \ No newline at end of file diff --git a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03.html b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03.html index 4eea2a34c..d2b11549f 100644 --- a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03.html +++ b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #008

🪲 Znajdź buga

function Car(color) {
this.color = color
this.mileage = 0
}

Car.prototype.drive = (distance) => {
this.mileage += distance
}

const myCar = new Car("red")
myCar.drive(1000)

console.log(myCar)

Chcemy stworzyć obiekt samochodu, który będzie zwiększał swój przebieg (mileage) podczas jazdy, o wartość przekazaną w argumencie metody drive().

Jaki przebieg zostanie zalogowany do konsoli dla obiektu myCar?

🧪 Rozwiązanie

function Car(color) {
this.color = color
this.mileage = 0
}

Car.prototype.drive = function (distance) {
this.mileage += distance
}

const myCar = new Car("red")
myCar.drive(1000)

console.log(myCar)

W przykładzie z błędem, wartość mileage obiektu myCar wyniesie 0.

Niedziałanie zwiększania wartości przez this.mileage += distance wynika z tego, że funkcje strzałkowe nie mają własnego this i nie powinny być używane jako metody obiektów.

this.milage nie odnosi się więc do obiektu, tak jakbyśmy tego chcieli.

Aby naprawić ten problem, musimy zamienić funkcję strzałkową drive na zwykłą funkcję.

Po tej zmianie, obiekt myCar zwróci już wartość mileage równą 1000.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugCode.html b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugCode.html index 6d870b5eb..2ec6cc596 100644 --- a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugCode.html +++ b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function Car(color) {
this.color = color
this.mileage = 0
}

Car.prototype.drive = (distance) => {
this.mileage += distance
}

const myCar = new Car("red")
myCar.drive(1000)

console.log(myCar)
- - + + \ No newline at end of file diff --git a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugDescription.html b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugDescription.html index f6a8ec3ce..f33d08022 100644 --- a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugDescription.html +++ b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy stworzyć obiekt samochodu, który będzie zwiększał swój przebieg (mileage) podczas jazdy, o wartość przekazaną w argumencie metody drive().

Jaki przebieg zostanie zalogowany do konsoli dla obiektu myCar?

- - + + \ No newline at end of file diff --git a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/links.html b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/links.html index e194b07da..09e07caa9 100644 --- a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/links.html +++ b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionCode.html b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionCode.html index 3dd4d49a5..fa3f61085 100644 --- a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionCode.html +++ b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function Car(color) {
this.color = color
this.mileage = 0
}

Car.prototype.drive = function (distance) {
this.mileage += distance
}

const myCar = new Car("red")
myCar.drive(1000)

console.log(myCar)
- - + + \ No newline at end of file diff --git a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionDescription.html b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionDescription.html index 94bae0e37..dfc6ea539 100644 --- a/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionDescription.html +++ b/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, wartość mileage obiektu myCar wyniesie 0.

Niedziałanie zwiększania wartości przez this.mileage += distance wynika z tego, że funkcje strzałkowe nie mają własnego this i nie powinny być używane jako metody obiektów.

this.milage nie odnosi się więc do obiektu, tak jakbyśmy tego chcieli.

Aby naprawić ten problem, musimy zamienić funkcję strzałkową drive na zwykłą funkcję.

Po tej zmianie, obiekt myCar zwróci już wartość mileage równą 1000.

- - + + \ No newline at end of file diff --git a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885.html b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885.html index 80acd609c..2a25b9128 100644 --- a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885.html +++ b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #048

🪲 Znajdź buga

console.log({} instanceof Object)

console.log([] instanceof Array)
console.log([] instanceof Object)

console.log((() => {}) instanceof Function)
console.log((() => {}) instanceof Object)

console.log("foo" instanceof String)
console.log(String("foo") instanceof String)
console.log(new String("foo") instanceof String)

console.log("foo" instanceof Object)
console.log(String("foo") instanceof Object)
console.log(new String("foo") instanceof Object)

Czy w JavaScript wszystko jest obiektem?

Jakie wartości logiczne zostaną zalogowane do konsoli dla poszczególnych wywołań instanceof ?

🧪 Rozwiązanie

console.log({} instanceof Object) // true

console.log([] instanceof Array) // true
console.log([] instanceof Object) // true

console.log((() => {}) instanceof Function) // true
console.log((() => {}) instanceof Object) // true

console.log("foo" instanceof String) // false
console.log(String("foo") instanceof String) // false
console.log(new String("foo") instanceof String) // true

console.log("foo" instanceof Object) // false
console.log(String("foo") instanceof Object) // false
console.log(new String("foo") instanceof Object) // true

Można by błędnie założyć, że instanceof sprawdza czy obiekt został utworzony przez dany konstruktor, czyli, czy jego instancja została utworzona poprzez wywołanie new na funkcji konstruującej obiekt.

W rzeczywistości instanceof sprawdza jednak, czy utworzona instancja obiektu ma w całym swoim łańcuchu prototypów dany konstruktor.

W JavaScript obiekty dziedziczą po sobie przekazując swoje prototypy, jednocześnie tworząc łańcuch, w którym "foo".__proto__.constructor zwróci String, a "foo".__proto__.__proto__.constructor zwróci Object.

Ciąg znaków dziedziczy więc w łańcuchu prototypów zarówno konstruktor String, jak i Object.

Podobnie wygląda sytuacja w przypadku innych typów danych.

Obiekt daty będzie miał w swoim łańcuchu prototypów zarówno konstruktor Date, jak i Object.

Tablica (array) również będzie miała w swoim łańcuchu prototypów konstruktor Array, jak i Object.

Funkcja również, Function i Object.

Nie bez powodu mówi się, że w JavaScript wszystko jest obiektem.

Typy prymitywne (jak np. ciąg znaków) z użyciem instanceof nie będą się jednak przedstawiały jako instancje Object, mimo, że w łańcuchu prototypów jasno widać, że "foo".__proto__.__proto__.constructor to Object.

NaN również nie przedstawi się jako instancja obiektu, ale w swoim łańcuchu prototypów ma konstruktor Number i Object.

Podobnie w przypadku wartości logicznych true i false. Tak jak wartości prymitywne, nie zgłoszą się one jako instancja obiektu, ale mają w swoim łańcuchu prototypów konstruktory Boolean i Object.

Jedynie wartości null i undefined nie mają swoich prototypów i konstruktorów, ale żeby było śmieszniej typeof null zwróci object. Jest to jednak uznawane za znany bug w języku JavaScript i ze względu na zachowanie kompatybilności wstecznej, nie zostaje naprawiany.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugCode.html b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugCode.html index 6e9d8720b..8c0281cb2 100644 --- a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugCode.html +++ b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log({} instanceof Object)

console.log([] instanceof Array)
console.log([] instanceof Object)

console.log((() => {}) instanceof Function)
console.log((() => {}) instanceof Object)

console.log("foo" instanceof String)
console.log(String("foo") instanceof String)
console.log(new String("foo") instanceof String)

console.log("foo" instanceof Object)
console.log(String("foo") instanceof Object)
console.log(new String("foo") instanceof Object)
- - + + \ No newline at end of file diff --git a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugDescription.html b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugDescription.html index f882a9db0..f24e5a790 100644 --- a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugDescription.html +++ b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy w JavaScript wszystko jest obiektem?

Jakie wartości logiczne zostaną zalogowane do konsoli dla poszczególnych wywołań instanceof ?

- - + + \ No newline at end of file diff --git a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/links.html b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/links.html index 7ace3e18b..b22298edd 100644 --- a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/links.html +++ b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionCode.html b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionCode.html index c9f41947c..3e72ff3d9 100644 --- a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionCode.html +++ b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log({} instanceof Object) // true

console.log([] instanceof Array) // true
console.log([] instanceof Object) // true

console.log((() => {}) instanceof Function) // true
console.log((() => {}) instanceof Object) // true

console.log("foo" instanceof String) // false
console.log(String("foo") instanceof String) // false
console.log(new String("foo") instanceof String) // true

console.log("foo" instanceof Object) // false
console.log(String("foo") instanceof Object) // false
console.log(new String("foo") instanceof Object) // true
- - + + \ No newline at end of file diff --git a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionDescription.html b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionDescription.html index 0d646c6bf..103e51676 100644 --- a/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionDescription.html +++ b/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Można by błędnie założyć, że instanceof sprawdza czy obiekt został utworzony przez dany konstruktor, czyli, czy jego instancja została utworzona poprzez wywołanie new na funkcji konstruującej obiekt.

W rzeczywistości instanceof sprawdza jednak, czy utworzona instancja obiektu ma w całym swoim łańcuchu prototypów dany konstruktor.

W JavaScript obiekty dziedziczą po sobie przekazując swoje prototypy, jednocześnie tworząc łańcuch, w którym "foo".__proto__.constructor zwróci String, a "foo".__proto__.__proto__.constructor zwróci Object.

Ciąg znaków dziedziczy więc w łańcuchu prototypów zarówno konstruktor String, jak i Object.

Podobnie wygląda sytuacja w przypadku innych typów danych.

Obiekt daty będzie miał w swoim łańcuchu prototypów zarówno konstruktor Date, jak i Object.

Tablica (array) również będzie miała w swoim łańcuchu prototypów konstruktor Array, jak i Object.

Funkcja również, Function i Object.

Nie bez powodu mówi się, że w JavaScript wszystko jest obiektem.

Typy prymitywne (jak np. ciąg znaków) z użyciem instanceof nie będą się jednak przedstawiały jako instancje Object, mimo, że w łańcuchu prototypów jasno widać, że "foo".__proto__.__proto__.constructor to Object.

NaN również nie przedstawi się jako instancja obiektu, ale w swoim łańcuchu prototypów ma konstruktor Number i Object.

Podobnie w przypadku wartości logicznych true i false. Tak jak wartości prymitywne, nie zgłoszą się one jako instancja obiektu, ale mają w swoim łańcuchu prototypów konstruktory Boolean i Object.

Jedynie wartości null i undefined nie mają swoich prototypów i konstruktorów, ale żeby było śmieszniej typeof null zwróci object. Jest to jednak uznawane za znany bug w języku JavaScript i ze względu na zachowanie kompatybilności wstecznej, nie zostaje naprawiany.

- - + + \ No newline at end of file diff --git a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211.html b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211.html index 3c5d7bc6a..6951d0a34 100644 --- a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211.html +++ b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #088

🪲 Znajdź buga

const date_1999 = new Date("1999-01-01")
const date_1999_ = new Date("1999-01-01")
const date_2000 = new Date("2000-01-01")
const date_2001 = new Date("2001-01-01")

console.log(date_1999 < date_2000)
console.log(date_1999_ < date_2001)
console.log(date_1999 < date_1999)
console.log(date_1999 < date_1999_)
console.log(date_1999 == date_1999)
console.log(date_1999 == date_1999_)
console.log(date_1999 <= date_1999_)

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

const date_1999 = new Date("1999-01-01")
const date_1999_ = new Date("1999-01-01")
const date_2000 = new Date("2000-01-01")
const date_2001 = new Date("2001-01-01")

console.log(date_1999 < date_2000) // true
console.log(date_1999_ < date_2001) // true
console.log(date_1999 < date_1999) // false
console.log(date_1999 < date_1999_) // false
console.log(date_1999 == date_1999) // true
console.log(date_1999 == date_1999_) // false
console.log(date_1999 <= date_1999_) // true

Daty przypisane do stałych date_1999 i date_1999_ są takie same.

Są jednak różnymi obiektami i porównywanie ich za pomocą operatora == lub === zawsze zwróci fałsz.

Prawda z takiego porównania zostanie zwrócona tylko wtedy, gdy porównywany ze sobą będzie ten sam referencyjny obiekt.

Moglibyśmy stworzyć alias np. const date_1999_x = date_1999.

Wtedy porównanie date_1999_x == date_1999 zwróciłoby prawdę.

Wiązałoby się to jednak też i z innymi implikacjami jakie niosą za sobą aliasy obiektów w JavaScript.

Mutując taki alias lub referencyjny obiekt, zmieniałby się on jednocześnie w obu stałych/zmiennych.

Operator <, ale również i <= oraz ich odwrotności > i >=, działają na podstawie innego algorytmu niż ==

Porównywane są tutaj wartości liczbowe, do których zostaną sprowadzone operandy (w naszym przypadku obiekty dat).

Nie ma znaczenia czy wartości są przekazywane jako referencja.

Jeśli chcemy więc porównać dwie daty pod kątem, która data jest wcześniejsza (mniejsza) lub późniejsza (większa), to używanie operatorów <, <=, >, >= nadaje się bardzo dobrze.

Jeśli chcemy jednak dowiedzieć się, czy dwie daty są identyczne, musimy najpierw samodzielnie sprowadzić je do wartości liczbowych np. metodą getTime().

Dopiero tak zaprezentowane daty w postaci wartości liczbowych możemy porównywać za pomocą == lub ===.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugCode.html b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugCode.html index 2eeef24b6..f97211571 100644 --- a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugCode.html +++ b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const date_1999 = new Date("1999-01-01")
const date_1999_ = new Date("1999-01-01")
const date_2000 = new Date("2000-01-01")
const date_2001 = new Date("2001-01-01")

console.log(date_1999 < date_2000)
console.log(date_1999_ < date_2001)
console.log(date_1999 < date_1999)
console.log(date_1999 < date_1999_)
console.log(date_1999 == date_1999)
console.log(date_1999 == date_1999_)
console.log(date_1999 <= date_1999_)
- - + + \ No newline at end of file diff --git a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugDescription.html b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugDescription.html index 8286fc631..d68886b69 100644 --- a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugDescription.html +++ b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/links.html b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/links.html index 328bb25e8..69d856545 100644 --- a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/links.html +++ b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionCode.html b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionCode.html index 202eecb32..67455af07 100644 --- a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionCode.html +++ b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const date_1999 = new Date("1999-01-01")
const date_1999_ = new Date("1999-01-01")
const date_2000 = new Date("2000-01-01")
const date_2001 = new Date("2001-01-01")

console.log(date_1999 < date_2000) // true
console.log(date_1999_ < date_2001) // true
console.log(date_1999 < date_1999) // false
console.log(date_1999 < date_1999_) // false
console.log(date_1999 == date_1999) // true
console.log(date_1999 == date_1999_) // false
console.log(date_1999 <= date_1999_) // true
- - + + \ No newline at end of file diff --git a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionDescription.html b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionDescription.html index 681a50258..7f858e81f 100644 --- a/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionDescription.html +++ b/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Daty przypisane do stałych date_1999 i date_1999_ są takie same.

Są jednak różnymi obiektami i porównywanie ich za pomocą operatora == lub === zawsze zwróci fałsz.

Prawda z takiego porównania zostanie zwrócona tylko wtedy, gdy porównywany ze sobą będzie ten sam referencyjny obiekt.

Moglibyśmy stworzyć alias np. const date_1999_x = date_1999.

Wtedy porównanie date_1999_x == date_1999 zwróciłoby prawdę.

Wiązałoby się to jednak też i z innymi implikacjami jakie niosą za sobą aliasy obiektów w JavaScript.

Mutując taki alias lub referencyjny obiekt, zmieniałby się on jednocześnie w obu stałych/zmiennych.

Operator <, ale również i <= oraz ich odwrotności > i >=, działają na podstawie innego algorytmu niż ==

Porównywane są tutaj wartości liczbowe, do których zostaną sprowadzone operandy (w naszym przypadku obiekty dat).

Nie ma znaczenia czy wartości są przekazywane jako referencja.

Jeśli chcemy więc porównać dwie daty pod kątem, która data jest wcześniejsza (mniejsza) lub późniejsza (większa), to używanie operatorów <, <=, >, >= nadaje się bardzo dobrze.

Jeśli chcemy jednak dowiedzieć się, czy dwie daty są identyczne, musimy najpierw samodzielnie sprowadzić je do wartości liczbowych np. metodą getTime().

Dopiero tak zaprezentowane daty w postaci wartości liczbowych możemy porównywać za pomocą == lub ===.

- - + + \ No newline at end of file diff --git a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53.html b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53.html index 4b44359dd..0c16ee691 100644 --- a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53.html +++ b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #016

🪲 Znajdź buga

const myDog = new Dog()
const myCat = new Cat()

function Dog() {
this.name = "Pluto"
}

class Cat {
constructor() {
this.name = "Garfield"
}
}

console.log(myDog.name)
console.log(myCat.name)

Czy przedstawiony kod zadziała poprawnie? Jeśli nie, to gdzie kryje się błąd?

🧪 Rozwiązanie

const myDog = new Dog()

function Dog() {
this.name = "Pluto"
}

class Cat {
constructor() {
this.name = "Garfield"
}
}

const myCat = new Cat()

console.log(myDog.name)
console.log(myCat.name)

Uruchomienie kodu z błędem wyrzuci nam do konsoli błąd Cannot access 'Cat' before initialization.

W JavaScript deklaracje funkcji oraz zmiennych definiowanych wyrażeniem var są podciągane na początek wykonywanego kodu. Własność tą z j. angielskiego nazywamy hoisting.

Hoisting w JS oznacza, że możemy najpierw wywołać funkcję, a dopiero w dalszej części kodu ją zdefiniować.

Nie możemy jednak zrobić tego samego z klasą. Deklaracja class nie jest podciągana, przez co nie możemy jej wywołać przed jej zdeklarowaniem.

I dokładnie to jest powodem wystąpienia błędu w wcześniej przedstawionym błędnym kodzie.

Aby naprawić błąd, musimy po prostu przenieść wywołanie new Cat() do dalszej części kodu, aby wywołanie nastąpiło już po deklaracji klasy.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugCode.html b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugCode.html index ee0d0d9e1..5033f8e5f 100644 --- a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugCode.html +++ b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const myDog = new Dog()
const myCat = new Cat()

function Dog() {
this.name = "Pluto"
}

class Cat {
constructor() {
this.name = "Garfield"
}
}

console.log(myDog.name)
console.log(myCat.name)
- - + + \ No newline at end of file diff --git a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugDescription.html b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugDescription.html index a143c22aa..8aaeaa4ec 100644 --- a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugDescription.html +++ b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy przedstawiony kod zadziała poprawnie? Jeśli nie, to gdzie kryje się błąd?

- - + + \ No newline at end of file diff --git a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/links.html b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/links.html index c5a47d071..172aa9f1b 100644 --- a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/links.html +++ b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionCode.html b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionCode.html index 1f7a2dced..ad829119a 100644 --- a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionCode.html +++ b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const myDog = new Dog()

function Dog() {
this.name = "Pluto"
}

class Cat {
constructor() {
this.name = "Garfield"
}
}

const myCat = new Cat()

console.log(myDog.name)
console.log(myCat.name)
- - + + \ No newline at end of file diff --git a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionDescription.html b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionDescription.html index c4372c0b3..abc7193cf 100644 --- a/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionDescription.html +++ b/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Uruchomienie kodu z błędem wyrzuci nam do konsoli błąd Cannot access 'Cat' before initialization.

W JavaScript deklaracje funkcji oraz zmiennych definiowanych wyrażeniem var są podciągane na początek wykonywanego kodu. Własność tą z j. angielskiego nazywamy hoisting.

Hoisting w JS oznacza, że możemy najpierw wywołać funkcję, a dopiero w dalszej części kodu ją zdefiniować.

Nie możemy jednak zrobić tego samego z klasą. Deklaracja class nie jest podciągana, przez co nie możemy jej wywołać przed jej zdeklarowaniem.

I dokładnie to jest powodem wystąpienia błędu w wcześniej przedstawionym błędnym kodzie.

Aby naprawić błąd, musimy po prostu przenieść wywołanie new Cat() do dalszej części kodu, aby wywołanie nastąpiło już po deklaracji klasy.

- - + + \ No newline at end of file diff --git a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4.html b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4.html index d1acee626..cb44821e2 100644 --- a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4.html +++ b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #049

🪲 Znajdź buga

const numbers = [43, 12, 1, 5, 26]

console.log(numbers.sort())

Chcemy posortować tablicę z liczbami od najmniejszej do największej.

Czy do konsoli zostanie zalogowana właściwa kolejność?

🧪 Rozwiązanie

const numbers = [43, 12, 1, 5, 26]
const compareNumbers = (a, b) => a - b

console.log(numbers.sort(compareNumbers))

W przykładzie z błędem zostanie zalogowana tablica 1,12,26,43,5.

Wyraźnie została ona zmieniona względem oryginału, ale sortowanie nastąpiło nie według wartości liczbowych, a alfabetycznych.

Domyślne działanie metody sort() polega na sprowadzeniu porównywanych wartości do ciągów znaków i posortowaniu ich według tablicy kodowania znaków UTF-16.

1 występuje przed 2 tak samo jak a przed b.

Kolejność 1,12,26... można więc porównać np. do a,ab,bf....

Aby posortować wartości z tablicy pod kątem liczbowym, musimy samodzielnie napisać funkcję porównującą i przekazać ją jako argument do funkcji sort().

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugCode.html b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugCode.html index a1050b0fc..172668ae0 100644 --- a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugCode.html +++ b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numbers = [43, 12, 1, 5, 26]

console.log(numbers.sort())
- - + + \ No newline at end of file diff --git a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugDescription.html b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugDescription.html index c2ded758b..7dd621e66 100644 --- a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugDescription.html +++ b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy posortować tablicę z liczbami od najmniejszej do największej.

Czy do konsoli zostanie zalogowana właściwa kolejność?

- - + + \ No newline at end of file diff --git a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/links.html b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/links.html index 7aaacc606..7547b6d91 100644 --- a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/links.html +++ b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionCode.html b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionCode.html index 10c629409..2e31182d7 100644 --- a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionCode.html +++ b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numbers = [43, 12, 1, 5, 26]
const compareNumbers = (a, b) => a - b

console.log(numbers.sort(compareNumbers))
- - + + \ No newline at end of file diff --git a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionDescription.html b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionDescription.html index b41c6e07b..d5da871a0 100644 --- a/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionDescription.html +++ b/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem zostanie zalogowana tablica 1,12,26,43,5.

Wyraźnie została ona zmieniona względem oryginału, ale sortowanie nastąpiło nie według wartości liczbowych, a alfabetycznych.

Domyślne działanie metody sort() polega na sprowadzeniu porównywanych wartości do ciągów znaków i posortowaniu ich według tablicy kodowania znaków UTF-16.

1 występuje przed 2 tak samo jak a przed b.

Kolejność 1,12,26... można więc porównać np. do a,ab,bf....

Aby posortować wartości z tablicy pod kątem liczbowym, musimy samodzielnie napisać funkcję porównującą i przekazać ją jako argument do funkcji sort().

- - + + \ No newline at end of file diff --git a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802.html b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802.html index 72f5f8dcb..5c5fc9c32 100644 --- a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802.html +++ b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #025

🪲 Znajdź buga

function sum(a, b) {
return a + b
}

function sum(a, b, c) {
return a + b + c
}

console.log(sum(1, 2))

Chcemy przeciążyć funkcję, tj. zdefiniować kolejną funkcję o tej samej nazwie, ale z innymi parametrami.

Jaki będzie efekt wywołania powyższego kodu?

Co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

function sum(a, b, c) {
return a + b + c
}

function sum(a, b) {
return a + b
}

console.log(sum(1, 2))

W błędnym przykładzie, wywołanie funkcji sum(1, 2) zaloguje do konsoli wartość NaN.

JavaScript w przeciwieństwie do innych języków np. C++, Java, Swift, nie pozwala na przeciążanie funkcji, czyli deklarowania ich używając tej samej nazwy funkcji ale z innymi parametrami.

Co ciekawe TypeScript zezwala na definiowanie funkcji przeciążających.

O ile przeciążanie funkcji nie jest możliwe w JavaScript, to nadpisywanie ich już jak najbardziej tak.

Nie dostajemy więc błędu o zdefiniowaniu funkcji z nazwą, która już istnieje, bo jest to dozwolone.

Do konsoli zostaje zalogowane NaN (skrót od Not-A-Number), bo JavaScript nie może wykonywać operacji matematycznych na typach danych innych niż Number.

Nadpisując funkcję sum(), nadpisujemy ją deklarując w jej nowej wersji trzy parametry.

Wywołując sum() przekazujemy tylko dwa argumenty. Trzeci, brakujący, używany wewnątrz funkcji jako parametr pozostaje niezdefiniowany.

Operacja wewnątrz funkcji 1 + 2 + undefined zwraca więc NaN.

Aby rozwiązać problem, najprościej będzie nam nadpisać funkcję w odwrotnej kolejności, lub kompletnie pozbyć się deklaracji funkcji sum() z trzema parametrami.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugCode.html b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugCode.html index dc2ca5f52..b1a49a1b1 100644 --- a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugCode.html +++ b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function sum(a, b) {
return a + b
}

function sum(a, b, c) {
return a + b + c
}

console.log(sum(1, 2))
- - + + \ No newline at end of file diff --git a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugDescription.html b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugDescription.html index 893bacc96..d17b47dcd 100644 --- a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugDescription.html +++ b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy przeciążyć funkcję, tj. zdefiniować kolejną funkcję o tej samej nazwie, ale z innymi parametrami.

Jaki będzie efekt wywołania powyższego kodu?

Co zostanie zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/links.html b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/links.html index 5270d9510..cd184cc5b 100644 --- a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/links.html +++ b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionCode.html b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionCode.html index b9195993b..71a75cce0 100644 --- a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionCode.html +++ b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function sum(a, b, c) {
return a + b + c
}

function sum(a, b) {
return a + b
}

console.log(sum(1, 2))
- - + + \ No newline at end of file diff --git a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionDescription.html b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionDescription.html index 73f3c019b..ba614cd23 100644 --- a/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionDescription.html +++ b/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W błędnym przykładzie, wywołanie funkcji sum(1, 2) zaloguje do konsoli wartość NaN.

JavaScript w przeciwieństwie do innych języków np. C++, Java, Swift, nie pozwala na przeciążanie funkcji, czyli deklarowania ich używając tej samej nazwy funkcji ale z innymi parametrami.

Co ciekawe TypeScript zezwala na definiowanie funkcji przeciążających.

O ile przeciążanie funkcji nie jest możliwe w JavaScript, to nadpisywanie ich już jak najbardziej tak.

Nie dostajemy więc błędu o zdefiniowaniu funkcji z nazwą, która już istnieje, bo jest to dozwolone.

Do konsoli zostaje zalogowane NaN (skrót od Not-A-Number), bo JavaScript nie może wykonywać operacji matematycznych na typach danych innych niż Number.

Nadpisując funkcję sum(), nadpisujemy ją deklarując w jej nowej wersji trzy parametry.

Wywołując sum() przekazujemy tylko dwa argumenty. Trzeci, brakujący, używany wewnątrz funkcji jako parametr pozostaje niezdefiniowany.

Operacja wewnątrz funkcji 1 + 2 + undefined zwraca więc NaN.

Aby rozwiązać problem, najprościej będzie nam nadpisać funkcję w odwrotnej kolejności, lub kompletnie pozbyć się deklaracji funkcji sum() z trzema parametrami.

- - + + \ No newline at end of file diff --git a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd.html b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd.html index 9355e5ee7..228b01d78 100644 --- a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd.html +++ b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #061

🪲 Znajdź buga

const promise1 = new Promise((resolve) => {
resolve("foo")
})
const promise2 = new Promise((resolve) => {
resolve(promise1)
})

console.log(promise1)
console.log(promise2)

promise2.then((value) => {
console.log(value)
console.log(value === promise1)
})

Mamy 2 obietnice: promise1 rozwiązuje się zwracając wartość foo, a promise2 rozwiązuje się zwracając promise1.

Co zostanie zalogowane do konsoli w poszczególnych miejscach?

Czy rozwiązanie promise2 poprzez then zwróci w value tą samą obietnicę, która została przekazana w resolve()?

🧪 Rozwiązanie

const promise1 = new Promise((resolve) => {
resolve("foo")
})
const promise2 = new Promise((resolve) => {
resolve(promise1)
})

console.log(promise1) // Promise {}
console.log(promise2) // Promise {}

promise2.then((value) => {
console.log(value) // foo
console.log(value === promise1) // false
})

promise1 i promise2 to obiekty Promise, co jest wyraźnie logowane do konsoli w liniach 8 i 9.

promise2, mimo że w założeniu rozwiązuje się do obiektu promise1, finalnie zostaje rozwiązane do wartości foo.

resolve() spłaszcza przekazane obietnice jeśli takie zostają przekazane jako wartość rozwiązania obietnicy i rozwiązuje je wszystkie.

value po rozwiązaniu promise2, będzie więc wartością przekazaną w resolve() w promise1.

value === promise1 zwróci więc fałsz, bo value to foo, a nie obiekt obietnicy promise1.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugCode.html b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugCode.html index c9d16a2e1..426e1021f 100644 --- a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugCode.html +++ b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const promise1 = new Promise((resolve) => {
resolve("foo")
})
const promise2 = new Promise((resolve) => {
resolve(promise1)
})

console.log(promise1)
console.log(promise2)

promise2.then((value) => {
console.log(value)
console.log(value === promise1)
})
- - + + \ No newline at end of file diff --git a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugDescription.html b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugDescription.html index 36b3d57df..de3897c46 100644 --- a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugDescription.html +++ b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Mamy 2 obietnice: promise1 rozwiązuje się zwracając wartość foo, a promise2 rozwiązuje się zwracając promise1.

Co zostanie zalogowane do konsoli w poszczególnych miejscach?

Czy rozwiązanie promise2 poprzez then zwróci w value tą samą obietnicę, która została przekazana w resolve()?

- - + + \ No newline at end of file diff --git a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/links.html b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/links.html index 79f5ff6d5..7d1784daf 100644 --- a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/links.html +++ b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionCode.html b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionCode.html index 5d268fbaa..08ed54401 100644 --- a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionCode.html +++ b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const promise1 = new Promise((resolve) => {
resolve("foo")
})
const promise2 = new Promise((resolve) => {
resolve(promise1)
})

console.log(promise1) // Promise {}
console.log(promise2) // Promise {}

promise2.then((value) => {
console.log(value) // foo
console.log(value === promise1) // false
})
- - + + \ No newline at end of file diff --git a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionDescription.html b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionDescription.html index 98f58ed62..d17c387d4 100644 --- a/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionDescription.html +++ b/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

promise1 i promise2 to obiekty Promise, co jest wyraźnie logowane do konsoli w liniach 8 i 9.

promise2, mimo że w założeniu rozwiązuje się do obiektu promise1, finalnie zostaje rozwiązane do wartości foo.

resolve() spłaszcza przekazane obietnice jeśli takie zostają przekazane jako wartość rozwiązania obietnicy i rozwiązuje je wszystkie.

value po rozwiązaniu promise2, będzie więc wartością przekazaną w resolve() w promise1.

value === promise1 zwróci więc fałsz, bo value to foo, a nie obiekt obietnicy promise1.

- - + + \ No newline at end of file diff --git a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f.html b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f.html index 2523864fa..6a90e12f2 100644 --- a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f.html +++ b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #041

🪲 Znajdź buga

const str1 = "Hello World"
const str2 = `${"Hello World"}`
const str3 = String("Hello World")
const str4 = new String("Hello World")

console.log(str1 === "Hello World")
console.log(str2 === "Hello World")
console.log(str3 === "Hello World")
console.log(str4 === "Hello World")

Czy wszystkie porównania zalogują do konsoli wartość true?

🧪 Rozwiązanie

const str1 = "Hello World"
const str2 = `${"Hello World"}`
const str3 = String("Hello World")
const str4 = new String("Hello World")

console.log(str1 === "Hello World")
console.log(str2 === "Hello World")
console.log(str3 === "Hello World")
console.log(str4.toString() === "Hello World")

W przykładzie z błędem, do konsoli zostanie zalogowana wartość false dla ostatniego porównania z str4.

Użycie operatora new tworzy nową instancję obiektu. Zwracana wartość jest więc obiektem, a nie typem prymitywnym string.

Operator new służy do stworzenia instancji obiektu w oparciu o konstruktor. W języku JavaScript konstruktorem może być funkcja o nazwie constructor, znajdująca się wewnątrz definicji klasy (class), ale nie musi. Może to być też samodzielna funkcja o dowolnej nazwie.

Ścisłe porównanie obiektu z wartością prymitywną prowadzi więc do zwrócenia fałszu.

Aby w czwartym porównaniu uzyskać true musimy na utworzonym obiekcie String wywołać metodę toString(), która wyciągnie z obiektu wartość prymitywną "Hello World" typu string.

Sytuacja z odrębnym zachowaniem się funkcji w zależności od tego czy została ona wywołana z, czy bez operatora new wygląda podobnie również w przypadku innych funkcji, w tym tych predefiniowanych jak String, Number, czy Boolean.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugCode.html b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugCode.html index b043ed5f0..63352bf40 100644 --- a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugCode.html +++ b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const str1 = "Hello World"
const str2 = `${"Hello World"}`
const str3 = String("Hello World")
const str4 = new String("Hello World")

console.log(str1 === "Hello World")
console.log(str2 === "Hello World")
console.log(str3 === "Hello World")
console.log(str4 === "Hello World")
- - + + \ No newline at end of file diff --git a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugDescription.html b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugDescription.html index 2815b484d..dfea7154d 100644 --- a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugDescription.html +++ b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy wszystkie porównania zalogują do konsoli wartość true?

- - + + \ No newline at end of file diff --git a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/links.html b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/links.html index 412781f46..9bf24f222 100644 --- a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/links.html +++ b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionCode.html b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionCode.html index 9212a7390..df73ad042 100644 --- a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionCode.html +++ b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const str1 = "Hello World"
const str2 = `${"Hello World"}`
const str3 = String("Hello World")
const str4 = new String("Hello World")

console.log(str1 === "Hello World")
console.log(str2 === "Hello World")
console.log(str3 === "Hello World")
console.log(str4.toString() === "Hello World")
- - + + \ No newline at end of file diff --git a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionDescription.html b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionDescription.html index 5bfce1b85..7bcacf9d2 100644 --- a/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionDescription.html +++ b/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, do konsoli zostanie zalogowana wartość false dla ostatniego porównania z str4.

Użycie operatora new tworzy nową instancję obiektu. Zwracana wartość jest więc obiektem, a nie typem prymitywnym string.

Operator new służy do stworzenia instancji obiektu w oparciu o konstruktor. W języku JavaScript konstruktorem może być funkcja o nazwie constructor, znajdująca się wewnątrz definicji klasy (class), ale nie musi. Może to być też samodzielna funkcja o dowolnej nazwie.

Ścisłe porównanie obiektu z wartością prymitywną prowadzi więc do zwrócenia fałszu.

Aby w czwartym porównaniu uzyskać true musimy na utworzonym obiekcie String wywołać metodę toString(), która wyciągnie z obiektu wartość prymitywną "Hello World" typu string.

Sytuacja z odrębnym zachowaniem się funkcji w zależności od tego czy została ona wywołana z, czy bez operatora new wygląda podobnie również w przypadku innych funkcji, w tym tych predefiniowanych jak String, Number, czy Boolean.

- - + + \ No newline at end of file diff --git a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7.html b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7.html index 33c204981..f6d9efff7 100644 --- a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7.html +++ b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #097

🪲 Znajdź buga

const sym1 = Symbol()
const sym2 = Symbol()

const obj1 = {}
const obj2 = {}

console.log(sym1 === sym2)
console.log(sym1 === sym1)

console.log(obj1 === obj2)
console.log(obj1 === obj1)

const test = {}

test[sym1] = "Foo"
test[sym2] = "Bar"

test[obj1] = "Baz"
test[obj2] = "Qux"

console.log(test[sym1])
console.log(test[sym2])

console.log(test[obj1])
console.log(test[obj2])

console.log(test)

Jaki wartości zostaną zalogowane do konsoli?

Czy są jakieś różnice pomiędzy użyciem obiektu, a symbolu jako nazwy własności innego obiektu?

🧪 Rozwiązanie

const sym1 = Symbol()
const sym2 = Symbol()

const obj1 = {}
const obj2 = {}

console.log(sym1 === sym2) // false
console.log(sym1 === sym1) // true

console.log(obj1 === obj2) // false
console.log(obj1 === obj1) // true

const test = {}

test[sym1] = "Foo"
test[sym2] = "Bar"

test[obj1] = "Baz"
test[obj2] = "Qux"

console.log(test[sym1]) // "Foo"
console.log(test[sym2]) // "Bar"

console.log(test[obj1]) // "Qux"
console.log(test[obj2]) // "Qux"

console.log(test) // {[object Object]: "Qux"}

Porównywanie ze sobą symboli oraz obiektów, które zostały zdefiniowane niezależnie, da nam ten same efekt - fałsz.

Jedynie porównywanie tych samych stałych, które przechowują dany obiekt lub symbol zwróci prawdę.

Wówczas porównywane będą rzeczywiście te same obiekty/symbole, przechowywane w pamięci pod adresem na który wskazuje dana stała.

Na tym etapie podobieństwa obiektów i symboli z grubsza się kończą.

Symbole z natury służą do utworzenia unikalnej wartości.

Nie są też konwertowane do ciągu znaków w sytuacjach wymuszających tego typu operację.

test[sym1] i test[sym2] zalogują do konsoli "Foo" i "Bar".

Co ważne, test[Symbol()] zwróci undefined, bo jak już wcześniej ustaliliśmy, każdy nowo utworzony symbol jest unikalny.

Jednocześnie własności zdefiniowane za pomocą symboli nie będą widoczne po zalogowania do konsoli obiektu test (będą prywatne).

Nazwy własności w test[obj1] i test[obj2] ulegną konwersji do ciągu znaków "[object Object]".

Istotne jest aby omyłkowo nie zinterpretować takiego zapisu jako tablicy z elementami object i Object.

"[object Object]" to zwykły ciąg znaków powstający w wyniku konwersji ({}).toString()

Ten sam ciąg znaków użyty dwukrotnie jako nazwa własności obiektu test powoduje, że każde kolejne jego użycie nadpisuje poprzednio zdefiniowaną własność o tej samej nazwie.

test[obj1] i test[obj2] logują do konsoli "Qux" bo taka wartość została przypisana jako ostatnia dla test["[object Object]"].

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugCode.html b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugCode.html index fac6cf401..5439a9187 100644 --- a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugCode.html +++ b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const sym1 = Symbol()
const sym2 = Symbol()

const obj1 = {}
const obj2 = {}

console.log(sym1 === sym2)
console.log(sym1 === sym1)

console.log(obj1 === obj2)
console.log(obj1 === obj1)

const test = {}

test[sym1] = "Foo"
test[sym2] = "Bar"

test[obj1] = "Baz"
test[obj2] = "Qux"

console.log(test[sym1])
console.log(test[sym2])

console.log(test[obj1])
console.log(test[obj2])

console.log(test)
- - + + \ No newline at end of file diff --git a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugDescription.html b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugDescription.html index a364de224..4d14e7b6d 100644 --- a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugDescription.html +++ b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jaki wartości zostaną zalogowane do konsoli?

Czy są jakieś różnice pomiędzy użyciem obiektu, a symbolu jako nazwy własności innego obiektu?

- - + + \ No newline at end of file diff --git a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/links.html b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/links.html index b3563496c..300165556 100644 --- a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/links.html +++ b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionCode.html b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionCode.html index 6529efbe3..09e590ae6 100644 --- a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionCode.html +++ b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const sym1 = Symbol()
const sym2 = Symbol()

const obj1 = {}
const obj2 = {}

console.log(sym1 === sym2) // false
console.log(sym1 === sym1) // true

console.log(obj1 === obj2) // false
console.log(obj1 === obj1) // true

const test = {}

test[sym1] = "Foo"
test[sym2] = "Bar"

test[obj1] = "Baz"
test[obj2] = "Qux"

console.log(test[sym1]) // "Foo"
console.log(test[sym2]) // "Bar"

console.log(test[obj1]) // "Qux"
console.log(test[obj2]) // "Qux"

console.log(test) // {[object Object]: "Qux"}
- - + + \ No newline at end of file diff --git a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionDescription.html b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionDescription.html index c81bb4c8d..bf2e29532 100644 --- a/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionDescription.html +++ b/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Porównywanie ze sobą symboli oraz obiektów, które zostały zdefiniowane niezależnie, da nam ten same efekt - fałsz.

Jedynie porównywanie tych samych stałych, które przechowują dany obiekt lub symbol zwróci prawdę.

Wówczas porównywane będą rzeczywiście te same obiekty/symbole, przechowywane w pamięci pod adresem na który wskazuje dana stała.

Na tym etapie podobieństwa obiektów i symboli z grubsza się kończą.

Symbole z natury służą do utworzenia unikalnej wartości.

Nie są też konwertowane do ciągu znaków w sytuacjach wymuszających tego typu operację.

test[sym1] i test[sym2] zalogują do konsoli "Foo" i "Bar".

Co ważne, test[Symbol()] zwróci undefined, bo jak już wcześniej ustaliliśmy, każdy nowo utworzony symbol jest unikalny.

Jednocześnie własności zdefiniowane za pomocą symboli nie będą widoczne po zalogowania do konsoli obiektu test (będą prywatne).

Nazwy własności w test[obj1] i test[obj2] ulegną konwersji do ciągu znaków "[object Object]".

Istotne jest aby omyłkowo nie zinterpretować takiego zapisu jako tablicy z elementami object i Object.

"[object Object]" to zwykły ciąg znaków powstający w wyniku konwersji ({}).toString()

Ten sam ciąg znaków użyty dwukrotnie jako nazwa własności obiektu test powoduje, że każde kolejne jego użycie nadpisuje poprzednio zdefiniowaną własność o tej samej nazwie.

test[obj1] i test[obj2] logują do konsoli "Qux" bo taka wartość została przypisana jako ostatnia dla test["[object Object]"].

- - + + \ No newline at end of file diff --git a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696.html b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696.html index 134b06b50..894a2def3 100644 --- a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696.html +++ b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #009

🪲 Znajdź buga

function reducer(accumulator, currentValue) {
currentValue += 1

return accumulator + currentValue
}

const numbers = [1, 2, 3]
const sum = numbers.reduce(reducer)

console.log(sum)

Chcemy zsumować wszystkie elementy z tablicy numbers, jednocześnie zwiększając każdą z wartości tablicy o 1.

Jaka wartość zostanie zalogowana do konsoli jako sum?

🧪 Rozwiązanie

function reducer(accumulator, currentValue) {
currentValue += 1

return accumulator + currentValue
}

const numbers = [1, 2, 3]
const sum = numbers.reduce(reducer, 0)

console.log(sum)

W przykładzie z błędem, wartość zwrócona z sum wyniesie 8 zamiast 9.

Działanie metody reduce() polega na zredukowaniu wielu wartości z tablicy (array) do jednej, zgodnie z zasadami zdefiniowanymi w funkcji callback, którą w naszym przykładzie nazwaliśmy reducer.

Pułapka myślowa w przykładzie, polega na tym, że możemy błędnie założyć, że reduce() wywoła funkcję reducer tyle razy, ile elementów zawiera tablica numbers.

W rzeczywistości jednak tak się nie dzieje.

Gdy do metody reduce(), oprócz funkcji callback, nie przekażemy drugiego argumentu, definiującego wartość początkową reduktora, to reduce() użyje jako wartości początkowej, pierwszej wartości z tablicy, pomijając tym samym pierwsze wywołanie callbacku.

reduce() ustawi więc wartość początkową na 1, a następnie wykona w pętli działania kumulujące dla kolejnych 2 elementów.

Można to zapisać w formie równania 1 + (2 + 1) + (3 + 1).

Aby naprawić ten problem, musimy w metodzie reduce() przekazać drugi argument, który będzie wartością początkową. W naszym przykładzie, gdy zależy nam na zsumowaniu wartości, powinniśmy przekazać tam po prostu 0.

Z wyraźnym ustawieniem wartości początkowej, będziemy mieli do czynienia z równaniem 0 + (1 + 1) + (2 + 1) + (3 + 1).

W takim przypadku funkcja reducer() zostanie wywołana trzykrotnie.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugCode.html b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugCode.html index 101ab23cd..e7c6274b5 100644 --- a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugCode.html +++ b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function reducer(accumulator, currentValue) {
currentValue += 1

return accumulator + currentValue
}

const numbers = [1, 2, 3]
const sum = numbers.reduce(reducer)

console.log(sum)
- - + + \ No newline at end of file diff --git a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugDescription.html b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugDescription.html index f575f7b61..2e078d9c7 100644 --- a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugDescription.html +++ b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy zsumować wszystkie elementy z tablicy numbers, jednocześnie zwiększając każdą z wartości tablicy o 1.

Jaka wartość zostanie zalogowana do konsoli jako sum?

- - + + \ No newline at end of file diff --git a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/links.html b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/links.html index 501ced9f2..12bfdd157 100644 --- a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/links.html +++ b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionCode.html b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionCode.html index 642a1dd85..79cdb4693 100644 --- a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionCode.html +++ b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function reducer(accumulator, currentValue) {
currentValue += 1

return accumulator + currentValue
}

const numbers = [1, 2, 3]
const sum = numbers.reduce(reducer, 0)

console.log(sum)
- - + + \ No newline at end of file diff --git a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionDescription.html b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionDescription.html index b0e3cda0a..ef3e655ce 100644 --- a/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionDescription.html +++ b/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, wartość zwrócona z sum wyniesie 8 zamiast 9.

Działanie metody reduce() polega na zredukowaniu wielu wartości z tablicy (array) do jednej, zgodnie z zasadami zdefiniowanymi w funkcji callback, którą w naszym przykładzie nazwaliśmy reducer.

Pułapka myślowa w przykładzie, polega na tym, że możemy błędnie założyć, że reduce() wywoła funkcję reducer tyle razy, ile elementów zawiera tablica numbers.

W rzeczywistości jednak tak się nie dzieje.

Gdy do metody reduce(), oprócz funkcji callback, nie przekażemy drugiego argumentu, definiującego wartość początkową reduktora, to reduce() użyje jako wartości początkowej, pierwszej wartości z tablicy, pomijając tym samym pierwsze wywołanie callbacku.

reduce() ustawi więc wartość początkową na 1, a następnie wykona w pętli działania kumulujące dla kolejnych 2 elementów.

Można to zapisać w formie równania 1 + (2 + 1) + (3 + 1).

Aby naprawić ten problem, musimy w metodzie reduce() przekazać drugi argument, który będzie wartością początkową. W naszym przykładzie, gdy zależy nam na zsumowaniu wartości, powinniśmy przekazać tam po prostu 0.

Z wyraźnym ustawieniem wartości początkowej, będziemy mieli do czynienia z równaniem 0 + (1 + 1) + (2 + 1) + (3 + 1).

W takim przypadku funkcja reducer() zostanie wywołana trzykrotnie.

- - + + \ No newline at end of file diff --git a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b.html b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b.html index fdc646350..57985e568 100644 --- a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b.html +++ b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #081

🪲 Znajdź buga

if (false) {
console.log("First")
}

if (Boolean(false)) {
console.log("Second")
}

if (new Boolean(false)) {
console.log("Third")
}

if (!!false) {
console.log("Fourth")
}

Czy któreś z instrukcji warunkowych zostaną wykonane i zalogują swoją wartość do konsoli?

🧪 Rozwiązanie

if (false) {
console.log("First")
}

if (Boolean(false)) {
console.log("Second")
}

if (new Boolean(false)) {
console.log("Third")
}

if (!!false) {
console.log("Fourth")
}

Instrukcja warunkowa if (new Boolean(false)) zostanie wykonana i do konsoli zostanie zalogowana wartość "Third".

Pozostałe instrukcje nie wykonają się.

if (false) powinno być oczywiste. Instrukcja nie wykonuje się, bo przekazany warunek jest fałszywy.

Funkcja Boolean zwraca wartość logiczną true lub false w zależności od przekazanego argumentu i jego ewentualnej konwersji na wartość logiczną, jeśli jest innego typu.

Boolean(false) zwraca wartość false więc tutaj mamy tą samą sytuację co w pierwszej instrukcji.

new Boolean(false) może wydawać się ekwiwalentem Boolean(false), ale użycie słowa kluczowego new powoduje utworzenie nowego obiektu, traktując funkcję Boolean() jako konstruktor obiektu,

new Boolean() zwraca więc obiekt, a nie wartość logiczną.

Obiekty z natury są wartościami prawdziwymi (nie ma znaczenia, że wprowadziliśmy do konstruktora wartość false), więc trzecia instrukcja warunkowa zostaje wykonana.

Czwarta i ostatnia instrukcja nie zostaje wykonana bo podwójny wykrzyknij działa tak samo, jak funkcja Boolean().

Z !false generowana jest wartość przeciwna true, a następnie z !true, wartość przeciwna, czyli false.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugCode.html b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugCode.html index 701c2ca24..55126a806 100644 --- a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugCode.html +++ b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
if (false) {
console.log("First")
}

if (Boolean(false)) {
console.log("Second")
}

if (new Boolean(false)) {
console.log("Third")
}

if (!!false) {
console.log("Fourth")
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugDescription.html b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugDescription.html index 63253f711..6c5fda254 100644 --- a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugDescription.html +++ b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy któreś z instrukcji warunkowych zostaną wykonane i zalogują swoją wartość do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/links.html b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/links.html index dbe12bacd..2f1ac2838 100644 --- a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/links.html +++ b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionCode.html b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionCode.html index e160f0877..a5e8db519 100644 --- a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionCode.html +++ b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
if (false) {
console.log("First")
}

if (Boolean(false)) {
console.log("Second")
}

if (new Boolean(false)) {
console.log("Third")
}

if (!!false) {
console.log("Fourth")
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionDescription.html b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionDescription.html index a84be40fc..0bb961395 100644 --- a/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionDescription.html +++ b/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Instrukcja warunkowa if (new Boolean(false)) zostanie wykonana i do konsoli zostanie zalogowana wartość "Third".

Pozostałe instrukcje nie wykonają się.

if (false) powinno być oczywiste. Instrukcja nie wykonuje się, bo przekazany warunek jest fałszywy.

Funkcja Boolean zwraca wartość logiczną true lub false w zależności od przekazanego argumentu i jego ewentualnej konwersji na wartość logiczną, jeśli jest innego typu.

Boolean(false) zwraca wartość false więc tutaj mamy tą samą sytuację co w pierwszej instrukcji.

new Boolean(false) może wydawać się ekwiwalentem Boolean(false), ale użycie słowa kluczowego new powoduje utworzenie nowego obiektu, traktując funkcję Boolean() jako konstruktor obiektu,

new Boolean() zwraca więc obiekt, a nie wartość logiczną.

Obiekty z natury są wartościami prawdziwymi (nie ma znaczenia, że wprowadziliśmy do konstruktora wartość false), więc trzecia instrukcja warunkowa zostaje wykonana.

Czwarta i ostatnia instrukcja nie zostaje wykonana bo podwójny wykrzyknij działa tak samo, jak funkcja Boolean().

Z !false generowana jest wartość przeciwna true, a następnie z !true, wartość przeciwna, czyli false.

- - + + \ No newline at end of file diff --git a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776.html b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776.html index 5fc715b1b..04c330064 100644 --- a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776.html +++ b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #067

🪲 Znajdź buga

console.log("".split(" "))
console.log("".split(""))

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

console.log("".split(" ")) // [""]
console.log("".split("")) // []

Metoda split() dzieli ciąg znaków formując tablicę z fragmentami ciągów znaków.

Podział zostaje wykonany na podstawie wartości rozdzielacza, przekazanego jako argument metody.

Przykładowo, "a b c".split(" "), podzieli ciąg znaków "a b c" używając białego znaku spacji jako rozdzielacza.

Uformowana zostanie tablica ["a", "b", "c"].

"".split(" ") zwraca tablicę z jednym elementem pustego ciągu znaków [""].

Mimo, że nie ma czego dzielić (pusty ciąg znaków), przekazanie rozdzielacza powoduje, że następuje podział, którego efektem jest pusty ciąg znaków.

W przypadku próby podziału pustego ciągu znaków, element rozdzielacza jest nieistotny, zawsze wygeneruje tablicę z jednym elementem pustego ciągi znaków.

"".split("?"), "".split("asd"), "".split("-"), bez znaczenia, zawsze zwróci [""].

Z kolei "".split("") to próba podzielenia pustego ciągu znaków za pomocą pustego znaku rozdzielacza.

Jest to jedyna sytuacja, w której w efekcie działania metody split(), zostaje zwrócona pusta tablica.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugCode.html b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugCode.html index 9365a4060..5981fae82 100644 --- a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugCode.html +++ b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log("".split(" "))
console.log("".split(""))
- - + + \ No newline at end of file diff --git a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugDescription.html b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugDescription.html index c35991524..95b83cddf 100644 --- a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugDescription.html +++ b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/links.html b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/links.html index 20600b816..81d4f98b6 100644 --- a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/links.html +++ b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionCode.html b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionCode.html index 3f9680d88..75f23796a 100644 --- a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionCode.html +++ b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log("".split(" ")) // [""]
console.log("".split("")) // []
- - + + \ No newline at end of file diff --git a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionDescription.html b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionDescription.html index 49c277b99..97d61cba7 100644 --- a/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionDescription.html +++ b/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Metoda split() dzieli ciąg znaków formując tablicę z fragmentami ciągów znaków.

Podział zostaje wykonany na podstawie wartości rozdzielacza, przekazanego jako argument metody.

Przykładowo, "a b c".split(" "), podzieli ciąg znaków "a b c" używając białego znaku spacji jako rozdzielacza.

Uformowana zostanie tablica ["a", "b", "c"].

"".split(" ") zwraca tablicę z jednym elementem pustego ciągu znaków [""].

Mimo, że nie ma czego dzielić (pusty ciąg znaków), przekazanie rozdzielacza powoduje, że następuje podział, którego efektem jest pusty ciąg znaków.

W przypadku próby podziału pustego ciągu znaków, element rozdzielacza jest nieistotny, zawsze wygeneruje tablicę z jednym elementem pustego ciągi znaków.

"".split("?"), "".split("asd"), "".split("-"), bez znaczenia, zawsze zwróci [""].

Z kolei "".split("") to próba podzielenia pustego ciągu znaków za pomocą pustego znaku rozdzielacza.

Jest to jedyna sytuacja, w której w efekcie działania metody split(), zostaje zwrócona pusta tablica.

- - + + \ No newline at end of file diff --git a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a.html b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a.html index 6d4020bf3..e15b5921e 100644 --- a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a.html +++ b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #089

🪲 Znajdź buga

function* iterate(array) {
let i = 0
while (array.length) {
yield array[i++]
}
}

const array = [1, 2, 3]

console.log(iterate(array).next().value)
console.log(iterate(array).next().value)
console.log(iterate(array).next().value)

Chcemy stworzyć generator, który przy wywołaniu będzie zwracał nam kolejne wartości z tablicy.

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

function* iterate(array) {
let i = 0
while (array.length) {
yield array[i++]
}
}

const array = [1, 2, 3]

const numbersIterator = iterate(array)
console.log(numbersIterator.next().value)
console.log(numbersIterator.next().value)
console.log(numbersIterator.next().value)

W błędnym przykładzie wszystkie trzy wywołania zalogują do konsoli wartość 1.

Funkcja generatora (z gwiazdką *) zwraca obiekt generatora, który możemy iterować wywołując metodę next().

Wywołując funkcję iterate(array), zwrócony zostaje nowy obiekt generatora.

Wywołując wielokrotnie iterate(array).next() za każdym razem dostajemy nowy obiekt, więc wywoływanie na nim metody next() zawsze zwraca tylko pierwszą iterację z tablicy.

Aby to naprawić, musimy zwracany z funkcji obiekt generatora przypisać do stałej (lub zmiennej) i dopiero wtedy wywoływać metody next() na tym obiekcie.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugCode.html b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugCode.html index 779499da9..536d9f2a8 100644 --- a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugCode.html +++ b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function* iterate(array) {
let i = 0
while (array.length) {
yield array[i++]
}
}

const array = [1, 2, 3]

console.log(iterate(array).next().value)
console.log(iterate(array).next().value)
console.log(iterate(array).next().value)
- - + + \ No newline at end of file diff --git a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugDescription.html b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugDescription.html index fd3702981..14365faa4 100644 --- a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugDescription.html +++ b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy stworzyć generator, który przy wywołaniu będzie zwracał nam kolejne wartości z tablicy.

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/links.html b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/links.html index 1e1a0f96b..2cecd15c9 100644 --- a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/links.html +++ b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionCode.html b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionCode.html index 44b0c1ad6..2541ec6ed 100644 --- a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionCode.html +++ b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function* iterate(array) {
let i = 0
while (array.length) {
yield array[i++]
}
}

const array = [1, 2, 3]

const numbersIterator = iterate(array)
console.log(numbersIterator.next().value)
console.log(numbersIterator.next().value)
console.log(numbersIterator.next().value)
- - + + \ No newline at end of file diff --git a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionDescription.html b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionDescription.html index fd1f966bb..f39970c89 100644 --- a/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionDescription.html +++ b/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W błędnym przykładzie wszystkie trzy wywołania zalogują do konsoli wartość 1.

Funkcja generatora (z gwiazdką *) zwraca obiekt generatora, który możemy iterować wywołując metodę next().

Wywołując funkcję iterate(array), zwrócony zostaje nowy obiekt generatora.

Wywołując wielokrotnie iterate(array).next() za każdym razem dostajemy nowy obiekt, więc wywoływanie na nim metody next() zawsze zwraca tylko pierwszą iterację z tablicy.

Aby to naprawić, musimy zwracany z funkcji obiekt generatora przypisać do stałej (lub zmiennej) i dopiero wtedy wywoływać metody next() na tym obiekcie.

- - + + \ No newline at end of file diff --git a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295.html b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295.html index 6137c02ac..d6d770219 100644 --- a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295.html +++ b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #060

🪲 Znajdź buga

function js(...params) {
return JSON.stringify(...params)
}

console.log(js(true))
console.log(js(false))
console.log(js(null))

console.log(js(NaN))
console.log(js(Infinity))

console.log(js([1, 2, 3]))
console.log(js(new Set([1, 2, 3])))

console.log(js(undefined))
console.log(js([undefined]))
console.log(js({ prop: undefined }))

console.log(js(() => "foo"))
console.log(js([() => "foo"]))
console.log(js({ prop: () => "foo" }))

console.log(js(Symbol("foo")))
console.log(js([Symbol("foo")]))
console.log(js({ prop: Symbol("foo") }))

Dla jakich typów danych nie możemy polegać na konwersji z użyciem JSON.stringify()?

Co zostanie zalogowane do konsoli w powyższych przykładach?

🧪 Rozwiązanie

function js(...params) {
return JSON.stringify(...params)
}

console.log(js(true)) // true
console.log(js(false)) // false
console.log(js(null)) // null

console.log(js(NaN)) // null
console.log(js(Infinity)) // null

console.log(js([1, 2, 3])) // [1,2,3]
console.log(js(new Set([1, 2, 3]))) // {}

console.log(js(undefined)) // undefined
console.log(js([undefined])) // [null]
console.log(js({ prop: undefined })) // {}

console.log(js(() => "foo")) // undefined
console.log(js([() => "foo"])) // [null]
console.log(js({ prop: () => "foo" })) // {}

console.log(js(Symbol("foo"))) // undefined
console.log(js([Symbol("foo")])) // [null]
console.log(js({ prop: Symbol("foo") })) // {}

Do formatu JSON możemy skonwertować jedynie niektóre typy danych.

Ciągi znaków i wartości liczbowe nie stanowią problemu.

Podobnie wartości logiczne, true/false.

Wartość null również zostanie poprawnie skonwertowana.

Do nulla skonwertowane zostaną także wartości NaN i Infinity.

Tablice [] zostaną poprawnie skonwertowane do formatu JSON, ale kolekcje Map i Set zostaną skonwertowane do pustego obiektu {}.

Funkcje, symbole oraz wartość undefined, konwertują się różnie, w zależności od kontekstu wystąpienia.

Samodzielne wystąpienia zamieniane są na undefined. Jako elementy tablicy, stają się nullem, a jako elementy obiektu, zostają pominięte.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugCode.html b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugCode.html index 4de2b37ba..af53afbf3 100644 --- a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugCode.html +++ b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function js(...params) {
return JSON.stringify(...params)
}

console.log(js(true))
console.log(js(false))
console.log(js(null))

console.log(js(NaN))
console.log(js(Infinity))

console.log(js([1, 2, 3]))
console.log(js(new Set([1, 2, 3])))

console.log(js(undefined))
console.log(js([undefined]))
console.log(js({ prop: undefined }))

console.log(js(() => "foo"))
console.log(js([() => "foo"]))
console.log(js({ prop: () => "foo" }))

console.log(js(Symbol("foo")))
console.log(js([Symbol("foo")]))
console.log(js({ prop: Symbol("foo") }))
- - + + \ No newline at end of file diff --git a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugDescription.html b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugDescription.html index 65fab2080..12c64927a 100644 --- a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugDescription.html +++ b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Dla jakich typów danych nie możemy polegać na konwersji z użyciem JSON.stringify()?

Co zostanie zalogowane do konsoli w powyższych przykładach?

- - + + \ No newline at end of file diff --git a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/links.html b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/links.html index 3f44d9797..dd336da9f 100644 --- a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/links.html +++ b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionCode.html b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionCode.html index e73042ed6..41991bfa5 100644 --- a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionCode.html +++ b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function js(...params) {
return JSON.stringify(...params)
}

console.log(js(true)) // true
console.log(js(false)) // false
console.log(js(null)) // null

console.log(js(NaN)) // null
console.log(js(Infinity)) // null

console.log(js([1, 2, 3])) // [1,2,3]
console.log(js(new Set([1, 2, 3]))) // {}

console.log(js(undefined)) // undefined
console.log(js([undefined])) // [null]
console.log(js({ prop: undefined })) // {}

console.log(js(() => "foo")) // undefined
console.log(js([() => "foo"])) // [null]
console.log(js({ prop: () => "foo" })) // {}

console.log(js(Symbol("foo"))) // undefined
console.log(js([Symbol("foo")])) // [null]
console.log(js({ prop: Symbol("foo") })) // {}
- - + + \ No newline at end of file diff --git a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionDescription.html b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionDescription.html index e3a942a1f..7839b4b3e 100644 --- a/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionDescription.html +++ b/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Do formatu JSON możemy skonwertować jedynie niektóre typy danych.

Ciągi znaków i wartości liczbowe nie stanowią problemu.

Podobnie wartości logiczne, true/false.

Wartość null również zostanie poprawnie skonwertowana.

Do nulla skonwertowane zostaną także wartości NaN i Infinity.

Tablice [] zostaną poprawnie skonwertowane do formatu JSON, ale kolekcje Map i Set zostaną skonwertowane do pustego obiektu {}.

Funkcje, symbole oraz wartość undefined, konwertują się różnie, w zależności od kontekstu wystąpienia.

Samodzielne wystąpienia zamieniane są na undefined. Jako elementy tablicy, stają się nullem, a jako elementy obiektu, zostają pominięte.

- - + + \ No newline at end of file diff --git a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f.html b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f.html index dae778d7f..9b024d73c 100644 --- a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f.html +++ b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #013

🪲 Znajdź buga

document.body.innerHTML = `
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
`

const lis = document.querySelectorAll("li")

lis.map((li) => {
const updatedText =
li
.innerText
.replace("Item", "Element")

li.innerText = updatedText
})

W dokumencie mamy listę <ul> z elementami <li>. Chcemy zaktualizować tekst w tych elementach, zamieniając wyrazy Item na Element.

Gdzie w przedstawionym przykładzie wkradł się błąd?

🧪 Rozwiązanie

document.body.innerHTML = `
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
`

const lis = document.querySelectorAll("li")

lis.forEach((li) => {
const updatedText = li.innerText.replace("Item", "Element")

li.innerText = updatedText
})

Próbując wykonać kod z przykładu z błędem, ujrzymy w konsoli Error: lis.map is not a function.

Do stałej lis chcieliśmy przypisać listę z elementami li i do tego momentu kod wykonywany jest poprawnie.

Jednak document.querySelector() nie tworzy kolekcji w formie Array, a jako NodeList.

Obiekt NodeList w przeciwieństwie do obiektu Array nie zawiera metody map, więc wyrzucany jest błąd.

NodeList zawiera jednak metodę forEach, której możemy użyć zamiast map.

Użycie map było tutaj bezzasadne. Nie potrzebujemy wygenerować nowej tablicy z elementami na podstawie istniejącej.

Jeśli jednak mielibyśmy faktyczną potrzebę użycia map na obiekcie NodeList to musimy go skonwertować do Array, najprościej za pomocą konstrukcji Array.from(lis).

Po takiej konwersji, lista węzłów (node'ów) będzie już obiektem Array razem ze wszystkimi dostępnymi w tym obiekcie metodami (jak np. map).

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugCode.html b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugCode.html index 52114b3d9..b72da6682 100644 --- a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugCode.html +++ b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
document.body.innerHTML = `
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
`

const lis = document.querySelectorAll("li")

lis.map((li) => {
const updatedText =
li
.innerText
.replace("Item", "Element")

li.innerText = updatedText
})
- - + + \ No newline at end of file diff --git a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugDescription.html b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugDescription.html index a312f7c18..081101883 100644 --- a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugDescription.html +++ b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W dokumencie mamy listę <ul> z elementami <li>. Chcemy zaktualizować tekst w tych elementach, zamieniając wyrazy Item na Element.

Gdzie w przedstawionym przykładzie wkradł się błąd?

- - + + \ No newline at end of file diff --git a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/links.html b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/links.html index 49aaad475..cfc53e18d 100644 --- a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/links.html +++ b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionCode.html b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionCode.html index 0df059d83..7eeb0f9e5 100644 --- a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionCode.html +++ b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
document.body.innerHTML = `
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
`

const lis = document.querySelectorAll("li")

lis.forEach((li) => {
const updatedText = li.innerText.replace("Item", "Element")

li.innerText = updatedText
})
- - + + \ No newline at end of file diff --git a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionDescription.html b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionDescription.html index b0fae90cd..6c78603d8 100644 --- a/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionDescription.html +++ b/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Próbując wykonać kod z przykładu z błędem, ujrzymy w konsoli Error: lis.map is not a function.

Do stałej lis chcieliśmy przypisać listę z elementami li i do tego momentu kod wykonywany jest poprawnie.

Jednak document.querySelector() nie tworzy kolekcji w formie Array, a jako NodeList.

Obiekt NodeList w przeciwieństwie do obiektu Array nie zawiera metody map, więc wyrzucany jest błąd.

NodeList zawiera jednak metodę forEach, której możemy użyć zamiast map.

Użycie map było tutaj bezzasadne. Nie potrzebujemy wygenerować nowej tablicy z elementami na podstawie istniejącej.

Jeśli jednak mielibyśmy faktyczną potrzebę użycia map na obiekcie NodeList to musimy go skonwertować do Array, najprościej za pomocą konstrukcji Array.from(lis).

Po takiej konwersji, lista węzłów (node'ów) będzie już obiektem Array razem ze wszystkimi dostępnymi w tym obiekcie metodami (jak np. map).

- - + + \ No newline at end of file diff --git a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143.html b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143.html index 0bb75f13d..e5031ccc9 100644 --- a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143.html +++ b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143.html @@ -7,15 +7,15 @@ - - + +
Przejdź do głównej zawartości

Bug #086

🪲 Znajdź buga

console.log(/^[A-z]+$/.test("ABCD"))
console.log(/^[A-z]+$/.test("wxyz"))
console.log(/^[A-z]+$/.test("QwEr"))
console.log(/^[A-z]+$/.test("\\[]"))
console.log(/^[A-z]+$/.test("^_``"))
console.log(/^[A-z]+$/.test("1234"))
console.log(/^[A-z]+$/.test("a1b2"))
console.log(/^[A-z]+$/.test("\nnn"))
console.log(/^[A-z]+$/.test("a b "))

Chcemy przetestować różne ciągi znaków za pomocą wyrażenia regularnego ^[A-z]+$.

^ oznacza początek ciągu znaków.

[A-z] oznacza dowolny znak z zakresu od A do z.

+ oznacza jeden lub więcej znaków.

$ oznacza koniec ciągu znaków.

Metoda test() wykonana na wyrażeniu regularnym zwraca wartość logiczną true/false w zależności od tego czy przekazany w argumencie ciąg znaków jest zgodny z wyrażeniem regularnym.

Jakie wartości zostaną zalogowane do konsoli dla przykładowych testów?

🧪 Rozwiązanie

console.log(/^[A-z]+$/.test("ABCD")) // true
console.log(/^[A-z]+$/.test("wxyz")) // true
console.log(/^[A-z]+$/.test("QwEr")) // true
console.log(/^[A-z]+$/.test("\\[]")) // true
console.log(/^[A-z]+$/.test("^_``")) // true
console.log(/^[A-z]+$/.test("1234")) // false
console.log(/^[A-z]+$/.test("a1b2")) // false
console.log(/^[A-z]+$/.test("\nnn")) // false
console.log(/^[A-z]+$/.test("a b ")) // false

Wartości false zostają zwracane dla ciągów znaków, w których występują liczby, ponieważ zakres od A do z nie zawiera liczb.

Białe znaki jak spacje czy przejścia do nowej linii (\n) również nie wchodzą w skład zakresu z wyrażenia regularnego, więc ich obecność w ciągu znaków również poskutkuje zwróceniem wartości false.

Ciągi znaków składające się wyłącznie ze znaków z zakresu od A do z zwracają true.

Duża niespodzianka czeka na nas gdy w ciągu znaków pojawią się znaki\ [ \ ] ^ _ `

Okazuje się, że są one również elementem zakresu [A-z] w wyrażeniach regularnych.

Tablica kodowania znaków Unicode plasuje te znaki dokładnie pomiędzy zakresem [A-Z] a [a-z].

Tworząc więc wyrażenie regularne dla zakresu znaków [A-z] niejawnie szukamy też znaków [ \ ] ^ _ `.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugCode.html b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugCode.html index 5fdf88803..80b0defe3 100644 --- a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugCode.html +++ b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(/^[A-z]+$/.test("ABCD"))
console.log(/^[A-z]+$/.test("wxyz"))
console.log(/^[A-z]+$/.test("QwEr"))
console.log(/^[A-z]+$/.test("\\[]"))
console.log(/^[A-z]+$/.test("^_``"))
console.log(/^[A-z]+$/.test("1234"))
console.log(/^[A-z]+$/.test("a1b2"))
console.log(/^[A-z]+$/.test("\nnn"))
console.log(/^[A-z]+$/.test("a b "))
- - + + \ No newline at end of file diff --git a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugDescription.html b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugDescription.html index d8373956d..ce47d0da0 100644 --- a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugDescription.html +++ b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy przetestować różne ciągi znaków za pomocą wyrażenia regularnego ^[A-z]+$.

^ oznacza początek ciągu znaków.

[A-z] oznacza dowolny znak z zakresu od A do z.

+ oznacza jeden lub więcej znaków.

$ oznacza koniec ciągu znaków.

Metoda test() wykonana na wyrażeniu regularnym zwraca wartość logiczną true/false w zależności od tego czy przekazany w argumencie ciąg znaków jest zgodny z wyrażeniem regularnym.

Jakie wartości zostaną zalogowane do konsoli dla przykładowych testów?

- - + + \ No newline at end of file diff --git a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/links.html b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/links.html index 118626748..2c7fe8066 100644 --- a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/links.html +++ b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionCode.html b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionCode.html index 069a3336e..472f0a3c7 100644 --- a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionCode.html +++ b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(/^[A-z]+$/.test("ABCD")) // true
console.log(/^[A-z]+$/.test("wxyz")) // true
console.log(/^[A-z]+$/.test("QwEr")) // true
console.log(/^[A-z]+$/.test("\\[]")) // true
console.log(/^[A-z]+$/.test("^_``")) // true
console.log(/^[A-z]+$/.test("1234")) // false
console.log(/^[A-z]+$/.test("a1b2")) // false
console.log(/^[A-z]+$/.test("\nnn")) // false
console.log(/^[A-z]+$/.test("a b ")) // false
- - + + \ No newline at end of file diff --git a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionDescription.html b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionDescription.html index e60def07f..b88b40837 100644 --- a/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionDescription.html +++ b/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionDescription.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Wartości false zostają zwracane dla ciągów znaków, w których występują liczby, ponieważ zakres od A do z nie zawiera liczb.

Białe znaki jak spacje czy przejścia do nowej linii (\n) również nie wchodzą w skład zakresu z wyrażenia regularnego, więc ich obecność w ciągu znaków również poskutkuje zwróceniem wartości false.

Ciągi znaków składające się wyłącznie ze znaków z zakresu od A do z zwracają true.

Duża niespodzianka czeka na nas gdy w ciągu znaków pojawią się znaki\ [ \ ] ^ _ `

Okazuje się, że są one również elementem zakresu [A-z] w wyrażeniach regularnych.

Tablica kodowania znaków Unicode plasuje te znaki dokładnie pomiędzy zakresem [A-Z] a [a-z].

Tworząc więc wyrażenie regularne dla zakresu znaków [A-z] niejawnie szukamy też znaków [ \ ] ^ _ `.

- - + + \ No newline at end of file diff --git a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0.html b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0.html index 19372639e..c1487be79 100644 --- a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0.html +++ b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #036

🪲 Znajdź buga

async function getData() {
const url =
"https://api.spacexdata.com/v4/history"
const response = await fetch(url)
const json = await response.json()

return json
}

async function processData() {
const data = getData()
console.log(data)
}

processData()

Czy dane zostaną poprawnie pobrane z API i przetworzone?

Co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

async function getData() {
const url = "https://api.spacexdata.com/v4/history"
const response = await fetch(url)
const json = await response.json()

return json
}

async function processData() {
const data = await getData()
console.log(data)
}

processData()

W błędnym przykładzie do konsoli zostanie zalogowany obiekt Promise.

Nie mamy w nim dostępu do danych, bo obietnica nie została wypełniona.

Aby rozwiązać ten problem musimy dodać brakujące słowo kluczowe await przed wywołaniem getData().

Moglibyśmy się też dostać do pobranych danych poprzez wywołanie metody then() na obiekcie Promise.

getData().then(resp => console.log(resp)) zwróciłoby nam dane, ale nie zostałyby one przypisane do stałej data.

Poprzez użycie konstrukcji await getData(), wykonywanie kodu zaczeka na pobranie danych i przypisze je do stałej data. Dzięki temu będziemy je mogli przetworzyć w dalszej części funkcji np. logując je do konsoli.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugCode.html b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugCode.html index e9349069f..c1d779f28 100644 --- a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugCode.html +++ b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
async function getData() {
const url =
"https://api.spacexdata.com/v4/history"
const response = await fetch(url)
const json = await response.json()

return json
}

async function processData() {
const data = getData()
console.log(data)
}

processData()
- - + + \ No newline at end of file diff --git a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugDescription.html b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugDescription.html index e0edd1eca..84f514f27 100644 --- a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugDescription.html +++ b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy dane zostaną poprawnie pobrane z API i przetworzone?

Co zostanie zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/links.html b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/links.html index b7ec37e12..e52cf190f 100644 --- a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/links.html +++ b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionCode.html b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionCode.html index ad984a927..c605a4994 100644 --- a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionCode.html +++ b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
async function getData() {
const url = "https://api.spacexdata.com/v4/history"
const response = await fetch(url)
const json = await response.json()

return json
}

async function processData() {
const data = await getData()
console.log(data)
}

processData()
- - + + \ No newline at end of file diff --git a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionDescription.html b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionDescription.html index 6bb57e289..3bf115f7e 100644 --- a/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionDescription.html +++ b/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W błędnym przykładzie do konsoli zostanie zalogowany obiekt Promise.

Nie mamy w nim dostępu do danych, bo obietnica nie została wypełniona.

Aby rozwiązać ten problem musimy dodać brakujące słowo kluczowe await przed wywołaniem getData().

Moglibyśmy się też dostać do pobranych danych poprzez wywołanie metody then() na obiekcie Promise.

getData().then(resp => console.log(resp)) zwróciłoby nam dane, ale nie zostałyby one przypisane do stałej data.

Poprzez użycie konstrukcji await getData(), wykonywanie kodu zaczeka na pobranie danych i przypisze je do stałej data. Dzięki temu będziemy je mogli przetworzyć w dalszej części funkcji np. logując je do konsoli.

- - + + \ No newline at end of file diff --git a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc.html b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc.html index 4c2411698..4a5914ee2 100644 --- a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc.html +++ b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #027

🪲 Znajdź buga

if (true) {
function getFirst() {
console.log(1)
}
}

if (false) {
function getSecond() {
console.log(2)
}
}

getFirst()
getSecond()

Czy wywołanie funkcji w powyższym kodzie zadziała poprawnie?

Czy nie zmieniając logiki kodu, można wymusić zmianę jego działania?

🧪 Rozwiązanie

"use strict"

if (true) {
function getFirst() {
console.log(1)
}
}

if (false) {
function getSecond() {
console.log(2)
}
}

getFirst()
getSecond()

W przykładzie z błędem, w konsoli zalogowana zostanie wartość 1 jako efekt wywołania funkcji getFirst().

Zostanie zalogowany też błąd, getSecond is not a function.

Błąd ten mówi nam, że nazwa getSecond jest dostępna w miejscu jej wywołania, nie jest jednak typem funkcji.

Dostępność nazwy getSecond jest efektem podnoszenia (hoisting) deklaracji funkcji na początek wykonywanego kodu.

W naszym przykładzie getSecond jest jednak deklarowane warunkowo.

Interpreter JavaScript podnosi nazwę zadeklarowanej funkcji na początek wykonywanego kodu, ale nie przypisuje jej konkretnej wartości. Nazwa getSecond jest więc zdefiniowana jako undefined, ponieważ nie zostaje spełniony warunek w instrukcji warunkowej if.

Tego typu sposób interpretowania kodu jest mylący i może prowadzić do powstawania błędów. Aby tego uniknąć, możemy aktywować tryb ścisły.

Możemy to zrobić np. poprzez wywołanie "use strict".

W trybie ścisłym, kod z naszego przykładu będzie interpretowany inaczej.

Deklaracje funkcji zostaną podniesione tylko na początek bloku, w którym zostały zdefiniowane.

Zagnieżdżając więc deklaracje funkcji wewnątrz bloku instrukcji warunkowej, pętli, lub innej funkcji, zadeklarowana w ten sposób funkcja nie będzie dostępna na zewnątrz bloku, który ograniczają nawiasy klamrowe {}.

Po aktywowaniu trybu ścisłego, w konsoli zalogowany zostanie błąd getFirst is not defined. Oznacza to, że dla interpretera JavaScript, funkcje getFirst i getSecond są niezdefiniowane w globalnym zakresie, w których są wywoływane.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugCode.html b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugCode.html index e646bbd58..19ca4a727 100644 --- a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugCode.html +++ b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
if (true) {
function getFirst() {
console.log(1)
}
}

if (false) {
function getSecond() {
console.log(2)
}
}

getFirst()
getSecond()
- - + + \ No newline at end of file diff --git a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugDescription.html b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugDescription.html index e15953c96..3e5e8bc64 100644 --- a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugDescription.html +++ b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy wywołanie funkcji w powyższym kodzie zadziała poprawnie?

Czy nie zmieniając logiki kodu, można wymusić zmianę jego działania?

- - + + \ No newline at end of file diff --git a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/links.html b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/links.html index 76b6bff61..a51b3863e 100644 --- a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/links.html +++ b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionCode.html b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionCode.html index a05d79926..e1fe0d016 100644 --- a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionCode.html +++ b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
"use strict"

if (true) {
function getFirst() {
console.log(1)
}
}

if (false) {
function getSecond() {
console.log(2)
}
}

getFirst()
getSecond()
- - + + \ No newline at end of file diff --git a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionDescription.html b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionDescription.html index 1c3b89a4c..59f098ef7 100644 --- a/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionDescription.html +++ b/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, w konsoli zalogowana zostanie wartość 1 jako efekt wywołania funkcji getFirst().

Zostanie zalogowany też błąd, getSecond is not a function.

Błąd ten mówi nam, że nazwa getSecond jest dostępna w miejscu jej wywołania, nie jest jednak typem funkcji.

Dostępność nazwy getSecond jest efektem podnoszenia (hoisting) deklaracji funkcji na początek wykonywanego kodu.

W naszym przykładzie getSecond jest jednak deklarowane warunkowo.

Interpreter JavaScript podnosi nazwę zadeklarowanej funkcji na początek wykonywanego kodu, ale nie przypisuje jej konkretnej wartości. Nazwa getSecond jest więc zdefiniowana jako undefined, ponieważ nie zostaje spełniony warunek w instrukcji warunkowej if.

Tego typu sposób interpretowania kodu jest mylący i może prowadzić do powstawania błędów. Aby tego uniknąć, możemy aktywować tryb ścisły.

Możemy to zrobić np. poprzez wywołanie "use strict".

W trybie ścisłym, kod z naszego przykładu będzie interpretowany inaczej.

Deklaracje funkcji zostaną podniesione tylko na początek bloku, w którym zostały zdefiniowane.

Zagnieżdżając więc deklaracje funkcji wewnątrz bloku instrukcji warunkowej, pętli, lub innej funkcji, zadeklarowana w ten sposób funkcja nie będzie dostępna na zewnątrz bloku, który ograniczają nawiasy klamrowe {}.

Po aktywowaniu trybu ścisłego, w konsoli zalogowany zostanie błąd getFirst is not defined. Oznacza to, że dla interpretera JavaScript, funkcje getFirst i getSecond są niezdefiniowane w globalnym zakresie, w których są wywoływane.

- - + + \ No newline at end of file diff --git a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8.html b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8.html index 6b915a0da..eb89e0358 100644 --- a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8.html +++ b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #043

🪲 Znajdź buga

const object = {}
object?.property = "value";

console.log(object)

Chcemy dodać własność do obiektu. Zależy nam jednak na obsłużeniu sytuacji, w której obiekt jest niezdefiniowany, lub zamiast obiektu, zwracana jest wartość null.

Jak zadziała powyższy kod? Co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

const object = {}
if (object) {
object.property = "value"
}

console.log(object)

Operator opcjonalnego łańcuchowania ?. działa poprawnie przy odczycie własności obiektów.

W przykładzie z błędem użyliśmy go do przypisania wartości, a w takim kontekście nie może on zostać użyty. Konsola zaloguje więc błąd Invalid left-hand side in assignment.

Operacja przypisania nie zostanie zrealizowana ze względu na błąd składniowy po lewej stronie operatora przypisania =.

Używanie ?. zapobiega wystąpieniu błędu krytycznego Cannot read properties of undefined w sytuacji gdy obiekt, z którego chcemy odczytać wartość jest niezdefiniowany lub jest nullem.

Gdy chcemy przypisać własność do obiektu, ale nie jesteśmy pewni czy obiekt istnieje, rozsądnie będzie użyć instrukcji warunkowej if.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugCode.html b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugCode.html index 98421f48f..19e5b3f9c 100644 --- a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugCode.html +++ b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const object = {}
object?.property = "value";

console.log(object)
- - + + \ No newline at end of file diff --git a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugDescription.html b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugDescription.html index b7e214d75..9a3524ca9 100644 --- a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugDescription.html +++ b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy dodać własność do obiektu. Zależy nam jednak na obsłużeniu sytuacji, w której obiekt jest niezdefiniowany, lub zamiast obiektu, zwracana jest wartość null.

Jak zadziała powyższy kod? Co zostanie zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/links.html b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/links.html index da730ab90..bda976f78 100644 --- a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/links.html +++ b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionCode.html b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionCode.html index 2b3c50b86..5cc8a3dd5 100644 --- a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionCode.html +++ b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const object = {}
if (object) {
object.property = "value"
}

console.log(object)
- - + + \ No newline at end of file diff --git a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionDescription.html b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionDescription.html index 535780971..bb19df32e 100644 --- a/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionDescription.html +++ b/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Operator opcjonalnego łańcuchowania ?. działa poprawnie przy odczycie własności obiektów.

W przykładzie z błędem użyliśmy go do przypisania wartości, a w takim kontekście nie może on zostać użyty. Konsola zaloguje więc błąd Invalid left-hand side in assignment.

Operacja przypisania nie zostanie zrealizowana ze względu na błąd składniowy po lewej stronie operatora przypisania =.

Używanie ?. zapobiega wystąpieniu błędu krytycznego Cannot read properties of undefined w sytuacji gdy obiekt, z którego chcemy odczytać wartość jest niezdefiniowany lub jest nullem.

Gdy chcemy przypisać własność do obiektu, ale nie jesteśmy pewni czy obiekt istnieje, rozsądnie będzie użyć instrukcji warunkowej if.

- - + + \ No newline at end of file diff --git a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7.html b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7.html index 8d5e46989..b3c3dccb4 100644 --- a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7.html +++ b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #066

🪲 Znajdź buga

console.log("A" || alert("B") && alert("C"))

Co zostanie zalogowane do konsoli?

Czy funkcje alert() zostaną wykonane?

🧪 Rozwiązanie

console.log("A" || alert("B") && alert("C")) // A

Do konsoli zostanie zalogowany wyłącznie ciąg znaków A.

Bug polega na założeniu, że funkcja alert("B") powinna zostać wykonana, jako efekt pierwszeństwa działania operatora &&.

Tak się jednak nie stanie. Poniżej wyjaśnienie dlaczego.

Tablica pierwszeństwa wykonywania operatorów plasuje operator logiczny AND && ponad operatorem OR ||.

Analogicznie, w przypadku operatorów arytmetycznych, operator mnożenia * plasuje się ponad operatorem dodawania +.

Wykonując działanie 1 + 2 * 3 otrzymamy więc 7 a nie 9.

Najpierw zostanie wykonane mnożenie operandów 2 i 3. Dopiero później dodawanie 1 z otrzymaną wartością 6 z mnożenia.

Wykonane jest tutaj bardzo istotnym słowem.

Skoro operator && ma wyższy priorytet wykonywania od operatora ||, można oczekiwać od JavaScript, że wykona funkcje, które są operandami && aby poznać zwracane z nich wartości w celu ewaluacji operacji logicznej AND.

Tak się jednak nie dzieje. JavaScript nie wykonuje operacji logicznej AND ze względu na efekt zwarcia operatora OR.

Zwarcie (short circuiting) polega na tym, że jeśli pierwszy z operandów użytych z operatorami || lub && zwraca wartość, która przesądza o końcowej wartości, drugi operand nie jest już w ogóle sprawdzany (ani wykonywany).

W naszym przykładzie dla || drugim operandem byłby efekt działania operatora && czyli (alert("B") && alert("C")).

Nie ma on jednak żadnego znaczenia, ponieważ algorytm OR dąży w pierwszej kolejności do zwrócenia wartości pierwszego operandu, jeśli ta wartość jest prawdziwa.

W sytuacji gdy pierwsza wartość okaże się fałszywa, wtedy, i tylko wtedy, sprawdzany (wykonywany) jest drugi operand i zwracana jest jego (niezależnie jaka) wartość.

Odwrotnie jest w przypadku algorytmu operatora AND, który w pierwszej kolejności dąży do zwrócenia wartości fałszywej z pierwszego operandu, a tylko wtedy, gdy ta wartość okaże się prawdziwa, zostanie sprawdzony (wykonany) drugi operand oraz zwrócona zostanie z niego (niezależnie jaka) wartość.

"A" || alert("B") && alert("C") mimo, że według kolejności wykonywania operatorów, powinien sprawdzić najpierw co zwrócą operandy operatora &&, w rzeczywistości ignoruje je, ponieważ pierwszy operand operatora || jest prawdziwy.

Niezależnie więc od tego co zwróciłyby funkcje alert("B") i alert("C"), końcowy wynik operacji logicznej zawsze wyniesie A.

Efekt zwarcia występuje w operatorach &&, ||, ??, ?., ale nie występuje w pozostałych.

W przypadku wspomnianych działań matematycznych, nawet jeśli wynik jest przesądzony przez pierwszy operand (np. w mnożeniu 0 lub NaN z innymi liczbami), to pozostałe operandy i tak zostaną wykonane.

Taka tam lekka niekonsekwencja 🤷‍♂️.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugCode.html b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugCode.html index 4c904dc8f..ecc38fc88 100644 --- a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugCode.html +++ b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log("A" || alert("B") && alert("C"))
- - + + \ No newline at end of file diff --git a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugDescription.html b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugDescription.html index 65d195292..4cd782aa7 100644 --- a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugDescription.html +++ b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Co zostanie zalogowane do konsoli?

Czy funkcje alert() zostaną wykonane?

- - + + \ No newline at end of file diff --git a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/links.html b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/links.html index 4ad5a6517..eb3c9fb1d 100644 --- a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/links.html +++ b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionCode.html b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionCode.html index 66b397eae..59b89e2e9 100644 --- a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionCode.html +++ b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log("A" || alert("B") && alert("C")) // A
- - + + \ No newline at end of file diff --git a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionDescription.html b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionDescription.html index b7a94750b..d476d5ede 100644 --- a/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionDescription.html +++ b/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Do konsoli zostanie zalogowany wyłącznie ciąg znaków A.

Bug polega na założeniu, że funkcja alert("B") powinna zostać wykonana, jako efekt pierwszeństwa działania operatora &&.

Tak się jednak nie stanie. Poniżej wyjaśnienie dlaczego.

Tablica pierwszeństwa wykonywania operatorów plasuje operator logiczny AND && ponad operatorem OR ||.

Analogicznie, w przypadku operatorów arytmetycznych, operator mnożenia * plasuje się ponad operatorem dodawania +.

Wykonując działanie 1 + 2 * 3 otrzymamy więc 7 a nie 9.

Najpierw zostanie wykonane mnożenie operandów 2 i 3. Dopiero później dodawanie 1 z otrzymaną wartością 6 z mnożenia.

Wykonane jest tutaj bardzo istotnym słowem.

Skoro operator && ma wyższy priorytet wykonywania od operatora ||, można oczekiwać od JavaScript, że wykona funkcje, które są operandami && aby poznać zwracane z nich wartości w celu ewaluacji operacji logicznej AND.

Tak się jednak nie dzieje. JavaScript nie wykonuje operacji logicznej AND ze względu na efekt zwarcia operatora OR.

Zwarcie (short circuiting) polega na tym, że jeśli pierwszy z operandów użytych z operatorami || lub && zwraca wartość, która przesądza o końcowej wartości, drugi operand nie jest już w ogóle sprawdzany (ani wykonywany).

W naszym przykładzie dla || drugim operandem byłby efekt działania operatora && czyli (alert("B") && alert("C")).

Nie ma on jednak żadnego znaczenia, ponieważ algorytm OR dąży w pierwszej kolejności do zwrócenia wartości pierwszego operandu, jeśli ta wartość jest prawdziwa.

W sytuacji gdy pierwsza wartość okaże się fałszywa, wtedy, i tylko wtedy, sprawdzany (wykonywany) jest drugi operand i zwracana jest jego (niezależnie jaka) wartość.

Odwrotnie jest w przypadku algorytmu operatora AND, który w pierwszej kolejności dąży do zwrócenia wartości fałszywej z pierwszego operandu, a tylko wtedy, gdy ta wartość okaże się prawdziwa, zostanie sprawdzony (wykonany) drugi operand oraz zwrócona zostanie z niego (niezależnie jaka) wartość.

"A" || alert("B") && alert("C") mimo, że według kolejności wykonywania operatorów, powinien sprawdzić najpierw co zwrócą operandy operatora &&, w rzeczywistości ignoruje je, ponieważ pierwszy operand operatora || jest prawdziwy.

Niezależnie więc od tego co zwróciłyby funkcje alert("B") i alert("C"), końcowy wynik operacji logicznej zawsze wyniesie A.

Efekt zwarcia występuje w operatorach &&, ||, ??, ?., ale nie występuje w pozostałych.

W przypadku wspomnianych działań matematycznych, nawet jeśli wynik jest przesądzony przez pierwszy operand (np. w mnożeniu 0 lub NaN z innymi liczbami), to pozostałe operandy i tak zostaną wykonane.

Taka tam lekka niekonsekwencja 🤷‍♂️.

- - + + \ No newline at end of file diff --git a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d.html b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d.html index d95b9b6b4..f24b77eab 100644 --- a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d.html +++ b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #046

🪲 Znajdź buga

const myObj = {
toString: () => "orange",
valueOf: () => "apple",
}

console.log(String(myObj))
console.log("".concat(myObj))
console.log("" + myObj)
console.log(`${myObj}`)

Chcemy dokonać konwersji obiektu na ciąg znaków.

Co zalogują do konsoli zaproponowane sposoby?

🧪 Rozwiązanie

const myObj = {
toString: () => "orange",
valueOf: () => "apple",
}

console.log(String(myObj)) // orange
console.log("".concat(myObj)) // orange
console.log("" + myObj) // apple
console.log(`${myObj}`) // orange

Wszystkie sposoby, oprócz "" + myObj, zwrócą wartość orange.

Operator +, jeśli zostanie użyty na typach danych, z których choć jeden jest różny niż number, działa jako operator łączenia ciągów znaków.

"" + myObj jest więc operacją łączenia ciągów znaków za pomocą operatora +, czyli de facto konwersją myObj na ciąg znaków.

Okazuje się jednak, że algorytm konwersji danych na ciąg znaków, który stosuje operator +, różni się od pozostałych sposobów.

Operator + dokonując konwersji danych na ciąg znaków, zamiast wywołać metodę toString() na obiekcie, który konwertuje, w pierwszej kolejności wywołuje na nim metodę valueOf().

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugCode.html b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugCode.html index 58db1b64f..4abb9617e 100644 --- a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugCode.html +++ b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const myObj = {
toString: () => "orange",
valueOf: () => "apple",
}

console.log(String(myObj))
console.log("".concat(myObj))
console.log("" + myObj)
console.log(`${myObj}`)
- - + + \ No newline at end of file diff --git a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugDescription.html b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugDescription.html index 772193796..73014cfae 100644 --- a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugDescription.html +++ b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy dokonać konwersji obiektu na ciąg znaków.

Co zalogują do konsoli zaproponowane sposoby?

- - + + \ No newline at end of file diff --git a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/links.html b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/links.html index 476bd67f6..cb6777c9a 100644 --- a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/links.html +++ b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionCode.html b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionCode.html index df70726d1..8873035cf 100644 --- a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionCode.html +++ b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const myObj = {
toString: () => "orange",
valueOf: () => "apple",
}

console.log(String(myObj)) // orange
console.log("".concat(myObj)) // orange
console.log("" + myObj) // apple
console.log(`${myObj}`) // orange
- - + + \ No newline at end of file diff --git a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionDescription.html b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionDescription.html index 1080df748..ddfc7dddd 100644 --- a/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionDescription.html +++ b/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Wszystkie sposoby, oprócz "" + myObj, zwrócą wartość orange.

Operator +, jeśli zostanie użyty na typach danych, z których choć jeden jest różny niż number, działa jako operator łączenia ciągów znaków.

"" + myObj jest więc operacją łączenia ciągów znaków za pomocą operatora +, czyli de facto konwersją myObj na ciąg znaków.

Okazuje się jednak, że algorytm konwersji danych na ciąg znaków, który stosuje operator +, różni się od pozostałych sposobów.

Operator + dokonując konwersji danych na ciąg znaków, zamiast wywołać metodę toString() na obiekcie, który konwertuje, w pierwszej kolejności wywołuje na nim metodę valueOf().

- - + + \ No newline at end of file diff --git a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814.html b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814.html index 61ca229fb..c8662e1c0 100644 --- a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814.html +++ b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814.html @@ -7,15 +7,15 @@ - - + +
Przejdź do głównej zawartości

Bug #093

🪲 Znajdź buga

let arr1 = Array(5)
let arr2 = [, , , , ,]
let arr3 = ["a", , "b", , "c"]

console.log(arr1.length)
console.log(arr2.length)
console.log(arr3.length)

arr1.forEach((e, i) => console.log(i))
arr2.forEach((e, i) => console.log(i))
arr3.forEach((e, i) => console.log(i))

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

let arr1 = Array(5)
let arr2 = [, , , , ,]
let arr3 = ["a", , "b", , "c"]

console.log(arr1.length) // 5
console.log(arr2.length) // 5
console.log(arr3.length) // 5

arr1.forEach((e, i) => console.log(i))
arr2.forEach((e, i) => console.log(i))
arr3.forEach((e, i) => console.log(i)) // 0 2 4

Rozsiane tablice (sparse arrays) to takie, które zawierają puste miejsca (slot'y).

Tablice rezerwują w pamięci miejsce na dane, ale żadnych danych w tych miejscach nie przechowują.

Nie są to wartości undefined czy null. To dosłownie puste miejsca.

Sprawdzenie własności length na takiej rozsianej tablicy zwróci całkowitą liczbę miejsc, które tablica rezerwuje w pamięci.

Wszystkie trzy tablice arr1, arr2, arr3, zwracają wartość length równą 5.

Wywołanie metody forEach() na tych tablicach nie iteruje jednak pustych miejsc.

Dla tablic arr1 i arr2 nie zostaną zwrócone żadne indeksy i z takich iteracji.

Tablica arr3 ma 3 elementy zajęte i 2 puste.

Zgłoszą się tylko zajęte elementy, logując do konsoli indeksy 0, 2, 4.

JavaScript zachowuje się tutaj niespójnie. Część metod pomija puste miejsca, np. forEach(), map(), sort(), ale część traktuje puste miejsca jako wartość undefined, np. entries(), fill(), find().

Przykładowo arr1.find((e, i) => console.log(i))\ zwróciłoby 0, 1, 2, 3, 4.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugCode.html b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugCode.html index b0462607c..e0d625866 100644 --- a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugCode.html +++ b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let arr1 = Array(5)
let arr2 = [, , , , ,]
let arr3 = ["a", , "b", , "c"]

console.log(arr1.length)
console.log(arr2.length)
console.log(arr3.length)

arr1.forEach((e, i) => console.log(i))
arr2.forEach((e, i) => console.log(i))
arr3.forEach((e, i) => console.log(i))
- - + + \ No newline at end of file diff --git a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugDescription.html b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugDescription.html index a977f28c4..b2362673d 100644 --- a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugDescription.html +++ b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/links.html b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/links.html index 4f41ebba0..b293b71b7 100644 --- a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/links.html +++ b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionCode.html b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionCode.html index bad8769b0..1e8bbf956 100644 --- a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionCode.html +++ b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let arr1 = Array(5)
let arr2 = [, , , , ,]
let arr3 = ["a", , "b", , "c"]

console.log(arr1.length) // 5
console.log(arr2.length) // 5
console.log(arr3.length) // 5

arr1.forEach((e, i) => console.log(i))
arr2.forEach((e, i) => console.log(i))
arr3.forEach((e, i) => console.log(i)) // 0 2 4
- - + + \ No newline at end of file diff --git a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionDescription.html b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionDescription.html index e5faaeb41..6a2d694b7 100644 --- a/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionDescription.html +++ b/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionDescription.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Rozsiane tablice (sparse arrays) to takie, które zawierają puste miejsca (slot'y).

Tablice rezerwują w pamięci miejsce na dane, ale żadnych danych w tych miejscach nie przechowują.

Nie są to wartości undefined czy null. To dosłownie puste miejsca.

Sprawdzenie własności length na takiej rozsianej tablicy zwróci całkowitą liczbę miejsc, które tablica rezerwuje w pamięci.

Wszystkie trzy tablice arr1, arr2, arr3, zwracają wartość length równą 5.

Wywołanie metody forEach() na tych tablicach nie iteruje jednak pustych miejsc.

Dla tablic arr1 i arr2 nie zostaną zwrócone żadne indeksy i z takich iteracji.

Tablica arr3 ma 3 elementy zajęte i 2 puste.

Zgłoszą się tylko zajęte elementy, logując do konsoli indeksy 0, 2, 4.

JavaScript zachowuje się tutaj niespójnie. Część metod pomija puste miejsca, np. forEach(), map(), sort(), ale część traktuje puste miejsca jako wartość undefined, np. entries(), fill(), find().

Przykładowo arr1.find((e, i) => console.log(i))\ zwróciłoby 0, 1, 2, 3, 4.

- - + + \ No newline at end of file diff --git a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896.html b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896.html index a745dec75..b1b68bd87 100644 --- a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896.html +++ b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #083

🪲 Znajdź buga

console.log(typeof NaN)

console.log(isNaN("foo"))
console.log(Number.isNaN("foo"))

console.log(isNaN(() => {}))
console.log(Number.isNaN(() => {}))

console.log(isNaN({}))
console.log(Number.isNaN({}))

console.log(isNaN([1, 2]))
console.log(Number.isNaN([1, 2]))

console.log(isNaN(undefined))
console.log(Number.isNaN(undefined))

console.log(isNaN(NaN))
console.log(isNaN("NaN"))

console.log(isNaN(123))
console.log(isNaN("123"))
console.log(isNaN([]))
console.log(isNaN(true))
console.log(isNaN(false))
console.log(isNaN(null))

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

console.log(typeof NaN) // number

console.log(isNaN("foo")) // true
console.log(Number.isNaN("foo")) // false

console.log(isNaN(() => {})) // true
console.log(Number.isNaN(() => {})) // false

console.log(isNaN({})) // true
console.log(Number.isNaN({})) // false

console.log(isNaN([1, 2])) // true
console.log(Number.isNaN([1, 2])) // false

console.log(isNaN(undefined)) // true
console.log(Number.isNaN(undefined)) // false

console.log(isNaN(NaN)) // true
console.log(isNaN("NaN")) // true

console.log(isNaN(123)) // false
console.log(isNaN("123")) // false (?)
console.log(isNaN([])) // false (?!)
console.log(isNaN(true)) // false (?!)
console.log(isNaN(false)) // false (?!)
console.log(isNaN(null)) // false (?!)

Po pierwsze isNaN() i Number.isNaN() nie są ze sobą zgodne 🤯.

Teoretycznie założeniem isNaN() jest sprawdzenie czy wartość przekazana w argumencie nie jest wartością liczbową.

W praktyce isNaN() sprawdza jednak czy wartość z argumentu jest ekwiwalentna wartości NaN po konwersji do wartości liczbowej.

Co więcej, dokumentacja Mozilli zachęca do korzystania z Number.isNaN() jako bardziej niezawodnego odpowiednika.

Tak, isNan() i Number.isNaN() potrafią zwracać różną wartość dla tego samego argumentu wejściowego.

Mimo deklarowanej większej niezawodności, Number.isNaN() wciąż jest bardzo nieintuicyjną metodą w celu sprawdzania, czy wartość wejściowa nie jest wartością liczbową.

Dla uzyskania niezawodności i intuicyjności najlepiej skorzystać z porównania typeof x === "number".

Mamy wtedy pewność, że dostaniemy true tylko wtedy, gdy x będzie typu liczbowego.

Pułapką może okazać się wtedy typeof NaN === "number", który zwróci true, ponieważ typ wartości NaN to... number.

Największe (moim zdaniem) pułapki w kwesti isNaN() i Number.isNaN() (gdy są ze sobą zgodne), to:

  • Sprawdzanie ciągu znaków, który zawiera liczbę np. "123"
  • Pustej tablicy []
  • Wartości logicznych true/false
  • null

Wszystkie z powyższych wartości ulegają konwersji do wartości liczbowych.

Ciąg znaków "123" zostaje skonwertowany do wartości liczbowej 123 więc isNaN("123"), tak samo jak Number.isNaN("123"), zwraca false.

Pusta tablica również jest konwertowana do wartości liczbowej, 0.

Wartości logiczne true/false są konwertowane do 1/0.

null również ulega konwersji do wartości 0.

Z tego względu, powyższe wartości po konwersji do wartości liczbowej nie stają się wartością NaN, więc isNaN() dla nich zwraca false.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugCode.html b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugCode.html index db1313a3d..af655201c 100644 --- a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugCode.html +++ b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(typeof NaN)

console.log(isNaN("foo"))
console.log(Number.isNaN("foo"))

console.log(isNaN(() => {}))
console.log(Number.isNaN(() => {}))

console.log(isNaN({}))
console.log(Number.isNaN({}))

console.log(isNaN([1, 2]))
console.log(Number.isNaN([1, 2]))

console.log(isNaN(undefined))
console.log(Number.isNaN(undefined))

console.log(isNaN(NaN))
console.log(isNaN("NaN"))

console.log(isNaN(123))
console.log(isNaN("123"))
console.log(isNaN([]))
console.log(isNaN(true))
console.log(isNaN(false))
console.log(isNaN(null))
- - + + \ No newline at end of file diff --git a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugDescription.html b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugDescription.html index a5bb2a497..be48f7f66 100644 --- a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugDescription.html +++ b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/links.html b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/links.html index 8beb99655..59fde4fe9 100644 --- a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/links.html +++ b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionCode.html b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionCode.html index 5693c5932..d8f716aa3 100644 --- a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionCode.html +++ b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(typeof NaN) // number

console.log(isNaN("foo")) // true
console.log(Number.isNaN("foo")) // false

console.log(isNaN(() => {})) // true
console.log(Number.isNaN(() => {})) // false

console.log(isNaN({})) // true
console.log(Number.isNaN({})) // false

console.log(isNaN([1, 2])) // true
console.log(Number.isNaN([1, 2])) // false

console.log(isNaN(undefined)) // true
console.log(Number.isNaN(undefined)) // false

console.log(isNaN(NaN)) // true
console.log(isNaN("NaN")) // true

console.log(isNaN(123)) // false
console.log(isNaN("123")) // false (?)
console.log(isNaN([])) // false (?!)
console.log(isNaN(true)) // false (?!)
console.log(isNaN(false)) // false (?!)
console.log(isNaN(null)) // false (?!)
- - + + \ No newline at end of file diff --git a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionDescription.html b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionDescription.html index a25303f1c..506b166db 100644 --- a/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionDescription.html +++ b/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Po pierwsze isNaN() i Number.isNaN() nie są ze sobą zgodne 🤯.

Teoretycznie założeniem isNaN() jest sprawdzenie czy wartość przekazana w argumencie nie jest wartością liczbową.

W praktyce isNaN() sprawdza jednak czy wartość z argumentu jest ekwiwalentna wartości NaN po konwersji do wartości liczbowej.

Co więcej, dokumentacja Mozilli zachęca do korzystania z Number.isNaN() jako bardziej niezawodnego odpowiednika.

Tak, isNan() i Number.isNaN() potrafią zwracać różną wartość dla tego samego argumentu wejściowego.

Mimo deklarowanej większej niezawodności, Number.isNaN() wciąż jest bardzo nieintuicyjną metodą w celu sprawdzania, czy wartość wejściowa nie jest wartością liczbową.

Dla uzyskania niezawodności i intuicyjności najlepiej skorzystać z porównania typeof x === "number".

Mamy wtedy pewność, że dostaniemy true tylko wtedy, gdy x będzie typu liczbowego.

Pułapką może okazać się wtedy typeof NaN === "number", który zwróci true, ponieważ typ wartości NaN to... number.

Największe (moim zdaniem) pułapki w kwesti isNaN() i Number.isNaN() (gdy są ze sobą zgodne), to:

  • Sprawdzanie ciągu znaków, który zawiera liczbę np. "123"
  • Pustej tablicy []
  • Wartości logicznych true/false
  • null

Wszystkie z powyższych wartości ulegają konwersji do wartości liczbowych.

Ciąg znaków "123" zostaje skonwertowany do wartości liczbowej 123 więc isNaN("123"), tak samo jak Number.isNaN("123"), zwraca false.

Pusta tablica również jest konwertowana do wartości liczbowej, 0.

Wartości logiczne true/false są konwertowane do 1/0.

null również ulega konwersji do wartości 0.

Z tego względu, powyższe wartości po konwersji do wartości liczbowej nie stają się wartością NaN, więc isNaN() dla nich zwraca false.

- - + + \ No newline at end of file diff --git a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166.html b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166.html index 26621a431..550d0342d 100644 --- a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166.html +++ b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #068

🪲 Znajdź buga

const numbers = [11, 2, 27, 1]
const sorted = numbers.sort((a, b) => a - b)
sorted[0] = 100

console.log(sorted)
console.log(numbers)

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

const numbers = [11, 2, 27, 1]
const sorted = [...numbers].sort((a, b) => a - b)
sorted[0] = 100

console.log(sorted)
console.log(numbers)

W przykładzie z błędem, stała numbers oraz sorted zwróci tą samą tablicę [100, 2, 11, 27].

Sortowanie działa poprawnie, problem leży jednak w mutowaniu oryginalnej tablicy poprzez metodę sort().

Metoda sort(), nie wykonuje kopii tablicy, na której zostanie wykonana. Modyfikuje oryginalną tablicę i zwraca efekt tej modyfikacji.

Po posortowaniu liczb, tablica sorted, na pozycji 0 posiada wartość 1.

Ta wartość jest jednak podmieniona na wartość 100 za pomocą sorted[0] = 100.

Z uwagi na wspomnianą wcześniej cechę działania sort(), kolejnym modyfikacjom tablicy sorted, ulega również tablica numbers.

Dobrze o tym pamiętać, szczególnie, że JavaScript jest tutaj niespójny.

Niektóre metody, takie jak np. slice(), map(), concat(), zwracają kopię oryginalnej tablicy, przez co późniejsze modyfikacje nie dotykają oryginału (nie mutują).

Inne, jak np. push(), reverse(), sort(), modyfikują oryginalną tablice (mutują).

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugCode.html b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugCode.html index c1580aaaa..814d9e2c4 100644 --- a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugCode.html +++ b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numbers = [11, 2, 27, 1]
const sorted = numbers.sort((a, b) => a - b)
sorted[0] = 100

console.log(sorted)
console.log(numbers)
- - + + \ No newline at end of file diff --git a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugDescription.html b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugDescription.html index a33830190..74b100634 100644 --- a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugDescription.html +++ b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/links.html b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/links.html index 13deffbbd..308d10af0 100644 --- a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/links.html +++ b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionCode.html b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionCode.html index 7193a1027..e6f6be67f 100644 --- a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionCode.html +++ b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numbers = [11, 2, 27, 1]
const sorted = [...numbers].sort((a, b) => a - b)
sorted[0] = 100

console.log(sorted)
console.log(numbers)
- - + + \ No newline at end of file diff --git a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionDescription.html b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionDescription.html index 0adf9a844..e5c498246 100644 --- a/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionDescription.html +++ b/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, stała numbers oraz sorted zwróci tą samą tablicę [100, 2, 11, 27].

Sortowanie działa poprawnie, problem leży jednak w mutowaniu oryginalnej tablicy poprzez metodę sort().

Metoda sort(), nie wykonuje kopii tablicy, na której zostanie wykonana. Modyfikuje oryginalną tablicę i zwraca efekt tej modyfikacji.

Po posortowaniu liczb, tablica sorted, na pozycji 0 posiada wartość 1.

Ta wartość jest jednak podmieniona na wartość 100 za pomocą sorted[0] = 100.

Z uwagi na wspomnianą wcześniej cechę działania sort(), kolejnym modyfikacjom tablicy sorted, ulega również tablica numbers.

Dobrze o tym pamiętać, szczególnie, że JavaScript jest tutaj niespójny.

Niektóre metody, takie jak np. slice(), map(), concat(), zwracają kopię oryginalnej tablicy, przez co późniejsze modyfikacje nie dotykają oryginału (nie mutują).

Inne, jak np. push(), reverse(), sort(), modyfikują oryginalną tablice (mutują).

- - + + \ No newline at end of file diff --git a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c.html b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c.html index 588fec655..2651ec59b 100644 --- a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c.html +++ b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #050

🪲 Znajdź buga

console.log(123.toString())
console.log(123..toString())
console.log(123. toString())
console.log(123 .toString())
console.log(123 . toString())
console.log(123.0.toString())
console.log((123).toString())

Chcemy zamienić typ wartości liczbowej na ciąg znaków.

Który z powyższych sposobów wywołania toString() nie zadziała?

🧪 Rozwiązanie

// console.log(123.toString())
console.log(123..toString())
// console.log(123. toString())
console.log(123 .toString())
console.log(123 . toString())
console.log(123.0.toString())
console.log((123).toString())

Pierwszy i trzeci sposób nie zadziała.

Pojawienie się kropki bezpośrednio po wartości liczbowej w 123.toString() zostaje zinterpretowane jako liczba zmiennoprzecinkowa. Wystąpienie toString() po kropce, nie jest wartością liczbową, której JavaScript się spodziewa w liczbie zmiennoprzecinkowej np. 123.456.

Sytuację naprawia umieszczenie liczby w nawiasie (123).toString(), przez co nawias zamykający wyraźnie blokuje możliwość interpretacji kropki jako części liczby zmiennoprzecinkowej.

Innym wariantem może być wyraźne zadeklarowanie liczby zmiennoprzecinkowej z zerową wartością dziesiętną 123.0.toString() i taka konstrukcja również zadziała prawidłowo.

Zaskoczeniem może być poprawne działanie poniższych przykładów:

123..toString()
123 .toString()
123 . toString()

Warto zwrócić uwagę, że 123. toString() już poprawnie nie zadziała.

123. jest poprawną liczbą, tak samo jak 123.0.

123 . poprawną liczbą nie jest podobnie jak 123 .0.

Wywołując 123. toString() przekazujemy więc do metody log() dwa parametry: liczbę oraz samodzielne wywołanie funkcji toString().

JavaScript spodziewa się więc console.log(123., toString()).

123..toString() daje nam zapis poprawnej liczby 123. oraz wywołanie na niej metody toString().

123 .toString() dla JavaScript oznacza wystąpienie liczby całkowitej, bo liczby zmiennoprzecinkowe nie mogą mieć białych znaków pomiędzy separatorem dziesiętnym.

Skoro jest to liczba całkowita to wywołanie toString() zostaje już poprawnie zinterpretowane. Nieważna jest też ilość białych znaków, które występują po liczbie całkowitej oraz, uwaga, po akcesorze (kropce), dającym dostęp do metody.

123   .   toString() wszystko gra 🤯

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugCode.html b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugCode.html index 8318ae21d..55908ef50 100644 --- a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugCode.html +++ b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(123.toString())
console.log(123..toString())
console.log(123. toString())
console.log(123 .toString())
console.log(123 . toString())
console.log(123.0.toString())
console.log((123).toString())
- - + + \ No newline at end of file diff --git a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugDescription.html b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugDescription.html index 4b7c70c8c..713cd9d54 100644 --- a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugDescription.html +++ b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy zamienić typ wartości liczbowej na ciąg znaków.

Który z powyższych sposobów wywołania toString() nie zadziała?

- - + + \ No newline at end of file diff --git a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/links.html b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/links.html index fd0e2f7a0..41783e9e4 100644 --- a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/links.html +++ b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionCode.html b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionCode.html index 2c50d84fe..a35c2d333 100644 --- a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionCode.html +++ b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
// console.log(123.toString())
console.log(123..toString())
// console.log(123. toString())
console.log(123 .toString())
console.log(123 . toString())
console.log(123.0.toString())
console.log((123).toString())
- - + + \ No newline at end of file diff --git a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionDescription.html b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionDescription.html index fa6f618b9..38a737d84 100644 --- a/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionDescription.html +++ b/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Pierwszy i trzeci sposób nie zadziała.

Pojawienie się kropki bezpośrednio po wartości liczbowej w 123.toString() zostaje zinterpretowane jako liczba zmiennoprzecinkowa. Wystąpienie toString() po kropce, nie jest wartością liczbową, której JavaScript się spodziewa w liczbie zmiennoprzecinkowej np. 123.456.

Sytuację naprawia umieszczenie liczby w nawiasie (123).toString(), przez co nawias zamykający wyraźnie blokuje możliwość interpretacji kropki jako części liczby zmiennoprzecinkowej.

Innym wariantem może być wyraźne zadeklarowanie liczby zmiennoprzecinkowej z zerową wartością dziesiętną 123.0.toString() i taka konstrukcja również zadziała prawidłowo.

Zaskoczeniem może być poprawne działanie poniższych przykładów:

123..toString()
123 .toString()
123 . toString()

Warto zwrócić uwagę, że 123. toString() już poprawnie nie zadziała.

123. jest poprawną liczbą, tak samo jak 123.0.

123 . poprawną liczbą nie jest podobnie jak 123 .0.

Wywołując 123. toString() przekazujemy więc do metody log() dwa parametry: liczbę oraz samodzielne wywołanie funkcji toString().

JavaScript spodziewa się więc console.log(123., toString()).

123..toString() daje nam zapis poprawnej liczby 123. oraz wywołanie na niej metody toString().

123 .toString() dla JavaScript oznacza wystąpienie liczby całkowitej, bo liczby zmiennoprzecinkowe nie mogą mieć białych znaków pomiędzy separatorem dziesiętnym.

Skoro jest to liczba całkowita to wywołanie toString() zostaje już poprawnie zinterpretowane. Nieważna jest też ilość białych znaków, które występują po liczbie całkowitej oraz, uwaga, po akcesorze (kropce), dającym dostęp do metody.

123   .   toString() wszystko gra 🤯

- - + + \ No newline at end of file diff --git a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1.html b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1.html index 97757f90e..62034214b 100644 --- a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1.html +++ b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #024

🪲 Znajdź buga

const numbers = [1, 2, 3]

console.log(
numbers.map(n => { value: n })
)

Mamy tablicę z liczbami przypisanymi do stałej numbers. Chcemy zwrócić tablicę z obiektami, w których każdy z obiektów będzie miał przypisaną wartość do własności value.

Czy powyższy kod spełni to zadanie?

🧪 Rozwiązanie

const numbers = [1, 2, 3]

console.log(
numbers.map(n => ({ value: n }))
)

Błędny przykład zwróci nam tablicę [undefined, undefined, undefined].

Funkcje strzałkowe domyślnie zwracają zawartość funkcji (domniemany return) tylko jeśli nie jest ono w formie blokowej.

Użycie nawiasów klamrowych { i } tworzy ciało funkcji w formie blokowej i tym samym wymaga wyraźnego zwrócenia wartości z takiego ciała poprzez wyrażenie return.

W funkcji strzałkowej chcąc zwrócić obiekt musielibyśmy ciało funkcji zapisać jako { return { value: n } }.

Możemy jednak użyć formy zwięzłej i pominąć return, umieszczając obiekt wewnątrz nawiasów ( i ).

Tym samym funkcja strzałkowa potraktuje taką konstrukcję jako zwięzłe ciało funkcji i zwróci je bez konieczności użycia return.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugCode.html b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugCode.html index 43ae51fa1..807ceb287 100644 --- a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugCode.html +++ b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numbers = [1, 2, 3]

console.log(
numbers.map(n => { value: n })
)
- - + + \ No newline at end of file diff --git a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugDescription.html b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugDescription.html index 57e404668..339f6dac5 100644 --- a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugDescription.html +++ b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Mamy tablicę z liczbami przypisanymi do stałej numbers. Chcemy zwrócić tablicę z obiektami, w których każdy z obiektów będzie miał przypisaną wartość do własności value.

Czy powyższy kod spełni to zadanie?

- - + + \ No newline at end of file diff --git a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/links.html b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/links.html index 0065c8222..2598d53d6 100644 --- a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/links.html +++ b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionCode.html b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionCode.html index bec44b967..70cfc5072 100644 --- a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionCode.html +++ b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numbers = [1, 2, 3]

console.log(
numbers.map(n => ({ value: n }))
)
- - + + \ No newline at end of file diff --git a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionDescription.html b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionDescription.html index 8060cc6ce..141a3d526 100644 --- a/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionDescription.html +++ b/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Błędny przykład zwróci nam tablicę [undefined, undefined, undefined].

Funkcje strzałkowe domyślnie zwracają zawartość funkcji (domniemany return) tylko jeśli nie jest ono w formie blokowej.

Użycie nawiasów klamrowych { i } tworzy ciało funkcji w formie blokowej i tym samym wymaga wyraźnego zwrócenia wartości z takiego ciała poprzez wyrażenie return.

W funkcji strzałkowej chcąc zwrócić obiekt musielibyśmy ciało funkcji zapisać jako { return { value: n } }.

Możemy jednak użyć formy zwięzłej i pominąć return, umieszczając obiekt wewnątrz nawiasów ( i ).

Tym samym funkcja strzałkowa potraktuje taką konstrukcję jako zwięzłe ciało funkcji i zwróci je bez konieczności użycia return.

- - + + \ No newline at end of file diff --git a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8.html b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8.html index 49e62e00a..2e3743131 100644 --- a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8.html +++ b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #092

🪲 Znajdź buga

const person = {
name: "John",
height: 178,
birthdate: new Date("1999-12-31"),
children: [
{
name: "John Junior",
height: 132,
birthdate: new Date("2022-02-22"),
},
],
}

const copy1 = JSON.parse(JSON.stringify(person))
const copy2 = { ...person }
const copy3 = structuredClone(person)

person.children[0].name = "Susan"

console.log(person.birthdate.getTime())
console.log(person.children[0])

console.log(copy1.birthdate.getTime())
console.log(copy1.children[0])

console.log(copy2.birthdate.getTime())
console.log(copy2.children[0])

console.log(copy3.birthdate.getTime())
console.log(copy3.children[0])

Chcemy skopiować obiekt w sposób głęboki (deep clone).

W jaki sposób zadziałają różne metody kopiowania?

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

const person = {
name: "John",
height: 178,
birthdate: new Date("1999-12-31"),
children: [
{
name: "John Junior",
height: 132,
birthdate: new Date("2022-02-22"),
},
],
}

const copy1 = JSON.parse(JSON.stringify(person))
const copy2 = { ...person }
const copy3 = structuredClone(person)

person.children[0].name = "Susan"

console.log(person.birthdate.getTime())
console.log(person.children[0])

// console.log(copy1.birthdate.getTime())
console.log(copy1.children[0])

console.log(copy2.birthdate.getTime())
console.log(copy2.children[0])

console.log(copy3.birthdate.getTime())
console.log(copy3.children[0])

Wywołanie metody getTime() na copy1.birthdate zwróci błąd informujący, że getTime nie jest funkcją.

Mimo, że serializacja i parsowanie formatu JSON działa jako głęboka kopia obiektu, to przez konwersję do formatu JSON tracimy niektóre pierwotne własności obiektu jak funkcje.

Skopiowana data zostaje skonwertowana do ciągu znaków. Nie możemy więc wywoływać na niej metody getTime().

Głęboka kopia copy2 poprzez operator rozkładu { ...person } nie kopiuje zagnieżdżonych obiektów (w tym tablic), a jedynie przekazuje referencję do nich.

Modyfikując imię dziecka w oryginalnym obiekcie po wcześniejszym wykonaniu kopi poprzez rozkład, wpływamy na zmianę tego imienia również w skopiowanym obiekcie.

Ostatni, trzeci sposób jest najskuteczniejszy dla tworzenia głębokich kopi.

Dla copy3 globalna funkcja structuredClone() wykonuje głęboką kopię, zachowując funkcjonalności oraz kopiując zagnieżdżone obiekty.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugCode.html b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugCode.html index a95d85a83..f282b3573 100644 --- a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugCode.html +++ b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const person = {
name: "John",
height: 178,
birthdate: new Date("1999-12-31"),
children: [
{
name: "John Junior",
height: 132,
birthdate: new Date("2022-02-22"),
},
],
}

const copy1 = JSON.parse(JSON.stringify(person))
const copy2 = { ...person }
const copy3 = structuredClone(person)

person.children[0].name = "Susan"

console.log(person.birthdate.getTime())
console.log(person.children[0])

console.log(copy1.birthdate.getTime())
console.log(copy1.children[0])

console.log(copy2.birthdate.getTime())
console.log(copy2.children[0])

console.log(copy3.birthdate.getTime())
console.log(copy3.children[0])
- - + + \ No newline at end of file diff --git a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugDescription.html b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugDescription.html index bf69cb634..c8fa855be 100644 --- a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugDescription.html +++ b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy skopiować obiekt w sposób głęboki (deep clone).

W jaki sposób zadziałają różne metody kopiowania?

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/links.html b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/links.html index f7e56c473..f43962557 100644 --- a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/links.html +++ b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionCode.html b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionCode.html index 73e4d2c87..a229784e4 100644 --- a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionCode.html +++ b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const person = {
name: "John",
height: 178,
birthdate: new Date("1999-12-31"),
children: [
{
name: "John Junior",
height: 132,
birthdate: new Date("2022-02-22"),
},
],
}

const copy1 = JSON.parse(JSON.stringify(person))
const copy2 = { ...person }
const copy3 = structuredClone(person)

person.children[0].name = "Susan"

console.log(person.birthdate.getTime())
console.log(person.children[0])

// console.log(copy1.birthdate.getTime())
console.log(copy1.children[0])

console.log(copy2.birthdate.getTime())
console.log(copy2.children[0])

console.log(copy3.birthdate.getTime())
console.log(copy3.children[0])
- - + + \ No newline at end of file diff --git a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionDescription.html b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionDescription.html index ecf0eb886..be4e11ebc 100644 --- a/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionDescription.html +++ b/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Wywołanie metody getTime() na copy1.birthdate zwróci błąd informujący, że getTime nie jest funkcją.

Mimo, że serializacja i parsowanie formatu JSON działa jako głęboka kopia obiektu, to przez konwersję do formatu JSON tracimy niektóre pierwotne własności obiektu jak funkcje.

Skopiowana data zostaje skonwertowana do ciągu znaków. Nie możemy więc wywoływać na niej metody getTime().

Głęboka kopia copy2 poprzez operator rozkładu { ...person } nie kopiuje zagnieżdżonych obiektów (w tym tablic), a jedynie przekazuje referencję do nich.

Modyfikując imię dziecka w oryginalnym obiekcie po wcześniejszym wykonaniu kopi poprzez rozkład, wpływamy na zmianę tego imienia również w skopiowanym obiekcie.

Ostatni, trzeci sposób jest najskuteczniejszy dla tworzenia głębokich kopi.

Dla copy3 globalna funkcja structuredClone() wykonuje głęboką kopię, zachowując funkcjonalności oraz kopiując zagnieżdżone obiekty.

- - + + \ No newline at end of file diff --git a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7.html b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7.html index 10f0545bc..bde32804a 100644 --- a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7.html +++ b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #084

🪲 Znajdź buga

console.log(4 < 5)

console.log("4" < "5")
console.log("34" < "5")
console.log("347" < "5")
console.log("347" < "50")

console.log("a" < "b")
console.log("b" < "bz")
console.log("bxz" < "bz")
console.log("bar" < "baz")

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

console.log(4 < 5) // true

console.log("4" < "5") // true
console.log("34" < "5") // true
console.log("347" < "5") // true
console.log("347" < "50") // true

console.log("a" < "b") // true
console.log("b" < "bz") // true
console.log("bxz" < "bz") // true
console.log("bar" < "baz") // true

Wszystkie porównania zwrócą wartość true.

Nie są to jednak wartości, których intuicyjnie moglibyśmy się spodziewać po użyciu operatora <.

Porównanie mniej niż oraz analogicznie przeciwstawne więcej niż działa intuicyjnie poprawnie dla wartości liczbowych.

Dla porównania ciągów znaków intuicja mija się jednak z algorytmem, który odpowiada za faktyczne porównania.

Jeśli operandami są ciągi znaków, porównywane są wartości liczbowe przypisane do znaków w kodowaniu Unicode.

Znak "a" w kodowaniu Unicode to liczba 97.

Znak "b", odpowiada liczbie 98.

97 < 98 jest więc twierdzeniem prawdziwym.

Gdy ciągi znaków składają się z większej ilości znaków są one porównywane ze sobą kolejno, znak po znaku.

"b" < "b" zwróciłoby fałsz, bo fałszywe jest stwierdzenie 98 < 98.

"b" < "bz" zwraca prawdę, bo kolejny znak, "z" jest większy niż brak znaku po lewej stronie porównania.

"bxz" < "bz" zwraca prawdę bo "x" w kodowaniu Unicode ma niższą wartość (kod 120) niż "z" (kod 122), innymi słowy występuje wcześniej w alfabecie. Trzecie z zostaje pominięte.

Gdy zamiast liter użyjemy liczb, ale będą one zapisane w postaci ciągu znaków, to sytuacja będzie wyglądała tak samo.

"34" < "5" jest prawdziwe, bo "3" (kod 51) jest mniejsze niż "5" (kod 53). "4" zostaje znakiem pominiętym w porównaniu.

Nie ma znaczenia ile kolejnych znaków dodamy oraz jakie to będą znaki, "3499999999" < "5".

Zwróci tak samo prawdę, ponieważ Unicode "3" (51) jest mniejszy niż Unicode "5" (53).

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugCode.html b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugCode.html index db1bc290d..f84d740cb 100644 --- a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugCode.html +++ b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(4 < 5)

console.log("4" < "5")
console.log("34" < "5")
console.log("347" < "5")
console.log("347" < "50")

console.log("a" < "b")
console.log("b" < "bz")
console.log("bxz" < "bz")
console.log("bar" < "baz")
- - + + \ No newline at end of file diff --git a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugDescription.html b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugDescription.html index a1fc15c54..04912af11 100644 --- a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugDescription.html +++ b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/links.html b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/links.html index f4749f0fd..b68df5082 100644 --- a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/links.html +++ b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionCode.html b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionCode.html index 3e192d98f..6011de97f 100644 --- a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionCode.html +++ b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(4 < 5) // true

console.log("4" < "5") // true
console.log("34" < "5") // true
console.log("347" < "5") // true
console.log("347" < "50") // true

console.log("a" < "b") // true
console.log("b" < "bz") // true
console.log("bxz" < "bz") // true
console.log("bar" < "baz") // true
- - + + \ No newline at end of file diff --git a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionDescription.html b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionDescription.html index b8932dcf5..895c4885e 100644 --- a/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionDescription.html +++ b/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Wszystkie porównania zwrócą wartość true.

Nie są to jednak wartości, których intuicyjnie moglibyśmy się spodziewać po użyciu operatora <.

Porównanie mniej niż oraz analogicznie przeciwstawne więcej niż działa intuicyjnie poprawnie dla wartości liczbowych.

Dla porównania ciągów znaków intuicja mija się jednak z algorytmem, który odpowiada za faktyczne porównania.

Jeśli operandami są ciągi znaków, porównywane są wartości liczbowe przypisane do znaków w kodowaniu Unicode.

Znak "a" w kodowaniu Unicode to liczba 97.

Znak "b", odpowiada liczbie 98.

97 < 98 jest więc twierdzeniem prawdziwym.

Gdy ciągi znaków składają się z większej ilości znaków są one porównywane ze sobą kolejno, znak po znaku.

"b" < "b" zwróciłoby fałsz, bo fałszywe jest stwierdzenie 98 < 98.

"b" < "bz" zwraca prawdę, bo kolejny znak, "z" jest większy niż brak znaku po lewej stronie porównania.

"bxz" < "bz" zwraca prawdę bo "x" w kodowaniu Unicode ma niższą wartość (kod 120) niż "z" (kod 122), innymi słowy występuje wcześniej w alfabecie. Trzecie z zostaje pominięte.

Gdy zamiast liter użyjemy liczb, ale będą one zapisane w postaci ciągu znaków, to sytuacja będzie wyglądała tak samo.

"34" < "5" jest prawdziwe, bo "3" (kod 51) jest mniejsze niż "5" (kod 53). "4" zostaje znakiem pominiętym w porównaniu.

Nie ma znaczenia ile kolejnych znaków dodamy oraz jakie to będą znaki, "3499999999" < "5".

Zwróci tak samo prawdę, ponieważ Unicode "3" (51) jest mniejszy niż Unicode "5" (53).

- - + + \ No newline at end of file diff --git a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9.html b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9.html index 75f360c06..8a86b506c 100644 --- a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9.html +++ b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9.html @@ -7,15 +7,15 @@ - - + +
Przejdź do głównej zawartości

Bug #026

🪲 Znajdź buga

let firstName = new String("Brendan")
let lastName = String("Eich")
let user = { id: 1, admin: true }
let numbers = [1, 2, 3]
let nothing
let empty = null
let greet = function () { return "Hi!" }
let greeting = new greet()

console.log("object" === typeof firstName)
console.log("object" === typeof lastName)
console.log("object" === typeof user)
console.log("object" === typeof numbers)
console.log("object" === typeof empty)
console.log("object" === typeof nothing)
console.log("object" === typeof greet)
console.log("object" === typeof greeting)

Które z powyższych porównań zwrócą prawdę, a które fałsz?

Dla jakiej wartości działanie typeof zwróci błędną informację?\ (oficjalny bug JavaScript)

🧪 Rozwiązanie

let firstName = new String("Brendan")
let lastName = String("Eich")
let user = { id: 1, admin: true }
let numbers = [1, 2, 3]
let nothing
let empty = null
let greet = function () { return "Hi!" }
let greeting = new greet()

console.log("object" === typeof firstName)
console.log("object" === typeof lastName)
console.log("object" === typeof user)
console.log("object" === typeof numbers)
console.log("object" === typeof empty)
console.log("object" === typeof nothing)
console.log("object" === typeof greet)
console.log("object" === typeof greeting)

Większość wyrażeń porównania z typem object zaloguje do konsoli wartości true. Wyjątkami będą lastName, nothing, i greet.

Zmienna firstName zawiera obiekt utworzony za pomocą wywołania konstruktora String z użyciem operatora new. Powoduje to zwrócenie obiektu String który jest typem obiektu.

Zmienna lastName zawiera ciąg znaków o podstawowym typie string, stworzonego poprzez wywołanie funkcji String bez użycia operatora new, czyli bez intencji tworzenia nowego obiektu.

Zmienna user otrzymuje wartość typowego JavaScriptowego obiektu definiowanego za pomocą nawiasów klamrowych. Nie jest zaskoczeniem, że typeof zwraca dla takiej wartości object.

Zmienna numbers zawiera tablicę, czyli Array, a w JavaScript Array jest obiektem.

Zmienna nothing jest zadeklarowana bez przypisania wartości. Wywołanie jej zwraca więc wartość undefined, która jest jednocześnie typem podstawowym. typeof undefined zwraca więc undefined.

Zmienna empty zawiera wartość null. Działanie typeof dla wartości null zwróci object i jest to powszechnie uznane za błąd języka JavaScript (patrz podlinkowany artykuł The history of “typeof null”).

Bug ten celowo nie jest jednak naprawiany w działaniu języka ze względu na zachowanie kompatybilności wstecznej z wieloma istniejącymi skryptami, które polegają na tym błędnym działaniu.

Zmienna greet jest funkcją i mimo, że funkcje są też pierwszorzędnymi obiektami w JavaScript, to jednak poprzez typeof zgłaszają swój typ danych jako function.

Zmienna greeting przechowuje obiekt, utworzony poprzez użycie operatora new wywołującego funkcję greet jako konstruktora obiektu.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugCode.html b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugCode.html index 59d28d428..388f291c9 100644 --- a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugCode.html +++ b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let firstName = new String("Brendan")
let lastName = String("Eich")
let user = { id: 1, admin: true }
let numbers = [1, 2, 3]
let nothing
let empty = null
let greet = function () { return "Hi!" }
let greeting = new greet()

console.log("object" === typeof firstName)
console.log("object" === typeof lastName)
console.log("object" === typeof user)
console.log("object" === typeof numbers)
console.log("object" === typeof empty)
console.log("object" === typeof nothing)
console.log("object" === typeof greet)
console.log("object" === typeof greeting)
- - + + \ No newline at end of file diff --git a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugDescription.html b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugDescription.html index 6bf9b9bd5..5fe06d89c 100644 --- a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugDescription.html +++ b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugDescription.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Które z powyższych porównań zwrócą prawdę, a które fałsz?

Dla jakiej wartości działanie typeof zwróci błędną informację?\ (oficjalny bug JavaScript)

- - + + \ No newline at end of file diff --git a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/links.html b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/links.html index bd279e66f..976c803ab 100644 --- a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/links.html +++ b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionCode.html b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionCode.html index a6b53cee5..cf4c3d559 100644 --- a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionCode.html +++ b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let firstName = new String("Brendan")
let lastName = String("Eich")
let user = { id: 1, admin: true }
let numbers = [1, 2, 3]
let nothing
let empty = null
let greet = function () { return "Hi!" }
let greeting = new greet()

console.log("object" === typeof firstName)
console.log("object" === typeof lastName)
console.log("object" === typeof user)
console.log("object" === typeof numbers)
console.log("object" === typeof empty)
console.log("object" === typeof nothing)
console.log("object" === typeof greet)
console.log("object" === typeof greeting)
- - + + \ No newline at end of file diff --git a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionDescription.html b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionDescription.html index 903268495..700c04b0b 100644 --- a/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionDescription.html +++ b/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Większość wyrażeń porównania z typem object zaloguje do konsoli wartości true. Wyjątkami będą lastName, nothing, i greet.

Zmienna firstName zawiera obiekt utworzony za pomocą wywołania konstruktora String z użyciem operatora new. Powoduje to zwrócenie obiektu String który jest typem obiektu.

Zmienna lastName zawiera ciąg znaków o podstawowym typie string, stworzonego poprzez wywołanie funkcji String bez użycia operatora new, czyli bez intencji tworzenia nowego obiektu.

Zmienna user otrzymuje wartość typowego JavaScriptowego obiektu definiowanego za pomocą nawiasów klamrowych. Nie jest zaskoczeniem, że typeof zwraca dla takiej wartości object.

Zmienna numbers zawiera tablicę, czyli Array, a w JavaScript Array jest obiektem.

Zmienna nothing jest zadeklarowana bez przypisania wartości. Wywołanie jej zwraca więc wartość undefined, która jest jednocześnie typem podstawowym. typeof undefined zwraca więc undefined.

Zmienna empty zawiera wartość null. Działanie typeof dla wartości null zwróci object i jest to powszechnie uznane za błąd języka JavaScript (patrz podlinkowany artykuł The history of “typeof null”).

Bug ten celowo nie jest jednak naprawiany w działaniu języka ze względu na zachowanie kompatybilności wstecznej z wieloma istniejącymi skryptami, które polegają na tym błędnym działaniu.

Zmienna greet jest funkcją i mimo, że funkcje są też pierwszorzędnymi obiektami w JavaScript, to jednak poprzez typeof zgłaszają swój typ danych jako function.

Zmienna greeting przechowuje obiekt, utworzony poprzez użycie operatora new wywołującego funkcję greet jako konstruktora obiektu.

- - + + \ No newline at end of file diff --git a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d.html b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d.html index bf12bfa6e..24be1a0cc 100644 --- a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d.html +++ b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #072

🪲 Znajdź buga

console.log(false ? true : false)
console.log(null ? true : false)
console.log(undefined ? true : false)
console.log(0 ? true : false)
console.log("" ? true : false)
console.log([] ? true : false)
console.log("0" ? true : false)
console.log(" \n " ? true : false)

console.log(null == undefined)
console.log(undefined == false)
console.log(null == false)

console.log("" == false)
console.log("" == 0)
console.log("" == [])
console.log([] == false)
console.log("0" == 0)
console.log(" \n " == 0)

Zagrajmy w prawda czy fałsz.

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

console.log(false ? true : false) // false
console.log(null ? true : false) // false
console.log(undefined ? true : false) // false
console.log(0 ? true : false) // false
console.log("" ? true : false) // false
console.log([] ? true : false) // true
console.log("0" ? true : false) // true
console.log(" \n " ? true : false) // true

console.log(null == undefined) // true
console.log(undefined == false) // false (!)
console.log(null == false) // false (!)

console.log("" == false) // true
console.log("" == 0) // true
console.log("" == []) // true (!)
console.log([] == false) // true (!)
console.log("0" == 0) // true (!)
console.log(" \n " == 0) // true (!)

W komentarzach obok zwracanych wartości dodałem wykrzykniki dla rozwiązań, które w mojej ocenie są najbardziej nielogiczne.

JavaScript nie jest spójny w kwesti działania operatora porównania == w porównaniu do ewaluacji wyrażeń warunkowych.

Porównując ze sobą dwa elementy, które mają różne typy i oczekując zwrócenia wartości logicznej true/false, intuicyjnie możemy zakładać (błędnie), że algorytm porównania będzie dążył do sprowadzenia odmiennych typów danych do wartości logicznych.

Tak robi instrukcja warunkowa, która przyjmując typ danych inny od wartości logicznej, konwertuje ją na taką.

Operator == przypadku porównywanie różniących się typów danych, najczęściej dąży jednak do sprowadzenia różnych typów danych do wartości liczbowych.

Stąd też powszechna opinia, aby unikać używania operatora ==, gdyż zwraca on wartość logiczną, ale sam nie dąży do konwersji odmiennych typów danych na wartości logiczne przed ich porównaniem.

Algorytm stojący za ==, jeśli porównuje różne typy danych, w pierwszej kolejności dąży on do sprowadzenia ich do wartości prymitywnych (konwertując obiekty do wartości liczbowych lub ciągi znaków).

Następnie, jeśli typy porównywanych danych dalej się różnicą, algorytm dąży on do sprowadzenia wartości prymitywnych do wartości liczbowych.

Algorytm konwersji do wartości liczbowych wprowadza dodatkowe zamieszanie, konwertując wartości, które z definicji w języku JavaScript są prawdziwe (jak np. ciąg białych znaków, puste tablice), do wartości liczbowych 0, które to z kolei, z definicji są fałszywe.

Gdy porównujemy różne typy danych za pomocą operatora porównania ==, bliskie prawdy jest zapisanie takiego porównania z użyciem konwersji porównywanych danych do wartości liczbowych oraz operatora ścisłego porównania Number(a) === Number(b).

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugCode.html b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugCode.html index c13e6085a..6bcff9432 100644 --- a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugCode.html +++ b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(false ? true : false)
console.log(null ? true : false)
console.log(undefined ? true : false)
console.log(0 ? true : false)
console.log("" ? true : false)
console.log([] ? true : false)
console.log("0" ? true : false)
console.log(" \n " ? true : false)

console.log(null == undefined)
console.log(undefined == false)
console.log(null == false)

console.log("" == false)
console.log("" == 0)
console.log("" == [])
console.log([] == false)
console.log("0" == 0)
console.log(" \n " == 0)
- - + + \ No newline at end of file diff --git a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugDescription.html b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugDescription.html index aed097220..b4c290fb4 100644 --- a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugDescription.html +++ b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Zagrajmy w prawda czy fałsz.

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/links.html b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/links.html index 0eb7ef4e5..9df466d51 100644 --- a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/links.html +++ b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionCode.html b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionCode.html index 7a60a4c4b..c48c2621b 100644 --- a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionCode.html +++ b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(false ? true : false) // false
console.log(null ? true : false) // false
console.log(undefined ? true : false) // false
console.log(0 ? true : false) // false
console.log("" ? true : false) // false
console.log([] ? true : false) // true
console.log("0" ? true : false) // true
console.log(" \n " ? true : false) // true

console.log(null == undefined) // true
console.log(undefined == false) // false (!)
console.log(null == false) // false (!)

console.log("" == false) // true
console.log("" == 0) // true
console.log("" == []) // true (!)
console.log([] == false) // true (!)
console.log("0" == 0) // true (!)
console.log(" \n " == 0) // true (!)
- - + + \ No newline at end of file diff --git a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionDescription.html b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionDescription.html index 347957a0c..96a414263 100644 --- a/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionDescription.html +++ b/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W komentarzach obok zwracanych wartości dodałem wykrzykniki dla rozwiązań, które w mojej ocenie są najbardziej nielogiczne.

JavaScript nie jest spójny w kwesti działania operatora porównania == w porównaniu do ewaluacji wyrażeń warunkowych.

Porównując ze sobą dwa elementy, które mają różne typy i oczekując zwrócenia wartości logicznej true/false, intuicyjnie możemy zakładać (błędnie), że algorytm porównania będzie dążył do sprowadzenia odmiennych typów danych do wartości logicznych.

Tak robi instrukcja warunkowa, która przyjmując typ danych inny od wartości logicznej, konwertuje ją na taką.

Operator == przypadku porównywanie różniących się typów danych, najczęściej dąży jednak do sprowadzenia różnych typów danych do wartości liczbowych.

Stąd też powszechna opinia, aby unikać używania operatora ==, gdyż zwraca on wartość logiczną, ale sam nie dąży do konwersji odmiennych typów danych na wartości logiczne przed ich porównaniem.

Algorytm stojący za ==, jeśli porównuje różne typy danych, w pierwszej kolejności dąży on do sprowadzenia ich do wartości prymitywnych (konwertując obiekty do wartości liczbowych lub ciągi znaków).

Następnie, jeśli typy porównywanych danych dalej się różnicą, algorytm dąży on do sprowadzenia wartości prymitywnych do wartości liczbowych.

Algorytm konwersji do wartości liczbowych wprowadza dodatkowe zamieszanie, konwertując wartości, które z definicji w języku JavaScript są prawdziwe (jak np. ciąg białych znaków, puste tablice), do wartości liczbowych 0, które to z kolei, z definicji są fałszywe.

Gdy porównujemy różne typy danych za pomocą operatora porównania ==, bliskie prawdy jest zapisanie takiego porównania z użyciem konwersji porównywanych danych do wartości liczbowych oraz operatora ścisłego porównania Number(a) === Number(b).

- - + + \ No newline at end of file diff --git a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59.html b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59.html index f62d7b9b6..a7420040c 100644 --- a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59.html +++ b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #006

🪲 Znajdź buga

for (var i = 0; i < 10; i++) {
setTimeout(() => console.log(i))
}

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

for (let i = 0; i < 10; i++) {
setTimeout(() => console.log(i))
}

W przykładzie z błędem do konsoli zostanie zalogowana 10 x wartość 10.

Dzieje się tak, ponieważ deklaracja zmiennej za pomocą var tworzy zmienną globalną (dostępną również poza pętlą).

setTimeout() bez podania wartości opóźnienia w drugim argumencie, domyślnie przyjmuje wartości delay jako 0.

Użycie setTimeout() nawet z zerowym opóźnieniem oddelegowuje kod do wykonania go asynchronicznie tj. na końcu kolejki w danej pętli zdarzeń (event loop).

Finalnie 10 wywołań console.log() nastąpi więc dopiero po wykonaniu wszystkich iteracji z pętli.

Ostatnia iteracja pętli ustawi wartość zmiennej i na 10, więc wszystkie 10 wywołań console.log() będzie logowało wartość 10 przypisaną do globalnej zmiennej i.

Aby naprawić ten problem, musimy użyć wyrażenia let zamiast var.

Spowoduje to utworzenie lokalnej zmiennej, dostępnej jedynie w obrębie bloku pętli, bez efektu nadpisywania jej, jak to ma miejsce w przypadku zmiennej globalnej.

for (let i = 0; i < 10; i++) utworzy więc pętlę ze zmienną lokalną i setTimeout() nawet przy wykonaniu logowań do konsoli już po wykonaniu wszystkich iteracji pętli, będzie cały czas miało dostęp do wartości lokalnych użytych w każdej z iteracji.

Zalogowane zostaną wtedy wartości 0, 1, 2, ... zamiast 10, 10, 10, ...

Użycie var wewnątrz pętli będzie miało więc taki sam efekt, jak użycie deklaracji let poza pętlą, tworzącą zmienną globalną.

Deklarując let i, a następie używając tej zmiennej w pętli for (i = 0; i < 10; i++) otrzymamy taki sam (problematyczny) efekt, jak w przypadku użycia for (var i = 0; i < 10; i++).

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugCode.html b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugCode.html index 876aa0a50..efab2a06b 100644 --- a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugCode.html +++ b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
for (var i = 0; i < 10; i++) {
setTimeout(() => console.log(i))
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugDescription.html b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugDescription.html index 6ff89ded2..5a74d66b6 100644 --- a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugDescription.html +++ b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/links.html b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/links.html index 3c4b95c8b..f19943f50 100644 --- a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/links.html +++ b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionCode.html b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionCode.html index d4f1e7303..735bd8c77 100644 --- a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionCode.html +++ b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
for (let i = 0; i < 10; i++) {
setTimeout(() => console.log(i))
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionDescription.html b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionDescription.html index f25a749ab..1dcdf7d62 100644 --- a/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionDescription.html +++ b/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem do konsoli zostanie zalogowana 10 x wartość 10.

Dzieje się tak, ponieważ deklaracja zmiennej za pomocą var tworzy zmienną globalną (dostępną również poza pętlą).

setTimeout() bez podania wartości opóźnienia w drugim argumencie, domyślnie przyjmuje wartości delay jako 0.

Użycie setTimeout() nawet z zerowym opóźnieniem oddelegowuje kod do wykonania go asynchronicznie tj. na końcu kolejki w danej pętli zdarzeń (event loop).

Finalnie 10 wywołań console.log() nastąpi więc dopiero po wykonaniu wszystkich iteracji z pętli.

Ostatnia iteracja pętli ustawi wartość zmiennej i na 10, więc wszystkie 10 wywołań console.log() będzie logowało wartość 10 przypisaną do globalnej zmiennej i.

Aby naprawić ten problem, musimy użyć wyrażenia let zamiast var.

Spowoduje to utworzenie lokalnej zmiennej, dostępnej jedynie w obrębie bloku pętli, bez efektu nadpisywania jej, jak to ma miejsce w przypadku zmiennej globalnej.

for (let i = 0; i < 10; i++) utworzy więc pętlę ze zmienną lokalną i setTimeout() nawet przy wykonaniu logowań do konsoli już po wykonaniu wszystkich iteracji pętli, będzie cały czas miało dostęp do wartości lokalnych użytych w każdej z iteracji.

Zalogowane zostaną wtedy wartości 0, 1, 2, ... zamiast 10, 10, 10, ...

Użycie var wewnątrz pętli będzie miało więc taki sam efekt, jak użycie deklaracji let poza pętlą, tworzącą zmienną globalną.

Deklarując let i, a następie używając tej zmiennej w pętli for (i = 0; i < 10; i++) otrzymamy taki sam (problematyczny) efekt, jak w przypadku użycia for (var i = 0; i < 10; i++).

- - + + \ No newline at end of file diff --git a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0.html b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0.html index f3f61b5ca..bf8585a57 100644 --- a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0.html +++ b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #038

🪲 Znajdź buga

const now = new Date()

const months = new Map([
[1, "January"],
[2, "February"],
[3, "March"],
[4, "April"],
[5, "May"],
[6, "June"],
[7, "July"],
[8, "August"],
[9, "September"],
[10, "October"],
[11, "November"],
[12, "December"],
])

const weekdays = new Map([
[1, "Monday"],
[2, "Tuesday"],
[3, "Wednesday"],
[4, "Thursday"],
[5, "Friday"],
[6, "Saturday"],
[7, "Sunday"],
])

console.log(now.toISOString())
console.log(now.getDate())
console.log(months.get(now.getMonth()))
console.log(weekdays.get(now.getDay()))

Czy powyższy kod zaloguje do konsoli poprawny dzień miesiąca, nazwę miesiąca i nazwę dnia tygodnia?

🧪 Rozwiązanie

const now = new Date()

const months = new Map([
[1, "January"],
[2, "February"],
[3, "March"],
[4, "April"],
[5, "May"],
[6, "June"],
[7, "July"],
[8, "August"],
[9, "September"],
[10, "October"],
[11, "November"],
[12, "December"],
])

const weekdays = new Map([
[0, "Sunday"],
[1, "Monday"],
[2, "Tuesday"],
[3, "Wednesday"],
[4, "Thursday"],
[5, "Friday"],
[6, "Saturday"],
])

console.log(now.toISOString())
console.log(now.getDate())
console.log(months.get(now.getMonth() + 1))
console.log(weekdays.get(now.getDay()))

W przykładzie z błędem, poprawność działania kodu częściowo zależy od dnia, w którym zostanie uruchomiony.

new Date() generuje aktualną datę w lokalnej strefie czasowej.

Polska leży w strefie czasowej +1h (czas zimowy) lub +2h (czas letni) w stosunku do strefy UTC.

Metoda toISOString() zwraca datę w formacie UTC. Jeśli więc kod zostanie uruchomiony np. o godz. 00:30 w polskiej stefie czasowej, to toISOString() zwróci w odpowiedzi datę z dnia poprzedniego polskiej strefy czasowej.

Pozostałe metody występują w dwóch wariantach.

Pierwsze, bez UTC w nazwie metody, zwracają datę czasu lokalnego (tego, w którym został uruchomiony kod). Drugie, z UTC w nazwie metody, zwracają datę ze strefy czasowej UTC.

Przykładowo, wariant getDate() zwróci dzień miesiąca czasu lokalnego, a wariant getUTCDate() dzień miesiąca czasu UTC.

Metoda getDate() nie sprawia niespodzianek, zwracając dzień miesiąca w formie liczbowej (w przedziale od 1 do 31).

Metoda getMonth() jest już nieco mniej intuicyjna. Zwraca bowiem numer miesiąca, ale numeracja miesięcy zaczyna się od 0.

Styczeń to 0, grudzień to 11.

Jeśli chcemy przypisać nazwy miesięcy do wartości z zakresu od 1 do 12, to wywołując getMonth() musimy pamiętać, aby zawsze dodawać do zwracanej wartości +1.

Metoda getDay() zwraca numer dnia tygodnia w zakresie liczbowym od 0 do 6. Dodatkowo musimy jednak pamiętać, że numerowanie dni tygodnia zaczyna się od niedzieli (0), a kończy na sobocie (6).

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugCode.html b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugCode.html index c9d1d6eae..11c9c84d4 100644 --- a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugCode.html +++ b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const now = new Date()

const months = new Map([
[1, "January"],
[2, "February"],
[3, "March"],
[4, "April"],
[5, "May"],
[6, "June"],
[7, "July"],
[8, "August"],
[9, "September"],
[10, "October"],
[11, "November"],
[12, "December"],
])

const weekdays = new Map([
[1, "Monday"],
[2, "Tuesday"],
[3, "Wednesday"],
[4, "Thursday"],
[5, "Friday"],
[6, "Saturday"],
[7, "Sunday"],
])

console.log(now.toISOString())
console.log(now.getDate())
console.log(months.get(now.getMonth()))
console.log(weekdays.get(now.getDay()))
- - + + \ No newline at end of file diff --git a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugDescription.html b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugDescription.html index 0ab6d25ed..6fb0520f0 100644 --- a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugDescription.html +++ b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy powyższy kod zaloguje do konsoli poprawny dzień miesiąca, nazwę miesiąca i nazwę dnia tygodnia?

- - + + \ No newline at end of file diff --git a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/links.html b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/links.html index 5a723bce1..118ff05e6 100644 --- a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/links.html +++ b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionCode.html b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionCode.html index 9879d7d83..5d9eabbef 100644 --- a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionCode.html +++ b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const now = new Date()

const months = new Map([
[1, "January"],
[2, "February"],
[3, "March"],
[4, "April"],
[5, "May"],
[6, "June"],
[7, "July"],
[8, "August"],
[9, "September"],
[10, "October"],
[11, "November"],
[12, "December"],
])

const weekdays = new Map([
[0, "Sunday"],
[1, "Monday"],
[2, "Tuesday"],
[3, "Wednesday"],
[4, "Thursday"],
[5, "Friday"],
[6, "Saturday"],
])

console.log(now.toISOString())
console.log(now.getDate())
console.log(months.get(now.getMonth() + 1))
console.log(weekdays.get(now.getDay()))
- - + + \ No newline at end of file diff --git a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionDescription.html b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionDescription.html index 256a5d4a6..209f07de1 100644 --- a/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionDescription.html +++ b/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, poprawność działania kodu częściowo zależy od dnia, w którym zostanie uruchomiony.

new Date() generuje aktualną datę w lokalnej strefie czasowej.

Polska leży w strefie czasowej +1h (czas zimowy) lub +2h (czas letni) w stosunku do strefy UTC.

Metoda toISOString() zwraca datę w formacie UTC. Jeśli więc kod zostanie uruchomiony np. o godz. 00:30 w polskiej stefie czasowej, to toISOString() zwróci w odpowiedzi datę z dnia poprzedniego polskiej strefy czasowej.

Pozostałe metody występują w dwóch wariantach.

Pierwsze, bez UTC w nazwie metody, zwracają datę czasu lokalnego (tego, w którym został uruchomiony kod). Drugie, z UTC w nazwie metody, zwracają datę ze strefy czasowej UTC.

Przykładowo, wariant getDate() zwróci dzień miesiąca czasu lokalnego, a wariant getUTCDate() dzień miesiąca czasu UTC.

Metoda getDate() nie sprawia niespodzianek, zwracając dzień miesiąca w formie liczbowej (w przedziale od 1 do 31).

Metoda getMonth() jest już nieco mniej intuicyjna. Zwraca bowiem numer miesiąca, ale numeracja miesięcy zaczyna się od 0.

Styczeń to 0, grudzień to 11.

Jeśli chcemy przypisać nazwy miesięcy do wartości z zakresu od 1 do 12, to wywołując getMonth() musimy pamiętać, aby zawsze dodawać do zwracanej wartości +1.

Metoda getDay() zwraca numer dnia tygodnia w zakresie liczbowym od 0 do 6. Dodatkowo musimy jednak pamiętać, że numerowanie dni tygodnia zaczyna się od niedzieli (0), a kończy na sobocie (6).

- - + + \ No newline at end of file diff --git a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07.html b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07.html index a7b207a35..306fe7812 100644 --- a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07.html +++ b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #064

🪲 Znajdź buga

console.log(Number(undefined))
console.log(Number(null))
console.log(Number(false))
console.log(Number(true))
console.log(Number({}))
console.log(Number([]))

console.log(Number("a"))
console.log(Number("\f"))
console.log(Number("\n"))
console.log(Number("\r"))
console.log(Number("\t"))
console.log(Number("\v"))
console.log(Number("\b"))

console.log(Number(["a"]))
console.log(Number([0]))
console.log(Number(["0"]))
console.log(Number([0, 0]))
console.log(Number([1]))
console.log(Number(["1"]))
console.log(Number([0, 1]))

console.log(Number(""))
console.log(Number(" "))
console.log(Number(" \n \t \f \v "))
console.log(Number(" \n \t \f \v 1 "))

console.log(Number("1e2"))
console.log(Number(1e2))
console.log(Number("0x64"))
console.log(Number(0x64))
console.log(Number("0b01100100"))
console.log(Number(0b01100100))
console.log(Number("\u0031\u0030\u0030"))
console.log(Number("\x31\x30\x30"))

Funkcja Number konwertuje przekazany argument do wartości liczbowej.

Jakie wartości zostaną zalogowane do konsoli w powyższych przykładach?

🧪 Rozwiązanie

console.log(Number(undefined)) // NaN
console.log(Number(null)) // 0
console.log(Number(false)) // 0
console.log(Number(true)) // 1
console.log(Number({})) // NaN
console.log(Number([])) // 0

console.log(Number("a")) // NaN
console.log(Number("\f")) // 0
console.log(Number("\n")) // 0
console.log(Number("\r")) // 0
console.log(Number("\t")) // 0
console.log(Number("\v")) // 0
console.log(Number("\b")) // NaN

console.log(Number(["a"])) // NaN
console.log(Number([0])) // 0
console.log(Number(["0"])) // 0
console.log(Number([0, 0])) // NaN
console.log(Number([1])) // 1
console.log(Number(["1"])) // 1
console.log(Number([0, 1])) // NaN

console.log(Number("")) // 0
console.log(Number(" ")) // 0
console.log(Number(" \n \t \f \v ")) // 0
console.log(Number(" \n \t \f \v 1 ")) // 1

console.log(Number("1e2")) // 100
console.log(Number(1e2)) // 100
console.log(Number("0x64")) // 100
console.log(Number(0x64)) // 100
console.log(Number("0b01100100")) // 100
console.log(Number(0b01100100)) // 100
console.log(Number("\u0031\u0030\u0030")) // 100
console.log(Number("\x31\x30\x30")) // 100

Próba konwersji undefined za pomocą funkcji Number zwróci NaN.

Dla wartości null zostanie jednak zwrócona już wartość liczbowa 0.

Jest to dość powszechnie niespójne zachowanie JavaScriptu, który w różnych sytuacjach różnie konwertuje wartości null i undefined.

Wartości logiczne false/true są konwertowane do liczbowych odpowiedników tj. 0/1.

Mimo, że tablice są również obiektami w języku JavaScript, pusty obiekt zostanie skonwertowany do wartości NaN, a pusta tablica do wartości liczbowej 0.

Ciągi znaków nie zawierających liczb, są konwertowane do wartości NaN.

Poprzedzenie litery znakiem wstecznego ukośnika powoduje tzw. ucieczkę (escape) danego znaku.

Znaki f, n, r, t, v, b poprzedzone \ generują białe znaki (podobnie jak np. spacja).

W zależności od znaku może to być np. wstawienie tabulatora, przejście do nowej linii, itp..

Funkcja Number konwertuje białe znaki (w tym standardowe spacje), do wartości liczbowej 0.

Wyjątkiem jest \b, który oznacza wstawienie wstecznej spacji (backspace) i jest konwertowane do wartości NaN.

W przypadku tablic, jeśli składają się tylko z jednego elementu, Number konwertuje je tak samo, jak gdyby wartości nie były elementem tablicy.

Gdy jednak tablica zawiera więcej niż jeden element, w efekcie konwersji zwracana jest wartość NaN.

Białe znaki łączone w ciąg białych znaków zachowują się tak samo jak pojedyncze, tj. są w całości konwertowane do wartości 0.

Jeśli jednak wśród białych znaków wystąpi wartość liczbowa, jest ona konwertowana do wartości liczbowej, ignorując wszystkie występujące sąsiadujące białe znaki.

Ostatnią grupą są wartości liczbowe zapisywane w innych notacjach lub systemach liczbowych.

1e2 to zapis liczby w notacji naukowej. Litera e jest skrótem od exponential czyli notacji wykładniczej, czyli potęgowania liczby 10. Wartość po literze e to wielkość wykładnika potęgi.

1e2 to więc to samo co 1 * 10 ** 2 (gdzie ** to w JavaScript operator potęgowania).

Upraszczając do zapisu tekstowego, 1 razy 10 do potęgi 2.

Liczba występująca po e oznacza więc ilość zer, które należałoby zapisać stosując standardowy zapis liczby dziesiętnej.

1e2 daje nam więc w standardowym zapisie liczbę dziesiętną 100.

W przypadku konwersji poprzez Number() nie ma znaczenia czy przekażemy taką notację jako ciąg znaków, czyli z użyciem cudzysłowu, czy bez, jako wartość liczbową.

Podobnie sytuacja wygląda w przypadku innych typów oraz systemów zapisu liczb.

0x64 to zapis w systemie szesnastkowym (heksadecymalny) oznaczający liczbę dziesiętną 100.

0x to prefix mówiący o typie notacji, a 64 to faktyczna liczba w systemie szesnastkowym.

0b01100100 to podobna sytuacja. 0b to prefix dla zapisu liczby w systemie binarnym (dwójkowym).

01100100 to faktyczna liczba w systemie dwójkowym, odpowiadająca liczbie 100 w systemie dziesiętnym.

\u0031\u0030\u0030 to ciąg znaków w standardzie kodowania unicode w zapisie szesnastkowym. Każda z liczb odpowiada znakowi z tablicy znaków.

0031 to liczba szesnastkowa, odpowiadająca liczbie dziesiętnej 49, która z kolei jest przypisana do znaku liczby 1 z tablicy znaków.

0030 w zapisie szesnastkowym to 48 w zapisie dziesiętnym i odpowiada mu z tablicy znaków liczba 0.

\u0031\u0030\u0030 to więc finalnie to samo co zapis liczby 100.

Analogicznie wygląda sytuacja z zapisem liczb z prefiksem \x.

Oznacza on również zapis szesnastkowy, jednak w skróconej dwu-znakowej wersji.

Zapis ten daje tym samym do dyspozycji mniejszy zakres z tablicy znaków (bazowe kodowanie, bez rozszerzonych znaków, jak chociażby polskie znaki alfabetu typu ą, ę, itp.).

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugCode.html b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugCode.html index 52fbf10a9..c3a240188 100644 --- a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugCode.html +++ b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(Number(undefined))
console.log(Number(null))
console.log(Number(false))
console.log(Number(true))
console.log(Number({}))
console.log(Number([]))

console.log(Number("a"))
console.log(Number("\f"))
console.log(Number("\n"))
console.log(Number("\r"))
console.log(Number("\t"))
console.log(Number("\v"))
console.log(Number("\b"))

console.log(Number(["a"]))
console.log(Number([0]))
console.log(Number(["0"]))
console.log(Number([0, 0]))
console.log(Number([1]))
console.log(Number(["1"]))
console.log(Number([0, 1]))

console.log(Number(""))
console.log(Number(" "))
console.log(Number(" \n \t \f \v "))
console.log(Number(" \n \t \f \v 1 "))

console.log(Number("1e2"))
console.log(Number(1e2))
console.log(Number("0x64"))
console.log(Number(0x64))
console.log(Number("0b01100100"))
console.log(Number(0b01100100))
console.log(Number("\u0031\u0030\u0030"))
console.log(Number("\x31\x30\x30"))
- - + + \ No newline at end of file diff --git a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugDescription.html b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugDescription.html index 0dfd19f03..7d896ab82 100644 --- a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugDescription.html +++ b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Funkcja Number konwertuje przekazany argument do wartości liczbowej.

Jakie wartości zostaną zalogowane do konsoli w powyższych przykładach?

- - + + \ No newline at end of file diff --git a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/links.html b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/links.html index ba58d6faf..5a6df8386 100644 --- a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/links.html +++ b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionCode.html b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionCode.html index 5495005cc..ddd592d51 100644 --- a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionCode.html +++ b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(Number(undefined)) // NaN
console.log(Number(null)) // 0
console.log(Number(false)) // 0
console.log(Number(true)) // 1
console.log(Number({})) // NaN
console.log(Number([])) // 0

console.log(Number("a")) // NaN
console.log(Number("\f")) // 0
console.log(Number("\n")) // 0
console.log(Number("\r")) // 0
console.log(Number("\t")) // 0
console.log(Number("\v")) // 0
console.log(Number("\b")) // NaN

console.log(Number(["a"])) // NaN
console.log(Number([0])) // 0
console.log(Number(["0"])) // 0
console.log(Number([0, 0])) // NaN
console.log(Number([1])) // 1
console.log(Number(["1"])) // 1
console.log(Number([0, 1])) // NaN

console.log(Number("")) // 0
console.log(Number(" ")) // 0
console.log(Number(" \n \t \f \v ")) // 0
console.log(Number(" \n \t \f \v 1 ")) // 1

console.log(Number("1e2")) // 100
console.log(Number(1e2)) // 100
console.log(Number("0x64")) // 100
console.log(Number(0x64)) // 100
console.log(Number("0b01100100")) // 100
console.log(Number(0b01100100)) // 100
console.log(Number("\u0031\u0030\u0030")) // 100
console.log(Number("\x31\x30\x30")) // 100
- - + + \ No newline at end of file diff --git a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionDescription.html b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionDescription.html index c9e1a9da2..9bc4a6b6b 100644 --- a/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionDescription.html +++ b/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Próba konwersji undefined za pomocą funkcji Number zwróci NaN.

Dla wartości null zostanie jednak zwrócona już wartość liczbowa 0.

Jest to dość powszechnie niespójne zachowanie JavaScriptu, który w różnych sytuacjach różnie konwertuje wartości null i undefined.

Wartości logiczne false/true są konwertowane do liczbowych odpowiedników tj. 0/1.

Mimo, że tablice są również obiektami w języku JavaScript, pusty obiekt zostanie skonwertowany do wartości NaN, a pusta tablica do wartości liczbowej 0.

Ciągi znaków nie zawierających liczb, są konwertowane do wartości NaN.

Poprzedzenie litery znakiem wstecznego ukośnika powoduje tzw. ucieczkę (escape) danego znaku.

Znaki f, n, r, t, v, b poprzedzone \ generują białe znaki (podobnie jak np. spacja).

W zależności od znaku może to być np. wstawienie tabulatora, przejście do nowej linii, itp..

Funkcja Number konwertuje białe znaki (w tym standardowe spacje), do wartości liczbowej 0.

Wyjątkiem jest \b, który oznacza wstawienie wstecznej spacji (backspace) i jest konwertowane do wartości NaN.

W przypadku tablic, jeśli składają się tylko z jednego elementu, Number konwertuje je tak samo, jak gdyby wartości nie były elementem tablicy.

Gdy jednak tablica zawiera więcej niż jeden element, w efekcie konwersji zwracana jest wartość NaN.

Białe znaki łączone w ciąg białych znaków zachowują się tak samo jak pojedyncze, tj. są w całości konwertowane do wartości 0.

Jeśli jednak wśród białych znaków wystąpi wartość liczbowa, jest ona konwertowana do wartości liczbowej, ignorując wszystkie występujące sąsiadujące białe znaki.

Ostatnią grupą są wartości liczbowe zapisywane w innych notacjach lub systemach liczbowych.

1e2 to zapis liczby w notacji naukowej. Litera e jest skrótem od exponential czyli notacji wykładniczej, czyli potęgowania liczby 10. Wartość po literze e to wielkość wykładnika potęgi.

1e2 to więc to samo co 1 * 10 ** 2 (gdzie ** to w JavaScript operator potęgowania).

Upraszczając do zapisu tekstowego, 1 razy 10 do potęgi 2.

Liczba występująca po e oznacza więc ilość zer, które należałoby zapisać stosując standardowy zapis liczby dziesiętnej.

1e2 daje nam więc w standardowym zapisie liczbę dziesiętną 100.

W przypadku konwersji poprzez Number() nie ma znaczenia czy przekażemy taką notację jako ciąg znaków, czyli z użyciem cudzysłowu, czy bez, jako wartość liczbową.

Podobnie sytuacja wygląda w przypadku innych typów oraz systemów zapisu liczb.

0x64 to zapis w systemie szesnastkowym (heksadecymalny) oznaczający liczbę dziesiętną 100.

0x to prefix mówiący o typie notacji, a 64 to faktyczna liczba w systemie szesnastkowym.

0b01100100 to podobna sytuacja. 0b to prefix dla zapisu liczby w systemie binarnym (dwójkowym).

01100100 to faktyczna liczba w systemie dwójkowym, odpowiadająca liczbie 100 w systemie dziesiętnym.

\u0031\u0030\u0030 to ciąg znaków w standardzie kodowania unicode w zapisie szesnastkowym. Każda z liczb odpowiada znakowi z tablicy znaków.

0031 to liczba szesnastkowa, odpowiadająca liczbie dziesiętnej 49, która z kolei jest przypisana do znaku liczby 1 z tablicy znaków.

0030 w zapisie szesnastkowym to 48 w zapisie dziesiętnym i odpowiada mu z tablicy znaków liczba 0.

\u0031\u0030\u0030 to więc finalnie to samo co zapis liczby 100.

Analogicznie wygląda sytuacja z zapisem liczb z prefiksem \x.

Oznacza on również zapis szesnastkowy, jednak w skróconej dwu-znakowej wersji.

Zapis ten daje tym samym do dyspozycji mniejszy zakres z tablicy znaków (bazowe kodowanie, bez rozszerzonych znaków, jak chociażby polskie znaki alfabetu typu ą, ę, itp.).

- - + + \ No newline at end of file diff --git a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0.html b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0.html index 551bd7822..a2c7e7979 100644 --- a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0.html +++ b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #077

🪲 Znajdź buga

const letters = []
letters[0] = "a"
letters[1] = "b"
letters[3] = "d"
letters[-1] = "z"
letters[-2] = "y"

console.log(letters)
console.log(letters.length)
console.log(letters[letters.indexOf(9)])

Jaki efekt będzie miało przypisanie wartości do ujemnego indeksu tablicy? Czy wpłynie to na jej długość?

Co zostanie zalogowane do konsoli w poszczególnych wywołaniach?

🧪 Rozwiązanie

const letters = []
letters[0] = "a"
letters[1] = "b"
letters[3] = "d"
letters[-1] = "z"
letters[-2] = "y"

console.log(letters) // ["a", "b", undefined, "d"]
console.log(letters.length) // 4
console.log(letters[letters.indexOf(9)]) // "z"

Przypisanie wartości do ujemnych indeksów w tablicy powoduje ukrycie tych elementów dla większości metod w prototypie Array.

Przypisując wartości do ujemnych indeksów tablicy, nie zobaczymy tych wartości logując do konsoli tablicę, czy sprawdzając jej długość.

Możemy jednak ręcznie wyciągać wartości odwołując się do tych indeksów np. letters[-2].

Indeks -1 jest zwracany przez niektóre metody (w tym indexOf()) jako informacja o braku szukanej wartości w tablicy.

Wywołując przykładowo letters.indexOf("x") szukalibyśmy ciągu znaków "x" w tablicy letters z zamiarem otrzymania indeksu szukanego elementu.

Jeśli nie zostaje on znaleziony, metoda indexOf() zwraca -1.

Możemy skorzystać z tej własności zacieniając jednocześnie faktyczne działanie kodu.

Wywołując letters.indexOf(9) szukamy indeksu elementu o wartości 9, czyli nie istniejącego w naszej tablicy.

Nie ma znaczenia co przekażemy jako argument do metody indexOf(), tak długo jak będzie to wartość, która w tablicy nie występuje, zwrócony zostanie indeks -1.

letters[letters.indexOf(9)] to tak naprawdę letters[-1], czyli pobranie elementu z tablicy o indeksie -1.

Domyślnie w tablicy nie powinno być elementu pod takim indeksem, ale my przypisaliśmy wcześniej wartość z to tego indeksu.

Być może lepiej byłoby gdyby metoda indexOf() zwracała np. undefined w momencie gdy szukana wartość nie zostaje odnaleziona.

Nie byłoby wtedy furtki dla nie do końca intuicyjne działającego kodu.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugCode.html b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugCode.html index fc1539ba3..08f9419ee 100644 --- a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugCode.html +++ b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const letters = []
letters[0] = "a"
letters[1] = "b"
letters[3] = "d"
letters[-1] = "z"
letters[-2] = "y"

console.log(letters)
console.log(letters.length)
console.log(letters[letters.indexOf(9)])
- - + + \ No newline at end of file diff --git a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugDescription.html b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugDescription.html index e960bcaa0..022c26905 100644 --- a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugDescription.html +++ b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jaki efekt będzie miało przypisanie wartości do ujemnego indeksu tablicy? Czy wpłynie to na jej długość?

Co zostanie zalogowane do konsoli w poszczególnych wywołaniach?

- - + + \ No newline at end of file diff --git a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/links.html b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/links.html index 3c6762939..1fb480eb8 100644 --- a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/links.html +++ b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionCode.html b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionCode.html index 01f5310c7..460d65a00 100644 --- a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionCode.html +++ b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const letters = []
letters[0] = "a"
letters[1] = "b"
letters[3] = "d"
letters[-1] = "z"
letters[-2] = "y"

console.log(letters) // ["a", "b", undefined, "d"]
console.log(letters.length) // 4
console.log(letters[letters.indexOf(9)]) // "z"
- - + + \ No newline at end of file diff --git a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionDescription.html b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionDescription.html index b95ee1048..8a508eb1e 100644 --- a/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionDescription.html +++ b/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Przypisanie wartości do ujemnych indeksów w tablicy powoduje ukrycie tych elementów dla większości metod w prototypie Array.

Przypisując wartości do ujemnych indeksów tablicy, nie zobaczymy tych wartości logując do konsoli tablicę, czy sprawdzając jej długość.

Możemy jednak ręcznie wyciągać wartości odwołując się do tych indeksów np. letters[-2].

Indeks -1 jest zwracany przez niektóre metody (w tym indexOf()) jako informacja o braku szukanej wartości w tablicy.

Wywołując przykładowo letters.indexOf("x") szukalibyśmy ciągu znaków "x" w tablicy letters z zamiarem otrzymania indeksu szukanego elementu.

Jeśli nie zostaje on znaleziony, metoda indexOf() zwraca -1.

Możemy skorzystać z tej własności zacieniając jednocześnie faktyczne działanie kodu.

Wywołując letters.indexOf(9) szukamy indeksu elementu o wartości 9, czyli nie istniejącego w naszej tablicy.

Nie ma znaczenia co przekażemy jako argument do metody indexOf(), tak długo jak będzie to wartość, która w tablicy nie występuje, zwrócony zostanie indeks -1.

letters[letters.indexOf(9)] to tak naprawdę letters[-1], czyli pobranie elementu z tablicy o indeksie -1.

Domyślnie w tablicy nie powinno być elementu pod takim indeksem, ale my przypisaliśmy wcześniej wartość z to tego indeksu.

Być może lepiej byłoby gdyby metoda indexOf() zwracała np. undefined w momencie gdy szukana wartość nie zostaje odnaleziona.

Nie byłoby wtedy furtki dla nie do końca intuicyjne działającego kodu.

- - + + \ No newline at end of file diff --git a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb.html b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb.html index ef50c80f4..be9a1329a 100644 --- a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb.html +++ b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #018

🪲 Znajdź buga

function sum(a, a, c) {
return a + a + c
}

console.log(sum(5, 10, 15))

Czy funkcja sum() zostanie wykonana? Jeśli tak, to jaki zwróci wynik?

🧪 Rozwiązanie

"use strict"

function sum(a, a, c) {
return a + a + c
}

console.log(sum(5, 10, 15))

W przykładzie z błędem, do konsoli zostanie zalogowany wynik 35.

Zdublowanie nazwy parametru w deklaracji funkcji prowadzi do nadpisania wartości przez ostatni nadpisujący parametr.

W naszym przypadku a + a + c z przekazanymi argumentami 5, 10, 15 prowadzi do wykonania działania 10 + 10 + 15.

Wystąpienie takiej sytuacji powinno być jednak zgłoszone przez JavaScript jako błąd składniowy.

Nie otrzymujemy jednak takiego błędu, ponieważ kod z przykładu działa w trybie nieścisłym.

Aby aktywować tryb ścisły, musimy użyć deklaracji "use strict".

Stosuje się ją na początku pliku, jeśli chcemy aktywować tryb ścisły w całym pliku, lub na początku wnętrza definiowanej funkcji, jeśli tryb ścisły ma być aktywny tylko dla danej funkcji.

Tryb ścisły jest też domyślnie aktywowany w JavaScriptowych modułach. Używając więc eksportu lub importu np. export function sum(a, a, c) też aktywujemy tryb ścisły.

Ważne: brak zgłoszonego błędu w przypadku nadpisywania parametrów funkcji to nie jedyna sytuacja, w której wykonywany kod może zachować się inaczej w zależności od aktywnego, bądź nie, trybu ścisłego.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugCode.html b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugCode.html index f2b382c60..01d6d3f1e 100644 --- a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugCode.html +++ b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function sum(a, a, c) {
return a + a + c
}

console.log(sum(5, 10, 15))
- - + + \ No newline at end of file diff --git a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugDescription.html b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugDescription.html index b51656ae5..69b4459bb 100644 --- a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugDescription.html +++ b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy funkcja sum() zostanie wykonana? Jeśli tak, to jaki zwróci wynik?

- - + + \ No newline at end of file diff --git a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/links.html b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/links.html index c1744b16c..3b2810801 100644 --- a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/links.html +++ b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionCode.html b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionCode.html index a66fca4f9..df846b780 100644 --- a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionCode.html +++ b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
"use strict"

function sum(a, a, c) {
return a + a + c
}

console.log(sum(5, 10, 15))
- - + + \ No newline at end of file diff --git a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionDescription.html b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionDescription.html index c99d61fee..ee7f03644 100644 --- a/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionDescription.html +++ b/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, do konsoli zostanie zalogowany wynik 35.

Zdublowanie nazwy parametru w deklaracji funkcji prowadzi do nadpisania wartości przez ostatni nadpisujący parametr.

W naszym przypadku a + a + c z przekazanymi argumentami 5, 10, 15 prowadzi do wykonania działania 10 + 10 + 15.

Wystąpienie takiej sytuacji powinno być jednak zgłoszone przez JavaScript jako błąd składniowy.

Nie otrzymujemy jednak takiego błędu, ponieważ kod z przykładu działa w trybie nieścisłym.

Aby aktywować tryb ścisły, musimy użyć deklaracji "use strict".

Stosuje się ją na początku pliku, jeśli chcemy aktywować tryb ścisły w całym pliku, lub na początku wnętrza definiowanej funkcji, jeśli tryb ścisły ma być aktywny tylko dla danej funkcji.

Tryb ścisły jest też domyślnie aktywowany w JavaScriptowych modułach. Używając więc eksportu lub importu np. export function sum(a, a, c) też aktywujemy tryb ścisły.

Ważne: brak zgłoszonego błędu w przypadku nadpisywania parametrów funkcji to nie jedyna sytuacja, w której wykonywany kod może zachować się inaczej w zależności od aktywnego, bądź nie, trybu ścisłego.

- - + + \ No newline at end of file diff --git a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8.html b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8.html index 6aa9c5a23..187f54733 100644 --- a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8.html +++ b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #010

🪲 Znajdź buga

function returnDummyObject() {
return
{
foo: "bar"
}
}

console.log(returnDummyObject())

Chcemy stworzyć prostą funkcję, która zwraca obiekt. Co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

function returnDummyObject() {
return {
foo: "bar"
}
}

console.log(returnDummyObject())

W przykładzie z błędem, w konsoli zobaczymy zalogowaną wartość undefined.

Winowajcom takiego efektu jest mechanizm ASI (skrót z ang. od Automatic Semicolon Insertion).

Język JavaScript nie wymaga wyraźnego stawiania średników na końcu wierszy. Dzieje się to automatycznie w momencie interpretowania kodu.

Są jednak pewne sytuacje, w których musimy wyraźnie postawić średnik (np. chcąc umieścić więcej niż 1 wyrażenie w jednym wierszu).

Są też takie, w których nie możemy rozdzielić kodu na wiele wierszy.

I w naszym przykładzie mamy tą drugą sytuację.

Automatyczne wstawianie średników przez JavaScript, w przykładzie z błędem, automatycznie wstawia średnik na końcu drugiego wiersza, przez co jest on interpretowany jako return;.

To z kolei wpływa na całkowite pominięcie obiektu { foo: "bar" }, gdyż jest on zdefiniowany już po deklaracji zakańczającej wykonywanie funkcji.

Przenosząc znak otwarcia klamrowego nawiasu do wiersza z return, otrzymamy pożądany efekt. Z funkcji zwrócony zostanie obiekt, a nie undefined.

Pewnym ułatwieniem w wychwyceniu tego błędu jest automatyczne kolorowanie składni w edytorze kodu. Kod, który nie zostanie wykonany w funkcji ze względu na wystąpienie wyrażenia return, zostaje wizualnie oznaczony przyciemnieniem kolorystyki kodu.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugCode.html b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugCode.html index fd55714c4..cd0801fe2 100644 --- a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugCode.html +++ b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function returnDummyObject() {
return
{
foo: "bar"
}
}

console.log(returnDummyObject())
- - + + \ No newline at end of file diff --git a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugDescription.html b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugDescription.html index cd96da7d6..c1a4a8636 100644 --- a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugDescription.html +++ b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy stworzyć prostą funkcję, która zwraca obiekt. Co zostanie zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/links.html b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/links.html index 3e38dbf42..0d71b553d 100644 --- a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/links.html +++ b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionCode.html b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionCode.html index 42f786887..f2e436dd2 100644 --- a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionCode.html +++ b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function returnDummyObject() {
return {
foo: "bar"
}
}

console.log(returnDummyObject())
- - + + \ No newline at end of file diff --git a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionDescription.html b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionDescription.html index eedd4c726..17ece8225 100644 --- a/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionDescription.html +++ b/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, w konsoli zobaczymy zalogowaną wartość undefined.

Winowajcom takiego efektu jest mechanizm ASI (skrót z ang. od Automatic Semicolon Insertion).

Język JavaScript nie wymaga wyraźnego stawiania średników na końcu wierszy. Dzieje się to automatycznie w momencie interpretowania kodu.

Są jednak pewne sytuacje, w których musimy wyraźnie postawić średnik (np. chcąc umieścić więcej niż 1 wyrażenie w jednym wierszu).

Są też takie, w których nie możemy rozdzielić kodu na wiele wierszy.

I w naszym przykładzie mamy tą drugą sytuację.

Automatyczne wstawianie średników przez JavaScript, w przykładzie z błędem, automatycznie wstawia średnik na końcu drugiego wiersza, przez co jest on interpretowany jako return;.

To z kolei wpływa na całkowite pominięcie obiektu { foo: "bar" }, gdyż jest on zdefiniowany już po deklaracji zakańczającej wykonywanie funkcji.

Przenosząc znak otwarcia klamrowego nawiasu do wiersza z return, otrzymamy pożądany efekt. Z funkcji zwrócony zostanie obiekt, a nie undefined.

Pewnym ułatwieniem w wychwyceniu tego błędu jest automatyczne kolorowanie składni w edytorze kodu. Kod, który nie zostanie wykonany w funkcji ze względu na wystąpienie wyrażenia return, zostaje wizualnie oznaczony przyciemnieniem kolorystyki kodu.

- - + + \ No newline at end of file diff --git a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b.html b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b.html index 34d4c1392..3ca4a7fb6 100644 --- a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b.html +++ b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #021

🪲 Znajdź buga

fetch("https://api.spacexdata.com/v4/404")
.then((response) => {
return response.json()
})
.then((json) => {
console.log(json)
})
.catch((error) => {
if (error.status === 404) {
return console.error("Page not found")
}

return console.error(error)
})

Chcemy odpytać API za pomocą fetch(), ale endpoint zwraca nam stronę błędu 404. Jaki będzie efekt działania powyższego kodu?

🧪 Rozwiązanie

fetch("https://api.spacexdata.com/v4/404")
.then((response) => {
if (!response.ok) {
throw new Error("Response not ok", {
cause: response,
})
}

return response.json()
})
.then((json) => {
console.log(json)
})
.catch((error) => {
if (error.cause.status === 404) {
return console.error("Page not found")
}

console.error(error)
})

Po uruchomieniu kodu z przykładu z błędem, w konsoli ujrzymy Error: Unexpected token 'N', "Not Found" is not valid JSON.

API, którego użyłem do tego przykładu zwraca strony z błędem (404) w formie czystego tekstu. Tekst Not Found nie jest więc prawidłowym formatem JSON, więc wywołanie response.json() wyrzuca błąd, który zostaje przechwycony w sekcji catch().

W sekcji catch() założyłem, że wyrzucony obiekt błędu, może w jakiś sposób znać status z obiektu response.

Moglibyśmy co prawda stworzyć stałą i przypisać do niej obiekt błędu const myError = Error, a następnie dodać własność status i przypisać do niej wartość z response, dodając kod myError.status = response.status.

Musielibyśmy jednak sami obsłużyć wyrzucanie takiego błędu przez throw myError.

Po pierwsze dodajemy więc sprawdzanie własność ok w obiekcie response. Jeśli jest to wartość fałszywa, to znaczy, że kod odpowiedzi z odpytywanej strony był inny niż z zakresu 200-299.

Dodajemy więc instrukcję warunkową, która sprawdza poprzez negację if (!response.ok). Jeśli warunek zostanie spełniony to samodzielnie wyrzucamy błąd, aby później obsłużyć go w sekcji catch().

Aby w łatwy sposób uzyskać dostęp do obiektu response w wychwyconym błędzie, przekazujemy go do obiektu Error jako drugi argument z obiektem opcji i własnością cause.

Finalnie wychwycony błąd w error.cause będzie zawierał cały obiekt response. Możemy więc już łatwo obsłużyć kody błędów w catch() poprzez error.cause.status.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugCode.html b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugCode.html index 314abb671..2c9104768 100644 --- a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugCode.html +++ b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
fetch("https://api.spacexdata.com/v4/404")
.then((response) => {
return response.json()
})
.then((json) => {
console.log(json)
})
.catch((error) => {
if (error.status === 404) {
return console.error("Page not found")
}

return console.error(error)
})
- - + + \ No newline at end of file diff --git a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugDescription.html b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugDescription.html index d0454c0a4..25222d817 100644 --- a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugDescription.html +++ b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy odpytać API za pomocą fetch(), ale endpoint zwraca nam stronę błędu 404. Jaki będzie efekt działania powyższego kodu?

- - + + \ No newline at end of file diff --git a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/links.html b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/links.html index 745bc8626..c74872177 100644 --- a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/links.html +++ b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionCode.html b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionCode.html index ba1b50667..d073427c6 100644 --- a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionCode.html +++ b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
fetch("https://api.spacexdata.com/v4/404")
.then((response) => {
if (!response.ok) {
throw new Error("Response not ok", {
cause: response,
})
}

return response.json()
})
.then((json) => {
console.log(json)
})
.catch((error) => {
if (error.cause.status === 404) {
return console.error("Page not found")
}

console.error(error)
})
- - + + \ No newline at end of file diff --git a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionDescription.html b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionDescription.html index be3832635..5d92c8d27 100644 --- a/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionDescription.html +++ b/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Po uruchomieniu kodu z przykładu z błędem, w konsoli ujrzymy Error: Unexpected token 'N', "Not Found" is not valid JSON.

API, którego użyłem do tego przykładu zwraca strony z błędem (404) w formie czystego tekstu. Tekst Not Found nie jest więc prawidłowym formatem JSON, więc wywołanie response.json() wyrzuca błąd, który zostaje przechwycony w sekcji catch().

W sekcji catch() założyłem, że wyrzucony obiekt błędu, może w jakiś sposób znać status z obiektu response.

Moglibyśmy co prawda stworzyć stałą i przypisać do niej obiekt błędu const myError = Error, a następnie dodać własność status i przypisać do niej wartość z response, dodając kod myError.status = response.status.

Musielibyśmy jednak sami obsłużyć wyrzucanie takiego błędu przez throw myError.

Po pierwsze dodajemy więc sprawdzanie własność ok w obiekcie response. Jeśli jest to wartość fałszywa, to znaczy, że kod odpowiedzi z odpytywanej strony był inny niż z zakresu 200-299.

Dodajemy więc instrukcję warunkową, która sprawdza poprzez negację if (!response.ok). Jeśli warunek zostanie spełniony to samodzielnie wyrzucamy błąd, aby później obsłużyć go w sekcji catch().

Aby w łatwy sposób uzyskać dostęp do obiektu response w wychwyconym błędzie, przekazujemy go do obiektu Error jako drugi argument z obiektem opcji i własnością cause.

Finalnie wychwycony błąd w error.cause będzie zawierał cały obiekt response. Możemy więc już łatwo obsłużyć kody błędów w catch() poprzez error.cause.status.

- - + + \ No newline at end of file diff --git a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6.html b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6.html index cffbdce2f..de76e66d1 100644 --- a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6.html +++ b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6.html @@ -7,15 +7,15 @@ - - + +
Przejdź do głównej zawartości

Bug #065

🪲 Znajdź buga

const c = "constructor"
c[c][c](`console.log("It's alive!")`)()

Czy powyższy kod zadziała poprawnie i do konsoli zostanie zalogowany tekst It's alive!?

🧪 Rozwiązanie

const c = "constructor"
c[c][c](`console.log("It's alive!")`)()

Tak! W kodzie nie ma buga, wszystko zadziała poprawnie.

Wyjaśnienia wymaga jednak kwestia, dlaczego ciąg znaków został wykonany.

W procesie tworzenia obiektów udział biorą funkcje nazywane konstruktorami.

W utworzonym obiekcie możemy dostać się do takiej funkcji uruchamiając na niej metodę o nazwie constructor.

"".constructor zwróci więc funkcję konstruktora obiektu ciągu znaków, czyli String.

Przypisując ciąg znaków "constructor" do stałej, a później używając jej w c[c][c], uzyskamy ten sam efekt co wywołując kod "constructor".constructor.constructor.

Wiemy już, że konstruktorem ciągu znaków jest funkcja String.

Idąc krok dalej, sprawdzamy jaki konstruktor bierze udział w procesie tworzenia obiektu ciągu znaków, czyli ekwiwalent wywołania String.constructor.

Okazuje się, że zwrócony zostaje konstruktor funkcji, czyli Function.

c[c][c]() to więc finalnie to samo co Function().

W JavaScript do tworzenia funkcji możemy użyć funkcji konstruktora obiektu funkcji, przekazując jako argument ciąg znaków, który zostanie wykonany jako ciało funkcji.

Function(`console.log("It's alive!")`) tworzy więc nową funkcję, której ciałem staje się przekazany ciąg znaków.

Działaniem przypomina to funkcję eval(), która również przetwarza przekazany w argumencie ciąg znaków do postaci wykonywanego kodu.

Finalnie wykonujemy nowo utworzoną funkcję poprzez dodanie nawiasów na końcu Function(`console.log("It's alive!")`)().

Otrzymujemy ten sam efekt, który dało nam wywołanie\ c[c][c](`console.log("It's alive!")`)().

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugCode.html b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugCode.html index e1c1c0144..6f1d03d01 100644 --- a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugCode.html +++ b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const c = "constructor"
c[c][c](`console.log("It's alive!")`)()
- - + + \ No newline at end of file diff --git a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugDescription.html b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugDescription.html index 5dd480fde..36be951df 100644 --- a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugDescription.html +++ b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy powyższy kod zadziała poprawnie i do konsoli zostanie zalogowany tekst It's alive!?

- - + + \ No newline at end of file diff --git a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/links.html b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/links.html index 6d218bfcd..4b1faf16c 100644 --- a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/links.html +++ b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionCode.html b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionCode.html index d53467b2b..2ba64618a 100644 --- a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionCode.html +++ b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const c = "constructor"
c[c][c](`console.log("It's alive!")`)()
- - + + \ No newline at end of file diff --git a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionDescription.html b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionDescription.html index 901bc1aa9..0c1d22a67 100644 --- a/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionDescription.html +++ b/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionDescription.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Tak! W kodzie nie ma buga, wszystko zadziała poprawnie.

Wyjaśnienia wymaga jednak kwestia, dlaczego ciąg znaków został wykonany.

W procesie tworzenia obiektów udział biorą funkcje nazywane konstruktorami.

W utworzonym obiekcie możemy dostać się do takiej funkcji uruchamiając na niej metodę o nazwie constructor.

"".constructor zwróci więc funkcję konstruktora obiektu ciągu znaków, czyli String.

Przypisując ciąg znaków "constructor" do stałej, a później używając jej w c[c][c], uzyskamy ten sam efekt co wywołując kod "constructor".constructor.constructor.

Wiemy już, że konstruktorem ciągu znaków jest funkcja String.

Idąc krok dalej, sprawdzamy jaki konstruktor bierze udział w procesie tworzenia obiektu ciągu znaków, czyli ekwiwalent wywołania String.constructor.

Okazuje się, że zwrócony zostaje konstruktor funkcji, czyli Function.

c[c][c]() to więc finalnie to samo co Function().

W JavaScript do tworzenia funkcji możemy użyć funkcji konstruktora obiektu funkcji, przekazując jako argument ciąg znaków, który zostanie wykonany jako ciało funkcji.

Function(`console.log("It's alive!")`) tworzy więc nową funkcję, której ciałem staje się przekazany ciąg znaków.

Działaniem przypomina to funkcję eval(), która również przetwarza przekazany w argumencie ciąg znaków do postaci wykonywanego kodu.

Finalnie wykonujemy nowo utworzoną funkcję poprzez dodanie nawiasów na końcu Function(`console.log("It's alive!")`)().

Otrzymujemy ten sam efekt, który dało nam wywołanie\ c[c][c](`console.log("It's alive!")`)().

- - + + \ No newline at end of file diff --git a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815.html b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815.html index d780eee0a..09011a724 100644 --- a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815.html +++ b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #051

🪲 Znajdź buga

const string = "code"
const stringified = JSON.stringify("code")

console.log(string === stringified)

Czy porównanie zaloguje do konsoli prawdę, czy fałsz?

🧪 Rozwiązanie

const string = '"code"'
const stringified = JSON.stringify("code")

console.log(string === stringified)

W przykładzie z błędem zostanie zalogowana wartość false.

JSON.stringify() zwraca ciąg znaków w formacie JSON (skrót od JavaScript Object Notation).

Możliwość odwrócenia tego procesu zapewnia JSON.parse().

Format JSON jest ciągiem znaków, więc wszelkie wartości z JavaScript muszą być zaprezentowane jako ciąg znaków.

Jak więc w JSON odróżnić np. ciąg znaków od wartości liczbowej, albo logicznej?

Ciąg znaków prezentowany jest w podwójnym cudzysłowie, podczas gdy inne wartości prymitywne, bez.

Do stałej stringified przypisany zostaje więc ciąg znaków "code".

Chcą przypisać taką wartość ręcznie, musielibyśmy użyć \ dla uniknięcia wewnętrznych cudzysłowów, definiując to jako "\"code\"", lub nieco prościej, używając pojedynczego cudzysłowu '"code"'.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugCode.html b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugCode.html index 73a2089b0..bd3b6ebc5 100644 --- a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugCode.html +++ b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const string = "code"
const stringified = JSON.stringify("code")

console.log(string === stringified)
- - + + \ No newline at end of file diff --git a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugDescription.html b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugDescription.html index 3bb55dd5d..55dbde4d9 100644 --- a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugDescription.html +++ b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy porównanie zaloguje do konsoli prawdę, czy fałsz?

- - + + \ No newline at end of file diff --git a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/links.html b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/links.html index 1aa4991ee..1b6cc8e65 100644 --- a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/links.html +++ b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionCode.html b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionCode.html index 039f84816..ed1e7d923 100644 --- a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionCode.html +++ b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const string = '"code"'
const stringified = JSON.stringify("code")

console.log(string === stringified)
- - + + \ No newline at end of file diff --git a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionDescription.html b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionDescription.html index ca91ab7e5..9cd7d7450 100644 --- a/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionDescription.html +++ b/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem zostanie zalogowana wartość false.

JSON.stringify() zwraca ciąg znaków w formacie JSON (skrót od JavaScript Object Notation).

Możliwość odwrócenia tego procesu zapewnia JSON.parse().

Format JSON jest ciągiem znaków, więc wszelkie wartości z JavaScript muszą być zaprezentowane jako ciąg znaków.

Jak więc w JSON odróżnić np. ciąg znaków od wartości liczbowej, albo logicznej?

Ciąg znaków prezentowany jest w podwójnym cudzysłowie, podczas gdy inne wartości prymitywne, bez.

Do stałej stringified przypisany zostaje więc ciąg znaków "code".

Chcą przypisać taką wartość ręcznie, musielibyśmy użyć \ dla uniknięcia wewnętrznych cudzysłowów, definiując to jako "\"code\"", lub nieco prościej, używając pojedynczego cudzysłowu '"code"'.

- - + + \ No newline at end of file diff --git a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c.html b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c.html index 8e6bf535b..f88fe3c12 100644 --- a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c.html +++ b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #023

🪲 Znajdź buga

function getNumber() {
try {
// Some code that can throw an error
return 1
} catch {
return 2
} finally {
return 3
}
}

console.log(getNumber())

Zakładając, że wewnątrz funkcji wywołujemy kod, który może wyrzucić nam wyjątek, umieszczamy go w wyrażeniu try...catch. Jaka wartość zostanie zwrócona po wywołaniu funkcji? Czy gdyby wyrzucony został wyjątek w bloku try { ... } kod zachowałby się inaczej?

🧪 Rozwiązanie

function getNumber() {
try {
// Some code that can throw an error
//
} catch {
//
} finally {
return 3
}
}

console.log(getNumber())

W przykładzie z błędem zostanie zwrócona wartość 3.

Niezależnie od tego czy wewnątrz bloku try zostanie wyrzucony wyjątek, blok finally wykona się zawsze, w dodatku bezpośrednio przed wyrażeniami przepływu sterowania (return, throw, break, continue) w innych blokach.

Używając return w bloku finally nie ma sensu abyśmy używali return w pozostałych blokach, bo po prostu nie zostanie on wykonany.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugCode.html b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugCode.html index 48ecfbf54..530b7e70d 100644 --- a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugCode.html +++ b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function getNumber() {
try {
// Some code that can throw an error
return 1
} catch {
return 2
} finally {
return 3
}
}

console.log(getNumber())
- - + + \ No newline at end of file diff --git a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugDescription.html b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugDescription.html index 755d886d5..fd24c4cd5 100644 --- a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugDescription.html +++ b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Zakładając, że wewnątrz funkcji wywołujemy kod, który może wyrzucić nam wyjątek, umieszczamy go w wyrażeniu try...catch. Jaka wartość zostanie zwrócona po wywołaniu funkcji? Czy gdyby wyrzucony został wyjątek w bloku try { ... } kod zachowałby się inaczej?

- - + + \ No newline at end of file diff --git a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/links.html b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/links.html index 9645c32e9..a54c2b6cd 100644 --- a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/links.html +++ b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionCode.html b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionCode.html index e953aad61..045a07db0 100644 --- a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionCode.html +++ b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function getNumber() {
try {
// Some code that can throw an error
//
} catch {
//
} finally {
return 3
}
}

console.log(getNumber())
- - + + \ No newline at end of file diff --git a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionDescription.html b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionDescription.html index 239171519..78d28f1da 100644 --- a/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionDescription.html +++ b/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem zostanie zwrócona wartość 3.

Niezależnie od tego czy wewnątrz bloku try zostanie wyrzucony wyjątek, blok finally wykona się zawsze, w dodatku bezpośrednio przed wyrażeniami przepływu sterowania (return, throw, break, continue) w innych blokach.

Używając return w bloku finally nie ma sensu abyśmy używali return w pozostałych blokach, bo po prostu nie zostanie on wykonany.

- - + + \ No newline at end of file diff --git a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7.html b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7.html index 6571864ed..7c7c2d171 100644 --- a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7.html +++ b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #035

🪲 Znajdź buga

let twister = `
Król Karol
kupił królowej Karolinie
korale koloru koralowego
`
twister = twister.replace(/karol/i, "Jan")

console.log(twister)

W ciągu znaków chcemy zamienić wystąpienia słowa karol (niezależnie od wielkości liter) na słowo Jan.

Czy Karol zostanie zamieniony na Jan, a Karolina na Janina?

🧪 Rozwiązanie

let twister = `
Król Karol
kupił królowej Karolinie
korale koloru koralowego
`
twister = twister.replace(/karol/gi, "Jan")

console.log(twister)

W przykładzie z błędem, zamienione zostanie tylko pierwsze wystąpienie

Król Jan
kupił królowej Karolinie
korale koloru koralowego

Jeśli w metodzie replace() jako pierwszego argumentu (szukanego fragmentu) użylibyśmy ciągu znaków, możliwa byłaby zamiana tylko i wyłącznie pierwszego wystąpienia.

Chcąc zamienić wszystkie wystąpienia należałoby wtedy użyć metody replaceAll().

Jednak przekazując w pierwszym argumencie replace() wyrażenie regularne (zdefiniowane wewnątrz dwóch ukośników /), możemy ustawić w nim również flagi, takiej jak niewrażliwości na wielkość liter (i), czy działanie globalne (g).

Z flagą globalną (g) w wyrażeniu regularnym, działanie replace() będzie miało efekt w całym ciągu znaków.

Król Jan
kupił królowej Janinie
korale koloru koralowego

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugCode.html b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugCode.html index 4c3e38383..60a0cbe43 100644 --- a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugCode.html +++ b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let twister = `
Król Karol
kupił królowej Karolinie
korale koloru koralowego
`
twister = twister.replace(/karol/i, "Jan")

console.log(twister)
- - + + \ No newline at end of file diff --git a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugDescription.html b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugDescription.html index ebe6f20a6..ca7fd98a1 100644 --- a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugDescription.html +++ b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W ciągu znaków chcemy zamienić wystąpienia słowa karol (niezależnie od wielkości liter) na słowo Jan.

Czy Karol zostanie zamieniony na Jan, a Karolina na Janina?

- - + + \ No newline at end of file diff --git a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/links.html b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/links.html index 93f78302e..a28ff46d7 100644 --- a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/links.html +++ b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionCode.html b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionCode.html index 59b543e9d..3a0adf7ab 100644 --- a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionCode.html +++ b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let twister = `
Król Karol
kupił królowej Karolinie
korale koloru koralowego
`
twister = twister.replace(/karol/gi, "Jan")

console.log(twister)
- - + + \ No newline at end of file diff --git a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionDescription.html b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionDescription.html index aaf51bf70..2cbc4bf00 100644 --- a/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionDescription.html +++ b/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, zamienione zostanie tylko pierwsze wystąpienie

Król Jan
kupił królowej Karolinie
korale koloru koralowego

Jeśli w metodzie replace() jako pierwszego argumentu (szukanego fragmentu) użylibyśmy ciągu znaków, możliwa byłaby zamiana tylko i wyłącznie pierwszego wystąpienia.

Chcąc zamienić wszystkie wystąpienia należałoby wtedy użyć metody replaceAll().

Jednak przekazując w pierwszym argumencie replace() wyrażenie regularne (zdefiniowane wewnątrz dwóch ukośników /), możemy ustawić w nim również flagi, takiej jak niewrażliwości na wielkość liter (i), czy działanie globalne (g).

Z flagą globalną (g) w wyrażeniu regularnym, działanie replace() będzie miało efekt w całym ciągu znaków.

Król Jan
kupił królowej Janinie
korale koloru koralowego
- - + + \ No newline at end of file diff --git a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6.html b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6.html index 7c4ce09aa..3d87790f0 100644 --- a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6.html +++ b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #014

🪲 Znajdź buga

for (let i = 0; i < 10; i++) {
setTimeout(() => {
console.log("Execute with delay")
}, 1000)
}

Chcemy wykonać kod (console.log()) 10 razy z odstępami 1 sekundy pomiędzy wywołaniami kodu.

Czy przedstawiony kod zadziała zgodnie z tymi założeniami?

🧪 Rozwiązanie

for (let i = 0; i < 10; i++) {
setTimeout(() => {
console.log("Execute with delay")
}, 1000 * i)
}

Efektem działania błędnego kodu będzie zalogowanie tekstu do konsoli po upływie jednej sekundy, dziesięciokrotnie naraz.

Nasz błąd logiczny ukrył się w przekazanym argumencie opóźnienia w funkcji setTimeout().

Ustawione opóźnienie 1 sekundy (1000 milisekund) nie zmienia się w żadnej iteracji pętli.

Pętla for(), 10 razy wywołuje setTimeout(), który przy każdym wywołaniu ma ustawiane to samo opóźnienie.

Aby uzyskać pożądany efekt 1 sekundowych opóźnień pomiędzy wywołaniami kodu, musimy pomnożyć opóźnienie przez wartość indeksu (i) w każdej z iteracji pętli

Uzyskamy wtedy wywołania z rosnącą różnicą odstępu czasu:

  • setTimeout(() => {...}, 0)
  • setTimeout(() => {...}, 1000)
  • setTimeout(() => {...}, 2000)

I właśnie o taki efekt nam chodzi.

Pomiędzy każdym z wywołań kodu z anonimowej funkcji strzałkowej przekazanej jako callback do setTimeout(), różnica odstępu wykonania kodu w czasie będzie wynosiła 1000 milisekund.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugCode.html b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugCode.html index 0b77265e9..b3f18ca9e 100644 --- a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugCode.html +++ b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
for (let i = 0; i < 10; i++) {
setTimeout(() => {
console.log("Execute with delay")
}, 1000)
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugDescription.html b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugDescription.html index 9b97eed28..11a0149ee 100644 --- a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugDescription.html +++ b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy wykonać kod (console.log()) 10 razy z odstępami 1 sekundy pomiędzy wywołaniami kodu.

Czy przedstawiony kod zadziała zgodnie z tymi założeniami?

- - + + \ No newline at end of file diff --git a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/links.html b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/links.html index 8417ff45b..1bf766547 100644 --- a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/links.html +++ b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionCode.html b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionCode.html index 78e925cfa..ed8088806 100644 --- a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionCode.html +++ b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
for (let i = 0; i < 10; i++) {
setTimeout(() => {
console.log("Execute with delay")
}, 1000 * i)
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionDescription.html b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionDescription.html index 0a2f6f758..5fa32db29 100644 --- a/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionDescription.html +++ b/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Efektem działania błędnego kodu będzie zalogowanie tekstu do konsoli po upływie jednej sekundy, dziesięciokrotnie naraz.

Nasz błąd logiczny ukrył się w przekazanym argumencie opóźnienia w funkcji setTimeout().

Ustawione opóźnienie 1 sekundy (1000 milisekund) nie zmienia się w żadnej iteracji pętli.

Pętla for(), 10 razy wywołuje setTimeout(), który przy każdym wywołaniu ma ustawiane to samo opóźnienie.

Aby uzyskać pożądany efekt 1 sekundowych opóźnień pomiędzy wywołaniami kodu, musimy pomnożyć opóźnienie przez wartość indeksu (i) w każdej z iteracji pętli

Uzyskamy wtedy wywołania z rosnącą różnicą odstępu czasu:

  • setTimeout(() => {...}, 0)
  • setTimeout(() => {...}, 1000)
  • setTimeout(() => {...}, 2000)

I właśnie o taki efekt nam chodzi.

Pomiędzy każdym z wywołań kodu z anonimowej funkcji strzałkowej przekazanej jako callback do setTimeout(), różnica odstępu wykonania kodu w czasie będzie wynosiła 1000 milisekund.

- - + + \ No newline at end of file diff --git a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071.html b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071.html index 1f196f578..0de54817b 100644 --- a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071.html +++ b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #053

🪲 Znajdź buga

const url =
"https://swapi.dev/api/films?format=json"

fetch(url)
.then((res) => res.json())
.then((data) => {
// do something with data
})
.then((data) => {
console.log(data)
})

Chcemy pobrać dane z API (np. listę filmów Star Wars), przetworzyć te dane, a następnie zalogować je do konsoli.

Czy ten plan zadziała w powyższym przykładzie?

🧪 Rozwiązanie

const url =
"https://swapi.dev/api/films?format=json"

fetch(url)
.then((res) => res.json())
.then((data) => {
// do something with data
return data
})
.then((data) => {
console.log(data)
})

W przykładzie z błędem, do konsoli zalogowane zostanie undefined.

Dzieje się tak, ponieważ w poprzednim wywołaniu metody then(), nie zwróciliśmy żadnej wartości.

Obietnica (promise) wypełniła się zwracając wartość undefined, tak samo, jak gdybyśmy wywołali standardową funkcję, która nic nie zwraca.

Podobna sytuacja miałaby miejsce z res.json(), gdybyśmy nie zwrócili danych z tego wywołania. W kolejnym wywołaniu, tam gdzie chcemy dane przetworzyć, zamiast danych dostalibyśmy undefined.

Brak nawiasów w naszym przykładzie powoduje, że wartość z anonimowej funkcji strzałkowej (res) => res.json() jest automatycznie zwracana w przeciwieństwie do sytuacji (res) => { res.json() }.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugCode.html b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugCode.html index 76973fc12..bfc3bed00 100644 --- a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugCode.html +++ b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const url =
"https://swapi.dev/api/films?format=json"

fetch(url)
.then((res) => res.json())
.then((data) => {
// do something with data
})
.then((data) => {
console.log(data)
})
- - + + \ No newline at end of file diff --git a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugDescription.html b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugDescription.html index 4a7540b31..caa69a1e9 100644 --- a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugDescription.html +++ b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy pobrać dane z API (np. listę filmów Star Wars), przetworzyć te dane, a następnie zalogować je do konsoli.

Czy ten plan zadziała w powyższym przykładzie?

- - + + \ No newline at end of file diff --git a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/links.html b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/links.html index 5e70adefe..2f54a7f9b 100644 --- a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/links.html +++ b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionCode.html b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionCode.html index 6d6a7e974..dd99d6b37 100644 --- a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionCode.html +++ b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const url =
"https://swapi.dev/api/films?format=json"

fetch(url)
.then((res) => res.json())
.then((data) => {
// do something with data
return data
})
.then((data) => {
console.log(data)
})
- - + + \ No newline at end of file diff --git a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionDescription.html b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionDescription.html index dc0be6ea5..eef481ec7 100644 --- a/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionDescription.html +++ b/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, do konsoli zalogowane zostanie undefined.

Dzieje się tak, ponieważ w poprzednim wywołaniu metody then(), nie zwróciliśmy żadnej wartości.

Obietnica (promise) wypełniła się zwracając wartość undefined, tak samo, jak gdybyśmy wywołali standardową funkcję, która nic nie zwraca.

Podobna sytuacja miałaby miejsce z res.json(), gdybyśmy nie zwrócili danych z tego wywołania. W kolejnym wywołaniu, tam gdzie chcemy dane przetworzyć, zamiast danych dostalibyśmy undefined.

Brak nawiasów w naszym przykładzie powoduje, że wartość z anonimowej funkcji strzałkowej (res) => res.json() jest automatycznie zwracana w przeciwieństwie do sytuacji (res) => { res.json() }.

- - + + \ No newline at end of file diff --git a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01.html b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01.html index 0b7d53782..723d08885 100644 --- a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01.html +++ b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #045

🪲 Znajdź buga

const numbers = [10, 20, NaN, 30, null]

console.log(numbers.includes(NaN))
console.log(numbers.includes(30))
console.log(numbers.includes(null))

console.log(numbers.indexOf(NaN))
console.log(numbers.indexOf(30))
console.log(numbers.indexOf(null))

Chcemy sprawdzić czy w tablicy znajdują się różne wartości oraz chcemy poznać ich indeks (pozycję) w tablicy.

Co zostanie zalogowane do konsoli po wywołaniu powyższego kodu?

🧪 Rozwiązanie

const numbers = [10, 20, NaN, 30, null]

console.log(numbers.includes(NaN))
console.log(numbers.includes(30))
console.log(numbers.includes(null))

console.log(numbers
.findIndex((number) => Number.isNaN(number))
)
console.log(numbers.indexOf(30))
console.log(numbers.indexOf(null))

Wszystkie wywołania metody includes() zwrócą prawdę.

Wartości NaN oraz null zostaną poprawnie znalezione w tablicy.

Wywołując metodę indexOf() dostaniemy jednak wartość -1 dla próby odnalezienia indeksu dla wartości NaN.

Metoda indexOf() dla odnajdywania elementów używa tego samego algorytmu co operator porównania ścisłego ===.

Wartości NaN porównywane z jakąkolwiek wartością (nawet z wartością NaN) zawsze zwracają fałsz.

Wywołując indexOf() z argumentem NaN zwrócone zostanie zawsze -1 czyli informacja, że wartość nie została znaleziona w tablicy.

Aby rozwiązać ten problem musimy użyć innej metody np. findIndex() i samodzielnie skonstruować funkcję sprawdzającą pod kątem wystąpienia wartości NaN.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugCode.html b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugCode.html index 5d3a3b573..5242ebe6c 100644 --- a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugCode.html +++ b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numbers = [10, 20, NaN, 30, null]

console.log(numbers.includes(NaN))
console.log(numbers.includes(30))
console.log(numbers.includes(null))

console.log(numbers.indexOf(NaN))
console.log(numbers.indexOf(30))
console.log(numbers.indexOf(null))
- - + + \ No newline at end of file diff --git a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugDescription.html b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugDescription.html index 0cf933c11..feaade449 100644 --- a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugDescription.html +++ b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy sprawdzić czy w tablicy znajdują się różne wartości oraz chcemy poznać ich indeks (pozycję) w tablicy.

Co zostanie zalogowane do konsoli po wywołaniu powyższego kodu?

- - + + \ No newline at end of file diff --git a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/links.html b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/links.html index a559fe130..652359963 100644 --- a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/links.html +++ b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionCode.html b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionCode.html index 42012dc74..8aea628d3 100644 --- a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionCode.html +++ b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numbers = [10, 20, NaN, 30, null]

console.log(numbers.includes(NaN))
console.log(numbers.includes(30))
console.log(numbers.includes(null))

console.log(numbers
.findIndex((number) => Number.isNaN(number))
)
console.log(numbers.indexOf(30))
console.log(numbers.indexOf(null))
- - + + \ No newline at end of file diff --git a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionDescription.html b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionDescription.html index deb41e8d1..08cfd2b72 100644 --- a/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionDescription.html +++ b/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Wszystkie wywołania metody includes() zwrócą prawdę.

Wartości NaN oraz null zostaną poprawnie znalezione w tablicy.

Wywołując metodę indexOf() dostaniemy jednak wartość -1 dla próby odnalezienia indeksu dla wartości NaN.

Metoda indexOf() dla odnajdywania elementów używa tego samego algorytmu co operator porównania ścisłego ===.

Wartości NaN porównywane z jakąkolwiek wartością (nawet z wartością NaN) zawsze zwracają fałsz.

Wywołując indexOf() z argumentem NaN zwrócone zostanie zawsze -1 czyli informacja, że wartość nie została znaleziona w tablicy.

Aby rozwiązać ten problem musimy użyć innej metody np. findIndex() i samodzielnie skonstruować funkcję sprawdzającą pod kątem wystąpienia wartości NaN.

- - + + \ No newline at end of file diff --git a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132.html b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132.html index 25038e519..de1342148 100644 --- a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132.html +++ b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #055

🪲 Znajdź buga

{
foo: {
console.log("first")
break foo
console.log("second")
}

break foo
console.log("third")
}

Czy powyższy kod zadziała poprawnie?

Co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

bar: {
foo: {
console.log("first")
break foo
console.log("second")
}

break bar
console.log("third")
}

W przykładzie z błędem, do konsoli zostanie wyrzucony błąd Undefined label 'foo' w 8 linii.

Musimy go naprawić, dodając nazwę etykiety dla bloku nadrzędnego, nazywając go np. bar. Następnie możemy zatrzymać wykonywanie kodu wywołując nazwę zdefiniowanej etykiety, czyli break bar.

Wywołując przerwanie działania kodu poprzez break, możemy odnieść się do etykiety bloku tylko w obrębie bloku, którą dana etykieta definiuje.

Po naprawie tego błędu, w konsoli ujrzymy zalogowane jedynie first.

Logowania do konsoli second i third nie zostaną wykonane, ponieważ działanie kodu w blokach zostaje wcześniej przerwane poprzez break.

Etykiety (label) używa się zazwyczaj do zagnieżdżonych pętli, aby wywołując break lub continue, odwołać się do konkretnej pętli.

Etykietowanie samych bloków {} jest jednak również jak najbardziej poprawne pod względem semantyki języka JavaScript.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugCode.html b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugCode.html index 807cf0344..a635cbb5b 100644 --- a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugCode.html +++ b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
{
foo: {
console.log("first")
break foo
console.log("second")
}

break foo
console.log("third")
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugDescription.html b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugDescription.html index 6e8370a1f..6d389987b 100644 --- a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugDescription.html +++ b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy powyższy kod zadziała poprawnie?

Co zostanie zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/links.html b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/links.html index d2fe3b0c0..ab19e7809 100644 --- a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/links.html +++ b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionCode.html b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionCode.html index ffea226dc..812af9650 100644 --- a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionCode.html +++ b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
bar: {
foo: {
console.log("first")
break foo
console.log("second")
}

break bar
console.log("third")
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionDescription.html b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionDescription.html index e8fb63c73..2af960bd2 100644 --- a/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionDescription.html +++ b/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, do konsoli zostanie wyrzucony błąd Undefined label 'foo' w 8 linii.

Musimy go naprawić, dodając nazwę etykiety dla bloku nadrzędnego, nazywając go np. bar. Następnie możemy zatrzymać wykonywanie kodu wywołując nazwę zdefiniowanej etykiety, czyli break bar.

Wywołując przerwanie działania kodu poprzez break, możemy odnieść się do etykiety bloku tylko w obrębie bloku, którą dana etykieta definiuje.

Po naprawie tego błędu, w konsoli ujrzymy zalogowane jedynie first.

Logowania do konsoli second i third nie zostaną wykonane, ponieważ działanie kodu w blokach zostaje wcześniej przerwane poprzez break.

Etykiety (label) używa się zazwyczaj do zagnieżdżonych pętli, aby wywołując break lub continue, odwołać się do konkretnej pętli.

Etykietowanie samych bloków {} jest jednak również jak najbardziej poprawne pod względem semantyki języka JavaScript.

- - + + \ No newline at end of file diff --git a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6.html b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6.html index 996a9b33a..644a74e7e 100644 --- a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6.html +++ b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6.html @@ -7,8 +7,8 @@ - - + +
@@ -19,7 +19,7 @@ dostajemy\ 1.0000000000000004

1 + 5e-17 zwróci już tylko 1 i wraz ze zmniejszaniem liczby zmiennoprzecinkowej poprzez dopisywanie kolejnych miejsc po przecinku, będzie dalej otrzymywać zaokrąglony wynik dodawania, 1.

0 / 0 zwróci nam NaN, ale minVal / minVal zwróci 1, wyraźnie pokazując, że minVal zerem nie jest.

0 * 0 zwróci 0, niestety tak samo jak minVal * minVal, co może sugerować, że minVal zerem jednak jest.

W rzeczywistości jest to jednak pułapka i to ten sam problem, który dotyka operacji matematycznych wykonywanych na wszystkich zmiennoprzecinkowych liczbach, we wszystkich językach programowania.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugCode.html b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugCode.html index dce9d0724..a3334a095 100644 --- a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugCode.html +++ b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const minVal = Number.MIN_VALUE

console.log(0 / 0)
console.log(minVal / minVal)

console.log(0 * 0)
console.log(minVal * minVal)

console.log(minVal + 1)
console.log(minVal - 1)

console.log(minVal)
- - + + \ No newline at end of file diff --git a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugDescription.html b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugDescription.html index 228d27a7b..1f9393701 100644 --- a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugDescription.html +++ b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/links.html b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/links.html index 41f3c80d8..c55accce0 100644 --- a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/links.html +++ b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionCode.html b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionCode.html index a0a47d663..e9c1a08ab 100644 --- a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionCode.html +++ b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const minVal = Number.MIN_VALUE

console.log(0 / 0) // NaN
console.log(minVal / minVal) // 1

console.log(0 * 0) // 0
console.log(minVal * minVal) // 0

console.log(minVal + 1) // 1
console.log(minVal - 1) // -1

console.log(minVal) // 5e-324
- - + + \ No newline at end of file diff --git a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionDescription.html b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionDescription.html index a31ce9e83..610e035e5 100644 --- a/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionDescription.html +++ b/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionDescription.html @@ -7,8 +7,8 @@ - - + +
@@ -18,7 +18,7 @@ 1.0000000000000005\ dostajemy\ 1.0000000000000004

1 + 5e-17 zwróci już tylko 1 i wraz ze zmniejszaniem liczby zmiennoprzecinkowej poprzez dopisywanie kolejnych miejsc po przecinku, będzie dalej otrzymywać zaokrąglony wynik dodawania, 1.

0 / 0 zwróci nam NaN, ale minVal / minVal zwróci 1, wyraźnie pokazując, że minVal zerem nie jest.

0 * 0 zwróci 0, niestety tak samo jak minVal * minVal, co może sugerować, że minVal zerem jednak jest.

W rzeczywistości jest to jednak pułapka i to ten sam problem, który dotyka operacji matematycznych wykonywanych na wszystkich zmiennoprzecinkowych liczbach, we wszystkich językach programowania.

- - + + \ No newline at end of file diff --git a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6.html b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6.html index accb262e8..f412e7055 100644 --- a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6.html +++ b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #090

🪲 Znajdź buga

const obj = {
foo() {
return "foo"
},
get bar() {
return "bar"
},
}

console.log(obj.foo())
console.log(obj.bar())

Obiekty (i klasy) w JavaScript mogą używać tzw. getter'ów.

Czy powyższa konstrukcja składniowa zadziała prawidłowo?

🧪 Rozwiązanie

const obj = {
foo() {
return "foo"
},
get bar() {
return "bar"
},
}

console.log(obj.foo())
console.log(obj.bar)

Getter'y służą do pobierania informacji i powinny być wywoływane jak własności obiektu, a nie metody (czyli bez nawiasów).

Getter'y nie obsługują też parametrów. Nie moglibyśmy stworzyć getter'a get bar(param).

W związku z powyższym, w przykładzie z błędem, w 11 linii zostanie wyrzucony błąd obj.bar is not a function.

Aby go naprawić, wystarczy, że usuniemy nawiasy z wywołania bar.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugCode.html b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugCode.html index 818812e8c..7e5493946 100644 --- a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugCode.html +++ b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const obj = {
foo() {
return "foo"
},
get bar() {
return "bar"
},
}

console.log(obj.foo())
console.log(obj.bar())
- - + + \ No newline at end of file diff --git a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugDescription.html b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugDescription.html index 1742649f1..9fd7bcb88 100644 --- a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugDescription.html +++ b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Obiekty (i klasy) w JavaScript mogą używać tzw. getter'ów.

Czy powyższa konstrukcja składniowa zadziała prawidłowo?

- - + + \ No newline at end of file diff --git a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/links.html b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/links.html index 8f71712e6..4678af57e 100644 --- a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/links.html +++ b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionCode.html b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionCode.html index ebe4983f6..ca3c63b3a 100644 --- a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionCode.html +++ b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const obj = {
foo() {
return "foo"
},
get bar() {
return "bar"
},
}

console.log(obj.foo())
console.log(obj.bar)
- - + + \ No newline at end of file diff --git a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionDescription.html b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionDescription.html index da5997733..3918e83b7 100644 --- a/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionDescription.html +++ b/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Getter'y służą do pobierania informacji i powinny być wywoływane jak własności obiektu, a nie metody (czyli bez nawiasów).

Getter'y nie obsługują też parametrów. Nie moglibyśmy stworzyć getter'a get bar(param).

W związku z powyższym, w przykładzie z błędem, w 11 linii zostanie wyrzucony błąd obj.bar is not a function.

Aby go naprawić, wystarczy, że usuniemy nawiasy z wywołania bar.

- - + + \ No newline at end of file diff --git a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096.html b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096.html index 8fb07af16..97e792404 100644 --- a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096.html +++ b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096.html @@ -7,15 +7,15 @@ - - + +
Przejdź do głównej zawartości

Bug #071

🪲 Znajdź buga

const myObject = { push: function () {} }
const myArray = [1, 2, 3]

console.log(myObject.hasOwnProperty("push"))
console.log("push" in myObject)

console.log(myArray.hasOwnProperty("push"))
console.log("push" in myArray)

Czy wszystkie console.log() zalogują do konsoli wartość true?

🧪 Rozwiązanie

const myObject = { push: function () {} }
const myArray = [1, 2, 3]

console.log(myObject.hasOwnProperty("push"))
console.log("push" in myObject)

console.log(myArray.__proto__.hasOwnProperty("push"))
console.log("push" in myArray)

W przykładzie z błędem, w 7 lini zostanie zalogowana wartość false.

Pozostałe wywołania zalogują wartość true.

Metoda hasOwnProperty() sprawdza czy obiekt zawiera własną własność o podanej nazwie. Własną, czyli nie odziedziczoną.

Tablice (Array) są obiektami, ale ich własności to indeksy elementów tablicy. Inne własności/metody są dziedziczone.

myArray.hasOwnProperty(0) zwróci true, ponieważ 0 jest istniejącą własnością obiektu tablicy (indeksem), pod którą przechowywana jest wartość 1.

W przypadku tablicy, byłby to ekwiwalent wywołania\ myArray[0] !== undefined.

Mimo, że tablica jako obiekt ma dostęp do metody push() to jednak nie jest to jej własna własność.

Metoda push() jest własnością prototypu obiektu tablicy.

Jej faktyczna deklaracja znajduje się w obiekcie prototypu myArray.__proto__.push.

Wywołując myArray.push() korzystamy z własności języka JavaScript jakim jest łańcuch prototypów.

JavaScript w celu wykonania danej metody, sprawdza najpierw metody zdefiniowane bezpośrednio w obiekcie, następnie metody prototypów oraz metody prototypów ich prototypów (łańcuch dziedziczenia), aż do momentu gdy znajdzie szukaną metodę lub skończy się łańcuch dziedziczonych prototypów.

hasOwnProperty() przydaje się gdy chcemy sprawdzić, czy dany obiekt ma konkretną własność zdefiniowaną jako swoją.

Gdy zależy nam na sprawdzeniu czy własność jest dostępna dla danego obiektu, uwzględniając dziedziczenie, wtedy lepiej użyć operatora in.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugCode.html b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugCode.html index 02e673f60..16810548f 100644 --- a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugCode.html +++ b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const myObject = { push: function () {} }
const myArray = [1, 2, 3]

console.log(myObject.hasOwnProperty("push"))
console.log("push" in myObject)

console.log(myArray.hasOwnProperty("push"))
console.log("push" in myArray)
- - + + \ No newline at end of file diff --git a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugDescription.html b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugDescription.html index 9973f8d36..337cf266b 100644 --- a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugDescription.html +++ b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy wszystkie console.log() zalogują do konsoli wartość true?

- - + + \ No newline at end of file diff --git a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/links.html b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/links.html index 2c3f2087c..aa6da18b8 100644 --- a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/links.html +++ b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionCode.html b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionCode.html index ae9fe2682..b0ea73baa 100644 --- a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionCode.html +++ b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const myObject = { push: function () {} }
const myArray = [1, 2, 3]

console.log(myObject.hasOwnProperty("push"))
console.log("push" in myObject)

console.log(myArray.__proto__.hasOwnProperty("push"))
console.log("push" in myArray)
- - + + \ No newline at end of file diff --git a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionDescription.html b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionDescription.html index 29099dff1..e1b5aa5f0 100644 --- a/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionDescription.html +++ b/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionDescription.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, w 7 lini zostanie zalogowana wartość false.

Pozostałe wywołania zalogują wartość true.

Metoda hasOwnProperty() sprawdza czy obiekt zawiera własną własność o podanej nazwie. Własną, czyli nie odziedziczoną.

Tablice (Array) są obiektami, ale ich własności to indeksy elementów tablicy. Inne własności/metody są dziedziczone.

myArray.hasOwnProperty(0) zwróci true, ponieważ 0 jest istniejącą własnością obiektu tablicy (indeksem), pod którą przechowywana jest wartość 1.

W przypadku tablicy, byłby to ekwiwalent wywołania\ myArray[0] !== undefined.

Mimo, że tablica jako obiekt ma dostęp do metody push() to jednak nie jest to jej własna własność.

Metoda push() jest własnością prototypu obiektu tablicy.

Jej faktyczna deklaracja znajduje się w obiekcie prototypu myArray.__proto__.push.

Wywołując myArray.push() korzystamy z własności języka JavaScript jakim jest łańcuch prototypów.

JavaScript w celu wykonania danej metody, sprawdza najpierw metody zdefiniowane bezpośrednio w obiekcie, następnie metody prototypów oraz metody prototypów ich prototypów (łańcuch dziedziczenia), aż do momentu gdy znajdzie szukaną metodę lub skończy się łańcuch dziedziczonych prototypów.

hasOwnProperty() przydaje się gdy chcemy sprawdzić, czy dany obiekt ma konkretną własność zdefiniowaną jako swoją.

Gdy zależy nam na sprawdzeniu czy własność jest dostępna dla danego obiektu, uwzględniając dziedziczenie, wtedy lepiej użyć operatora in.

- - + + \ No newline at end of file diff --git a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09.html b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09.html index 02497749a..7a1e95726 100644 --- a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09.html +++ b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #030

🪲 Znajdź buga

console.log("b" + "a" + + "a" + "a")

Dziś bardziej na wesoło. Co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

console.log("b" + "a" + + "a" + "a")
// baNaNa

Konsola wyświetli baNaNa.

W JavaScript operator + ma kilka zastosowań.

Może działać jako operator matematycznego dodawania.

Może działać jako łącznik ciągów znaków.

Może przekształcać ciągi znaków na typ liczbowy, jeśli występuje z pojedynczym argumentem (wartością).

Przeanalizujmy krok po kroku, co dzieje się przy wywołaniu "b" + "a" + + "a" + "a".

Tak samo jak w matematyce, tak samo w JavaScript, operatory mają hierarchię pierwszeństwa wykonywania (precedence).

I tak jednoargumentowy (unary) operator + wykonywany jest przed operatorem dodawania +.

Jednoargumentowy operator działa wtedy, gdy po jego lewej stronie nie występuje żadna wartość.

Wystąpienie dwóch plusów + + oznacza, że drugi z nich zachowa się jako jednoargumentowy operator, ponieważ po jego lewej stronie nie ma wartości, jest tylko inny operator.

Sprawdzamy więc co znajduje się po prawej stronie jednoargumentowego operatora i jest to + + "a".

JavaScript poprzez + próbuje wykonać konwersji typu danych po prawej stronie tego operatora na typ liczbowy.

Wartość "a" nie jest jednak liczbą zapisaną jedynie jako ciąg znaków.

Operacja konwersji typu danych się nie udaje i zwrócona zostaje wartość NaN (Not a Number).

Tym samym otrzymujemy "b" + "a" + NaN + "a".

Znak dodawania pomiędzy "b" + "a" daje nam "ba" ponieważ + działa tu jako łącznik ciągów znaków.

Gdy operator + musi wybrać, czy wykonać działanie dodawania, czy łączenia ciągów znaków, wybiera to drugie jeśli którykolwiek z argumentów jest typem ciągu znaków (string).

Wartość NaN zostaje więc skonwertowana do ciągu znaków "NaN".

Finalnie daje nam to konstrukcję "ba" + "NaN" + "a", która złączona daje nam "baNaNa".

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugCode.html b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugCode.html index dd13a6378..fca04a15d 100644 --- a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugCode.html +++ b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log("b" + "a" + + "a" + "a")
- - + + \ No newline at end of file diff --git a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugDescription.html b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugDescription.html index 48a2350fa..5a3706591 100644 --- a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugDescription.html +++ b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Dziś bardziej na wesoło. Co zostanie zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/links.html b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/links.html index 9aa50e761..328c7b91c 100644 --- a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/links.html +++ b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionCode.html b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionCode.html index cc91f07ba..249a9f330 100644 --- a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionCode.html +++ b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log("b" + "a" + + "a" + "a")
// baNaNa
- - + + \ No newline at end of file diff --git a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionDescription.html b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionDescription.html index 42d3ef97e..c7b38a4ce 100644 --- a/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionDescription.html +++ b/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Konsola wyświetli baNaNa.

W JavaScript operator + ma kilka zastosowań.

Może działać jako operator matematycznego dodawania.

Może działać jako łącznik ciągów znaków.

Może przekształcać ciągi znaków na typ liczbowy, jeśli występuje z pojedynczym argumentem (wartością).

Przeanalizujmy krok po kroku, co dzieje się przy wywołaniu "b" + "a" + + "a" + "a".

Tak samo jak w matematyce, tak samo w JavaScript, operatory mają hierarchię pierwszeństwa wykonywania (precedence).

I tak jednoargumentowy (unary) operator + wykonywany jest przed operatorem dodawania +.

Jednoargumentowy operator działa wtedy, gdy po jego lewej stronie nie występuje żadna wartość.

Wystąpienie dwóch plusów + + oznacza, że drugi z nich zachowa się jako jednoargumentowy operator, ponieważ po jego lewej stronie nie ma wartości, jest tylko inny operator.

Sprawdzamy więc co znajduje się po prawej stronie jednoargumentowego operatora i jest to + + "a".

JavaScript poprzez + próbuje wykonać konwersji typu danych po prawej stronie tego operatora na typ liczbowy.

Wartość "a" nie jest jednak liczbą zapisaną jedynie jako ciąg znaków.

Operacja konwersji typu danych się nie udaje i zwrócona zostaje wartość NaN (Not a Number).

Tym samym otrzymujemy "b" + "a" + NaN + "a".

Znak dodawania pomiędzy "b" + "a" daje nam "ba" ponieważ + działa tu jako łącznik ciągów znaków.

Gdy operator + musi wybrać, czy wykonać działanie dodawania, czy łączenia ciągów znaków, wybiera to drugie jeśli którykolwiek z argumentów jest typem ciągu znaków (string).

Wartość NaN zostaje więc skonwertowana do ciągu znaków "NaN".

Finalnie daje nam to konstrukcję "ba" + "NaN" + "a", która złączona daje nam "baNaNa".

- - + + \ No newline at end of file diff --git a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9.html b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9.html index 00788b148..b0442a4bd 100644 --- a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9.html +++ b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #070

🪲 Znajdź buga

console.log([, , ,].length)
console.log([, , ,].toString())

Jaka liczbowa długość tablicy i jaka ilość przecinków jako ciąg znaków zostanie zalogowana do konsoli?

🧪 Rozwiązanie

console.log([, , ,].length) // 3
console.log([, , ,].toString()) // ,,

Tablica [, , ,] to tablica z pustymi, niezdefiniowanymi slotami.

Tworząc tablicę np. [1, 2, , 4], definiujemy tablicę z 4 elementami, z czego trzecią wartością jest undefined.

Gdy dostawimy kolejny przecinek na końcu [1, 2, , 4,], nie spowoduje on utworzenie kolejnego, piątek elementu tablicy.

Zamiast tego zostanie zignorowany, ze względu na własność JavaScript zwaną końcowym przecinkiem (trailing comma).

Zapisując tą samą tablicę w inny sposób, umieszczając każdy element w nowej lini, końcowy przecinek nabiera więcej sensu.

[
1,
2,
,
4,
]

Dla wygody dopisywania kolejnych elementów w takim zapisie, końcowy przecinek nie wprowadza nowego elementu, a jest jedynie częścią spójnego zapisu każdego z elementów z tablicy.

JavaScript ignoruje więc końcowy przecinek i nie traktuje go jako rozdzielacz elementów.

Tablica [, , ,], ma więc długość (liczbę elementów) równą 3.

Taką samą długość będzie miała tablica bez pustych wartości, przykładowo [1, 2, 3,].

Dla uproszczenia można zadać sobie pytanie - ile przecinków jest potrzebnych do rozdzielenia N elementów.

Będzie to zawsze wartość o 1 mniejsza niż liczba elementów.

Konwersja tablicy [, , ,] do ciągu znaków wyraźnie to pokazuje, logując do konsoli ciąg znaków składający się z dwóch przecinków (w tablicy są 3 elementy, a 3 minus 1 daje nam 2 przecinki rozdzielające).

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugCode.html b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugCode.html index 4f7f9184c..ebc2e8dcf 100644 --- a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugCode.html +++ b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log([, , ,].length)
console.log([, , ,].toString())
- - + + \ No newline at end of file diff --git a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugDescription.html b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugDescription.html index 29a36dd02..599392a27 100644 --- a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugDescription.html +++ b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jaka liczbowa długość tablicy i jaka ilość przecinków jako ciąg znaków zostanie zalogowana do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/links.html b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/links.html index d55def849..b6e7f4fb8 100644 --- a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/links.html +++ b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionCode.html b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionCode.html index a3c67d9ca..82bdd38c6 100644 --- a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionCode.html +++ b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log([, , ,].length) // 3
console.log([, , ,].toString()) // ,,
- - + + \ No newline at end of file diff --git a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionDescription.html b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionDescription.html index 723047a14..ccfe12f25 100644 --- a/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionDescription.html +++ b/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Tablica [, , ,] to tablica z pustymi, niezdefiniowanymi slotami.

Tworząc tablicę np. [1, 2, , 4], definiujemy tablicę z 4 elementami, z czego trzecią wartością jest undefined.

Gdy dostawimy kolejny przecinek na końcu [1, 2, , 4,], nie spowoduje on utworzenie kolejnego, piątek elementu tablicy.

Zamiast tego zostanie zignorowany, ze względu na własność JavaScript zwaną końcowym przecinkiem (trailing comma).

Zapisując tą samą tablicę w inny sposób, umieszczając każdy element w nowej lini, końcowy przecinek nabiera więcej sensu.

[
1,
2,
,
4,
]

Dla wygody dopisywania kolejnych elementów w takim zapisie, końcowy przecinek nie wprowadza nowego elementu, a jest jedynie częścią spójnego zapisu każdego z elementów z tablicy.

JavaScript ignoruje więc końcowy przecinek i nie traktuje go jako rozdzielacz elementów.

Tablica [, , ,], ma więc długość (liczbę elementów) równą 3.

Taką samą długość będzie miała tablica bez pustych wartości, przykładowo [1, 2, 3,].

Dla uproszczenia można zadać sobie pytanie - ile przecinków jest potrzebnych do rozdzielenia N elementów.

Będzie to zawsze wartość o 1 mniejsza niż liczba elementów.

Konwersja tablicy [, , ,] do ciągu znaków wyraźnie to pokazuje, logując do konsoli ciąg znaków składający się z dwóch przecinków (w tablicy są 3 elementy, a 3 minus 1 daje nam 2 przecinki rozdzielające).

- - + + \ No newline at end of file diff --git a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd.html b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd.html index 1bf098808..9508a6df2 100644 --- a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd.html +++ b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #031

🪲 Znajdź buga

console.log(1000000)
console.log(1_000_000)

console.log(1000 + 100 + 10 + 1)
console.log(1_000 + 100 + 10 + 1)

console.log(1e3 + 1e2 + 1e1 + 1)
console.log(1_e_3 + 1e_2 + 1_e1 + 1)

console.log(10 + 1)
console.log(1_0 + 0_1)

console.log(0b00001000 + 0b0010)
console.log(0b0000_1000 + 0b0_0_1_0)

console.log(0b10 + 0b01)
console.log(0b_1_0 + 0b_0_1)

Który z powyższych zapisów liczbowych będzie niedozwolony?

🧪 Rozwiązanie

console.log(1000000)
console.log(1_000_000)

console.log(1000 + 100 + 10 + 1)
console.log(1_000 + 100 + 10 + 1)

console.log(1e3 + 1e2 + 1e1 + 1)
// console.log(1_e_3 + 1e_2 + 1_e1 + 1)

console.log(10 + 1)
// console.log(1_0 + 0_1)

console.log(0b00001000 + 0b0010)
console.log(0b0000_1000 + 0b0_0_1_0)

console.log(0b10 + 0b01)
// console.log(0b_1_0 + 0b_0_1)

Błędy zostaną wyrzucone w trzech liniach:

8: Numeric separators are not allowed here.

11: Numeric separator can not be used after leading 0.

17: Numeric separators are not allowed here.

Pozostałe zapisy liczb i działań są poprawne.

Pomiędzy cyframi w liczbach dziesiętnych można umieszczać wizualny separator _.

Przydaje się to przy trzycyfrowych grupach, czyli liczebnikach potęgi tysiąca (tysiąc, milion, miliard, itd.).

W niektórych sytuacjach, nie możemy jednak zastosować podkreślenia w zapisach liczbowych.

Podkreślenie nie może pojawić się jako pierwszy znak, bo taki zapis odnosiłby się do definiowania nazwy np. zmiennej (_myVar, _123).

Podkreślenie nie może pojawić się na końcu liczby (np. 100_).

Podkreślenie nie może wystąpić po początkowym zerze (np. 0_1).

Podkreślenia nie można użyć w zapisach wykładniczych (np. 1_e2).

Podkreślenia nie można też użyć po początkowej definicji zapisów liczb w postaci binarnej, ósemkowej, czy szesnastkowej (np. 0b_001).

Przy użyciu _ możemy więc wizualnie separować liczby dziesiętne jak np. 125_4912_6824, jak również zapisy liczby w innych systemach liczbowych np. separując co 4 bity liczb binarnych np. 0b1010_1101.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugCode.html b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugCode.html index acb21e5f2..95df93dba 100644 --- a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugCode.html +++ b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(1000000)
console.log(1_000_000)

console.log(1000 + 100 + 10 + 1)
console.log(1_000 + 100 + 10 + 1)

console.log(1e3 + 1e2 + 1e1 + 1)
console.log(1_e_3 + 1e_2 + 1_e1 + 1)

console.log(10 + 1)
console.log(1_0 + 0_1)

console.log(0b00001000 + 0b0010)
console.log(0b0000_1000 + 0b0_0_1_0)

console.log(0b10 + 0b01)
console.log(0b_1_0 + 0b_0_1)
- - + + \ No newline at end of file diff --git a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugDescription.html b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugDescription.html index b43d3f733..dea077462 100644 --- a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugDescription.html +++ b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Który z powyższych zapisów liczbowych będzie niedozwolony?

- - + + \ No newline at end of file diff --git a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/links.html b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/links.html index 9b171826d..79c7e4667 100644 --- a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/links.html +++ b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionCode.html b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionCode.html index aeb4527c9..665a077b3 100644 --- a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionCode.html +++ b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(1000000)
console.log(1_000_000)

console.log(1000 + 100 + 10 + 1)
console.log(1_000 + 100 + 10 + 1)

console.log(1e3 + 1e2 + 1e1 + 1)
// console.log(1_e_3 + 1e_2 + 1_e1 + 1)

console.log(10 + 1)
// console.log(1_0 + 0_1)

console.log(0b00001000 + 0b0010)
console.log(0b0000_1000 + 0b0_0_1_0)

console.log(0b10 + 0b01)
// console.log(0b_1_0 + 0b_0_1)
- - + + \ No newline at end of file diff --git a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionDescription.html b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionDescription.html index ddbccb4da..de4677996 100644 --- a/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionDescription.html +++ b/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Błędy zostaną wyrzucone w trzech liniach:

8: Numeric separators are not allowed here.

11: Numeric separator can not be used after leading 0.

17: Numeric separators are not allowed here.

Pozostałe zapisy liczb i działań są poprawne.

Pomiędzy cyframi w liczbach dziesiętnych można umieszczać wizualny separator _.

Przydaje się to przy trzycyfrowych grupach, czyli liczebnikach potęgi tysiąca (tysiąc, milion, miliard, itd.).

W niektórych sytuacjach, nie możemy jednak zastosować podkreślenia w zapisach liczbowych.

Podkreślenie nie może pojawić się jako pierwszy znak, bo taki zapis odnosiłby się do definiowania nazwy np. zmiennej (_myVar, _123).

Podkreślenie nie może pojawić się na końcu liczby (np. 100_).

Podkreślenie nie może wystąpić po początkowym zerze (np. 0_1).

Podkreślenia nie można użyć w zapisach wykładniczych (np. 1_e2).

Podkreślenia nie można też użyć po początkowej definicji zapisów liczb w postaci binarnej, ósemkowej, czy szesnastkowej (np. 0b_001).

Przy użyciu _ możemy więc wizualnie separować liczby dziesiętne jak np. 125_4912_6824, jak również zapisy liczby w innych systemach liczbowych np. separując co 4 bity liczb binarnych np. 0b1010_1101.

- - + + \ No newline at end of file diff --git a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0.html b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0.html index 909cd4567..033b8e100 100644 --- a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0.html +++ b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #095

🪲 Znajdź buga

console.log(
8 << 3
)
console.log(
8 << 35
)
console.log(
0b00000000000000000000000000001000
)
console.log(
0b00000000000000000000000001000000
)

Jakie wartości zostaną zalogowane do konsoli i dlaczego?

🧪 Rozwiązanie

console.log(
8 << 3
) // 64
console.log(
8 << 35
) // 64
console.log(
0b00000000000000000000000000001000
) // 8
console.log(
0b00000000000000000000000001000000
) // 64

Operator przesunięcia w lewo << pozwala na modyfikację bitów poprzez ich przesunięcie w lewo o zadaną wartość.

Zwracana wartość jest w postaci dziesiętnej (decymalnej).

Dziesiętna liczba 8 to w 32 bitowym zapisie binarnym 00000000000000000000000000001000.

W JavaScript, zapis binarny poprzedzany jest prefiksem 0b.

Binarny (dwójkowy) zapis 1000 jest więc równy decymalnej (dziesiętnej) liczbie 8.

W systemie dwójkowym podstawą do potęgowania liczby jest 2.

Każdy ze znaków liczby liczony od prawej, to potęgowanie o rosnącym o 1 wykładniku, zaczynając od 0.

Binarny 1000 to 23 czyli 8.

W systemie dziesiętnym podstawą do potęgowania liczby jest 10.

Decymalny 1000 to 103 czyli 1000.

8 << 3 oznacza chęć przesunięcia binarnego zapisu decymalnej ósemki w lewo o trzy bity.

Z 1000 powstaje więc 1000000.

Binarne 1000000 to 26 czyli decymalne 64.

Co ciekawe, 8 << 35 również zwraca 64.

Ponieważ standardowy zapis liczbowy w JavaScript jest zawarty w 32 bitach, chcąc przesunąć zapis liczbowy o 35 miejsc, dochodzimy do końca 32 bitowego zapisu i wracamy na początek.

Przesunięcie o 35 miejsc to tak naprawdę przesunięcie o 35 - 32, czyli de facto 3 miejsca.

8 << 3 jest więc równe 8 << 35, 8 << 67, 8 << 99, itd. ponieważ zwiększamy przesunięcie o 32 bity czyli pełny ciąg.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugCode.html b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugCode.html index a86ffcdb3..d368409df 100644 --- a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugCode.html +++ b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(
8 << 3
)
console.log(
8 << 35
)
console.log(
0b00000000000000000000000000001000
)
console.log(
0b00000000000000000000000001000000
)
- - + + \ No newline at end of file diff --git a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugDescription.html b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugDescription.html index aa5761d3b..5592f2c6a 100644 --- a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugDescription.html +++ b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli i dlaczego?

- - + + \ No newline at end of file diff --git a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/links.html b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/links.html index 60c461c0c..54df1984c 100644 --- a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/links.html +++ b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionCode.html b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionCode.html index 9f44676e4..f1ad15a62 100644 --- a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionCode.html +++ b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(
8 << 3
) // 64
console.log(
8 << 35
) // 64
console.log(
0b00000000000000000000000000001000
) // 8
console.log(
0b00000000000000000000000001000000
) // 64
- - + + \ No newline at end of file diff --git a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionDescription.html b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionDescription.html index 7d3e6f894..d608fd7ea 100644 --- a/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionDescription.html +++ b/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Operator przesunięcia w lewo << pozwala na modyfikację bitów poprzez ich przesunięcie w lewo o zadaną wartość.

Zwracana wartość jest w postaci dziesiętnej (decymalnej).

Dziesiętna liczba 8 to w 32 bitowym zapisie binarnym 00000000000000000000000000001000.

W JavaScript, zapis binarny poprzedzany jest prefiksem 0b.

Binarny (dwójkowy) zapis 1000 jest więc równy decymalnej (dziesiętnej) liczbie 8.

W systemie dwójkowym podstawą do potęgowania liczby jest 2.

Każdy ze znaków liczby liczony od prawej, to potęgowanie o rosnącym o 1 wykładniku, zaczynając od 0.

Binarny 1000 to 23 czyli 8.

W systemie dziesiętnym podstawą do potęgowania liczby jest 10.

Decymalny 1000 to 103 czyli 1000.

8 << 3 oznacza chęć przesunięcia binarnego zapisu decymalnej ósemki w lewo o trzy bity.

Z 1000 powstaje więc 1000000.

Binarne 1000000 to 26 czyli decymalne 64.

Co ciekawe, 8 << 35 również zwraca 64.

Ponieważ standardowy zapis liczbowy w JavaScript jest zawarty w 32 bitach, chcąc przesunąć zapis liczbowy o 35 miejsc, dochodzimy do końca 32 bitowego zapisu i wracamy na początek.

Przesunięcie o 35 miejsc to tak naprawdę przesunięcie o 35 - 32, czyli de facto 3 miejsca.

8 << 3 jest więc równe 8 << 35, 8 << 67, 8 << 99, itd. ponieważ zwiększamy przesunięcie o 32 bity czyli pełny ciąg.

- - + + \ No newline at end of file diff --git a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed.html b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed.html index bda5d5adc..4e99dbc4c 100644 --- a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed.html +++ b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed.html @@ -7,8 +7,8 @@ - - + +
@@ -16,7 +16,7 @@ !(sentence instanceof Number) zwróci false.

Innym sposobem mogłoby być użycie operatora porównania\ sentence instanceof Number === false.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugCode.html b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugCode.html index 390651e99..154932987 100644 --- a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugCode.html +++ b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const sentence = new String("Lorem ipsum dolor")

console.log(sentence instanceof String)
console.log(!sentence instanceof Number)
- - + + \ No newline at end of file diff --git a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugDescription.html b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugDescription.html index e225e0674..7943111ed 100644 --- a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugDescription.html +++ b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy sprawdzić czy obiekt jest lub nie jest instancją danej klasy.

Co zostanie zalogowane do konsoli w powyższym przykładzie?

- - + + \ No newline at end of file diff --git a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/links.html b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/links.html index 97fef66c2..790bcf286 100644 --- a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/links.html +++ b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionCode.html b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionCode.html index 4e9d8db3c..330d18ea4 100644 --- a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionCode.html +++ b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const sentence = new String("Lorem ipsum dolor")

console.log(sentence instanceof String)
console.log(!(sentence instanceof Number))
- - + + \ No newline at end of file diff --git a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionDescription.html b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionDescription.html index 3dfaa0630..c053dc1cd 100644 --- a/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionDescription.html +++ b/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionDescription.html @@ -7,15 +7,15 @@ - - + +
Przejdź do głównej zawartości

sentence instanceof String zwróci prawdę.

Ciąg znaków został stworzony za pomocą konstruktora klasy String.

Zwróć uwagę na użycie operatora new. Bez niego ciąg znaków zostałby utworzony za pomocą funkcji String nie będącej konstruktorem klasy, więc instanceof zwróciłby w takiej sytuacji fałsz (ciąg znaków byłby wtedy typem prymitywnym, a nie obiektem).

!sentence instanceof Number zwróci fałsz.

I tutaj mamy naszego buga.

W intencji mamy zanegowanie wyniku działania operatora instanceof.

W rzeczywistości negujemy jednak wartość ze stałej sentence.

Ponieważ typ danych w sentence jest obiektem, zostaje on skonwertowany poprzez działanie operatora negacji najpierw do wartości logicznej true, a następnie odwrócony do wartości false.

Wartość false z pewnością nie jest instancją klasy Number, więc finalnie do konsoli zostaje zalogowana wartość false.

Jeśli zależy nam na sprawdzeniu czy dany obiekt nie jest instancją danej klasy, musimy całą operację sprawdzania instancji umieścić wewnątrz nawiasów i zanegować dopiero efekt takiego sprawdzenia.

sentence instanceof Number zwróci true.\ !(sentence instanceof Number) zwróci false.

Innym sposobem mogłoby być użycie operatora porównania\ sentence instanceof Number === false.

- - + + \ No newline at end of file diff --git a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115.html b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115.html index 67937d6ed..20cb26b26 100644 --- a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115.html +++ b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #091

🪲 Znajdź buga

const objSealed = { value: 11 }
const objFreezed = { value: 11 }

Object.seal(objSealed)
Object.freeze(objFreezed)

objSealed.value = 22
objFreezed.value = 22

objSealed.foo = "bar"
objFreezed.foo = "bar"

delete objSealed.value
delete objFreezed.value

console.log(objSealed)
console.log(objFreezed)

Czy w powyższym przykładzie istniejące własności obiektów mogą zostać usunięte, a nowe własności mogą zostać dodane?

Jakie wartości obiektów zostaną zalogowane do konsoli?

🧪 Rozwiązanie

const objSealed = { value: 11 }
const objFreezed = { value: 11 }

Object.seal(objSealed)
Object.freeze(objFreezed)

objSealed.value = 22
objFreezed.value = 22

objSealed.foo = "bar"
objFreezed.foo = "bar"

delete objSealed.value
delete objFreezed.value

console.log(objSealed) // { value: 22 }
console.log(objFreezed) // { value: 11 }

Obiekty można pieczętować (seal) oraz zamrażać (freeze).

Obie metody działają bardzo podobnie, blokując modyfikacje takie jak usuwanie czy dodawanie własności obiektu.

Obiekt zapieczętowany przez Object.seal() umożliwia jednak modyfikację istniejących własności w przeciwieństwie do obiektu zamrożonego przez Object.freeze().

objSealed zezwala na zaktualizowanie wartości do { value: 22 }.

objFreezed nie umożliwia takiej modyfikacji i zatrzymuje początkową wartość { value: 11 }.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugCode.html b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugCode.html index b0dff15a4..531d1fa46 100644 --- a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugCode.html +++ b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const objSealed = { value: 11 }
const objFreezed = { value: 11 }

Object.seal(objSealed)
Object.freeze(objFreezed)

objSealed.value = 22
objFreezed.value = 22

objSealed.foo = "bar"
objFreezed.foo = "bar"

delete objSealed.value
delete objFreezed.value

console.log(objSealed)
console.log(objFreezed)
- - + + \ No newline at end of file diff --git a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugDescription.html b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugDescription.html index 8b0669fc4..983ba8b13 100644 --- a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugDescription.html +++ b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy w powyższym przykładzie istniejące własności obiektów mogą zostać usunięte, a nowe własności mogą zostać dodane?

Jakie wartości obiektów zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/links.html b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/links.html index df533b04e..5d725d7db 100644 --- a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/links.html +++ b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionCode.html b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionCode.html index ae6ff662e..c4c18a4a8 100644 --- a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionCode.html +++ b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const objSealed = { value: 11 }
const objFreezed = { value: 11 }

Object.seal(objSealed)
Object.freeze(objFreezed)

objSealed.value = 22
objFreezed.value = 22

objSealed.foo = "bar"
objFreezed.foo = "bar"

delete objSealed.value
delete objFreezed.value

console.log(objSealed) // { value: 22 }
console.log(objFreezed) // { value: 11 }
- - + + \ No newline at end of file diff --git a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionDescription.html b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionDescription.html index 8d4e1c81c..a0ba5f96f 100644 --- a/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionDescription.html +++ b/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Obiekty można pieczętować (seal) oraz zamrażać (freeze).

Obie metody działają bardzo podobnie, blokując modyfikacje takie jak usuwanie czy dodawanie własności obiektu.

Obiekt zapieczętowany przez Object.seal() umożliwia jednak modyfikację istniejących własności w przeciwieństwie do obiektu zamrożonego przez Object.freeze().

objSealed zezwala na zaktualizowanie wartości do { value: 22 }.

objFreezed nie umożliwia takiej modyfikacji i zatrzymuje początkową wartość { value: 11 }.

- - + + \ No newline at end of file diff --git a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961.html b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961.html index abfa2cddd..5ba049ce5 100644 --- a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961.html +++ b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #011

🪲 Znajdź buga

const loggedUser = {
role: "reader",
}

function getUserPermission(user) {
let permission

switch (user.role) {
case "reader":
permission = "can read"
case "writer":
permission = "can write"
case "admin":
permission = "can everything"
}

return permission
}

console.log(getUserPermission(loggedUser))

Co zostanie zalogowane do konsoli? Jakie pozwolenie będzie miał zalogowany użytkownik?

🧪 Rozwiązanie

const loggedUser = {
role: "reader",
}

function getUserPermission(user) {
let permission

switch (user.role) {
case "reader":
permission = "can read"
break
case "writer":
permission = "can write"
break
case "admin":
permission = "can everything"
break
}

return permission
}

console.log(getUserPermission(loggedUser))

W przykładzie z błędem, do konsoli zostanie zalogowane can everything. Mimo, że zalogowany użytkownik ma ustawioną rolę na reader, instrukcja switch nie zatrzyma swojego działania na tym przypadku i finalnie użytkownik uzyska prawa admina.

Dzieje się tak, ponieważ domyślnie switch zaczynając od przypadku w którym nastąpi dopasowanie, wykonuje kod aż do pojawienia się deklaracji break.

W naszym błędnym przykładzie nie dodaliśmy break w żadnym z przypadków (case), więc kod wykonywał się po kolei, kończąc na przypisaniu do zmiennej permission wartości z ostatniego przypadku w switch.

Innym rozwiązaniem, unikającym wystąpienia błędu, mogłoby być pominięcie zmiennej permission i bezpośrednie zwracanie pożądanych wartości w każdy z przypadków (return "can ...").

Nie musielibyśmy wtedy używać wyrażeń break, ponieważ po wywołaniu return, dalszy kod w funkcji nie byłby wykonywany.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugCode.html b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugCode.html index 59eb27bbb..736357282 100644 --- a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugCode.html +++ b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const loggedUser = {
role: "reader",
}

function getUserPermission(user) {
let permission

switch (user.role) {
case "reader":
permission = "can read"
case "writer":
permission = "can write"
case "admin":
permission = "can everything"
}

return permission
}

console.log(getUserPermission(loggedUser))
- - + + \ No newline at end of file diff --git a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugDescription.html b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugDescription.html index 74085d2f8..2fd19bec1 100644 --- a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugDescription.html +++ b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Co zostanie zalogowane do konsoli? Jakie pozwolenie będzie miał zalogowany użytkownik?

- - + + \ No newline at end of file diff --git a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/links.html b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/links.html index da7bb1c18..0061ee6df 100644 --- a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/links.html +++ b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionCode.html b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionCode.html index 66c75d374..dd2d88b68 100644 --- a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionCode.html +++ b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const loggedUser = {
role: "reader",
}

function getUserPermission(user) {
let permission

switch (user.role) {
case "reader":
permission = "can read"
break
case "writer":
permission = "can write"
break
case "admin":
permission = "can everything"
break
}

return permission
}

console.log(getUserPermission(loggedUser))
- - + + \ No newline at end of file diff --git a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionDescription.html b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionDescription.html index d777e0077..db790f355 100644 --- a/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionDescription.html +++ b/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, do konsoli zostanie zalogowane can everything. Mimo, że zalogowany użytkownik ma ustawioną rolę na reader, instrukcja switch nie zatrzyma swojego działania na tym przypadku i finalnie użytkownik uzyska prawa admina.

Dzieje się tak, ponieważ domyślnie switch zaczynając od przypadku w którym nastąpi dopasowanie, wykonuje kod aż do pojawienia się deklaracji break.

W naszym błędnym przykładzie nie dodaliśmy break w żadnym z przypadków (case), więc kod wykonywał się po kolei, kończąc na przypisaniu do zmiennej permission wartości z ostatniego przypadku w switch.

Innym rozwiązaniem, unikającym wystąpienia błędu, mogłoby być pominięcie zmiennej permission i bezpośrednie zwracanie pożądanych wartości w każdy z przypadków (return "can ...").

Nie musielibyśmy wtedy używać wyrażeń break, ponieważ po wywołaniu return, dalszy kod w funkcji nie byłby wykonywany.

- - + + \ No newline at end of file diff --git a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2.html b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2.html index 9c9943309..d0f54243e 100644 --- a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2.html +++ b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #080

🪲 Znajdź buga

const numbers = {
set current(number) {
this.log.push(number)
},
get latest() {
return this.log.at(-1)
},
log: [],
}

numbers.current = 5
numbers.current = 23

console.log(numbers.log)
console.log(numbers.latest)

const numbersCopy = Object.assign({}, numbers)

numbersCopy.current = 11

console.log(numbersCopy.log)
console.log(numbersCopy.latest)

Chcemy wykonać kopię obiektu, który ma getter'y i setter'y.

Czy kopia w powyższym przykładzie się powiedzie?

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

const numbers = {
set current(number) {
this.log.push(number)
},
get latest() {
return this.log.at(-1)
},
log: [],
}

numbers.current = 5
numbers.current = 23

console.log(numbers.log) // [5, 23]
console.log(numbers.latest) // 23

const numbersCopy = Object.assign({}, numbers)

numbersCopy.current = 11

console.log(numbersCopy.log) // [5, 23]
console.log(numbersCopy.latest) // 23

Obiekt numbers sam w sobie działa poprawnie.

Umożliwia ustawianie liczby poprzez dodanie jej do tablicy log, a następnie pobranie ostatnio ustawionej liczby poprzez getter latest().

numbers.log zwraca więc [5, 23] ponieważ te dwie liczby zostały wcześniej ustawione poprzez setter current(), tym samym lądując w tablicy log.

numbers.latest zwraca ostatnio ustawioną liczbę, pobierając ją jako ostatni element z tablicy, czyli 23.

Skopiowanie obiektu za pomocą Object.assign() (ale również innymi metodami jak np. rozkład obiektu - spread), nie daje możliwości kopiowania metod w tym getter'ów, czy setter'ów.

numbersCopy.current przestaje działać i staje się niezdefiniowany.

numbersCopy.current = 11 tworzy nową własność, do której na sztywno zostaje przypisana wartość 11.

Operacja ta w żaden sposób nie wpływa już na tablicę log w skopiowanym obiekcie.

numbersCopy.log zwraca tą samą tablicę co numbers.log, ponieważ została ona skopiowana z oryginalnego obiektu.

Niespodzianką może być numbersCopy.latest, ponieważ zwraca 23.

Mimo, że metody obiektu nie są kopiowane, to w przypadku getter'a jest on wykonany w momencie kopiowania i wartość, którą zwraca, zostaje przypisana na stałe do własności w skopiowanym obiekcie.

numbersCopy.latest nie jest już więc metodą zwracającą dynamicznie ostatni element z tablicy log, a jedynie sztywną wartością, do której na stałe przypisana została wartość 23.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugCode.html b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugCode.html index 2fa428d95..d065956d6 100644 --- a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugCode.html +++ b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numbers = {
set current(number) {
this.log.push(number)
},
get latest() {
return this.log.at(-1)
},
log: [],
}

numbers.current = 5
numbers.current = 23

console.log(numbers.log)
console.log(numbers.latest)

const numbersCopy = Object.assign({}, numbers)

numbersCopy.current = 11

console.log(numbersCopy.log)
console.log(numbersCopy.latest)
- - + + \ No newline at end of file diff --git a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugDescription.html b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugDescription.html index 0546c36bb..6256b7d5e 100644 --- a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugDescription.html +++ b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy wykonać kopię obiektu, który ma getter'y i setter'y.

Czy kopia w powyższym przykładzie się powiedzie?

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/links.html b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/links.html index 06ff06ba8..7da529823 100644 --- a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/links.html +++ b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionCode.html b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionCode.html index 1986dbcd7..19f2074b0 100644 --- a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionCode.html +++ b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const numbers = {
set current(number) {
this.log.push(number)
},
get latest() {
return this.log.at(-1)
},
log: [],
}

numbers.current = 5
numbers.current = 23

console.log(numbers.log) // [5, 23]
console.log(numbers.latest) // 23

const numbersCopy = Object.assign({}, numbers)

numbersCopy.current = 11

console.log(numbersCopy.log) // [5, 23]
console.log(numbersCopy.latest) // 23
- - + + \ No newline at end of file diff --git a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionDescription.html b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionDescription.html index 2d082a2b6..b1038d8d3 100644 --- a/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionDescription.html +++ b/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Obiekt numbers sam w sobie działa poprawnie.

Umożliwia ustawianie liczby poprzez dodanie jej do tablicy log, a następnie pobranie ostatnio ustawionej liczby poprzez getter latest().

numbers.log zwraca więc [5, 23] ponieważ te dwie liczby zostały wcześniej ustawione poprzez setter current(), tym samym lądując w tablicy log.

numbers.latest zwraca ostatnio ustawioną liczbę, pobierając ją jako ostatni element z tablicy, czyli 23.

Skopiowanie obiektu za pomocą Object.assign() (ale również innymi metodami jak np. rozkład obiektu - spread), nie daje możliwości kopiowania metod w tym getter'ów, czy setter'ów.

numbersCopy.current przestaje działać i staje się niezdefiniowany.

numbersCopy.current = 11 tworzy nową własność, do której na sztywno zostaje przypisana wartość 11.

Operacja ta w żaden sposób nie wpływa już na tablicę log w skopiowanym obiekcie.

numbersCopy.log zwraca tą samą tablicę co numbers.log, ponieważ została ona skopiowana z oryginalnego obiektu.

Niespodzianką może być numbersCopy.latest, ponieważ zwraca 23.

Mimo, że metody obiektu nie są kopiowane, to w przypadku getter'a jest on wykonany w momencie kopiowania i wartość, którą zwraca, zostaje przypisana na stałe do własności w skopiowanym obiekcie.

numbersCopy.latest nie jest już więc metodą zwracającą dynamicznie ostatni element z tablicy log, a jedynie sztywną wartością, do której na stałe przypisana została wartość 23.

- - + + \ No newline at end of file diff --git a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03.html b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03.html index 2a84e2340..a3374a9c4 100644 --- a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03.html +++ b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #056

🪲 Znajdź buga

async function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms)
})
}

async function main() {
const numbers = [1, 2, 3]
const store = []

numbers.forEach(async (num) => {
await sleep(1000)
store.push(num)
})

console.log(store)
}
main()

Chcemy zasymulować wykonanie asynchronicznych operacji na danych.

Funkcja sleep() zatrzymuje działanie kodu na określoną ilość milisekund symulując asynchroniczne operacje. Następnie przetworzone dane z pierwotnej tablicy numbers chcemy dodać do nowej store.

Czy powyższy kod zadziała prawidłowo?

Co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

async function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms)
})
}

async function main() {
const numbers = [1, 2, 3]
const store = []

const promises = numbers.map(async (num) => {
await sleep(1000)
store.push(num)
})
await Promise.all(promises)

console.log(store)
}
main()

W przykładzie z błędem do konsoli zostanie zalogowana pusta tablica []. Nasz kod nie zadziała więc zgodnie z planem.

Metoda forEach(), wywołuje funkcję przekazaną w argumencie jako callback w sposób synchroniczny.

Działa to więc tak samo, jak gdybyśmy w zwykłej funkcji wywołali inną, zagnieżdżoną, asynchroniczną.

Kod wewnątrz takiej funkcji byłby oddelegowany do wykonania na później w pętli zdarzeń (jako microtask).

Nieco lepszy obraz sytuacji da nam zamiana forEach() na map() i zalogowanie do konsoli takiej mapy.

Okaże się wtedy, że nowa, zmapowana tablica będzie zawierać nierozwiązane obiekty Promise.

W celu rozwiązania tablicy z obietnicami, możemy użyć Promise.all().

Aby wykonać to synchronicznie i nie używać Promise.all().then(), dodajemy await przed wywołaniem Promise.all() i czekamy, aż wszystkie obietnice z tablicy zostaną rozwiązane.

Następnie logując do konsoli store, mamy już dostęp do wszystkich elementów. Wszystkie obietnice zostały rozwiązane i tym samym wykonane zostały wszystkie wywołania push() na tablicy store.

Alternatywnym rozwiązaniem może być wywołanie pętli for, która w przeciwieństwie do forEach() nie przyjmuje funkcji callback, a tym samym użycie await wewnątrz iteracji pętli zostaje wykonane zgodnie z oczekiwaniami.

for (const num of numbers) {
await sleep(1000)
store.push(num)
}

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugCode.html b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugCode.html index cef7ad1b9..ff7ed5927 100644 --- a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugCode.html +++ b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
async function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms)
})
}

async function main() {
const numbers = [1, 2, 3]
const store = []

numbers.forEach(async (num) => {
await sleep(1000)
store.push(num)
})

console.log(store)
}
main()
- - + + \ No newline at end of file diff --git a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugDescription.html b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugDescription.html index ddb27d726..185a96075 100644 --- a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugDescription.html +++ b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy zasymulować wykonanie asynchronicznych operacji na danych.

Funkcja sleep() zatrzymuje działanie kodu na określoną ilość milisekund symulując asynchroniczne operacje. Następnie przetworzone dane z pierwotnej tablicy numbers chcemy dodać do nowej store.

Czy powyższy kod zadziała prawidłowo?

Co zostanie zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/links.html b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/links.html index 571c200b2..d73d7676c 100644 --- a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/links.html +++ b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionCode.html b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionCode.html index f64195836..50f81f22f 100644 --- a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionCode.html +++ b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
async function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms)
})
}

async function main() {
const numbers = [1, 2, 3]
const store = []

const promises = numbers.map(async (num) => {
await sleep(1000)
store.push(num)
})
await Promise.all(promises)

console.log(store)
}
main()
- - + + \ No newline at end of file diff --git a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionDescription.html b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionDescription.html index 04ed862df..f0f97182b 100644 --- a/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionDescription.html +++ b/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem do konsoli zostanie zalogowana pusta tablica []. Nasz kod nie zadziała więc zgodnie z planem.

Metoda forEach(), wywołuje funkcję przekazaną w argumencie jako callback w sposób synchroniczny.

Działa to więc tak samo, jak gdybyśmy w zwykłej funkcji wywołali inną, zagnieżdżoną, asynchroniczną.

Kod wewnątrz takiej funkcji byłby oddelegowany do wykonania na później w pętli zdarzeń (jako microtask).

Nieco lepszy obraz sytuacji da nam zamiana forEach() na map() i zalogowanie do konsoli takiej mapy.

Okaże się wtedy, że nowa, zmapowana tablica będzie zawierać nierozwiązane obiekty Promise.

W celu rozwiązania tablicy z obietnicami, możemy użyć Promise.all().

Aby wykonać to synchronicznie i nie używać Promise.all().then(), dodajemy await przed wywołaniem Promise.all() i czekamy, aż wszystkie obietnice z tablicy zostaną rozwiązane.

Następnie logując do konsoli store, mamy już dostęp do wszystkich elementów. Wszystkie obietnice zostały rozwiązane i tym samym wykonane zostały wszystkie wywołania push() na tablicy store.

Alternatywnym rozwiązaniem może być wywołanie pętli for, która w przeciwieństwie do forEach() nie przyjmuje funkcji callback, a tym samym użycie await wewnątrz iteracji pętli zostaje wykonane zgodnie z oczekiwaniami.

for (const num of numbers) {
await sleep(1000)
store.push(num)
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153.html b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153.html index 6cbd5ef87..9848cafed 100644 --- a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153.html +++ b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #099

🪲 Znajdź buga

let x = "" ? "ok" : 0 ? 1 : [] ? "foo" : "bar"
console.log(x)

Jaka wartość zostanie zalogowana do konsoli i dlaczego?

🧪 Rozwiązanie

let x = "" ? "ok" : 0 ? 1 : [] ? "foo" : "bar"
console.log(x) // "foo"

Trójskładnikowy operator warunkowy jest jedynym operatorem w języku JavaScript, który przyjmuje trzy operandy.

  1. Warunek, po którym następuje znak zapytania ?
  2. Wyrażenie, które zostanie wykonane jeśli warunek jest prawdziwy, po którym następuje dwukropek :
  3. Wyrażenie, które zostanie wykonane jeśli warunek jest fałszywy

Jest to skrócona wersja deklaracji if...else, która umożliwia wykonanie tych samych operacji logicznych w skrócony sposób.

Co ciekawe, trójskładnikowy operatora warunkowy można zagnieżdżać jako wyrażenia, które zostają wykonane w innym trójskładnikowym operatorze warunkowym.

Przypomina to wtedy deklarację if...else if...else.

I właśnie taki zagnieżdżony ciąg znajduje się w naszym przykładzie.

Aby nieco ułatwić sobie jego zrozumienie, możemy pogrupować każde z wyrażeń używając nawiasów.

("" ? "ok" : (0 ? 1 : ([] ? "foo" : "bar")))

"" jest wartością fałszywą, więc pierwsze wyrażenie "ok" zostaje pominięte na rzecz drugiego wyrażenia, którym jest kolejna trójskładnikowa grupa.

0 również jest wartością fałszywą, więc wykonana jest kolejna, jeszcze głębiej zagnieżdżona trójskładnikowa grupa.

[] jest wartością prawdziwą, zwrócona zostaje więc wartość "foo", a "bar" zostaje pominięte.

W naszym przypadku kolejne grupy zostały zagnieżdżone jako wyrażenia wykonywane w przypadku fałszywego spełnienia warunku.

Nic nie stoi jednak na przeszkodzie aby używać ich jako wyrażeń dla ewaluacji warunku do prawdy, lub też w obu miejscach - prawdy i fałszu.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugCode.html b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugCode.html index c2361ed03..a3974b9f1 100644 --- a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugCode.html +++ b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let x = "" ? "ok" : 0 ? 1 : [] ? "foo" : "bar"
console.log(x)
- - + + \ No newline at end of file diff --git a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugDescription.html b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugDescription.html index 47d5d8a0e..2a4cf2058 100644 --- a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugDescription.html +++ b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jaka wartość zostanie zalogowana do konsoli i dlaczego?

- - + + \ No newline at end of file diff --git a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/links.html b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/links.html index 19434a69c..982a4493f 100644 --- a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/links.html +++ b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionCode.html b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionCode.html index cbe275a4b..d02b9604d 100644 --- a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionCode.html +++ b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let x = "" ? "ok" : 0 ? 1 : [] ? "foo" : "bar"
console.log(x) // "foo"
- - + + \ No newline at end of file diff --git a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionDescription.html b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionDescription.html index a64dbe719..1086736dd 100644 --- a/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionDescription.html +++ b/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Trójskładnikowy operator warunkowy jest jedynym operatorem w języku JavaScript, który przyjmuje trzy operandy.

  1. Warunek, po którym następuje znak zapytania ?
  2. Wyrażenie, które zostanie wykonane jeśli warunek jest prawdziwy, po którym następuje dwukropek :
  3. Wyrażenie, które zostanie wykonane jeśli warunek jest fałszywy

Jest to skrócona wersja deklaracji if...else, która umożliwia wykonanie tych samych operacji logicznych w skrócony sposób.

Co ciekawe, trójskładnikowy operatora warunkowy można zagnieżdżać jako wyrażenia, które zostają wykonane w innym trójskładnikowym operatorze warunkowym.

Przypomina to wtedy deklarację if...else if...else.

I właśnie taki zagnieżdżony ciąg znajduje się w naszym przykładzie.

Aby nieco ułatwić sobie jego zrozumienie, możemy pogrupować każde z wyrażeń używając nawiasów.

("" ? "ok" : (0 ? 1 : ([] ? "foo" : "bar")))

"" jest wartością fałszywą, więc pierwsze wyrażenie "ok" zostaje pominięte na rzecz drugiego wyrażenia, którym jest kolejna trójskładnikowa grupa.

0 również jest wartością fałszywą, więc wykonana jest kolejna, jeszcze głębiej zagnieżdżona trójskładnikowa grupa.

[] jest wartością prawdziwą, zwrócona zostaje więc wartość "foo", a "bar" zostaje pominięte.

W naszym przypadku kolejne grupy zostały zagnieżdżone jako wyrażenia wykonywane w przypadku fałszywego spełnienia warunku.

Nic nie stoi jednak na przeszkodzie aby używać ich jako wyrażeń dla ewaluacji warunku do prawdy, lub też w obu miejscach - prawdy i fałszu.

- - + + \ No newline at end of file diff --git a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4.html b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4.html index a05978c6e..fc697c262 100644 --- a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4.html +++ b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #028

🪲 Znajdź buga

const book = { author: "Foo", title: null }

console.log(book.title)
console.log(book.title.subtitle)

Co zostanie zalogowane do konsoli po uruchomieniu powyższego kodu?

🧪 Rozwiązanie

const book = { author: "Foo", title: null }

console.log(book.title)
console.log(book.title?.subtitle)

W przykładzie z błędem do konsoli zostanie zalogowana wartość null jako efekt wywołania ebook.title.

Zostanie jednak zwrócony też błąd Cannot read properties of null (reading 'subtitle'), który zatrzyma wykonywanie dalszego kodu.

null jest podstawowym typem danych (mimo, że typeof null błędnie zwraca wartość object).

Podstawowe typy danych nie są obiektami w JavaScript, nie zawierają więc żadnych własności czy metod.

Jakakolwiek próba zwrócenia własności domniemanego obiektu null wyrzuca więc błąd, który skutecznie zatrzymuje wykonywanie dalszego kodu aplikacji.

Opcjonalne łączenie łańcuchowe ?. pozwoli nam uniknąć wyrzucenia błędu, zamiast niego zwracając wartość undefined.

Operator ?. świetnie nadaje np. podczas pobierania danych z API, gdy nie jesteśmy do końca pewni struktury przychodzących danych i istnieje prawdopodobieństwo, że dane, które chcemy zwrócić z zagnieżdżonych własności obiektu, będą niezdefiniowane.

Opcjonalne łączenie łańcuchowe to też świetny skrót umożliwiający pominięcie wielokrotnego używania operatorów logicznych AND book && book.title && book.title.subtitle.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugCode.html b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugCode.html index 166384570..384c9e1a0 100644 --- a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugCode.html +++ b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const book = { author: "Foo", title: null }

console.log(book.title)
console.log(book.title.subtitle)
- - + + \ No newline at end of file diff --git a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugDescription.html b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugDescription.html index ba5ed702c..356d3ee90 100644 --- a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugDescription.html +++ b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Co zostanie zalogowane do konsoli po uruchomieniu powyższego kodu?

- - + + \ No newline at end of file diff --git a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/links.html b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/links.html index 468edfd84..9e10062fd 100644 --- a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/links.html +++ b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionCode.html b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionCode.html index 45f81469b..89fdd15b3 100644 --- a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionCode.html +++ b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const book = { author: "Foo", title: null }

console.log(book.title)
console.log(book.title?.subtitle)
- - + + \ No newline at end of file diff --git a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionDescription.html b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionDescription.html index 66aff5690..7870db985 100644 --- a/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionDescription.html +++ b/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem do konsoli zostanie zalogowana wartość null jako efekt wywołania ebook.title.

Zostanie jednak zwrócony też błąd Cannot read properties of null (reading 'subtitle'), który zatrzyma wykonywanie dalszego kodu.

null jest podstawowym typem danych (mimo, że typeof null błędnie zwraca wartość object).

Podstawowe typy danych nie są obiektami w JavaScript, nie zawierają więc żadnych własności czy metod.

Jakakolwiek próba zwrócenia własności domniemanego obiektu null wyrzuca więc błąd, który skutecznie zatrzymuje wykonywanie dalszego kodu aplikacji.

Opcjonalne łączenie łańcuchowe ?. pozwoli nam uniknąć wyrzucenia błędu, zamiast niego zwracając wartość undefined.

Operator ?. świetnie nadaje np. podczas pobierania danych z API, gdy nie jesteśmy do końca pewni struktury przychodzących danych i istnieje prawdopodobieństwo, że dane, które chcemy zwrócić z zagnieżdżonych własności obiektu, będą niezdefiniowane.

Opcjonalne łączenie łańcuchowe to też świetny skrót umożliwiający pominięcie wielokrotnego używania operatorów logicznych AND book && book.title && book.title.subtitle.

- - + + \ No newline at end of file diff --git a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927.html b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927.html index 3b370cbc4..7ab706eb8 100644 --- a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927.html +++ b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #004

🪲 Znajdź buga

var n = 1

if (n === 1) {
var n = 2
console.log(n)
}

console.log(n)

Jaka wartość zostanie zalogowana do konsoli w lini 5, a jaka w 8?

🧪 Rozwiązanie

let n = 1

if (n === 1) {
let n = 2
console.log(n)
}

console.log(n)

W przykładzie z błędem, zadeklarowanie zmiennej z użyciem wyrażenia var, spowoduje zalogowanie konsoli w obu miejscach wartość 2.

Nie jest to błąd per se, o ile jesteśmy świadomi własności działania deklaracji var, która to deklaruje zmienną o zasięgu globalnym.

Znacznie lepszym pomysłem dla deklaracji zmiennych będzie używanie wyrażenia let. Wtedy zasięg działania jest ograniczony do bloku kodu ({}), wewnątrz którego let zostało zdefiniowane.

Używając let, do konsoli zostaną zalogowane kolejno, wartości 2 i 1.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugCode.html b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugCode.html index e808ef76a..8658be81d 100644 --- a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugCode.html +++ b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
var n = 1

if (n === 1) {
var n = 2
console.log(n)
}

console.log(n)
- - + + \ No newline at end of file diff --git a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugDescription.html b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugDescription.html index 4cb16d5e0..9aabb5587 100644 --- a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugDescription.html +++ b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jaka wartość zostanie zalogowana do konsoli w lini 5, a jaka w 8?

- - + + \ No newline at end of file diff --git a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/links.html b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/links.html index b5aa1fe93..fc058252a 100644 --- a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/links.html +++ b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionCode.html b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionCode.html index 27f858145..e65a4f589 100644 --- a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionCode.html +++ b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let n = 1

if (n === 1) {
let n = 2
console.log(n)
}

console.log(n)
- - + + \ No newline at end of file diff --git a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionDescription.html b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionDescription.html index ef68e59d8..fe13d453f 100644 --- a/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionDescription.html +++ b/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, zadeklarowanie zmiennej z użyciem wyrażenia var, spowoduje zalogowanie konsoli w obu miejscach wartość 2.

Nie jest to błąd per se, o ile jesteśmy świadomi własności działania deklaracji var, która to deklaruje zmienną o zasięgu globalnym.

Znacznie lepszym pomysłem dla deklaracji zmiennych będzie używanie wyrażenia let. Wtedy zasięg działania jest ograniczony do bloku kodu ({}), wewnątrz którego let zostało zdefiniowane.

Używając let, do konsoli zostaną zalogowane kolejno, wartości 2 i 1.

- - + + \ No newline at end of file diff --git a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb.html b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb.html index 215de65f4..ffdd04ab1 100644 --- a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb.html +++ b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #076

🪲 Znajdź buga

console.log(Object.is([1], [1]))
console.log([1] === [1])

console.log(Object.is(NaN, NaN))
console.log(NaN === NaN)

console.log(Object.is(NaN, 0 / 0))
console.log(NaN === 0 / 0)

console.log(Object.is(-0, +0))
console.log(-0 === +0)

Czy porównanie wartości poprzez Object.is() działa tak samo jak porównanie poprzez operator ===?

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

console.log(Object.is([1], [1])) // false
console.log([1] === [1]) // false

console.log(Object.is(NaN, NaN)) // true
console.log(NaN === NaN) // false

console.log(Object.is(NaN, 0 / 0)) // true
console.log(NaN === 0 / 0) // false

console.log(Object.is(-0, +0)) // false
console.log(-0 === +0) // true

Object.is() mimo, że swoją nazwą sugeruje porównywanie obiektów, w rzeczywistości porównuje dwie wartości przekazane jako argumenty do metody is().

Metoda działa bardzo podobnie do porównania, które wykonuje operator ===, ale z małymi wyjątkami.

Porównanie dwóch wartości NaN za pomocą Object.is() da prawdę.

Tego samego nie możemy się jednak spodziewać po działaniu operatora ===, który jeśli napotka operand NaN, to zawsze zwraca fałsz.

Nie ma tutaj znaczenia czy NaN jest przekazany bezpośrednio jako wartość, czy jest wynikiem działania, np. dzielenia 0 / 0.

Drugim wyjątkiem i nieścisłością pomiędzy Object.is(), a operatorem === jest porównanie zera ujemnego z zerem dodatnim.

W informatyce zapis liczb w pamięci w postaci binarnej wiąże się z użyciem dodatkowego bita (sign), który określa czy liczba jest dodatnia czy ujemna.

Bit ten może być użyty również dla liczby 0, tym samym rozgraniczając ją na dwie wartości: -0 i +0.

Dla Object.is() zero ujemne będzie różniło się od zera dodatniego więc porównanie ich zwróci false.

Dla operatora === oba zera będą takie same, zwracając w efekcie ich porównania wartość true.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugCode.html b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugCode.html index 2e36c54d9..527e881c3 100644 --- a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugCode.html +++ b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(Object.is([1], [1]))
console.log([1] === [1])

console.log(Object.is(NaN, NaN))
console.log(NaN === NaN)

console.log(Object.is(NaN, 0 / 0))
console.log(NaN === 0 / 0)

console.log(Object.is(-0, +0))
console.log(-0 === +0)
- - + + \ No newline at end of file diff --git a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugDescription.html b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugDescription.html index 474202a04..687644a41 100644 --- a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugDescription.html +++ b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy porównanie wartości poprzez Object.is() działa tak samo jak porównanie poprzez operator ===?

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/links.html b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/links.html index e8272dfd0..240833e9e 100644 --- a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/links.html +++ b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionCode.html b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionCode.html index 7e5c77022..146e0857f 100644 --- a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionCode.html +++ b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(Object.is([1], [1])) // false
console.log([1] === [1]) // false

console.log(Object.is(NaN, NaN)) // true
console.log(NaN === NaN) // false

console.log(Object.is(NaN, 0 / 0)) // true
console.log(NaN === 0 / 0) // false

console.log(Object.is(-0, +0)) // false
console.log(-0 === +0) // true
- - + + \ No newline at end of file diff --git a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionDescription.html b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionDescription.html index 05ea1b81c..82816d02f 100644 --- a/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionDescription.html +++ b/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Object.is() mimo, że swoją nazwą sugeruje porównywanie obiektów, w rzeczywistości porównuje dwie wartości przekazane jako argumenty do metody is().

Metoda działa bardzo podobnie do porównania, które wykonuje operator ===, ale z małymi wyjątkami.

Porównanie dwóch wartości NaN za pomocą Object.is() da prawdę.

Tego samego nie możemy się jednak spodziewać po działaniu operatora ===, który jeśli napotka operand NaN, to zawsze zwraca fałsz.

Nie ma tutaj znaczenia czy NaN jest przekazany bezpośrednio jako wartość, czy jest wynikiem działania, np. dzielenia 0 / 0.

Drugim wyjątkiem i nieścisłością pomiędzy Object.is(), a operatorem === jest porównanie zera ujemnego z zerem dodatnim.

W informatyce zapis liczb w pamięci w postaci binarnej wiąże się z użyciem dodatkowego bita (sign), który określa czy liczba jest dodatnia czy ujemna.

Bit ten może być użyty również dla liczby 0, tym samym rozgraniczając ją na dwie wartości: -0 i +0.

Dla Object.is() zero ujemne będzie różniło się od zera dodatniego więc porównanie ich zwróci false.

Dla operatora === oba zera będą takie same, zwracając w efekcie ich porównania wartość true.

- - + + \ No newline at end of file diff --git a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5.html b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5.html index ebb1355ef..5c6201b3e 100644 --- a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5.html +++ b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #007

🪲 Znajdź buga

function addTax(price, tax) {
tax = tax || 0.23

return price + price * tax
}

const priceWithTax = addTax(100, 0)

console.log(priceWithTax)

Chcemy stworzyć funkcję, która będzie nam wyliczała cenę z podatkiem. Zależy nam też na ustawieniu domyślnej wartości podatku na 23%.

Jaka cena zostanie zalogowana do konsoli jako efekt wykonania funkcji addTax(100, 0)?

🧪 Rozwiązanie

function addTax(price, tax = 0.23) {
return price + price * tax
}

const priceWithTax = addTax(100, 0)

console.log(priceWithTax)

W przykładzie z błędem, do konsoli zostania zalogowana cena 123.

Mimo, że wywołując addTax() wyraźnie podajemy w drugim argumencie 0 jako wartość podatku, to używając wewnątrz funkcji logicznego operatora OR (||), wartość 0 traktowana jest jako wartość fałszywa (falsy). W procesie porównywania jest więc odrzucana na rzecz wartości prawdziwej (truthy) i finalnie do zmiennej tax przypisana zostaje wartość 0.23.

Aby naprawić ten błąd możemy np. bezpośrednio podać wartość domyślną dla parametru tax podczas deklarowania funkcji.

Unikniemy dzięki temu wykonywania operacji porównania i wewnątrz funkcji używana będzie dokładnie taka wartość, jaką przekażemy w argumencie wywołując funkcję. W przypadku braku przekazania argumentu tax, użyta zostanie wartość domyślna 0.23.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugCode.html b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugCode.html index f47ca2a3b..826d839d4 100644 --- a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugCode.html +++ b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function addTax(price, tax) {
tax = tax || 0.23

return price + price * tax
}

const priceWithTax = addTax(100, 0)

console.log(priceWithTax)
- - + + \ No newline at end of file diff --git a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugDescription.html b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugDescription.html index 3ded4d42a..6b6a427ed 100644 --- a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugDescription.html +++ b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy stworzyć funkcję, która będzie nam wyliczała cenę z podatkiem. Zależy nam też na ustawieniu domyślnej wartości podatku na 23%.

Jaka cena zostanie zalogowana do konsoli jako efekt wykonania funkcji addTax(100, 0)?

- - + + \ No newline at end of file diff --git a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/links.html b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/links.html index 99721c709..8996fa833 100644 --- a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/links.html +++ b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionCode.html b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionCode.html index 19dd7eaac..c5edc2833 100644 --- a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionCode.html +++ b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function addTax(price, tax = 0.23) {
return price + price * tax
}

const priceWithTax = addTax(100, 0)

console.log(priceWithTax)
- - + + \ No newline at end of file diff --git a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionDescription.html b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionDescription.html index 434f7edee..eefcb27ff 100644 --- a/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionDescription.html +++ b/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, do konsoli zostania zalogowana cena 123.

Mimo, że wywołując addTax() wyraźnie podajemy w drugim argumencie 0 jako wartość podatku, to używając wewnątrz funkcji logicznego operatora OR (||), wartość 0 traktowana jest jako wartość fałszywa (falsy). W procesie porównywania jest więc odrzucana na rzecz wartości prawdziwej (truthy) i finalnie do zmiennej tax przypisana zostaje wartość 0.23.

Aby naprawić ten błąd możemy np. bezpośrednio podać wartość domyślną dla parametru tax podczas deklarowania funkcji.

Unikniemy dzięki temu wykonywania operacji porównania i wewnątrz funkcji używana będzie dokładnie taka wartość, jaką przekażemy w argumencie wywołując funkcję. W przypadku braku przekazania argumentu tax, użyta zostanie wartość domyślna 0.23.

- - + + \ No newline at end of file diff --git a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e.html b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e.html index f24fd582b..539e22e98 100644 --- a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e.html +++ b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #001

🪲 Znajdź buga

const dog = { paws: 4 }
const cat = dog

cat.meow = true

if (dog.meow) {
console.log("That's not a dog!")
}

Obiekt dog zawiera własność paws z wartością ustawioną na 4.

Przekładając na język ludzki, pies ma 4 łapy.

Chcemy utworzyć nowy obiekt cat, kopiując obiekt dog, bo oba zwierzęta mają 4 łapy.

Chcemy też dodać własność miauczenia do obiektu cat.

Czy w powyższym przykładzie instrukcja warunkowa zadziała i pies będzie mógł miauczeć?

🧪 Rozwiązanie

const dog = { paws: 4 }
const cat = { ...dog }

cat.meow = true

if (dog.meow) {
console.log("That's not a dog!")
}

Niestety tak. W przykładzie z błędem, obiekt dog i cat to ten sam obiekt, dog ma więc własność meow.

Dzieje się tak, ponieważ JavaScript wywołuje referencje obiektów (czyli ich adresy z tzw. sterty, przechowywanej w pamięci RAM, z ang. heap).

const cat = dog

Tworząc nową stałą cat wskazujemy nią na istniejący obiekt dog.

Finalnie tworzymy więc jedynie alias tego samego obiektu, który dostępny jest od teraz pod dwiema nazwami cat i dog.

Aby uniknąć sytuacji przypisania tego samego obiektu do stałej/zmiennej, musimy wyraźnie stworzyć kopię obiektu.

Możemy to zrobić np. przez destrukturyzację obiektu i przypisanie zdestrukturyzowanych elementów do nowego obiektu

const cat = { ...dog }

Lub przez przepisanie własności obiektu dog do nowego pustego obiektu {} używając Object.assign().

const cat = Object.assign({}, dog)

Uwaga! Powyższe metody tworzą jedynie "płytką" kopię. Kopiowany jest tylko pierwszy poziom własności. Zagnieżdżone obiekty (obiekt w obiekcie) są wciąż przekazywane w postaci referencji, a nie kopi.

const deepObject = { level: 1, nested: { level: 2 } }

Przy skopiowaniu powyższego obiektu za pomocą { ...deepObject } lub Object.assign({}, deepObject), obiekt nested wciąż będzie przekazany jako referencja.

Rozwiązaniem tego problemu jest użycie funkcji structuredClone() lub metody _.cloneDeep() z biblioteki Lodash.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugCode.html b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugCode.html index 9cc0c2431..b1b5630dc 100644 --- a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugCode.html +++ b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const dog = { paws: 4 }
const cat = dog

cat.meow = true

if (dog.meow) {
console.log("That's not a dog!")
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugDescription.html b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugDescription.html index c72a4adf2..fe568010e 100644 --- a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugDescription.html +++ b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Obiekt dog zawiera własność paws z wartością ustawioną na 4.

Przekładając na język ludzki, pies ma 4 łapy.

Chcemy utworzyć nowy obiekt cat, kopiując obiekt dog, bo oba zwierzęta mają 4 łapy.

Chcemy też dodać własność miauczenia do obiektu cat.

Czy w powyższym przykładzie instrukcja warunkowa zadziała i pies będzie mógł miauczeć?

- - + + \ No newline at end of file diff --git a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/links.html b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/links.html index f67e08a64..3a84212a1 100644 --- a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/links.html +++ b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionCode.html b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionCode.html index 0e1d748f6..99a19dea7 100644 --- a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionCode.html +++ b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const dog = { paws: 4 }
const cat = { ...dog }

cat.meow = true

if (dog.meow) {
console.log("That's not a dog!")
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionDescription.html b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionDescription.html index 6ebfe4d1c..3b06d9edd 100644 --- a/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionDescription.html +++ b/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Niestety tak. W przykładzie z błędem, obiekt dog i cat to ten sam obiekt, dog ma więc własność meow.

Dzieje się tak, ponieważ JavaScript wywołuje referencje obiektów (czyli ich adresy z tzw. sterty, przechowywanej w pamięci RAM, z ang. heap).

const cat = dog

Tworząc nową stałą cat wskazujemy nią na istniejący obiekt dog.

Finalnie tworzymy więc jedynie alias tego samego obiektu, który dostępny jest od teraz pod dwiema nazwami cat i dog.

Aby uniknąć sytuacji przypisania tego samego obiektu do stałej/zmiennej, musimy wyraźnie stworzyć kopię obiektu.

Możemy to zrobić np. przez destrukturyzację obiektu i przypisanie zdestrukturyzowanych elementów do nowego obiektu

const cat = { ...dog }

Lub przez przepisanie własności obiektu dog do nowego pustego obiektu {} używając Object.assign().

const cat = Object.assign({}, dog)

Uwaga! Powyższe metody tworzą jedynie "płytką" kopię. Kopiowany jest tylko pierwszy poziom własności. Zagnieżdżone obiekty (obiekt w obiekcie) są wciąż przekazywane w postaci referencji, a nie kopi.

const deepObject = { level: 1, nested: { level: 2 } }

Przy skopiowaniu powyższego obiektu za pomocą { ...deepObject } lub Object.assign({}, deepObject), obiekt nested wciąż będzie przekazany jako referencja.

Rozwiązaniem tego problemu jest użycie funkcji structuredClone() lub metody _.cloneDeep() z biblioteki Lodash.

- - + + \ No newline at end of file diff --git a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed.html b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed.html index 0f49f880a..4fa2f9009 100644 --- a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed.html +++ b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed.html @@ -7,15 +7,15 @@ - - + +
Przejdź do głównej zawartości

Bug #073

🪲 Znajdź buga

console.log([] + [])
console.log([] + {})
console.log({} + [])
console.log({} + {})

console.log([] + + [])
console.log([] + + {})
console.log({} + + [])
console.log({} + + {})

W języku JavaScript operator + ma kilka zastosowań.

Jakie z nich wezmą udział w powyższych przykładach i co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

console.log([] + []) // ""
console.log([] + {}) // "[object Object]"
console.log({} + []) // "[object Object]"
console.log({} + {}) // "[object Object][object Object]"

console.log([] + + []) // 0
console.log([] + + {}) // NaN
console.log({} + + []) // "[object Object]0"
console.log({} + + {}) // "[object Object]NaN"

Zacznijmy od tego, że dwa znaki + + oddzielone od siebie spacją są interpretowane jako dwa osobne znaki (operatory).

Nie ma tu więc mowy o zadziałaniu operatora inkrementacji ++.

Znak + może działać jako jednoargumentowy operator, gdy występuje w sąsiedztwie tylko jednego operandu.

Jego działanie skutkuje wtedy konwersją wartości na wartość liczbową.

Przykładowo + true lub +true (białe znaki są tutaj ignorowane) zwróci wartość 1.

Kluczowe jest wystąpienie wyłącznie jednego operandu z prawej strony operatora +.

Gdyby pojawiły się dwa operandy np. true + true to operator + zadziała już jako operator dodawania (choć wcześniej nastąpi też konwersja wartości logicznych na wartości liczbowe).

Wystąpienie dwóch operatorów + + oznacza, że drugi z nich na pewno po swojej lewej stronie nie ma operandu, więc zadziała jako jednoargumentowy operator.

Jednoargumentowy operator + ma też pierwszeństwo wykonywania przed operatorem dodawania +.

Wracając do przykładów, pierwsze cztery będą operacjami dodawania.

Dodawanie nie oznacza jednak zawsze dodawania wartości liczbowych.

Gdy jeden z operandów jest ciągiem znaków, operator ten zachowuje się jako operator konkatenacji czyli łączenia ze sobą ciągów znaków.

Gdy dodawane są wartości nie prymitywne (obiekty), w pierwszej kolejności następuje zamiana na wartości prymitywne.

Tablice konwertowane są na ciągi znaków.

Jeśli są puste, to konwertowane są do pustych ciągów znaków "".

Dodanie do siebie dwóch pustych tablic [] to więc to samo co dodanie do siebie dwóch pustych ciągów znaków, co finalnie daje nam pusty ciąg znaków.

Puste obiekty, które nie są tablicami, skonwertowane do ciągu znaków, zwracają "[object Object]".

Na pierwszy rzut oka może to wyglądać jak tablica z dwoma wartościami object, Object.

W rzeczywistości jest to jednak ciąg znaków, który zawiera nawias kwadratowy.

Jeśli dodamy więc pustą tablicę i pusty obiekt, to operator + połączy ze sobą dwa ciągi znaków: "" oraz "[object Object]", co finalnie da nam ciąg znaków "[object Object]".

Dodanie do siebie dwóch pustych obiektów, da nam zdublowane\ "[object Object][object Object]".

Gdy do gry wkracza dodatkowo jednoargumentowy operator +, jego prawy operand konwertowany jest do wartości liczbowej.

Pusta tablica zwraca wartość 0. Pusty obiekt zwraca wartość NaN.

Finalnie zachodzi dodawanie (konkatenacja) tych wartości z ciągami znaków (pustej tablicy, albo pustego obiektu) razem z ciągiem znaków "0" lub "NaN".

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugCode.html b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugCode.html index f40fce030..7dcb0dae4 100644 --- a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugCode.html +++ b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log([] + [])
console.log([] + {})
console.log({} + [])
console.log({} + {})

console.log([] + + [])
console.log([] + + {})
console.log({} + + [])
console.log({} + + {})
- - + + \ No newline at end of file diff --git a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugDescription.html b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugDescription.html index 62b93a72d..872847776 100644 --- a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugDescription.html +++ b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W języku JavaScript operator + ma kilka zastosowań.

Jakie z nich wezmą udział w powyższych przykładach i co zostanie zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/links.html b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/links.html index 8e75a958c..f93e7ba32 100644 --- a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/links.html +++ b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionCode.html b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionCode.html index 0bbc5c2dc..bceca41d8 100644 --- a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionCode.html +++ b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log([] + []) // ""
console.log([] + {}) // "[object Object]"
console.log({} + []) // "[object Object]"
console.log({} + {}) // "[object Object][object Object]"

console.log([] + + []) // 0
console.log([] + + {}) // NaN
console.log({} + + []) // "[object Object]0"
console.log({} + + {}) // "[object Object]NaN"
- - + + \ No newline at end of file diff --git a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionDescription.html b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionDescription.html index 2c9568953..39afb7a5f 100644 --- a/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionDescription.html +++ b/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionDescription.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Zacznijmy od tego, że dwa znaki + + oddzielone od siebie spacją są interpretowane jako dwa osobne znaki (operatory).

Nie ma tu więc mowy o zadziałaniu operatora inkrementacji ++.

Znak + może działać jako jednoargumentowy operator, gdy występuje w sąsiedztwie tylko jednego operandu.

Jego działanie skutkuje wtedy konwersją wartości na wartość liczbową.

Przykładowo + true lub +true (białe znaki są tutaj ignorowane) zwróci wartość 1.

Kluczowe jest wystąpienie wyłącznie jednego operandu z prawej strony operatora +.

Gdyby pojawiły się dwa operandy np. true + true to operator + zadziała już jako operator dodawania (choć wcześniej nastąpi też konwersja wartości logicznych na wartości liczbowe).

Wystąpienie dwóch operatorów + + oznacza, że drugi z nich na pewno po swojej lewej stronie nie ma operandu, więc zadziała jako jednoargumentowy operator.

Jednoargumentowy operator + ma też pierwszeństwo wykonywania przed operatorem dodawania +.

Wracając do przykładów, pierwsze cztery będą operacjami dodawania.

Dodawanie nie oznacza jednak zawsze dodawania wartości liczbowych.

Gdy jeden z operandów jest ciągiem znaków, operator ten zachowuje się jako operator konkatenacji czyli łączenia ze sobą ciągów znaków.

Gdy dodawane są wartości nie prymitywne (obiekty), w pierwszej kolejności następuje zamiana na wartości prymitywne.

Tablice konwertowane są na ciągi znaków.

Jeśli są puste, to konwertowane są do pustych ciągów znaków "".

Dodanie do siebie dwóch pustych tablic [] to więc to samo co dodanie do siebie dwóch pustych ciągów znaków, co finalnie daje nam pusty ciąg znaków.

Puste obiekty, które nie są tablicami, skonwertowane do ciągu znaków, zwracają "[object Object]".

Na pierwszy rzut oka może to wyglądać jak tablica z dwoma wartościami object, Object.

W rzeczywistości jest to jednak ciąg znaków, który zawiera nawias kwadratowy.

Jeśli dodamy więc pustą tablicę i pusty obiekt, to operator + połączy ze sobą dwa ciągi znaków: "" oraz "[object Object]", co finalnie da nam ciąg znaków "[object Object]".

Dodanie do siebie dwóch pustych obiektów, da nam zdublowane\ "[object Object][object Object]".

Gdy do gry wkracza dodatkowo jednoargumentowy operator +, jego prawy operand konwertowany jest do wartości liczbowej.

Pusta tablica zwraca wartość 0. Pusty obiekt zwraca wartość NaN.

Finalnie zachodzi dodawanie (konkatenacja) tych wartości z ciągami znaków (pustej tablicy, albo pustego obiektu) razem z ciągiem znaków "0" lub "NaN".

- - + + \ No newline at end of file diff --git a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91.html b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91.html index eaad9e0b8..6e45b0660 100644 --- a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91.html +++ b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #012

🪲 Znajdź buga

const user1 = {
name: "John",
}
const user2 = {
name: "John",
}

console.log(user1 == user2)

Co zostanie zalogowane do konsoli z operacji porównania dwóch obiektów user1 i user2?

Czy będzie to wartość true czy false? A może jeszcze coś innego?

🧪 Rozwiązanie

const user1 = {
name: "John",
}
const user2 = {
name: "John",
}

console.log(JSON.stringify(user1) === JSON.stringify(user2))

Zacznijmy od tego, że użycie operatora == lub === nie ma tutaj żadnego znaczenia. Typ porównywanych danych jest taki sam, więc ścisłe porównanie (===) zadziałałoby identycznie jak zwykłe (==).

Jednak mimo, że wartości obiektów user1 i user2 są takie same, ich porównanie zwraca fałsz, ponieważ są to dwa różne obiekty.

W poprzednich bugach (np. #001) dowiedziałeś się, że przypisywanie obiektów do stałych/zmiennych polega na przypisaniu jedynie ich referencji tj. adresu z pamięci RAM.

Oznacza to, że porównując wartości przypisane do stałych user1 i user2, porównujemy tak naprawdę jedynie adresy w pamięci RAM, w których zapisane są te obiekty. A te w naszym przypadku są różne.

Sytuacja ma się inaczej w przypadku porównywania typów pierwotnych jak ciągi znaków (string), liczby (number), wartości logiczne (boolean).

Możemy więc użyć obejścia i za pomocą JSON.stringify() przekonwertować obiekty na ciągi znaków. Następnie możemy porównać ciągi znaków i otrzymać true, już zgodnie z naszymi oczekiwaniami.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugCode.html b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugCode.html index 943df24d5..831049a22 100644 --- a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugCode.html +++ b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const user1 = {
name: "John",
}
const user2 = {
name: "John",
}

console.log(user1 == user2)
- - + + \ No newline at end of file diff --git a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugDescription.html b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugDescription.html index 60eee63d2..ee3611ed8 100644 --- a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugDescription.html +++ b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Co zostanie zalogowane do konsoli z operacji porównania dwóch obiektów user1 i user2?

Czy będzie to wartość true czy false? A może jeszcze coś innego?

- - + + \ No newline at end of file diff --git a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/links.html b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/links.html index b1e78e498..fdde12d13 100644 --- a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/links.html +++ b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionCode.html b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionCode.html index 07c48d335..97c084777 100644 --- a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionCode.html +++ b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const user1 = {
name: "John",
}
const user2 = {
name: "John",
}

console.log(JSON.stringify(user1) === JSON.stringify(user2))
- - + + \ No newline at end of file diff --git a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionDescription.html b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionDescription.html index 0ef77063e..28c121c7a 100644 --- a/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionDescription.html +++ b/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Zacznijmy od tego, że użycie operatora == lub === nie ma tutaj żadnego znaczenia. Typ porównywanych danych jest taki sam, więc ścisłe porównanie (===) zadziałałoby identycznie jak zwykłe (==).

Jednak mimo, że wartości obiektów user1 i user2 są takie same, ich porównanie zwraca fałsz, ponieważ są to dwa różne obiekty.

W poprzednich bugach (np. #001) dowiedziałeś się, że przypisywanie obiektów do stałych/zmiennych polega na przypisaniu jedynie ich referencji tj. adresu z pamięci RAM.

Oznacza to, że porównując wartości przypisane do stałych user1 i user2, porównujemy tak naprawdę jedynie adresy w pamięci RAM, w których zapisane są te obiekty. A te w naszym przypadku są różne.

Sytuacja ma się inaczej w przypadku porównywania typów pierwotnych jak ciągi znaków (string), liczby (number), wartości logiczne (boolean).

Możemy więc użyć obejścia i za pomocą JSON.stringify() przekonwertować obiekty na ciągi znaków. Następnie możemy porównać ciągi znaków i otrzymać true, już zgodnie z naszymi oczekiwaniami.

- - + + \ No newline at end of file diff --git a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910.html b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910.html index 7bbf87c22..c2df902df 100644 --- a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910.html +++ b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #100

🪲 Znajdź buga

const letters = ["a", "z", "b", "c", "e", "f"]

letters.splice(1, 1)
letters.splice(3, 0, "d")

letters.slice(0, 3)
letters.slice(3)

console.log(letters)

Co zostanie zalogowane do konsoli?

Jak jest różnica między splice(), a slice()?

🧪 Rozwiązanie

const letters = ["a", "z", "b", "c", "e", "f"]

letters.splice(1, 1)
letters.splice(3, 0, "d")

letters.slice(0, 3)
letters.slice(3)

console.log(letters)
// ["a", "b", "c", "d", "e", "f"]

W konsoli ujrzymy ["a", "b", "c", "d", "e", "f"].

letters.splice(1, 1) usuwa z tablicy jeden element pod indeksem 1 (czyli "z").

letters.splice(3, 0, "d") dodaje do tablicy element o wartości "d" w indeksie 3, bez jego usuwania (nadpisywania) oraz bez usuwania następnych elementów w zadanej ilości (0).

Następuje więc "wepchnięcie" nowego elementu, spychając istniejące elementy od indeksu 3 na dalsze pozycje.

Metoda Array.prototype.splice() modyfikuje oryginalną tablicę.

Tablica pod stałą letters jest więc mutowana, dlatego po zalogowaniu jej do konsoli widzimy zaktualizowany układ elementów.

Jeśli chcielibyśmy uniknąć mutacji sugerowaną alternatywą jest Array.prototype.toSpliced().

Jest to jednak nowa metoda, w chwili pisania tego tekstu, nie zaimplementowana jeszcze przez wszystkie silniki JavaScript.

Aktualnie obsługują ją przeglądarki Chrome, Edge, Opera, Safari, ale nie Firefox i środowiska uruchomieniowe Node.js, Deno.

Druga, użyta w przykładzie metoda to Array.prototype.slice().

Tworzy ona płytką kopię modyfikowanej tablicy i zwraca nowy zmodyfikowany jej kształt.

Płytka kopia oznacza, że w przypadku zagnieżdżonych tablic, również mogą wystąpić mutacje, tak jak w przypadku użycia splice().

Wywołanie letters.slice(0, 3) oraz letters.slice(3) nie wpływa w naszym przykładzie na oryginalną tablicę letters.

Żeby zobaczyć wynik działania tych metod, musielibyśmy zalogować ich wykonanie do konsoli.

letters.slice(0, 3) zwróciłoby wtedy tylko pierwsze trzy elementy tablicy.

Cięcie tablicy odbywa się tutaj od indeksu 0 do 3 (nie włączając 3).

letters.slice(3) to z kolei odcięcie fragmentu tablicy rozpoczynając od indeksu 3 aż do końca tablicy.

W naszym przypadku byłyby to trzy ostatnie elementy tablicy.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugCode.html b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugCode.html index 3992e5226..2d84399ea 100644 --- a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugCode.html +++ b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const letters = ["a", "z", "b", "c", "e", "f"]

letters.splice(1, 1)
letters.splice(3, 0, "d")

letters.slice(0, 3)
letters.slice(3)

console.log(letters)
- - + + \ No newline at end of file diff --git a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugDescription.html b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugDescription.html index feeca5af0..6f12ea35f 100644 --- a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugDescription.html +++ b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Co zostanie zalogowane do konsoli?

Jak jest różnica między splice(), a slice()?

- - + + \ No newline at end of file diff --git a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/links.html b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/links.html index a8472b967..216de2fc3 100644 --- a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/links.html +++ b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionCode.html b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionCode.html index 806117966..c93da1a11 100644 --- a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionCode.html +++ b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const letters = ["a", "z", "b", "c", "e", "f"]

letters.splice(1, 1)
letters.splice(3, 0, "d")

letters.slice(0, 3)
letters.slice(3)

console.log(letters)
// ["a", "b", "c", "d", "e", "f"]
- - + + \ No newline at end of file diff --git a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionDescription.html b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionDescription.html index 4128b13a5..38153eea1 100644 --- a/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionDescription.html +++ b/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W konsoli ujrzymy ["a", "b", "c", "d", "e", "f"].

letters.splice(1, 1) usuwa z tablicy jeden element pod indeksem 1 (czyli "z").

letters.splice(3, 0, "d") dodaje do tablicy element o wartości "d" w indeksie 3, bez jego usuwania (nadpisywania) oraz bez usuwania następnych elementów w zadanej ilości (0).

Następuje więc "wepchnięcie" nowego elementu, spychając istniejące elementy od indeksu 3 na dalsze pozycje.

Metoda Array.prototype.splice() modyfikuje oryginalną tablicę.

Tablica pod stałą letters jest więc mutowana, dlatego po zalogowaniu jej do konsoli widzimy zaktualizowany układ elementów.

Jeśli chcielibyśmy uniknąć mutacji sugerowaną alternatywą jest Array.prototype.toSpliced().

Jest to jednak nowa metoda, w chwili pisania tego tekstu, nie zaimplementowana jeszcze przez wszystkie silniki JavaScript.

Aktualnie obsługują ją przeglądarki Chrome, Edge, Opera, Safari, ale nie Firefox i środowiska uruchomieniowe Node.js, Deno.

Druga, użyta w przykładzie metoda to Array.prototype.slice().

Tworzy ona płytką kopię modyfikowanej tablicy i zwraca nowy zmodyfikowany jej kształt.

Płytka kopia oznacza, że w przypadku zagnieżdżonych tablic, również mogą wystąpić mutacje, tak jak w przypadku użycia splice().

Wywołanie letters.slice(0, 3) oraz letters.slice(3) nie wpływa w naszym przykładzie na oryginalną tablicę letters.

Żeby zobaczyć wynik działania tych metod, musielibyśmy zalogować ich wykonanie do konsoli.

letters.slice(0, 3) zwróciłoby wtedy tylko pierwsze trzy elementy tablicy.

Cięcie tablicy odbywa się tutaj od indeksu 0 do 3 (nie włączając 3).

letters.slice(3) to z kolei odcięcie fragmentu tablicy rozpoczynając od indeksu 3 aż do końca tablicy.

W naszym przypadku byłyby to trzy ostatnie elementy tablicy.

- - + + \ No newline at end of file diff --git a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2.html b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2.html index 863306f0b..cb0e8dcf8 100644 --- a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2.html +++ b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #040

🪲 Znajdź buga

// 1
if ([]) {
console.log("[]")
}
if (["0"]) {
console.log('["0"]')
}

// 2
if ([] == false) {
console.log("[] == false")
}
if (["0"] == false) {
console.log('["0"] == false')
}

// 3
if ([] === false) {
console.log("[] === false")
}
if (["0"] === false) {
console.log('["0"] === false')
}

Chcemy wykonać jakiś kod, tylko w sytuacji gdy tablica będzie pusta. Którego z powyższych rozwiązań możemy do tego użyć?

🧪 Rozwiązanie

if ([].length === 0) {
console.log("Array is empty")
}

Żaden z trzech początkowych przykładów nie będzie się do nadawał do sprawdzenia, czy tablica jest pusta.

Po pierwsze, pusta tablica nie jest wartością fałszywą według listy wartości fałszywych w JavaScript, więc if ([]) odpada.

Po drugie, luźne porównanie == tablicy z wartością false jest najbliższe spełnieniu zadania, ale nie daje 100% pewności.

Po trzecie, ścisłe porównanie === odpada, bo porównywane typy danych [] i false się od siebie różnią.

W przypadku luźnego porównania tablicy z wartością logiczną, == sprowadzi najpierw wartości do jednego typu, którym będzie wartość liczbowa (tak działa algorytm tego operatora).

[] == false zamieni się na Number([]) === Number(false). Typy porównywanych danych się zgadzają, więc luźne porównanie zastosuje już algorytm porównania ścisłego.

Wartość liczbowa z pustej tablicy zostanie skonwertowana do wartości 0. Wartość liczbowa z wartości false da również 0.

Mamy zwycięzcę... prawie. Bo co jeśli zamiast pustej tablicy, pojawi się np. [0], albo ["0"]?

Funkcja Number() sprowadzi taką tablicę również do wartości 0. 🤯

Nie możemy więc polegać na porównaniu [] == false, jeśli zależy nam na wykonaniu instrukcji warunkowej tylko w przypadku gdy tablica jest pusta.

Rozsądną opcją może być użycie własności length na obiekcie tablicy. Zwrócona zostanie wtedy wartość liczbowa wskazująca na ilość elementów znajdujących się w tablicy.

Jeśli zwróconą wartością będzie wartość 0, to mamy wtedy pewność, że tablica nie zawiera żadnych elementów (jest pusta).

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugCode.html b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugCode.html index 916dcfd2d..b4266e413 100644 --- a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugCode.html +++ b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
// 1
if ([]) {
console.log("[]")
}
if (["0"]) {
console.log('["0"]')
}

// 2
if ([] == false) {
console.log("[] == false")
}
if (["0"] == false) {
console.log('["0"] == false')
}

// 3
if ([] === false) {
console.log("[] === false")
}
if (["0"] === false) {
console.log('["0"] === false')
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugDescription.html b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugDescription.html index 4cf8aa456..1096395df 100644 --- a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugDescription.html +++ b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy wykonać jakiś kod, tylko w sytuacji gdy tablica będzie pusta. Którego z powyższych rozwiązań możemy do tego użyć?

- - + + \ No newline at end of file diff --git a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/links.html b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/links.html index 4f11e4f13..75511f665 100644 --- a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/links.html +++ b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionCode.html b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionCode.html index 7e839d08b..8af6ccd26 100644 --- a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionCode.html +++ b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
if ([].length === 0) {
console.log("Array is empty")
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionDescription.html b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionDescription.html index 6c5cbecd0..a4274862d 100644 --- a/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionDescription.html +++ b/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Żaden z trzech początkowych przykładów nie będzie się do nadawał do sprawdzenia, czy tablica jest pusta.

Po pierwsze, pusta tablica nie jest wartością fałszywą według listy wartości fałszywych w JavaScript, więc if ([]) odpada.

Po drugie, luźne porównanie == tablicy z wartością false jest najbliższe spełnieniu zadania, ale nie daje 100% pewności.

Po trzecie, ścisłe porównanie === odpada, bo porównywane typy danych [] i false się od siebie różnią.

W przypadku luźnego porównania tablicy z wartością logiczną, == sprowadzi najpierw wartości do jednego typu, którym będzie wartość liczbowa (tak działa algorytm tego operatora).

[] == false zamieni się na Number([]) === Number(false). Typy porównywanych danych się zgadzają, więc luźne porównanie zastosuje już algorytm porównania ścisłego.

Wartość liczbowa z pustej tablicy zostanie skonwertowana do wartości 0. Wartość liczbowa z wartości false da również 0.

Mamy zwycięzcę... prawie. Bo co jeśli zamiast pustej tablicy, pojawi się np. [0], albo ["0"]?

Funkcja Number() sprowadzi taką tablicę również do wartości 0. 🤯

Nie możemy więc polegać na porównaniu [] == false, jeśli zależy nam na wykonaniu instrukcji warunkowej tylko w przypadku gdy tablica jest pusta.

Rozsądną opcją może być użycie własności length na obiekcie tablicy. Zwrócona zostanie wtedy wartość liczbowa wskazująca na ilość elementów znajdujących się w tablicy.

Jeśli zwróconą wartością będzie wartość 0, to mamy wtedy pewność, że tablica nie zawiera żadnych elementów (jest pusta).

- - + + \ No newline at end of file diff --git a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050.html b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050.html index 1c49ab877..76ae8a06f 100644 --- a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050.html +++ b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #059

🪲 Znajdź buga

let foo = { val: 1 }
let bar = foo
foo.prop = foo = { val: 2 }

console.log(foo)
console.log(bar)
console.log(foo.prop)

Co zostanie zalogowane do konsoli w powyższym przykładzie?

🧪 Rozwiązanie

let foo = { val: 1 }
let bar = foo
foo.prop = foo = { val: 2 }

console.log(foo) // { val: 2 }
console.log(bar) // { val: 1, prop: { val: 2 } }
console.log(foo.prop) // undefined

Logując zmienną foo, dostaniemy obiekt { val: 2 }, bo taki został do niej przypisany w 3 linii.

Zwróć uwagę, że ta operacja przypisania ma efekt nadpisania, tzn. przypisujemy nową wartość do zmiennej foo. Nie ma tu miejsca modyfikacja własności foo.val, więc nie wpływa to na początkowy obiekt przypisany (przez referencję) do zmiennej bar.

Zmienna bar zwiera więc obiekt z własnością val o wartości 1. Dodatkowo w obiekcie pojawia się też własność prop, bo zmienna bar to tak naprawdę jedynie alias początkowego obiektu ze zmiennej foo.

W 3 lini, przypisanie foo.prop działa też dla aliasu czyli, aktywuje przypisania też dla bar.prop.

Moglibyśmy więc to zapisać też jako bar.prop = foo = { val: 2 }.

W tym miejscu "ginie" też początkowa wartość zmiennej foo, którą nadpisujemy nowym obiektem, który nie jest już związany referencją z obiektem przypisanym do zmiennej bar.

Od tego momentu, obiekt w zmiennej foo jest już nowym obiektem, który nie ma pojęcia o własności prop, dlatego loguje undefined.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugCode.html b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugCode.html index 3291de566..4f52d01a8 100644 --- a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugCode.html +++ b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let foo = { val: 1 }
let bar = foo
foo.prop = foo = { val: 2 }

console.log(foo)
console.log(bar)
console.log(foo.prop)
- - + + \ No newline at end of file diff --git a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugDescription.html b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugDescription.html index 75e011c6e..c1e4a4d21 100644 --- a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugDescription.html +++ b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Co zostanie zalogowane do konsoli w powyższym przykładzie?

- - + + \ No newline at end of file diff --git a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/links.html b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/links.html index 6b7e03c8c..8141969ea 100644 --- a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/links.html +++ b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionCode.html b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionCode.html index 981a6cc6d..419ee442b 100644 --- a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionCode.html +++ b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let foo = { val: 1 }
let bar = foo
foo.prop = foo = { val: 2 }

console.log(foo) // { val: 2 }
console.log(bar) // { val: 1, prop: { val: 2 } }
console.log(foo.prop) // undefined
- - + + \ No newline at end of file diff --git a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionDescription.html b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionDescription.html index 2e6d5b42f..c856c1ab2 100644 --- a/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionDescription.html +++ b/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Logując zmienną foo, dostaniemy obiekt { val: 2 }, bo taki został do niej przypisany w 3 linii.

Zwróć uwagę, że ta operacja przypisania ma efekt nadpisania, tzn. przypisujemy nową wartość do zmiennej foo. Nie ma tu miejsca modyfikacja własności foo.val, więc nie wpływa to na początkowy obiekt przypisany (przez referencję) do zmiennej bar.

Zmienna bar zwiera więc obiekt z własnością val o wartości 1. Dodatkowo w obiekcie pojawia się też własność prop, bo zmienna bar to tak naprawdę jedynie alias początkowego obiektu ze zmiennej foo.

W 3 lini, przypisanie foo.prop działa też dla aliasu czyli, aktywuje przypisania też dla bar.prop.

Moglibyśmy więc to zapisać też jako bar.prop = foo = { val: 2 }.

W tym miejscu "ginie" też początkowa wartość zmiennej foo, którą nadpisujemy nowym obiektem, który nie jest już związany referencją z obiektem przypisanym do zmiennej bar.

Od tego momentu, obiekt w zmiennej foo jest już nowym obiektem, który nie ma pojęcia o własności prop, dlatego loguje undefined.

- - + + \ No newline at end of file diff --git a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2.html b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2.html index c03ded6a2..90fccb3a5 100644 --- a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2.html +++ b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #032

🪲 Znajdź buga

setTimeout(() => {
console.log("setTimeout")
})

new Promise((resolve) => {
setTimeout(() => {
resolve("Promise setTimeout")
})
}).then((response) => {
console.log(response)
})

new Promise((resolve) => {
resolve("Promise")
}).then((response) => {
console.log(response)
})

queueMicrotask(() => {
console.log("Microtask")
})

console.log("Global context")

W jakiej kolejności do konsoli zostaną zalogowane odpowiedzi?

🧪 Rozwiązanie

setTimeout(() => {
console.log("setTimeout") // 4
})

new Promise((resolve) => {
setTimeout(() => {
resolve("Promise setTimeout")
})
}).then((response) => {
console.log(response) // 5
})

new Promise((resolve) => {
resolve("Promise")
}).then((response) => {
console.log(response) // 2
})

queueMicrotask(() => {
console.log("Microtask") // 3
})

console.log("Global context") // 1

Do konsoli zostaną zalogowane odpowiedzi w następującej kolejności:

  1. Global context
  2. Promise
  3. Microtask
  4. setTimeout
  5. Promise setTimeout

JavaScript jest jednowątkowym językiem programowania. Nie możemy wykonać równolegle wielu fragmentów kodu poprzez wiele wątków procesora (chyba, że z pomocą Worker'ów, ale to osobny temat).

Nieporozumienie, które może wynikać z uznawania JavaScriptu jako języka wielowątkowego jest możliwość asynchroniczność.

W JavaScript asynchroniczność oznacza, że możemy oddelegować na później wykonywanie kodu, który do wykonania potrzebuje więcej czasu.

Każda interakcja na stronie internetowej, obsługiwana przez JavaScript, zawiesza działanie strony (zamrażając możliwość wykonywania na niej jakichkolwiek akcji) do czasu ukończenia wykonywania kodu przez procesor. Zazwyczaj dzieje się to jednak tak szybko, że nawet nie dostrzegamy wynikających z tego opóźnień.

Są jednak operacje, które wymagają więcej czasu do zrealizowania, nie tylko z uwagi na złożoność obliczeniową, ale także na opóźnienia wynikające z dostępu do danych (np. odpytując zewnętrzne API).

Gdyby tego typu operacje były wykonywane synchronicznie, strona kompletnie zawieszałaby się (przewijanie, czy klikanie w przyciski byłoby zamrożone), aż do momentu pobrania danych.

Rozwiązaniem tego problemu w JavaScript jest pętla zdarzeń (event loop), która regularnie wykonuje zadania, jakimi jest wykonanie kodu. Jednocześnie zadania wywołane asynchronicznie są umieszczane w kolejce do wykonania podczas kolejnego cyklu pętli zdarzeń.

Asynchroniczna kolejka zadań jest jeszcze dodatkowo podzielona na zwykłe zadania i zadania mikro.

Zadaniem zwykłym, które wpadnie do kolejki asynchronicznej jest np. setTimeout(), a mikro zadaniem Promise.

Mikro zadania z kolejki wykonywane są na końcu aktualnej iteracji pętli zdarzeń, natomiast standardowe zadania z kolejki, na początku kolejnej iteracji.

Kod z przykładu wykonuje się więc w następującej kolejności:

  1. Global context jest wywołany synchronicznie, czyli w pierwszej kolejności, w aktualnej iteracji pętli zdarzeń
  2. Promise i queueMicrotask() to mikro zadania, oddelegowane do wykonania na koniec aktualnej iteracji pętli zdarzeń, wykonywane w kolejności w jakiej zostały dodane (w naszym przykładzie najpierw Promise, potem Microtask)
  3. setTimeout() to zadania oddelegowane do wykonania na początek kolejnej iteracji pętli zdarzeń, wykonywane również w kolejności w jakiej zostały dodane (w naszym przykładzie najpierw setTimeout() wywołany wewnątrz mikro zadania Promise, następnie setTimeout() wywołany w globalnym kontekście)

Zdefiniowanie zadania setTimeout() w mikro zadaniu Promise oznacza, że wykonywane mikro zadanie Promise na początku aktualnej iteracji pętli zdarzeń, oddeleguje zadanie setTimeout() na początek kolejnej iteracji pętli. Efekt działania jest więc taki sam, jak gdyby setTimeout() było wywołane w globalnym kontekście, bez zagnieżdżenia wewnątrz mikro zadania Promise.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugCode.html b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugCode.html index 4044a87d3..7bd51dc09 100644 --- a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugCode.html +++ b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
setTimeout(() => {
console.log("setTimeout")
})

new Promise((resolve) => {
setTimeout(() => {
resolve("Promise setTimeout")
})
}).then((response) => {
console.log(response)
})

new Promise((resolve) => {
resolve("Promise")
}).then((response) => {
console.log(response)
})

queueMicrotask(() => {
console.log("Microtask")
})

console.log("Global context")
- - + + \ No newline at end of file diff --git a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugDescription.html b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugDescription.html index 23384bae0..adceb0ed8 100644 --- a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugDescription.html +++ b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W jakiej kolejności do konsoli zostaną zalogowane odpowiedzi?

- - + + \ No newline at end of file diff --git a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/links.html b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/links.html index 82a3c0165..0419654ac 100644 --- a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/links.html +++ b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionCode.html b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionCode.html index 83418990f..c8b4a4daa 100644 --- a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionCode.html +++ b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
setTimeout(() => {
console.log("setTimeout") // 4
})

new Promise((resolve) => {
setTimeout(() => {
resolve("Promise setTimeout")
})
}).then((response) => {
console.log(response) // 5
})

new Promise((resolve) => {
resolve("Promise")
}).then((response) => {
console.log(response) // 2
})

queueMicrotask(() => {
console.log("Microtask") // 3
})

console.log("Global context") // 1
- - + + \ No newline at end of file diff --git a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionDescription.html b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionDescription.html index 28aab49b2..45eef4c1d 100644 --- a/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionDescription.html +++ b/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Do konsoli zostaną zalogowane odpowiedzi w następującej kolejności:

  1. Global context
  2. Promise
  3. Microtask
  4. setTimeout
  5. Promise setTimeout

JavaScript jest jednowątkowym językiem programowania. Nie możemy wykonać równolegle wielu fragmentów kodu poprzez wiele wątków procesora (chyba, że z pomocą Worker'ów, ale to osobny temat).

Nieporozumienie, które może wynikać z uznawania JavaScriptu jako języka wielowątkowego jest możliwość asynchroniczność.

W JavaScript asynchroniczność oznacza, że możemy oddelegować na później wykonywanie kodu, który do wykonania potrzebuje więcej czasu.

Każda interakcja na stronie internetowej, obsługiwana przez JavaScript, zawiesza działanie strony (zamrażając możliwość wykonywania na niej jakichkolwiek akcji) do czasu ukończenia wykonywania kodu przez procesor. Zazwyczaj dzieje się to jednak tak szybko, że nawet nie dostrzegamy wynikających z tego opóźnień.

Są jednak operacje, które wymagają więcej czasu do zrealizowania, nie tylko z uwagi na złożoność obliczeniową, ale także na opóźnienia wynikające z dostępu do danych (np. odpytując zewnętrzne API).

Gdyby tego typu operacje były wykonywane synchronicznie, strona kompletnie zawieszałaby się (przewijanie, czy klikanie w przyciski byłoby zamrożone), aż do momentu pobrania danych.

Rozwiązaniem tego problemu w JavaScript jest pętla zdarzeń (event loop), która regularnie wykonuje zadania, jakimi jest wykonanie kodu. Jednocześnie zadania wywołane asynchronicznie są umieszczane w kolejce do wykonania podczas kolejnego cyklu pętli zdarzeń.

Asynchroniczna kolejka zadań jest jeszcze dodatkowo podzielona na zwykłe zadania i zadania mikro.

Zadaniem zwykłym, które wpadnie do kolejki asynchronicznej jest np. setTimeout(), a mikro zadaniem Promise.

Mikro zadania z kolejki wykonywane są na końcu aktualnej iteracji pętli zdarzeń, natomiast standardowe zadania z kolejki, na początku kolejnej iteracji.

Kod z przykładu wykonuje się więc w następującej kolejności:

  1. Global context jest wywołany synchronicznie, czyli w pierwszej kolejności, w aktualnej iteracji pętli zdarzeń
  2. Promise i queueMicrotask() to mikro zadania, oddelegowane do wykonania na koniec aktualnej iteracji pętli zdarzeń, wykonywane w kolejności w jakiej zostały dodane (w naszym przykładzie najpierw Promise, potem Microtask)
  3. setTimeout() to zadania oddelegowane do wykonania na początek kolejnej iteracji pętli zdarzeń, wykonywane również w kolejności w jakiej zostały dodane (w naszym przykładzie najpierw setTimeout() wywołany wewnątrz mikro zadania Promise, następnie setTimeout() wywołany w globalnym kontekście)

Zdefiniowanie zadania setTimeout() w mikro zadaniu Promise oznacza, że wykonywane mikro zadanie Promise na początku aktualnej iteracji pętli zdarzeń, oddeleguje zadanie setTimeout() na początek kolejnej iteracji pętli. Efekt działania jest więc taki sam, jak gdyby setTimeout() było wywołane w globalnym kontekście, bez zagnieżdżenia wewnątrz mikro zadania Promise.

- - + + \ No newline at end of file diff --git a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3.html b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3.html index a7be7917a..525e47192 100644 --- a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3.html +++ b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #057

🪲 Znajdź buga

console.log(null || undefined)
console.log(undefined || null)

console.log(null ?? "foo")
console.log(undefined ?? "foo")

console.log(null || undefined ?? "foo")

Jakie wartości zostaną zalogowane do konsoli w powyższym przykładzie?

🧪 Rozwiązanie

console.log(null || undefined)
console.log(undefined || null)

console.log(null ?? "foo")
console.log(undefined ?? "foo")

console.log((null || undefined) ?? "foo")

W przykładzie z błędem, 7 linia wyrzuci do konsoli SyntaxError.

Treść błędu może się różnić w zależności od kontekstu, w którym kod zostanie wywołany.

W przypadku przekazania kodu jako argument do console.log(), dostaniemy informację o brakującym domknięciu nawiasu na liście argumentów.

SyntaxError sprowadza się jednak do niedozwolonej składni w języku JavaScript. Po prostu nie możemy użyć danej konstrukcji.

I taką niedozwoloną konstrukcją jest użycie operatora ?? na równi z operatorami || lub &&.

Po prostu nie możemy tego robić, musimy użyć nawiasów dla wyraźnego zgrupowania wyrażeń, które chcemy aby zostały wykonane w pierwszej kolejności.

Dokumentacja JavaScript od Mozilli (MDN), tłumaczy, że jednoczesne użycie ?? w połączeniu z || lub && mogłoby wprowadzać w kodzie błędy wynikające z wystąpienia zwarcia (short circuiting).

Warto zauważyć, że tabela priorytetów wykonywania operatorów plasuje && wyżej niż ||, ale ze względu na efekt zwarcia, który jeśli wystąpi, totalnie ignoruje drugi operand, co również może prowadzić do błędów w kodzie związanych z oczekiwaniem wywołania funkcji w takim wyrażeniu.

Przykładowo, przy wyrażeniu true || alert("bar") && false zadziała zwarcie na wartości true i cały dalszy kod nie zostanie wykonany, mimo że priorytet wykonywania operatorów mógłby sugerować, że funkcja alert("bar") powinna zostać wykonana w celu ewaluacji wartości operatora &&.

W tym kontekście, wyrzucanie błędu składniowego w momencie równoległego użycia ?? z && lub || wydaje się być naciągane.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugCode.html b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugCode.html index 5bdb9a252..c259450e7 100644 --- a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugCode.html +++ b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(null || undefined)
console.log(undefined || null)

console.log(null ?? "foo")
console.log(undefined ?? "foo")

console.log(null || undefined ?? "foo")
- - + + \ No newline at end of file diff --git a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugDescription.html b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugDescription.html index 4510775f6..637f158f8 100644 --- a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugDescription.html +++ b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli w powyższym przykładzie?

- - + + \ No newline at end of file diff --git a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/links.html b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/links.html index 65ab5a207..31729f21d 100644 --- a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/links.html +++ b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionCode.html b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionCode.html index 598dfdb79..68c33f3ea 100644 --- a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionCode.html +++ b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(null || undefined)
console.log(undefined || null)

console.log(null ?? "foo")
console.log(undefined ?? "foo")

console.log((null || undefined) ?? "foo")
- - + + \ No newline at end of file diff --git a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionDescription.html b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionDescription.html index 6a3a147c6..3060e0bce 100644 --- a/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionDescription.html +++ b/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, 7 linia wyrzuci do konsoli SyntaxError.

Treść błędu może się różnić w zależności od kontekstu, w którym kod zostanie wywołany.

W przypadku przekazania kodu jako argument do console.log(), dostaniemy informację o brakującym domknięciu nawiasu na liście argumentów.

SyntaxError sprowadza się jednak do niedozwolonej składni w języku JavaScript. Po prostu nie możemy użyć danej konstrukcji.

I taką niedozwoloną konstrukcją jest użycie operatora ?? na równi z operatorami || lub &&.

Po prostu nie możemy tego robić, musimy użyć nawiasów dla wyraźnego zgrupowania wyrażeń, które chcemy aby zostały wykonane w pierwszej kolejności.

Dokumentacja JavaScript od Mozilli (MDN), tłumaczy, że jednoczesne użycie ?? w połączeniu z || lub && mogłoby wprowadzać w kodzie błędy wynikające z wystąpienia zwarcia (short circuiting).

Warto zauważyć, że tabela priorytetów wykonywania operatorów plasuje && wyżej niż ||, ale ze względu na efekt zwarcia, który jeśli wystąpi, totalnie ignoruje drugi operand, co również może prowadzić do błędów w kodzie związanych z oczekiwaniem wywołania funkcji w takim wyrażeniu.

Przykładowo, przy wyrażeniu true || alert("bar") && false zadziała zwarcie na wartości true i cały dalszy kod nie zostanie wykonany, mimo że priorytet wykonywania operatorów mógłby sugerować, że funkcja alert("bar") powinna zostać wykonana w celu ewaluacji wartości operatora &&.

W tym kontekście, wyrzucanie błędu składniowego w momencie równoległego użycia ?? z && lub || wydaje się być naciągane.

- - + + \ No newline at end of file diff --git a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5.html b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5.html index 90768e38c..b60768b8d 100644 --- a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5.html +++ b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #079

🪲 Znajdź buga

const myObject = {
message: "Hello world!",
showMessage() {
setTimeout(function () {
console.log(this.message)
}, 500)
},
}

myObject.showMessage()

Chcemy zalogować do konsoli, z lekkim opóźnieniem, wiadomość powitalną zdefiniowaną we własności obiektu.

Co dokładnie zostanie zalogowane do konsoli w powyższym przykładzie?

🧪 Rozwiązanie

const myObject = {
message: "Hello world!",
showMessage() {
setTimeout(function () {
console.log(this.message)
}.bind(myObject), 500)
},
}

myObject.showMessage()

W błędnym przykładzie do konsoli zostanie zalogowana wartość undefined.

Globalna funkcja setTimeout() to tak naprawdę metoda globalnego obiektu (window lub global).

Wywołanie this wewnątrz zwrotnej funkcji (callback) przekazanej do setTimeout() skutkuje więc wskazywaniem this na obiekt globalny, który nie ma zdefiniowanej własności message.

this jest zawsze zależne od kontekstu, w którym zostaje wywołane.

Aby przypisać interesujący nas kontekst obiektu myObject możemy użyć metody bind() na anonimowej funkcji przekazywanej jako callback do setTimeout().

Innym sposobem może być zamienienie deklaracji anonimowej funkcji callback na wyrażenie funkcji strzałkowej.

Dzięki temu this będzie odnosiło się do wyższego kontekstu, ponieważ funkcje strzałkowe nie mają własnego wiązania dla this.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugCode.html b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugCode.html index aa6b89329..770189b4b 100644 --- a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugCode.html +++ b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const myObject = {
message: "Hello world!",
showMessage() {
setTimeout(function () {
console.log(this.message)
}, 500)
},
}

myObject.showMessage()
- - + + \ No newline at end of file diff --git a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugDescription.html b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugDescription.html index 52709fe85..7f5daa3c1 100644 --- a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugDescription.html +++ b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy zalogować do konsoli, z lekkim opóźnieniem, wiadomość powitalną zdefiniowaną we własności obiektu.

Co dokładnie zostanie zalogowane do konsoli w powyższym przykładzie?

- - + + \ No newline at end of file diff --git a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/links.html b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/links.html index 0aa322186..4e432fb55 100644 --- a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/links.html +++ b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionCode.html b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionCode.html index 4397288df..202baaf8a 100644 --- a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionCode.html +++ b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const myObject = {
message: "Hello world!",
showMessage() {
setTimeout(function () {
console.log(this.message)
}.bind(myObject), 500)
},
}

myObject.showMessage()
- - + + \ No newline at end of file diff --git a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionDescription.html b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionDescription.html index cb9c82672..c9fd956ba 100644 --- a/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionDescription.html +++ b/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W błędnym przykładzie do konsoli zostanie zalogowana wartość undefined.

Globalna funkcja setTimeout() to tak naprawdę metoda globalnego obiektu (window lub global).

Wywołanie this wewnątrz zwrotnej funkcji (callback) przekazanej do setTimeout() skutkuje więc wskazywaniem this na obiekt globalny, który nie ma zdefiniowanej własności message.

this jest zawsze zależne od kontekstu, w którym zostaje wywołane.

Aby przypisać interesujący nas kontekst obiektu myObject możemy użyć metody bind() na anonimowej funkcji przekazywanej jako callback do setTimeout().

Innym sposobem może być zamienienie deklaracji anonimowej funkcji callback na wyrażenie funkcji strzałkowej.

Dzięki temu this będzie odnosiło się do wyższego kontekstu, ponieważ funkcje strzałkowe nie mają własnego wiązania dla this.

- - + + \ No newline at end of file diff --git a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4.html b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4.html index ed168f0ad..dad434f38 100644 --- a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4.html +++ b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4.html @@ -7,8 +7,8 @@ - - + +
@@ -19,7 +19,7 @@ Zamiana true/false poprzez parseInt() zwraca NaN w obu przypadkach.

Konwersja liczb z innych systemów liczbowych np. binarnego (zapisywanego z prefiksem 0b), zwraca wartość liczbową w systemie dziesiętnym zarówno poprzez Number() jak i parseInt().

Różnica w wartości zwracanej pojawia się, gdy jako argument funkcji przekażemy liczbę wewnątrz ciągu znaków np. "0b0111".

Number() zwróci wartość w systemie dziesiętnym, jak poprzednio.\ parseInt() zachowa się już jednak inaczej i zwróci 0...

Tak jak we wcześniejszym przykładzie " 0 bar ", dla parseInt() liczy się tylko pierwsza liczba, którą rozpozna w ciągu znaków. Przykładowo parseInt("123abc") zwróci 123.

Warto zaznaczyć, że wartości można też konwertować na typ liczbowy za pomocą jednoargumentowego operatora +. Używa on tego samego algorytmu co Number() z jednym, małym wyjątkiem... 🙃

Dla dużych wartości liczbowych, konwersja wartości typu BigInt poprzez Number() zwróci przybliżoną wartość w postaci liczbowej.

Używając operatora + dla konwersji wartości BigInt otrzymamy błąd Cannot convert a BigInt value to a number.

Warto też wiedzieć, że parseInt() jest również dostępny jako metoda Number.parseInt(). Na szczęście nie ma między nimi różnic i obie działają tak samo.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugCode.html b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugCode.html index 1c6fca8a3..0f7394b1c 100644 --- a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugCode.html +++ b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(Number("123"))
console.log(parseInt("123"))

console.log(Number(""))
console.log(parseInt(""))

console.log(Number(" 0 "))
console.log(parseInt(" 0 "))

console.log(Number(" 0 bar "))
console.log(parseInt(" 0 bar "))

console.log(Number(" foo 0 bar "))
console.log(parseInt(" foo 0 bar "))

console.log(Number(null))
console.log(parseInt(null))

console.log(Number(undefined))
console.log(parseInt(undefined))

console.log(Number(true))
console.log(parseInt(true))

console.log(Number(0b0111))
console.log(parseInt(0b0111))

console.log(Number("0b0111"))
console.log(parseInt("0b0111"))
- - + + \ No newline at end of file diff --git a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugDescription.html b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugDescription.html index df16745f9..90f9d2cd1 100644 --- a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugDescription.html +++ b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcąc zamienić jakąś nienumeryczną wartość na liczbę, możemy użyć kilku rozwiązań, m.in. funkcji Number() oraz parseInt().

Czy obie funkcje zwracają te same wartości dla tych samych argumentów?

- - + + \ No newline at end of file diff --git a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/links.html b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/links.html index 0e4440389..c4478db6b 100644 --- a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/links.html +++ b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionCode.html b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionCode.html index 95fb2a6b5..3c97ad4c2 100644 --- a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionCode.html +++ b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(Number("123")) // 123
console.log(parseInt("123")) // 123

console.log(Number("")) // 0
console.log(parseInt("")) // NaN

console.log(Number(" 0 ")) // 0
console.log(parseInt(" 0 ")) // 0

console.log(Number(" 0 bar ")) // NaN
console.log(parseInt(" 0 bar ")) // 0

console.log(Number(" foo 0 bar ")) // NaN
console.log(parseInt(" foo 0 bar ")) // NaN

console.log(Number(null)) // 0
console.log(parseInt(null)) // NaN

console.log(Number(undefined)) // NaN
console.log(parseInt(undefined)) // NaN

console.log(Number(true)) // 1
console.log(parseInt(true)) // NaN

console.log(Number(0b0111)) // 7
console.log(parseInt(0b0111)) // 7

console.log(Number("0b0111")) // 7
console.log(parseInt("0b0111")) // 0
- - + + \ No newline at end of file diff --git a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionDescription.html b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionDescription.html index 7bd6eec69..d687d2d2a 100644 --- a/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionDescription.html +++ b/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionDescription.html @@ -7,8 +7,8 @@ - - + +
@@ -18,7 +18,7 @@ Zamiana null poprzez praseInt() zwraca NaN.

Może to być bardzo mylące z uwagi na to, że dla wartości undefined, obie funkcje zwracają NaN.

Zamiana true/false poprzez Number() zwraca 1/0.\ Zamiana true/false poprzez parseInt() zwraca NaN w obu przypadkach.

Konwersja liczb z innych systemów liczbowych np. binarnego (zapisywanego z prefiksem 0b), zwraca wartość liczbową w systemie dziesiętnym zarówno poprzez Number() jak i parseInt().

Różnica w wartości zwracanej pojawia się, gdy jako argument funkcji przekażemy liczbę wewnątrz ciągu znaków np. "0b0111".

Number() zwróci wartość w systemie dziesiętnym, jak poprzednio.\ parseInt() zachowa się już jednak inaczej i zwróci 0...

Tak jak we wcześniejszym przykładzie " 0 bar ", dla parseInt() liczy się tylko pierwsza liczba, którą rozpozna w ciągu znaków. Przykładowo parseInt("123abc") zwróci 123.

Warto zaznaczyć, że wartości można też konwertować na typ liczbowy za pomocą jednoargumentowego operatora +. Używa on tego samego algorytmu co Number() z jednym, małym wyjątkiem... 🙃

Dla dużych wartości liczbowych, konwersja wartości typu BigInt poprzez Number() zwróci przybliżoną wartość w postaci liczbowej.

Używając operatora + dla konwersji wartości BigInt otrzymamy błąd Cannot convert a BigInt value to a number.

Warto też wiedzieć, że parseInt() jest również dostępny jako metoda Number.parseInt(). Na szczęście nie ma między nimi różnic i obie działają tak samo.

- - + + \ No newline at end of file diff --git a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe.html b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe.html index 91830b000..f57c6a4d2 100644 --- a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe.html +++ b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #033

🪲 Znajdź buga

console.log(!"")
console.log(!" ")
console.log(!!"")
console.log(!!" ")

console.log(Boolean(""))
console.log(Boolean(" "))

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

console.log(!"") // true
console.log(!" ") // false
console.log(!!"") // false
console.log(!!" ") // true

console.log(Boolean("")) // false
console.log(Boolean(" ")) // true

Operator negacji (logiczne NIE !), odwraca prawdziwość/fałszywość i konwertuje ją do wartości logicznej.

Dl wartości !true zostanie zwrócona więc odwrotność, czyli false, a dla !false, true.

W przypadku gdy operator ! zostaje użyty z wartością inną niż logiczna (boolean), wtedy pod uwagę brana jest prawdziwość (truthy) lub fałszywość (falsy) operandu i zwracana jest jego odwrotność w postaci logicznej (false lub true).

Pusty ciąg znaków "" w JavaScript jest wartością fałszywą, więc jej zanegowanie da nam wartość logiczną true, a podwójne zanegowanie wartość false.

Użycie podwójnego operatora negacji (!!) jest równoznaczne z użyciem konstruktora (Boolean), czyli konwersją wartości prawdziwych/fałszywych na logiczne true/false.

Gdy jednak ciąg znaków nie jest pusty i zawiera choćby biały znak " " jest już wtedy interpretowany jako wartość prawdziwa, więc negacja takiej wartości da nam false.

Sytuacja z pustym ciągiem znaków i ciągiem znaków składającym się z białych znaków może być myląca, szczególnie gdy porównamy to z działaniem konstruktora Number, ale to już jest temat na innego buga...

Rozwiązaniem problematyczności tych zjawisk jest tylko i wyłącznie zapamiętanie w jaki sposób JavaScript interpretuje kod.

Mocno wskazane jest też testowanie kodu przed wdrożeniem go na produkcję.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugCode.html b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugCode.html index 2760c4c35..7da54729c 100644 --- a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugCode.html +++ b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(!"")
console.log(!" ")
console.log(!!"")
console.log(!!" ")

console.log(Boolean(""))
console.log(Boolean(" "))
- - + + \ No newline at end of file diff --git a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugDescription.html b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugDescription.html index 69ee590e0..a1c5d42c1 100644 --- a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugDescription.html +++ b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/links.html b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/links.html index 89ee313df..e20443bcd 100644 --- a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/links.html +++ b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionCode.html b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionCode.html index 8407d248d..2d0170119 100644 --- a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionCode.html +++ b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(!"") // true
console.log(!" ") // false
console.log(!!"") // false
console.log(!!" ") // true

console.log(Boolean("")) // false
console.log(Boolean(" ")) // true
- - + + \ No newline at end of file diff --git a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionDescription.html b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionDescription.html index fced63118..ce5e61e09 100644 --- a/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionDescription.html +++ b/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Operator negacji (logiczne NIE !), odwraca prawdziwość/fałszywość i konwertuje ją do wartości logicznej.

Dl wartości !true zostanie zwrócona więc odwrotność, czyli false, a dla !false, true.

W przypadku gdy operator ! zostaje użyty z wartością inną niż logiczna (boolean), wtedy pod uwagę brana jest prawdziwość (truthy) lub fałszywość (falsy) operandu i zwracana jest jego odwrotność w postaci logicznej (false lub true).

Pusty ciąg znaków "" w JavaScript jest wartością fałszywą, więc jej zanegowanie da nam wartość logiczną true, a podwójne zanegowanie wartość false.

Użycie podwójnego operatora negacji (!!) jest równoznaczne z użyciem konstruktora (Boolean), czyli konwersją wartości prawdziwych/fałszywych na logiczne true/false.

Gdy jednak ciąg znaków nie jest pusty i zawiera choćby biały znak " " jest już wtedy interpretowany jako wartość prawdziwa, więc negacja takiej wartości da nam false.

Sytuacja z pustym ciągiem znaków i ciągiem znaków składającym się z białych znaków może być myląca, szczególnie gdy porównamy to z działaniem konstruktora Number, ale to już jest temat na innego buga...

Rozwiązaniem problematyczności tych zjawisk jest tylko i wyłącznie zapamiętanie w jaki sposób JavaScript interpretuje kod.

Mocno wskazane jest też testowanie kodu przed wdrożeniem go na produkcję.

- - + + \ No newline at end of file diff --git a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6.html b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6.html index acc2187bd..d40f3053e 100644 --- a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6.html +++ b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #094

🪲 Znajdź buga

const fn = (...args) => args

console.log(
fn("a", "b", "c")
)
console.log.call(
null, ["a", "b", "c"]
)
console.log(
Function.call.call(
fn, null, "a", "b", "c"
)
)
console.log(
fn.call.call(
fn, null, "a", "b", "c"
)
)
console.log(
setTimeout.call.call(
fn, null, "a", "b", "c"
)
)

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

const fn = (...args) => args

console.log(
fn("a", "b", "c")
)
console.log.call(
null, ["a", "b", "c"]
)
console.log(
Function.call.call(
fn, null, "a", "b", "c"
)
)
console.log(
fn.call.call(
fn, null, "a", "b", "c"
)
)
console.log(
setTimeout.call.call(
fn, null, "a", "b", "c"
)
)

Wszystkie 6 wywołań zwróci te same wartości, tablicę ["a", "b", "c"].

Funkcja fn za pomocą operatora ... tworzy listę przekazanych do niej argumentów, a następnie zwraca utworzoną w ten sposób tablicę z wartościami przekazanymi w argumentach.

console.log(fn("a", "b", "c")) zaloguje do konsoli wartości zwrócone z wywołanej funkcji fn, co skutkuje stworzeniem z listy przekazanych argumentów, tablicy ["a", "b", "c"].

console.log.call(null, ["a", "b", "c"]) za pomocą metody call wywoływana jest funkcja console.log co stanowi ekwiwalent wywołania console.log(["a", "b", "c"]) z kontekstem null, czyli bez wskazywania na konkretny obiekt, który byłby dostępny pod this.

console.log(Function.call.call(fn, null, "a", "b", "c")) loguje do konsoli efekt wywołania metody call() na funkcji utworzonej przez wywołanie poprzedniej metody call(), która to tworzy anonimowy obiekt funkcji, tak samo jak gdybyśmy wywołali Function().

Początkowa funkcja w takim ciągu przestaje mieść znaczenie. Widać to na kolejnym przykładzie console.log(fn.call.call(fn, null, "a", "b", "c")), który zachowuje się tak samo.

Łańcuch .call.call mógłby zawierać znacznie więcej powtórzeń nie zmieniającą ostatecznego działania. Początkowa funkcja na której rozpoczyna się ciąg wielu wywołań .call traci wtedy na znaczeniu.

Finalnie liczą się tylko 2 ostatnie elementy. Wywołanie poprzez metodę call() funkcji, która również jest funkcją call i nie implementuje dodatkowego działania.

Następuje więc przesunięcie. Kontekst przekazany jako pierwszy argument do call() staje się implementacją wywoływanej funkcji.

Kolejny argument null staje się kontekstem dla ewentualnego wywołania this, a następne argumenty stają się argumentami przekazanymi już do docelowej funkcji (w naszym przypadku fn).

Ostatnim przykładem udowadniającym to działanie jest użycie setTimeout, który służy jedynie za "dawcę", na którym można rozpocząć wywoływanie ciągu .call.

Warto też wspomnieć o bliźniaczym odpowiedniku metody call(), apply().

Jedyna różnica pomiędzy tymi metodami jest taka, że call() przyjmuje listę argumentów (tak jak standardowa funkcja), a apply() przyjmuje tablicę zawierającą docelowe argumenty.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugCode.html b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugCode.html index ba9895e98..aef3d0d68 100644 --- a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugCode.html +++ b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const fn = (...args) => args

console.log(
fn("a", "b", "c")
)
console.log.call(
null, ["a", "b", "c"]
)
console.log(
Function.call.call(
fn, null, "a", "b", "c"
)
)
console.log(
fn.call.call(
fn, null, "a", "b", "c"
)
)
console.log(
setTimeout.call.call(
fn, null, "a", "b", "c"
)
)
- - + + \ No newline at end of file diff --git a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugDescription.html b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugDescription.html index 12bbf4ff8..d4a0d9a0d 100644 --- a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugDescription.html +++ b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/links.html b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/links.html index df15440ac..0142118c2 100644 --- a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/links.html +++ b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionCode.html b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionCode.html index 052669cbf..8aa9dc7aa 100644 --- a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionCode.html +++ b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const fn = (...args) => args

console.log(
fn("a", "b", "c")
)
console.log.call(
null, ["a", "b", "c"]
)
console.log(
Function.call.call(
fn, null, "a", "b", "c"
)
)
console.log(
fn.call.call(
fn, null, "a", "b", "c"
)
)
console.log(
setTimeout.call.call(
fn, null, "a", "b", "c"
)
)
- - + + \ No newline at end of file diff --git a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionDescription.html b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionDescription.html index 71400187f..7f1bc158c 100644 --- a/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionDescription.html +++ b/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Wszystkie 6 wywołań zwróci te same wartości, tablicę ["a", "b", "c"].

Funkcja fn za pomocą operatora ... tworzy listę przekazanych do niej argumentów, a następnie zwraca utworzoną w ten sposób tablicę z wartościami przekazanymi w argumentach.

console.log(fn("a", "b", "c")) zaloguje do konsoli wartości zwrócone z wywołanej funkcji fn, co skutkuje stworzeniem z listy przekazanych argumentów, tablicy ["a", "b", "c"].

console.log.call(null, ["a", "b", "c"]) za pomocą metody call wywoływana jest funkcja console.log co stanowi ekwiwalent wywołania console.log(["a", "b", "c"]) z kontekstem null, czyli bez wskazywania na konkretny obiekt, który byłby dostępny pod this.

console.log(Function.call.call(fn, null, "a", "b", "c")) loguje do konsoli efekt wywołania metody call() na funkcji utworzonej przez wywołanie poprzedniej metody call(), która to tworzy anonimowy obiekt funkcji, tak samo jak gdybyśmy wywołali Function().

Początkowa funkcja w takim ciągu przestaje mieść znaczenie. Widać to na kolejnym przykładzie console.log(fn.call.call(fn, null, "a", "b", "c")), który zachowuje się tak samo.

Łańcuch .call.call mógłby zawierać znacznie więcej powtórzeń nie zmieniającą ostatecznego działania. Początkowa funkcja na której rozpoczyna się ciąg wielu wywołań .call traci wtedy na znaczeniu.

Finalnie liczą się tylko 2 ostatnie elementy. Wywołanie poprzez metodę call() funkcji, która również jest funkcją call i nie implementuje dodatkowego działania.

Następuje więc przesunięcie. Kontekst przekazany jako pierwszy argument do call() staje się implementacją wywoływanej funkcji.

Kolejny argument null staje się kontekstem dla ewentualnego wywołania this, a następne argumenty stają się argumentami przekazanymi już do docelowej funkcji (w naszym przypadku fn).

Ostatnim przykładem udowadniającym to działanie jest użycie setTimeout, który służy jedynie za "dawcę", na którym można rozpocząć wywoływanie ciągu .call.

Warto też wspomnieć o bliźniaczym odpowiedniku metody call(), apply().

Jedyna różnica pomiędzy tymi metodami jest taka, że call() przyjmuje listę argumentów (tak jak standardowa funkcja), a apply() przyjmuje tablicę zawierającą docelowe argumenty.

- - + + \ No newline at end of file diff --git a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b.html b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b.html index 691688c62..31fae9a89 100644 --- a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b.html +++ b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #087

🪲 Znajdź buga

console.log(037 - 027)

Jaki wynik działania zostanie zalogowany do konsoli?

🧪 Rozwiązanie

console.log(037 - 027) // 8
console.log(0o37 - 0o27) // 8

Działanie 037 - 027 w trybie nieścisłym zwróci wynik 8.

Tryb nieścisły pozwala na interpretację liczba zaczynających się zerem jako liczb oktalnych (ósemkowych).

037 w systemie ósemkowym to 31 w systemie dziesiętnym.

027 w systemie ósemkowym to 23 w systemie dziesiętnym.

31 - 23 daje wynik 8.

Aby zablokować interpretację liczb oktalnych poprzez sam prefiks 0, musimy uaktywnić tryb ścisły.

Można to zrobić np. poprzez deklarację "use strict".

Tryb ścisły automatycznie uaktywnia się też w modułach JavaScript w momencie gdy w kodzie pojawia się import lub export.

W trybie ścisłym zapis oktalny wymaga bardziej wyraźnego prefiksu 0o, a nie tylko samego 0.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugCode.html b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugCode.html index 122a651df..4711c1a45 100644 --- a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugCode.html +++ b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(037 - 027)
- - + + \ No newline at end of file diff --git a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugDescription.html b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugDescription.html index 24e2e8239..8095dc3d8 100644 --- a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugDescription.html +++ b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jaki wynik działania zostanie zalogowany do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/links.html b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/links.html index 07845fd2c..d23f6ff28 100644 --- a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/links.html +++ b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionCode.html b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionCode.html index 13fb65ed1..ed8fa2e04 100644 --- a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionCode.html +++ b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(037 - 027) // 8
console.log(0o37 - 0o27) // 8
- - + + \ No newline at end of file diff --git a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionDescription.html b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionDescription.html index eafddc144..b41ee12d0 100644 --- a/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionDescription.html +++ b/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Działanie 037 - 027 w trybie nieścisłym zwróci wynik 8.

Tryb nieścisły pozwala na interpretację liczba zaczynających się zerem jako liczb oktalnych (ósemkowych).

037 w systemie ósemkowym to 31 w systemie dziesiętnym.

027 w systemie ósemkowym to 23 w systemie dziesiętnym.

31 - 23 daje wynik 8.

Aby zablokować interpretację liczb oktalnych poprzez sam prefiks 0, musimy uaktywnić tryb ścisły.

Można to zrobić np. poprzez deklarację "use strict".

Tryb ścisły automatycznie uaktywnia się też w modułach JavaScript w momencie gdy w kodzie pojawia się import lub export.

W trybie ścisłym zapis oktalny wymaga bardziej wyraźnego prefiksu 0o, a nie tylko samego 0.

- - + + \ No newline at end of file diff --git a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000.html b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000.html index 4202ec795..3622b709c 100644 --- a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000.html +++ b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #022

🪲 Znajdź buga

const html = "
<h1>Hello World!</h1>
<p>JavaScript is awesome!</p>
"

document.body
.insertAdjacentHTML("afterbegin", html)

Chcemy dodać zaraz na początku strony kod HTML za pomocą JavaScript. Czy powyższy kod nam to umożliwi?

🧪 Rozwiązanie

const html = `
<h1>Hello World!</h1>
<p>JavaScript is awesome!</p>
`

document.body
.insertAdjacentHTML("afterbegin", html)

Przykład z błędem nie wykona poprawnie postawionego zadania. Powodem jest nie domknięcie cudzysłowu (bez znaczenia czy użyjemy pojedynczego czy podwójnego).

W kodzie jednak może nam się wydawać, że cudzysłów domykamy. Robimy to jednak nie w tej samej linii, w której go otworzyliśmy, a na to JavaScript już nie pozwala.

Mamy 2 możliwości naprawienia tego błędu.

Pierwszą z nich jest uniknięcie (escape) przejścia do nowej linii poprzez wstawienie wstecznego ukośnika (backslash \).

Backslash spowoduje, że biały znak przejścia do nowej linii zostanie "wyeskejpowany", czyli nie zostanie potraktowany jako znak kończący kod w danej linii, więc i nie wywoła błędu o niedomkniętym cudzysłowu.

\ musimy jednak wstawić na końcu każdej linii, w której przechodzimy do nowej linii wewnątrz cudzysłowów (1, 2, 3 linia).

Znacznie wygodniejszym rozwiązaniem będzie użycie Template literals (Template strings).

Zamiast używać cudzysłowu (" lub ') używamy grawisu (backtick `).

Możemy wtedy kompletnie pominąć \ na końcach wierszy i swobodnie przenosić kod do nowych linii.

Template literals ma jednak pewną istotną implikację. Kod HTML będzie preformatowany. Jeśli sprawdzimy źródło kodu w przeglądarce, zobaczymy, że wszystkie białe znaki będą zachowane, podobnie jakbyśmy kod zawarli w znacznikach <pre>.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugCode.html b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugCode.html index f6713f569..b19036b28 100644 --- a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugCode.html +++ b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const html = "
<h1>Hello World!</h1>
<p>JavaScript is awesome!</p>
"

document.body
.insertAdjacentHTML("afterbegin", html)
- - + + \ No newline at end of file diff --git a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugDescription.html b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugDescription.html index 5c4d695a1..8b2ad3b59 100644 --- a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugDescription.html +++ b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy dodać zaraz na początku strony kod HTML za pomocą JavaScript. Czy powyższy kod nam to umożliwi?

- - + + \ No newline at end of file diff --git a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/links.html b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/links.html index 134f53406..9af0ee02e 100644 --- a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/links.html +++ b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionCode.html b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionCode.html index 785dfd5b4..ae18807a9 100644 --- a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionCode.html +++ b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const html = `
<h1>Hello World!</h1>
<p>JavaScript is awesome!</p>
`

document.body
.insertAdjacentHTML("afterbegin", html)
- - + + \ No newline at end of file diff --git a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionDescription.html b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionDescription.html index eed7af804..85700ef22 100644 --- a/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionDescription.html +++ b/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Przykład z błędem nie wykona poprawnie postawionego zadania. Powodem jest nie domknięcie cudzysłowu (bez znaczenia czy użyjemy pojedynczego czy podwójnego).

W kodzie jednak może nam się wydawać, że cudzysłów domykamy. Robimy to jednak nie w tej samej linii, w której go otworzyliśmy, a na to JavaScript już nie pozwala.

Mamy 2 możliwości naprawienia tego błędu.

Pierwszą z nich jest uniknięcie (escape) przejścia do nowej linii poprzez wstawienie wstecznego ukośnika (backslash \).

Backslash spowoduje, że biały znak przejścia do nowej linii zostanie "wyeskejpowany", czyli nie zostanie potraktowany jako znak kończący kod w danej linii, więc i nie wywoła błędu o niedomkniętym cudzysłowu.

\ musimy jednak wstawić na końcu każdej linii, w której przechodzimy do nowej linii wewnątrz cudzysłowów (1, 2, 3 linia).

Znacznie wygodniejszym rozwiązaniem będzie użycie Template literals (Template strings).

Zamiast używać cudzysłowu (" lub ') używamy grawisu (backtick `).

Możemy wtedy kompletnie pominąć \ na końcach wierszy i swobodnie przenosić kod do nowych linii.

Template literals ma jednak pewną istotną implikację. Kod HTML będzie preformatowany. Jeśli sprawdzimy źródło kodu w przeglądarce, zobaczymy, że wszystkie białe znaki będą zachowane, podobnie jakbyśmy kod zawarli w znacznikach <pre>.

- - + + \ No newline at end of file diff --git a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4.html b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4.html index d36e66bc8..c266dca0e 100644 --- a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4.html +++ b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #042

🪲 Znajdź buga

console.log(1 < 2 < 3)
console.log(0 < 1 < 2)

console.log(3 > 2 > 1)
console.log(2 > 1 > 0)

Co zalogują do konsoli poszczególne ciągi porównań?

🧪 Rozwiązanie

console.log(1 < 2 < 3) // true
console.log(0 < 1 < 2) // true

console.log(3 > 2 > 1) // false
console.log(2 > 1 > 0) // true

Wszystkie przykłady oprócz 3 > 2 > 1 zalogują wartość true.

Dlaczego 3 > 2 > 1 zaloguje false? Przeanalizujmy to krok po kroku.

Operatory > (więcej niż) oraz < (mniej niż) porównują ze sobą dwa operandy, zwracając wartość logiczną z takiego porównania.

Gdy używamy ciągu kilku porównań, sytuacja wygląda analogicznie, jak w przypadku używania ciągu innych operatorów np. dodawania, mnożenia, porównania, koniunkcji itp.

Kolejność oraz kierunek wykonywania operacji wykonywanych przez operatory definiuje tabela pierwszeństwa operatorów (operator precedence).

Operatory > i < wykonują porównania po kolei, od lewej do prawej.

Dla 3 > 2 > 1 w pierwszej kolejności wykonane zostanie porównanie 3 > 2 i zwróci ono wartość true.

Ciąg porównań zostanie zredukowany i będzie w kolejnym kroku porównywał true > 1.

W przypadku gdy porównywane wartości nie są wartościami liczbowymi, zostają one sprowadzone do wartości liczbowej za pomocą algorytmu funkcji Number().

Wartość Number(true) zwraca wartość 1.

W językach programowania, wartości logiczne true/false są z reguły reprezentowane przez wartości liczbowe 1/0.

Finalnie true > 1 zostanie więc skonwertowane do 1 > 1. Wynikiem takiego porównania będzie rzecz jasna wartość false.

W pozostałych przykładach porównań zachodzi analogiczny proces.

Z początkowych porównań zwracana jest wartość logiczna. Następnie kolejne porównania konwertują wartości logiczne na wartości liczbowe i dokonują kolejnych porównań.

true < 3 to prawda, true < 2 to prawda i true > 0 to też prawda.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugCode.html b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugCode.html index 9471647da..10a297048 100644 --- a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugCode.html +++ b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(1 < 2 < 3)
console.log(0 < 1 < 2)

console.log(3 > 2 > 1)
console.log(2 > 1 > 0)
- - + + \ No newline at end of file diff --git a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugDescription.html b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugDescription.html index d3a8092a4..1c2a3444a 100644 --- a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugDescription.html +++ b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Co zalogują do konsoli poszczególne ciągi porównań?

- - + + \ No newline at end of file diff --git a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/links.html b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/links.html index 03837a94c..883670788 100644 --- a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/links.html +++ b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionCode.html b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionCode.html index e9a614136..5a55d09df 100644 --- a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionCode.html +++ b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(1 < 2 < 3) // true
console.log(0 < 1 < 2) // true

console.log(3 > 2 > 1) // false
console.log(2 > 1 > 0) // true
- - + + \ No newline at end of file diff --git a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionDescription.html b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionDescription.html index 790736431..aa50448ac 100644 --- a/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionDescription.html +++ b/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Wszystkie przykłady oprócz 3 > 2 > 1 zalogują wartość true.

Dlaczego 3 > 2 > 1 zaloguje false? Przeanalizujmy to krok po kroku.

Operatory > (więcej niż) oraz < (mniej niż) porównują ze sobą dwa operandy, zwracając wartość logiczną z takiego porównania.

Gdy używamy ciągu kilku porównań, sytuacja wygląda analogicznie, jak w przypadku używania ciągu innych operatorów np. dodawania, mnożenia, porównania, koniunkcji itp.

Kolejność oraz kierunek wykonywania operacji wykonywanych przez operatory definiuje tabela pierwszeństwa operatorów (operator precedence).

Operatory > i < wykonują porównania po kolei, od lewej do prawej.

Dla 3 > 2 > 1 w pierwszej kolejności wykonane zostanie porównanie 3 > 2 i zwróci ono wartość true.

Ciąg porównań zostanie zredukowany i będzie w kolejnym kroku porównywał true > 1.

W przypadku gdy porównywane wartości nie są wartościami liczbowymi, zostają one sprowadzone do wartości liczbowej za pomocą algorytmu funkcji Number().

Wartość Number(true) zwraca wartość 1.

W językach programowania, wartości logiczne true/false są z reguły reprezentowane przez wartości liczbowe 1/0.

Finalnie true > 1 zostanie więc skonwertowane do 1 > 1. Wynikiem takiego porównania będzie rzecz jasna wartość false.

W pozostałych przykładach porównań zachodzi analogiczny proces.

Z początkowych porównań zwracana jest wartość logiczna. Następnie kolejne porównania konwertują wartości logiczne na wartości liczbowe i dokonują kolejnych porównań.

true < 3 to prawda, true < 2 to prawda i true > 0 to też prawda.

- - + + \ No newline at end of file diff --git a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6.html b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6.html index b0c19392f..1cdcfdcde 100644 --- a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6.html +++ b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #017

🪲 Znajdź buga

setTimeout(() => {
console.log("Infinity")
}, Infinity)

setTimeout(() => {
console.log("24.8 days")
}, 2147483648)

setTimeout(() => {
console.log("Immediately")
}, 0)

Z jakim opóźnieniem wykonają się poszczególne logowania do konsoli?

🧪 Rozwiązanie

setTimeout(() => {
console.log("24.8 days")
}, 2147483647)

W "zarobaczonym" przykładzie, wszystkie 3 logowania do konsoli wykonają się z tym samym, zerowym opóźnieniem.

Dzieje się tak, ponieważ aktualnie wszystkie najpopularniejsze przeglądarki przechowują w pamięci wartość opóźnienia z setTimeout() jako 32 bitową, podpisaną liczbę całkowitą.

Oznacza to, że w pamięci możemy zapisać w systemie binarnym wyłącznie liczby z zakresu od -2147483647 do 2147483647.

32 bity to 32 jednostki pamięci mogące przechowywać wartość 0 lub 1.

Pierwszy bit odpowiada za podpisanie liczby tj. zakomunikowanie czy jest ona dodatnia czy ujemna. W pozostałych 31 bitach możemy więc zapisać maksymalnie 31 jedynek.

31 jedynek w systemie binarnym to 2 147 483 647 w systemie dziesiętnym.

Użycie każdej liczby, która jest większa, jak np. 2 147 483 648 lub nieskończoności, spowoduje "przelanie" się dostępnego miejsca w pamięci i poskutkuje wykonaniem setTimeout() z zerowym opóźnieniem.

Środowisko uruchomieniowe Node.js w przeciwieństwie do przeglądarek informuje nas o tym błędzie. Do konsoli logowane jest ostrzeżenie, informujące, że wartości Infinity oraz 2147483648 nie mieszczą się w pamięci jako 32 bitowej podpisanej liczby całkowitej i z tego względu czas opóźnienia zostaje ustawiony na 1.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugCode.html b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugCode.html index 9d99d3f46..00b5fab24 100644 --- a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugCode.html +++ b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
setTimeout(() => {
console.log("Infinity")
}, Infinity)

setTimeout(() => {
console.log("24.8 days")
}, 2147483648)

setTimeout(() => {
console.log("Immediately")
}, 0)
- - + + \ No newline at end of file diff --git a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugDescription.html b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugDescription.html index fb2a65f36..cc95d64c4 100644 --- a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugDescription.html +++ b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Z jakim opóźnieniem wykonają się poszczególne logowania do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/links.html b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/links.html index 3b8e9cf4c..8c8931468 100644 --- a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/links.html +++ b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionCode.html b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionCode.html index 22ca8501a..57a7c67ec 100644 --- a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionCode.html +++ b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
setTimeout(() => {
console.log("24.8 days")
}, 2147483647)
- - + + \ No newline at end of file diff --git a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionDescription.html b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionDescription.html index 09d8b332a..ea0451dee 100644 --- a/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionDescription.html +++ b/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W "zarobaczonym" przykładzie, wszystkie 3 logowania do konsoli wykonają się z tym samym, zerowym opóźnieniem.

Dzieje się tak, ponieważ aktualnie wszystkie najpopularniejsze przeglądarki przechowują w pamięci wartość opóźnienia z setTimeout() jako 32 bitową, podpisaną liczbę całkowitą.

Oznacza to, że w pamięci możemy zapisać w systemie binarnym wyłącznie liczby z zakresu od -2147483647 do 2147483647.

32 bity to 32 jednostki pamięci mogące przechowywać wartość 0 lub 1.

Pierwszy bit odpowiada za podpisanie liczby tj. zakomunikowanie czy jest ona dodatnia czy ujemna. W pozostałych 31 bitach możemy więc zapisać maksymalnie 31 jedynek.

31 jedynek w systemie binarnym to 2 147 483 647 w systemie dziesiętnym.

Użycie każdej liczby, która jest większa, jak np. 2 147 483 648 lub nieskończoności, spowoduje "przelanie" się dostępnego miejsca w pamięci i poskutkuje wykonaniem setTimeout() z zerowym opóźnieniem.

Środowisko uruchomieniowe Node.js w przeciwieństwie do przeglądarek informuje nas o tym błędzie. Do konsoli logowane jest ostrzeżenie, informujące, że wartości Infinity oraz 2147483648 nie mieszczą się w pamięci jako 32 bitowej podpisanej liczby całkowitej i z tego względu czas opóźnienia zostaje ustawiony na 1.

- - + + \ No newline at end of file diff --git a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1.html b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1.html index 241db967a..fd85a5847 100644 --- a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1.html +++ b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #082

🪲 Znajdź buga

function capitalize(str) {
str[0].toUpperCase()

return str
}

const sentence = "the quick brown fox"

console.log(capitalize(sentence))

Chcemy w ciągu znaków zamieniać pierwszą z liter na dużą.

Czy powyższy kod spełni to zadanie?

🧪 Rozwiązanie

function capitalize(str) {
str = str[0].toUpperCase() + str.slice(1)

return str
}

const sentence = "the quick brown fox"

console.log(capitalize(sentence))

Błędny kod opiera swoje założenia na mutowalności tablic.

Mimo, że ciągi znaków są z natury przechowywane w pamięci w postaci tablic (każda litera to osobna komórka, którą możemy pobrać tak samo jak komórki tablicy), to fundamentalnie ciągi znaków są niemutowalne.

Metoda toUpperCase() nie może więc zmodyfikować oryginalnego ciągu znaków. Może jedynie zwrócić efekt swojego działania tj. zwrócić przekazany w argumencie ciąg znaków w postaci dużych liter.

str[0].toUpperCase() pobiera pierwszy znak z ciągu str i zwraca go w formie dużej litery.

Nie przypisujemy jednak nigdzie tej zmiany, więc kod ten jest po prostu bezużyteczny.

str = str[0].toUpperCase() to nadpisanie początkowego ciągu znaków str pierwszym znakiem (indeks 0 z tablicy) zwróconym w postaci dużej litery.

W takim przypadku brakuje jednak dalszego ciągu znaków, który możemy dołączyć używając str.slice(1).

Metoda slice() działa tak samo dla ciągu znaków jak i dla tablic, wycinając żądany fragment.

W naszym przypadku wycinamy cały ciąg znaków rozpoczynając od indeksu 1, pozbywając się tym samym z str indeksu 0.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugCode.html b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugCode.html index f6d535953..9669d71b8 100644 --- a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugCode.html +++ b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function capitalize(str) {
str[0].toUpperCase()

return str
}

const sentence = "the quick brown fox"

console.log(capitalize(sentence))
- - + + \ No newline at end of file diff --git a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugDescription.html b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugDescription.html index f361f2e6c..f3bc30361 100644 --- a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugDescription.html +++ b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy w ciągu znaków zamieniać pierwszą z liter na dużą.

Czy powyższy kod spełni to zadanie?

- - + + \ No newline at end of file diff --git a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/links.html b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/links.html index af2618a69..50f2068e6 100644 --- a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/links.html +++ b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionCode.html b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionCode.html index 2733b9fd7..2f38715b2 100644 --- a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionCode.html +++ b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function capitalize(str) {
str = str[0].toUpperCase() + str.slice(1)

return str
}

const sentence = "the quick brown fox"

console.log(capitalize(sentence))
- - + + \ No newline at end of file diff --git a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionDescription.html b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionDescription.html index ee63c38d7..a14afeef2 100644 --- a/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionDescription.html +++ b/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Błędny kod opiera swoje założenia na mutowalności tablic.

Mimo, że ciągi znaków są z natury przechowywane w pamięci w postaci tablic (każda litera to osobna komórka, którą możemy pobrać tak samo jak komórki tablicy), to fundamentalnie ciągi znaków są niemutowalne.

Metoda toUpperCase() nie może więc zmodyfikować oryginalnego ciągu znaków. Może jedynie zwrócić efekt swojego działania tj. zwrócić przekazany w argumencie ciąg znaków w postaci dużych liter.

str[0].toUpperCase() pobiera pierwszy znak z ciągu str i zwraca go w formie dużej litery.

Nie przypisujemy jednak nigdzie tej zmiany, więc kod ten jest po prostu bezużyteczny.

str = str[0].toUpperCase() to nadpisanie początkowego ciągu znaków str pierwszym znakiem (indeks 0 z tablicy) zwróconym w postaci dużej litery.

W takim przypadku brakuje jednak dalszego ciągu znaków, który możemy dołączyć używając str.slice(1).

Metoda slice() działa tak samo dla ciągu znaków jak i dla tablic, wycinając żądany fragment.

W naszym przypadku wycinamy cały ciąg znaków rozpoczynając od indeksu 1, pozbywając się tym samym z str indeksu 0.

- - + + \ No newline at end of file diff --git a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179.html b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179.html index 43240412a..2eb372721 100644 --- a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179.html +++ b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #096

🪲 Znajdź buga

// "use strict"

const greeting = {
message1: "hello",
message2: "everyone",
}

const validator = {
set(obj, prop, value) {
if (prop === "message2") {
return value !== "no one"
}
obj[prop] = value

return true
},
}

const proxy1 = new Proxy(greeting, {})
proxy1.message2 = "everybody"

const proxy2 = new Proxy(greeting, validator)
proxy2.message2 = "no one"

greeting.message1 = "welcome"

console.log(greeting)
console.log(proxy1)
console.log(proxy2)

Jakie wartości zostaną zalogowane do konsoli?

Czy aktywowanie use strict coś by zmieniło?

🧪 Rozwiązanie

// "use strict"

const greeting = {
message1: "hello",
message2: "everyone",
}

const validator = {
set(obj, prop, value) {
if (prop === "message2") {
return value !== "no one"
}
obj[prop] = value

return true
},
}

const proxy1 = new Proxy(greeting, {})
proxy1.message2 = "everybody"

const proxy2 = new Proxy(greeting, validator)
proxy2.message2 = "no one"

greeting.message1 = "welcome"

console.log(greeting)
console.log(proxy1)
console.log(proxy2)
// 3x {
// message1: "welcome",
// message2: "everybody"
// }

Proxy umożliwia ustanowienie pełnomocnictwa dla danego obiektu.

Oznacza to, że poprzez new Proxy(greeting, {}), tworzymy nowy obiekt proxy {}, który będzie zachowywał się tak jak obiekt greeting.

Wszystkie operacje na takim obiekcie w tym np. modyfikacje własności message2, będą miały odzwierciedlenie w oryginalnym obiekcie, czyli zmiany zajdą zarówno w obiekcie proxy1 jak i greeting.

Na tym etapie proxy przypomina stworzenie aliasu obiektu np. poprzez proxy1 = greeting.

Mamy więc przypisanie przez referencję i modyfikowanie obiektu proxy1 jest tożsame z modyfikowaniem obiektu greeting.

Proxy umożliwia jednak dodanie dodatkowej logiki, która zostanie wykonana w imieniu oryginalnego obiektu.

Możemy w ten sposób dodać np. walidację setter'ów, przez co przed modyfikacją oryginalnego obiektu, obiekt proxy najpierw wykona własny kod i dopiero w nim zdecyduje czy dana modyfikacja może zostać wykonana.

Tworząc obiekt validator i ustawiając go jako proxy dla obiektu greeting poprzez new Proxy(greeting, validator), blokujemy możliwość ustawienia własności message2 na wartość no one.

proxy2.message2 = "no one" staje się więc niedozwolone i nie zmodyfikuje ani obiektu proxy ani obiektu oryginalnego.

Jeśli aktywujemy tryb ścisły, to ze względu na taką niedozwoloną akcję, wyrzucony zostanie błąd 'set' on proxy: trap returned falsish for property 'message2'.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugCode.html b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugCode.html index e4202a956..9b943fe7c 100644 --- a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugCode.html +++ b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
// "use strict"

const greeting = {
message1: "hello",
message2: "everyone",
}

const validator = {
set(obj, prop, value) {
if (prop === "message2") {
return value !== "no one"
}
obj[prop] = value

return true
},
}

const proxy1 = new Proxy(greeting, {})
proxy1.message2 = "everybody"

const proxy2 = new Proxy(greeting, validator)
proxy2.message2 = "no one"

greeting.message1 = "welcome"

console.log(greeting)
console.log(proxy1)
console.log(proxy2)
- - + + \ No newline at end of file diff --git a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugDescription.html b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugDescription.html index d7e2d0ca9..0b0257ac1 100644 --- a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugDescription.html +++ b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

Czy aktywowanie use strict coś by zmieniło?

- - + + \ No newline at end of file diff --git a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/links.html b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/links.html index 4b4ab7200..82a8dab56 100644 --- a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/links.html +++ b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionCode.html b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionCode.html index 9bf10fdce..55ca1ec43 100644 --- a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionCode.html +++ b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
// "use strict"

const greeting = {
message1: "hello",
message2: "everyone",
}

const validator = {
set(obj, prop, value) {
if (prop === "message2") {
return value !== "no one"
}
obj[prop] = value

return true
},
}

const proxy1 = new Proxy(greeting, {})
proxy1.message2 = "everybody"

const proxy2 = new Proxy(greeting, validator)
proxy2.message2 = "no one"

greeting.message1 = "welcome"

console.log(greeting)
console.log(proxy1)
console.log(proxy2)
// 3x {
// message1: "welcome",
// message2: "everybody"
// }
- - + + \ No newline at end of file diff --git a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionDescription.html b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionDescription.html index d4756a834..73e963656 100644 --- a/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionDescription.html +++ b/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Proxy umożliwia ustanowienie pełnomocnictwa dla danego obiektu.

Oznacza to, że poprzez new Proxy(greeting, {}), tworzymy nowy obiekt proxy {}, który będzie zachowywał się tak jak obiekt greeting.

Wszystkie operacje na takim obiekcie w tym np. modyfikacje własności message2, będą miały odzwierciedlenie w oryginalnym obiekcie, czyli zmiany zajdą zarówno w obiekcie proxy1 jak i greeting.

Na tym etapie proxy przypomina stworzenie aliasu obiektu np. poprzez proxy1 = greeting.

Mamy więc przypisanie przez referencję i modyfikowanie obiektu proxy1 jest tożsame z modyfikowaniem obiektu greeting.

Proxy umożliwia jednak dodanie dodatkowej logiki, która zostanie wykonana w imieniu oryginalnego obiektu.

Możemy w ten sposób dodać np. walidację setter'ów, przez co przed modyfikacją oryginalnego obiektu, obiekt proxy najpierw wykona własny kod i dopiero w nim zdecyduje czy dana modyfikacja może zostać wykonana.

Tworząc obiekt validator i ustawiając go jako proxy dla obiektu greeting poprzez new Proxy(greeting, validator), blokujemy możliwość ustawienia własności message2 na wartość no one.

proxy2.message2 = "no one" staje się więc niedozwolone i nie zmodyfikuje ani obiektu proxy ani obiektu oryginalnego.

Jeśli aktywujemy tryb ścisły, to ze względu na taką niedozwoloną akcję, wyrzucony zostanie błąd 'set' on proxy: trap returned falsish for property 'message2'.

- - + + \ No newline at end of file diff --git a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff.html b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff.html index 869502e3d..550fd2266 100644 --- a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff.html +++ b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff.html @@ -7,15 +7,15 @@ - - + +
Przejdź do głównej zawartości

Bug #015

🪲 Znajdź buga

const price = 25.65
const shipping = 4.15
const total = price + shipping

console.log(total)

Załóżmy, że piszemy oprogramowanie dla sklepu internetowego. Obsługujemy ceny produktów oraz koszty wysyłki i chcemy je zaprezentować klientom w postaci zsumowanego kosztu zakupu.

Jaka cena zostanie zalogowana do konsoli jako total?

🧪 Rozwiązanie

const price = 2565
const shipping = 415
const total = (price + shipping) / 100

console.log(total)

Poprawny wynik dodawania z 25.65 i 4.15 wynosi 29.80. Jednak total zwraca liczbę 29.799999999999997.

Dzieje się tak, ponieważ komputerowe operacje matematyczne na liczbach zmiennoprzecinkowych mają ograniczoną precyzję ze względu na przetwarzanie ich w formie binarnej.

W JavaScript typem danych, który obsługuje zarówno liczby całkowite jak i zmiennoprzecinkowe jest typ Number.

Jest on zaimplementowany jako 64 bitowy format double-precision floating-point (znanego też jako float64).

Rozwiązaniem problemu może być użycie metody zaokrąglającej wynik Number.prototype.toFixed(). Nie jest to jednak rozwiązanie idealne i w przypadku wielu operacji matematycznych, końcowy wynik może być podany błędnie.

W przypadku operacji walutowych sugerowanym rozwiązaniem jest przetwarzanie wszystkich kwot w ujęciu najniższego nominału.

100 zł to 10 000 groszy
$100 to 10 000 centów

Operacje na liczbach całkowitych nie są obarczone problemami zmiennoprzecinkowych zaokrągleń, a chcąc zaprezentować ostateczną kwotę wystarczy podzielić ją przez 100.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugCode.html b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugCode.html index b0c3a6bd8..81327f0c3 100644 --- a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugCode.html +++ b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const price = 25.65
const shipping = 4.15
const total = price + shipping

console.log(total)
- - + + \ No newline at end of file diff --git a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugDescription.html b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugDescription.html index 92b4b0a3e..a02c6038b 100644 --- a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugDescription.html +++ b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Załóżmy, że piszemy oprogramowanie dla sklepu internetowego. Obsługujemy ceny produktów oraz koszty wysyłki i chcemy je zaprezentować klientom w postaci zsumowanego kosztu zakupu.

Jaka cena zostanie zalogowana do konsoli jako total?

- - + + \ No newline at end of file diff --git a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/links.html b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/links.html index 8df09b4a8..f13dae892 100644 --- a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/links.html +++ b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionCode.html b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionCode.html index 2a76aa6a7..29aa5f2f4 100644 --- a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionCode.html +++ b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const price = 2565
const shipping = 415
const total = (price + shipping) / 100

console.log(total)
- - + + \ No newline at end of file diff --git a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionDescription.html b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionDescription.html index e00ca9b0d..5ea6c235b 100644 --- a/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionDescription.html +++ b/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionDescription.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Poprawny wynik dodawania z 25.65 i 4.15 wynosi 29.80. Jednak total zwraca liczbę 29.799999999999997.

Dzieje się tak, ponieważ komputerowe operacje matematyczne na liczbach zmiennoprzecinkowych mają ograniczoną precyzję ze względu na przetwarzanie ich w formie binarnej.

W JavaScript typem danych, który obsługuje zarówno liczby całkowite jak i zmiennoprzecinkowe jest typ Number.

Jest on zaimplementowany jako 64 bitowy format double-precision floating-point (znanego też jako float64).

Rozwiązaniem problemu może być użycie metody zaokrąglającej wynik Number.prototype.toFixed(). Nie jest to jednak rozwiązanie idealne i w przypadku wielu operacji matematycznych, końcowy wynik może być podany błędnie.

W przypadku operacji walutowych sugerowanym rozwiązaniem jest przetwarzanie wszystkich kwot w ujęciu najniższego nominału.

100 zł to 10 000 groszy
$100 to 10 000 centów

Operacje na liczbach całkowitych nie są obarczone problemami zmiennoprzecinkowych zaokrągleń, a chcąc zaprezentować ostateczną kwotę wystarczy podzielić ją przez 100.

- - + + \ No newline at end of file diff --git a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb.html b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb.html index 9ea64eae9..a46c928eb 100644 --- a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb.html +++ b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #044

🪲 Znajdź buga

const dictionary = new Map()
dictionary.car = "samochód"
dictionary.dog = "pies"

console.log(dictionary.get("car"))
console.log(dictionary.has("dog"))

Chcemy skorzystać z obiektu Map do stworzenia prostego słownika.

Jakie odpowiedzi z wywołania metod zostaną zalogowane do konsoli?

🧪 Rozwiązanie

const dictionary = new Map()
dictionary.set("car", "samochód")
dictionary.set("dog", "pies")

console.log(dictionary.get("car"))
console.log(dictionary.has("dog"))

W przykładzie z błędem wywołanie metody get() zwróci undefined, a wywołanie metody has() zwróci false.

Obiekt mapy definiuje metody, które umożliwiają interakcje z elementami mapy, ale tylko wtedy gdy elementy zostaną uprzednio wprowadzone w poprawny sposób.

Dodając własności do obiektu w sposób tradycyjny, możemy je wyciągnąć również jedynie tradycyjną metodą tj. wywołując np. dictionary.car.

Aby korzystać z mapy w sposób zgodny z przeznaczeniem, musimy dodawać nowe elementy za pomocą metody set().

Możemy też zdefiniować początkowe elementy przekazując je do konstruktora tworzącego nową mapę:

new Map([
["item1", "value2"],
["item2", "value2"],
])

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugCode.html b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugCode.html index 41722f0f4..b1016ae23 100644 --- a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugCode.html +++ b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const dictionary = new Map()
dictionary.car = "samochód"
dictionary.dog = "pies"

console.log(dictionary.get("car"))
console.log(dictionary.has("dog"))
- - + + \ No newline at end of file diff --git a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugDescription.html b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugDescription.html index cfce9b3b5..798143ff8 100644 --- a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugDescription.html +++ b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy skorzystać z obiektu Map do stworzenia prostego słownika.

Jakie odpowiedzi z wywołania metod zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/links.html b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/links.html index 43c44543b..11dcb236e 100644 --- a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/links.html +++ b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionCode.html b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionCode.html index 018edb568..5aa424787 100644 --- a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionCode.html +++ b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const dictionary = new Map()
dictionary.set("car", "samochód")
dictionary.set("dog", "pies")

console.log(dictionary.get("car"))
console.log(dictionary.has("dog"))
- - + + \ No newline at end of file diff --git a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionDescription.html b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionDescription.html index d53dd0e11..5c816d2fa 100644 --- a/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionDescription.html +++ b/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem wywołanie metody get() zwróci undefined, a wywołanie metody has() zwróci false.

Obiekt mapy definiuje metody, które umożliwiają interakcje z elementami mapy, ale tylko wtedy gdy elementy zostaną uprzednio wprowadzone w poprawny sposób.

Dodając własności do obiektu w sposób tradycyjny, możemy je wyciągnąć również jedynie tradycyjną metodą tj. wywołując np. dictionary.car.

Aby korzystać z mapy w sposób zgodny z przeznaczeniem, musimy dodawać nowe elementy za pomocą metody set().

Możemy też zdefiniować początkowe elementy przekazując je do konstruktora tworzącego nową mapę:

new Map([
["item1", "value2"],
["item2", "value2"],
])
- - + + \ No newline at end of file diff --git a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e.html b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e.html index 9231b0374..23ed43547 100644 --- a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e.html +++ b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #085

🪲 Znajdź buga

console.log("foo \nbar\nbaz")
console.log('foo \nbar\nbaz')
console.log(`foo \nbar\nbaz`)
console.log(String.raw`foo ${`\nbar\nbaz`}`)
console.log(String.raw`foo \nbar \nbaz`)

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

console.log("foo \nbar\nbaz")
console.log('foo \nbar\nbaz')
console.log(`foo \nbar\nbaz`)
console.log(String.raw`foo ${`\nbar\nbaz`}`)
console.log(String.raw`foo \nbar \nbaz`)

Pierwsze cztery przykłady zalogują ciągi znaków w ten sam sposób:

foo
bar
baz

Niespodzianką może być ostatni, piąty przykład, który zwróci:

foo \nbar \nbaz

String.raw() zwraca literał szablonu w oryginalnej formie, bez respektowania wstecznego ukośnika jako znaku ucieczki np. dla przejść do nowej linii poprzez \n.

String.raw() respektuje jednak zagnieżdżanie literałów szablonu za pomocą ${}, wykonując je już z uwzględnieniem znaków ucieczki, stąd też przykład z czwartej linii działa tak samo jak przykład z linii trzeciej.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugCode.html b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugCode.html index e2cf7ccdb..60e201452 100644 --- a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugCode.html +++ b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log("foo \nbar\nbaz")
console.log('foo \nbar\nbaz')
console.log(`foo \nbar\nbaz`)
console.log(String.raw`foo ${`\nbar\nbaz`}`)
console.log(String.raw`foo \nbar \nbaz`)
- - + + \ No newline at end of file diff --git a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugDescription.html b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugDescription.html index 08c8540dd..383612337 100644 --- a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugDescription.html +++ b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/links.html b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/links.html index bdd3a9814..a191610dd 100644 --- a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/links.html +++ b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionCode.html b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionCode.html index 028a6b672..fc62f0c93 100644 --- a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionCode.html +++ b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log("foo \nbar\nbaz")
console.log('foo \nbar\nbaz')
console.log(`foo \nbar\nbaz`)
console.log(String.raw`foo ${`\nbar\nbaz`}`)
console.log(String.raw`foo \nbar \nbaz`)
- - + + \ No newline at end of file diff --git a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionDescription.html b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionDescription.html index 9cd2caa26..b9ccd35a1 100644 --- a/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionDescription.html +++ b/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Pierwsze cztery przykłady zalogują ciągi znaków w ten sam sposób:

foo
bar
baz

Niespodzianką może być ostatni, piąty przykład, który zwróci:

foo \nbar \nbaz

String.raw() zwraca literał szablonu w oryginalnej formie, bez respektowania wstecznego ukośnika jako znaku ucieczki np. dla przejść do nowej linii poprzez \n.

String.raw() respektuje jednak zagnieżdżanie literałów szablonu za pomocą ${}, wykonując je już z uwzględnieniem znaków ucieczki, stąd też przykład z czwartej linii działa tak samo jak przykład z linii trzeciej.

- - + + \ No newline at end of file diff --git a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a.html b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a.html index 8ca438e0f..77899f972 100644 --- a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a.html +++ b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #058

🪲 Znajdź buga

console.log(null == 0)
console.log(null > 0)
console.log(null >= 0)

Co zostanie zalogowane do konsoli w powyższym przykładzie?

🧪 Rozwiązanie

console.log(null == 0) // false
console.log(null > 0) // false
console.log(null >= 0) // true

Polegając na dedukcji w języku JavaScript, można wpaść w pułapkę.

Logicznym wydaje się, że jeśli null nie jest równy 0 i nie jest też większy > od 0, to nie powinien być większy lub równy 0, a jednak jest.

Powodem jest niespójność działania algorytmów porównania.

Algorytm porównania ==, jeśli napotka na operand null lub undefined to aby zwrócić prawdę z takiego porównania, wymaga aby drugi operand również był null albo undefined.

null może być równy tylko wartości null. Ten sam algorytm porównania == wprowadza jednak konwersję innych typów danych np. wartości logicznych true i false, sprowadzając je do wartości liczbowych 1 i 0.

Algorytm stojący za porównaniem większy niż > działa inaczej.

Najpierw podmienia on miejscami operandy i stosuje algorytm porównanie mniejszy niż < (co nie ma tutaj żadnego znaczenia).

Później natomiast, UWAGA, konwertuje wartości logiczne true/false na 1/0, ale TAKŻE wartość null na 0.

Wartość undefined konwertuje natomiast na NaN.

Operator większy lub równy >= robi z null to samo, więc finalnie wyrażenie zostaje zamienione na 0 >= 0, co staje się prawdą.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugCode.html b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugCode.html index 79792f2b5..6e7b4254c 100644 --- a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugCode.html +++ b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(null == 0)
console.log(null > 0)
console.log(null >= 0)
- - + + \ No newline at end of file diff --git a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugDescription.html b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugDescription.html index fbb97a48c..d666b519f 100644 --- a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugDescription.html +++ b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Co zostanie zalogowane do konsoli w powyższym przykładzie?

- - + + \ No newline at end of file diff --git a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/links.html b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/links.html index 8e96ad52d..17e14fe65 100644 --- a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/links.html +++ b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionCode.html b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionCode.html index 185a19a24..16d572e60 100644 --- a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionCode.html +++ b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(null == 0) // false
console.log(null > 0) // false
console.log(null >= 0) // true
- - + + \ No newline at end of file diff --git a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionDescription.html b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionDescription.html index 32aca4c43..3b660c2a6 100644 --- a/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionDescription.html +++ b/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Polegając na dedukcji w języku JavaScript, można wpaść w pułapkę.

Logicznym wydaje się, że jeśli null nie jest równy 0 i nie jest też większy > od 0, to nie powinien być większy lub równy 0, a jednak jest.

Powodem jest niespójność działania algorytmów porównania.

Algorytm porównania ==, jeśli napotka na operand null lub undefined to aby zwrócić prawdę z takiego porównania, wymaga aby drugi operand również był null albo undefined.

null może być równy tylko wartości null. Ten sam algorytm porównania == wprowadza jednak konwersję innych typów danych np. wartości logicznych true i false, sprowadzając je do wartości liczbowych 1 i 0.

Algorytm stojący za porównaniem większy niż > działa inaczej.

Najpierw podmienia on miejscami operandy i stosuje algorytm porównanie mniejszy niż < (co nie ma tutaj żadnego znaczenia).

Później natomiast, UWAGA, konwertuje wartości logiczne true/false na 1/0, ale TAKŻE wartość null na 0.

Wartość undefined konwertuje natomiast na NaN.

Operator większy lub równy >= robi z null to samo, więc finalnie wyrażenie zostaje zamienione na 0 >= 0, co staje się prawdą.

- - + + \ No newline at end of file diff --git a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf.html b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf.html index e27b0fe84..ea7d7bc76 100644 --- a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf.html +++ b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #052

🪲 Znajdź buga

let a, b, c
let x, y, z

a = b = 1, c = 2
x = (y = 1, z = 2)

console.log(a)
console.log(x)

console.log("foo", "bar")
console.log(("foo", "bar"))

Co zostanie zalogowane do konsoli w poszczególnych przykładach?

🧪 Rozwiązanie

let a, b, c
let x, y, z

a = b = 1, c = 2
x = (y = 1, z = 2)

console.log(a) // 1
console.log(x) // 2

console.log("foo", "bar") // foo bar
console.log(("foo", "bar")) // bar

Operator przecinka (,) wykonuje operandy w kolejności od lewej do prawej, a następnie zwraca wartość ostatniego z nich.

Operator , ma najniższe pierwszeństwo wykonywania z wszystkich operatorów, niższe niż operator przypisania =.

Mylące może być występowanie przecinka również w innych, bardziej popularnych rolach jak np. rozdzielanie elementów w tablicy, własności w obiektach, parametrów i argumentów w funkcjach, liście deklaracji zmiennych, importach czy eksportach.

Przykładowo, a = b = 1, c = 2, wykona operacje przypisania 1 do zmiennej b oraz wartości z b do zmiennej a. Wykonane zostanie też przypisanie 2 do zmiennej c, ale już jako osobna operacja. Zwrócona z niej wartość 2 nie bierze udziału w przypisywaniu wartości do a.

Konsola logując wartość zmiennej a zwróci więc 1.

W przykładzie x = (y = 1, z = 2), pierwsze w kolejności wykonane zostaną wyrażenia w nawiasie. Najpierw dwie operacje przypisania, 1 do zmiennej x oraz 2 do zmiennej z, następnie zadziała operator przecinka, który zwróci wartość ostatniej z tych operacji, czyli 2

Finalnie wartość zmiennej x zostanie zalogowana jako 2.

Inny przykład, log("foo", "bar"), to wywołanie metody z przekazaniem dwóch argumentów. Metoda loguje do konsoli oba argumenty.

Gdy jednak argumenty zgrupujemy umieszczając je w nawiasie log(("foo", "bar")), to operator , zwróci ostatnią z wartości czyli bar i tylko ta wartość będzie argumentem dla metody log.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugCode.html b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugCode.html index 016190282..ba1357421 100644 --- a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugCode.html +++ b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let a, b, c
let x, y, z

a = b = 1, c = 2
x = (y = 1, z = 2)

console.log(a)
console.log(x)

console.log("foo", "bar")
console.log(("foo", "bar"))
- - + + \ No newline at end of file diff --git a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugDescription.html b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugDescription.html index 170c91c3c..d7678a830 100644 --- a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugDescription.html +++ b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Co zostanie zalogowane do konsoli w poszczególnych przykładach?

- - + + \ No newline at end of file diff --git a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/links.html b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/links.html index ae0513fed..dc8626d9c 100644 --- a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/links.html +++ b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionCode.html b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionCode.html index b29462506..6c6569a6e 100644 --- a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionCode.html +++ b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
let a, b, c
let x, y, z

a = b = 1, c = 2
x = (y = 1, z = 2)

console.log(a) // 1
console.log(x) // 2

console.log("foo", "bar") // foo bar
console.log(("foo", "bar")) // bar
- - + + \ No newline at end of file diff --git a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionDescription.html b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionDescription.html index b7ee1bcd8..897319471 100644 --- a/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionDescription.html +++ b/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Operator przecinka (,) wykonuje operandy w kolejności od lewej do prawej, a następnie zwraca wartość ostatniego z nich.

Operator , ma najniższe pierwszeństwo wykonywania z wszystkich operatorów, niższe niż operator przypisania =.

Mylące może być występowanie przecinka również w innych, bardziej popularnych rolach jak np. rozdzielanie elementów w tablicy, własności w obiektach, parametrów i argumentów w funkcjach, liście deklaracji zmiennych, importach czy eksportach.

Przykładowo, a = b = 1, c = 2, wykona operacje przypisania 1 do zmiennej b oraz wartości z b do zmiennej a. Wykonane zostanie też przypisanie 2 do zmiennej c, ale już jako osobna operacja. Zwrócona z niej wartość 2 nie bierze udziału w przypisywaniu wartości do a.

Konsola logując wartość zmiennej a zwróci więc 1.

W przykładzie x = (y = 1, z = 2), pierwsze w kolejności wykonane zostaną wyrażenia w nawiasie. Najpierw dwie operacje przypisania, 1 do zmiennej x oraz 2 do zmiennej z, następnie zadziała operator przecinka, który zwróci wartość ostatniej z tych operacji, czyli 2

Finalnie wartość zmiennej x zostanie zalogowana jako 2.

Inny przykład, log("foo", "bar"), to wywołanie metody z przekazaniem dwóch argumentów. Metoda loguje do konsoli oba argumenty.

Gdy jednak argumenty zgrupujemy umieszczając je w nawiasie log(("foo", "bar")), to operator , zwróci ostatnią z wartości czyli bar i tylko ta wartość będzie argumentem dla metody log.

- - + + \ No newline at end of file diff --git a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645.html b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645.html index 492d74dd4..b8bf7a34d 100644 --- a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645.html +++ b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645.html @@ -7,15 +7,15 @@ - - + +
Przejdź do głównej zawartości

Bug #074

🪲 Znajdź buga

console.log([1, 2, 3] + [4, 5, 6])

Chcemy połączyć (dodać) ze sobą kilka tablic.

Czy powyższy kod spełni to zadanie?\ Co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

console.log([...[1, 2, 3], ...[4, 5, 6]])
// "1,2,34,5,6"

Przykład błędnego kodu nie jest wymyślony przeze mnie. Znalazłem go w kursie JavaScript, który mianował się tytułem "Prawdopodobnie najlepszy darmowy kurs JavaScript".

W sekcji dodawania elementów do tablicy, użycie operatora + było zaproponowane przez autora, jako metoda dodawania do tablicy nowych elementów, lub łączenia ze sobą tablic.

+ jest przeładowanym operatorem dodawania, tzn. ma więcej niż jedną funkcjonalność, która zależy od typów danych, które zostaną podstawione jako operandy.

+ może matematycznie dodawać wartości liczbowe, ale może też łączyć ze sobą ciągi znaków.

W przypadku próby dodania do siebie dwóch tablic, w pierwszej kolejności algorytm operatora + wymusi konwersję tablic do ciągów znaków poprzez wywołanie metody toString().

[1, 2, 3].toString() zwróci ciąg znaków "1,2,3".

Analogicznie dla drugiej tablicy będzie to "4,5,6".

Połączenie tych dwóch ciągów znaków da nam więc ciąg znaków "1,2,34,5,6".

Nie uda się nam odwrócić tej operacji np. poprzez "1,2,34,5,6".split(","), bo nowa tablica otrzyma wtedy zlepiony element "34". Tracimy też informację o oryginalnym typie danych.

Aby połączyć, lub w sposób nienaruszający oryginalną tablicę (push(), patrzę na Ciebie), dodać nowe elementy, najwygodniej będzie użyć operatora rozkładu (spread), rozkładając tablicę wewnątrz nowej tablicy [...[1, 2, 3]].

W ten sposób możemy łączyć dowolną ilość tablic i dodawać do nich dowolną ilość nowych elementów.

Innym sposobem może być użycie np. Array.prototype.concat().

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugCode.html b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugCode.html index dd5c0c6ef..cb1be93cc 100644 --- a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugCode.html +++ b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log([1, 2, 3] + [4, 5, 6])
- - + + \ No newline at end of file diff --git a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugDescription.html b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugDescription.html index 37de4b706..44dfad2c3 100644 --- a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugDescription.html +++ b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugDescription.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Chcemy połączyć (dodać) ze sobą kilka tablic.

Czy powyższy kod spełni to zadanie?\ Co zostanie zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/links.html b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/links.html index 45f613d70..80f200e99 100644 --- a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/links.html +++ b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionCode.html b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionCode.html index 60ddda07c..bbe2bad61 100644 --- a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionCode.html +++ b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log([...[1, 2, 3], ...[4, 5, 6]])
// "1,2,34,5,6"
- - + + \ No newline at end of file diff --git a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionDescription.html b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionDescription.html index 625d0c8cd..4c0048adc 100644 --- a/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionDescription.html +++ b/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Przykład błędnego kodu nie jest wymyślony przeze mnie. Znalazłem go w kursie JavaScript, który mianował się tytułem "Prawdopodobnie najlepszy darmowy kurs JavaScript".

W sekcji dodawania elementów do tablicy, użycie operatora + było zaproponowane przez autora, jako metoda dodawania do tablicy nowych elementów, lub łączenia ze sobą tablic.

+ jest przeładowanym operatorem dodawania, tzn. ma więcej niż jedną funkcjonalność, która zależy od typów danych, które zostaną podstawione jako operandy.

+ może matematycznie dodawać wartości liczbowe, ale może też łączyć ze sobą ciągi znaków.

W przypadku próby dodania do siebie dwóch tablic, w pierwszej kolejności algorytm operatora + wymusi konwersję tablic do ciągów znaków poprzez wywołanie metody toString().

[1, 2, 3].toString() zwróci ciąg znaków "1,2,3".

Analogicznie dla drugiej tablicy będzie to "4,5,6".

Połączenie tych dwóch ciągów znaków da nam więc ciąg znaków "1,2,34,5,6".

Nie uda się nam odwrócić tej operacji np. poprzez "1,2,34,5,6".split(","), bo nowa tablica otrzyma wtedy zlepiony element "34". Tracimy też informację o oryginalnym typie danych.

Aby połączyć, lub w sposób nienaruszający oryginalną tablicę (push(), patrzę na Ciebie), dodać nowe elementy, najwygodniej będzie użyć operatora rozkładu (spread), rozkładając tablicę wewnątrz nowej tablicy [...[1, 2, 3]].

W ten sposób możemy łączyć dowolną ilość tablic i dodawać do nich dowolną ilość nowych elementów.

Innym sposobem może być użycie np. Array.prototype.concat().

- - + + \ No newline at end of file diff --git a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e.html b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e.html index e18828144..5b46178fc 100644 --- a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e.html +++ b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #020

🪲 Znajdź buga

console.log(foo())
console.log(bar())

var foo = function () {
return "foo"
}

function bar() {
return "bar"
}

Co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

console.log(bar())

var foo = function () {
return "foo"
}

console.log(foo())

function bar() {
return "bar"
}

W przykładzie z błędem, w konsoli ujrzymy Error: foo is not a function.

Podciągnięcie (hoisting) ma zastosowanie w obu przypadkach - deklaracji funkcji bar() oraz wyrażenia przypisania anonimowej funkcji do zmiennej foo zadeklarowanej z użyciem var.

Jeśli pozbędziemy się wywołania foo() generującego błąd, wywołanie bar() zadziała prawidłowo.

W przeciwieństwie do pociągania deklaracji funkcji bar(), w przypadku funkcji przypisanej do zmiennej foo podciągnięta zostaje tylko sama deklaracja zmiennej, bez przypisanej do niej wartości.

foo w momencie wywołania ma więc wartość undefined, a undefined funkcją nie jest, tak jak mówi nam treść błędu.

Patrząc na kod, możemy mieć jednak wrażenie, że foo funkcją jest i to treść błędu jest błędna.

Aby poprawić tą sytuację, możemy zamienić słowo kluczowe var na let lub const. Ujrzymy wtedy bardziej jasny komunikat błędu Error: Cannot access 'foo' before initialization.

Niemniej, żeby naprawić działanie kodu, musimy po prostu przenieść wywołanie funkcji za wyrażenie przypisywania funkcji do zmiennej.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugCode.html b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugCode.html index d5e167e48..492147af9 100644 --- a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugCode.html +++ b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(foo())
console.log(bar())

var foo = function () {
return "foo"
}

function bar() {
return "bar"
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugDescription.html b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugDescription.html index 0d92834b0..f634c844a 100644 --- a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugDescription.html +++ b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Co zostanie zalogowane do konsoli?

- - + + \ No newline at end of file diff --git a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/links.html b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/links.html index d8576dfd7..1bfbea974 100644 --- a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/links.html +++ b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionCode.html b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionCode.html index 6ad808779..02c28a12f 100644 --- a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionCode.html +++ b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(bar())

var foo = function () {
return "foo"
}

console.log(foo())

function bar() {
return "bar"
}
- - + + \ No newline at end of file diff --git a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionDescription.html b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionDescription.html index 334132090..6ac653557 100644 --- a/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionDescription.html +++ b/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, w konsoli ujrzymy Error: foo is not a function.

Podciągnięcie (hoisting) ma zastosowanie w obu przypadkach - deklaracji funkcji bar() oraz wyrażenia przypisania anonimowej funkcji do zmiennej foo zadeklarowanej z użyciem var.

Jeśli pozbędziemy się wywołania foo() generującego błąd, wywołanie bar() zadziała prawidłowo.

W przeciwieństwie do pociągania deklaracji funkcji bar(), w przypadku funkcji przypisanej do zmiennej foo podciągnięta zostaje tylko sama deklaracja zmiennej, bez przypisanej do niej wartości.

foo w momencie wywołania ma więc wartość undefined, a undefined funkcją nie jest, tak jak mówi nam treść błędu.

Patrząc na kod, możemy mieć jednak wrażenie, że foo funkcją jest i to treść błędu jest błędna.

Aby poprawić tą sytuację, możemy zamienić słowo kluczowe var na let lub const. Ujrzymy wtedy bardziej jasny komunikat błędu Error: Cannot access 'foo' before initialization.

Niemniej, żeby naprawić działanie kodu, musimy po prostu przenieść wywołanie funkcji za wyrażenie przypisywania funkcji do zmiennej.

- - + + \ No newline at end of file diff --git a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf.html b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf.html index c4966d8b2..55bdaf280 100644 --- a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf.html +++ b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf.html @@ -7,8 +7,8 @@ - - + +
@@ -18,7 +18,7 @@ 0 + 1 daje 1.

undefined jest już jednak konwertowany do wartości NaN.\ NaN + 1 daje NaN.

Jeśli typy danych nie są prymitywne, to algorytm sprowadza je do takich.

Obiekty (w tym tablice) nie są danymi typu prymitywnego. Dziedziczą z prototypu Object metodę valueOf(), która w pierwszej kolejności jest sprawdzana pod kątem konwersji do typu prymitywnego przez operację dodawania.

valueOf zwraca jednak obiekt, więc wartość jest ignorowana (nie jest prymitywna) i algorytm przechodzi do sprawdzenia drugiej metody toString(), która zwraca ciąg znaków.

Pusta tablica [] nie zostaje więc zamieniona na wartość liczbową 0, a na pusty ciąg znaków, który następnie jest łączony z wartością 1, również skonwertowaną na ciąg znaków.

Podobnie jest z obiektem {}. Jest on konwertowany do ciągu znaków [object Object], a następnie łączony z wartością 1, również skonwertowaną do ciągu znaków.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugCode.html b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugCode.html index 4449b6dcd..13bc552a3 100644 --- a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugCode.html +++ b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(true + 1)
console.log(false + 1)
console.log(null + 1)
console.log(undefined + 1)
console.log([] + 1)
console.log({} + 1)
- - + + \ No newline at end of file diff --git a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugDescription.html b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugDescription.html index 8d2514c5c..c82dfd44d 100644 --- a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugDescription.html +++ b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli w powyższych przykładach?

- - + + \ No newline at end of file diff --git a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/links.html b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/links.html index 0fa9121fb..914a3e10a 100644 --- a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/links.html +++ b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionCode.html b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionCode.html index 7ea6660aa..e3e4b6bdc 100644 --- a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionCode.html +++ b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(true + 1) // 2
console.log(false + 1) // 1
console.log(null + 1) // 1
console.log(undefined + 1) // NaN
console.log([] + 1) // "1"
console.log({} + 1) // [object Object]1
- - + + \ No newline at end of file diff --git a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionDescription.html b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionDescription.html index 3a37c8537..cbb65a943 100644 --- a/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionDescription.html +++ b/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionDescription.html @@ -7,8 +7,8 @@ - - + +
@@ -17,7 +17,7 @@ 0 + 1 daje 1.

null jest konwertowany do wartości liczbowej 0.\ 0 + 1 daje 1.

undefined jest już jednak konwertowany do wartości NaN.\ NaN + 1 daje NaN.

Jeśli typy danych nie są prymitywne, to algorytm sprowadza je do takich.

Obiekty (w tym tablice) nie są danymi typu prymitywnego. Dziedziczą z prototypu Object metodę valueOf(), która w pierwszej kolejności jest sprawdzana pod kątem konwersji do typu prymitywnego przez operację dodawania.

valueOf zwraca jednak obiekt, więc wartość jest ignorowana (nie jest prymitywna) i algorytm przechodzi do sprawdzenia drugiej metody toString(), która zwraca ciąg znaków.

Pusta tablica [] nie zostaje więc zamieniona na wartość liczbową 0, a na pusty ciąg znaków, który następnie jest łączony z wartością 1, również skonwertowaną na ciąg znaków.

Podobnie jest z obiektem {}. Jest on konwertowany do ciągu znaków [object Object], a następnie łączony z wartością 1, również skonwertowaną do ciągu znaków.

- - + + \ No newline at end of file diff --git a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a.html b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a.html index cb3ca824a..feb26a90f 100644 --- a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a.html +++ b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a.html @@ -7,15 +7,15 @@ - - + +
Przejdź do głównej zawartości

Bug #063

🪲 Znajdź buga

const set1 = new Set()
set1.add(["a", "b", "c"])
set1.add(["a", "b", "c"])
set1.add(["a", "b", "c"])

const set2 = new Set()
set2.add(["a", "b", "c"].join())
set2.add(["a", "b", "c"].join())
set2.add(["a", "b", "c"].join())

const set3 = new Set("tralalala")

console.log(set1.size)
console.log(set2.size)
console.log(set3.size)

Jakie wartości zostaną zalogowane dla poszczególnych zbiorów Set?

🧪 Rozwiązanie

const set1 = new Set()
set1.add(["a", "b", "c"])
set1.add(["a", "b", "c"])
set1.add(["a", "b", "c"])

const set2 = new Set()
set2.add(["a", "b", "c"].join())
set2.add(["a", "b", "c"].join())
set2.add(["a", "b", "c"].join())

const set3 = new Set("tralalala")

console.log(set1.size) // 3
console.log(set2.size) // 1
console.log(set3.size) // 4

Set w przeciwieństwie do Array to zbiór unikalnych wartości.

Wielkość zbioru set1 będzie wynosiła 3 elementy, mimo że na pierwszy rzut oka elementy wydają się nie być unikalne i zbiór powinien zawierać tylko 1 element.

W przypadku obiektów (w tym tablic) każdy traktowany jest jako unikalny element, bo o unikalności świadczą adresy referencyjne z pamięci RAM.

Gdybyśmy na początku przypisali tablicę do zmiennej np. poprzez \ const table = ["a", "b", "c"], to kilkukrotnie dodając ją poprzez referencję tj. set1.add(table), tablice nie duplikowałyby się w zbiorze i finalnie set1.size zwróciłoby wartość 1.

W set2 metoda join(), łączy elementy z tablic (domyślnie za pomocą przecinka), tym samym tworząc wartości prymitywne typu ciąg znaków.

Wartości prymitywne są porównywane poprzez wartość, a nie referencję, więc finalnie set2.size zwraca 1 jako łączą ilość elementów zbioru.

Aby nieco ułatwić sobie zrozumienie działania unikalności elementów w Set, można posłużyć się operatorem unikalnego porównania.

Jeśli któryś z elementów porównywany z innym elementem za pomocą operatora === zwróci prawdę, to znaczy, że taki element już jest w zbiorze i kolejny nie zostanie dodany.

["a","b","c"] === ["a","b","c"] zwróci false, więc elementy zostają dodawane do zbioru jako unikalne.

Wyjątkiem jest NaN, który jako jedyny w porównaniu z samym sobą zwraca fałsz, ale mimo to Set nie pozwala na umieszczenie więcej niż jednej wartości NaN w zbiorze.

Ostatni przykład set3.size zwraca wielkość zbioru jako 4 elementy, ponieważ bezpośrednie przekazanie ciągu znaków do funkcji konstruktora Set rozbija ciąg znaków na zbiór pojedynczych znaków.

Ciąg znaków można więc zapisać również jako ["t","r","a","l","a","l","a","l","a"].

Widać wtedy wyraźnie, że niektóre znaki się powtarzają, przez co zostają zignorowane i finalnie zbiór składa się jedynie z 4 unikalnych elementów ["t","r","a","l"].

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugCode.html b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugCode.html index bcc39d976..d7928767a 100644 --- a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugCode.html +++ b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const set1 = new Set()
set1.add(["a", "b", "c"])
set1.add(["a", "b", "c"])
set1.add(["a", "b", "c"])

const set2 = new Set()
set2.add(["a", "b", "c"].join())
set2.add(["a", "b", "c"].join())
set2.add(["a", "b", "c"].join())

const set3 = new Set("tralalala")

console.log(set1.size)
console.log(set2.size)
console.log(set3.size)
- - + + \ No newline at end of file diff --git a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugDescription.html b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugDescription.html index 678546e1f..8aae74ed9 100644 --- a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugDescription.html +++ b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane dla poszczególnych zbiorów Set?

- - + + \ No newline at end of file diff --git a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/links.html b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/links.html index b246ab1d9..0459b8f51 100644 --- a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/links.html +++ b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionCode.html b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionCode.html index d3d2064fc..506851f42 100644 --- a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionCode.html +++ b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const set1 = new Set()
set1.add(["a", "b", "c"])
set1.add(["a", "b", "c"])
set1.add(["a", "b", "c"])

const set2 = new Set()
set2.add(["a", "b", "c"].join())
set2.add(["a", "b", "c"].join())
set2.add(["a", "b", "c"].join())

const set3 = new Set("tralalala")

console.log(set1.size) // 3
console.log(set2.size) // 1
console.log(set3.size) // 4
- - + + \ No newline at end of file diff --git a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionDescription.html b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionDescription.html index 34dc7cbb5..94fc807ac 100644 --- a/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionDescription.html +++ b/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionDescription.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Set w przeciwieństwie do Array to zbiór unikalnych wartości.

Wielkość zbioru set1 będzie wynosiła 3 elementy, mimo że na pierwszy rzut oka elementy wydają się nie być unikalne i zbiór powinien zawierać tylko 1 element.

W przypadku obiektów (w tym tablic) każdy traktowany jest jako unikalny element, bo o unikalności świadczą adresy referencyjne z pamięci RAM.

Gdybyśmy na początku przypisali tablicę do zmiennej np. poprzez \ const table = ["a", "b", "c"], to kilkukrotnie dodając ją poprzez referencję tj. set1.add(table), tablice nie duplikowałyby się w zbiorze i finalnie set1.size zwróciłoby wartość 1.

W set2 metoda join(), łączy elementy z tablic (domyślnie za pomocą przecinka), tym samym tworząc wartości prymitywne typu ciąg znaków.

Wartości prymitywne są porównywane poprzez wartość, a nie referencję, więc finalnie set2.size zwraca 1 jako łączą ilość elementów zbioru.

Aby nieco ułatwić sobie zrozumienie działania unikalności elementów w Set, można posłużyć się operatorem unikalnego porównania.

Jeśli któryś z elementów porównywany z innym elementem za pomocą operatora === zwróci prawdę, to znaczy, że taki element już jest w zbiorze i kolejny nie zostanie dodany.

["a","b","c"] === ["a","b","c"] zwróci false, więc elementy zostają dodawane do zbioru jako unikalne.

Wyjątkiem jest NaN, który jako jedyny w porównaniu z samym sobą zwraca fałsz, ale mimo to Set nie pozwala na umieszczenie więcej niż jednej wartości NaN w zbiorze.

Ostatni przykład set3.size zwraca wielkość zbioru jako 4 elementy, ponieważ bezpośrednie przekazanie ciągu znaków do funkcji konstruktora Set rozbija ciąg znaków na zbiór pojedynczych znaków.

Ciąg znaków można więc zapisać również jako ["t","r","a","l","a","l","a","l","a"].

Widać wtedy wyraźnie, że niektóre znaki się powtarzają, przez co zostają zignorowane i finalnie zbiór składa się jedynie z 4 unikalnych elementów ["t","r","a","l"].

- - + + \ No newline at end of file diff --git a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea.html b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea.html index 3133ca621..e4b444624 100644 --- a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea.html +++ b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #034

🪲 Znajdź buga

console.log(NaN == NaN)
console.log(NaN === NaN)

console.log(Number.NaN == Number.NaN)
console.log(Number.NaN === Number.NaN)

console.log(isNaN(NaN))
console.log(Number.isNaN(NaN))

console.log(isNaN("123"))
console.log(Number.isNaN("123"))

console.log(isNaN("abc"))
console.log(Number.isNaN("abc"))

const valueIsNaN = (val) => val !== val

console.log(valueIsNaN("123"))
console.log(valueIsNaN("abc"))

console.log(valueIsNaN(NaN))
console.log(valueIsNaN(Number.NaN))

Jakie wartości logiczne zostaną zalogowane do konsoli?

Czy metoda isNaN() działa tak samo jak metoda Number.isNaN()?

Czy funkcja valueIsNaN() spełni zadanie sprawdzania wartości NaN?

🧪 Rozwiązanie

console.log(NaN == NaN) // false
console.log(NaN === NaN) // false

console.log(Number.NaN == Number.NaN) // false
console.log(Number.NaN === Number.NaN) // false

console.log(isNaN(NaN)) // true
console.log(Number.isNaN(NaN)) // true

console.log(isNaN("123")) // false
console.log(Number.isNaN("123")) // false

console.log(isNaN("abc")) // true (!)
console.log(Number.isNaN("abc")) // false

const valueIsNaN = (val) => val !== val

console.log(valueIsNaN("123")) // false
console.log(valueIsNaN("abc")) // false

console.log(valueIsNaN(NaN)) // true
console.log(valueIsNaN(Number.NaN)) // true

NaN jest wyjątkową wartością w JavaScript. Jako jedyna porównana sama ze sobą zwraca fałsz. Nie ma znaczenia, czy użyjemy ścisłego (===) czy luźnego (==) porównania.

Jedyną opcją na sprawdzenie, czy wartością jest NaN jest użycie dostępnej w globalnym kontekście metody isNaN() lub Number.isNaN.

Alternatywnie, możemy stworzyć własną funkcję, która porówna ścisłą nierówność (!==) przekazanej wartości. Prawda zwrócona zostanie tylko wtedy, gdy jako argument funkcji przekażemy NaN.

Na bardzo mocną uwagę zasługuje isNaN("abc").

"abc" === NaN w żaden sposób nie jest prawdziwe.

"abc" nie jest wartością NaN, dlaczego więc dostajemy z tej metody odpowiedź true?

Bo w JavaScript, metoda isNaN() działa inaczej niż Number.isNaN().

isNaN() zwraca true jeśli argument jest wartością NaN, lub jeśli będzie wartością NaN po jego konwersji na wartość liczbową 🤯.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugCode.html b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugCode.html index a2affcbae..bf9d460c3 100644 --- a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugCode.html +++ b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(NaN == NaN)
console.log(NaN === NaN)

console.log(Number.NaN == Number.NaN)
console.log(Number.NaN === Number.NaN)

console.log(isNaN(NaN))
console.log(Number.isNaN(NaN))

console.log(isNaN("123"))
console.log(Number.isNaN("123"))

console.log(isNaN("abc"))
console.log(Number.isNaN("abc"))

const valueIsNaN = (val) => val !== val

console.log(valueIsNaN("123"))
console.log(valueIsNaN("abc"))

console.log(valueIsNaN(NaN))
console.log(valueIsNaN(Number.NaN))
- - + + \ No newline at end of file diff --git a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugDescription.html b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugDescription.html index 8817044b4..5e8919b22 100644 --- a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugDescription.html +++ b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości logiczne zostaną zalogowane do konsoli?

Czy metoda isNaN() działa tak samo jak metoda Number.isNaN()?

Czy funkcja valueIsNaN() spełni zadanie sprawdzania wartości NaN?

- - + + \ No newline at end of file diff --git a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/links.html b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/links.html index ee1102620..658f3ada0 100644 --- a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/links.html +++ b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionCode.html b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionCode.html index e56043ebe..e8903d376 100644 --- a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionCode.html +++ b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(NaN == NaN) // false
console.log(NaN === NaN) // false

console.log(Number.NaN == Number.NaN) // false
console.log(Number.NaN === Number.NaN) // false

console.log(isNaN(NaN)) // true
console.log(Number.isNaN(NaN)) // true

console.log(isNaN("123")) // false
console.log(Number.isNaN("123")) // false

console.log(isNaN("abc")) // true (!)
console.log(Number.isNaN("abc")) // false

const valueIsNaN = (val) => val !== val

console.log(valueIsNaN("123")) // false
console.log(valueIsNaN("abc")) // false

console.log(valueIsNaN(NaN)) // true
console.log(valueIsNaN(Number.NaN)) // true
- - + + \ No newline at end of file diff --git a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionDescription.html b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionDescription.html index 6871b0b72..3bf3748cc 100644 --- a/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionDescription.html +++ b/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

NaN jest wyjątkową wartością w JavaScript. Jako jedyna porównana sama ze sobą zwraca fałsz. Nie ma znaczenia, czy użyjemy ścisłego (===) czy luźnego (==) porównania.

Jedyną opcją na sprawdzenie, czy wartością jest NaN jest użycie dostępnej w globalnym kontekście metody isNaN() lub Number.isNaN.

Alternatywnie, możemy stworzyć własną funkcję, która porówna ścisłą nierówność (!==) przekazanej wartości. Prawda zwrócona zostanie tylko wtedy, gdy jako argument funkcji przekażemy NaN.

Na bardzo mocną uwagę zasługuje isNaN("abc").

"abc" === NaN w żaden sposób nie jest prawdziwe.

"abc" nie jest wartością NaN, dlaczego więc dostajemy z tej metody odpowiedź true?

Bo w JavaScript, metoda isNaN() działa inaczej niż Number.isNaN().

isNaN() zwraca true jeśli argument jest wartością NaN, lub jeśli będzie wartością NaN po jego konwersji na wartość liczbową 🤯.

- - + + \ No newline at end of file diff --git a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020.html b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020.html index 430cbc0bc..54f4b632d 100644 --- a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020.html +++ b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #005

🪲 Znajdź buga

function addToArray(item, array) {
const newArray = array
newArray.push(item)

return newArray
}

const fruits = ["apple", "orange"]
const favFruits = addToArray("banana", fruits)

console.log({ fruits, favFruits })

Chcemy stworzyć funkcję, która doda nowy element do tablicy, a następnie zwróci tą tablicę.

Array.prototype.push() domyślnie zwraca długość tablicy tj. łączną liczbę elementów.

W addToArray() wyraźnie zwracamy więc zaktualizowaną tablicę.

Jakie elementy zostaną zalogowane do konsoli jako fruits i favFruits po użyciu funkcji addToArray()?

🧪 Rozwiązanie

function addToArray(item, array) {
const newArray = array.concat(item)

return newArray
}

const fruits = ["apple", "orange"]
const favFruits = addToArray("banana", fruits)

console.log({ fruits, favFruits })

W przykładzie z błędem okazuje się, że fruits i favFruits zwrócą ten sam zbiór 3 elementów ["apple", "orange", "banana"].

Powodem takiego efektu jest charakter działania metody push(). Mutuje ona tablicę, tj. zmienia jej oryginalną zawartość.

O funkcjach/metodach, które mają tego typu działanie, mówi się, że generują efekty uboczne. Jest to z reguły sytuacja niepożądana.

Dodatkową pułapką w błędnym kodzie, może być też fakt, że deklarujemy nową stałą newArray, komunikując chęć stworzenia kopi tablicy array.

W JavaScript odwoływanie do tablic odbywa się przez referencję, czyli przez adres, pod którym tablica została zapisana w pamięci RAM.

const newArray = array nie tworzy więc kopi tablicy, a jedynie alias (nową nazwę), wskazując na tą samą tablicę z pamięci.

Aby naprawić przykładowy kod, możemy użyć np. metody concat(), która nie generuje efektów ubocznych i zwraca nową tablicę.

Po takiej zamianie, fruits i favFruits zalogują do konsoli właściwe elementy z dwóch różnych tablic.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugCode.html b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugCode.html index 741e93e61..174d60631 100644 --- a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugCode.html +++ b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function addToArray(item, array) {
const newArray = array
newArray.push(item)

return newArray
}

const fruits = ["apple", "orange"]
const favFruits = addToArray("banana", fruits)

console.log({ fruits, favFruits })
- - + + \ No newline at end of file diff --git a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugDescription.html b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugDescription.html index b21ca01da..3e3409bee 100644 --- a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugDescription.html +++ b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Chcemy stworzyć funkcję, która doda nowy element do tablicy, a następnie zwróci tą tablicę.

Array.prototype.push() domyślnie zwraca długość tablicy tj. łączną liczbę elementów.

W addToArray() wyraźnie zwracamy więc zaktualizowaną tablicę.

Jakie elementy zostaną zalogowane do konsoli jako fruits i favFruits po użyciu funkcji addToArray()?

- - + + \ No newline at end of file diff --git a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/links.html b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/links.html index 5850275b5..bdc040669 100644 --- a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/links.html +++ b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionCode.html b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionCode.html index cb642bd72..89d2e3a45 100644 --- a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionCode.html +++ b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
function addToArray(item, array) {
const newArray = array.concat(item)

return newArray
}

const fruits = ["apple", "orange"]
const favFruits = addToArray("banana", fruits)

console.log({ fruits, favFruits })
- - + + \ No newline at end of file diff --git a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionDescription.html b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionDescription.html index c27003634..c0ac7063f 100644 --- a/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionDescription.html +++ b/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem okazuje się, że fruits i favFruits zwrócą ten sam zbiór 3 elementów ["apple", "orange", "banana"].

Powodem takiego efektu jest charakter działania metody push(). Mutuje ona tablicę, tj. zmienia jej oryginalną zawartość.

O funkcjach/metodach, które mają tego typu działanie, mówi się, że generują efekty uboczne. Jest to z reguły sytuacja niepożądana.

Dodatkową pułapką w błędnym kodzie, może być też fakt, że deklarujemy nową stałą newArray, komunikując chęć stworzenia kopi tablicy array.

W JavaScript odwoływanie do tablic odbywa się przez referencję, czyli przez adres, pod którym tablica została zapisana w pamięci RAM.

const newArray = array nie tworzy więc kopi tablicy, a jedynie alias (nową nazwę), wskazując na tą samą tablicę z pamięci.

Aby naprawić przykładowy kod, możemy użyć np. metody concat(), która nie generuje efektów ubocznych i zwraca nową tablicę.

Po takiej zamianie, fruits i favFruits zalogują do konsoli właściwe elementy z dwóch różnych tablic.

- - + + \ No newline at end of file diff --git a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f.html b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f.html index 2f38e4c70..cba4df045 100644 --- a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f.html +++ b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #002

🪲 Znajdź buga

const now = new Date()
const future = new Date(
now.setHours(now.getHours() + 6)
)

console.log({ now, future })

Jaka data zostanie zalogowana do konsoli dla now, a jaka dla future?

🧪 Rozwiązanie

const now = new Date()
const future = new Date()

future.setHours(now.getHours() + 6)

console.log({ now, future })

W błędnym przykładzie zarówno now jak i future zalogują do konsoli tą samą datę, odległą o 6 godzin w przyszłość.

Metoda setHours() mutuje obiekt daty, na którym zostaje wykonana.

Aby rozwiązać ten problem, dla stałej future musimy utworzyć nowy obiekt daty, który następnie modyfikujemy metodą setHours().

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugCode.html b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugCode.html index f05a546b1..082bd51bb 100644 --- a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugCode.html +++ b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const now = new Date()
const future = new Date(
now.setHours(now.getHours() + 6)
)

console.log({ now, future })
- - + + \ No newline at end of file diff --git a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugDescription.html b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugDescription.html index c3151812f..137c993e4 100644 --- a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugDescription.html +++ b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jaka data zostanie zalogowana do konsoli dla now, a jaka dla future?

- - + + \ No newline at end of file diff --git a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/links.html b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/links.html index 6fdab66f9..0b3135562 100644 --- a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/links.html +++ b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionCode.html b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionCode.html index e9a4a27af..6aa8073f5 100644 --- a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionCode.html +++ b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const now = new Date()
const future = new Date()

future.setHours(now.getHours() + 6)

console.log({ now, future })
- - + + \ No newline at end of file diff --git a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionDescription.html b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionDescription.html index 64cd7be3b..7f503b028 100644 --- a/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionDescription.html +++ b/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W błędnym przykładzie zarówno now jak i future zalogują do konsoli tą samą datę, odległą o 6 godzin w przyszłość.

Metoda setHours() mutuje obiekt daty, na którym zostaje wykonana.

Aby rozwiązać ten problem, dla stałej future musimy utworzyć nowy obiekt daty, który następnie modyfikujemy metodą setHours().

- - + + \ No newline at end of file diff --git a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0.html b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0.html index 4092b4b44..55e1c7171 100644 --- a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0.html +++ b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #019

🪲 Znajdź buga

const Car = {
color: "red",
drive() {
console.log(this)
},
}

Car.drive()

const driveMyCar = Car.drive

driveMyCar()

Co zostanie zalogowane do konsoli jako efekt wywołania Car.drive() oraz driveMyCar()?

🧪 Rozwiązanie

const Car = {
color: "red",
drive() {
console.log(this)
},
}

Car.drive()

const driveMyCar = Car.drive.bind(Car)

driveMyCar()

W przykładzie z błędem, Car.drive() zaloguje do konsoli obiekt Car, natomiast driveMyCar() zaloguje globalny obiekt lub undefined w zależności od tego, czy aktywny będzie tryb ścisły (strict mode).

Przypisując do stałej driveMyCar metodę Car.drive, przypisujemy ją w globalnym kontekście.

Wywołanie this będzie więc odnosiło się do globalnego obiektu (Window w przeglądarkach, global w Node.js), lub zwróci undefined jeśli będziemy w trybie ścisłym.

Jeśli chcemy to naprawić, musimy wyraźnie powiązać przypisywaną metodę drive z innym kontekstem, w którym chcemy aby została wykonana. Takie powiązanie uzyskamy korzystając z metody bind().

W naszym przypadku chcemy powiązać tą metodę z obiektem Car.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugCode.html b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugCode.html index 9ab61493d..40e47f1bb 100644 --- a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugCode.html +++ b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const Car = {
color: "red",
drive() {
console.log(this)
},
}

Car.drive()

const driveMyCar = Car.drive

driveMyCar()
- - + + \ No newline at end of file diff --git a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugDescription.html b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugDescription.html index fc9c1c451..10a45d2ac 100644 --- a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugDescription.html +++ b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Co zostanie zalogowane do konsoli jako efekt wywołania Car.drive() oraz driveMyCar()?

- - + + \ No newline at end of file diff --git a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/links.html b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/links.html index e50c4a771..243d8b4e8 100644 --- a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/links.html +++ b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionCode.html b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionCode.html index c1e98bb28..4e27bd346 100644 --- a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionCode.html +++ b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const Car = {
color: "red",
drive() {
console.log(this)
},
}

Car.drive()

const driveMyCar = Car.drive.bind(Car)

driveMyCar()
- - + + \ No newline at end of file diff --git a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionDescription.html b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionDescription.html index 0e085d202..7086c459c 100644 --- a/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionDescription.html +++ b/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

W przykładzie z błędem, Car.drive() zaloguje do konsoli obiekt Car, natomiast driveMyCar() zaloguje globalny obiekt lub undefined w zależności od tego, czy aktywny będzie tryb ścisły (strict mode).

Przypisując do stałej driveMyCar metodę Car.drive, przypisujemy ją w globalnym kontekście.

Wywołanie this będzie więc odnosiło się do globalnego obiektu (Window w przeglądarkach, global w Node.js), lub zwróci undefined jeśli będziemy w trybie ścisłym.

Jeśli chcemy to naprawić, musimy wyraźnie powiązać przypisywaną metodę drive z innym kontekstem, w którym chcemy aby została wykonana. Takie powiązanie uzyskamy korzystając z metody bind().

W naszym przypadku chcemy powiązać tą metodę z obiektem Car.

- - + + \ No newline at end of file diff --git a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf.html b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf.html index 1a5471378..e93af36f4 100644 --- a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf.html +++ b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #039

🪲 Znajdź buga

console.log(false || true)
console.log(true || false)
console.log("false" || "true")

console.log(undefined || null)
console.log(null || undefined)

console.log(NaN || undefined)
console.log(undefined || NaN)

console.log("" || "not empty")
console.log(" " || "not empty")

console.log(0 || "not zero")
console.log("0" || "not zero")

console.log([] || "not empty array")

console.log(false || " " || alert("!"))

Jakie wartości zostaną zalogowane do konsoli?

Czy funkcja alert() zostanie wywołana?

🧪 Rozwiązanie

console.log(false || true) // true
console.log(true || false) // true
console.log("false" || "true") // "false"

console.log(undefined || null) // null
console.log(null || undefined) // undefined

console.log(NaN || undefined) // undefined
console.log(undefined || NaN) // NaN

console.log("" || "not empty") // "not empty"
console.log(" " || "not empty") // " "

console.log(0 || "not zero") // "not zero"
console.log("0" || "not zero") // "0"

console.log([] || "not empty array") // "[]"

console.log(false || " " || alert("!")) // " "

Operator logiczny LUB || porównuje wartości logiczne. Gdy operandy nie są wartościami logicznymi (true/false), sprowadza je do wartości logicznej. Następnie zwraca pierwszy z nich, jeśli jest on prawdziwy, lub drugi, w każdym innym przypadku.

Konwersja do wartości logicznej odbywa się za pomocą działania algorytmu, który odpowiada za konwersję w funkcji Boolean() lub podczas użycia podwójnego wykrzyknika !!.

Jeśli pierwszy operand po konwersji do wartości logicznej, jest wartością prawdziwą (true), to jest on zwracany w pierwotnej postaci.

Przykładowo, "to nie fałsz" || true zwróci "to nie fałsz"

Warto pamiętać, że występuje tutaj efekt zwarcia tzn. gdy pierwszy operand jest prawdziwy, drugi operand jest już całkowicie pomijany. Gdyby zamiast true pojawiło się np. wywołanie funkcji, to funkcja nie zostałaby w żaden sposób wywołana.

Jeśli natomiast pierwszy operand || jest wartością fałszywą, to automatycznie zwracany zostaje operand drugi. Nie ma znaczenia, czy jest on prawdziwy czy fałszywy.

Można w ten sposób stworzyć np. łańcuch wielu operatorów ||, który zwróci operand w momencie gdy napotka na taki, który jest prawdziwy, jednocześnie zatrzymując wykonywanie dalszej części kodu z łańcucha.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugCode.html b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugCode.html index 0e446c3f9..d29f833e7 100644 --- a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugCode.html +++ b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(false || true)
console.log(true || false)
console.log("false" || "true")

console.log(undefined || null)
console.log(null || undefined)

console.log(NaN || undefined)
console.log(undefined || NaN)

console.log("" || "not empty")
console.log(" " || "not empty")

console.log(0 || "not zero")
console.log("0" || "not zero")

console.log([] || "not empty array")

console.log(false || " " || alert("!"))
- - + + \ No newline at end of file diff --git a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugDescription.html b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugDescription.html index 7b9aa7084..d6fb277a3 100644 --- a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugDescription.html +++ b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Jakie wartości zostaną zalogowane do konsoli?

Czy funkcja alert() zostanie wywołana?

- - + + \ No newline at end of file diff --git a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/links.html b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/links.html index 1ea130c9d..3e0aa2842 100644 --- a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/links.html +++ b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionCode.html b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionCode.html index 9b8251228..29885467b 100644 --- a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionCode.html +++ b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
console.log(false || true) // true
console.log(true || false) // true
console.log("false" || "true") // "false"

console.log(undefined || null) // null
console.log(null || undefined) // undefined

console.log(NaN || undefined) // undefined
console.log(undefined || NaN) // NaN

console.log("" || "not empty") // "not empty"
console.log(" " || "not empty") // " "

console.log(0 || "not zero") // "not zero"
console.log("0" || "not zero") // "0"

console.log([] || "not empty array") // "[]"

console.log(false || " " || alert("!")) // " "
- - + + \ No newline at end of file diff --git a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionDescription.html b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionDescription.html index 615310ad5..a3c35bcf1 100644 --- a/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionDescription.html +++ b/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Operator logiczny LUB || porównuje wartości logiczne. Gdy operandy nie są wartościami logicznymi (true/false), sprowadza je do wartości logicznej. Następnie zwraca pierwszy z nich, jeśli jest on prawdziwy, lub drugi, w każdym innym przypadku.

Konwersja do wartości logicznej odbywa się za pomocą działania algorytmu, który odpowiada za konwersję w funkcji Boolean() lub podczas użycia podwójnego wykrzyknika !!.

Jeśli pierwszy operand po konwersji do wartości logicznej, jest wartością prawdziwą (true), to jest on zwracany w pierwotnej postaci.

Przykładowo, "to nie fałsz" || true zwróci "to nie fałsz"

Warto pamiętać, że występuje tutaj efekt zwarcia tzn. gdy pierwszy operand jest prawdziwy, drugi operand jest już całkowicie pomijany. Gdyby zamiast true pojawiło się np. wywołanie funkcji, to funkcja nie zostałaby w żaden sposób wywołana.

Jeśli natomiast pierwszy operand || jest wartością fałszywą, to automatycznie zwracany zostaje operand drugi. Nie ma znaczenia, czy jest on prawdziwy czy fałszywy.

Można w ten sposób stworzyć np. łańcuch wielu operatorów ||, który zwróci operand w momencie gdy napotka na taki, który jest prawdziwy, jednocześnie zatrzymując wykonywanie dalszej części kodu z łańcucha.

- - + + \ No newline at end of file diff --git a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef.html b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef.html index 2cf22a4d6..2916b1761 100644 --- a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef.html +++ b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef.html @@ -7,14 +7,14 @@ - - + +
Przejdź do głównej zawartości

Bug #047

🪲 Znajdź buga

const func1 = (args) => console.log(args)
const func2 = (...args) => console.log(args)

// 1:
func1`first ${"val"}, second ${["a", "b"]}`

// 2:
func1(`first ${"val"}, second ${["a", "b"]}`)

// 3:
func2`first ${"val"}, second ${["a", "b"]}`

// 4:
func2(`first ${"val"}, second ${["a", "b"]}`)

Czy potrafisz wskazać, w którym przykładzie (1, 2, 3, 4) zostanie zwrócona wartość first val, second a,b ?

🧪 Rozwiązanie

const func1 = (args) => console.log(args)
const func2 = (...args) => console.log(args)

// 1: ["first ", ", second ", ""]
func1`first ${"val"}, second ${["a", "b"]}`

// 2: first val, second a,b
func1(`first ${"val"}, second ${["a", "b"]}`)

// 3: [Array[3], "val", Array[2]]
func2`first ${"val"}, second ${["a", "b"]}`

// 4: ["first val, second a,b"]
func2(`first ${"val"}, second ${["a", "b"]}`)

first val, second a,b zostanie zwrócone w wywołaniu nr 2.

Przykłady 1 i 3 to wywołania tzw. etykietowanego szablonu (tagged template). Używając grawisów (backtick `) możemy wywoływać funkcje przekazując literał szablonu (template literal) jako argument.

Funkcja ma wtedy do dyspozycji goły tekst jako pierwszy parametr, a pod kolejnymi, dynamicznie generowanymi parametrami, dostępne są ewaluacje notacji ${} przekazane wewnątrz literału szablonu.

W przykładzie 1, w funkcji pod parametrem args mamy dostępną tylko tablicę z gołymi fragmentami tekstu z literału szablonu. Brakuje w niej elementów wywoływanych za pomocą notacji ${}, które dostępne są pod kolejnymi, dynamicznie tworzonymi parametrami funkcji.

Przykład 3 różni się od 1 tylko użyciem parametru reszty dla argumentów funkcji. Tym samym, wszystkie dynamicznie wygenerowane parametry dostępne są w tablicy args.

Pierwszy element tablicy zawiera 3 wartości gołego tekstu, te same, które zostały zalogowane w przykładzie 1.

Kolejne elementy tablicy to wartości wywołane wewnątrz notacji ${}, czyli val oraz tablica z 2 elementami ["a", "b"].

Przykład 2 zwraca nam ciąg znaków przekazany jako argument, już po ewaluacji kodu umieszczonego w notacjach ${}.

Przykład 4 robi to samo co 2, jednak z uwagi na użycie parametru reszty ...args, zwrócona zostaje tablica przekazanych argumentów. Przekazany został tylko 1 argument w postaci literału szablonu, więc tablica zawiera tylko 1 element, ciąg znaków, taki jak ten z przykładu nr 2.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js

- - + + \ No newline at end of file diff --git a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugCode.html b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugCode.html index 0d08d0aab..2c0a98f69 100644 --- a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugCode.html +++ b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const func1 = (args) => console.log(args)
const func2 = (...args) => console.log(args)

// 1:
func1`first ${"val"}, second ${["a", "b"]}`

// 2:
func1(`first ${"val"}, second ${["a", "b"]}`)

// 3:
func2`first ${"val"}, second ${["a", "b"]}`

// 4:
func2(`first ${"val"}, second ${["a", "b"]}`)
- - + + \ No newline at end of file diff --git a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugDescription.html b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugDescription.html index 8db1f1085..e21dc6de2 100644 --- a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugDescription.html +++ b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Czy potrafisz wskazać, w którym przykładzie (1, 2, 3, 4) zostanie zwrócona wartość first val, second a,b ?

- - + + \ No newline at end of file diff --git a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/links.html b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/links.html index fbda75695..38f808869 100644 --- a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/links.html +++ b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/links.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
- - + + \ No newline at end of file diff --git a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionCode.html b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionCode.html index fdb32d0b0..eb12258b2 100644 --- a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionCode.html +++ b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionCode.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości
const func1 = (args) => console.log(args)
const func2 = (...args) => console.log(args)

// 1: ["first ", ", second ", ""]
func1`first ${"val"}, second ${["a", "b"]}`

// 2: first val, second a,b
func1(`first ${"val"}, second ${["a", "b"]}`)

// 3: [Array[3], "val", Array[2]]
func2`first ${"val"}, second ${["a", "b"]}`

// 4: ["first val, second a,b"]
func2(`first ${"val"}, second ${["a", "b"]}`)
- - + + \ No newline at end of file diff --git a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionDescription.html b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionDescription.html index 7d2b0466c..a2f9eca84 100644 --- a/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionDescription.html +++ b/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionDescription.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

first val, second a,b zostanie zwrócone w wywołaniu nr 2.

Przykłady 1 i 3 to wywołania tzw. etykietowanego szablonu (tagged template). Używając grawisów (backtick `) możemy wywoływać funkcje przekazując literał szablonu (template literal) jako argument.

Funkcja ma wtedy do dyspozycji goły tekst jako pierwszy parametr, a pod kolejnymi, dynamicznie generowanymi parametrami, dostępne są ewaluacje notacji ${} przekazane wewnątrz literału szablonu.

W przykładzie 1, w funkcji pod parametrem args mamy dostępną tylko tablicę z gołymi fragmentami tekstu z literału szablonu. Brakuje w niej elementów wywoływanych za pomocą notacji ${}, które dostępne są pod kolejnymi, dynamicznie tworzonymi parametrami funkcji.

Przykład 3 różni się od 1 tylko użyciem parametru reszty dla argumentów funkcji. Tym samym, wszystkie dynamicznie wygenerowane parametry dostępne są w tablicy args.

Pierwszy element tablicy zawiera 3 wartości gołego tekstu, te same, które zostały zalogowane w przykładzie 1.

Kolejne elementy tablicy to wartości wywołane wewnątrz notacji ${}, czyli val oraz tablica z 2 elementami ["a", "b"].

Przykład 2 zwraca nam ciąg znaków przekazany jako argument, już po ewaluacji kodu umieszczonego w notacjach ${}.

Przykład 4 robi to samo co 2, jednak z uwagi na użycie parametru reszty ...args, zwrócona zostaje tablica przekazanych argumentów. Przekazany został tylko 1 argument w postaci literału szablonu, więc tablica zawiera tylko 1 element, ciąg znaków, taki jak ten z przykładu nr 2.

- - + + \ No newline at end of file diff --git a/100-bugow-js/sukces.html b/100-bugow-js/sukces.html index 381256fc7..32918c051 100644 --- a/100-bugow-js/sukces.html +++ b/100-bugow-js/sukces.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Pomyślnie potwierdziłeś zapis 🎉

Pierwszy bug został właśnie wysłany do Twojej skrzynki. Sprawdź go.

Kolejne wiadomości będziesz otrzymywał w odstępach co 24 godziny.

Sprawdź też kanał na YouTube, jeśli nie chcesz przegapić nowych materiałów.

- - + + \ No newline at end of file diff --git a/100-bugow-js/wymagane-potwierdzenie.html b/100-bugow-js/wymagane-potwierdzenie.html index ca8167b9b..07f66f5a4 100644 --- a/100-bugow-js/wymagane-potwierdzenie.html +++ b/100-bugow-js/wymagane-potwierdzenie.html @@ -7,15 +7,15 @@ - - + +
Przejdź do głównej zawartości

Sprawdź swoją skrzynkę 📩

Aby zacząć otrzymywać wiadomości z bugami,
kliknij w właśnie wysłany do Ciebie link aktywacyjny.

Sprawdź inne foldery w poczcie np. Oferty lub Spam.

Jeśli wiadomość tam trafiła, przenieś ją do głównego folderu,
aby kolejne wiadomości trafiały do Ciebie bez problemu.

- - + + \ No newline at end of file diff --git a/100-bugow-js/wypisanie.html b/100-bugow-js/wypisanie.html index 50e5a46b5..fd060a0b6 100644 --- a/100-bugow-js/wypisanie.html +++ b/100-bugow-js/wypisanie.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Zostałeś wypisany

Nie będziesz już otrzymywać wiadomości z seri 100 Bugów JS.

- - + + \ No newline at end of file diff --git a/404.html b/404.html index f88bd0505..f817f85d0 100644 --- a/404.html +++ b/404.html @@ -7,13 +7,13 @@ - - + +
Przejdź do głównej zawartości

Strona nie została znaleziona

Nie mogliśmy znaleźć strony której szukasz.

Proszę skontaktuj się z właścielem strony, z której link doprowadził Cię tutaj i poinformuj go, że link jest nieprawidłowy.

- - + + \ No newline at end of file diff --git a/assets/js/095e46f4.5aeb9e93.js b/assets/js/095e46f4.5aeb9e93.js deleted file mode 100644 index 25318ac86..000000000 --- a/assets/js/095e46f4.5aeb9e93.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[58178],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var i=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function n(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=i.createContext({}),s=function(e){var t=i.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):n(n({},t),e)),r},p=function(e){var t=s(e.components);return i.createElement(c.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(r),d=a,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||o;return r?i.createElement(f,n(n({ref:t},p),{},{components:r})):i.createElement(f,n({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,n=new Array(o);n[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:a,n[1]=l;for(var s=2;s{r.d(t,{Z:()=>a});var i=r(67294);function a(e){let{videoId:t}=e;return i.createElement(i.Fragment,null,i.createElement("div",{className:"video"},i.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},28959:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>c,toc:()=>p});var i=r(87462),a=(r(67294),r(3905)),o=r(31313);const n={tags:["UX","UI"]},l="\u25b6\ufe0f Tablica inspiracji",c={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji",title:"\u25b6\ufe0f Tablica inspiracji",description:"Linki \ud83c\uddfa\ud83c\uddf8",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/210-tablica-inspiracji.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/210-tablica-inspiracji.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:210,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Zapoznanie z interfejsem",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem"},next:{title:"\u25b6\ufe0f Persona uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika"}},s={},p=[{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki-",level:2}],u={toc:p},m="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(m,(0,i.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"\ufe0f-tablica-inspiracji"},"\u25b6\ufe0f Tablica inspiracji"),(0,a.kt)(o.Z,{videoId:"630859103",mdxType:"VimeoPlayer"}),(0,a.kt)("h2",{id:"linki-"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://search.brave.com/search?q=online+grocery+store"},"online grocery store - Brave Search")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://shop.aldi.us/"},"Aldi Powered by Instacart")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.amazon.com/alm/storefront?almBrandId=QW1hem9uIEZyZXNo"},"Amazon Fresh Groceries")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.tesco.com/groceries/"},"Tesco Groceries - Online food shopping - Grocery delivery - Tesco Groceries")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.lidl.com/"},"Grocery Store | Quality Products Low Prices | Lidl US")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.instacart.com/"},"Instacart | Grocery Delivery or Pickup from Local Stores Near You")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://glovoapp.com/"},"Glovo: you order, we get it!")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://groca.myshopify.com/"},"Groca")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://elementorpress.com/templatekit-pro/layout17/"},"Groxi Store \u2013 Just another WordPress site")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://preview.themeforest.net/item/foodsto-grocery-food-store-hbs-scss-html-theme/full_screen_preview/34064653"},"Foodsto | Grocery & Food Store Hbs, Scss & Html Theme Preview - ThemeForest")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://livedemo00.template-help.com/wt_prod-21756/"},"Grocmart")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://demo.templatemonster.com/demo/197492.html"},"Live preview for FoodGo - Food & Grocery Local Business Delivery WordPress Theme #197492"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/095e46f4.bf6f824c.js b/assets/js/095e46f4.bf6f824c.js new file mode 100644 index 000000000..4c3ba3380 --- /dev/null +++ b/assets/js/095e46f4.bf6f824c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[58178],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var i=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function n(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=i.createContext({}),s=function(e){var t=i.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):n(n({},t),e)),r},p=function(e){var t=s(e.components);return i.createElement(c.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(r),d=a,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||o;return r?i.createElement(f,n(n({ref:t},p),{},{components:r})):i.createElement(f,n({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,n=new Array(o);n[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:a,n[1]=l;for(var s=2;s{r.d(t,{Z:()=>a});var i=r(67294);function a(e){let{videoId:t}=e;return i.createElement(i.Fragment,null,i.createElement("div",{className:"video"},i.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},28959:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>n,metadata:()=>c,toc:()=>p});var i=r(87462),a=(r(67294),r(3905)),o=r(31313);const n={tags:["UX","UI"]},l="\u25b6\ufe0f Tablica inspiracji",c={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji",title:"\u25b6\ufe0f Tablica inspiracji",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/210-tablica-inspiracji.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/210-tablica-inspiracji.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:210,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Zapoznanie z interfejsem",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem"},next:{title:"\u25b6\ufe0f Persona uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika"}},s={},p=[{value:"Linki",id:"linki",level:2}],u={toc:p},m="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(m,(0,i.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"\ufe0f-tablica-inspiracji"},"\u25b6\ufe0f Tablica inspiracji"),(0,a.kt)(o.Z,{videoId:"630859103",mdxType:"VimeoPlayer"}),(0,a.kt)("h2",{id:"linki"},"Linki"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://search.brave.com/search?q=online+grocery+store"},"online grocery store - Brave Search")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://shop.aldi.us/"},"Aldi Powered by Instacart")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.amazon.com/alm/storefront?almBrandId=QW1hem9uIEZyZXNo"},"Amazon Fresh Groceries")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.tesco.com/groceries/"},"Tesco Groceries - Online food shopping - Grocery delivery - Tesco Groceries")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.lidl.com/"},"Grocery Store | Quality Products Low Prices | Lidl US")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.instacart.com/"},"Instacart | Grocery Delivery or Pickup from Local Stores Near You")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://glovoapp.com/"},"Glovo: you order, we get it!")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://groca.myshopify.com/"},"Groca")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://elementorpress.com/templatekit-pro/layout17/"},"Groxi Store \u2013 Just another WordPress site")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://preview.themeforest.net/item/foodsto-grocery-food-store-hbs-scss-html-theme/full_screen_preview/34064653"},"Foodsto | Grocery & Food Store Hbs, Scss & Html Theme Preview - ThemeForest")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://livedemo00.template-help.com/wt_prod-21756/"},"Grocmart")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://demo.templatemonster.com/demo/197492.html"},"Live preview for FoodGo - Food & Grocery Local Business Delivery WordPress Theme #197492"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/11aee4d5.c40984c7.js b/assets/js/11aee4d5.c40984c7.js deleted file mode 100644 index 5b92a0f11..000000000 --- a/assets/js/11aee4d5.c40984c7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[86813],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>w});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=s(r),k=i,w=p["".concat(l,".").concat(k)]||p[k]||d[k]||o;return r?n.createElement(w,a(a({ref:t},u),{},{components:r})):n.createElement(w,a({ref:t},u))}));function w(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=k;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[p]="string"==typeof e?e:i,a[1]=c;for(var s=2;s{r.d(t,{Z:()=>i});var n=r(67294);function i(e){let{videoId:t}=e;return n.createElement(n.Fragment,null,n.createElement("div",{className:"video"},n.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},64340:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>k,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var n=r(87462),i=(r(67294),r(3905)),o=r(31313);const a={tags:["UX","UI"]},c="\u25b6\ufe0f Tre\u015bci tekstowe",l={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe",title:"\u25b6\ufe0f Tre\u015bci tekstowe",description:"- \ud83d\udcbe Pliki projektu",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/410-tresci-tekstowe.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/410-tresci-tekstowe.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:410,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Prototyp",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp"},next:{title:"\u25b6\ufe0f Tre\u015bci graficzne",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne"}},s={},u=[{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki-",level:2}],p={toc:u},d="wrapper";function k(e){let{components:t,...a}=e;return(0,i.kt)(d,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"\ufe0f-tre\u015bci-tekstowe"},"\u25b6\ufe0f Tre\u015bci tekstowe"),(0,i.kt)(o.Z,{videoId:"638806115",mdxType:"VimeoPlayer"}),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{target:"_blank",href:r(56445).Z},"\ud83d\udcbe Pliki projektu"))),(0,i.kt)("h2",{id:"linki-"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Content_designer"},"Content designer - Wikipedia")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.fiverr.com/categories/writing-translation/website-content"},"Website Content Writers | Web Content Writing Services | Fiverr"))))}k.isMDXComponent=!0},56445:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/files/text-content-00d2903b562807d59adc45fa5df5a598.zip"}}]); \ No newline at end of file diff --git a/assets/js/11aee4d5.d7c1eefc.js b/assets/js/11aee4d5.d7c1eefc.js new file mode 100644 index 000000000..f1727b047 --- /dev/null +++ b/assets/js/11aee4d5.d7c1eefc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[86813],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>w});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},l=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),p=u(r),k=i,w=p["".concat(s,".").concat(k)]||p[k]||d[k]||o;return r?n.createElement(w,a(a({ref:t},l),{},{components:r})):n.createElement(w,a({ref:t},l))}));function w(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=k;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[p]="string"==typeof e?e:i,a[1]=c;for(var u=2;u{r.d(t,{Z:()=>i});var n=r(67294);function i(e){let{videoId:t}=e;return n.createElement(n.Fragment,null,n.createElement("div",{className:"video"},n.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},64340:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>k,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(87462),i=(r(67294),r(3905)),o=r(31313);const a={tags:["UX","UI"]},c="\u25b6\ufe0f Tre\u015bci tekstowe",s={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe",title:"\u25b6\ufe0f Tre\u015bci tekstowe",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/410-tresci-tekstowe.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/410-tresci-tekstowe.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:410,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Prototyp",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp"},next:{title:"\u25b6\ufe0f Tre\u015bci graficzne",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne"}},u={},l=[{value:"Linki",id:"linki",level:2}],p={toc:l},d="wrapper";function k(e){let{components:t,...a}=e;return(0,i.kt)(d,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"\ufe0f-tre\u015bci-tekstowe"},"\u25b6\ufe0f Tre\u015bci tekstowe"),(0,i.kt)(o.Z,{videoId:"638806115",mdxType:"VimeoPlayer"}),(0,i.kt)("h2",{id:"linki"},"Linki"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{target:"_blank",href:r(56445).Z},"\ud83d\udcbe Pliki projektu")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Content_designer"},"Content designer - Wikipedia")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.fiverr.com/categories/writing-translation/website-content"},"Website Content Writers | Web Content Writing Services | Fiverr"))))}k.isMDXComponent=!0},56445:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/files/text-content-00d2903b562807d59adc45fa5df5a598.zip"}}]); \ No newline at end of file diff --git a/assets/js/156f22fa.74bcfb89.js b/assets/js/156f22fa.4d6acf4c.js similarity index 61% rename from assets/js/156f22fa.74bcfb89.js rename to assets/js/156f22fa.4d6acf4c.js index 4f4c4a9b3..49f60f452 100644 --- a/assets/js/156f22fa.74bcfb89.js +++ b/assets/js/156f22fa.4d6acf4c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[97261],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>k});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var u=n.createContext({}),c=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(u.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,u=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),p=c(r),f=i,k=p["".concat(u,".").concat(f)]||p[f]||d[f]||o;return r?n.createElement(k,a(a({ref:t},s),{},{components:r})):n.createElement(k,a({ref:t},s))}));function k(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=f;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l[p]="string"==typeof e?e:i,a[1]=l;for(var c=2;c{r.d(t,{Z:()=>i});var n=r(67294);function i(e){let{videoId:t}=e;return n.createElement(n.Fragment,null,n.createElement("div",{className:"video"},n.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},21055:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>f,frontMatter:()=>a,metadata:()=>u,toc:()=>s});var n=r(87462),i=(r(67294),r(3905)),o=r(31313);const a={tags:["UX","UI"]},l="\u25b6\ufe0f Detale",u={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale",title:"\u25b6\ufe0f Detale",description:"- \ud83d\udcbe Pliki projektu",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/526-detale.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/526-detale.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:526,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Rozmieszczenie grafik",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik"},next:{title:"\u25b6\ufe0f Projektowanie vs kodowanie",permalink:"/ux-ui/projektowanie-vs-kodowanie"}},c={},s=[{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki-",level:2}],p={toc:s},d="wrapper";function f(e){let{components:t,...a}=e;return(0,i.kt)(d,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"\ufe0f-detale"},"\u25b6\ufe0f Detale"),(0,i.kt)(o.Z,{videoId:"643220172",mdxType:"VimeoPlayer"}),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{target:"_blank",href:r(87531).Z},"\ud83d\udcbe Pliki projektu"))),(0,i.kt)("h2",{id:"linki-"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.freepik.com/search?dates=any&format=search&page=1&query=abstract%20shapes&sort=popular&type=vector"},"Abstract Shapes Vectors, Photos and PSD files | Free Download"))))}f.isMDXComponent=!0},87531:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/files/oncery-figma-feb896992849bf7ad564bcdc2ab877f3.zip"}}]); \ No newline at end of file +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[97261],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>k});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var u=n.createContext({}),c=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(u.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,u=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),p=c(r),f=i,k=p["".concat(u,".").concat(f)]||p[f]||d[f]||o;return r?n.createElement(k,a(a({ref:t},s),{},{components:r})):n.createElement(k,a({ref:t},s))}));function k(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=f;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l[p]="string"==typeof e?e:i,a[1]=l;for(var c=2;c{r.d(t,{Z:()=>i});var n=r(67294);function i(e){let{videoId:t}=e;return n.createElement(n.Fragment,null,n.createElement("div",{className:"video"},n.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},21055:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>f,frontMatter:()=>a,metadata:()=>u,toc:()=>s});var n=r(87462),i=(r(67294),r(3905)),o=r(31313);const a={tags:["UX","UI"]},l="\u25b6\ufe0f Detale",u={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale",title:"\u25b6\ufe0f Detale",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/526-detale.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/526-detale.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:526,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Rozmieszczenie grafik",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik"},next:{title:"\u25b6\ufe0f Projektowanie vs kodowanie",permalink:"/ux-ui/projektowanie-vs-kodowanie"}},c={},s=[{value:"Linki",id:"linki",level:2}],p={toc:s},d="wrapper";function f(e){let{components:t,...a}=e;return(0,i.kt)(d,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"\ufe0f-detale"},"\u25b6\ufe0f Detale"),(0,i.kt)(o.Z,{videoId:"643220172",mdxType:"VimeoPlayer"}),(0,i.kt)("h2",{id:"linki"},"Linki"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{target:"_blank",href:r(87531).Z},"\ud83d\udcbe Pliki projektu")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.freepik.com/search?dates=any&format=search&page=1&query=abstract%20shapes&sort=popular&type=vector"},"Abstract Shapes Vectors, Photos and PSD files | Free Download"))))}f.isMDXComponent=!0},87531:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/files/oncery-figma-feb896992849bf7ad564bcdc2ab877f3.zip"}}]); \ No newline at end of file diff --git a/assets/js/2fa374a5.38699639.js b/assets/js/2fa374a5.6a48127a.js similarity index 65% rename from assets/js/2fa374a5.38699639.js rename to assets/js/2fa374a5.6a48127a.js index fd24a967e..88c8d911e 100644 --- a/assets/js/2fa374a5.38699639.js +++ b/assets/js/2fa374a5.6a48127a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[71617],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>f});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",y={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=c(n),d=i,f=p["".concat(l,".").concat(d)]||p[d]||y[d]||o;return n?r.createElement(f,a(a({ref:t},s),{},{components:n})):r.createElement(f,a({ref:t},s))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=d;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u[p]="string"==typeof e?e:i,a[1]=u;for(var c=2;c{n.d(t,{Z:()=>i});var r=n(67294);function i(e){let{videoId:t}=e;return r.createElement(r.Fragment,null,r.createElement("div",{className:"video"},r.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},76673:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var r=n(87462),i=(n(67294),n(3905)),o=n(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Korzystanie z Figmy",l={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy",title:"\u25b6\ufe0f Korzystanie z Figmy",description:"Linki \ud83c\uddfa\ud83c\uddf8",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/110-korzystanie-z-figmy.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/110-korzystanie-z-figmy.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:110,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Wprowadzenie",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie"},next:{title:"\u25b6\ufe0f Zapoznanie z interfejsem",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem"}},c={},s=[{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki-",level:2}],p={toc:s},y="wrapper";function d(e){let{components:t,...n}=e;return(0,i.kt)(y,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"\ufe0f-korzystanie-z-figmy"},"\u25b6\ufe0f Korzystanie z Figmy"),(0,i.kt)(o.Z,{videoId:"600186654",mdxType:"VimeoPlayer"}),(0,i.kt)("h2",{id:"linki-"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://www.figma.com/"},"Figma: The Collaborative Interface Design Tool")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[71617],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>f});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",y={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=c(n),d=i,f=p["".concat(l,".").concat(d)]||p[d]||y[d]||o;return n?r.createElement(f,a(a({ref:t},s),{},{components:n})):r.createElement(f,a({ref:t},s))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=d;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u[p]="string"==typeof e?e:i,a[1]=u;for(var c=2;c{n.d(t,{Z:()=>i});var r=n(67294);function i(e){let{videoId:t}=e;return r.createElement(r.Fragment,null,r.createElement("div",{className:"video"},r.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},76673:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var r=n(87462),i=(n(67294),n(3905)),o=n(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Korzystanie z Figmy",l={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy",title:"\u25b6\ufe0f Korzystanie z Figmy",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/110-korzystanie-z-figmy.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/110-korzystanie-z-figmy.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:110,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Wprowadzenie",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie"},next:{title:"\u25b6\ufe0f Zapoznanie z interfejsem",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem"}},c={},s=[{value:"Linki",id:"linki",level:2}],p={toc:s},y="wrapper";function d(e){let{components:t,...n}=e;return(0,i.kt)(y,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"\ufe0f-korzystanie-z-figmy"},"\u25b6\ufe0f Korzystanie z Figmy"),(0,i.kt)(o.Z,{videoId:"600186654",mdxType:"VimeoPlayer"}),(0,i.kt)("h2",{id:"linki"},"Linki"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.figma.com/"},"Figma: The Collaborative Interface Design Tool"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/35121e98.38641288.js b/assets/js/35121e98.1777a417.js similarity index 62% rename from assets/js/35121e98.38641288.js rename to assets/js/35121e98.1777a417.js index 82f8d1d82..6bb3e8fc0 100644 --- a/assets/js/35121e98.38641288.js +++ b/assets/js/35121e98.1777a417.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[49501],{3905:(e,n,r)=>{r.d(n,{Zo:()=>p,kt:()=>d});var t=r(67294);function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function i(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function o(e){for(var n=1;n=0||(a[r]=e[r]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=t.createContext({}),c=function(e){var n=t.useContext(l),r=n;return e&&(r="function"==typeof e?e(n):o(o({},n),e)),r},p=function(e){var n=c(e.components);return t.createElement(l.Provider,{value:n},e.children)},s="mdxType",y={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},k=t.forwardRef((function(e,n){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=u(e,["components","mdxType","originalType","parentName"]),s=c(r),k=a,d=s["".concat(l,".").concat(k)]||s[k]||y[k]||i;return r?t.createElement(d,o(o({ref:n},p),{},{components:r})):t.createElement(d,o({ref:n},p))}));function d(e,n){var r=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=k;var u={};for(var l in n)hasOwnProperty.call(n,l)&&(u[l]=n[l]);u.originalType=e,u[s]="string"==typeof e?e:a,o[1]=u;for(var c=2;c{r.d(n,{Z:()=>a});var t=r(67294);function a(e){let{videoId:n}=e;return t.createElement(t.Fragment,null,t.createElement("div",{className:"video"},t.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${n}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},77271:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>u,default:()=>k,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var t=r(87462),a=(r(67294),r(3905)),i=r(31313);const o={tags:["UX","UI"]},u="\u25b6\ufe0f Nagranie z webinaru (UX)",l={unversionedId:"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux",id:"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux",title:"\u25b6\ufe0f Nagranie z webinaru (UX)",description:"Linki \ud83c\uddf5\ud83c\uddf1",source:"@site/docs/020-ux-ui/020-praktyczne-szkolenie-projektowania-ux-ui/010-nagranie-z-webinaru-ux.mdx",sourceDirName:"020-ux-ui/020-praktyczne-szkolenie-projektowania-ux-ui",slug:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux",permalink:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/020-praktyczne-szkolenie-projektowania-ux-ui/010-nagranie-z-webinaru-ux.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:10,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"Praktyczne szkolenie projektowania UX/UI",permalink:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/"},next:{title:"\u25b6\ufe0f Materia\u0142 uzupe\u0142niaj\u0105cy (UI)",permalink:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui"}},c={},p=[{value:"Linki \ud83c\uddf5\ud83c\uddf1",id:"linki-",level:2}],s={toc:p},y="wrapper";function k(e){let{components:n,...o}=e;return(0,a.kt)(y,(0,t.Z)({},s,o,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"\ufe0f-nagranie-z-webinaru-ux"},"\u25b6\ufe0f Nagranie z webinaru (UX)"),(0,a.kt)(i.Z,{videoId:"730122188",mdxType:"VimeoPlayer"}),(0,a.kt)("h2",{id:"linki-"},"Linki \ud83c\uddf5\ud83c\uddf1"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{target:"_blank",href:r(33174).Z},"\ud83d\udcc4 Slajdy prezentacji w PDF\u2019ie"))))}k.isMDXComponent=!0},33174:(e,n,r)=>{r.d(n,{Z:()=>t});const t=r.p+"assets/files/Prezentacja-szkolenie-UX_UI-31bace69049e5363a7e13810cb8a0dcf.pdf"}}]); \ No newline at end of file +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[49501],{3905:(e,n,r)=>{r.d(n,{Zo:()=>p,kt:()=>d});var t=r(67294);function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function i(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function o(e){for(var n=1;n=0||(a[r]=e[r]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=t.createContext({}),c=function(e){var n=t.useContext(l),r=n;return e&&(r="function"==typeof e?e(n):o(o({},n),e)),r},p=function(e){var n=c(e.components);return t.createElement(l.Provider,{value:n},e.children)},s="mdxType",y={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},k=t.forwardRef((function(e,n){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=u(e,["components","mdxType","originalType","parentName"]),s=c(r),k=a,d=s["".concat(l,".").concat(k)]||s[k]||y[k]||i;return r?t.createElement(d,o(o({ref:n},p),{},{components:r})):t.createElement(d,o({ref:n},p))}));function d(e,n){var r=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=k;var u={};for(var l in n)hasOwnProperty.call(n,l)&&(u[l]=n[l]);u.originalType=e,u[s]="string"==typeof e?e:a,o[1]=u;for(var c=2;c{r.d(n,{Z:()=>a});var t=r(67294);function a(e){let{videoId:n}=e;return t.createElement(t.Fragment,null,t.createElement("div",{className:"video"},t.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${n}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},77271:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>u,default:()=>k,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var t=r(87462),a=(r(67294),r(3905)),i=r(31313);const o={tags:["UX","UI"]},u="\u25b6\ufe0f Nagranie z webinaru (UX)",l={unversionedId:"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux",id:"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux",title:"\u25b6\ufe0f Nagranie z webinaru (UX)",description:"Linki",source:"@site/docs/020-ux-ui/020-praktyczne-szkolenie-projektowania-ux-ui/010-nagranie-z-webinaru-ux.mdx",sourceDirName:"020-ux-ui/020-praktyczne-szkolenie-projektowania-ux-ui",slug:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux",permalink:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/020-praktyczne-szkolenie-projektowania-ux-ui/010-nagranie-z-webinaru-ux.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:10,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"Praktyczne szkolenie projektowania UX/UI",permalink:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/"},next:{title:"\u25b6\ufe0f Materia\u0142 uzupe\u0142niaj\u0105cy (UI)",permalink:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui"}},c={},p=[{value:"Linki",id:"linki",level:2}],s={toc:p},y="wrapper";function k(e){let{components:n,...o}=e;return(0,a.kt)(y,(0,t.Z)({},s,o,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"\ufe0f-nagranie-z-webinaru-ux"},"\u25b6\ufe0f Nagranie z webinaru (UX)"),(0,a.kt)(i.Z,{videoId:"730122188",mdxType:"VimeoPlayer"}),(0,a.kt)("h2",{id:"linki"},"Linki"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{target:"_blank",href:r(33174).Z},"\ud83d\udcc4 Slajdy prezentacji w PDF\u2019ie"))))}k.isMDXComponent=!0},33174:(e,n,r)=>{r.d(n,{Z:()=>t});const t=r.p+"assets/files/Prezentacja-szkolenie-UX_UI-31bace69049e5363a7e13810cb8a0dcf.pdf"}}]); \ No newline at end of file diff --git a/assets/js/3bd3cc6c.0f107830.js b/assets/js/3bd3cc6c.0f107830.js new file mode 100644 index 000000000..c8aed792c --- /dev/null +++ b/assets/js/3bd3cc6c.0f107830.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[45622],{3905:(e,t,i)=>{i.d(t,{Zo:()=>k,kt:()=>m});var r=i(67294);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function a(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function o(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var l=r.createContext({}),u=function(e){var t=r.useContext(l),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},k=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var i=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,k=p(e,["components","mdxType","originalType","parentName"]),c=u(i),d=n,m=c["".concat(l,".").concat(d)]||c[d]||s[d]||a;return i?r.createElement(m,o(o({ref:t},k),{},{components:i})):r.createElement(m,o({ref:t},k))}));function m(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=i.length,o=new Array(a);o[0]=d;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[c]="string"==typeof e?e:n,o[1]=p;for(var u=2;u{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>s,frontMatter:()=>a,metadata:()=>p,toc:()=>u});var r=i(87462),n=(i(67294),i(3905));const a={tags:["UX","UI"]},o="Projektowanie UX/UI",p={unversionedId:"ux-ui/projektowanie-ux-ui",id:"ux-ui/projektowanie-ux-ui",title:"Projektowanie UX/UI",description:"Linki",source:"@site/docs/020-ux-ui/000-projektowanie-ux-ui.mdx",sourceDirName:"020-ux-ui",slug:"/ux-ui/projektowanie-ux-ui",permalink:"/ux-ui/projektowanie-ux-ui",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/000-projektowanie-ux-ui.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:0,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",next:{title:"Projektowanie interfejsu i do\u015bwiadcze\u0144 u\u017cytkownik\xf3w",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/"}},l={},u=[{value:"Linki",id:"linki",level:2}],k={toc:u},c="wrapper";function s(e){let{components:t,...i}=e;return(0,n.kt)(c,(0,r.Z)({},k,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"projektowanie-uxui"},"Projektowanie UX/UI"),(0,n.kt)("h2",{id:"linki"},"Linki"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Kategoria:Interakcja_cz%C5%82owieka_z_komputerem"},"Kategoria:Interakcja cz\u0142owieka z komputerem \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Kategoria:Interakcja_programu_z_u%C5%BCytkownikiem"},"Kategoria:Interakcja programu z u\u017cytkownikiem \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Interfejs_u%C5%BCytkownika"},"Interfejs u\u017cytkownika \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Projektowanie_interakcji"},"Projektowanie interakcji \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/User_experience"},"User experience \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/U%C5%BCyteczno%C5%9B%C4%87_(informatyka)"},"U\u017cyteczno\u015b\u0107 (informatyka) \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Architektura_informacji"},"Architektura informacji \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Testy_u%C5%BCyteczno%C5%9Bci"},"Testy u\u017cyteczno\u015bci \u2013 Wikipedia, wolna encyklopedia"))))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3bd3cc6c.c9a35244.js b/assets/js/3bd3cc6c.c9a35244.js deleted file mode 100644 index 4e3f25e96..000000000 --- a/assets/js/3bd3cc6c.c9a35244.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[45622],{3905:(e,t,i)=>{i.d(t,{Zo:()=>k,kt:()=>d});var r=i(67294);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function a(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function o(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var p=r.createContext({}),u=function(e){var t=r.useContext(p),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},k=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},c="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var i=e.components,n=e.mdxType,a=e.originalType,p=e.parentName,k=l(e,["components","mdxType","originalType","parentName"]),c=u(i),m=n,d=c["".concat(p,".").concat(m)]||c[m]||s[m]||a;return i?r.createElement(d,o(o({ref:t},k),{},{components:i})):r.createElement(d,o({ref:t},k))}));function d(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=i.length,o=new Array(a);o[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:n,o[1]=l;for(var u=2;u{i.r(t),i.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>s,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var r=i(87462),n=(i(67294),i(3905));const a={tags:["UX","UI"]},o="Projektowanie UX/UI",l={unversionedId:"ux-ui/projektowanie-ux-ui",id:"ux-ui/projektowanie-ux-ui",title:"Projektowanie UX/UI",description:"Linki \ud83c\uddf5\ud83c\uddf1",source:"@site/docs/020-ux-ui/000-projektowanie-ux-ui.mdx",sourceDirName:"020-ux-ui",slug:"/ux-ui/projektowanie-ux-ui",permalink:"/ux-ui/projektowanie-ux-ui",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/000-projektowanie-ux-ui.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:0,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",next:{title:"Projektowanie interfejsu i do\u015bwiadcze\u0144 u\u017cytkownik\xf3w",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/"}},p={},u=[{value:"Linki \ud83c\uddf5\ud83c\uddf1",id:"linki-",level:2},{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki--1",level:2}],k={toc:u},c="wrapper";function s(e){let{components:t,...i}=e;return(0,n.kt)(c,(0,r.Z)({},k,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"projektowanie-uxui"},"Projektowanie UX/UI"),(0,n.kt)("h2",{id:"linki-"},"Linki \ud83c\uddf5\ud83c\uddf1"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Kategoria:Interakcja_cz%C5%82owieka_z_komputerem"},"Kategoria:Interakcja cz\u0142owieka z komputerem \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Kategoria:Interakcja_programu_z_u%C5%BCytkownikiem"},"Kategoria:Interakcja programu z u\u017cytkownikiem \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Interfejs_u%C5%BCytkownika"},"Interfejs u\u017cytkownika \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Projektowanie_interakcji"},"Projektowanie interakcji \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/User_experience"},"User experience \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/U%C5%BCyteczno%C5%9B%C4%87_(informatyka)"},"U\u017cyteczno\u015b\u0107 (informatyka) \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Architektura_informacji"},"Architektura informacji \u2013 Wikipedia, wolna encyklopedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Testy_u%C5%BCyteczno%C5%9Bci"},"Testy u\u017cyteczno\u015bci \u2013 Wikipedia, wolna encyklopedia"))),(0,n.kt)("h2",{id:"linki--1"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://uxtools.co/challenges/"},"UX Design Challenges | UX Tools")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.webdesignmuseum.org/"},"Web Design Museum"))))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4618a95d.64bed50c.js b/assets/js/4618a95d.fd0794d7.js similarity index 55% rename from assets/js/4618a95d.64bed50c.js rename to assets/js/4618a95d.fd0794d7.js index f1ad91d23..ac81496bf 100644 --- a/assets/js/4618a95d.64bed50c.js +++ b/assets/js/4618a95d.fd0794d7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[81932],{3905:(e,t,i)=>{i.d(t,{Zo:()=>s,kt:()=>d});var r=i(67294);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function a(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var u=r.createContext({}),p=function(e){var t=r.useContext(u),i=t;return e&&(i="function"==typeof e?e(t):a(a({},t),e)),i},s=function(e){var t=p(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",w={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var i=e.components,n=e.mdxType,o=e.originalType,u=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),c=p(i),m=n,d=c["".concat(u,".").concat(m)]||c[m]||w[m]||o;return i?r.createElement(d,a(a({ref:t},s),{},{components:i})):r.createElement(d,a({ref:t},s))}));function d(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=i.length,a=new Array(o);a[0]=m;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l[c]="string"==typeof e?e:n,a[1]=l;for(var p=2;p{i.d(t,{Z:()=>n});var r=i(67294);function n(e){let{videoId:t}=e;return r.createElement(r.Fragment,null,r.createElement("div",{className:"video"},r.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},87709:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>u,toc:()=>s});var r=i(87462),n=(i(67294),i(3905)),o=i(31313);const a={tags:["UX","UI"]},l="\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu",u={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu",title:"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu",description:"Linki \ud83c\uddfa\ud83c\uddf8",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/331-przygotowanie-elementow-szkieletu.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/331-przygotowanie-elementow-szkieletu.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:331,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Mapa strony",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony"},next:{title:"\u25b6\ufe0f Projektowanie szkieletu",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu"}},p={},s=[{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki-",level:2}],c={toc:s},w="wrapper";function m(e){let{components:t,...i}=e;return(0,n.kt)(w,(0,r.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"\ufe0f-przygotowanie-elemento\u0301w-szkieletu"},"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu"),(0,n.kt)(o.Z,{videoId:"630861816",mdxType:"VimeoPlayer"}),(0,n.kt)("h2",{id:"linki-"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Website_wireframe"},"Website wireframe - Wikipedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Grid_(graphic_design)"},"Grid (graphic design) - Wikipedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gs.statcounter.com/screen-resolution-stats/desktop/worldwide"},"Desktop Screen Resolution Stats Worldwide | Statcounter Global Stats")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.figma.com/community/plugin/829089184334973766/Property-Randomizer"},"Property Randomizer\xa0| Figma Community")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.figma.com/community/plugin/755300155155835622/AutoLayout"},"AutoLayout \u2013 Figma"))))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[81932],{3905:(e,t,i)=>{i.d(t,{Zo:()=>s,kt:()=>d});var r=i(67294);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function a(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var u=r.createContext({}),p=function(e){var t=r.useContext(u),i=t;return e&&(i="function"==typeof e?e(t):a(a({},t),e)),i},s=function(e){var t=p(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",w={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var i=e.components,n=e.mdxType,o=e.originalType,u=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),c=p(i),m=n,d=c["".concat(u,".").concat(m)]||c[m]||w[m]||o;return i?r.createElement(d,a(a({ref:t},s),{},{components:i})):r.createElement(d,a({ref:t},s))}));function d(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=i.length,a=new Array(o);a[0]=m;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l[c]="string"==typeof e?e:n,a[1]=l;for(var p=2;p{i.d(t,{Z:()=>n});var r=i(67294);function n(e){let{videoId:t}=e;return r.createElement(r.Fragment,null,r.createElement("div",{className:"video"},r.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},87709:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>u,toc:()=>s});var r=i(87462),n=(i(67294),i(3905)),o=i(31313);const a={tags:["UX","UI"]},l="\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu",u={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu",title:"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/331-przygotowanie-elementow-szkieletu.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/331-przygotowanie-elementow-szkieletu.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:331,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Mapa strony",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony"},next:{title:"\u25b6\ufe0f Projektowanie szkieletu",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu"}},p={},s=[{value:"Linki",id:"linki",level:2}],c={toc:s},w="wrapper";function m(e){let{components:t,...i}=e;return(0,n.kt)(w,(0,r.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"\ufe0f-przygotowanie-elemento\u0301w-szkieletu"},"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu"),(0,n.kt)(o.Z,{videoId:"630861816",mdxType:"VimeoPlayer"}),(0,n.kt)("h2",{id:"linki"},"Linki"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Website_wireframe"},"Website wireframe - Wikipedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Grid_(graphic_design)"},"Grid (graphic design) - Wikipedia")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gs.statcounter.com/screen-resolution-stats/desktop/worldwide"},"Desktop Screen Resolution Stats Worldwide | Statcounter Global Stats")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.figma.com/community/plugin/829089184334973766/Property-Randomizer"},"Property Randomizer\xa0| Figma Community")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.figma.com/community/plugin/755300155155835622/AutoLayout"},"AutoLayout \u2013 Figma"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4ee797cf.7d5db699.js b/assets/js/4ee797cf.7d5db699.js deleted file mode 100644 index 8100df6c7..000000000 --- a/assets/js/4ee797cf.7d5db699.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[97207],{8378:i=>{i.exports=JSON.parse('{"label":"UX","permalink":"/tags/ux","allTagsPath":"/tags","count":28,"items":[{"id":"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin","title":"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?","description":"Linki \ud83c\uddf5\ud83c\uddf1","permalink":"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale","title":"\u25b6\ufe0f Detale","description":"- \ud83d\udcbe Pliki projektu","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji","title":"\u25b6\ufe0f Dostosowanie ilustracji","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow","title":"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w","description":"Linki \ud83c\uddf5\ud83c\uddf1","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi","title":"\u25b6\ufe0f Formularz doste\u0328pnos\u0301ci us\u0142ugi","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia","title":"\u25b6\ufe0f G\u0142e\u0328bia","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki","title":"\u25b6\ufe0f Identyfikacja marki","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy","title":"\u25b6\ufe0f Korzystanie z Figmy","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony","title":"\u25b6\ufe0f Mapa strony","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony"},{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui","title":"\u25b6\ufe0f Materia\u0142 uzupe\u0142niaj\u0105cy (UI)","description":"","permalink":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui"},{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux","title":"\u25b6\ufe0f Nagranie z webinaru (UX)","description":"Linki \ud83c\uddf5\ud83c\uddf1","permalink":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika","title":"\u25b6\ufe0f Persona uz\u0307ytkownika","description":"- \ud83d\udcbe Pliki projektu","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu","title":"\u25b6\ufe0f Projektowanie szkieletu","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu"},{"id":"ux-ui/projektowanie-vs-kodowanie","title":"\u25b6\ufe0f Projektowanie vs kodowanie","description":"","permalink":"/ux-ui/projektowanie-vs-kodowanie"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp","title":"\u25b6\ufe0f Prototyp","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp"},{"id":"ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls","title":"\u25b6\ufe0f Przeprojektowanie interfejsu strony internetowej GLS","description":"","permalink":"/ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu","title":"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik","title":"\u25b6\ufe0f Rozmieszczenie grafik","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik"},{"id":"ux-ui/roznice-miedzy-ux-ui","title":"\u25b6\ufe0f R\xf3\u017cnice mi\u0119dzy UX a UI","description":"","permalink":"/ux-ui/roznice-miedzy-ux-ui"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika","title":"\u25b6\ufe0f Scenariusze uz\u0307ytkownika","description":"- \ud83d\udcbe Pliki projektu","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika","title":"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika","description":"Linki \ud83c\uddf5\ud83c\uddf1","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji","title":"\u25b6\ufe0f Tablica inspiracji","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne","title":"\u25b6\ufe0f Tre\u015bci graficzne","description":"- \ud83d\udcbe Pliki projektu","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe","title":"\u25b6\ufe0f Tre\u015bci tekstowe","description":"- \ud83d\udcbe Pliki projektu","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe"},{"id":"podstawy/praca-w-it/ux-ui-designer","title":"\u25b6\ufe0f UX/UI Designer","description":"Linki","permalink":"/podstawy/praca-w-it/ux-ui-designer"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie","title":"\u25b6\ufe0f Wprowadzenie","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem","title":"\u25b6\ufe0f Zapoznanie z interfejsem","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem"},{"id":"ux-ui/projektowanie-ux-ui","title":"Projektowanie UX/UI","description":"Linki \ud83c\uddf5\ud83c\uddf1","permalink":"/ux-ui/projektowanie-ux-ui"}]}')}}]); \ No newline at end of file diff --git a/assets/js/4ee797cf.c811aaab.js b/assets/js/4ee797cf.c811aaab.js new file mode 100644 index 000000000..36fae6191 --- /dev/null +++ b/assets/js/4ee797cf.c811aaab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[97207],{8378:i=>{i.exports=JSON.parse('{"label":"UX","permalink":"/tags/ux","allTagsPath":"/tags","count":28,"items":[{"id":"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin","title":"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?","description":"Linki","permalink":"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale","title":"\u25b6\ufe0f Detale","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji","title":"\u25b6\ufe0f Dostosowanie ilustracji","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow","title":"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi","title":"\u25b6\ufe0f Formularz doste\u0328pnos\u0301ci us\u0142ugi","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia","title":"\u25b6\ufe0f G\u0142e\u0328bia","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki","title":"\u25b6\ufe0f Identyfikacja marki","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy","title":"\u25b6\ufe0f Korzystanie z Figmy","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony","title":"\u25b6\ufe0f Mapa strony","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony"},{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui","title":"\u25b6\ufe0f Materia\u0142 uzupe\u0142niaj\u0105cy (UI)","description":"","permalink":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui"},{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux","title":"\u25b6\ufe0f Nagranie z webinaru (UX)","description":"Linki","permalink":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika","title":"\u25b6\ufe0f Persona uz\u0307ytkownika","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu","title":"\u25b6\ufe0f Projektowanie szkieletu","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu"},{"id":"ux-ui/projektowanie-vs-kodowanie","title":"\u25b6\ufe0f Projektowanie vs kodowanie","description":"","permalink":"/ux-ui/projektowanie-vs-kodowanie"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp","title":"\u25b6\ufe0f Prototyp","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp"},{"id":"ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls","title":"\u25b6\ufe0f Przeprojektowanie interfejsu strony internetowej GLS","description":"","permalink":"/ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu","title":"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik","title":"\u25b6\ufe0f Rozmieszczenie grafik","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik"},{"id":"ux-ui/roznice-miedzy-ux-ui","title":"\u25b6\ufe0f R\xf3\u017cnice mi\u0119dzy UX a UI","description":"","permalink":"/ux-ui/roznice-miedzy-ux-ui"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika","title":"\u25b6\ufe0f Scenariusze uz\u0307ytkownika","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika","title":"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji","title":"\u25b6\ufe0f Tablica inspiracji","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne","title":"\u25b6\ufe0f Tre\u015bci graficzne","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe","title":"\u25b6\ufe0f Tre\u015bci tekstowe","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe"},{"id":"podstawy/praca-w-it/ux-ui-designer","title":"\u25b6\ufe0f UX/UI Designer","description":"Linki","permalink":"/podstawy/praca-w-it/ux-ui-designer"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie","title":"\u25b6\ufe0f Wprowadzenie","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem","title":"\u25b6\ufe0f Zapoznanie z interfejsem","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem"},{"id":"ux-ui/projektowanie-ux-ui","title":"Projektowanie UX/UI","description":"Linki","permalink":"/ux-ui/projektowanie-ux-ui"}]}')}}]); \ No newline at end of file diff --git a/assets/js/5299bf45.058222c2.js b/assets/js/5299bf45.058222c2.js new file mode 100644 index 000000000..dc6c14a96 --- /dev/null +++ b/assets/js/5299bf45.058222c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[65956],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>w});var i=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=i.createContext({}),l=function(e){var t=i.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},s=function(e){var t=l(e.components);return i.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},k=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=l(n),k=r,w=p["".concat(c,".").concat(k)]||p[k]||d[k]||a;return n?i.createElement(w,o(o({ref:t},s),{},{components:n})):i.createElement(w,o({ref:t},s))}));function w(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=k;var u={};for(var c in t)hasOwnProperty.call(t,c)&&(u[c]=t[c]);u.originalType=e,u[p]="string"==typeof e?e:r,o[1]=u;for(var l=2;l{n.d(t,{Z:()=>r});var i=n(67294);function r(e){let{videoId:t}=e;return i.createElement(i.Fragment,null,i.createElement("div",{className:"video"},i.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},53549:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>k,frontMatter:()=>o,metadata:()=>c,toc:()=>s});var i=n(87462),r=(n(67294),n(3905)),a=n(31313);const o={tags:["UX","UI"]},u="\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika",c={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika",title:"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/310-schemat-dzialan-uzytkownika.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/310-schemat-dzialan-uzytkownika.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:310,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Scenariusze uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika"},next:{title:"\u25b6\ufe0f Mapa strony",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony"}},l={},s=[{value:"Linki",id:"linki",level:2}],p={toc:s},d="wrapper";function k(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,i.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"\ufe0f-schemat-dzia\u0142an\u0301-uz\u0307ytkownika"},"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika"),(0,r.kt)(a.Z,{videoId:"630860803",mdxType:"VimeoPlayer"}),(0,r.kt)("h2",{id:"linki"},"Linki"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Schemat_blokowy"},"Schemat blokowy \u2013 Wikipedia, wolna encyklopedia"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5299bf45.2babb11b.js b/assets/js/5299bf45.2babb11b.js deleted file mode 100644 index 2facec0e8..000000000 --- a/assets/js/5299bf45.2babb11b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[65956],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>w});var i=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=i.createContext({}),c=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return i.createElement(l.Provider,{value:t},e.children)},s="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,p=u(e,["components","mdxType","originalType","parentName"]),s=c(n),d=r,w=s["".concat(l,".").concat(d)]||s[d]||k[d]||a;return n?i.createElement(w,o(o({ref:t},p),{},{components:n})):i.createElement(w,o({ref:t},p))}));function w(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=d;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u[s]="string"==typeof e?e:r,o[1]=u;for(var c=2;c{n.d(t,{Z:()=>r});var i=n(67294);function r(e){let{videoId:t}=e;return i.createElement(i.Fragment,null,i.createElement("div",{className:"video"},i.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},53549:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var i=n(87462),r=(n(67294),n(3905)),a=n(31313);const o={tags:["UX","UI"]},u="\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika",l={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika",title:"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika",description:"Linki \ud83c\uddf5\ud83c\uddf1",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/310-schemat-dzialan-uzytkownika.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/310-schemat-dzialan-uzytkownika.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:310,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Scenariusze uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika"},next:{title:"\u25b6\ufe0f Mapa strony",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony"}},c={},p=[{value:"Linki \ud83c\uddf5\ud83c\uddf1",id:"linki-",level:2},{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki--1",level:2}],s={toc:p},k="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(k,(0,i.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"\ufe0f-schemat-dzia\u0142an\u0301-uz\u0307ytkownika"},"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika"),(0,r.kt)(a.Z,{videoId:"630860803",mdxType:"VimeoPlayer"}),(0,r.kt)("h2",{id:"linki-"},"Linki \ud83c\uddf5\ud83c\uddf1"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Schemat_blokowy"},"Schemat blokowy \u2013 Wikipedia, wolna encyklopedia"))),(0,r.kt)("h2",{id:"linki--1"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Flowchart"},"Flowchart - Wikipedia"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7b98acb0.8579954b.js b/assets/js/7b98acb0.8579954b.js new file mode 100644 index 000000000..b7d813648 --- /dev/null +++ b/assets/js/7b98acb0.8579954b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[94648],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var i=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=i.createContext({}),c=function(e){var t=i.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(r),d=n,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return r?i.createElement(f,o(o({ref:t},p),{},{components:r})):i.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,o=new Array(a);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:n,o[1]=l;for(var c=2;c{r.d(t,{Z:()=>n});var i=r(67294);function n(e){let{videoId:t}=e;return i.createElement(i.Fragment,null,i.createElement("div",{className:"video"},i.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},23247:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var i=r(87462),n=(r(67294),r(3905)),a=r(31313);const o={tags:["UX","UI"]},l="\u25b6\ufe0f Identyfikacja marki",s={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki",title:"\u25b6\ufe0f Identyfikacja marki",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/510-identyfikacja-marki.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/510-identyfikacja-marki.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:510,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Tre\u015bci graficzne",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne"},next:{title:"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow"}},c={},p=[{value:"Linki",id:"linki",level:2}],u={toc:p},m="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(m,(0,i.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"\ufe0f-identyfikacja-marki"},"\u25b6\ufe0f Identyfikacja marki"),(0,n.kt)(a.Z,{videoId:"639743833",mdxType:"VimeoPlayer"}),(0,n.kt)("h2",{id:"linki"},"Linki"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.fiverr.com/categories/graphics-design/brand-style-guides"},"Brand Style Guide Services | Hire Freelance Style Guide Expert | Fiverr")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://99designs.com/blog/tips/brand-identity/"},"What Is Brand Identity? And How to Develop a Great One.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://99designs.com/blog/tips/types-of-logos/"},"The 7 Types of Logos And How to Use Them - 99designs")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://namelix.com/"},"Business Name Generator - free AI-powered naming tool - Namelix")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://graphicriver.net/graphics-with-grocery-in-logo-templates"},"Grocery Logo Templates | GraphicRiver")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://fonts.google.com/"},"Browse Fonts - Google Fonts")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://fonts.google.com/specimen/Lato"},"Lato - Google Fonts")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://fonts.google.com/specimen/PT+Serif"},"PT Serif - Google Fonts")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://lipsum.com/"},"Lorem Ipsum - All the facts - Lipsum generator")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://coolors.co/palettes/trending"},"Trending Color Palettes - Coolors"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7b98acb0.b9fbae0b.js b/assets/js/7b98acb0.b9fbae0b.js deleted file mode 100644 index 777567d2f..000000000 --- a/assets/js/7b98acb0.b9fbae0b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[94648],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var i=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=i.createContext({}),c=function(e){var t=i.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(r),d=n,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return r?i.createElement(f,o(o({ref:t},p),{},{components:r})):i.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,o=new Array(a);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:n,o[1]=l;for(var c=2;c{r.d(t,{Z:()=>n});var i=r(67294);function n(e){let{videoId:t}=e;return i.createElement(i.Fragment,null,i.createElement("div",{className:"video"},i.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},23247:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var i=r(87462),n=(r(67294),r(3905)),a=r(31313);const o={tags:["UX","UI"]},l="\u25b6\ufe0f Identyfikacja marki",s={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki",title:"\u25b6\ufe0f Identyfikacja marki",description:"Linki \ud83c\uddfa\ud83c\uddf8",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/510-identyfikacja-marki.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/510-identyfikacja-marki.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:510,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Tre\u015bci graficzne",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne"},next:{title:"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow"}},c={},p=[{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki-",level:2}],u={toc:p},m="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(m,(0,i.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"\ufe0f-identyfikacja-marki"},"\u25b6\ufe0f Identyfikacja marki"),(0,n.kt)(a.Z,{videoId:"639743833",mdxType:"VimeoPlayer"}),(0,n.kt)("h2",{id:"linki-"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.fiverr.com/categories/graphics-design/brand-style-guides"},"Brand Style Guide Services | Hire Freelance Style Guide Expert | Fiverr")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://99designs.com/blog/tips/brand-identity/"},"What Is Brand Identity? And How to Develop a Great One.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://99designs.com/blog/tips/types-of-logos/"},"The 7 Types of Logos And How to Use Them - 99designs")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://namelix.com/"},"Business Name Generator - free AI-powered naming tool - Namelix")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://graphicriver.net/graphics-with-grocery-in-logo-templates"},"Grocery Logo Templates | GraphicRiver")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://fonts.google.com/"},"Browse Fonts - Google Fonts")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://fonts.google.com/specimen/Lato"},"Lato - Google Fonts")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://fonts.google.com/specimen/PT+Serif"},"PT Serif - Google Fonts")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://lipsum.com/"},"Lorem Ipsum - All the facts - Lipsum generator")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://coolors.co/palettes/trending"},"Trending Color Palettes - Coolors"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/84991166.883bffe2.js b/assets/js/84991166.883bffe2.js deleted file mode 100644 index ec91dcbab..000000000 --- a/assets/js/84991166.883bffe2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[33130],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>w});var n=i(67294);function r(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function a(e){for(var t=1;t=0||(r[i]=e[i]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var l=n.createContext({}),s=function(e){var t=n.useContext(l),i=t;return e&&(i="function"==typeof e?e(t):a(a({},t),e)),i},c=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},k="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var i=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),k=s(i),d=r,w=k["".concat(l,".").concat(d)]||k[d]||p[d]||o;return i?n.createElement(w,a(a({ref:t},c),{},{components:i})):n.createElement(w,a({ref:t},c))}));function w(e,t){var i=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=i.length,a=new Array(o);a[0]=d;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u[k]="string"==typeof e?e:r,a[1]=u;for(var s=2;s{i.d(t,{Z:()=>r});var n=i(67294);function r(e){let{videoId:t}=e;return n.createElement(n.Fragment,null,n.createElement("div",{className:"video"},n.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},52810:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>u,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=i(87462),r=(i(67294),i(3905)),o=i(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Scenariusze uz\u0307ytkownika",l={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika",title:"\u25b6\ufe0f Scenariusze uz\u0307ytkownika",description:"- \ud83d\udcbe Pliki projektu",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/230-scenariusze-uzytkownika.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/230-scenariusze-uzytkownika.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:230,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Persona uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika"},next:{title:"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika"}},s={},c=[{value:"Linki \ud83c\uddf5\ud83c\uddf1",id:"linki-",level:2},{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki--1",level:2}],k={toc:c},p="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(p,(0,n.Z)({},k,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"\ufe0f-scenariusze-uz\u0307ytkownika"},"\u25b6\ufe0f Scenariusze uz\u0307ytkownika"),(0,r.kt)(o.Z,{videoId:"630860651",mdxType:"VimeoPlayer"}),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{target:"_blank",href:i(3557).Z},"\ud83d\udcbe Pliki projektu"))),(0,r.kt)("h2",{id:"linki-"},"Linki \ud83c\uddf5\ud83c\uddf1"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Historyjka_u%C5%BCytkownika"},"Historyjka u\u017cytkownika \u2013 Wikipedia, wolna encyklopedia"))),(0,r.kt)("h2",{id:"linki--1"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/User_story"},"User story - Wikipedia"))))}d.isMDXComponent=!0},3557:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/files/user-stories-fe7d3c5567787157bddbb6c1c29a5ec1.zip"}}]); \ No newline at end of file diff --git a/assets/js/84991166.c5c96d02.js b/assets/js/84991166.c5c96d02.js new file mode 100644 index 000000000..f43e8aeb7 --- /dev/null +++ b/assets/js/84991166.c5c96d02.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[33130],{3905:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>w});var i=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function a(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=i.createContext({}),s=function(e){var t=i.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},l=function(e){var t=s(e.components);return i.createElement(c.Provider,{value:t},e.children)},k="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,l=u(e,["components","mdxType","originalType","parentName"]),k=s(n),d=r,w=k["".concat(c,".").concat(d)]||k[d]||p[d]||o;return n?i.createElement(w,a(a({ref:t},l),{},{components:n})):i.createElement(w,a({ref:t},l))}));function w(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,a=new Array(o);a[0]=d;var u={};for(var c in t)hasOwnProperty.call(t,c)&&(u[c]=t[c]);u.originalType=e,u[k]="string"==typeof e?e:r,a[1]=u;for(var s=2;s{n.d(t,{Z:()=>r});var i=n(67294);function r(e){let{videoId:t}=e;return i.createElement(i.Fragment,null,i.createElement("div",{className:"video"},i.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},52810:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>u,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var i=n(87462),r=(n(67294),n(3905)),o=n(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Scenariusze uz\u0307ytkownika",c={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika",title:"\u25b6\ufe0f Scenariusze uz\u0307ytkownika",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/230-scenariusze-uzytkownika.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/230-scenariusze-uzytkownika.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:230,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Persona uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika"},next:{title:"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika"}},s={},l=[{value:"Linki",id:"linki",level:2}],k={toc:l},p="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(p,(0,i.Z)({},k,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"\ufe0f-scenariusze-uz\u0307ytkownika"},"\u25b6\ufe0f Scenariusze uz\u0307ytkownika"),(0,r.kt)(o.Z,{videoId:"630860651",mdxType:"VimeoPlayer"}),(0,r.kt)("h2",{id:"linki"},"Linki"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{target:"_blank",href:n(3557).Z},"\ud83d\udcbe Pliki projektu")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Historyjka_u%C5%BCytkownika"},"Historyjka u\u017cytkownika \u2013 Wikipedia, wolna encyklopedia"))))}d.isMDXComponent=!0},3557:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/files/user-stories-fe7d3c5567787157bddbb6c1c29a5ec1.zip"}}]); \ No newline at end of file diff --git a/assets/js/8b1c1229.28ab392f.js b/assets/js/8b1c1229.28ab392f.js deleted file mode 100644 index 4a4596255..000000000 --- a/assets/js/8b1c1229.28ab392f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[29730],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>k});var i=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=i.createContext({}),u=function(e){var t=i.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},s=function(e){var t=u(e.components);return i.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),p=u(r),d=n,k=p["".concat(l,".").concat(d)]||p[d]||f[d]||a;return r?i.createElement(k,o(o({ref:t},s),{},{components:r})):i.createElement(k,o({ref:t},s))}));function k(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,o=new Array(a);o[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[p]="string"==typeof e?e:n,o[1]=c;for(var u=2;u{r.d(t,{Z:()=>n});var i=r(67294);function n(e){let{videoId:t}=e;return i.createElement(i.Fragment,null,i.createElement("div",{className:"video"},i.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},33583:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var i=r(87462),n=(r(67294),r(3905)),a=r(31313);const o={tags:["UX","UI"]},c="\u25b6\ufe0f Tre\u015bci graficzne",l={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne",title:"\u25b6\ufe0f Tre\u015bci graficzne",description:"- \ud83d\udcbe Pliki projektu",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/420-tresci-graficzne.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/420-tresci-graficzne.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:420,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Tre\u015bci tekstowe",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe"},next:{title:"\u25b6\ufe0f Identyfikacja marki",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki"}},u={},s=[{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki-",level:2}],p={toc:s},f="wrapper";function d(e){let{components:t,...o}=e;return(0,n.kt)(f,(0,i.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"\ufe0f-tre\u015bci-graficzne"},"\u25b6\ufe0f Tre\u015bci graficzne"),(0,n.kt)(a.Z,{videoId:"639221317",mdxType:"VimeoPlayer"}),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{target:"_blank",href:r(19857).Z},"\ud83d\udcbe Pliki projektu"))),(0,n.kt)("h2",{id:"linki-"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.freepik.com/"},"Freepik: Download Free Videos, Vectors, Photos, and PSD")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://storyset.com/"},"Storyset | Customize, animate and download illustration for free")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.figma.com/community/plugin/865232148477039928/Storyset-by-Freepik"},"Storyset by Freepik \u2013 Figma")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://search.brave.com/search?q=eps+to+svg"},"eps to svg - Brave Search"))))}d.isMDXComponent=!0},19857:(e,t,r)=>{r.d(t,{Z:()=>i});const i=r.p+"assets/files/graphic-content-f0c6a2cf24fac24765ea147bfb307b3c.zip"}}]); \ No newline at end of file diff --git a/assets/js/8b1c1229.bdbfd260.js b/assets/js/8b1c1229.bdbfd260.js new file mode 100644 index 000000000..c54d3a884 --- /dev/null +++ b/assets/js/8b1c1229.bdbfd260.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[29730],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var i=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=i.createContext({}),u=function(e){var t=i.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},s=function(e){var t=u(e.components);return i.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),p=u(r),d=n,m=p["".concat(l,".").concat(d)]||p[d]||f[d]||a;return r?i.createElement(m,o(o({ref:t},s),{},{components:r})):i.createElement(m,o({ref:t},s))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,o=new Array(a);o[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[p]="string"==typeof e?e:n,o[1]=c;for(var u=2;u{r.d(t,{Z:()=>n});var i=r(67294);function n(e){let{videoId:t}=e;return i.createElement(i.Fragment,null,i.createElement("div",{className:"video"},i.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},33583:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var i=r(87462),n=(r(67294),r(3905)),a=r(31313);const o={tags:["UX","UI"]},c="\u25b6\ufe0f Tre\u015bci graficzne",l={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne",title:"\u25b6\ufe0f Tre\u015bci graficzne",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/420-tresci-graficzne.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/420-tresci-graficzne.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:420,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Tre\u015bci tekstowe",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe"},next:{title:"\u25b6\ufe0f Identyfikacja marki",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki"}},u={},s=[{value:"Linki",id:"linki",level:2}],p={toc:s},f="wrapper";function d(e){let{components:t,...o}=e;return(0,n.kt)(f,(0,i.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"\ufe0f-tre\u015bci-graficzne"},"\u25b6\ufe0f Tre\u015bci graficzne"),(0,n.kt)(a.Z,{videoId:"639221317",mdxType:"VimeoPlayer"}),(0,n.kt)("h2",{id:"linki"},"Linki"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{target:"_blank",href:r(19857).Z},"\ud83d\udcbe Pliki projektu")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.freepik.com/"},"Freepik: Download Free Videos, Vectors, Photos, and PSD")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://storyset.com/"},"Storyset | Customize, animate and download illustration for free")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.figma.com/community/plugin/865232148477039928/Storyset-by-Freepik"},"Storyset by Freepik \u2013 Figma")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://search.brave.com/search?q=eps+to+svg"},"eps to svg - Brave Search"))))}d.isMDXComponent=!0},19857:(e,t,r)=>{r.d(t,{Z:()=>i});const i=r.p+"assets/files/graphic-content-f0c6a2cf24fac24765ea147bfb307b3c.zip"}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.ba798bfc.js b/assets/js/935f2afb.f8d74f66.js similarity index 90% rename from assets/js/935f2afb.ba798bfc.js rename to assets/js/935f2afb.f8d74f66.js index f5bfbac1c..7bde2c54d 100644 --- a/assets/js/935f2afb.ba798bfc.js +++ b/assets/js/935f2afb.f8d74f66.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[80053],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"basicsSidebar":[{"type":"link","label":"Informatyka","href":"/podstawy/informatyka/","docId":"podstawy/informatyka/index"},{"type":"category","label":"Sprz\u0119t komputerowy","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"System binarny","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Podstawy systemu binarnego","href":"/podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego","docId":"podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego"},{"type":"link","label":"\u25b6\ufe0f System binarny","href":"/podstawy/sprzet-komputerowy/system-binarny/system-binarny","docId":"podstawy/sprzet-komputerowy/system-binarny/system-binarny"}],"href":"/podstawy/sprzet-komputerowy/system-binarny/"}],"href":"/podstawy/sprzet-komputerowy/"},{"type":"link","label":"Warstwy abstrakcji","href":"/podstawy/warstwy-abstrakcji/","docId":"podstawy/warstwy-abstrakcji/index"},{"type":"link","label":"Aplikacje","href":"/podstawy/aplikacje/","docId":"podstawy/aplikacje/index"},{"type":"category","label":"Programowanie","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"API","href":"/podstawy/programowanie/api","docId":"podstawy/programowanie/api"},{"type":"link","label":"Typowanie statyczne i dynamiczne","href":"/podstawy/programowanie/typowanie-statyczne-i-dynamiczne","docId":"podstawy/programowanie/typowanie-statyczne-i-dynamiczne"},{"type":"link","label":"Paradygmaty programowania","href":"/podstawy/programowanie/paradygmaty-programowania","docId":"podstawy/programowanie/paradygmaty-programowania"},{"type":"link","label":"Algorytmy","href":"/podstawy/programowanie/algorytmy","docId":"podstawy/programowanie/algorytmy"},{"type":"link","label":"Struktury i bazy danych","href":"/podstawy/programowanie/struktury-i-bazy-danych","docId":"podstawy/programowanie/struktury-i-bazy-danych"},{"type":"link","label":"\u25b6\ufe0f Wzorce projektowe","href":"/podstawy/programowanie/wzorce-projektowe","docId":"podstawy/programowanie/wzorce-projektowe"},{"type":"link","label":"Wyra\u017cenia regularne","href":"/podstawy/programowanie/wyrazenia-regularne","docId":"podstawy/programowanie/wyrazenia-regularne"},{"type":"link","label":"\u25b6\ufe0f Frameworki i biblioteki","href":"/podstawy/programowanie/frameworki-i-biblioteki","docId":"podstawy/programowanie/frameworki-i-biblioteki"}],"href":"/podstawy/programowanie/"},{"type":"category","label":"Systemy operacyjne","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Linux","href":"/podstawy/systemy-operacyjne/linux","docId":"podstawy/systemy-operacyjne/linux"},{"type":"link","label":"macOS i iOS","href":"/podstawy/systemy-operacyjne/macos-i-ios","docId":"podstawy/systemy-operacyjne/macos-i-ios"},{"type":"link","label":"Windows","href":"/podstawy/systemy-operacyjne/windows","docId":"podstawy/systemy-operacyjne/windows"},{"type":"link","label":"Chrome OS","href":"/podstawy/systemy-operacyjne/chrome-os","docId":"podstawy/systemy-operacyjne/chrome-os"},{"type":"link","label":"FreeBSD","href":"/podstawy/systemy-operacyjne/free-bsd","docId":"podstawy/systemy-operacyjne/free-bsd"}],"href":"/podstawy/systemy-operacyjne/"},{"type":"category","label":"J\u0119zyki programowania","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Scratch","href":"/podstawy/jezyki-programowania/scratch","docId":"podstawy/jezyki-programowania/scratch"},{"type":"link","label":"C","href":"/podstawy/jezyki-programowania/c","docId":"podstawy/jezyki-programowania/c"},{"type":"link","label":"Python","href":"/podstawy/jezyki-programowania/python","docId":"podstawy/jezyki-programowania/python"},{"type":"link","label":"JavaScript","href":"/podstawy/jezyki-programowania/javascript","docId":"podstawy/jezyki-programowania/javascript"},{"type":"link","label":"PHP","href":"/podstawy/jezyki-programowania/php","docId":"podstawy/jezyki-programowania/php"}],"href":"/podstawy/jezyki-programowania/"},{"type":"category","label":"Kontrola wersji","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Inspekcja kodu","href":"/podstawy/kontrola-wersji/inspekcja-kodu","docId":"podstawy/kontrola-wersji/inspekcja-kodu"},{"type":"category","label":"Podstawy Gita","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Czym jest Git?","href":"/podstawy/kontrola-wersji/podstawy-gita/czym-jest-git","docId":"podstawy/kontrola-wersji/podstawy-gita/czym-jest-git"},{"type":"link","label":"\u25b6\ufe0f Instalacja","href":"/podstawy/kontrola-wersji/podstawy-gita/instalacja","docId":"podstawy/kontrola-wersji/podstawy-gita/instalacja"},{"type":"link","label":"\u25b6\ufe0f Podr\xf3\u017cowanie w czasie","href":"/podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie","docId":"podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie"},{"type":"link","label":"\u25b6\ufe0f Ga\u0142\u0119zie, \u0142\u0105czenie ga\u0142\u0119zi i rozwi\u0105zywanie konflikt\xf3w","href":"/podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow","docId":"podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow"},{"type":"link","label":"\u25b6\ufe0f Ignorowanie plik\xf3w i katalog\xf3w","href":"/podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow","docId":"podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow"},{"type":"link","label":"\u25b6\ufe0f 05. Tymczasowe przechowywanie zmian","href":"/podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian","docId":"podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian"},{"type":"link","label":"\u25b6\ufe0f Etykietowanie","href":"/podstawy/kontrola-wersji/podstawy-gita/etykietowanie","docId":"podstawy/kontrola-wersji/podstawy-gita/etykietowanie"},{"type":"link","label":"\u25b6\ufe0f Praca ze zdalnym repozytorium GitHub","href":"/podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github","docId":"podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github"},{"type":"link","label":"\u25b6\ufe0f Praca z graficznym interfejsem Git w Visual Studio Code","href":"/podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code","docId":"podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code"},{"type":"link","label":"\u25b6\ufe0f Korzystanie z dokumentacji","href":"/podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji","docId":"podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji"}],"href":"/podstawy/kontrola-wersji/podstawy-gita/"},{"type":"link","label":"GitHub","href":"/podstawy/kontrola-wersji/github","docId":"podstawy/kontrola-wersji/github"}],"href":"/podstawy/kontrola-wersji/"},{"type":"link","label":"Haszowanie","href":"/podstawy/haszowanie/","docId":"podstawy/haszowanie/index"},{"type":"link","label":"\u25b6\ufe0f Pami\u0119\u0107 podr\u0119czna","href":"/podstawy/pamiec-podreczna/","docId":"podstawy/pamiec-podreczna/index"},{"type":"category","label":"Sie\u0107","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Jak dzia\u0142a internet","href":"/podstawy/siec/jak-dziala-internet","docId":"podstawy/siec/jak-dziala-internet"}],"href":"/podstawy/siec/"},{"type":"link","label":"DNS i domeny","href":"/podstawy/dns-i-domeny/","docId":"podstawy/dns-i-domeny/index"},{"type":"category","label":"Hosting","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Konfiguracja w\u0142asnego serwera wirtualnego (VPS)","href":"/podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy","docId":"podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy"},{"type":"link","label":"\u25b6\ufe0f Serwuj strony internetowe z Twojego komputera","href":"/podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy","docId":"podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy"},{"type":"link","label":"\u25b6\ufe0f Darmowy hosting statycznych stron w serwisie GitHub","href":"/podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github","docId":"podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github"}],"href":"/podstawy/hosting/"},{"type":"category","label":"Dokumentacje","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Jak czyta\u0107 dokumentacj\u0119","href":"/podstawy/dokumentacje/jak-czytac-dokumentacje","docId":"podstawy/dokumentacje/jak-czytac-dokumentacje"},{"type":"link","label":"\u25b6\ufe0f Jak tworzy\u0107 dokumentacj\u0119","href":"/podstawy/dokumentacje/jak-tworzyc-dokumentacje","docId":"podstawy/dokumentacje/jak-tworzyc-dokumentacje"}],"href":"/podstawy/dokumentacje/"},{"type":"link","label":"Licencje","href":"/podstawy/licencje/","docId":"podstawy/licencje/index"},{"type":"link","label":"Wydajno\u015b\u0107","href":"/podstawy/wydajnosc/","docId":"podstawy/wydajnosc/index"},{"type":"category","label":"Testowanie","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Wprowadzenie do testowania","href":"/podstawy/testowanie/wprowadzenie-do-testowania","docId":"podstawy/testowanie/wprowadzenie-do-testowania"},{"type":"link","label":"\u25b6\ufe0f Przyk\u0142ady test\xf3w jednostkowych, integracyjnych i e2e","href":"/podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e","docId":"podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e"}],"href":"/podstawy/testowanie/"},{"type":"link","label":"Debugowanie","href":"/podstawy/debugowanie/","docId":"podstawy/debugowanie/index"},{"type":"link","label":"\u25b6\ufe0f Bezpiecze\u0144stwo","href":"/podstawy/bezpieczenstwo/","docId":"podstawy/bezpieczenstwo/index"},{"type":"category","label":"\u25b6\ufe0f Edytory kodu","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Formatowanie kodu","href":"/podstawy/edytory-kodu/formatowanie-kodu","docId":"podstawy/edytory-kodu/formatowanie-kodu"},{"type":"link","label":"Vim","href":"/podstawy/edytory-kodu/vim","docId":"podstawy/edytory-kodu/vim"},{"type":"link","label":"Visual Studio Code","href":"/podstawy/edytory-kodu/visual-studio-code","docId":"podstawy/edytory-kodu/visual-studio-code"}],"href":"/podstawy/edytory-kodu/"},{"type":"link","label":"Architektura oprogramowania","href":"/podstawy/architektura-oprogramowania/","docId":"podstawy/architektura-oprogramowania/index"},{"type":"link","label":"Zarz\u0105dzanie projektami","href":"/podstawy/zarzadzanie-projektami/","docId":"podstawy/zarzadzanie-projektami/index"},{"type":"category","label":"Praca w IT","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f UX/UI Designer","href":"/podstawy/praca-w-it/ux-ui-designer","docId":"podstawy/praca-w-it/ux-ui-designer"},{"type":"link","label":"\u25b6\ufe0f Frontend Developer","href":"/podstawy/praca-w-it/frontend-developer","docId":"podstawy/praca-w-it/frontend-developer"},{"type":"link","label":"\u25b6\ufe0f Backend Developer","href":"/podstawy/praca-w-it/backend-developer","docId":"podstawy/praca-w-it/backend-developer"},{"type":"link","label":"\u25b6\ufe0f DevOps, QA i inne","href":"/podstawy/praca-w-it/devops-qa-i-inne","docId":"podstawy/praca-w-it/devops-qa-i-inne"}],"href":"/podstawy/praca-w-it/"}],"uxuiSidebar":[{"type":"link","label":"Projektowanie UX/UI","href":"/ux-ui/projektowanie-ux-ui","docId":"ux-ui/projektowanie-ux-ui"},{"type":"category","label":"Projektowanie interfejsu i do\u015bwiadcze\u0144 u\u017cytkownik\xf3w","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Wprowadzenie","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie"},{"type":"link","label":"\u25b6\ufe0f Korzystanie z Figmy","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy"},{"type":"link","label":"\u25b6\ufe0f Zapoznanie z interfejsem","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem"},{"type":"link","label":"\u25b6\ufe0f Tablica inspiracji","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji"},{"type":"link","label":"\u25b6\ufe0f Persona uz\u0307ytkownika","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika"},{"type":"link","label":"\u25b6\ufe0f Scenariusze uz\u0307ytkownika","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika"},{"type":"link","label":"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika"},{"type":"link","label":"\u25b6\ufe0f Mapa strony","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony"},{"type":"link","label":"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu"},{"type":"link","label":"\u25b6\ufe0f Projektowanie szkieletu","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu"},{"type":"link","label":"\u25b6\ufe0f Prototyp","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp"},{"type":"link","label":"\u25b6\ufe0f Tre\u015bci tekstowe","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe"},{"type":"link","label":"\u25b6\ufe0f Tre\u015bci graficzne","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne"},{"type":"link","label":"\u25b6\ufe0f Identyfikacja marki","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki"},{"type":"link","label":"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow"},{"type":"link","label":"\u25b6\ufe0f Formularz doste\u0328pnos\u0301ci us\u0142ugi","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi"},{"type":"link","label":"\u25b6\ufe0f G\u0142e\u0328bia","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia"},{"type":"link","label":"\u25b6\ufe0f Dostosowanie ilustracji","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji"},{"type":"link","label":"\u25b6\ufe0f Rozmieszczenie grafik","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik"},{"type":"link","label":"\u25b6\ufe0f Detale","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale"}],"href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/"},{"type":"link","label":"\u25b6\ufe0f Projektowanie vs kodowanie","href":"/ux-ui/projektowanie-vs-kodowanie","docId":"ux-ui/projektowanie-vs-kodowanie"},{"type":"category","label":"Praktyczne szkolenie projektowania UX/UI","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Nagranie z webinaru (UX)","href":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux","docId":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux"},{"type":"link","label":"\u25b6\ufe0f Materia\u0142 uzupe\u0142niaj\u0105cy (UI)","href":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui","docId":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui"}],"href":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/"},{"type":"link","label":"\u25b6\ufe0f R\xf3\u017cnice mi\u0119dzy UX a UI","href":"/ux-ui/roznice-miedzy-ux-ui","docId":"ux-ui/roznice-miedzy-ux-ui"},{"type":"link","label":"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?","href":"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin","docId":"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin"},{"type":"link","label":"\u25b6\ufe0f Przeprojektowanie interfejsu strony internetowej GLS","href":"/ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls","docId":"ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls"}],"frontendSidebar":[{"type":"link","label":"Frontend","href":"/frontend/frontend/","docId":"frontend/frontend/index"},{"type":"category","label":"HTML","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Wprowadzenie do HTMLa","href":"/frontend/html/wprowadzenie-do-htmla","docId":"frontend/html/wprowadzenie-do-htmla"},{"type":"link","label":"\u25b6\ufe0f Rdze\u0144, metadane, sekcje","href":"/frontend/html/rdzen-metadane-sekcje","docId":"frontend/html/rdzen-metadane-sekcje"},{"type":"link","label":"\u25b6\ufe0f Tekst","href":"/frontend/html/tekst","docId":"frontend/html/tekst"},{"type":"link","label":"\u25b6\ufe0f Obrazki i multimedia, osadzanie, skrypty, \u015bledzenie edycji","href":"/frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji","docId":"frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji"},{"type":"link","label":"\u25b6\ufe0f Tabele, formularze, elementy interaktywne, komponenty","href":"/frontend/html/tabele-formularze-elementy-interaktywne-komponenty","docId":"frontend/html/tabele-formularze-elementy-interaktywne-komponenty"},{"type":"link","label":"\u25b6\ufe0f Zadanie domowe","href":"/frontend/html/zadanie-domowe","docId":"frontend/html/zadanie-domowe"}],"href":"/frontend/html/"},{"type":"category","label":"CSS","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Tailwind CSS","href":"/frontend/css/tailwind-css/","docId":"frontend/css/tailwind-css/index"},{"type":"link","label":"\u25b6\ufe0f Wprowadzenie w CSS","href":"/frontend/css/wprowadzenie-w-css","docId":"frontend/css/wprowadzenie-w-css"},{"type":"link","label":"\u25b6\ufe0f Organizacja styli CSS i preprocesory","href":"/frontend/css/organizacja-styli-css-i-preprocesory","docId":"frontend/css/organizacja-styli-css-i-preprocesory"},{"type":"link","label":"\u25b6\ufe0f Debugowanie CSS przez narz\u0119dzia developerskie","href":"/frontend/css/debugowanie-css-przez-narzedzia-developerskie","docId":"frontend/css/debugowanie-css-przez-narzedzia-developerskie"},{"type":"link","label":"\u25b6\ufe0f Menu mobilne w HTML/CSS bez JavaScript","href":"/frontend/css/menu-mobilne-w-html-css-bez-javascript","docId":"frontend/css/menu-mobilne-w-html-css-bez-javascript"}],"href":"/frontend/css/"},{"type":"link","label":"SVG","href":"/frontend/svg/","docId":"frontend/svg/index"},{"type":"category","label":"JavaScript","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Podstawy JavaScript","href":"/frontend/javascript/podstawy-javascript","docId":"frontend/javascript/podstawy-javascript"},{"type":"link","label":"\u25b6\ufe0f Node.js na Frontendzie","href":"/frontend/javascript/node-js-na-frontendzie copy","docId":"frontend/javascript/node-js-na-frontendzie copy"},{"type":"link","label":"\u25b6\ufe0f Nie u\u017cywaj lu\u017anego por\xf3wnania (==) w JavaScript!","href":"/frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript","docId":"frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript"},{"type":"link","label":"\u25b6\ufe0f Trawersowanie drzewa w JavaScript (zadanie rekrutacyjne)","href":"/frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne","docId":"frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne"},{"type":"link","label":"\u25b6\ufe0f Automatyzacja zada\u0144 w przegl\u0105darce z JS","href":"/frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js","docId":"frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js"},{"type":"link","label":"\u25b6\ufe0f Wprowadzenie w TypeScript","href":"/frontend/javascript/wprowadzenie-w-typescript","docId":"frontend/javascript/wprowadzenie-w-typescript"}],"href":"/frontend/javascript/"},{"type":"category","label":"React","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Memoizowanie (cache\'owanie) na przyk\u0142adzie React\'a","href":"/frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta","docId":"frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta"},{"type":"link","label":"\u25b6\ufe0f Tworzenie kopiarki fragment\xf3w kodu z kolorowaniem sk\u0142adni","href":"/frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni","docId":"frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni"}],"href":"/frontend/react/"},{"type":"link","label":"Biblioteki","href":"/frontend/biblioteki/","docId":"frontend/biblioteki/biblioteki"},{"type":"link","label":"Dost\u0119pno\u015b\u0107","href":"/frontend/dostepnosc/","docId":"frontend/dostepnosc/index"},{"type":"link","label":"SEO","href":"/frontend/seo/","docId":"frontend/seo/index"},{"type":"link","label":"Komponenty","href":"/frontend/komponenty/","docId":"frontend/komponenty/index"},{"type":"category","label":"Pakiety i pakowarki","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Webpack 4","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Podstawowy spos\xf3b u\u017cycia","href":"/frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia","docId":"frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia"},{"type":"link","label":"\u25b6\ufe0f Plik konfiguracyjny","href":"/frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny","docId":"frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny"},{"type":"link","label":"\u25b6\ufe0f \u0141adowarki","href":"/frontend/pakiety-i-pakowarki/webpack-4/ladowarki","docId":"frontend/pakiety-i-pakowarki/webpack-4/ladowarki"},{"type":"link","label":"\u25b6\ufe0f Generowanie pliku html z szablonu","href":"/frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu","docId":"frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu"},{"type":"link","label":"\u25b6\ufe0f Tryb deweloperski, mapa \u017ar\xf3d\u0142a i obserwacja zmian","href":"/frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian","docId":"frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian"},{"type":"link","label":"\u25b6\ufe0f Deweloperski serwer webpack i gor\u0105ce prze\u0142adowania","href":"/frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania","docId":"frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania"},{"type":"link","label":"\u25b6\ufe0f Rozwi\u0105zywanie \u015bcie\u017cek importu plik\xf3w","href":"/frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow","docId":"frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow"},{"type":"link","label":"\u25b6\ufe0f Podzia\u0142 plik\xf3w konfiguracyjnych","href":"/frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych","docId":"frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych"}],"href":"/frontend/pakiety-i-pakowarki/webpack-4/"}],"href":"/frontend/pakiety-i-pakowarki/"},{"type":"category","label":"Zarz\u0105dzanie stanem","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Redux","href":"/frontend/zarzadzanie-stanem/redux/","docId":"frontend/zarzadzanie-stanem/redux/index"},{"type":"category","label":"Podstawy Reduxa","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Przygotowanie \u015brodowiska deweloperskiego","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego"},{"type":"link","label":"\u25b6\ufe0f Koncept dzia\u0142ania Redux\'a","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a"},{"type":"link","label":"\u25b6\ufe0f Modyfikowanie stanu magazynu","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu"},{"type":"link","label":"\u25b6\ufe0f Modyfikowanie stanu pojedynczych element\xf3w","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow"},{"type":"link","label":"\u25b6\ufe0f Zarz\u0105dzanie wieloma stanami","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami"},{"type":"link","label":"\u25b6\ufe0f Predefiniowane typy akcji i kreatory akcji","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji"},{"type":"link","label":"\u25b6\ufe0f \u0141\u0105czenie reduktor\xf3w","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow"},{"type":"link","label":"\u25b6\ufe0f Podzia\u0142 kodu na mniejsze pliki","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki"},{"type":"link","label":"\u25b6\ufe0f Asynchroniczne akcje","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje"},{"type":"link","label":"\u25b6\ufe0f Redux thunk","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk"}],"href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/"}],"href":"/frontend/zarzadzanie-stanem/"},{"type":"link","label":"Progresywne aplikacje","href":"/frontend/progresywne-aplikacje/","docId":"frontend/progresywne-aplikacje/index"},{"type":"link","label":"WebAssembly","href":"/frontend/webassembly/","docId":"frontend/webassembly/index"},{"type":"link","label":"Aplikacje mobilne","href":"/frontend/aplikacje-mobilne/","docId":"frontend/aplikacje-mobilne/index"}],"backendSidebar":[{"type":"link","label":"\u25b6\ufe0f Projektowanie backendu","href":"/backend/projektowanie-backendu/","docId":"backend/projektowanie-backendu/index"},{"type":"link","label":"\u25b6\ufe0f Node.js","href":"/backend/node-js/","docId":"backend/node-js/index"},{"type":"link","label":"Wiersz polece\u0144","href":"/backend/wierwsz-polecen/","docId":"backend/wierwsz-polecen/index"},{"type":"category","label":"API zaplecza","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f RESTful API","href":"/backend/api-zaplecza/restful-api","docId":"backend/api-zaplecza/restful-api"},{"type":"link","label":"GraphQL","href":"/backend/api-zaplecza/graphql","docId":"backend/api-zaplecza/graphql"}],"href":"/backend/api-zaplecza/"},{"type":"category","label":"\u25b6\ufe0f Bazy danych","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Mapowanie obiektowo-relacyjne","href":"/backend/bazy-danych/mapowanie-obiektowo-relacyjne","docId":"backend/bazy-danych/mapowanie-obiektowo-relacyjne"}],"href":"/backend/bazy-danych/"},{"type":"link","label":"\u25b6\ufe0f Systemy zarz\u0105dzania tre\u015bci\u0105","href":"/backend/systemy-zarzadzania-trescia/","docId":"backend/systemy-zarzadzania-trescia/index"},{"type":"link","label":"Serwery internetowe","href":"/backend/serwery-internetowe/","docId":"backend/serwery-internetowe/index"},{"type":"link","label":"\u25b6\ufe0f Wirtualizacja i konteneryzacja","href":"/backend/wirtualizacja-i-konteneryzacja/","docId":"backend/wirtualizacja-i-konteneryzacja/index"},{"type":"link","label":"\u25b6\ufe0f Ci\u0105g\u0142a integracja i wdra\u017canie","href":"/backend/ciagla-integracja-i-wdrazanie/","docId":"backend/ciagla-integracja-i-wdrazanie/index"},{"type":"link","label":"Silniki wyszukiwania","href":"/backend/silniki-wyszukiwania/","docId":"backend/silniki-wyszukiwania/index"},{"type":"link","label":"Brokery wiadomo\u015bci","href":"/backend/brokery-wiadomosci/","docId":"backend/brokery-wiadomosci/index"},{"type":"category","label":"Obs\u0142uga emaili","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Przekierowywanie emaili przez Cloudflare","href":"/backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare","docId":"backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare"},{"type":"link","label":"\u25b6\ufe0f Darmowy system do email marketingu - OSEMS","href":"/backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems","docId":"backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems"}],"href":"/backend/obsluga-emaili/"},{"type":"link","label":"Infrastruktura","href":"/backend/infrastuktura/","docId":"backend/infrastuktura/index"},{"type":"link","label":"Monitoring","href":"/backend/monitoring/","docId":"backend/monitoring/index"}],"fullstackSidebar":[{"type":"link","label":"Full Stack","href":"/fullstack/fullstack/","docId":"fullstack/fullstack/index"},{"type":"category","label":"Autentykacja i autoryzacja","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Implementacja autentykacji","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Projekt systemu uwierzytelniania","href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania","docId":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania"},{"type":"link","label":"\u25b6\ufe0f Rejestracja","href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja","docId":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja"},{"type":"link","label":"\u25b6\ufe0f Logowanie","href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie","docId":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie"},{"type":"link","label":"\u25b6\ufe0f Obs\u0142uga sesji","href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji","docId":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji"},{"type":"link","label":"\u25b6\ufe0f Wylogowanie","href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie","docId":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie"}],"href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/"}],"href":"/fullstack/autentykacja-i-autoryzacja/"},{"type":"link","label":"Trasowanie","href":"/fullstack/trasowanie/","docId":"fullstack/trasowanie/index"},{"type":"link","label":"Paginacja","href":"/fullstack/paginacja/","docId":"fullstack/paginacja/index"},{"type":"link","label":"WebSocket","href":"/fullstack/websocket/","docId":"fullstack/websocket/index"},{"type":"link","label":"Powiadomienia push","href":"/fullstack/powiadomienia-push/","docId":"fullstack/powiadomienia-push/index"},{"type":"link","label":"Przetwarzanie p\u0142atno\u015bci","href":"/fullstack/przetwarzanie-platnosci/","docId":"fullstack/przetwarzanie-platnosci/index"},{"type":"link","label":"\u015aledzenie","href":"/fullstack/sledzenie/","docId":"fullstack/sledzenie/index"},{"type":"category","label":"Next.js","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Warsztat Next.js 2022-12-20","href":"/fullstack/next-js/warsztat-next-js-2022-12-20","docId":"fullstack/next-js/warsztat-next-js-2022-12-20"},{"type":"category","label":"Mini projekt z Next.js","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Instalacja niezb\u0119dnego oprogramowania","href":"/fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania","docId":"fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania"},{"type":"link","label":"\u25b6\ufe0f Stworzenie strony g\u0142\xf3wnej","href":"/fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej","docId":"fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej"},{"type":"link","label":"\u25b6\ufe0f Obs\u0142uga formularza i API","href":"/fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api","docId":"fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api"},{"type":"link","label":"\u25b6\ufe0f Korzystanie z bazy danych MongoDB i Prismy","href":"/fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy","docId":"fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy"},{"type":"link","label":"\u25b6\ufe0f System kontroli wersji Git i serwis GitHub","href":"/fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github","docId":"fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github"},{"type":"link","label":"\u25b6\ufe0f Hosting aplikacji w serwisie Vercel","href":"/fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel","docId":"fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel"},{"type":"link","label":"\u25b6\ufe0f Inne serwisy hostingowe i Cloud Development","href":"/fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development","docId":"fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development"}],"href":"/fullstack/next-js/mini-projekt-z-next-js/"}],"href":"/fullstack/next-js/"}]},"docs":{"backend/api-zaplecza/graphql":{"id":"backend/api-zaplecza/graphql","title":"GraphQL","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/api-zaplecza/index":{"id":"backend/api-zaplecza/index","title":"API zaplecza","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/api-zaplecza/restful-api":{"id":"backend/api-zaplecza/restful-api","title":"\u25b6\ufe0f RESTful API","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/bazy-danych/index":{"id":"backend/bazy-danych/index","title":"\u25b6\ufe0f Bazy danych","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/bazy-danych/mapowanie-obiektowo-relacyjne":{"id":"backend/bazy-danych/mapowanie-obiektowo-relacyjne","title":"Mapowanie obiektowo-relacyjne","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/brokery-wiadomosci/index":{"id":"backend/brokery-wiadomosci/index","title":"Brokery wiadomo\u015bci","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/ciagla-integracja-i-wdrazanie/index":{"id":"backend/ciagla-integracja-i-wdrazanie/index","title":"\u25b6\ufe0f Ci\u0105g\u0142a integracja i wdra\u017canie","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/infrastuktura/index":{"id":"backend/infrastuktura/index","title":"Infrastruktura","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/monitoring/index":{"id":"backend/monitoring/index","title":"Monitoring","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/node-js/index":{"id":"backend/node-js/index","title":"\u25b6\ufe0f Node.js","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems":{"id":"backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems","title":"\u25b6\ufe0f Darmowy system do email marketingu - OSEMS","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"backendSidebar"},"backend/obsluga-emaili/index":{"id":"backend/obsluga-emaili/index","title":"Obs\u0142uga emaili","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare":{"id":"backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare","title":"\u25b6\ufe0f Przekierowywanie emaili przez Cloudflare","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"backendSidebar"},"backend/projektowanie-backendu/index":{"id":"backend/projektowanie-backendu/index","title":"\u25b6\ufe0f Projektowanie backendu","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/serwery-internetowe/index":{"id":"backend/serwery-internetowe/index","title":"Serwery internetowe","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/silniki-wyszukiwania/index":{"id":"backend/silniki-wyszukiwania/index","title":"Silniki wyszukiwania","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/systemy-zarzadzania-trescia/index":{"id":"backend/systemy-zarzadzania-trescia/index","title":"\u25b6\ufe0f Systemy zarz\u0105dzania tre\u015bci\u0105","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/wierwsz-polecen/index":{"id":"backend/wierwsz-polecen/index","title":"Wiersz polece\u0144","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/wirtualizacja-i-konteneryzacja/index":{"id":"backend/wirtualizacja-i-konteneryzacja/index","title":"\u25b6\ufe0f Wirtualizacja i konteneryzacja","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"frontend/aplikacje-mobilne/index":{"id":"frontend/aplikacje-mobilne/index","title":"Aplikacje mobilne","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/biblioteki/biblioteki":{"id":"frontend/biblioteki/biblioteki","title":"Biblioteki","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/css/debugowanie-css-przez-narzedzia-developerskie":{"id":"frontend/css/debugowanie-css-przez-narzedzia-developerskie","title":"\u25b6\ufe0f Debugowanie CSS przez narz\u0119dzia developerskie","description":"","sidebar":"frontendSidebar"},"frontend/css/index":{"id":"frontend/css/index","title":"CSS","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/css/menu-mobilne-w-html-css-bez-javascript":{"id":"frontend/css/menu-mobilne-w-html-css-bez-javascript","title":"\u25b6\ufe0f Menu mobilne w HTML/CSS bez JavaScript","description":"- \ud83d\udcbe Pliki projektu","sidebar":"frontendSidebar"},"frontend/css/organizacja-styli-css-i-preprocesory":{"id":"frontend/css/organizacja-styli-css-i-preprocesory","title":"\u25b6\ufe0f Organizacja styli CSS i preprocesory","description":"","sidebar":"frontendSidebar"},"frontend/css/tailwind-css/index":{"id":"frontend/css/tailwind-css/index","title":"Tailwind CSS","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/css/wprowadzenie-w-css":{"id":"frontend/css/wprowadzenie-w-css","title":"\u25b6\ufe0f Wprowadzenie w CSS","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/dostepnosc/index":{"id":"frontend/dostepnosc/index","title":"Dost\u0119pno\u015b\u0107","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/frontend/index":{"id":"frontend/frontend/index","title":"Frontend","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/html/index":{"id":"frontend/html/index","title":"HTML","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji":{"id":"frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji","title":"\u25b6\ufe0f Obrazki i multimedia, osadzanie, skrypty, \u015bledzenie edycji","description":"- \ud83d\udcbe Repozytorium plik\xf3w z kursu","sidebar":"frontendSidebar"},"frontend/html/rdzen-metadane-sekcje":{"id":"frontend/html/rdzen-metadane-sekcje","title":"\u25b6\ufe0f Rdze\u0144, metadane, sekcje","description":"- \ud83d\udcbe Repozytorium plik\xf3w z kursu","sidebar":"frontendSidebar"},"frontend/html/tabele-formularze-elementy-interaktywne-komponenty":{"id":"frontend/html/tabele-formularze-elementy-interaktywne-komponenty","title":"\u25b6\ufe0f Tabele, formularze, elementy interaktywne, komponenty","description":"- \ud83d\udcbe Repozytorium plik\xf3w z kursu","sidebar":"frontendSidebar"},"frontend/html/tekst":{"id":"frontend/html/tekst","title":"\u25b6\ufe0f Tekst","description":"- \ud83d\udcbe Repozytorium plik\xf3w z kursu","sidebar":"frontendSidebar"},"frontend/html/wprowadzenie-do-htmla":{"id":"frontend/html/wprowadzenie-do-htmla","title":"\u25b6\ufe0f Wprowadzenie do HTMLa","description":"","sidebar":"frontendSidebar"},"frontend/html/zadanie-domowe":{"id":"frontend/html/zadanie-domowe","title":"\u25b6\ufe0f Zadanie domowe","description":"- \ud83d\udcbe Repozytorium plik\xf3w z kursu","sidebar":"frontendSidebar"},"frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js":{"id":"frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js","title":"\u25b6\ufe0f Automatyzacja zada\u0144 w przegl\u0105darce z JS","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"frontendSidebar"},"frontend/javascript/index":{"id":"frontend/javascript/index","title":"JavaScript","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript":{"id":"frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript","title":"\u25b6\ufe0f Nie u\u017cywaj lu\u017anego por\xf3wnania (==) w JavaScript!","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/javascript/node-js-na-frontendzie copy":{"id":"frontend/javascript/node-js-na-frontendzie copy","title":"\u25b6\ufe0f Node.js na Frontendzie","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/javascript/podstawy-javascript":{"id":"frontend/javascript/podstawy-javascript","title":"\u25b6\ufe0f Podstawy JavaScript","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne":{"id":"frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne","title":"\u25b6\ufe0f Trawersowanie drzewa w JavaScript (zadanie rekrutacyjne)","description":"- \ud83d\udcbe Pliki projektu","sidebar":"frontendSidebar"},"frontend/javascript/wprowadzenie-w-typescript":{"id":"frontend/javascript/wprowadzenie-w-typescript","title":"\u25b6\ufe0f Wprowadzenie w TypeScript","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/komponenty/index":{"id":"frontend/komponenty/index","title":"Komponenty","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/index":{"id":"frontend/pakiety-i-pakowarki/index","title":"Pakiety i pakowarki","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania":{"id":"frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania","title":"\u25b6\ufe0f Deweloperski serwer webpack i gor\u0105ce prze\u0142adowania","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu":{"id":"frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu","title":"\u25b6\ufe0f Generowanie pliku html z szablonu","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/index":{"id":"frontend/pakiety-i-pakowarki/webpack-4/index","title":"Webpack 4","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/ladowarki":{"id":"frontend/pakiety-i-pakowarki/webpack-4/ladowarki","title":"\u25b6\ufe0f \u0141adowarki","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny":{"id":"frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny","title":"\u25b6\ufe0f Plik konfiguracyjny","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia":{"id":"frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia","title":"\u25b6\ufe0f Podstawowy spos\xf3b u\u017cycia","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych":{"id":"frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych","title":"\u25b6\ufe0f Podzia\u0142 plik\xf3w konfiguracyjnych","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow":{"id":"frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow","title":"\u25b6\ufe0f Rozwi\u0105zywanie \u015bcie\u017cek importu plik\xf3w","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian":{"id":"frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian","title":"\u25b6\ufe0f Tryb deweloperski, mapa \u017ar\xf3d\u0142a i obserwacja zmian","description":"","sidebar":"frontendSidebar"},"frontend/progresywne-aplikacje/index":{"id":"frontend/progresywne-aplikacje/index","title":"Progresywne aplikacje","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/react/index":{"id":"frontend/react/index","title":"React","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta":{"id":"frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta","title":"\u25b6\ufe0f Memoizowanie (cache\'owanie) na przyk\u0142adzie React\'a","description":"- \ud83d\udcbe Pliki projektu","sidebar":"frontendSidebar"},"frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni":{"id":"frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni","title":"\u25b6\ufe0f Tworzenie kopiarki fragment\xf3w kodu z kolorowaniem sk\u0142adni","description":"- \ud83d\udcbe Pliki projektu,","sidebar":"frontendSidebar"},"frontend/seo/index":{"id":"frontend/seo/index","title":"SEO","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/svg/index":{"id":"frontend/svg/index","title":"SVG","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/webassembly/index":{"id":"frontend/webassembly/index","title":"WebAssembly","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/index":{"id":"frontend/zarzadzanie-stanem/index","title":"Zarz\u0105dzanie stanem","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje","title":"\u25b6\ufe0f Asynchroniczne akcje","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/index":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/index","title":"Podstawy Reduxa","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a","title":"\u25b6\ufe0f Koncept dzia\u0142ania Redux\'a","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow","title":"\u25b6\ufe0f \u0141\u0105czenie reduktor\xf3w","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu","title":"\u25b6\ufe0f Modyfikowanie stanu magazynu","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow","title":"\u25b6\ufe0f Modyfikowanie stanu pojedynczych element\xf3w","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki","title":"\u25b6\ufe0f Podzia\u0142 kodu na mniejsze pliki","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji","title":"\u25b6\ufe0f Predefiniowane typy akcji i kreatory akcji","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego","title":"\u25b6\ufe0f Przygotowanie \u015brodowiska deweloperskiego","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk","title":"\u25b6\ufe0f Redux thunk","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami","title":"\u25b6\ufe0f Zarz\u0105dzanie wieloma stanami","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/redux/index":{"id":"frontend/zarzadzanie-stanem/redux/index","title":"Redux","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/index":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/index","title":"Implementacja autentykacji","description":"","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie","title":"\u25b6\ufe0f Logowanie","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji","title":"\u25b6\ufe0f Obs\u0142uga sesji","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania","title":"\u25b6\ufe0f Projekt systemu uwierzytelniania","description":"- \ud83d\udcc4 Schemat autentykacji w PDF","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja","title":"\u25b6\ufe0f Rejestracja","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie","title":"\u25b6\ufe0f Wylogowanie","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/index":{"id":"fullstack/autentykacja-i-autoryzacja/index","title":"Autentykacja i autoryzacja","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"fullstack/fullstack/index":{"id":"fullstack/fullstack/index","title":"Full Stack","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/index":{"id":"fullstack/next-js/index","title":"Next.js","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel":{"id":"fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel","title":"\u25b6\ufe0f Hosting aplikacji w serwisie Vercel","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/index":{"id":"fullstack/next-js/mini-projekt-z-next-js/index","title":"Mini projekt z Next.js","description":"- fullstackexpress/mini","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development":{"id":"fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development","title":"\u25b6\ufe0f Inne serwisy hostingowe i Cloud Development","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania":{"id":"fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania","title":"\u25b6\ufe0f Instalacja niezb\u0119dnego oprogramowania","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy":{"id":"fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy","title":"\u25b6\ufe0f Korzystanie z bazy danych MongoDB i Prismy","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api":{"id":"fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api","title":"\u25b6\ufe0f Obs\u0142uga formularza i API","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej":{"id":"fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej","title":"\u25b6\ufe0f Stworzenie strony g\u0142\xf3wnej","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github":{"id":"fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github","title":"\u25b6\ufe0f System kontroli wersji Git i serwis GitHub","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/warsztat-next-js-2022-12-20":{"id":"fullstack/next-js/warsztat-next-js-2022-12-20","title":"\u25b6\ufe0f Warsztat Next.js 2022-12-20","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"fullstackSidebar"},"fullstack/paginacja/index":{"id":"fullstack/paginacja/index","title":"Paginacja","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"fullstack/powiadomienia-push/index":{"id":"fullstack/powiadomienia-push/index","title":"Powiadomienia push","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/przetwarzanie-platnosci/index":{"id":"fullstack/przetwarzanie-platnosci/index","title":"Przetwarzanie p\u0142atno\u015bci","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"fullstack/sledzenie/index":{"id":"fullstack/sledzenie/index","title":"\u015aledzenie","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/trasowanie/index":{"id":"fullstack/trasowanie/index","title":"Trasowanie","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"fullstack/websocket/index":{"id":"fullstack/websocket/index","title":"WebSocket","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"podstawy/aplikacje/index":{"id":"podstawy/aplikacje/index","title":"Aplikacje","description":"Linki","sidebar":"basicsSidebar"},"podstawy/architektura-oprogramowania/index":{"id":"podstawy/architektura-oprogramowania/index","title":"Architektura oprogramowania","description":"Linki","sidebar":"basicsSidebar"},"podstawy/bezpieczenstwo/index":{"id":"podstawy/bezpieczenstwo/index","title":"\u25b6\ufe0f Bezpiecze\u0144stwo","description":"Linki","sidebar":"basicsSidebar"},"podstawy/debugowanie/index":{"id":"podstawy/debugowanie/index","title":"Debugowanie","description":"Linki","sidebar":"basicsSidebar"},"podstawy/dns-i-domeny/index":{"id":"podstawy/dns-i-domeny/index","title":"DNS i domeny","description":"Linki","sidebar":"basicsSidebar"},"podstawy/dokumentacje/index":{"id":"podstawy/dokumentacje/index","title":"Dokumentacje","description":"Linki","sidebar":"basicsSidebar"},"podstawy/dokumentacje/jak-czytac-dokumentacje":{"id":"podstawy/dokumentacje/jak-czytac-dokumentacje","title":"\u25b6\ufe0f Jak czyta\u0107 dokumentacj\u0119","description":"Linki","sidebar":"basicsSidebar"},"podstawy/dokumentacje/jak-tworzyc-dokumentacje":{"id":"podstawy/dokumentacje/jak-tworzyc-dokumentacje","title":"\u25b6\ufe0f Jak tworzy\u0107 dokumentacj\u0119","description":"Linki","sidebar":"basicsSidebar"},"podstawy/edytory-kodu/formatowanie-kodu":{"id":"podstawy/edytory-kodu/formatowanie-kodu","title":"Formatowanie kodu","description":"Linki","sidebar":"basicsSidebar"},"podstawy/edytory-kodu/index":{"id":"podstawy/edytory-kodu/index","title":"\u25b6\ufe0f Edytory kodu","description":"Linki","sidebar":"basicsSidebar"},"podstawy/edytory-kodu/vim":{"id":"podstawy/edytory-kodu/vim","title":"Vim","description":"Linki","sidebar":"basicsSidebar"},"podstawy/edytory-kodu/visual-studio-code":{"id":"podstawy/edytory-kodu/visual-studio-code","title":"Visual Studio Code","description":"Linki","sidebar":"basicsSidebar"},"podstawy/haszowanie/index":{"id":"podstawy/haszowanie/index","title":"Haszowanie","description":"Linki","sidebar":"basicsSidebar"},"podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github":{"id":"podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github","title":"\u25b6\ufe0f Darmowy hosting statycznych stron w serwisie GitHub","description":"Linki","sidebar":"basicsSidebar"},"podstawy/hosting/index":{"id":"podstawy/hosting/index","title":"Hosting","description":"Linki","sidebar":"basicsSidebar"},"podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy":{"id":"podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy","title":"\u25b6\ufe0f Konfiguracja w\u0142asnego serwera wirtualnego (VPS)","description":"Linki","sidebar":"basicsSidebar"},"podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy":{"id":"podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy","title":"\u25b6\ufe0f Serwuj strony internetowe z Twojego komputera","description":"Linki","sidebar":"basicsSidebar"},"podstawy/informatyka/index":{"id":"podstawy/informatyka/index","title":"Informatyka","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/c":{"id":"podstawy/jezyki-programowania/c","title":"C","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/index":{"id":"podstawy/jezyki-programowania/index","title":"J\u0119zyki programowania","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/javascript":{"id":"podstawy/jezyki-programowania/javascript","title":"JavaScript","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/php":{"id":"podstawy/jezyki-programowania/php","title":"PHP","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/python":{"id":"podstawy/jezyki-programowania/python","title":"Python","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/scratch":{"id":"podstawy/jezyki-programowania/scratch","title":"Scratch","description":"Linki","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/github":{"id":"podstawy/kontrola-wersji/github","title":"GitHub","description":"Linki","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/index":{"id":"podstawy/kontrola-wersji/index","title":"Kontrola wersji","description":"Linki","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/inspekcja-kodu":{"id":"podstawy/kontrola-wersji/inspekcja-kodu","title":"Inspekcja kodu","description":"Linki","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/czym-jest-git":{"id":"podstawy/kontrola-wersji/podstawy-gita/czym-jest-git","title":"\u25b6\ufe0f Czym jest Git?","description":"Linki","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/etykietowanie":{"id":"podstawy/kontrola-wersji/podstawy-gita/etykietowanie","title":"\u25b6\ufe0f Etykietowanie","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow":{"id":"podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow","title":"\u25b6\ufe0f Ga\u0142\u0119zie, \u0142\u0105czenie ga\u0142\u0119zi i rozwi\u0105zywanie konflikt\xf3w","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow":{"id":"podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow","title":"\u25b6\ufe0f Ignorowanie plik\xf3w i katalog\xf3w","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/index":{"id":"podstawy/kontrola-wersji/podstawy-gita/index","title":"Podstawy Gita","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/instalacja":{"id":"podstawy/kontrola-wersji/podstawy-gita/instalacja","title":"\u25b6\ufe0f Instalacja","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji":{"id":"podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji","title":"\u25b6\ufe0f Korzystanie z dokumentacji","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie":{"id":"podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie","title":"\u25b6\ufe0f Podr\xf3\u017cowanie w czasie","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code":{"id":"podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code","title":"\u25b6\ufe0f Praca z graficznym interfejsem Git w Visual Studio Code","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github":{"id":"podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github","title":"\u25b6\ufe0f Praca ze zdalnym repozytorium GitHub","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian":{"id":"podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian","title":"\u25b6\ufe0f 05. Tymczasowe przechowywanie zmian","description":"","sidebar":"basicsSidebar"},"podstawy/licencje/index":{"id":"podstawy/licencje/index","title":"Licencje","description":"Linki","sidebar":"basicsSidebar"},"podstawy/pamiec-podreczna/index":{"id":"podstawy/pamiec-podreczna/index","title":"\u25b6\ufe0f Pami\u0119\u0107 podr\u0119czna","description":"Linki","sidebar":"basicsSidebar"},"podstawy/praca-w-it/backend-developer":{"id":"podstawy/praca-w-it/backend-developer","title":"\u25b6\ufe0f Backend Developer","description":"Linki","sidebar":"basicsSidebar"},"podstawy/praca-w-it/devops-qa-i-inne":{"id":"podstawy/praca-w-it/devops-qa-i-inne","title":"\u25b6\ufe0f DevOps, QA i inne","description":"Linki","sidebar":"basicsSidebar"},"podstawy/praca-w-it/frontend-developer":{"id":"podstawy/praca-w-it/frontend-developer","title":"\u25b6\ufe0f Frontend Developer","description":"Linki","sidebar":"basicsSidebar"},"podstawy/praca-w-it/index":{"id":"podstawy/praca-w-it/index","title":"Praca w IT","description":"Linki","sidebar":"basicsSidebar"},"podstawy/praca-w-it/ux-ui-designer":{"id":"podstawy/praca-w-it/ux-ui-designer","title":"\u25b6\ufe0f UX/UI Designer","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/algorytmy":{"id":"podstawy/programowanie/algorytmy","title":"Algorytmy","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/api":{"id":"podstawy/programowanie/api","title":"API","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/frameworki-i-biblioteki":{"id":"podstawy/programowanie/frameworki-i-biblioteki","title":"\u25b6\ufe0f Frameworki i biblioteki","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/index":{"id":"podstawy/programowanie/index","title":"Programowanie","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/paradygmaty-programowania":{"id":"podstawy/programowanie/paradygmaty-programowania","title":"Paradygmaty programowania","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/struktury-i-bazy-danych":{"id":"podstawy/programowanie/struktury-i-bazy-danych","title":"Struktury i bazy danych","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/typowanie-statyczne-i-dynamiczne":{"id":"podstawy/programowanie/typowanie-statyczne-i-dynamiczne","title":"Typowanie statyczne i dynamiczne","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/wyrazenia-regularne":{"id":"podstawy/programowanie/wyrazenia-regularne","title":"Wyra\u017cenia regularne","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/wzorce-projektowe":{"id":"podstawy/programowanie/wzorce-projektowe","title":"\u25b6\ufe0f Wzorce projektowe","description":"Linki","sidebar":"basicsSidebar"},"podstawy/siec/index":{"id":"podstawy/siec/index","title":"Sie\u0107","description":"Linki","sidebar":"basicsSidebar"},"podstawy/siec/jak-dziala-internet":{"id":"podstawy/siec/jak-dziala-internet","title":"\u25b6\ufe0f Jak dzia\u0142a internet","description":"Linki","sidebar":"basicsSidebar"},"podstawy/sprzet-komputerowy/index":{"id":"podstawy/sprzet-komputerowy/index","title":"Sprz\u0119t komputerowy","description":"Linki","sidebar":"basicsSidebar"},"podstawy/sprzet-komputerowy/system-binarny/index":{"id":"podstawy/sprzet-komputerowy/system-binarny/index","title":"System binarny","description":"","sidebar":"basicsSidebar"},"podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego":{"id":"podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego","title":"\u25b6\ufe0f Podstawy systemu binarnego","description":"Linki","sidebar":"basicsSidebar"},"podstawy/sprzet-komputerowy/system-binarny/system-binarny":{"id":"podstawy/sprzet-komputerowy/system-binarny/system-binarny","title":"\u25b6\ufe0f System binarny","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/chrome-os":{"id":"podstawy/systemy-operacyjne/chrome-os","title":"Chrome OS","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/free-bsd":{"id":"podstawy/systemy-operacyjne/free-bsd","title":"FreeBSD","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/index":{"id":"podstawy/systemy-operacyjne/index","title":"Systemy operacyjne","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/linux":{"id":"podstawy/systemy-operacyjne/linux","title":"Linux","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/macos-i-ios":{"id":"podstawy/systemy-operacyjne/macos-i-ios","title":"macOS i iOS","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/windows":{"id":"podstawy/systemy-operacyjne/windows","title":"Windows","description":"Linki","sidebar":"basicsSidebar"},"podstawy/testowanie/index":{"id":"podstawy/testowanie/index","title":"Testowanie","description":"Linki","sidebar":"basicsSidebar"},"podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e":{"id":"podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e","title":"\u25b6\ufe0f Przyk\u0142ady test\xf3w jednostkowych, integracyjnych i e2e","description":"Linki","sidebar":"basicsSidebar"},"podstawy/testowanie/wprowadzenie-do-testowania":{"id":"podstawy/testowanie/wprowadzenie-do-testowania","title":"\u25b6\ufe0f Wprowadzenie do testowania","description":"Linki","sidebar":"basicsSidebar"},"podstawy/warstwy-abstrakcji/index":{"id":"podstawy/warstwy-abstrakcji/index","title":"Warstwy abstrakcji","description":"Linki","sidebar":"basicsSidebar"},"podstawy/wydajnosc/index":{"id":"podstawy/wydajnosc/index","title":"Wydajno\u015b\u0107","description":"Linki","sidebar":"basicsSidebar"},"podstawy/zarzadzanie-projektami/index":{"id":"podstawy/zarzadzanie-projektami/index","title":"Zarz\u0105dzanie projektami","description":"Linki","sidebar":"basicsSidebar"},"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin":{"id":"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin","title":"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"uxuiSidebar"},"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/index":{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/index","title":"Praktyczne szkolenie projektowania UX/UI","description":"","sidebar":"uxuiSidebar"},"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui":{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui","title":"\u25b6\ufe0f Materia\u0142 uzupe\u0142niaj\u0105cy (UI)","description":"","sidebar":"uxuiSidebar"},"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux":{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux","title":"\u25b6\ufe0f Nagranie z webinaru (UX)","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale","title":"\u25b6\ufe0f Detale","description":"- \ud83d\udcbe Pliki projektu","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji","title":"\u25b6\ufe0f Dostosowanie ilustracji","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow","title":"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi","title":"\u25b6\ufe0f Formularz doste\u0328pnos\u0301ci us\u0142ugi","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia","title":"\u25b6\ufe0f G\u0142e\u0328bia","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki","title":"\u25b6\ufe0f Identyfikacja marki","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/index":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/index","title":"Projektowanie interfejsu i do\u015bwiadcze\u0144 u\u017cytkownik\xf3w","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy","title":"\u25b6\ufe0f Korzystanie z Figmy","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony","title":"\u25b6\ufe0f Mapa strony","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika","title":"\u25b6\ufe0f Persona uz\u0307ytkownika","description":"- \ud83d\udcbe Pliki projektu","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu","title":"\u25b6\ufe0f Projektowanie szkieletu","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp","title":"\u25b6\ufe0f Prototyp","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu","title":"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik","title":"\u25b6\ufe0f Rozmieszczenie grafik","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika","title":"\u25b6\ufe0f Scenariusze uz\u0307ytkownika","description":"- \ud83d\udcbe Pliki projektu","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika","title":"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji","title":"\u25b6\ufe0f Tablica inspiracji","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne","title":"\u25b6\ufe0f Tre\u015bci graficzne","description":"- \ud83d\udcbe Pliki projektu","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe","title":"\u25b6\ufe0f Tre\u015bci tekstowe","description":"- \ud83d\udcbe Pliki projektu","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie","title":"\u25b6\ufe0f Wprowadzenie","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem","title":"\u25b6\ufe0f Zapoznanie z interfejsem","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-ux-ui":{"id":"ux-ui/projektowanie-ux-ui","title":"Projektowanie UX/UI","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-vs-kodowanie":{"id":"ux-ui/projektowanie-vs-kodowanie","title":"\u25b6\ufe0f Projektowanie vs kodowanie","description":"","sidebar":"uxuiSidebar"},"ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls":{"id":"ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls","title":"\u25b6\ufe0f Przeprojektowanie interfejsu strony internetowej GLS","description":"","sidebar":"uxuiSidebar"},"ux-ui/roznice-miedzy-ux-ui":{"id":"ux-ui/roznice-miedzy-ux-ui","title":"\u25b6\ufe0f R\xf3\u017cnice mi\u0119dzy UX a UI","description":"","sidebar":"uxuiSidebar"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[80053],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"basicsSidebar":[{"type":"link","label":"Informatyka","href":"/podstawy/informatyka/","docId":"podstawy/informatyka/index"},{"type":"category","label":"Sprz\u0119t komputerowy","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"System binarny","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Podstawy systemu binarnego","href":"/podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego","docId":"podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego"},{"type":"link","label":"\u25b6\ufe0f System binarny","href":"/podstawy/sprzet-komputerowy/system-binarny/system-binarny","docId":"podstawy/sprzet-komputerowy/system-binarny/system-binarny"}],"href":"/podstawy/sprzet-komputerowy/system-binarny/"}],"href":"/podstawy/sprzet-komputerowy/"},{"type":"link","label":"Warstwy abstrakcji","href":"/podstawy/warstwy-abstrakcji/","docId":"podstawy/warstwy-abstrakcji/index"},{"type":"link","label":"Aplikacje","href":"/podstawy/aplikacje/","docId":"podstawy/aplikacje/index"},{"type":"category","label":"Programowanie","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"API","href":"/podstawy/programowanie/api","docId":"podstawy/programowanie/api"},{"type":"link","label":"Typowanie statyczne i dynamiczne","href":"/podstawy/programowanie/typowanie-statyczne-i-dynamiczne","docId":"podstawy/programowanie/typowanie-statyczne-i-dynamiczne"},{"type":"link","label":"Paradygmaty programowania","href":"/podstawy/programowanie/paradygmaty-programowania","docId":"podstawy/programowanie/paradygmaty-programowania"},{"type":"link","label":"Algorytmy","href":"/podstawy/programowanie/algorytmy","docId":"podstawy/programowanie/algorytmy"},{"type":"link","label":"Struktury i bazy danych","href":"/podstawy/programowanie/struktury-i-bazy-danych","docId":"podstawy/programowanie/struktury-i-bazy-danych"},{"type":"link","label":"\u25b6\ufe0f Wzorce projektowe","href":"/podstawy/programowanie/wzorce-projektowe","docId":"podstawy/programowanie/wzorce-projektowe"},{"type":"link","label":"Wyra\u017cenia regularne","href":"/podstawy/programowanie/wyrazenia-regularne","docId":"podstawy/programowanie/wyrazenia-regularne"},{"type":"link","label":"\u25b6\ufe0f Frameworki i biblioteki","href":"/podstawy/programowanie/frameworki-i-biblioteki","docId":"podstawy/programowanie/frameworki-i-biblioteki"}],"href":"/podstawy/programowanie/"},{"type":"category","label":"Systemy operacyjne","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Linux","href":"/podstawy/systemy-operacyjne/linux","docId":"podstawy/systemy-operacyjne/linux"},{"type":"link","label":"macOS i iOS","href":"/podstawy/systemy-operacyjne/macos-i-ios","docId":"podstawy/systemy-operacyjne/macos-i-ios"},{"type":"link","label":"Windows","href":"/podstawy/systemy-operacyjne/windows","docId":"podstawy/systemy-operacyjne/windows"},{"type":"link","label":"Chrome OS","href":"/podstawy/systemy-operacyjne/chrome-os","docId":"podstawy/systemy-operacyjne/chrome-os"},{"type":"link","label":"FreeBSD","href":"/podstawy/systemy-operacyjne/free-bsd","docId":"podstawy/systemy-operacyjne/free-bsd"}],"href":"/podstawy/systemy-operacyjne/"},{"type":"category","label":"J\u0119zyki programowania","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Scratch","href":"/podstawy/jezyki-programowania/scratch","docId":"podstawy/jezyki-programowania/scratch"},{"type":"link","label":"C","href":"/podstawy/jezyki-programowania/c","docId":"podstawy/jezyki-programowania/c"},{"type":"link","label":"Python","href":"/podstawy/jezyki-programowania/python","docId":"podstawy/jezyki-programowania/python"},{"type":"link","label":"JavaScript","href":"/podstawy/jezyki-programowania/javascript","docId":"podstawy/jezyki-programowania/javascript"},{"type":"link","label":"PHP","href":"/podstawy/jezyki-programowania/php","docId":"podstawy/jezyki-programowania/php"}],"href":"/podstawy/jezyki-programowania/"},{"type":"category","label":"Kontrola wersji","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Inspekcja kodu","href":"/podstawy/kontrola-wersji/inspekcja-kodu","docId":"podstawy/kontrola-wersji/inspekcja-kodu"},{"type":"category","label":"Podstawy Gita","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Czym jest Git?","href":"/podstawy/kontrola-wersji/podstawy-gita/czym-jest-git","docId":"podstawy/kontrola-wersji/podstawy-gita/czym-jest-git"},{"type":"link","label":"\u25b6\ufe0f Instalacja","href":"/podstawy/kontrola-wersji/podstawy-gita/instalacja","docId":"podstawy/kontrola-wersji/podstawy-gita/instalacja"},{"type":"link","label":"\u25b6\ufe0f Podr\xf3\u017cowanie w czasie","href":"/podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie","docId":"podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie"},{"type":"link","label":"\u25b6\ufe0f Ga\u0142\u0119zie, \u0142\u0105czenie ga\u0142\u0119zi i rozwi\u0105zywanie konflikt\xf3w","href":"/podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow","docId":"podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow"},{"type":"link","label":"\u25b6\ufe0f Ignorowanie plik\xf3w i katalog\xf3w","href":"/podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow","docId":"podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow"},{"type":"link","label":"\u25b6\ufe0f 05. Tymczasowe przechowywanie zmian","href":"/podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian","docId":"podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian"},{"type":"link","label":"\u25b6\ufe0f Etykietowanie","href":"/podstawy/kontrola-wersji/podstawy-gita/etykietowanie","docId":"podstawy/kontrola-wersji/podstawy-gita/etykietowanie"},{"type":"link","label":"\u25b6\ufe0f Praca ze zdalnym repozytorium GitHub","href":"/podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github","docId":"podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github"},{"type":"link","label":"\u25b6\ufe0f Praca z graficznym interfejsem Git w Visual Studio Code","href":"/podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code","docId":"podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code"},{"type":"link","label":"\u25b6\ufe0f Korzystanie z dokumentacji","href":"/podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji","docId":"podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji"}],"href":"/podstawy/kontrola-wersji/podstawy-gita/"},{"type":"link","label":"GitHub","href":"/podstawy/kontrola-wersji/github","docId":"podstawy/kontrola-wersji/github"}],"href":"/podstawy/kontrola-wersji/"},{"type":"link","label":"Haszowanie","href":"/podstawy/haszowanie/","docId":"podstawy/haszowanie/index"},{"type":"link","label":"\u25b6\ufe0f Pami\u0119\u0107 podr\u0119czna","href":"/podstawy/pamiec-podreczna/","docId":"podstawy/pamiec-podreczna/index"},{"type":"category","label":"Sie\u0107","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Jak dzia\u0142a internet","href":"/podstawy/siec/jak-dziala-internet","docId":"podstawy/siec/jak-dziala-internet"}],"href":"/podstawy/siec/"},{"type":"link","label":"DNS i domeny","href":"/podstawy/dns-i-domeny/","docId":"podstawy/dns-i-domeny/index"},{"type":"category","label":"Hosting","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Konfiguracja w\u0142asnego serwera wirtualnego (VPS)","href":"/podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy","docId":"podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy"},{"type":"link","label":"\u25b6\ufe0f Serwuj strony internetowe z Twojego komputera","href":"/podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy","docId":"podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy"},{"type":"link","label":"\u25b6\ufe0f Darmowy hosting statycznych stron w serwisie GitHub","href":"/podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github","docId":"podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github"}],"href":"/podstawy/hosting/"},{"type":"category","label":"Dokumentacje","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Jak czyta\u0107 dokumentacj\u0119","href":"/podstawy/dokumentacje/jak-czytac-dokumentacje","docId":"podstawy/dokumentacje/jak-czytac-dokumentacje"},{"type":"link","label":"\u25b6\ufe0f Jak tworzy\u0107 dokumentacj\u0119","href":"/podstawy/dokumentacje/jak-tworzyc-dokumentacje","docId":"podstawy/dokumentacje/jak-tworzyc-dokumentacje"}],"href":"/podstawy/dokumentacje/"},{"type":"link","label":"Licencje","href":"/podstawy/licencje/","docId":"podstawy/licencje/index"},{"type":"link","label":"Wydajno\u015b\u0107","href":"/podstawy/wydajnosc/","docId":"podstawy/wydajnosc/index"},{"type":"category","label":"Testowanie","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Wprowadzenie do testowania","href":"/podstawy/testowanie/wprowadzenie-do-testowania","docId":"podstawy/testowanie/wprowadzenie-do-testowania"},{"type":"link","label":"\u25b6\ufe0f Przyk\u0142ady test\xf3w jednostkowych, integracyjnych i e2e","href":"/podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e","docId":"podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e"}],"href":"/podstawy/testowanie/"},{"type":"link","label":"Debugowanie","href":"/podstawy/debugowanie/","docId":"podstawy/debugowanie/index"},{"type":"link","label":"\u25b6\ufe0f Bezpiecze\u0144stwo","href":"/podstawy/bezpieczenstwo/","docId":"podstawy/bezpieczenstwo/index"},{"type":"category","label":"\u25b6\ufe0f Edytory kodu","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Formatowanie kodu","href":"/podstawy/edytory-kodu/formatowanie-kodu","docId":"podstawy/edytory-kodu/formatowanie-kodu"},{"type":"link","label":"Vim","href":"/podstawy/edytory-kodu/vim","docId":"podstawy/edytory-kodu/vim"},{"type":"link","label":"Visual Studio Code","href":"/podstawy/edytory-kodu/visual-studio-code","docId":"podstawy/edytory-kodu/visual-studio-code"}],"href":"/podstawy/edytory-kodu/"},{"type":"link","label":"Architektura oprogramowania","href":"/podstawy/architektura-oprogramowania/","docId":"podstawy/architektura-oprogramowania/index"},{"type":"link","label":"Zarz\u0105dzanie projektami","href":"/podstawy/zarzadzanie-projektami/","docId":"podstawy/zarzadzanie-projektami/index"},{"type":"category","label":"Praca w IT","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f UX/UI Designer","href":"/podstawy/praca-w-it/ux-ui-designer","docId":"podstawy/praca-w-it/ux-ui-designer"},{"type":"link","label":"\u25b6\ufe0f Frontend Developer","href":"/podstawy/praca-w-it/frontend-developer","docId":"podstawy/praca-w-it/frontend-developer"},{"type":"link","label":"\u25b6\ufe0f Backend Developer","href":"/podstawy/praca-w-it/backend-developer","docId":"podstawy/praca-w-it/backend-developer"},{"type":"link","label":"\u25b6\ufe0f DevOps, QA i inne","href":"/podstawy/praca-w-it/devops-qa-i-inne","docId":"podstawy/praca-w-it/devops-qa-i-inne"}],"href":"/podstawy/praca-w-it/"}],"uxuiSidebar":[{"type":"link","label":"Projektowanie UX/UI","href":"/ux-ui/projektowanie-ux-ui","docId":"ux-ui/projektowanie-ux-ui"},{"type":"category","label":"Projektowanie interfejsu i do\u015bwiadcze\u0144 u\u017cytkownik\xf3w","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Wprowadzenie","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie"},{"type":"link","label":"\u25b6\ufe0f Korzystanie z Figmy","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy"},{"type":"link","label":"\u25b6\ufe0f Zapoznanie z interfejsem","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem"},{"type":"link","label":"\u25b6\ufe0f Tablica inspiracji","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji"},{"type":"link","label":"\u25b6\ufe0f Persona uz\u0307ytkownika","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika"},{"type":"link","label":"\u25b6\ufe0f Scenariusze uz\u0307ytkownika","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika"},{"type":"link","label":"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika"},{"type":"link","label":"\u25b6\ufe0f Mapa strony","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony"},{"type":"link","label":"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu"},{"type":"link","label":"\u25b6\ufe0f Projektowanie szkieletu","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu"},{"type":"link","label":"\u25b6\ufe0f Prototyp","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp"},{"type":"link","label":"\u25b6\ufe0f Tre\u015bci tekstowe","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe"},{"type":"link","label":"\u25b6\ufe0f Tre\u015bci graficzne","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne"},{"type":"link","label":"\u25b6\ufe0f Identyfikacja marki","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki"},{"type":"link","label":"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow"},{"type":"link","label":"\u25b6\ufe0f Formularz doste\u0328pnos\u0301ci us\u0142ugi","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi"},{"type":"link","label":"\u25b6\ufe0f G\u0142e\u0328bia","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia"},{"type":"link","label":"\u25b6\ufe0f Dostosowanie ilustracji","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji"},{"type":"link","label":"\u25b6\ufe0f Rozmieszczenie grafik","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik"},{"type":"link","label":"\u25b6\ufe0f Detale","href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale","docId":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale"}],"href":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/"},{"type":"link","label":"\u25b6\ufe0f Projektowanie vs kodowanie","href":"/ux-ui/projektowanie-vs-kodowanie","docId":"ux-ui/projektowanie-vs-kodowanie"},{"type":"category","label":"Praktyczne szkolenie projektowania UX/UI","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Nagranie z webinaru (UX)","href":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux","docId":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux"},{"type":"link","label":"\u25b6\ufe0f Materia\u0142 uzupe\u0142niaj\u0105cy (UI)","href":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui","docId":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui"}],"href":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/"},{"type":"link","label":"\u25b6\ufe0f R\xf3\u017cnice mi\u0119dzy UX a UI","href":"/ux-ui/roznice-miedzy-ux-ui","docId":"ux-ui/roznice-miedzy-ux-ui"},{"type":"link","label":"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?","href":"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin","docId":"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin"},{"type":"link","label":"\u25b6\ufe0f Przeprojektowanie interfejsu strony internetowej GLS","href":"/ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls","docId":"ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls"}],"frontendSidebar":[{"type":"link","label":"Frontend","href":"/frontend/frontend/","docId":"frontend/frontend/index"},{"type":"category","label":"HTML","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Wprowadzenie do HTMLa","href":"/frontend/html/wprowadzenie-do-htmla","docId":"frontend/html/wprowadzenie-do-htmla"},{"type":"link","label":"\u25b6\ufe0f Rdze\u0144, metadane, sekcje","href":"/frontend/html/rdzen-metadane-sekcje","docId":"frontend/html/rdzen-metadane-sekcje"},{"type":"link","label":"\u25b6\ufe0f Tekst","href":"/frontend/html/tekst","docId":"frontend/html/tekst"},{"type":"link","label":"\u25b6\ufe0f Obrazki i multimedia, osadzanie, skrypty, \u015bledzenie edycji","href":"/frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji","docId":"frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji"},{"type":"link","label":"\u25b6\ufe0f Tabele, formularze, elementy interaktywne, komponenty","href":"/frontend/html/tabele-formularze-elementy-interaktywne-komponenty","docId":"frontend/html/tabele-formularze-elementy-interaktywne-komponenty"},{"type":"link","label":"\u25b6\ufe0f Zadanie domowe","href":"/frontend/html/zadanie-domowe","docId":"frontend/html/zadanie-domowe"}],"href":"/frontend/html/"},{"type":"category","label":"CSS","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Tailwind CSS","href":"/frontend/css/tailwind-css/","docId":"frontend/css/tailwind-css/index"},{"type":"link","label":"\u25b6\ufe0f Wprowadzenie w CSS","href":"/frontend/css/wprowadzenie-w-css","docId":"frontend/css/wprowadzenie-w-css"},{"type":"link","label":"\u25b6\ufe0f Organizacja styli CSS i preprocesory","href":"/frontend/css/organizacja-styli-css-i-preprocesory","docId":"frontend/css/organizacja-styli-css-i-preprocesory"},{"type":"link","label":"\u25b6\ufe0f Debugowanie CSS przez narz\u0119dzia developerskie","href":"/frontend/css/debugowanie-css-przez-narzedzia-developerskie","docId":"frontend/css/debugowanie-css-przez-narzedzia-developerskie"},{"type":"link","label":"\u25b6\ufe0f Menu mobilne w HTML/CSS bez JavaScript","href":"/frontend/css/menu-mobilne-w-html-css-bez-javascript","docId":"frontend/css/menu-mobilne-w-html-css-bez-javascript"}],"href":"/frontend/css/"},{"type":"link","label":"SVG","href":"/frontend/svg/","docId":"frontend/svg/index"},{"type":"category","label":"JavaScript","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Podstawy JavaScript","href":"/frontend/javascript/podstawy-javascript","docId":"frontend/javascript/podstawy-javascript"},{"type":"link","label":"\u25b6\ufe0f Node.js na Frontendzie","href":"/frontend/javascript/node-js-na-frontendzie copy","docId":"frontend/javascript/node-js-na-frontendzie copy"},{"type":"link","label":"\u25b6\ufe0f Nie u\u017cywaj lu\u017anego por\xf3wnania (==) w JavaScript!","href":"/frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript","docId":"frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript"},{"type":"link","label":"\u25b6\ufe0f Trawersowanie drzewa w JavaScript (zadanie rekrutacyjne)","href":"/frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne","docId":"frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne"},{"type":"link","label":"\u25b6\ufe0f Automatyzacja zada\u0144 w przegl\u0105darce z JS","href":"/frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js","docId":"frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js"},{"type":"link","label":"\u25b6\ufe0f Wprowadzenie w TypeScript","href":"/frontend/javascript/wprowadzenie-w-typescript","docId":"frontend/javascript/wprowadzenie-w-typescript"}],"href":"/frontend/javascript/"},{"type":"category","label":"React","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Memoizowanie (cache\'owanie) na przyk\u0142adzie React\'a","href":"/frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta","docId":"frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta"},{"type":"link","label":"\u25b6\ufe0f Tworzenie kopiarki fragment\xf3w kodu z kolorowaniem sk\u0142adni","href":"/frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni","docId":"frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni"}],"href":"/frontend/react/"},{"type":"link","label":"Biblioteki","href":"/frontend/biblioteki/","docId":"frontend/biblioteki/biblioteki"},{"type":"link","label":"Dost\u0119pno\u015b\u0107","href":"/frontend/dostepnosc/","docId":"frontend/dostepnosc/index"},{"type":"link","label":"SEO","href":"/frontend/seo/","docId":"frontend/seo/index"},{"type":"link","label":"Komponenty","href":"/frontend/komponenty/","docId":"frontend/komponenty/index"},{"type":"category","label":"Pakiety i pakowarki","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Webpack 4","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Podstawowy spos\xf3b u\u017cycia","href":"/frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia","docId":"frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia"},{"type":"link","label":"\u25b6\ufe0f Plik konfiguracyjny","href":"/frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny","docId":"frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny"},{"type":"link","label":"\u25b6\ufe0f \u0141adowarki","href":"/frontend/pakiety-i-pakowarki/webpack-4/ladowarki","docId":"frontend/pakiety-i-pakowarki/webpack-4/ladowarki"},{"type":"link","label":"\u25b6\ufe0f Generowanie pliku html z szablonu","href":"/frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu","docId":"frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu"},{"type":"link","label":"\u25b6\ufe0f Tryb deweloperski, mapa \u017ar\xf3d\u0142a i obserwacja zmian","href":"/frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian","docId":"frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian"},{"type":"link","label":"\u25b6\ufe0f Deweloperski serwer webpack i gor\u0105ce prze\u0142adowania","href":"/frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania","docId":"frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania"},{"type":"link","label":"\u25b6\ufe0f Rozwi\u0105zywanie \u015bcie\u017cek importu plik\xf3w","href":"/frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow","docId":"frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow"},{"type":"link","label":"\u25b6\ufe0f Podzia\u0142 plik\xf3w konfiguracyjnych","href":"/frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych","docId":"frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych"}],"href":"/frontend/pakiety-i-pakowarki/webpack-4/"}],"href":"/frontend/pakiety-i-pakowarki/"},{"type":"category","label":"Zarz\u0105dzanie stanem","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Redux","href":"/frontend/zarzadzanie-stanem/redux/","docId":"frontend/zarzadzanie-stanem/redux/index"},{"type":"category","label":"Podstawy Reduxa","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Przygotowanie \u015brodowiska deweloperskiego","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego"},{"type":"link","label":"\u25b6\ufe0f Koncept dzia\u0142ania Redux\'a","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a"},{"type":"link","label":"\u25b6\ufe0f Modyfikowanie stanu magazynu","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu"},{"type":"link","label":"\u25b6\ufe0f Modyfikowanie stanu pojedynczych element\xf3w","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow"},{"type":"link","label":"\u25b6\ufe0f Zarz\u0105dzanie wieloma stanami","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami"},{"type":"link","label":"\u25b6\ufe0f Predefiniowane typy akcji i kreatory akcji","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji"},{"type":"link","label":"\u25b6\ufe0f \u0141\u0105czenie reduktor\xf3w","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow"},{"type":"link","label":"\u25b6\ufe0f Podzia\u0142 kodu na mniejsze pliki","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki"},{"type":"link","label":"\u25b6\ufe0f Asynchroniczne akcje","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje"},{"type":"link","label":"\u25b6\ufe0f Redux thunk","href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk","docId":"frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk"}],"href":"/frontend/zarzadzanie-stanem/podstawy-reduxa/"}],"href":"/frontend/zarzadzanie-stanem/"},{"type":"link","label":"Progresywne aplikacje","href":"/frontend/progresywne-aplikacje/","docId":"frontend/progresywne-aplikacje/index"},{"type":"link","label":"WebAssembly","href":"/frontend/webassembly/","docId":"frontend/webassembly/index"},{"type":"link","label":"Aplikacje mobilne","href":"/frontend/aplikacje-mobilne/","docId":"frontend/aplikacje-mobilne/index"}],"backendSidebar":[{"type":"link","label":"\u25b6\ufe0f Projektowanie backendu","href":"/backend/projektowanie-backendu/","docId":"backend/projektowanie-backendu/index"},{"type":"link","label":"\u25b6\ufe0f Node.js","href":"/backend/node-js/","docId":"backend/node-js/index"},{"type":"link","label":"Wiersz polece\u0144","href":"/backend/wierwsz-polecen/","docId":"backend/wierwsz-polecen/index"},{"type":"category","label":"API zaplecza","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f RESTful API","href":"/backend/api-zaplecza/restful-api","docId":"backend/api-zaplecza/restful-api"},{"type":"link","label":"GraphQL","href":"/backend/api-zaplecza/graphql","docId":"backend/api-zaplecza/graphql"}],"href":"/backend/api-zaplecza/"},{"type":"category","label":"\u25b6\ufe0f Bazy danych","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Mapowanie obiektowo-relacyjne","href":"/backend/bazy-danych/mapowanie-obiektowo-relacyjne","docId":"backend/bazy-danych/mapowanie-obiektowo-relacyjne"}],"href":"/backend/bazy-danych/"},{"type":"link","label":"\u25b6\ufe0f Systemy zarz\u0105dzania tre\u015bci\u0105","href":"/backend/systemy-zarzadzania-trescia/","docId":"backend/systemy-zarzadzania-trescia/index"},{"type":"link","label":"Serwery internetowe","href":"/backend/serwery-internetowe/","docId":"backend/serwery-internetowe/index"},{"type":"link","label":"\u25b6\ufe0f Wirtualizacja i konteneryzacja","href":"/backend/wirtualizacja-i-konteneryzacja/","docId":"backend/wirtualizacja-i-konteneryzacja/index"},{"type":"link","label":"\u25b6\ufe0f Ci\u0105g\u0142a integracja i wdra\u017canie","href":"/backend/ciagla-integracja-i-wdrazanie/","docId":"backend/ciagla-integracja-i-wdrazanie/index"},{"type":"link","label":"Silniki wyszukiwania","href":"/backend/silniki-wyszukiwania/","docId":"backend/silniki-wyszukiwania/index"},{"type":"link","label":"Brokery wiadomo\u015bci","href":"/backend/brokery-wiadomosci/","docId":"backend/brokery-wiadomosci/index"},{"type":"category","label":"Obs\u0142uga emaili","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Przekierowywanie emaili przez Cloudflare","href":"/backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare","docId":"backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare"},{"type":"link","label":"\u25b6\ufe0f Darmowy system do email marketingu - OSEMS","href":"/backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems","docId":"backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems"}],"href":"/backend/obsluga-emaili/"},{"type":"link","label":"Infrastruktura","href":"/backend/infrastuktura/","docId":"backend/infrastuktura/index"},{"type":"link","label":"Monitoring","href":"/backend/monitoring/","docId":"backend/monitoring/index"}],"fullstackSidebar":[{"type":"link","label":"Full Stack","href":"/fullstack/fullstack/","docId":"fullstack/fullstack/index"},{"type":"category","label":"Autentykacja i autoryzacja","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Implementacja autentykacji","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Projekt systemu uwierzytelniania","href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania","docId":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania"},{"type":"link","label":"\u25b6\ufe0f Rejestracja","href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja","docId":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja"},{"type":"link","label":"\u25b6\ufe0f Logowanie","href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie","docId":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie"},{"type":"link","label":"\u25b6\ufe0f Obs\u0142uga sesji","href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji","docId":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji"},{"type":"link","label":"\u25b6\ufe0f Wylogowanie","href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie","docId":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie"}],"href":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/"}],"href":"/fullstack/autentykacja-i-autoryzacja/"},{"type":"link","label":"Trasowanie","href":"/fullstack/trasowanie/","docId":"fullstack/trasowanie/index"},{"type":"link","label":"Paginacja","href":"/fullstack/paginacja/","docId":"fullstack/paginacja/index"},{"type":"link","label":"WebSocket","href":"/fullstack/websocket/","docId":"fullstack/websocket/index"},{"type":"link","label":"Powiadomienia push","href":"/fullstack/powiadomienia-push/","docId":"fullstack/powiadomienia-push/index"},{"type":"link","label":"Przetwarzanie p\u0142atno\u015bci","href":"/fullstack/przetwarzanie-platnosci/","docId":"fullstack/przetwarzanie-platnosci/index"},{"type":"link","label":"\u015aledzenie","href":"/fullstack/sledzenie/","docId":"fullstack/sledzenie/index"},{"type":"category","label":"Next.js","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Warsztat Next.js 2022-12-20","href":"/fullstack/next-js/warsztat-next-js-2022-12-20","docId":"fullstack/next-js/warsztat-next-js-2022-12-20"},{"type":"category","label":"Mini projekt z Next.js","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\u25b6\ufe0f Instalacja niezb\u0119dnego oprogramowania","href":"/fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania","docId":"fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania"},{"type":"link","label":"\u25b6\ufe0f Stworzenie strony g\u0142\xf3wnej","href":"/fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej","docId":"fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej"},{"type":"link","label":"\u25b6\ufe0f Obs\u0142uga formularza i API","href":"/fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api","docId":"fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api"},{"type":"link","label":"\u25b6\ufe0f Korzystanie z bazy danych MongoDB i Prismy","href":"/fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy","docId":"fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy"},{"type":"link","label":"\u25b6\ufe0f System kontroli wersji Git i serwis GitHub","href":"/fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github","docId":"fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github"},{"type":"link","label":"\u25b6\ufe0f Hosting aplikacji w serwisie Vercel","href":"/fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel","docId":"fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel"},{"type":"link","label":"\u25b6\ufe0f Inne serwisy hostingowe i Cloud Development","href":"/fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development","docId":"fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development"}],"href":"/fullstack/next-js/mini-projekt-z-next-js/"}],"href":"/fullstack/next-js/"}]},"docs":{"backend/api-zaplecza/graphql":{"id":"backend/api-zaplecza/graphql","title":"GraphQL","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/api-zaplecza/index":{"id":"backend/api-zaplecza/index","title":"API zaplecza","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/api-zaplecza/restful-api":{"id":"backend/api-zaplecza/restful-api","title":"\u25b6\ufe0f RESTful API","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/bazy-danych/index":{"id":"backend/bazy-danych/index","title":"\u25b6\ufe0f Bazy danych","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/bazy-danych/mapowanie-obiektowo-relacyjne":{"id":"backend/bazy-danych/mapowanie-obiektowo-relacyjne","title":"Mapowanie obiektowo-relacyjne","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/brokery-wiadomosci/index":{"id":"backend/brokery-wiadomosci/index","title":"Brokery wiadomo\u015bci","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/ciagla-integracja-i-wdrazanie/index":{"id":"backend/ciagla-integracja-i-wdrazanie/index","title":"\u25b6\ufe0f Ci\u0105g\u0142a integracja i wdra\u017canie","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/infrastuktura/index":{"id":"backend/infrastuktura/index","title":"Infrastruktura","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/monitoring/index":{"id":"backend/monitoring/index","title":"Monitoring","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/node-js/index":{"id":"backend/node-js/index","title":"\u25b6\ufe0f Node.js","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems":{"id":"backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems","title":"\u25b6\ufe0f Darmowy system do email marketingu - OSEMS","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"backendSidebar"},"backend/obsluga-emaili/index":{"id":"backend/obsluga-emaili/index","title":"Obs\u0142uga emaili","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare":{"id":"backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare","title":"\u25b6\ufe0f Przekierowywanie emaili przez Cloudflare","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"backendSidebar"},"backend/projektowanie-backendu/index":{"id":"backend/projektowanie-backendu/index","title":"\u25b6\ufe0f Projektowanie backendu","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/serwery-internetowe/index":{"id":"backend/serwery-internetowe/index","title":"Serwery internetowe","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/silniki-wyszukiwania/index":{"id":"backend/silniki-wyszukiwania/index","title":"Silniki wyszukiwania","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/systemy-zarzadzania-trescia/index":{"id":"backend/systemy-zarzadzania-trescia/index","title":"\u25b6\ufe0f Systemy zarz\u0105dzania tre\u015bci\u0105","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/wierwsz-polecen/index":{"id":"backend/wierwsz-polecen/index","title":"Wiersz polece\u0144","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"backend/wirtualizacja-i-konteneryzacja/index":{"id":"backend/wirtualizacja-i-konteneryzacja/index","title":"\u25b6\ufe0f Wirtualizacja i konteneryzacja","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"backendSidebar"},"frontend/aplikacje-mobilne/index":{"id":"frontend/aplikacje-mobilne/index","title":"Aplikacje mobilne","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/biblioteki/biblioteki":{"id":"frontend/biblioteki/biblioteki","title":"Biblioteki","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/css/debugowanie-css-przez-narzedzia-developerskie":{"id":"frontend/css/debugowanie-css-przez-narzedzia-developerskie","title":"\u25b6\ufe0f Debugowanie CSS przez narz\u0119dzia developerskie","description":"","sidebar":"frontendSidebar"},"frontend/css/index":{"id":"frontend/css/index","title":"CSS","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/css/menu-mobilne-w-html-css-bez-javascript":{"id":"frontend/css/menu-mobilne-w-html-css-bez-javascript","title":"\u25b6\ufe0f Menu mobilne w HTML/CSS bez JavaScript","description":"- \ud83d\udcbe Pliki projektu","sidebar":"frontendSidebar"},"frontend/css/organizacja-styli-css-i-preprocesory":{"id":"frontend/css/organizacja-styli-css-i-preprocesory","title":"\u25b6\ufe0f Organizacja styli CSS i preprocesory","description":"","sidebar":"frontendSidebar"},"frontend/css/tailwind-css/index":{"id":"frontend/css/tailwind-css/index","title":"Tailwind CSS","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/css/wprowadzenie-w-css":{"id":"frontend/css/wprowadzenie-w-css","title":"\u25b6\ufe0f Wprowadzenie w CSS","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/dostepnosc/index":{"id":"frontend/dostepnosc/index","title":"Dost\u0119pno\u015b\u0107","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/frontend/index":{"id":"frontend/frontend/index","title":"Frontend","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/html/index":{"id":"frontend/html/index","title":"HTML","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji":{"id":"frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji","title":"\u25b6\ufe0f Obrazki i multimedia, osadzanie, skrypty, \u015bledzenie edycji","description":"- \ud83d\udcbe Repozytorium plik\xf3w z kursu","sidebar":"frontendSidebar"},"frontend/html/rdzen-metadane-sekcje":{"id":"frontend/html/rdzen-metadane-sekcje","title":"\u25b6\ufe0f Rdze\u0144, metadane, sekcje","description":"- \ud83d\udcbe Repozytorium plik\xf3w z kursu","sidebar":"frontendSidebar"},"frontend/html/tabele-formularze-elementy-interaktywne-komponenty":{"id":"frontend/html/tabele-formularze-elementy-interaktywne-komponenty","title":"\u25b6\ufe0f Tabele, formularze, elementy interaktywne, komponenty","description":"- \ud83d\udcbe Repozytorium plik\xf3w z kursu","sidebar":"frontendSidebar"},"frontend/html/tekst":{"id":"frontend/html/tekst","title":"\u25b6\ufe0f Tekst","description":"- \ud83d\udcbe Repozytorium plik\xf3w z kursu","sidebar":"frontendSidebar"},"frontend/html/wprowadzenie-do-htmla":{"id":"frontend/html/wprowadzenie-do-htmla","title":"\u25b6\ufe0f Wprowadzenie do HTMLa","description":"","sidebar":"frontendSidebar"},"frontend/html/zadanie-domowe":{"id":"frontend/html/zadanie-domowe","title":"\u25b6\ufe0f Zadanie domowe","description":"- \ud83d\udcbe Repozytorium plik\xf3w z kursu","sidebar":"frontendSidebar"},"frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js":{"id":"frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js","title":"\u25b6\ufe0f Automatyzacja zada\u0144 w przegl\u0105darce z JS","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"frontendSidebar"},"frontend/javascript/index":{"id":"frontend/javascript/index","title":"JavaScript","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript":{"id":"frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript","title":"\u25b6\ufe0f Nie u\u017cywaj lu\u017anego por\xf3wnania (==) w JavaScript!","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/javascript/node-js-na-frontendzie copy":{"id":"frontend/javascript/node-js-na-frontendzie copy","title":"\u25b6\ufe0f Node.js na Frontendzie","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/javascript/podstawy-javascript":{"id":"frontend/javascript/podstawy-javascript","title":"\u25b6\ufe0f Podstawy JavaScript","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne":{"id":"frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne","title":"\u25b6\ufe0f Trawersowanie drzewa w JavaScript (zadanie rekrutacyjne)","description":"- \ud83d\udcbe Pliki projektu","sidebar":"frontendSidebar"},"frontend/javascript/wprowadzenie-w-typescript":{"id":"frontend/javascript/wprowadzenie-w-typescript","title":"\u25b6\ufe0f Wprowadzenie w TypeScript","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/komponenty/index":{"id":"frontend/komponenty/index","title":"Komponenty","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/index":{"id":"frontend/pakiety-i-pakowarki/index","title":"Pakiety i pakowarki","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania":{"id":"frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania","title":"\u25b6\ufe0f Deweloperski serwer webpack i gor\u0105ce prze\u0142adowania","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu":{"id":"frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu","title":"\u25b6\ufe0f Generowanie pliku html z szablonu","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/index":{"id":"frontend/pakiety-i-pakowarki/webpack-4/index","title":"Webpack 4","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/ladowarki":{"id":"frontend/pakiety-i-pakowarki/webpack-4/ladowarki","title":"\u25b6\ufe0f \u0141adowarki","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny":{"id":"frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny","title":"\u25b6\ufe0f Plik konfiguracyjny","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia":{"id":"frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia","title":"\u25b6\ufe0f Podstawowy spos\xf3b u\u017cycia","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych":{"id":"frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych","title":"\u25b6\ufe0f Podzia\u0142 plik\xf3w konfiguracyjnych","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow":{"id":"frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow","title":"\u25b6\ufe0f Rozwi\u0105zywanie \u015bcie\u017cek importu plik\xf3w","description":"","sidebar":"frontendSidebar"},"frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian":{"id":"frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian","title":"\u25b6\ufe0f Tryb deweloperski, mapa \u017ar\xf3d\u0142a i obserwacja zmian","description":"","sidebar":"frontendSidebar"},"frontend/progresywne-aplikacje/index":{"id":"frontend/progresywne-aplikacje/index","title":"Progresywne aplikacje","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/react/index":{"id":"frontend/react/index","title":"React","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta":{"id":"frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta","title":"\u25b6\ufe0f Memoizowanie (cache\'owanie) na przyk\u0142adzie React\'a","description":"- \ud83d\udcbe Pliki projektu","sidebar":"frontendSidebar"},"frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni":{"id":"frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni","title":"\u25b6\ufe0f Tworzenie kopiarki fragment\xf3w kodu z kolorowaniem sk\u0142adni","description":"- \ud83d\udcbe Pliki projektu,","sidebar":"frontendSidebar"},"frontend/seo/index":{"id":"frontend/seo/index","title":"SEO","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/svg/index":{"id":"frontend/svg/index","title":"SVG","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/webassembly/index":{"id":"frontend/webassembly/index","title":"WebAssembly","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/index":{"id":"frontend/zarzadzanie-stanem/index","title":"Zarz\u0105dzanie stanem","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje","title":"\u25b6\ufe0f Asynchroniczne akcje","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/index":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/index","title":"Podstawy Reduxa","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a","title":"\u25b6\ufe0f Koncept dzia\u0142ania Redux\'a","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow","title":"\u25b6\ufe0f \u0141\u0105czenie reduktor\xf3w","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu","title":"\u25b6\ufe0f Modyfikowanie stanu magazynu","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow","title":"\u25b6\ufe0f Modyfikowanie stanu pojedynczych element\xf3w","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki","title":"\u25b6\ufe0f Podzia\u0142 kodu na mniejsze pliki","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji","title":"\u25b6\ufe0f Predefiniowane typy akcji i kreatory akcji","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego","title":"\u25b6\ufe0f Przygotowanie \u015brodowiska deweloperskiego","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk","title":"\u25b6\ufe0f Redux thunk","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami":{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami","title":"\u25b6\ufe0f Zarz\u0105dzanie wieloma stanami","description":"","sidebar":"frontendSidebar"},"frontend/zarzadzanie-stanem/redux/index":{"id":"frontend/zarzadzanie-stanem/redux/index","title":"Redux","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"frontendSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/index":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/index","title":"Implementacja autentykacji","description":"","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie","title":"\u25b6\ufe0f Logowanie","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji","title":"\u25b6\ufe0f Obs\u0142uga sesji","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania","title":"\u25b6\ufe0f Projekt systemu uwierzytelniania","description":"- \ud83d\udcc4 Schemat autentykacji w PDF","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja","title":"\u25b6\ufe0f Rejestracja","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie":{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie","title":"\u25b6\ufe0f Wylogowanie","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"fullstackSidebar"},"fullstack/autentykacja-i-autoryzacja/index":{"id":"fullstack/autentykacja-i-autoryzacja/index","title":"Autentykacja i autoryzacja","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"fullstack/fullstack/index":{"id":"fullstack/fullstack/index","title":"Full Stack","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/index":{"id":"fullstack/next-js/index","title":"Next.js","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel":{"id":"fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel","title":"\u25b6\ufe0f Hosting aplikacji w serwisie Vercel","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/index":{"id":"fullstack/next-js/mini-projekt-z-next-js/index","title":"Mini projekt z Next.js","description":"- fullstackexpress/mini","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development":{"id":"fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development","title":"\u25b6\ufe0f Inne serwisy hostingowe i Cloud Development","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania":{"id":"fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania","title":"\u25b6\ufe0f Instalacja niezb\u0119dnego oprogramowania","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy":{"id":"fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy","title":"\u25b6\ufe0f Korzystanie z bazy danych MongoDB i Prismy","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api":{"id":"fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api","title":"\u25b6\ufe0f Obs\u0142uga formularza i API","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej":{"id":"fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej","title":"\u25b6\ufe0f Stworzenie strony g\u0142\xf3wnej","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github":{"id":"fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github","title":"\u25b6\ufe0f System kontroli wersji Git i serwis GitHub","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/next-js/warsztat-next-js-2022-12-20":{"id":"fullstack/next-js/warsztat-next-js-2022-12-20","title":"\u25b6\ufe0f Warsztat Next.js 2022-12-20","description":"- \ud83d\udcbe Kod \u017ar\xf3d\u0142owy","sidebar":"fullstackSidebar"},"fullstack/paginacja/index":{"id":"fullstack/paginacja/index","title":"Paginacja","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"fullstack/powiadomienia-push/index":{"id":"fullstack/powiadomienia-push/index","title":"Powiadomienia push","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/przetwarzanie-platnosci/index":{"id":"fullstack/przetwarzanie-platnosci/index","title":"Przetwarzanie p\u0142atno\u015bci","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"fullstack/sledzenie/index":{"id":"fullstack/sledzenie/index","title":"\u015aledzenie","description":"Linki \ud83c\uddfa\ud83c\uddf8","sidebar":"fullstackSidebar"},"fullstack/trasowanie/index":{"id":"fullstack/trasowanie/index","title":"Trasowanie","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"fullstack/websocket/index":{"id":"fullstack/websocket/index","title":"WebSocket","description":"Linki \ud83c\uddf5\ud83c\uddf1","sidebar":"fullstackSidebar"},"podstawy/aplikacje/index":{"id":"podstawy/aplikacje/index","title":"Aplikacje","description":"Linki","sidebar":"basicsSidebar"},"podstawy/architektura-oprogramowania/index":{"id":"podstawy/architektura-oprogramowania/index","title":"Architektura oprogramowania","description":"Linki","sidebar":"basicsSidebar"},"podstawy/bezpieczenstwo/index":{"id":"podstawy/bezpieczenstwo/index","title":"\u25b6\ufe0f Bezpiecze\u0144stwo","description":"Linki","sidebar":"basicsSidebar"},"podstawy/debugowanie/index":{"id":"podstawy/debugowanie/index","title":"Debugowanie","description":"Linki","sidebar":"basicsSidebar"},"podstawy/dns-i-domeny/index":{"id":"podstawy/dns-i-domeny/index","title":"DNS i domeny","description":"Linki","sidebar":"basicsSidebar"},"podstawy/dokumentacje/index":{"id":"podstawy/dokumentacje/index","title":"Dokumentacje","description":"Linki","sidebar":"basicsSidebar"},"podstawy/dokumentacje/jak-czytac-dokumentacje":{"id":"podstawy/dokumentacje/jak-czytac-dokumentacje","title":"\u25b6\ufe0f Jak czyta\u0107 dokumentacj\u0119","description":"Linki","sidebar":"basicsSidebar"},"podstawy/dokumentacje/jak-tworzyc-dokumentacje":{"id":"podstawy/dokumentacje/jak-tworzyc-dokumentacje","title":"\u25b6\ufe0f Jak tworzy\u0107 dokumentacj\u0119","description":"Linki","sidebar":"basicsSidebar"},"podstawy/edytory-kodu/formatowanie-kodu":{"id":"podstawy/edytory-kodu/formatowanie-kodu","title":"Formatowanie kodu","description":"Linki","sidebar":"basicsSidebar"},"podstawy/edytory-kodu/index":{"id":"podstawy/edytory-kodu/index","title":"\u25b6\ufe0f Edytory kodu","description":"Linki","sidebar":"basicsSidebar"},"podstawy/edytory-kodu/vim":{"id":"podstawy/edytory-kodu/vim","title":"Vim","description":"Linki","sidebar":"basicsSidebar"},"podstawy/edytory-kodu/visual-studio-code":{"id":"podstawy/edytory-kodu/visual-studio-code","title":"Visual Studio Code","description":"Linki","sidebar":"basicsSidebar"},"podstawy/haszowanie/index":{"id":"podstawy/haszowanie/index","title":"Haszowanie","description":"Linki","sidebar":"basicsSidebar"},"podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github":{"id":"podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github","title":"\u25b6\ufe0f Darmowy hosting statycznych stron w serwisie GitHub","description":"Linki","sidebar":"basicsSidebar"},"podstawy/hosting/index":{"id":"podstawy/hosting/index","title":"Hosting","description":"Linki","sidebar":"basicsSidebar"},"podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy":{"id":"podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy","title":"\u25b6\ufe0f Konfiguracja w\u0142asnego serwera wirtualnego (VPS)","description":"Linki","sidebar":"basicsSidebar"},"podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy":{"id":"podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy","title":"\u25b6\ufe0f Serwuj strony internetowe z Twojego komputera","description":"Linki","sidebar":"basicsSidebar"},"podstawy/informatyka/index":{"id":"podstawy/informatyka/index","title":"Informatyka","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/c":{"id":"podstawy/jezyki-programowania/c","title":"C","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/index":{"id":"podstawy/jezyki-programowania/index","title":"J\u0119zyki programowania","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/javascript":{"id":"podstawy/jezyki-programowania/javascript","title":"JavaScript","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/php":{"id":"podstawy/jezyki-programowania/php","title":"PHP","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/python":{"id":"podstawy/jezyki-programowania/python","title":"Python","description":"Linki","sidebar":"basicsSidebar"},"podstawy/jezyki-programowania/scratch":{"id":"podstawy/jezyki-programowania/scratch","title":"Scratch","description":"Linki","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/github":{"id":"podstawy/kontrola-wersji/github","title":"GitHub","description":"Linki","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/index":{"id":"podstawy/kontrola-wersji/index","title":"Kontrola wersji","description":"Linki","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/inspekcja-kodu":{"id":"podstawy/kontrola-wersji/inspekcja-kodu","title":"Inspekcja kodu","description":"Linki","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/czym-jest-git":{"id":"podstawy/kontrola-wersji/podstawy-gita/czym-jest-git","title":"\u25b6\ufe0f Czym jest Git?","description":"Linki","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/etykietowanie":{"id":"podstawy/kontrola-wersji/podstawy-gita/etykietowanie","title":"\u25b6\ufe0f Etykietowanie","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow":{"id":"podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow","title":"\u25b6\ufe0f Ga\u0142\u0119zie, \u0142\u0105czenie ga\u0142\u0119zi i rozwi\u0105zywanie konflikt\xf3w","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow":{"id":"podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow","title":"\u25b6\ufe0f Ignorowanie plik\xf3w i katalog\xf3w","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/index":{"id":"podstawy/kontrola-wersji/podstawy-gita/index","title":"Podstawy Gita","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/instalacja":{"id":"podstawy/kontrola-wersji/podstawy-gita/instalacja","title":"\u25b6\ufe0f Instalacja","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji":{"id":"podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji","title":"\u25b6\ufe0f Korzystanie z dokumentacji","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie":{"id":"podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie","title":"\u25b6\ufe0f Podr\xf3\u017cowanie w czasie","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code":{"id":"podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code","title":"\u25b6\ufe0f Praca z graficznym interfejsem Git w Visual Studio Code","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github":{"id":"podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github","title":"\u25b6\ufe0f Praca ze zdalnym repozytorium GitHub","description":"","sidebar":"basicsSidebar"},"podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian":{"id":"podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian","title":"\u25b6\ufe0f 05. Tymczasowe przechowywanie zmian","description":"","sidebar":"basicsSidebar"},"podstawy/licencje/index":{"id":"podstawy/licencje/index","title":"Licencje","description":"Linki","sidebar":"basicsSidebar"},"podstawy/pamiec-podreczna/index":{"id":"podstawy/pamiec-podreczna/index","title":"\u25b6\ufe0f Pami\u0119\u0107 podr\u0119czna","description":"Linki","sidebar":"basicsSidebar"},"podstawy/praca-w-it/backend-developer":{"id":"podstawy/praca-w-it/backend-developer","title":"\u25b6\ufe0f Backend Developer","description":"Linki","sidebar":"basicsSidebar"},"podstawy/praca-w-it/devops-qa-i-inne":{"id":"podstawy/praca-w-it/devops-qa-i-inne","title":"\u25b6\ufe0f DevOps, QA i inne","description":"Linki","sidebar":"basicsSidebar"},"podstawy/praca-w-it/frontend-developer":{"id":"podstawy/praca-w-it/frontend-developer","title":"\u25b6\ufe0f Frontend Developer","description":"Linki","sidebar":"basicsSidebar"},"podstawy/praca-w-it/index":{"id":"podstawy/praca-w-it/index","title":"Praca w IT","description":"Linki","sidebar":"basicsSidebar"},"podstawy/praca-w-it/ux-ui-designer":{"id":"podstawy/praca-w-it/ux-ui-designer","title":"\u25b6\ufe0f UX/UI Designer","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/algorytmy":{"id":"podstawy/programowanie/algorytmy","title":"Algorytmy","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/api":{"id":"podstawy/programowanie/api","title":"API","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/frameworki-i-biblioteki":{"id":"podstawy/programowanie/frameworki-i-biblioteki","title":"\u25b6\ufe0f Frameworki i biblioteki","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/index":{"id":"podstawy/programowanie/index","title":"Programowanie","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/paradygmaty-programowania":{"id":"podstawy/programowanie/paradygmaty-programowania","title":"Paradygmaty programowania","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/struktury-i-bazy-danych":{"id":"podstawy/programowanie/struktury-i-bazy-danych","title":"Struktury i bazy danych","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/typowanie-statyczne-i-dynamiczne":{"id":"podstawy/programowanie/typowanie-statyczne-i-dynamiczne","title":"Typowanie statyczne i dynamiczne","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/wyrazenia-regularne":{"id":"podstawy/programowanie/wyrazenia-regularne","title":"Wyra\u017cenia regularne","description":"Linki","sidebar":"basicsSidebar"},"podstawy/programowanie/wzorce-projektowe":{"id":"podstawy/programowanie/wzorce-projektowe","title":"\u25b6\ufe0f Wzorce projektowe","description":"Linki","sidebar":"basicsSidebar"},"podstawy/siec/index":{"id":"podstawy/siec/index","title":"Sie\u0107","description":"Linki","sidebar":"basicsSidebar"},"podstawy/siec/jak-dziala-internet":{"id":"podstawy/siec/jak-dziala-internet","title":"\u25b6\ufe0f Jak dzia\u0142a internet","description":"Linki","sidebar":"basicsSidebar"},"podstawy/sprzet-komputerowy/index":{"id":"podstawy/sprzet-komputerowy/index","title":"Sprz\u0119t komputerowy","description":"Linki","sidebar":"basicsSidebar"},"podstawy/sprzet-komputerowy/system-binarny/index":{"id":"podstawy/sprzet-komputerowy/system-binarny/index","title":"System binarny","description":"","sidebar":"basicsSidebar"},"podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego":{"id":"podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego","title":"\u25b6\ufe0f Podstawy systemu binarnego","description":"Linki","sidebar":"basicsSidebar"},"podstawy/sprzet-komputerowy/system-binarny/system-binarny":{"id":"podstawy/sprzet-komputerowy/system-binarny/system-binarny","title":"\u25b6\ufe0f System binarny","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/chrome-os":{"id":"podstawy/systemy-operacyjne/chrome-os","title":"Chrome OS","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/free-bsd":{"id":"podstawy/systemy-operacyjne/free-bsd","title":"FreeBSD","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/index":{"id":"podstawy/systemy-operacyjne/index","title":"Systemy operacyjne","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/linux":{"id":"podstawy/systemy-operacyjne/linux","title":"Linux","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/macos-i-ios":{"id":"podstawy/systemy-operacyjne/macos-i-ios","title":"macOS i iOS","description":"Linki","sidebar":"basicsSidebar"},"podstawy/systemy-operacyjne/windows":{"id":"podstawy/systemy-operacyjne/windows","title":"Windows","description":"Linki","sidebar":"basicsSidebar"},"podstawy/testowanie/index":{"id":"podstawy/testowanie/index","title":"Testowanie","description":"Linki","sidebar":"basicsSidebar"},"podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e":{"id":"podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e","title":"\u25b6\ufe0f Przyk\u0142ady test\xf3w jednostkowych, integracyjnych i e2e","description":"Linki","sidebar":"basicsSidebar"},"podstawy/testowanie/wprowadzenie-do-testowania":{"id":"podstawy/testowanie/wprowadzenie-do-testowania","title":"\u25b6\ufe0f Wprowadzenie do testowania","description":"Linki","sidebar":"basicsSidebar"},"podstawy/warstwy-abstrakcji/index":{"id":"podstawy/warstwy-abstrakcji/index","title":"Warstwy abstrakcji","description":"Linki","sidebar":"basicsSidebar"},"podstawy/wydajnosc/index":{"id":"podstawy/wydajnosc/index","title":"Wydajno\u015b\u0107","description":"Linki","sidebar":"basicsSidebar"},"podstawy/zarzadzanie-projektami/index":{"id":"podstawy/zarzadzanie-projektami/index","title":"Zarz\u0105dzanie projektami","description":"Linki","sidebar":"basicsSidebar"},"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin":{"id":"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin","title":"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/index":{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/index","title":"Praktyczne szkolenie projektowania UX/UI","description":"","sidebar":"uxuiSidebar"},"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui":{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui","title":"\u25b6\ufe0f Materia\u0142 uzupe\u0142niaj\u0105cy (UI)","description":"","sidebar":"uxuiSidebar"},"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux":{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux","title":"\u25b6\ufe0f Nagranie z webinaru (UX)","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale","title":"\u25b6\ufe0f Detale","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji","title":"\u25b6\ufe0f Dostosowanie ilustracji","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow","title":"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi","title":"\u25b6\ufe0f Formularz doste\u0328pnos\u0301ci us\u0142ugi","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia","title":"\u25b6\ufe0f G\u0142e\u0328bia","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki","title":"\u25b6\ufe0f Identyfikacja marki","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/index":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/index","title":"Projektowanie interfejsu i do\u015bwiadcze\u0144 u\u017cytkownik\xf3w","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy","title":"\u25b6\ufe0f Korzystanie z Figmy","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony","title":"\u25b6\ufe0f Mapa strony","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika","title":"\u25b6\ufe0f Persona uz\u0307ytkownika","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu","title":"\u25b6\ufe0f Projektowanie szkieletu","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp","title":"\u25b6\ufe0f Prototyp","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu","title":"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik","title":"\u25b6\ufe0f Rozmieszczenie grafik","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika","title":"\u25b6\ufe0f Scenariusze uz\u0307ytkownika","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika","title":"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji","title":"\u25b6\ufe0f Tablica inspiracji","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne","title":"\u25b6\ufe0f Tre\u015bci graficzne","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe","title":"\u25b6\ufe0f Tre\u015bci tekstowe","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie","title":"\u25b6\ufe0f Wprowadzenie","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem":{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem","title":"\u25b6\ufe0f Zapoznanie z interfejsem","description":"","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-ux-ui":{"id":"ux-ui/projektowanie-ux-ui","title":"Projektowanie UX/UI","description":"Linki","sidebar":"uxuiSidebar"},"ux-ui/projektowanie-vs-kodowanie":{"id":"ux-ui/projektowanie-vs-kodowanie","title":"\u25b6\ufe0f Projektowanie vs kodowanie","description":"","sidebar":"uxuiSidebar"},"ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls":{"id":"ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls","title":"\u25b6\ufe0f Przeprojektowanie interfejsu strony internetowej GLS","description":"","sidebar":"uxuiSidebar"},"ux-ui/roznice-miedzy-ux-ui":{"id":"ux-ui/roznice-miedzy-ux-ui","title":"\u25b6\ufe0f R\xf3\u017cnice mi\u0119dzy UX a UI","description":"","sidebar":"uxuiSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/9e9a17b9.212044eb.js b/assets/js/9e9a17b9.212044eb.js new file mode 100644 index 000000000..dd05ae34d --- /dev/null +++ b/assets/js/9e9a17b9.212044eb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[10462],{22160:i=>{i.exports=JSON.parse('{"label":"UI","permalink":"/tags/ui","allTagsPath":"/tags","count":28,"items":[{"id":"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin","title":"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?","description":"Linki","permalink":"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale","title":"\u25b6\ufe0f Detale","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji","title":"\u25b6\ufe0f Dostosowanie ilustracji","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow","title":"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi","title":"\u25b6\ufe0f Formularz doste\u0328pnos\u0301ci us\u0142ugi","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia","title":"\u25b6\ufe0f G\u0142e\u0328bia","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki","title":"\u25b6\ufe0f Identyfikacja marki","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy","title":"\u25b6\ufe0f Korzystanie z Figmy","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony","title":"\u25b6\ufe0f Mapa strony","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony"},{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui","title":"\u25b6\ufe0f Materia\u0142 uzupe\u0142niaj\u0105cy (UI)","description":"","permalink":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui"},{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux","title":"\u25b6\ufe0f Nagranie z webinaru (UX)","description":"Linki","permalink":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika","title":"\u25b6\ufe0f Persona uz\u0307ytkownika","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu","title":"\u25b6\ufe0f Projektowanie szkieletu","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu"},{"id":"ux-ui/projektowanie-vs-kodowanie","title":"\u25b6\ufe0f Projektowanie vs kodowanie","description":"","permalink":"/ux-ui/projektowanie-vs-kodowanie"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp","title":"\u25b6\ufe0f Prototyp","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp"},{"id":"ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls","title":"\u25b6\ufe0f Przeprojektowanie interfejsu strony internetowej GLS","description":"","permalink":"/ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu","title":"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik","title":"\u25b6\ufe0f Rozmieszczenie grafik","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik"},{"id":"ux-ui/roznice-miedzy-ux-ui","title":"\u25b6\ufe0f R\xf3\u017cnice mi\u0119dzy UX a UI","description":"","permalink":"/ux-ui/roznice-miedzy-ux-ui"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika","title":"\u25b6\ufe0f Scenariusze uz\u0307ytkownika","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika","title":"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji","title":"\u25b6\ufe0f Tablica inspiracji","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne","title":"\u25b6\ufe0f Tre\u015bci graficzne","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe","title":"\u25b6\ufe0f Tre\u015bci tekstowe","description":"Linki","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe"},{"id":"podstawy/praca-w-it/ux-ui-designer","title":"\u25b6\ufe0f UX/UI Designer","description":"Linki","permalink":"/podstawy/praca-w-it/ux-ui-designer"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie","title":"\u25b6\ufe0f Wprowadzenie","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem","title":"\u25b6\ufe0f Zapoznanie z interfejsem","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem"},{"id":"ux-ui/projektowanie-ux-ui","title":"Projektowanie UX/UI","description":"Linki","permalink":"/ux-ui/projektowanie-ux-ui"}]}')}}]); \ No newline at end of file diff --git a/assets/js/9e9a17b9.4b0aacbc.js b/assets/js/9e9a17b9.4b0aacbc.js deleted file mode 100644 index d790627cf..000000000 --- a/assets/js/9e9a17b9.4b0aacbc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[10462],{22160:i=>{i.exports=JSON.parse('{"label":"UI","permalink":"/tags/ui","allTagsPath":"/tags","count":28,"items":[{"id":"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin","title":"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?","description":"Linki \ud83c\uddf5\ud83c\uddf1","permalink":"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale","title":"\u25b6\ufe0f Detale","description":"- \ud83d\udcbe Pliki projektu","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji","title":"\u25b6\ufe0f Dostosowanie ilustracji","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow","title":"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w","description":"Linki \ud83c\uddf5\ud83c\uddf1","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi","title":"\u25b6\ufe0f Formularz doste\u0328pnos\u0301ci us\u0142ugi","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia","title":"\u25b6\ufe0f G\u0142e\u0328bia","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki","title":"\u25b6\ufe0f Identyfikacja marki","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy","title":"\u25b6\ufe0f Korzystanie z Figmy","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony","title":"\u25b6\ufe0f Mapa strony","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony"},{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui","title":"\u25b6\ufe0f Materia\u0142 uzupe\u0142niaj\u0105cy (UI)","description":"","permalink":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui"},{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux","title":"\u25b6\ufe0f Nagranie z webinaru (UX)","description":"Linki \ud83c\uddf5\ud83c\uddf1","permalink":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika","title":"\u25b6\ufe0f Persona uz\u0307ytkownika","description":"- \ud83d\udcbe Pliki projektu","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu","title":"\u25b6\ufe0f Projektowanie szkieletu","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu"},{"id":"ux-ui/projektowanie-vs-kodowanie","title":"\u25b6\ufe0f Projektowanie vs kodowanie","description":"","permalink":"/ux-ui/projektowanie-vs-kodowanie"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp","title":"\u25b6\ufe0f Prototyp","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp"},{"id":"ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls","title":"\u25b6\ufe0f Przeprojektowanie interfejsu strony internetowej GLS","description":"","permalink":"/ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu","title":"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik","title":"\u25b6\ufe0f Rozmieszczenie grafik","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik"},{"id":"ux-ui/roznice-miedzy-ux-ui","title":"\u25b6\ufe0f R\xf3\u017cnice mi\u0119dzy UX a UI","description":"","permalink":"/ux-ui/roznice-miedzy-ux-ui"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika","title":"\u25b6\ufe0f Scenariusze uz\u0307ytkownika","description":"- \ud83d\udcbe Pliki projektu","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika","title":"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika","description":"Linki \ud83c\uddf5\ud83c\uddf1","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji","title":"\u25b6\ufe0f Tablica inspiracji","description":"Linki \ud83c\uddfa\ud83c\uddf8","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne","title":"\u25b6\ufe0f Tre\u015bci graficzne","description":"- \ud83d\udcbe Pliki projektu","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe","title":"\u25b6\ufe0f Tre\u015bci tekstowe","description":"- \ud83d\udcbe Pliki projektu","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe"},{"id":"podstawy/praca-w-it/ux-ui-designer","title":"\u25b6\ufe0f UX/UI Designer","description":"Linki","permalink":"/podstawy/praca-w-it/ux-ui-designer"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie","title":"\u25b6\ufe0f Wprowadzenie","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem","title":"\u25b6\ufe0f Zapoznanie z interfejsem","description":"","permalink":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem"},{"id":"ux-ui/projektowanie-ux-ui","title":"Projektowanie UX/UI","description":"Linki \ud83c\uddf5\ud83c\uddf1","permalink":"/ux-ui/projektowanie-ux-ui"}]}')}}]); \ No newline at end of file diff --git a/assets/js/a0420386.09b24d23.js b/assets/js/a0420386.ff732ebf.js similarity index 65% rename from assets/js/a0420386.09b24d23.js rename to assets/js/a0420386.ff732ebf.js index a6043b6b1..dd8554e04 100644 --- a/assets/js/a0420386.09b24d23.js +++ b/assets/js/a0420386.ff732ebf.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[98050],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>y});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=c(r),m=i,y=p["".concat(l,".").concat(m)]||p[m]||d[m]||o;return r?n.createElement(y,a(a({ref:t},s),{},{components:r})):n.createElement(y,a({ref:t},s))}));function y(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=m;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u[p]="string"==typeof e?e:i,a[1]=u;for(var c=2;c{r.d(t,{Z:()=>i});var n=r(67294);function i(e){let{videoId:t}=e;return n.createElement(n.Fragment,null,n.createElement("div",{className:"video"},n.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},43182:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(87462),i=(r(67294),r(3905)),o=r(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?",l={unversionedId:"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin",id:"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin",title:"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?",description:"Linki \ud83c\uddf5\ud83c\uddf1",source:"@site/docs/020-ux-ui/030-czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin.mdx",sourceDirName:"020-ux-ui",slug:"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin",permalink:"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/030-czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:30,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f R\xf3\u017cnice mi\u0119dzy UX a UI",permalink:"/ux-ui/roznice-miedzy-ux-ui"},next:{title:"\u25b6\ufe0f Przeprojektowanie interfejsu strony internetowej GLS",permalink:"/ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls"}},c={},s=[{value:"Linki \ud83c\uddf5\ud83c\uddf1",id:"linki-",level:2}],p={toc:s},d="wrapper";function m(e){let{components:t,...r}=e;return(0,i.kt)(d,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"\ufe0f-czy-do-zostania-designerem-uxui-potrzeba-10000-godzin"},"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?"),(0,i.kt)(o.Z,{videoId:"772088242",mdxType:"VimeoPlayer"}),(0,i.kt)("h2",{id:"linki-"},"Linki \ud83c\uddf5\ud83c\uddf1"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/"},"Link do szkolenia ","\xbb"))))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[98050],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>y});var n=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=c(r),m=i,y=p["".concat(l,".").concat(m)]||p[m]||d[m]||o;return r?n.createElement(y,a(a({ref:t},s),{},{components:r})):n.createElement(y,a({ref:t},s))}));function y(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=m;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u[p]="string"==typeof e?e:i,a[1]=u;for(var c=2;c{r.d(t,{Z:()=>i});var n=r(67294);function i(e){let{videoId:t}=e;return n.createElement(n.Fragment,null,n.createElement("div",{className:"video"},n.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},43182:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(87462),i=(r(67294),r(3905)),o=r(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?",l={unversionedId:"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin",id:"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin",title:"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?",description:"Linki",source:"@site/docs/020-ux-ui/030-czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin.mdx",sourceDirName:"020-ux-ui",slug:"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin",permalink:"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/030-czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:30,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f R\xf3\u017cnice mi\u0119dzy UX a UI",permalink:"/ux-ui/roznice-miedzy-ux-ui"},next:{title:"\u25b6\ufe0f Przeprojektowanie interfejsu strony internetowej GLS",permalink:"/ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls"}},c={},s=[{value:"Linki",id:"linki",level:2}],p={toc:s},d="wrapper";function m(e){let{components:t,...r}=e;return(0,i.kt)(d,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"\ufe0f-czy-do-zostania-designerem-uxui-potrzeba-10000-godzin"},"\u25b6\ufe0f Czy do zostania designerem UX/UI potrzeba 10000 godzin?"),(0,i.kt)(o.Z,{videoId:"772088242",mdxType:"VimeoPlayer"}),(0,i.kt)("h2",{id:"linki"},"Linki"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/"},"Link do szkolenia ","\xbb"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a79cfbf2.0050f52e.js b/assets/js/a79cfbf2.0050f52e.js new file mode 100644 index 000000000..c3b395a76 --- /dev/null +++ b/assets/js/a79cfbf2.0050f52e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[15034],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>f});var i=o(67294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function a(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var s=i.createContext({}),u=function(e){var t=i.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},p=function(e){var t=u(e.components);return i.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},w=i.forwardRef((function(e,t){var o=e.components,r=e.mdxType,n=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(o),w=r,f=c["".concat(s,".").concat(w)]||c[w]||d[w]||n;return o?i.createElement(f,a(a({ref:t},p),{},{components:o})):i.createElement(f,a({ref:t},p))}));function f(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=o.length,a=new Array(n);a[0]=w;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:r,a[1]=l;for(var u=2;u{o.d(t,{Z:()=>r});var i=o(67294);function r(e){let{videoId:t}=e;return i.createElement(i.Fragment,null,i.createElement("div",{className:"video"},i.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},49163:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>w,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var i=o(87462),r=(o(67294),o(3905)),n=o(31313);const a={tags:["UX","UI"]},l="\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w",s={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow",title:"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/521-dostosowanie-typografii-i-kolorow.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/521-dostosowanie-typografii-i-kolorow.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:521,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Identyfikacja marki",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki"},next:{title:"\u25b6\ufe0f Formularz doste\u0328pnos\u0301ci us\u0142ugi",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi"}},u={},p=[{value:"Linki",id:"linki",level:2}],c={toc:p},d="wrapper";function w(e){let{components:t,...o}=e;return(0,r.kt)(d,(0,i.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"\ufe0f-dostosowanie-typografii-i-koloro\u0301w"},"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w"),(0,r.kt)(n.Z,{videoId:"643182577",mdxType:"VimeoPlayer"}),(0,r.kt)("h2",{id:"linki"},"Linki"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Interfejs_u%C5%BCytkownika"},"Interfejs u\u017cytkownika \u2013 Wikipedia, wolna encyklopedia")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://dribbble.com/"},"Dribbble - Discover the World\u2019s Top Designers & Creative Professionals"))))}w.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a79cfbf2.a8ddedc6.js b/assets/js/a79cfbf2.a8ddedc6.js deleted file mode 100644 index 0eeb3a9b2..000000000 --- a/assets/js/a79cfbf2.a8ddedc6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[15034],{3905:(e,i,t)=>{t.d(i,{Zo:()=>p,kt:()=>f});var o=t(67294);function r(e,i,t){return i in e?Object.defineProperty(e,i,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[i]=t,e}function n(e,i){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);i&&(o=o.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),t.push.apply(t,o)}return t}function a(e){for(var i=1;i=0||(r[t]=e[t]);return r}(e,i);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var u=o.createContext({}),s=function(e){var i=o.useContext(u),t=i;return e&&(t="function"==typeof e?e(i):a(a({},i),e)),t},p=function(e){var i=s(e.components);return o.createElement(u.Provider,{value:i},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var i=e.children;return o.createElement(o.Fragment,{},i)}},k=o.forwardRef((function(e,i){var t=e.components,r=e.mdxType,n=e.originalType,u=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=s(t),k=r,f=c["".concat(u,".").concat(k)]||c[k]||d[k]||n;return t?o.createElement(f,a(a({ref:i},p),{},{components:t})):o.createElement(f,a({ref:i},p))}));function f(e,i){var t=arguments,r=i&&i.mdxType;if("string"==typeof e||r){var n=t.length,a=new Array(n);a[0]=k;var l={};for(var u in i)hasOwnProperty.call(i,u)&&(l[u]=i[u]);l.originalType=e,l[c]="string"==typeof e?e:r,a[1]=l;for(var s=2;s{t.d(i,{Z:()=>r});var o=t(67294);function r(e){let{videoId:i}=e;return o.createElement(o.Fragment,null,o.createElement("div",{className:"video"},o.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${i}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},49163:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>s,contentTitle:()=>l,default:()=>k,frontMatter:()=>a,metadata:()=>u,toc:()=>p});var o=t(87462),r=(t(67294),t(3905)),n=t(31313);const a={tags:["UX","UI"]},l="\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w",u={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow",title:"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w",description:"Linki \ud83c\uddf5\ud83c\uddf1",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/521-dostosowanie-typografii-i-kolorow.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/521-dostosowanie-typografii-i-kolorow.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:521,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Identyfikacja marki",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki"},next:{title:"\u25b6\ufe0f Formularz doste\u0328pnos\u0301ci us\u0142ugi",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi"}},s={},p=[{value:"Linki \ud83c\uddf5\ud83c\uddf1",id:"linki-",level:2},{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki--1",level:2}],c={toc:p},d="wrapper";function k(e){let{components:i,...t}=e;return(0,r.kt)(d,(0,o.Z)({},c,t,{components:i,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"\ufe0f-dostosowanie-typografii-i-koloro\u0301w"},"\u25b6\ufe0f Dostosowanie typografii i koloro\u0301w"),(0,r.kt)(n.Z,{videoId:"643182577",mdxType:"VimeoPlayer"}),(0,r.kt)("h2",{id:"linki-"},"Linki \ud83c\uddf5\ud83c\uddf1"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://pl.wikipedia.org/wiki/Interfejs_u%C5%BCytkownika"},"Interfejs u\u017cytkownika \u2013 Wikipedia, wolna encyklopedia"))),(0,r.kt)("h2",{id:"linki--1"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/User_interface"},"User interface - Wikipedia")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://dribbble.com/"},"Dribbble - Discover the World\u2019s Top Designers & Creative Professionals")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.figma.com/community/plugin/735098390272716381/Iconify"},"Iconify \u2013 Figma"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b92b9e7e.98259401.js b/assets/js/b92b9e7e.c7bb9953.js similarity index 64% rename from assets/js/b92b9e7e.98259401.js rename to assets/js/b92b9e7e.c7bb9953.js index 2d91741ed..a15a6668a 100644 --- a/assets/js/b92b9e7e.98259401.js +++ b/assets/js/b92b9e7e.c7bb9953.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[31022],{3905:(e,t,i)=>{i.d(t,{Zo:()=>l,kt:()=>f});var n=i(67294);function r(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function a(e){for(var t=1;t=0||(r[i]=e[i]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):a(a({},t),e)),i},l=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},w=n.forwardRef((function(e,t){var i=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,l=u(e,["components","mdxType","originalType","parentName"]),p=c(i),w=r,f=p["".concat(s,".").concat(w)]||p[w]||d[w]||o;return i?n.createElement(f,a(a({ref:t},l),{},{components:i})):n.createElement(f,a({ref:t},l))}));function f(e,t){var i=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=i.length,a=new Array(o);a[0]=w;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u[p]="string"==typeof e?e:r,a[1]=u;for(var c=2;c{i.d(t,{Z:()=>r});var n=i(67294);function r(e){let{videoId:t}=e;return n.createElement(n.Fragment,null,n.createElement("div",{className:"video"},n.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},18453:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>w,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=i(87462),r=(i(67294),i(3905)),o=i(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Dostosowanie ilustracji",s={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji",title:"\u25b6\ufe0f Dostosowanie ilustracji",description:"Linki \ud83c\uddfa\ud83c\uddf8",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/524-dostosowanie-ilustracji.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/524-dostosowanie-ilustracji.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:524,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f G\u0142e\u0328bia",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia"},next:{title:"\u25b6\ufe0f Rozmieszczenie grafik",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik"}},c={},l=[{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki-",level:2}],p={toc:l},d="wrapper";function w(e){let{components:t,...i}=e;return(0,r.kt)(d,(0,n.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"\ufe0f-dostosowanie-ilustracji"},"\u25b6\ufe0f Dostosowanie ilustracji"),(0,r.kt)(o.Z,{videoId:"643182789",mdxType:"VimeoPlayer"}),(0,r.kt)("h2",{id:"linki-"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.figma.com/community/plugin/735098390272716381/Iconify"},"Iconify \u2013 Figma"))))}w.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[31022],{3905:(e,t,i)=>{i.d(t,{Zo:()=>l,kt:()=>f});var n=i(67294);function r(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function a(e){for(var t=1;t=0||(r[i]=e[i]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):a(a({},t),e)),i},l=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},w=n.forwardRef((function(e,t){var i=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,l=u(e,["components","mdxType","originalType","parentName"]),p=c(i),w=r,f=p["".concat(s,".").concat(w)]||p[w]||d[w]||o;return i?n.createElement(f,a(a({ref:t},l),{},{components:i})):n.createElement(f,a({ref:t},l))}));function f(e,t){var i=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=i.length,a=new Array(o);a[0]=w;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u[p]="string"==typeof e?e:r,a[1]=u;for(var c=2;c{i.d(t,{Z:()=>r});var n=i(67294);function r(e){let{videoId:t}=e;return n.createElement(n.Fragment,null,n.createElement("div",{className:"video"},n.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},18453:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>w,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=i(87462),r=(i(67294),i(3905)),o=i(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Dostosowanie ilustracji",s={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji",title:"\u25b6\ufe0f Dostosowanie ilustracji",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/524-dostosowanie-ilustracji.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/524-dostosowanie-ilustracji.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:524,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f G\u0142e\u0328bia",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia"},next:{title:"\u25b6\ufe0f Rozmieszczenie grafik",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik"}},c={},l=[{value:"Linki",id:"linki",level:2}],p={toc:l},d="wrapper";function w(e){let{components:t,...i}=e;return(0,r.kt)(d,(0,n.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"\ufe0f-dostosowanie-ilustracji"},"\u25b6\ufe0f Dostosowanie ilustracji"),(0,r.kt)(o.Z,{videoId:"643182789",mdxType:"VimeoPlayer"}),(0,r.kt)("h2",{id:"linki"},"Linki"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.figma.com/community/plugin/735098390272716381/Iconify"},"Iconify \u2013 Figma"))))}w.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c9805ddd.550713fc.js b/assets/js/c9805ddd.550713fc.js deleted file mode 100644 index 2e13b017e..000000000 --- a/assets/js/c9805ddd.550713fc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[41571],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>w});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),p=l(n),d=i,w=p["".concat(s,".").concat(d)]||p[d]||k[d]||o;return n?r.createElement(w,a(a({ref:t},c),{},{components:n})):r.createElement(w,a({ref:t},c))}));function w(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=d;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u[p]="string"==typeof e?e:i,a[1]=u;for(var l=2;l{n.d(t,{Z:()=>i});var r=n(67294);function i(e){let{videoId:t}=e;return r.createElement(r.Fragment,null,r.createElement("div",{className:"video"},r.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},11702:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var r=n(87462),i=(n(67294),n(3905)),o=n(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Persona uz\u0307ytkownika",s={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika",title:"\u25b6\ufe0f Persona uz\u0307ytkownika",description:"- \ud83d\udcbe Pliki projektu",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/220-persona-uzytkownika.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/220-persona-uzytkownika.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:220,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Tablica inspiracji",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji"},next:{title:"\u25b6\ufe0f Scenariusze uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika"}},l={},c=[{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki-",level:2}],p={toc:c},k="wrapper";function d(e){let{components:t,...a}=e;return(0,i.kt)(k,(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"\ufe0f-persona-uz\u0307ytkownika"},"\u25b6\ufe0f Persona uz\u0307ytkownika"),(0,i.kt)(o.Z,{videoId:"630860093",mdxType:"VimeoPlayer"}),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{target:"_blank",href:n(22785).Z},"\ud83d\udcbe Pliki projektu"))),(0,i.kt)("h2",{id:"linki-"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://xd.adobe.com/ideas/process/user-research/putting-personas-to-work-in-ux-design/"},"What Are User Personas and Why Are They Important? | Adobe XD Ideas")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://thispersondoesnotexist.com/"},"thispersondoesnotexist.com (1024\xd71024)"))))}d.isMDXComponent=!0},22785:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/files/user-persona-71e1ec4b3b7c03fca16aa58b976c20ad.zip"}}]); \ No newline at end of file diff --git a/assets/js/c9805ddd.abb51093.js b/assets/js/c9805ddd.abb51093.js new file mode 100644 index 000000000..50f815ebf --- /dev/null +++ b/assets/js/c9805ddd.abb51093.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[41571],{3905:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>w});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},l=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,l=u(e,["components","mdxType","originalType","parentName"]),p=c(n),d=i,w=p["".concat(s,".").concat(d)]||p[d]||k[d]||o;return n?r.createElement(w,a(a({ref:t},l),{},{components:n})):r.createElement(w,a({ref:t},l))}));function w(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=d;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u[p]="string"==typeof e?e:i,a[1]=u;for(var c=2;c{n.d(t,{Z:()=>i});var r=n(67294);function i(e){let{videoId:t}=e;return r.createElement(r.Fragment,null,r.createElement("div",{className:"video"},r.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},11702:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=n(87462),i=(n(67294),n(3905)),o=n(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Persona uz\u0307ytkownika",s={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika",title:"\u25b6\ufe0f Persona uz\u0307ytkownika",description:"Linki",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/220-persona-uzytkownika.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/220-persona-uzytkownika.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:220,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Tablica inspiracji",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji"},next:{title:"\u25b6\ufe0f Scenariusze uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika"}},c={},l=[{value:"Linki",id:"linki",level:2}],p={toc:l},k="wrapper";function d(e){let{components:t,...a}=e;return(0,i.kt)(k,(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"\ufe0f-persona-uz\u0307ytkownika"},"\u25b6\ufe0f Persona uz\u0307ytkownika"),(0,i.kt)(o.Z,{videoId:"630860093",mdxType:"VimeoPlayer"}),(0,i.kt)("h2",{id:"linki"},"Linki"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{target:"_blank",href:n(22785).Z},"\ud83d\udcbe Pliki projektu")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://xd.adobe.com/ideas/process/user-research/putting-personas-to-work-in-ux-design/"},"What Are User Personas and Why Are They Important? | Adobe XD Ideas")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://thispersondoesnotexist.com/"},"thispersondoesnotexist.com (1024\xd71024)"))))}d.isMDXComponent=!0},22785:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/files/user-persona-71e1ec4b3b7c03fca16aa58b976c20ad.zip"}}]); \ No newline at end of file diff --git a/assets/js/f65f218b.7cfe538c.js b/assets/js/f65f218b.7cfe538c.js deleted file mode 100644 index 2f17f797c..000000000 --- a/assets/js/f65f218b.7cfe538c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[18453],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var r=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),s=p(n),m=i,y=s["".concat(l,".").concat(m)]||s[m]||d[m]||o;return n?r.createElement(y,a(a({ref:t},c),{},{components:n})):r.createElement(y,a({ref:t},c))}));function y(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=m;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u[s]="string"==typeof e?e:i,a[1]=u;for(var p=2;p{n.d(t,{Z:()=>i});var r=n(67294);function i(e){let{videoId:t}=e;return r.createElement(r.Fragment,null,r.createElement("div",{className:"video"},r.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},91958:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=n(87462),i=(n(67294),n(3905)),o=n(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Mapa strony",l={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony",title:"\u25b6\ufe0f Mapa strony",description:"Linki \ud83c\uddfa\ud83c\uddf8",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/320-mapa-strony.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/320-mapa-strony.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:320,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika"},next:{title:"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu"}},p={},c=[{value:"Linki \ud83c\uddfa\ud83c\uddf8",id:"linki-",level:2}],s={toc:c},d="wrapper";function m(e){let{components:t,...n}=e;return(0,i.kt)(d,(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"\ufe0f-mapa-strony"},"\u25b6\ufe0f Mapa strony"),(0,i.kt)(o.Z,{videoId:"630861405",mdxType:"VimeoPlayer"}),(0,i.kt)("h2",{id:"linki-"},"Linki \ud83c\uddfa\ud83c\uddf8"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Site_map"},"Site map - Wikipedia"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f65f218b.9a2cdf63.js b/assets/js/f65f218b.9a2cdf63.js new file mode 100644 index 000000000..060af7c83 --- /dev/null +++ b/assets/js/f65f218b.9a2cdf63.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[18453],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},y=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=l(n),y=o,m=p["".concat(c,".").concat(y)]||p[y]||d[y]||i;return n?r.createElement(m,a(a({ref:t},s),{},{components:n})):r.createElement(m,a({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=y;var u={};for(var c in t)hasOwnProperty.call(t,c)&&(u[c]=t[c]);u.originalType=e,u[p]="string"==typeof e?e:o,a[1]=u;for(var l=2;l{n.d(t,{Z:()=>o});var r=n(67294);function o(e){let{videoId:t}=e;return r.createElement(r.Fragment,null,r.createElement("div",{className:"video"},r.createElement("iframe",{title:"Vimeo video player",src:`https://player.vimeo.com/video/${t}`,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0})))}},91958:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>y,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var r=n(87462),o=(n(67294),n(3905)),i=n(31313);const a={tags:["UX","UI"]},u="\u25b6\ufe0f Mapa strony",c={unversionedId:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony",id:"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony",title:"\u25b6\ufe0f Mapa strony",description:"",source:"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/320-mapa-strony.mdx",sourceDirName:"020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow",slug:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony",draft:!1,editUrl:"https://github.com/adrianbienias/codisity.pl/blob/main/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/320-mapa-strony.mdx",tags:[{label:"UX",permalink:"/tags/ux"},{label:"UI",permalink:"/tags/ui"}],version:"current",sidebarPosition:320,frontMatter:{tags:["UX","UI"]},sidebar:"uxuiSidebar",previous:{title:"\u25b6\ufe0f Schemat dzia\u0142an\u0301 uz\u0307ytkownika",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika"},next:{title:"\u25b6\ufe0f Przygotowanie elemento\u0301w szkieletu",permalink:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu"}},l={},s=[],p={toc:s},d="wrapper";function y(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"\ufe0f-mapa-strony"},"\u25b6\ufe0f Mapa strony"),(0,o.kt)(i.Z,{videoId:"630861405",mdxType:"VimeoPlayer"}))}y.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.e2dfac10.js b/assets/js/main.bfe5da37.js similarity index 99% rename from assets/js/main.e2dfac10.js rename to assets/js/main.bfe5da37.js index c39c83ebb..0012c0fd3 100644 --- a/assets/js/main.e2dfac10.js +++ b/assets/js/main.bfe5da37.js @@ -1,2 +1,2 @@ -/*! For license information please see main.e2dfac10.js.LICENSE.txt */ -(self.webpackChunkcodisity_pl=self.webpackChunkcodisity_pl||[]).push([[40179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(67294),o=n(87462),c=n(68356),i=n.n(c),s=n(16887);const r={"0004ba19":[()=>n.e(59228).then(n.t.bind(n,4010,19)),"~docs/default/tag-tags-cache-f9d.json",4010],"000665dd":[()=>n.e(85230).then(n.bind(n,16203)),"@site/src/pages/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugDescription.md",16203],"003204f1":[()=>n.e(92011).then(n.bind(n,5189)),"@site/docs/040-backend/010-node-js/index.mdx",5189],"0080b226":[()=>n.e(88011).then(n.t.bind(n,17298,19)),"~docs/default/tag-tags-zabbix-c4c.json",17298],"0147c202":[()=>n.e(61554).then(n.t.bind(n,31134,19)),"~docs/default/tag-tags-dev-tools-b4a.json",31134],"01c989ff":[()=>n.e(97736).then(n.t.bind(n,47116,19)),"~docs/default/tag-tags-docs-b19.json",47116],"02e6af99":[()=>n.e(17384).then(n.bind(n,20386)),"@site/src/pages/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugCode.md",20386],"02ffdfe4":[()=>Promise.all([n.e(40532),n.e(3473),n.e(17119)]).then(n.bind(n,1657)),"@site/src/pages/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/index.mdx",1657],"03236927":[()=>n.e(55119).then(n.bind(n,60900)),"@site/src/pages/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugCode.md",60900],"034f1ed4":[()=>n.e(9929).then(n.bind(n,818)),"@site/src/pages/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionDescription.md",818],"03892e34":[()=>n.e(8013).then(n.bind(n,51750)),"@site/docs/010-podstawy/130-dokumentacje/010-jak-czytac-dokumentacje.mdx",51750],"039c99a0":[()=>n.e(43191).then(n.bind(n,20803)),"@site/src/pages/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionDescription.md",20803],"03faf0a9":[()=>Promise.all([n.e(40532),n.e(3473),n.e(78309)]).then(n.bind(n,84047)),"@site/src/pages/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/index.mdx",84047],"0411acde":[()=>n.e(49583).then(n.bind(n,359)),"@site/src/pages/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionCode.md",359],"0418672b":[()=>n.e(92815).then(n.bind(n,67747)),"@site/src/pages/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionDescription.md",67747],"0440d02f":[()=>n.e(96953).then(n.bind(n,76477)),"@site/src/pages/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/links.md",76477],"0464ef27":[()=>n.e(54414).then(n.bind(n,5707)),"@site/src/pages/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugCode.md",5707],"048a21ad":[()=>n.e(89238).then(n.bind(n,94990)),"@site/src/pages/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/links.md",94990],"051f438e":[()=>n.e(62982).then(n.bind(n,50684)),"@site/src/pages/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugDescription.md",50684],"05add8f7":[()=>n.e(63364).then(n.bind(n,31613)),"@site/src/pages/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/links.md",31613],"05c66f1b":[()=>n.e(67138).then(n.bind(n,68085)),"@site/src/pages/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionCode.md",68085],"05f0acd5":[()=>n.e(45442).then(n.bind(n,79366)),"@site/src/pages/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionCode.md",79366],"062fd7e6":[()=>n.e(65596).then(n.t.bind(n,71016,19)),"~docs/default/tag-tags-auth-f79.json",71016],"0640dad6":[()=>n.e(24426).then(n.bind(n,71890)),"@site/src/pages/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionCode.md",71890],"0643aaf6":[()=>n.e(22629).then(n.t.bind(n,66674,19)),"~docs/default/tag-tags-java-script-e8e.json",66674],"0673ff60":[()=>Promise.all([n.e(40532),n.e(3473),n.e(70423)]).then(n.bind(n,72207)),"@site/src/pages/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/index.mdx",72207],"07cd6fa5":[()=>n.e(13366).then(n.bind(n,78706)),"@site/src/pages/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionDescription.md",78706],"08bf3db3":[()=>n.e(29124).then(n.bind(n,22145)),"@site/src/pages/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/links.md",22145],"093bf030":[()=>Promise.all([n.e(40532),n.e(3473),n.e(30999)]).then(n.bind(n,61094)),"@site/src/pages/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/index.mdx",61094],"095e46f4":[()=>n.e(58178).then(n.bind(n,28959)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/210-tablica-inspiracji.mdx",28959],"09d85903":[()=>n.e(20139).then(n.bind(n,17647)),"@site/docs/020-ux-ui/020-roznice-miedzy-ux-ui.mdx",17647],"0a7aa683":[()=>n.e(81442).then(n.bind(n,91985)),"@site/docs/030-frontend/070-pakiety-i-pakowarki/010-webpack-4/060-deweloperski-serwer-webpack-i-gorace-przeladowania.mdx",91985],"0aa05009":[()=>n.e(14867).then(n.bind(n,49645)),"@site/src/pages/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugCode.md",49645],"0b1402ec":[()=>n.e(77196).then(n.bind(n,1917)),"@site/src/pages/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugDescription.md",1917],"0b54690a":[()=>n.e(52643).then(n.bind(n,17053)),"@site/src/pages/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionCode.md",17053],"0b881017":[()=>n.e(30654).then(n.t.bind(n,59847,19)),"~docs/default/tag-tags-hosting-00f.json",59847],"0b93d927":[()=>n.e(92273).then(n.bind(n,61448)),"@site/src/pages/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionCode.md",61448],"0be52f91":[()=>n.e(38773).then(n.bind(n,85620)),"@site/src/pages/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugCode.md",85620],"0be807c8":[()=>n.e(7901).then(n.bind(n,72112)),"@site/docs/050-fullstack/030-paginacja/index.mdx",72112],"0bed0a80":[()=>n.e(49921).then(n.bind(n,2728)),"@site/docs/050-fullstack/045-powiadomienia-push/index.mdx",2728],"0c910f2c":[()=>n.e(47269).then(n.bind(n,25081)),"@site/src/pages/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugCode.md",25081],"0cb16f1a":[()=>n.e(6395).then(n.bind(n,51500)),"@site/src/pages/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/links.md",51500],"0ce570b0":[()=>n.e(58172).then(n.bind(n,23618)),"@site/src/pages/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugCode.md",23618],"0ce5b853":[()=>n.e(14334).then(n.bind(n,26791)),"@site/src/pages/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionCode.md",26791],"0d0cfc9b":[()=>n.e(89731).then(n.bind(n,3323)),"@site/src/pages/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/links.md",3323],"0e149194":[()=>n.e(1173).then(n.bind(n,70064)),"@site/src/pages/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionCode.md",70064],"0e30e5b5":[()=>n.e(94866).then(n.bind(n,18412)),"@site/src/pages/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/links.md",18412],"0e839c7a":[()=>n.e(37827).then(n.bind(n,99975)),"@site/src/pages/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugCode.md",99975],"0e920236":[()=>n.e(23568).then(n.bind(n,90078)),"@site/docs/010-podstawy/040-programowanie/060-wzorce-projektowe.mdx",90078],"0ed29833":[()=>n.e(40609).then(n.bind(n,48817)),"@site/src/pages/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionCode.md",48817],"0f600836":[()=>n.e(60802).then(n.bind(n,36079)),"@site/docs/010-podstawy/120-hosting/030-darmowy-hosting-statycznych-stron-w-serwisie-github.mdx",36079],"0fc669ab":[()=>n.e(40078).then(n.bind(n,10927)),"@site/src/pages/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionCode.md",10927],"0fd0e493":[()=>n.e(27150).then(n.bind(n,96225)),"@site/docs/050-fullstack/010-autentykacja-i-autoryzacja/010-implementacja-autentykacji/050-wylogowanie.mdx",96225],"0fe87576":[()=>n.e(8756).then(n.bind(n,11227)),"@site/docs/050-fullstack/060-next-js/index.mdx",11227],"101401c2":[()=>n.e(55510).then(n.bind(n,34201)),"@site/src/pages/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionDescription.md",34201],"107ec02c":[()=>n.e(91543).then(n.bind(n,18757)),"@site/src/pages/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugDescription.md",18757],"10e8a4c3":[()=>n.e(41243).then(n.bind(n,57199)),"@site/src/pages/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionDescription.md",57199],"11aee4d5":[()=>n.e(86813).then(n.bind(n,64340)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/410-tresci-tekstowe.mdx",64340],"11c922d6":[()=>n.e(3040).then(n.t.bind(n,33132,19)),"~docs/default/tag-tags-axios-bb7.json",33132],"11ec7ab7":[()=>Promise.all([n.e(40532),n.e(3473),n.e(63037)]).then(n.bind(n,93157)),"@site/src/pages/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/index.mdx",93157],"124f8898":[()=>n.e(28096).then(n.bind(n,99418)),"@site/src/pages/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionCode.md",99418],"125b4871":[()=>n.e(89830).then(n.bind(n,44301)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/522-formularzdostepnosci-uslugi.mdx",44301],"12a24e43":[()=>n.e(10781).then(n.bind(n,52634)),"@site/docs/030-frontend/070-pakiety-i-pakowarki/010-webpack-4/030-ladowarki.mdx",52634],"12a26bf9":[()=>n.e(77922).then(n.bind(n,89892)),"@site/src/pages/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugDescription.md",89892],"132ae864":[()=>Promise.all([n.e(40532),n.e(3473),n.e(93520)]).then(n.bind(n,51937)),"@site/src/pages/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/index.mdx",51937],"1348f3b9":[()=>Promise.all([n.e(40532),n.e(3473),n.e(71154)]).then(n.bind(n,91790)),"@site/src/pages/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/index.mdx",91790],"136154f9":[()=>n.e(39227).then(n.bind(n,23039)),"@site/docs/040-backend/110-obsluga-emaili/020-darmowy-system-do-email-marketingu-osems.mdx",23039],"13716f07":[()=>n.e(81293).then(n.bind(n,95713)),"@site/docs/030-frontend/070-pakiety-i-pakowarki/010-webpack-4/070-rozwiazywanie-sciezek-importu-plikow.mdx",95713],"139744d8":[()=>Promise.all([n.e(40532),n.e(3473),n.e(57052)]).then(n.bind(n,50503)),"@site/src/pages/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/index.mdx",50503],"140039fa":[()=>n.e(85873).then(n.bind(n,48514)),"@site/docs/040-backend/090-silniki-wyszukiwania/index.mdx",48514],14108782:[()=>n.e(31226).then(n.bind(n,8008)),"@site/src/pages/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/links.md",8008],"143bde44":[()=>n.e(49444).then(n.bind(n,94148)),"@site/src/pages/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugDescription.md",94148],"14953e46":[()=>n.e(6826).then(n.bind(n,35971)),"@site/docs/030-frontend/050-seo/index.mdx",35971],"14ede2c4":[()=>n.e(86972).then(n.t.bind(n,71520,19)),"~docs/default/tag-tags-security-95f.json",71520],"1512e94b":[()=>Promise.all([n.e(40532),n.e(3473),n.e(33427)]).then(n.bind(n,66701)),"@site/src/pages/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/index.mdx",66701],"1568ef07":[()=>n.e(10457).then(n.bind(n,41349)),"@site/src/pages/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugCode.md",41349],"156f22fa":[()=>n.e(97261).then(n.bind(n,21055)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/526-detale.mdx",21055],"15961e68":[()=>n.e(20765).then(n.bind(n,66640)),"@site/src/pages/facebook.ts",66640],"15dcd4d5":[()=>n.e(95028).then(n.bind(n,35209)),"@site/src/pages/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugDescription.md",35209],"16090ce9":[()=>n.e(28714).then(n.bind(n,98858)),"@site/src/pages/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugDescription.md",98858],"163a8872":[()=>n.e(57464).then(n.bind(n,92281)),"@site/docs/010-podstawy/040-programowanie/070-frameworki-i-biblioteki.mdx",92281],"168c3334":[()=>n.e(53414).then(n.bind(n,45456)),"@site/src/pages/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionDescription.md",45456],"16a86f87":[()=>n.e(55327).then(n.bind(n,12755)),"@site/src/pages/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionCode.md",12755],"16dc8209":[()=>n.e(47391).then(n.bind(n,18096)),"@site/src/pages/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionDescription.md",18096],"16e67a08":[()=>n.e(83770).then(n.bind(n,39661)),"@site/src/pages/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugDescription.md",39661],"1729a1f6":[()=>n.e(21147).then(n.t.bind(n,76175,19)),"~docs/default/tag-tags-hardware-200.json",76175],"1762f0ac":[()=>n.e(65799).then(n.bind(n,64440)),"@site/src/pages/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionDescription.md",64440],17896441:[()=>Promise.all([n.e(40532),n.e(3473),n.e(10817),n.e(27918)]).then(n.bind(n,49657)),"@theme/DocItem",49657],"17ad4c76":[()=>n.e(26440).then(n.bind(n,59764)),"@site/docs/010-podstawy/060-jezyki-programowania/050-php.mdx",59764],"180ed2a4":[()=>n.e(47373).then(n.bind(n,12115)),"@site/src/pages/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionCode.md",12115],"187e279e":[()=>n.e(35651).then(n.bind(n,55287)),"@site/src/pages/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionDescription.md",55287],"18e1cb18":[()=>n.e(78920).then(n.bind(n,4399)),"@site/src/pages/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionCode.md",4399],"18ed0261":[()=>n.e(5926).then(n.bind(n,31374)),"@site/src/pages/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionDescription.md",31374],"1946c1b0":[()=>n.e(34194).then(n.bind(n,84736)),"@site/src/pages/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugCode.md",84736],"196d4e6a":[()=>n.e(60901).then(n.bind(n,1822)),"@site/docs/030-frontend/080-zarzadzanie-stanem/020-podstawy-reduxa/010-przygotowanie-srodowiska-deweloperskiego.mdx",1822],"19b2d324":[()=>n.e(77618).then(n.bind(n,41621)),"@site/src/pages/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugCode.md",41621],"19c4e3e4":[()=>n.e(71717).then(n.t.bind(n,82039,19)),"~docs/default/tag-tags-cr-96a.json",82039],"19ebc4f2":[()=>n.e(55056).then(n.bind(n,70377)),"@site/src/pages/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugCode.md",70377],"1a030ce7":[()=>Promise.all([n.e(40532),n.e(3473),n.e(15198)]).then(n.bind(n,40947)),"@site/src/pages/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/index.mdx",40947],"1a214f7a":[()=>n.e(7078).then(n.bind(n,67391)),"@site/docs/050-fullstack/010-autentykacja-i-autoryzacja/index.mdx",67391],"1a4c811a":[()=>n.e(53720).then(n.t.bind(n,12188,19)),"~docs/default/tag-tags-tracking-193.json",12188],"1a6a286c":[()=>n.e(65893).then(n.bind(n,87652)),"@site/src/pages/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugCode.md",87652],"1a941675":[()=>n.e(12291).then(n.bind(n,35531)),"@site/src/pages/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/links.md",35531],"1aa6d80f":[()=>n.e(31087).then(n.bind(n,75022)),"@site/src/pages/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugCode.md",75022],"1acfb591":[()=>n.e(68073).then(n.bind(n,1972)),"@site/src/pages/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionDescription.md",1972],"1adb1ec9":[()=>Promise.all([n.e(40532),n.e(3473),n.e(2268)]).then(n.bind(n,19949)),"@site/src/pages/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/index.mdx",19949],"1b3221f9":[()=>n.e(31775).then(n.bind(n,14013)),"@site/src/pages/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugDescription.md",14013],"1b6d385c":[()=>n.e(9019).then(n.bind(n,84744)),"@site/docs/030-frontend/037-biblioteki/037-biblioteki.mdx",84744],"1bc64f73":[()=>n.e(54003).then(n.t.bind(n,21460,19)),"~docs/default/tag-tags-design-patterns-b95.json",21460],"1bcc8060":[()=>n.e(29779).then(n.t.bind(n,86859,19)),"~docs/default/tag-tags-vs-code-097.json",86859],"1be78505":[()=>Promise.all([n.e(40532),n.e(29514)]).then(n.bind(n,19963)),"@theme/DocPage",19963],"1c18c48f":[()=>Promise.all([n.e(40532),n.e(3473),n.e(3918)]).then(n.bind(n,31833)),"@site/src/pages/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/index.mdx",31833],"1c64a88e":[()=>n.e(3951).then(n.bind(n,48579)),"@site/docs/030-frontend/010-html/060-zadanie-domowe.mdx",48579],"1d485327":[()=>n.e(41605).then(n.bind(n,92540)),"@site/src/pages/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionDescription.md",92540],"1df25d8f":[()=>n.e(80160).then(n.bind(n,57198)),"@site/src/pages/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugCode.md",57198],"1df59a38":[()=>n.e(73595).then(n.bind(n,39980)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/340-prototyp.mdx",39980],"1df93b7f":[()=>n.e(53237).then(n.bind(n,69754)),"@site/src/pages/index.tsx",69754],"1dff7f70":[()=>n.e(73049).then(n.t.bind(n,7220,19)),"~docs/default/tag-tags-ci-7da.json",7220],"1e5c300d":[()=>n.e(26114).then(n.bind(n,28246)),"@site/docs/010-podstawy/200-architektura-oprogramowania/index.mdx",28246],"1e971022":[()=>n.e(43022).then(n.bind(n,82522)),"@site/src/pages/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionCode.md",82522],"1eab5aea":[()=>n.e(93799).then(n.t.bind(n,76557,19)),"~docs/default/tag-tags-js-d58.json",76557],"1ecfb6a1":[()=>Promise.all([n.e(40532),n.e(3473),n.e(49724)]).then(n.bind(n,63500)),"@site/src/pages/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/index.mdx",63500],"1ee67351":[()=>n.e(93107).then(n.bind(n,28173)),"@site/src/pages/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugDescription.md",28173],"1f391b9e":[()=>Promise.all([n.e(40532),n.e(3473),n.e(10817),n.e(13085)]).then(n.bind(n,14247)),"@theme/MDXPage",14247],"1f8688ca":[()=>n.e(48783).then(n.bind(n,49764)),"@site/src/pages/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugCode.md",49764],"20c7be6f":[()=>n.e(32351).then(n.t.bind(n,94264,19)),"~docs/default/tag-tags-ia-c-e9b.json",94264],"20df82b0":[()=>n.e(74540).then(n.t.bind(n,83414,19)),"~docs/default/tag-tags-app-eef.json",83414],"20f76fe4":[()=>n.e(66018).then(n.bind(n,26215)),"@site/docs/030-frontend/080-zarzadzanie-stanem/020-podstawy-reduxa/050-zarzadzanie-wieloma-stanami.mdx",26215],"213c417c":[()=>n.e(73465).then(n.bind(n,19543)),"@site/docs/050-fullstack/060-next-js/020-mini-projekt-z-next-js/010-instalacja-niezbednego-oprogramowania.mdx",19543],"217f2f14":[()=>n.e(31109).then(n.t.bind(n,97676,19)),"~docs/default/tag-tags-bundle-085.json",97676],"219ef9cb":[()=>n.e(48723).then(n.bind(n,18913)),"@site/src/pages/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/links.md",18913],"21daf841":[()=>n.e(12219).then(n.bind(n,29301)),"@site/src/pages/100-bugow-js/wymagane-potwierdzenie.md",29301],"21fbea38":[()=>n.e(77259).then(n.bind(n,37478)),"@site/docs/050-fullstack/060-next-js/010-warsztat-next-js-2022-12-20.mdx",37478],"221c2bc4":[()=>Promise.all([n.e(40532),n.e(3473),n.e(88066)]).then(n.bind(n,1977)),"@site/src/pages/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/index.mdx",1977],"22a036fd":[()=>n.e(23683).then(n.t.bind(n,55653,19)),"~docs/default/tag-tags-db-0ce.json",55653],"22a0c2c0":[()=>n.e(63585).then(n.bind(n,80138)),"@site/docs/010-podstawy/130-dokumentacje/020-jak-tworzyc-dokumentacje.mdx",80138],"23553ba2":[()=>n.e(37181).then(n.bind(n,246)),"@site/src/pages/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionCode.md",246],23568145:[()=>n.e(26654).then(n.bind(n,95273)),"@site/docs/010-podstawy/120-hosting/010-konfiguracja-wlasnego-serwera-wirtualnego-vps copy.mdx",95273],"23beba54":[()=>n.e(44090).then(n.bind(n,56299)),"@site/src/pages/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionDescription.md",56299],"240efcf0":[()=>Promise.all([n.e(40532),n.e(3473),n.e(4955)]).then(n.bind(n,11668)),"@site/src/pages/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/index.mdx",11668],"2417b2dd":[()=>n.e(64343).then(n.bind(n,19593)),"@site/src/pages/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugCode.md",19593],"24185e05":[()=>n.e(16538).then(n.bind(n,40788)),"@site/src/pages/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/links.md",40788],"243d8faa":[()=>n.e(87630).then(n.bind(n,94032)),"@site/docs/010-podstawy/060-jezyki-programowania/010-scratch.mdx",94032],24521656:[()=>n.e(58942).then(n.bind(n,99723)),"@site/src/pages/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugDescription.md",99723],"24726fc0":[()=>n.e(98108).then(n.bind(n,3234)),"@site/src/pages/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugCode.md",3234],"2542a404":[()=>n.e(58387).then(n.bind(n,23791)),"@site/docs/030-frontend/030-javascript/060-wprowadzenie-w-typescript.mdx",23791],"256c42fd":[()=>n.e(12983).then(n.bind(n,32730)),"@site/docs/050-fullstack/010-autentykacja-i-autoryzacja/010-implementacja-autentykacji/040-obsluga-sesji.mdx",32730],"258699c7":[()=>n.e(9203).then(n.bind(n,14383)),"@site/src/pages/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugCode.md",14383],"25ebd437":[()=>Promise.all([n.e(40532),n.e(3473),n.e(44759)]).then(n.bind(n,95241)),"@site/src/pages/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/index.mdx",95241],"2605d115":[()=>n.e(8974).then(n.bind(n,31471)),"@site/docs/030-frontend/080-zarzadzanie-stanem/020-podstawy-reduxa/090-asynchroniczne-akcje.mdx",31471],"2610f6c0":[()=>n.e(1645).then(n.bind(n,77160)),"@site/src/pages/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionCode.md",77160],"262efa03":[()=>n.e(66714).then(n.t.bind(n,40878,19)),"~docs/default/tag-tags-vim-c55.json",40878],"2686a605":[()=>n.e(31963).then(n.t.bind(n,85663,19)),"~docs/default/tag-tags-frontend-94c.json",85663],"26a6d6fe":[()=>Promise.all([n.e(16214),n.e(13666)]).then(n.bind(n,8060)),"@site/src/pages/100-bugow-js/index.mdx",8060],"26d61991":[()=>Promise.all([n.e(40532),n.e(3473),n.e(352)]).then(n.bind(n,65613)),"@site/src/pages/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/index.mdx",65613],"26ddc48b":[()=>n.e(83706).then(n.bind(n,32502)),"@site/src/pages/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugDescription.md",32502],"274aa25e":[()=>n.e(47457).then(n.bind(n,17343)),"@site/docs/050-fullstack/055-sledzenie/index.mdx",17343],"27ac0aac":[()=>n.e(91862).then(n.bind(n,8592)),"@site/src/pages/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionDescription.md",8592],"27ba00b1":[()=>n.e(16667).then(n.bind(n,26276)),"@site/docs/030-frontend/080-zarzadzanie-stanem/020-podstawy-reduxa/080-podzial-kodu-na-mniejsze-pliki.mdx",26276],"27e62540":[()=>n.e(58039).then(n.bind(n,93829)),"@site/docs/040-backend/040-bazy-danych/010-mapowanie-obiektowo-relacyjne.mdx",93829],"2800bf0b":[()=>n.e(97288).then(n.bind(n,60791)),"@site/src/pages/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/links.md",60791],"28ac91cf":[()=>Promise.all([n.e(40532),n.e(97398)]).then(n.bind(n,2305)),"@site/docs/020-ux-ui/020-praktyczne-szkolenie-projektowania-ux-ui/index.mdx",2305],"29256a58":[()=>n.e(68965).then(n.bind(n,53005)),"@site/src/pages/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/links.md",53005],"29ad98c9":[()=>n.e(12493).then(n.bind(n,51118)),"@site/src/pages/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/links.md",51118],"2a1cbcea":[()=>n.e(52622).then(n.bind(n,32205)),"@site/src/pages/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugCode.md",32205],"2a6a6bb2":[()=>n.e(39547).then(n.bind(n,10960)),"@site/docs/050-fullstack/000-fullstack/index.mdx",10960],"2ab483d6":[()=>Promise.all([n.e(40532),n.e(3473),n.e(29653)]).then(n.bind(n,79017)),"@site/src/pages/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/index.mdx",79017],"2b0866cd":[()=>n.e(37065).then(n.bind(n,24052)),"@site/src/pages/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugDescription.md",24052],"2b14d38f":[()=>n.e(63012).then(n.bind(n,36716)),"@site/src/pages/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/links.md",36716],"2b9af6db":[()=>n.e(88020).then(n.bind(n,77854)),"@site/docs/010-podstawy/050-systemy-operacyjne/index.mdx",77854],"2b9b2b66":[()=>n.e(84702).then(n.bind(n,73893)),"@site/src/pages/digitalocean.ts",73893],"2bd03153":[()=>n.e(15228).then(n.bind(n,35102)),"@site/docs/030-frontend/080-zarzadzanie-stanem/020-podstawy-reduxa/060-predefiniowane-typy-akcji-i-kreatory-akcji.mdx",35102],"2c0d42e6":[()=>n.e(21171).then(n.bind(n,34004)),"@site/src/pages/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugCode.md",34004],"2c3ac257":[()=>n.e(96581).then(n.bind(n,69075)),"@site/docs/030-frontend/080-zarzadzanie-stanem/index.mdx",69075],"2c3f2294":[()=>n.e(80697).then(n.bind(n,53383)),"@site/src/pages/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/links.md",53383],"2c428535":[()=>n.e(91832).then(n.bind(n,92907)),"@site/src/pages/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugDescription.md",92907],"2c71b8c7":[()=>n.e(80772).then(n.bind(n,26100)),"@site/src/pages/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionDescription.md",26100],"2c860247":[()=>n.e(10437).then(n.bind(n,20227)),"@site/docs/040-backend/020-wierwsz-polecen/index.mdx",20227],"2ce9e165":[()=>n.e(79039).then(n.bind(n,70257)),"@site/src/pages/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugDescription.md",70257],"2d50d312":[()=>n.e(87332).then(n.bind(n,34913)),"@site/src/pages/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugDescription.md",34913],"2d9b47eb":[()=>n.e(53428).then(n.bind(n,28768)),"@site/docs/040-backend/100-brokery-wiadomosci/index.mdx",28768],"2e3c4440":[()=>n.e(30251).then(n.t.bind(n,4736,19)),"~docs/default/tag-tags-nginx-4be.json",4736],"2ebb811d":[()=>n.e(50114).then(n.bind(n,60050)),"@site/src/pages/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/links.md",60050],"2eeb76f5":[()=>Promise.all([n.e(40532),n.e(3473),n.e(36942)]).then(n.bind(n,59203)),"@site/src/pages/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/index.mdx",59203],"2ef7432a":[()=>n.e(87022).then(n.bind(n,41436)),"@site/docs/030-frontend/040-dostepnosc/index.mdx",41436],"2fa374a5":[()=>n.e(71617).then(n.bind(n,76673)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/110-korzystanie-z-figmy.mdx",76673],"2fae5484":[()=>n.e(54707).then(n.bind(n,11024)),"@site/src/pages/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionDescription.md",11024],"2faf5f8d":[()=>n.e(75333).then(n.bind(n,77171)),"@site/src/pages/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugCode.md",77171],"3002d84b":[()=>n.e(85363).then(n.t.bind(n,48236,19)),"~docs/default/tag-tags-vps-c0f.json",48236],"300c37de":[()=>n.e(33212).then(n.bind(n,88294)),"@site/src/pages/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionDescription.md",88294],"303e47b6":[()=>n.e(56286).then(n.t.bind(n,95530,19)),"~docs/default/tag-tags-vite-488.json",95530],"304051a0":[()=>n.e(81930).then(n.bind(n,64937)),"@site/src/pages/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionDescription.md",64937],"30be5cfe":[()=>Promise.all([n.e(40532),n.e(3473),n.e(11979)]).then(n.bind(n,64193)),"@site/src/pages/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/index.mdx",64193],"30d40704":[()=>n.e(49672).then(n.bind(n,16332)),"@site/src/pages/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugCode.md",16332],31816458:[()=>Promise.all([n.e(40532),n.e(3473),n.e(39304)]).then(n.bind(n,29754)),"@site/src/pages/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/index.mdx",29754],"31c250e4":[()=>Promise.all([n.e(40532),n.e(3473),n.e(56712)]).then(n.bind(n,25161)),"@site/src/pages/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/index.mdx",25161],"3299ddf7":[()=>n.e(63323).then(n.bind(n,81027)),"@site/docs/030-frontend/020-css/020-organizacja-styli-css-i-preprocesory.mdx",81027],"32b6cb06":[()=>n.e(99360).then(n.bind(n,28016)),"@site/src/pages/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionCode.md",28016],"32c84f75":[()=>n.e(58365).then(n.bind(n,13811)),"@site/src/pages/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionCode.md",13811],"3315e240":[()=>n.e(13069).then(n.bind(n,87066)),"@site/src/pages/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionCode.md",87066],"332a8094":[()=>n.e(4124).then(n.bind(n,26747)),"@site/src/pages/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionCode.md",26747],"335c931a":[()=>n.e(3036).then(n.bind(n,18304)),"@site/src/pages/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionCode.md",18304],"34696ee0":[()=>n.e(16279).then(n.bind(n,2255)),"@site/src/pages/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugDescription.md",2255],"3482ea4d":[()=>n.e(23066).then(n.bind(n,41195)),"@site/src/pages/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/links.md",41195],"3484e3da":[()=>n.e(93013).then(n.bind(n,29022)),"@site/src/pages/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugDescription.md",29022],"34dc295a":[()=>n.e(92576).then(n.bind(n,98661)),"@site/docs/010-podstawy/070-kontrola-wersji/010-podstawy-gita/090-korzystanie-z-dokumentacji.mdx",98661],"34e24484":[()=>Promise.all([n.e(40532),n.e(3473),n.e(10679)]).then(n.bind(n,32164)),"@site/src/pages/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/index.mdx",32164],"35121e98":[()=>n.e(49501).then(n.bind(n,77271)),"@site/docs/020-ux-ui/020-praktyczne-szkolenie-projektowania-ux-ui/010-nagranie-z-webinaru-ux.mdx",77271],"355ae17e":[()=>n.e(39092).then(n.bind(n,58643)),"@site/src/pages/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugCode.md",58643],"358255f4":[()=>n.e(16617).then(n.t.bind(n,73712,19)),"~docs/default/tag-tags-os-e26.json",73712],"35acaae7":[()=>Promise.all([n.e(40532),n.e(3473),n.e(12126)]).then(n.bind(n,64832)),"@site/src/pages/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/index.mdx",64832],"35e8cbe2":[()=>n.e(95486).then(n.bind(n,43733)),"@site/src/pages/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugCode.md",43733],"35f22c59":[()=>n.e(86522).then(n.bind(n,15268)),"@site/src/pages/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/links.md",15268],"35f61e76":[()=>n.e(2236).then(n.bind(n,74546)),"@site/docs/010-podstawy/190-edytory-kodu/010-formatowanie-kodu.mdx",74546],"360b6ef2":[()=>Promise.all([n.e(40532),n.e(3473),n.e(1876)]).then(n.bind(n,16743)),"@site/src/pages/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/index.mdx",16743],"365cd1f4":[()=>n.e(51620).then(n.bind(n,72159)),"@site/docs/050-fullstack/050-przetwarzanie-platnosci/index.mdx",72159],"3683b838":[()=>Promise.all([n.e(40532),n.e(3473),n.e(6202)]).then(n.bind(n,61395)),"@site/src/pages/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/index.mdx",61395],"36daacc8":[()=>n.e(35202).then(n.t.bind(n,94999,19)),"~docs/default/tag-tags-libs-f5f.json",94999],"3720c009":[()=>Promise.all([n.e(40532),n.e(13751)]).then(n.bind(n,9861)),"@theme/DocTagsListPage",9861],"372d5953":[()=>n.e(68581).then(n.bind(n,38864)),"@site/src/pages/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/links.md",38864],"380577eb":[()=>n.e(21744).then(n.bind(n,64206)),"@site/src/pages/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionDescription.md",64206],"3897ba98":[()=>n.e(88155).then(n.bind(n,54233)),"@site/src/pages/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugCode.md",54233],"38e7d649":[()=>n.e(57570).then(n.bind(n,99868)),"@site/docs/030-frontend/010-html/010-wprowadzenie-do-htmla.mdx",99868],"3989dfa9":[()=>n.e(67158).then(n.bind(n,1322)),"@site/src/pages/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionDescription.md",1322],"39e28333":[()=>n.e(66664).then(n.bind(n,23997)),"@site/src/pages/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugCode.md",23997],"3a826b7d":[()=>n.e(62623).then(n.bind(n,64923)),"@site/src/pages/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugDescription.md",64923],"3a86717d":[()=>n.e(41686).then(n.bind(n,9321)),"@site/docs/030-frontend/030-javascript/020-node-js-na-frontendzie copy.mdx",9321],"3ad6bc89":[()=>Promise.all([n.e(40532),n.e(3473),n.e(59298)]).then(n.bind(n,107)),"@site/src/pages/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/index.mdx",107],"3aed7afa":[()=>Promise.all([n.e(40532),n.e(3473),n.e(11412)]).then(n.bind(n,87139)),"@site/src/pages/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/index.mdx",87139],"3af07524":[()=>n.e(49376).then(n.bind(n,60419)),"@site/src/pages/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/links.md",60419],"3b350703":[()=>n.e(27656).then(n.bind(n,53435)),"@site/docs/030-frontend/000-frontend/index.mdx",53435],"3b35082a":[()=>n.e(3877).then(n.bind(n,87575)),"@site/src/pages/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionCode.md",87575],"3b7d4c88":[()=>n.e(42424).then(n.bind(n,18706)),"@site/docs/010-podstawy/070-kontrola-wersji/020-github.mdx",18706],"3bd3cc6c":[()=>n.e(45622).then(n.bind(n,15143)),"@site/docs/020-ux-ui/000-projektowanie-ux-ui.mdx",15143],"3c1a96f3":[()=>n.e(73299).then(n.t.bind(n,88608,19)),"~docs/default/tag-tags-bug-ba9.json",88608],"3c2a6dbe":[()=>n.e(66695).then(n.bind(n,18481)),"@site/src/pages/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionCode.md",18481],"3c6537df":[()=>n.e(16622).then(n.bind(n,11806)),"@site/src/pages/youtube.ts",11806],"3cc29c87":[()=>n.e(27703).then(n.t.bind(n,30892,19)),"~docs/default/tag-tags-mongo-db-67e.json",30892],"3ce88d35":[()=>n.e(98325).then(n.bind(n,32649)),"@site/src/pages/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugDescription.md",32649],"3d92781a":[()=>n.e(51057).then(n.t.bind(n,45718,19)),"~docs/default/tag-tags-database-551.json",45718],"3dfe6802":[()=>n.e(12725).then(n.t.bind(n,5963,19)),"~docs/default/tag-tags-smtp-d95.json",5963],"3e763eb6":[()=>n.e(67754).then(n.bind(n,80287)),"@site/docs/030-frontend/080-zarzadzanie-stanem/020-podstawy-reduxa/100-redux-thunk.mdx",80287],"3ecc7b49":[()=>n.e(23334).then(n.bind(n,51028)),"@site/src/pages/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionCode.md",51028],"402ad4fa":[()=>Promise.all([n.e(40532),n.e(3473),n.e(35497)]).then(n.bind(n,99937)),"@site/src/pages/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/index.mdx",99937],"4050c730":[()=>n.e(48613).then(n.bind(n,25012)),"@site/src/pages/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/links.md",25012],"40921b67":[()=>n.e(63215).then(n.bind(n,406)),"@site/docs/030-frontend/035-react/020-tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni.mdx",406],"409248a3":[()=>n.e(73860).then(n.t.bind(n,12683,19)),"~docs/default/tag-tags-self-hosting-d02.json",12683],"40b0947d":[()=>n.e(9625).then(n.bind(n,2181)),"@site/src/pages/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugDescription.md",2181],"40dee476":[()=>n.e(40824).then(n.bind(n,98932)),"@site/src/pages/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionCode.md",98932],"40e5047b":[()=>n.e(48958).then(n.bind(n,67617)),"@site/docs/030-frontend/035-react/010-memoizowanie-cacheowanie-na-przykladzie-reacta.mdx",67617],"41027c2e":[()=>n.e(2817).then(n.bind(n,75023)),"@site/src/pages/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionCode.md",75023],"41154ebd":[()=>n.e(87175).then(n.bind(n,11464)),"@site/src/pages/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionCode.md",11464],"41239f1e":[()=>n.e(51876).then(n.bind(n,6846)),"@site/src/pages/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionCode.md",6846],42020487:[()=>n.e(96536).then(n.bind(n,52151)),"@site/docs/040-backend/120-infrastuktura/index.mdx",52151],"4217490a":[()=>n.e(7688).then(n.bind(n,43046)),"@site/src/pages/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/links.md",43046],"422536d8":[()=>n.e(66079).then(n.bind(n,69963)),"@site/docs/030-frontend/010-html/030-tekst.mdx",69963],42417097:[()=>n.e(21536).then(n.bind(n,83680)),"@site/docs/010-podstawy/220-praca-w-it/030-backend-developer.mdx",83680],"433883a5":[()=>Promise.all([n.e(40532),n.e(3473),n.e(65204)]).then(n.bind(n,3169)),"@site/src/pages/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/index.mdx",3169],"435cbe30":[()=>n.e(15111).then(n.bind(n,64718)),"@site/docs/040-backend/030-api-zaplecza/010-restful-api.mdx",64718],"43ae16eb":[()=>n.e(9991).then(n.bind(n,19739)),"@site/src/pages/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugCode.md",19739],"43fe1f45":[()=>n.e(53554).then(n.bind(n,53656)),"@site/src/pages/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionCode.md",53656],"449a6de5":[()=>n.e(21724).then(n.bind(n,58515)),"@site/src/pages/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugCode.md",58515],"44aca286":[()=>n.e(85311).then(n.bind(n,31750)),"@site/src/pages/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionCode.md",31750],"454290ab":[()=>n.e(92429).then(n.bind(n,51545)),"@site/src/pages/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionCode.md",51545],"454dc8ce":[()=>n.e(92445).then(n.bind(n,70223)),"@site/docs/010-podstawy/070-kontrola-wersji/010-inspekcja-kodu.mdx",70223],"45805a7d":[()=>n.e(29964).then(n.bind(n,86400)),"@site/src/pages/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugCode.md",86400],"45aff26c":[()=>n.e(99606).then(n.bind(n,43294)),"@site/src/pages/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugDescription.md",43294],"45c1aab2":[()=>n.e(74304).then(n.t.bind(n,70005,19)),"~docs/default/tag-tags-email-e39.json",70005],"45d22c4c":[()=>n.e(40718).then(n.t.bind(n,45261,19)),"~docs/default/tag-tags-routing-cfa.json",45261],"4618a95d":[()=>n.e(81932).then(n.bind(n,87709)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/331-przygotowanie-elementow-szkieletu.mdx",87709],"46476aff":[()=>n.e(81414).then(n.bind(n,69585)),"@site/docs/040-backend/110-obsluga-emaili/010-przekierowywanie-emaili-przez-cloudflare.mdx",69585],"467bf746":[()=>n.e(85137).then(n.t.bind(n,91675,19)),"~docs/default/tag-tags-uptime-c86.json",91675],"46c87ad9":[()=>n.e(36822).then(n.bind(n,81528)),"@site/docs/010-podstawy/050-systemy-operacyjne/040-chrome-os.mdx",81528],"46d7704f":[()=>n.e(7625).then(n.bind(n,83542)),"@site/src/pages/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionDescription.md",83542],"46dfeda4":[()=>n.e(2819).then(n.bind(n,61130)),"@site/src/pages/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionCode.md",61130],"47b051b7":[()=>n.e(6010).then(n.bind(n,29899)),"@site/docs/030-frontend/080-zarzadzanie-stanem/020-podstawy-reduxa/040-modyfikowanie-stanu-pojedynczych-elementow.mdx",29899],"47e1c281":[()=>n.e(2575).then(n.bind(n,75579)),"@site/src/pages/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionCode.md",75579],"4831cb31":[()=>Promise.all([n.e(40532),n.e(3473),n.e(39706)]).then(n.bind(n,46233)),"@site/src/pages/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/index.mdx",46233],"483304b7":[()=>n.e(61238).then(n.bind(n,7842)),"@site/src/pages/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugCode.md",7842],"486ea28d":[()=>Promise.all([n.e(40532),n.e(3473),n.e(76393)]).then(n.bind(n,50529)),"@site/src/pages/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/index.mdx",50529],"4871ccb0":[()=>n.e(9965).then(n.t.bind(n,10801,19)),"~docs/default/tag-tags-iaa-s-04d.json",10801],"4896f5b9":[()=>Promise.all([n.e(40532),n.e(3473),n.e(73061)]).then(n.bind(n,7804)),"@site/src/pages/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/index.mdx",7804],"48f78a0f":[()=>n.e(37949).then(n.t.bind(n,40358,19)),"~docs/default/tag-tags-binary-ca4.json",40358],"4968a63a":[()=>n.e(71600).then(n.bind(n,55816)),"@site/src/pages/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionCode.md",55816],"49d00c1e":[()=>n.e(48070).then(n.bind(n,70453)),"@site/src/pages/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionCode.md",70453],"4a2ee408":[()=>n.e(23838).then(n.bind(n,45345)),"@site/src/pages/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionDescription.md",45345],"4a3b31c2":[()=>Promise.all([n.e(40532),n.e(3473),n.e(43164)]).then(n.bind(n,92851)),"@site/src/pages/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/index.mdx",92851],"4a9578c3":[()=>n.e(78411).then(n.bind(n,74226)),"@site/src/pages/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/links.md",74226],"4aa65195":[()=>n.e(43042).then(n.bind(n,71124)),"@site/src/pages/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugCode.md",71124],"4b0b58c4":[()=>n.e(98348).then(n.bind(n,5423)),"@site/src/pages/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/links.md",5423],"4b71967f":[()=>n.e(25357).then(n.bind(n,22378)),"@site/src/pages/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugDescription.md",22378],"4b7b9211":[()=>Promise.all([n.e(40532),n.e(3473),n.e(30836)]).then(n.bind(n,3058)),"@site/src/pages/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/index.mdx",3058],"4bee98d3":[()=>n.e(60262).then(n.bind(n,59345)),"@site/src/pages/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/links.md",59345],"4c337b15":[()=>Promise.all([n.e(40532),n.e(3473),n.e(21944)]).then(n.bind(n,13859)),"@site/src/pages/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/index.mdx",13859],"4c37a2f9":[()=>n.e(48363).then(n.t.bind(n,30835,19)),"~docs/default/tag-tags-cms-bee.json",30835],"4c9f1066":[()=>n.e(15797).then(n.bind(n,78446)),"@site/src/pages/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugDescription.md",78446],"4ccefd11":[()=>n.e(68636).then(n.bind(n,54081)),"@site/src/pages/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/links.md",54081],"4d60d2e9":[()=>n.e(99585).then(n.bind(n,71600)),"@site/docs/040-backend/000-projektowanie-backendu/index.mdx",71600],"4d98f1ea":[()=>n.e(5945).then(n.bind(n,71780)),"@site/src/pages/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugCode.md",71780],"4db381fd":[()=>Promise.all([n.e(40532),n.e(3473),n.e(76080)]).then(n.bind(n,29971)),"@site/src/pages/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/index.mdx",29971],"4dd85953":[()=>Promise.all([n.e(40532),n.e(3473),n.e(85269)]).then(n.bind(n,62601)),"@site/src/pages/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/index.mdx",62601],"4e05102b":[()=>n.e(95719).then(n.bind(n,67546)),"@site/src/pages/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugDescription.md",67546],"4e7f9ab0":[()=>n.e(80360).then(n.t.bind(n,23424,19)),"~docs/default/tag-tags-tdd-ea2.json",23424],"4e84773e":[()=>n.e(42458).then(n.bind(n,34286)),"@site/src/pages/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionDescription.md",34286],"4eaca2fe":[()=>n.e(25385).then(n.bind(n,77391)),"@site/src/pages/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugDescription.md",77391],"4ee797cf":[()=>n.e(97207).then(n.t.bind(n,8378,19)),"~docs/default/tag-tags-ux-3b2.json",8378],"4efe941e":[()=>n.e(49096).then(n.bind(n,24788)),"@site/src/pages/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionDescription.md",24788],"4f499110":[()=>n.e(8649).then(n.bind(n,39300)),"@site/docs/010-podstawy/180-bezpieczenstwo/index.mdx",39300],"4f4efa3d":[()=>n.e(41563).then(n.bind(n,83896)),"@site/src/pages/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/links.md",83896],"4f5b3fa9":[()=>n.e(4013).then(n.bind(n,75164)),"@site/src/pages/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionCode.md",75164],"4fcc4f38":[()=>n.e(43342).then(n.bind(n,43434)),"@site/src/pages/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionDescription.md",43434],"4fe941f7":[()=>n.e(17858).then(n.bind(n,97511)),"@site/src/pages/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/links.md",97511],"4ff7731a":[()=>n.e(10449).then(n.bind(n,54061)),"@site/src/pages/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugDescription.md",54061],"504f1ec6":[()=>n.e(45018).then(n.t.bind(n,73529,19)),"~docs/default/tag-tags-ram-9cc.json",73529],"509f8206":[()=>n.e(26124).then(n.bind(n,21084)),"@site/docs/030-frontend/080-zarzadzanie-stanem/010-redux/index.mdx",21084],"50c21f40":[()=>n.e(89885).then(n.bind(n,86042)),"@site/src/pages/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugCode.md",86042],"50ee47cf":[()=>n.e(31485).then(n.bind(n,97593)),"@site/docs/010-podstawy/070-kontrola-wersji/010-podstawy-gita/050-tymczasowe-przechowywanie-zmian.mdx",97593],"51157f77":[()=>n.e(40605).then(n.bind(n,75116)),"@site/docs/050-fullstack/060-next-js/020-mini-projekt-z-next-js/060-hosting-aplikacji-w-serwisie-vercel.mdx",75116],"5151f759":[()=>n.e(35083).then(n.bind(n,83360)),"@site/docs/030-frontend/060-komponenty/index.mdx",83360],51535747:[()=>n.e(79187).then(n.t.bind(n,99866,19)),"~docs/default/tag-tags-algorytm-ebf.json",99866],"518c9791":[()=>n.e(83310).then(n.bind(n,76004)),"@site/docs/010-podstawy/220-praca-w-it/020-frontend-developer.mdx",76004],"51f9fdd3":[()=>n.e(24434).then(n.bind(n,6744)),"@site/docs/010-podstawy/120-hosting/index.mdx",6744],"522d4eee":[()=>n.e(62563).then(n.bind(n,94887)),"@site/src/pages/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugDescription.md",94887],"52385b6d":[()=>n.e(78624).then(n.bind(n,99466)),"@site/src/pages/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionCode.md",99466],"5243faf5":[()=>Promise.all([n.e(40532),n.e(3473),n.e(98289)]).then(n.bind(n,75461)),"@site/src/pages/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/index.mdx",75461],"52916f6f":[()=>n.e(40843).then(n.bind(n,45260)),"@site/src/pages/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionDescription.md",45260],"5299bf45":[()=>n.e(65956).then(n.bind(n,53549)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/310-schemat-dzialan-uzytkownika.mdx",53549],"531e550b":[()=>n.e(62331).then(n.bind(n,57039)),"@site/src/pages/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugCode.md",57039],"5346f0db":[()=>n.e(82989).then(n.bind(n,31716)),"@site/src/pages/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/links.md",31716],"539fe6c4":[()=>n.e(1080).then(n.bind(n,73422)),"@site/src/pages/instagram.ts",73422],"53ca6561":[()=>n.e(42342).then(n.bind(n,47929)),"@site/src/pages/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionDescription.md",47929],"5455a04e":[()=>n.e(37249).then(n.bind(n,87264)),"@site/src/pages/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionDescription.md",87264],"54986be2":[()=>n.e(71515).then(n.bind(n,42914)),"@site/docs/020-ux-ui/010-projektowanie-vs-kodowanie.mdx",42914],"549e43c4":[()=>n.e(46632).then(n.bind(n,97478)),"@site/src/pages/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/links.md",97478],"54d23b05":[()=>n.e(68598).then(n.bind(n,98901)),"@site/src/pages/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionCode.md",98901],"54d4bf9a":[()=>n.e(49256).then(n.bind(n,50001)),"@site/src/pages/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionCode.md",50001],"55960ee5":[()=>n.e(74121).then(n.t.bind(n,37245,19)),"~docs/default/tags-list-current-prop-15a.json",37245],"55a313fe":[()=>n.e(12433).then(n.t.bind(n,54354,19)),"~docs/default/tag-tags-mocha-a7e.json",54354],"5617f217":[()=>n.e(10656).then(n.bind(n,28108)),"@site/src/pages/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugDescription.md",28108],"563166a9":[()=>n.e(31712).then(n.t.bind(n,17447,19)),"~docs/default/tag-tags-backend-b14.json",17447],"56ebfa9f":[()=>n.e(14765).then(n.bind(n,97926)),"@site/src/pages/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionDescription.md",97926],"580578b2":[()=>n.e(18903).then(n.t.bind(n,23376,19)),"~docs/default/tag-tags-ssd-ed7.json",23376],"580d32c1":[()=>n.e(74539).then(n.bind(n,77143)),"@site/src/pages/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionCode.md",77143],"5818cd7c":[()=>n.e(22603).then(n.bind(n,34263)),"@site/src/pages/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugCode.md",34263],58341650:[()=>n.e(52629).then(n.t.bind(n,50658,19)),"~docs/default/tag-tags-cd-444.json",50658],"584b5ba5":[()=>n.e(34481).then(n.bind(n,17519)),"@site/src/pages/100-bugow-js/wypisanie.mdx",17519],"587c2fe9":[()=>n.e(58053).then(n.bind(n,9020)),"@site/src/pages/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugDescription.md",9020],"5925d5cc":[()=>n.e(14954).then(n.bind(n,83969)),"@site/src/pages/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugCode.md",83969],"593ee81a":[()=>n.e(1835).then(n.bind(n,51346)),"@site/src/pages/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugCode.md",51346],"59a1c7d6":[()=>n.e(92237).then(n.bind(n,84219)),"@site/docs/030-frontend/070-pakiety-i-pakowarki/010-webpack-4/080-podzial-plikow-konfiguracyjnych.mdx",84219],"59b32e70":[()=>n.e(96888).then(n.bind(n,55010)),"@site/src/pages/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionDescription.md",55010],"59d2fa7f":[()=>n.e(22180).then(n.t.bind(n,91389,19)),"~docs/default/tag-tags-solr-b7e.json",91389],"59ea7eb4":[()=>n.e(44921).then(n.bind(n,97057)),"@site/src/pages/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugCode.md",97057],"59ffd614":[()=>n.e(12899).then(n.bind(n,59880)),"@site/docs/030-frontend/070-pakiety-i-pakowarki/010-webpack-4/040-generowanie-pliku-html-z-szablonu.mdx",59880],"5a273cd6":[()=>n.e(38893).then(n.bind(n,68076)),"@site/docs/030-frontend/020-css/030-debugowanie-css-przez-narzedzia-developerskie.mdx",68076],"5a2a6530":[()=>n.e(31665).then(n.bind(n,8529)),"@site/src/pages/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugCode.md",8529],"5a2e7027":[()=>n.e(69531).then(n.t.bind(n,24480,19)),"~docs/default/tag-tags-rabbit-mq-14d.json",24480],"5a3e2929":[()=>n.e(55257).then(n.bind(n,64829)),"@site/src/pages/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/links.md",64829],"5a5a80ab":[()=>Promise.all([n.e(40532),n.e(3473),n.e(96643)]).then(n.bind(n,6935)),"@site/src/pages/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/index.mdx",6935],"5a5db26c":[()=>n.e(30554).then(n.bind(n,80863)),"@site/src/pages/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/links.md",80863],"5a9db848":[()=>n.e(13462).then(n.bind(n,47869)),"@site/src/pages/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugCode.md",47869],"5adcdf96":[()=>n.e(23914).then(n.t.bind(n,11230,19)),"~docs/default/tag-tags-big-o-cbf.json",11230],"5ae73cbf":[()=>Promise.all([n.e(40532),n.e(3473),n.e(69762)]).then(n.bind(n,21863)),"@site/src/pages/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/index.mdx",21863],"5b9a35db":[()=>n.e(76196).then(n.bind(n,12612)),"@site/docs/010-podstawy/010-sprzet-komputerowy/000-system-binarny/010-podstawy-systemu-binarnego.mdx",12612],"5c06b674":[()=>n.e(651).then(n.bind(n,13705)),"@site/docs/010-podstawy/060-jezyki-programowania/030-python.mdx",13705],"5c30c7a9":[()=>n.e(20116).then(n.bind(n,43858)),"@site/src/pages/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugCode.md",43858],"5c73be13":[()=>n.e(32736).then(n.t.bind(n,68013,19)),"~docs/default/tag-tags-memo-269.json",68013],"5d33ff88":[()=>n.e(67812).then(n.t.bind(n,68943,19)),"~docs/default/tag-tags-rest-863.json",68943],"5db77b44":[()=>n.e(99807).then(n.t.bind(n,87683,19)),"~docs/default/tag-tags-rx-js-54b.json",87683],"5e014a9c":[()=>n.e(15164).then(n.bind(n,85465)),"@site/src/pages/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionCode.md",85465],"5e27c3f6":[()=>n.e(33280).then(n.t.bind(n,85462,19)),"~docs/default/tag-tags-windows-817.json",85462],"5e2a3367":[()=>n.e(92162).then(n.bind(n,68629)),"@site/src/pages/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/links.md",68629],"5e39e38e":[()=>n.e(54307).then(n.bind(n,11903)),"@site/src/pages/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugCode.md",11903],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"5f48632d":[()=>n.e(19374).then(n.t.bind(n,3911,19)),"~docs/default/tag-tags-integration-6e4.json",3911],"5f5b5355":[()=>Promise.all([n.e(40532),n.e(3473),n.e(85233)]).then(n.bind(n,20701)),"@site/src/pages/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/index.mdx",20701],"5f5bb4ac":[()=>n.e(45874).then(n.t.bind(n,39060,19)),"~docs/default/tag-tags-pay-u-329.json",39060],"5fe6d715":[()=>n.e(54680).then(n.bind(n,15792)),"@site/docs/010-podstawy/220-praca-w-it/index.mdx",15792],"5fea0253":[()=>n.e(8276).then(n.bind(n,45279)),"@site/src/pages/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionCode.md",45279],"601f3968":[()=>n.e(26235).then(n.bind(n,32808)),"@site/src/pages/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionCode.md",32808],"60709d59":[()=>n.e(18842).then(n.t.bind(n,86068,19)),"~docs/default/tag-tags-kernel-0ca.json",86068],"60c17965":[()=>n.e(44156).then(n.t.bind(n,84489,19)),"~docs/default/tag-tags-web-components-961.json",84489],"60ea458f":[()=>n.e(1404).then(n.bind(n,13973)),"@site/src/pages/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugDescription.md",13973],"60ee9a2b":[()=>n.e(58613).then(n.bind(n,70512)),"@site/docs/010-podstawy/010-sprzet-komputerowy/index.mdx",70512],"6178c87f":[()=>Promise.all([n.e(40532),n.e(3473),n.e(94878)]).then(n.bind(n,20508)),"@site/src/pages/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/index.mdx",20508],"61ae6399":[()=>n.e(56674).then(n.t.bind(n,44660,19)),"~docs/default/tag-tags-ssh-b02.json",44660],"61b4440e":[()=>n.e(76150).then(n.bind(n,72328)),"@site/src/pages/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionDescription.md",72328],"6220a0fe":[()=>n.e(72189).then(n.t.bind(n,7906,19)),"~docs/default/tag-tags-next-js-b85.json",7906],"62239b99":[()=>n.e(4603).then(n.bind(n,65822)),"@site/src/pages/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionDescription.md",65822],"6293a2f2":[()=>n.e(65965).then(n.bind(n,70324)),"@site/docs/030-frontend/020-css/010-tailwind-css/index.mdx",70324],"62ab293b":[()=>n.e(40370).then(n.t.bind(n,5909,19)),"~docs/default/tag-tags-notification-61b.json",5909],"62e3e103":[()=>n.e(13310).then(n.bind(n,93971)),"@site/src/pages/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugDescription.md",93971],"6375d944":[()=>n.e(48040).then(n.bind(n,94407)),"@site/src/pages/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugCode.md",94407],"6429ca61":[()=>n.e(24805).then(n.bind(n,77150)),"@site/src/pages/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionCode.md",77150],"64df448d":[()=>n.e(62072).then(n.bind(n,63874)),"@site/src/pages/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionDescription.md",63874],"6553856a":[()=>n.e(73006).then(n.bind(n,83450)),"@site/src/pages/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugDescription.md",83450],"660a9e4e":[()=>n.e(81573).then(n.bind(n,36431)),"@site/src/pages/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionDescription.md",36431],"6673f904":[()=>n.e(33484).then(n.bind(n,36655)),"@site/src/pages/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugDescription.md",36655],"66a81bdd":[()=>n.e(92532).then(n.bind(n,80548)),"@site/docs/030-frontend/010-html/040-obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji.mdx",80548],"66e4e730":[()=>n.e(65553).then(n.t.bind(n,32426,19)),"~docs/default/tag-tags-cloudflare-d8f.json",32426],"672b19fc":[()=>n.e(26782).then(n.t.bind(n,74119,19)),"~docs/default/tag-tags-i-o-001.json",74119],"679161de":[()=>n.e(40941).then(n.t.bind(n,83769,19)),"/home/runner/work/codisity.pl/codisity.pl/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],"679c6249":[()=>n.e(63206).then(n.bind(n,96845)),"@site/src/pages/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugDescription.md",96845],"67c73e4e":[()=>Promise.all([n.e(40532),n.e(29139)]).then(n.bind(n,54617)),"@site/docs/030-frontend/080-zarzadzanie-stanem/020-podstawy-reduxa/index.mdx",54617],"6833bf4e":[()=>n.e(9591).then(n.bind(n,22466)),"@site/docs/010-podstawy/160-testowanie/020-przyklady-testow-jednostkowych-integracyjnych-i-e2e.mdx",22466],"684344f5":[()=>n.e(77168).then(n.bind(n,90471)),"@site/src/pages/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugCode.md",90471],"68679b62":[()=>n.e(84574).then(n.bind(n,3105)),"@site/docs/020-ux-ui/020-praktyczne-szkolenie-projektowania-ux-ui/020-material-uzupelniajacy-ui.mdx",3105],"68dd6750":[()=>n.e(67183).then(n.bind(n,76732)),"@site/src/pages/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionDescription.md",76732],"697a838c":[()=>n.e(76569).then(n.bind(n,51284)),"@site/src/pages/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/links.md",51284],"69cfb56e":[()=>n.e(92966).then(n.bind(n,87588)),"@site/src/pages/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionDescription.md",87588],"6a184817":[()=>n.e(43109).then(n.bind(n,29259)),"@site/src/pages/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugCode.md",29259],"6a677fa0":[()=>n.e(33050).then(n.bind(n,31668)),"@site/src/pages/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionDescription.md",31668],"6ab7799b":[()=>n.e(33466).then(n.bind(n,51374)),"@site/src/pages/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugDescription.md",51374],"6b2ba85f":[()=>Promise.all([n.e(40532),n.e(3473),n.e(32320)]).then(n.bind(n,58368)),"@site/src/pages/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/index.mdx",58368],"6b66f5c6":[()=>n.e(59218).then(n.bind(n,66241)),"@site/src/pages/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugCode.md",66241],"6be2343b":[()=>n.e(11118).then(n.bind(n,98809)),"@site/src/pages/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionCode.md",98809],"6d0f3166":[()=>n.e(7295).then(n.bind(n,91375)),"@site/src/pages/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionCode.md",91375],"6d948a43":[()=>n.e(33180).then(n.bind(n,5710)),"@site/src/pages/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/links.md",5710],"6dc651c7":[()=>n.e(28393).then(n.bind(n,89510)),"@site/src/pages/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionDescription.md",89510],"6dd24dad":[()=>n.e(39930).then(n.t.bind(n,44559,19)),"~docs/default/tag-tags-network-a82.json",44559],"6e53e527":[()=>n.e(36073).then(n.bind(n,2904)),"@site/src/pages/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugDescription.md",2904],"6e7a2422":[()=>n.e(77542).then(n.bind(n,32747)),"@site/src/pages/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugCode.md",32747],"6e8ed2cc":[()=>n.e(5034).then(n.bind(n,5780)),"@site/src/pages/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugCode.md",5780],"6fd2e06c":[()=>n.e(62740).then(n.bind(n,2641)),"@site/src/pages/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugDescription.md",2641],"7040b27e":[()=>n.e(6450).then(n.t.bind(n,30359,19)),"~docs/default/tag-tags-ide-fff.json",30359],"7080ced1":[()=>n.e(81024).then(n.bind(n,59181)),"@site/src/pages/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionDescription.md",59181],"70b23246":[()=>n.e(84220).then(n.bind(n,50136)),"@site/src/pages/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionCode.md",50136],"70ba2e6f":[()=>n.e(98441).then(n.bind(n,54967)),"@site/src/pages/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionCode.md",54967],"710733d9":[()=>n.e(47108).then(n.t.bind(n,44586,19)),"~docs/default/tag-tags-git-hub-1c6.json",44586],"7184ccab":[()=>Promise.all([n.e(40532),n.e(3473),n.e(58870)]).then(n.bind(n,65578)),"@site/src/pages/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/index.mdx",65578],"7186fb88":[()=>n.e(98200).then(n.bind(n,61151)),"@site/src/pages/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionCode.md",61151],"7208d235":[()=>n.e(66790).then(n.bind(n,20994)),"@site/src/pages/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionDescription.md",20994],"7233e7af":[()=>n.e(78071).then(n.bind(n,18892)),"@site/src/pages/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionDescription.md",18892],"7249f594":[()=>n.e(39161).then(n.bind(n,93747)),"@site/src/pages/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugCode.md",93747],"72c7414d":[()=>n.e(73510).then(n.bind(n,98707)),"@site/docs/010-podstawy/160-testowanie/010-wprowadzenie-do-testowania.mdx",98707],"73579a94":[()=>n.e(71752).then(n.bind(n,58191)),"@site/src/pages/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/links.md",58191],"735c401f":[()=>n.e(30957).then(n.t.bind(n,70499,19)),"~docs/default/tag-tags-jest-57c.json",70499],"73760c40":[()=>n.e(72111).then(n.bind(n,69805)),"@site/src/pages/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionCode.md",69805],"73ebfa5d":[()=>n.e(42015).then(n.t.bind(n,90766,19)),"~docs/default/tag-tags-res-tful-498.json",90766],"741bccd0":[()=>n.e(16333).then(n.bind(n,49555)),"@site/src/pages/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionCode.md",49555],"744fb43a":[()=>n.e(15068).then(n.bind(n,5842)),"@site/src/pages/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugDescription.md",5842],"74b8c826":[()=>n.e(41546).then(n.bind(n,94837)),"@site/src/pages/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugDescription.md",94837],"74d00b75":[()=>n.e(86440).then(n.bind(n,37913)),"@site/docs/010-podstawy/190-edytory-kodu/index.mdx",37913],"75ce0515":[()=>n.e(71652).then(n.bind(n,36319)),"@site/src/pages/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/links.md",36319],"75f9ec1a":[()=>n.e(79505).then(n.bind(n,19481)),"@site/docs/040-backend/110-obsluga-emaili/index.mdx",19481],"75fb086c":[()=>n.e(30206).then(n.bind(n,68029)),"@site/src/pages/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugDescription.md",68029],"75fdfa1a":[()=>Promise.all([n.e(40532),n.e(3473),n.e(94083)]).then(n.bind(n,91476)),"@site/src/pages/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/index.mdx",91476],"76cfe10a":[()=>n.e(43053).then(n.t.bind(n,42083,19)),"~docs/default/tag-tags-sql-e00.json",42083],"7709181b":[()=>n.e(48924).then(n.bind(n,4230)),"@site/docs/030-frontend/100-webassembly/index.mdx",4230],"77afab95":[()=>n.e(46394).then(n.bind(n,4422)),"@site/src/pages/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/links.md",4422],78106965:[()=>n.e(7835).then(n.bind(n,82863)),"@site/src/pages/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugCode.md",82863],"7845ab9e":[()=>Promise.all([n.e(40532),n.e(3473),n.e(95076)]).then(n.bind(n,33668)),"@site/src/pages/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/index.mdx",33668],"786f8550":[()=>n.e(74604).then(n.bind(n,60814)),"@site/docs/040-backend/050-systemy-zarzadzania-trescia/index.mdx",60814],"7896f7be":[()=>n.e(41202).then(n.bind(n,74072)),"@site/src/pages/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugCode.md",74072],"78d92bfa":[()=>n.e(53766).then(n.bind(n,60898)),"@site/src/pages/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugCode.md",60898],"78dae5bb":[()=>n.e(73986).then(n.t.bind(n,38387,19)),"~docs/default/tag-tags-css-b35.json",38387],"79bb56d5":[()=>n.e(30095).then(n.bind(n,46160)),"@site/docs/030-frontend/070-pakiety-i-pakowarki/010-webpack-4/050-tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian.mdx",46160],"79c07e2c":[()=>n.e(81080).then(n.bind(n,51578)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/120-zapoznanie-z-interfejsem.mdx",51578],"79db7ad8":[()=>n.e(75167).then(n.bind(n,76614)),"@site/docs/050-fullstack/040-websocket/index.mdx",76614],"79f9d31c":[()=>n.e(91502).then(n.bind(n,60402)),"@site/src/pages/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionDescription.md",60402],"7a464885":[()=>n.e(4167).then(n.bind(n,53275)),"@site/src/pages/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionCode.md",53275],"7a877d9a":[()=>n.e(81117).then(n.bind(n,22471)),"@site/src/pages/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/links.md",22471],"7ac739e8":[()=>n.e(21850).then(n.bind(n,28088)),"@site/src/pages/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionDescription.md",28088],"7b21172a":[()=>Promise.all([n.e(40532),n.e(3473),n.e(27536)]).then(n.bind(n,6840)),"@site/src/pages/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/index.mdx",6840],"7b98acb0":[()=>n.e(94648).then(n.bind(n,23247)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/510-identyfikacja-marki.mdx",23247],"7be384e2":[()=>n.e(48694).then(n.t.bind(n,44667,19)),"~docs/default/tag-tags-cpu-994.json",44667],"7bfa9b50":[()=>n.e(45198).then(n.bind(n,878)),"@site/src/pages/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/links.md",878],"7c03907c":[()=>n.e(42011).then(n.bind(n,93077)),"@site/src/pages/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugCode.md",93077],"7c59c602":[()=>n.e(64239).then(n.bind(n,30354)),"@site/src/pages/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionDescription.md",30354],"7c6e5e1c":[()=>n.e(38649).then(n.t.bind(n,74323,19)),"~docs/default/tag-tags-reg-ex-ac7.json",74323],"7cef7700":[()=>n.e(1229).then(n.bind(n,74276)),"@site/docs/010-podstawy/070-kontrola-wersji/index.mdx",74276],"7cf8d78f":[()=>n.e(85532).then(n.t.bind(n,92505,19)),"~docs/default/tag-tags-orm-291.json",92505],"7cfb0829":[()=>n.e(21218).then(n.bind(n,35010)),"@site/src/pages/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugCode.md",35010],"7cfdd17e":[()=>n.e(50510).then(n.bind(n,8543)),"@site/docs/010-podstawy/070-kontrola-wersji/010-podstawy-gita/000-czym-jest-git.mdx",8543],"7dac982a":[()=>n.e(36669).then(n.bind(n,56758)),"@site/docs/010-podstawy/100-siec/index.mdx",56758],"7db916a2":[()=>Promise.all([n.e(40532),n.e(3473),n.e(14642)]).then(n.bind(n,13086)),"@site/src/pages/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/index.mdx",13086],"7dbdef65":[()=>n.e(30364).then(n.bind(n,54182)),"@site/src/pages/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugDescription.md",54182],"7df43df9":[()=>n.e(583).then(n.t.bind(n,15745,19)),"/home/runner/work/codisity.pl/codisity.pl/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],"7e02c3d2":[()=>n.e(30984).then(n.t.bind(n,44741,19)),"~docs/default/tag-tags-agile-21f.json",44741],"7e1c5dce":[()=>n.e(85061).then(n.bind(n,6535)),"@site/src/pages/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/links.md",6535],"7f1f28b5":[()=>n.e(98777).then(n.bind(n,70967)),"@site/src/pages/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugDescription.md",70967],"7f676b5b":[()=>n.e(50896).then(n.bind(n,5279)),"@site/src/pages/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugDescription.md",5279],"7f8f93b5":[()=>n.e(82208).then(n.bind(n,69481)),"@site/src/pages/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionCode.md",69481],"800ca0ac":[()=>n.e(75586).then(n.bind(n,99125)),"@site/src/pages/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/links.md",99125],"8021a7ed":[()=>n.e(60370).then(n.bind(n,52035)),"@site/src/pages/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionDescription.md",52035],"8042f440":[()=>n.e(80100).then(n.bind(n,69707)),"@site/src/pages/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionDescription.md",69707],"80773c5f":[()=>n.e(46758).then(n.bind(n,50106)),"@site/docs/010-podstawy/070-kontrola-wersji/010-podstawy-gita/060-etykietowanie.mdx",50106],"807f5b68":[()=>n.e(28341).then(n.bind(n,5649)),"@site/docs/010-podstawy/050-systemy-operacyjne/050-free-bsd.mdx",5649],"80db1fb6":[()=>n.e(72503).then(n.bind(n,8178)),"@site/docs/010-podstawy/070-kontrola-wersji/010-podstawy-gita/080-praca-z-graficznym-interfejsem-git-w-visual-studio-code.mdx",8178],"80dd8e85":[()=>Promise.all([n.e(40532),n.e(3473),n.e(41493)]).then(n.bind(n,38868)),"@site/src/pages/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/index.mdx",38868],"8183696c":[()=>Promise.all([n.e(40532),n.e(3473),n.e(40616)]).then(n.bind(n,37702)),"@site/src/pages/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/index.mdx",37702],"81e6c770":[()=>n.e(51228).then(n.bind(n,43548)),"@site/src/pages/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugDescription.md",43548],"82230cb9":[()=>n.e(80969).then(n.bind(n,67561)),"@site/src/pages/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugCode.md",67561],"8263abbd":[()=>Promise.all([n.e(40532),n.e(3473),n.e(34411)]).then(n.bind(n,98311)),"@site/src/pages/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/index.mdx",98311],82697623:[()=>n.e(22849).then(n.t.bind(n,53542,19)),"~docs/default/tag-tags-owasp-786.json",53542],"8284ef15":[()=>n.e(64161).then(n.bind(n,74789)),"@site/src/pages/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugDescription.md",74789],"82f0b858":[()=>n.e(20786).then(n.bind(n,58027)),"@site/src/pages/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugCode.md",58027],"8305d111":[()=>n.e(42502).then(n.bind(n,25324)),"@site/docs/010-podstawy/190-edytory-kodu/030-visual-studio-code.mdx",25324],"8308c780":[()=>n.e(66508).then(n.bind(n,69998)),"@site/src/pages/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionDescription.md",69998],"833ee563":[()=>n.e(37985).then(n.bind(n,23280)),"@site/src/pages/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/links.md",23280],"8346b090":[()=>Promise.all([n.e(40532),n.e(3473),n.e(13267)]).then(n.bind(n,18003)),"@site/src/pages/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/index.mdx",18003],"8395e663":[()=>n.e(93193).then(n.bind(n,83260)),"@site/docs/030-frontend/030-javascript/index.mdx",83260],"839ae7ca":[()=>n.e(71960).then(n.bind(n,64900)),"@site/src/pages/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugDescription.md",64900],"83af2250":[()=>n.e(72904).then(n.bind(n,1476)),"@site/src/pages/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionCode.md",1476],"83c03d41":[()=>Promise.all([n.e(40532),n.e(3473),n.e(6692)]).then(n.bind(n,771)),"@site/src/pages/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/index.mdx",771],"846695b0":[()=>n.e(42143).then(n.t.bind(n,16147,19)),"~docs/default/tag-tags-full-stack-e27.json",16147],"8476ee46":[()=>n.e(59113).then(n.bind(n,57988)),"@site/src/pages/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugCode.md",57988],"8490af85":[()=>n.e(88319).then(n.bind(n,5309)),"@site/src/pages/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/links.md",5309],84991166:[()=>n.e(33130).then(n.bind(n,52810)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/230-scenariusze-uzytkownika.mdx",52810],"84d56036":[()=>n.e(75532).then(n.bind(n,20965)),"@site/src/pages/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionDescription.md",20965],85009468:[()=>Promise.all([n.e(40532),n.e(3473),n.e(12594)]).then(n.bind(n,16106)),"@site/src/pages/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/index.mdx",16106],"853f4a25":[()=>n.e(15868).then(n.bind(n,40217)),"@site/docs/010-podstawy/050-systemy-operacyjne/020-macos-i-ios.mdx",40217],"8549fb15":[()=>n.e(68403).then(n.bind(n,62202)),"@site/docs/050-fullstack/060-next-js/020-mini-projekt-z-next-js/050-system-kontroli-wersji-git-i-serwis-github.mdx",62202],"856338c3":[()=>n.e(31199).then(n.bind(n,93125)),"@site/docs/010-podstawy/040-programowanie/065-wyrazenia-regularne.mdx",93125],"8565875c":[()=>n.e(96522).then(n.bind(n,69386)),"@site/docs/010-podstawy/210-zarzadzanie-projektami/index.mdx",69386],85745110:[()=>n.e(95425).then(n.bind(n,91184)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/523-glebia.mdx",91184],"8611eaf4":[()=>n.e(60510).then(n.t.bind(n,697,19)),"~docs/default/tag-tags-bsd-8ff.json",697],"861289f9":[()=>Promise.all([n.e(40532),n.e(3473),n.e(44473)]).then(n.bind(n,66395)),"@site/src/pages/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/index.mdx",66395],"8699b075":[()=>Promise.all([n.e(40532),n.e(3473),n.e(7898)]).then(n.bind(n,17628)),"@site/src/pages/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/index.mdx",17628],"86a46ae2":[()=>Promise.all([n.e(40532),n.e(3473),n.e(42372)]).then(n.bind(n,11979)),"@site/src/pages/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/index.mdx",11979],"86cec129":[()=>n.e(42781).then(n.bind(n,18868)),"@site/src/pages/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionDescription.md",18868],"86e14a43":[()=>n.e(52865).then(n.bind(n,5550)),"@site/src/pages/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionCode.md",5550],"86f4bfe5":[()=>n.e(36298).then(n.t.bind(n,27007,19)),"~docs/default/tag-tags-web-server-d49.json",27007],"884a095c":[()=>n.e(80867).then(n.bind(n,86708)),"@site/src/pages/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionCode.md",86708],"884f9af5":[()=>n.e(88725).then(n.bind(n,32058)),"@site/src/pages/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugDescription.md",32058],"88bff478":[()=>n.e(95128).then(n.bind(n,70188)),"@site/src/pages/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugCode.md",70188],"88db79f1":[()=>n.e(19612).then(n.bind(n,76968)),"@site/src/pages/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugCode.md",76968],"88fd2dc3":[()=>n.e(81121).then(n.bind(n,47916)),"@site/src/pages/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugDescription.md",47916],"892e0442":[()=>n.e(47965).then(n.bind(n,71014)),"@site/src/pages/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugCode.md",71014],"89507eba":[()=>n.e(62502).then(n.bind(n,28680)),"@site/src/pages/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionDescription.md",28680],"896a5d99":[()=>Promise.all([n.e(40532),n.e(3473),n.e(60069)]).then(n.bind(n,52673)),"@site/src/pages/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/index.mdx",52673],"8a12ef4f":[()=>Promise.all([n.e(40532),n.e(3473),n.e(58658)]).then(n.bind(n,14773)),"@site/src/pages/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/index.mdx",14773],"8a20b002":[()=>n.e(65421).then(n.bind(n,41888)),"@site/src/pages/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugDescription.md",41888],"8aae1625":[()=>n.e(17050).then(n.bind(n,32318)),"@site/src/pages/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugDescription.md",32318],"8aedfca1":[()=>n.e(55227).then(n.bind(n,69116)),"@site/docs/030-frontend/070-pakiety-i-pakowarki/010-webpack-4/010-podstawowy-sposob-uzycia.mdx",69116],"8b1c1229":[()=>n.e(29730).then(n.bind(n,33583)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/420-tresci-graficzne.mdx",33583],"8b1fddd5":[()=>n.e(55442).then(n.t.bind(n,53506,19)),"~docs/default/tag-tags-redux-7a5.json",53506],"8b4b867e":[()=>Promise.all([n.e(40532),n.e(3473),n.e(44894)]).then(n.bind(n,65482)),"@site/src/pages/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/index.mdx",65482],"8b4d77e3":[()=>n.e(90960).then(n.bind(n,52575)),"@site/docs/010-podstawy/040-programowanie/040-algorytmy.mdx",52575],"8b6b92b4":[()=>n.e(55147).then(n.bind(n,88631)),"@site/src/pages/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionDescription.md",88631],"8bab4b8f":[()=>n.e(64999).then(n.bind(n,71159)),"@site/src/pages/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugDescription.md",71159],"8bbfc048":[()=>n.e(5405).then(n.bind(n,74364)),"@site/src/pages/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionCode.md",74364],"8c0d6f34":[()=>n.e(96829).then(n.bind(n,27805)),"@site/src/pages/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugCode.md",27805],"8c15db71":[()=>n.e(61056).then(n.bind(n,24445)),"@site/src/pages/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugDescription.md",24445],"8c8f2acd":[()=>n.e(49713).then(n.bind(n,67680)),"@site/docs/010-podstawy/070-kontrola-wersji/010-podstawy-gita/070-praca-ze-zdalnym-repozytorium-github.mdx",67680],"8cebce07":[()=>Promise.all([n.e(40532),n.e(3473),n.e(49702)]).then(n.bind(n,35611)),"@site/src/pages/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/index.mdx",35611],"8d3ec686":[()=>n.e(21364).then(n.bind(n,55922)),"@site/src/pages/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionDescription.md",55922],"8d63b9c8":[()=>n.e(29670).then(n.bind(n,63026)),"@site/src/pages/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugDescription.md",63026],"8d790c4a":[()=>n.e(49071).then(n.bind(n,69985)),"@site/src/pages/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugDescription.md",69985],"8d9cee02":[()=>n.e(16223).then(n.t.bind(n,25419,19)),"~docs/default/tag-tags-przelewy-24-27f.json",25419],"8db32de2":[()=>n.e(85769).then(n.t.bind(n,31708,19)),"~docs/default/tag-tags-ftp-119.json",31708],"8dc38c34":[()=>n.e(96851).then(n.t.bind(n,2958,19)),"~docs/default/tag-tags-type-script-50e.json",2958],"8de46d05":[()=>n.e(46422).then(n.bind(n,25669)),"@site/src/pages/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionCode.md",25669],"8e7dd0aa":[()=>n.e(78126).then(n.bind(n,83632)),"@site/src/pages/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionDescription.md",83632],"8f3da505":[()=>n.e(68526).then(n.bind(n,74233)),"@site/src/pages/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/links.md",74233],"8f51add7":[()=>n.e(52828).then(n.bind(n,68426)),"@site/docs/010-podstawy/020-warstwy-abstrakcji/index.mdx",68426],"8f5b0fd5":[()=>n.e(51374).then(n.bind(n,27986)),"@site/src/pages/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/links.md",27986],"8f6cb3fb":[()=>Promise.all([n.e(40532),n.e(3473),n.e(52237)]).then(n.bind(n,11606)),"@site/src/pages/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/index.mdx",11606],"8f828573":[()=>n.e(95618).then(n.bind(n,15613)),"@site/docs/030-frontend/030-javascript/050-automatyzacja-zadan-w-przegladarce-z-js.mdx",15613],"900d8e3a":[()=>n.e(26625).then(n.t.bind(n,36340,19)),"~docs/default/tag-tags-vercel-b92.json",36340],"900fb64b":[()=>n.e(59814).then(n.t.bind(n,34579,19)),"~docs/default/tag-tags-jasmine-1ba.json",34579],"9045d99b":[()=>n.e(60198).then(n.bind(n,51025)),"@site/src/pages/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugDescription.md",51025],"90ef3553":[()=>n.e(44288).then(n.t.bind(n,16741,19)),"~docs/default/tag-tags-dns-50e.json",16741],"910c4c34":[()=>n.e(62736).then(n.bind(n,40861)),"@site/src/pages/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugDescription.md",40861],"912a0ee3":[()=>n.e(99387).then(n.bind(n,81106)),"@site/src/pages/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionDescription.md",81106],"917ba351":[()=>n.e(41283).then(n.bind(n,5838)),"@site/src/pages/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugDescription.md",5838],"9192dbe6":[()=>n.e(34944).then(n.bind(n,62265)),"@site/docs/040-backend/080-ciagla-integracja-i-wdrazanie/index.mdx",62265],"91d624fa":[()=>n.e(17348).then(n.bind(n,61302)),"@site/docs/010-podstawy/220-praca-w-it/040-devops-qa-i-inne.mdx",61302],"91e0e43e":[()=>n.e(78296).then(n.bind(n,43454)),"@site/docs/040-backend/070-wirtualizacja-i-konteneryzacja/index.mdx",43454],"91f13cf4":[()=>n.e(76097).then(n.bind(n,2931)),"@site/src/pages/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionCode.md",2931],"9233eaff":[()=>n.e(74125).then(n.t.bind(n,62386,19)),"~docs/default/tag-tags-svg-31d.json",62386],"923b862e":[()=>n.e(71735).then(n.bind(n,11494)),"@site/src/pages/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugDescription.md",11494],"9262547b":[()=>n.e(85819).then(n.t.bind(n,38457,19)),"~docs/default/tag-tags-stripe-9c8.json",38457],"92afe74c":[()=>n.e(27852).then(n.bind(n,53150)),"@site/docs/050-fullstack/060-next-js/020-mini-projekt-z-next-js/070-inne-serwisy-hostingowe-i-cloud-development.mdx",53150],"935f2afb":[()=>n.e(80053).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"937d2e3a":[()=>n.e(82414).then(n.t.bind(n,75045,19)),"~docs/default/tag-tags-html-9c5.json",75045],"93e41b29":[()=>n.e(91411).then(n.bind(n,16926)),"@site/src/pages/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugDescription.md",16926],"93fa8556":[()=>n.e(47270).then(n.bind(n,46794)),"@site/docs/010-podstawy/060-jezyki-programowania/040-javascript.mdx",46794],"945fd741":[()=>n.e(84523).then(n.bind(n,8927)),"@site/src/pages/github.ts",8927],"94a69d92":[()=>n.e(48081).then(n.bind(n,63195)),"@site/docs/030-frontend/070-pakiety-i-pakowarki/010-webpack-4/020-plik-konfiguracyjny.mdx",63195],"94fb7192":[()=>n.e(8025).then(n.bind(n,31568)),"@site/docs/030-frontend/020-css/010-wprowadzenie-w-css.mdx",31568],95240878:[()=>n.e(30717).then(n.t.bind(n,25638,19)),"~docs/default/tag-tags-lucene-244.json",25638],95356112:[()=>n.e(27571).then(n.bind(n,78730)),"@site/docs/040-backend/030-api-zaplecza/index.mdx",78730],"9551079d":[()=>n.e(64680).then(n.bind(n,3893)),"@site/src/pages/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/links.md",3893],"957af57a":[()=>n.e(21320).then(n.bind(n,27542)),"@site/src/pages/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionCode.md",27542],"957d840c":[()=>Promise.all([n.e(40532),n.e(3473),n.e(51029)]).then(n.bind(n,38067)),"@site/src/pages/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/index.mdx",38067],"95b7f57f":[()=>n.e(93693).then(n.bind(n,46550)),"@site/src/pages/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionCode.md",46550],"95f84dda":[()=>n.e(81078).then(n.bind(n,70014)),"@site/src/pages/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugCode.md",70014],"961f392b":[()=>n.e(3272).then(n.bind(n,40408)),"@site/docs/010-podstawy/050-systemy-operacyjne/010-linux.mdx",40408],"96387deb":[()=>n.e(61590).then(n.t.bind(n,76562,19)),"~docs/default/tag-tags-designer-847.json",76562],"967d3173":[()=>n.e(24242).then(n.bind(n,28520)),"@site/src/pages/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionDescription.md",28520],"96a923ee":[()=>n.e(43775).then(n.bind(n,6016)),"@site/docs/050-fullstack/010-autentykacja-i-autoryzacja/010-implementacja-autentykacji/030-logowanie.mdx",6016],"96b173c7":[()=>n.e(95610).then(n.bind(n,42227)),"@site/src/pages/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugDescription.md",42227],"96c4889e":[()=>n.e(57880).then(n.bind(n,59476)),"@site/src/pages/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionCode.md",59476],"970793ad":[()=>n.e(99302).then(n.bind(n,10144)),"@site/src/pages/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugCode.md",10144],"975faa6f":[()=>n.e(22708).then(n.t.bind(n,94251,19)),"~docs/default/tag-tags-push-987.json",94251],"97aa5688":[()=>n.e(71887).then(n.bind(n,2458)),"@site/src/pages/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/links.md",2458],"97c2df57":[()=>n.e(92577).then(n.t.bind(n,251,19)),"~docs/default/tag-tags-testing-library-d59.json",251],"97d74462":[()=>n.e(24471).then(n.bind(n,62859)),"@site/src/pages/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionCode.md",62859],"9835bd28":[()=>n.e(89699).then(n.t.bind(n,19409,19)),"~docs/default/tag-tags-pagination-e52.json",19409],"98ac5f78":[()=>n.e(30482).then(n.bind(n,74164)),"@site/docs/040-backend/060-serwery-internetowe/index.mdx",74164],"98f5acd1":[()=>n.e(91557).then(n.bind(n,61477)),"@site/src/pages/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugDescription.md",61477],"9922a044":[()=>Promise.all([n.e(40532),n.e(3473),n.e(50286)]).then(n.bind(n,43005)),"@site/src/pages/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/index.mdx",43005],99431438:[()=>n.e(62691).then(n.bind(n,67855)),"@site/src/pages/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugCode.md",67855],"9a4c7541":[()=>n.e(26655).then(n.t.bind(n,55073,19)),"~docs/default/tag-tags-scss-cc5.json",55073],"9a4f33c7":[()=>n.e(74591).then(n.bind(n,57508)),"@site/src/pages/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugCode.md",57508],"9abc15c5":[()=>n.e(52306).then(n.bind(n,39988)),"@site/src/pages/twitter.ts",39988],"9c1e0711":[()=>n.e(76222).then(n.bind(n,43894)),"@site/src/pages/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionCode.md",43894],"9c2f9d25":[()=>n.e(62e3).then(n.bind(n,63287)),"@site/docs/030-frontend/010-html/index.mdx",63287],"9c4eca3e":[()=>n.e(71706).then(n.t.bind(n,45598,19)),"~docs/default/tag-tags-elasticsearch-a27.json",45598],"9cce491e":[()=>n.e(61378).then(n.bind(n,58045)),"@site/src/pages/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionCode.md",58045],"9ccf750f":[()=>n.e(36821).then(n.bind(n,72242)),"@site/docs/010-podstawy/170-debugowanie/index.mdx",72242],"9cfa293c":[()=>n.e(65142).then(n.bind(n,2983)),"@site/src/pages/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionCode.md",2983],"9d0e2c8d":[()=>n.e(58197).then(n.bind(n,61014)),"@site/src/pages/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugDescription.md",61014],"9d94b6e3":[()=>n.e(157).then(n.bind(n,87047)),"@site/src/pages/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionDescription.md",87047],"9db9b169":[()=>n.e(82026).then(n.t.bind(n,68485,19)),"~docs/default/tag-tags-e-2-e-823.json",68485],"9df91c1b":[()=>n.e(32996).then(n.bind(n,87322)),"@site/src/pages/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/links.md",87322],"9e1dcc0e":[()=>n.e(22465).then(n.t.bind(n,49491,19)),"~docs/default/tag-tags-prettier-d95.json",49491],"9e978b7a":[()=>n.e(13651).then(n.bind(n,7907)),"@site/src/pages/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionDescription.md",7907],"9e9a17b9":[()=>n.e(10462).then(n.t.bind(n,22160,19)),"~docs/default/tag-tags-ui-85c.json",22160],"9ea02cba":[()=>Promise.all([n.e(40532),n.e(3473),n.e(92441)]).then(n.bind(n,50700)),"@site/src/pages/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/index.mdx",50700],"9ecc835d":[()=>n.e(21623).then(n.bind(n,23578)),"@site/src/pages/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/links.md",23578],"9ed914e7":[()=>n.e(41900).then(n.bind(n,36022)),"@site/src/pages/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/links.md",36022],"9ede2c0e":[()=>n.e(75995).then(n.bind(n,40676)),"@site/docs/010-podstawy/040-programowanie/010-api.mdx",40676],"9f10ee4f":[()=>n.e(6205).then(n.bind(n,44204)),"@site/src/pages/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/links.md",44204],"9f1a3f2d":[()=>n.e(3139).then(n.bind(n,85760)),"@site/src/pages/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionDescription.md",85760],"9f37913d":[()=>n.e(74314).then(n.bind(n,9314)),"@site/src/pages/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionDescription.md",9314],"9f803798":[()=>n.e(74609).then(n.t.bind(n,57092,19)),"~docs/default/tag-tags-docker-3d3.json",57092],"9fb36306":[()=>n.e(29888).then(n.bind(n,26191)),"@site/docs/050-fullstack/060-next-js/020-mini-projekt-z-next-js/040-korzystanie-z-bazy-danych-mongodb-i-prismy.mdx",26191],"9fe94d36":[()=>n.e(11764).then(n.bind(n,58673)),"@site/src/pages/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugCode.md",58673],"9ff70e8d":[()=>n.e(9094).then(n.bind(n,53603)),"@site/docs/010-podstawy/050-systemy-operacyjne/030-windows.mdx",53603],a0420386:[()=>n.e(98050).then(n.bind(n,43182)),"@site/docs/020-ux-ui/030-czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin.mdx",43182],a04ecd15:[()=>n.e(3721).then(n.bind(n,89868)),"@site/src/pages/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/links.md",89868],a0c01147:[()=>n.e(46098).then(n.t.bind(n,46583,19)),"~docs/default/tag-tags-microsoft-3fb.json",46583],a0d9dc55:[()=>n.e(16940).then(n.bind(n,60174)),"@site/src/pages/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/links.md",60174],a11c5b80:[()=>n.e(59949).then(n.bind(n,97079)),"@site/src/pages/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/links.md",97079],a1c5878a:[()=>n.e(46991).then(n.bind(n,27958)),"@site/src/pages/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionDescription.md",27958],a1e6e3bf:[()=>n.e(98890).then(n.bind(n,74214)),"@site/docs/010-podstawy/000-informatyka/index.mdx",74214],a295d51b:[()=>n.e(4134).then(n.bind(n,72751)),"@site/docs/010-podstawy/080-haszowanie/index.mdx",72751],a2ae1405:[()=>n.e(48762).then(n.bind(n,48045)),"@site/src/pages/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugDescription.md",48045],a307b126:[()=>n.e(57575).then(n.bind(n,49162)),"@site/src/pages/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugCode.md",49162],a3689074:[()=>n.e(24075).then(n.bind(n,54748)),"@site/src/pages/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/links.md",54748],a38548f8:[()=>n.e(57907).then(n.t.bind(n,71816,19)),"~docs/default/tag-tags-performance-877.json",71816],a3e8885c:[()=>n.e(51840).then(n.t.bind(n,97305,19)),"~docs/default/tag-tags-i-os-b3f.json",97305],a477f3e1:[()=>n.e(17234).then(n.t.bind(n,66568,19)),"~docs/default/tag-tags-internet-0e8.json",66568],a4dc21c3:[()=>n.e(68987).then(n.bind(n,21145)),"@site/src/pages/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/links.md",21145],a5352ad5:[()=>n.e(79445).then(n.bind(n,78641)),"@site/src/pages/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionCode.md",78641],a53608ef:[()=>n.e(33177).then(n.bind(n,27870)),"@site/src/pages/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionDescription.md",27870],a548a292:[()=>n.e(90885).then(n.bind(n,33568)),"@site/docs/050-fullstack/010-autentykacja-i-autoryzacja/010-implementacja-autentykacji/020-rejestracja.mdx",33568],a5bcb468:[()=>n.e(50944).then(n.bind(n,64257)),"@site/src/pages/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugCode.md",64257],a60499a2:[()=>n.e(35900).then(n.bind(n,46795)),"@site/docs/010-podstawy/030-aplikacje/index.mdx",46795],a68fff77:[()=>n.e(58113).then(n.bind(n,9012)),"@site/docs/010-podstawy/070-kontrola-wersji/010-podstawy-gita/020-podrozowanie-w-czasie.mdx",9012],a6d26d5d:[()=>n.e(4747).then(n.bind(n,44170)),"@site/docs/030-frontend/035-react/index.mdx",44170],a6dd96ff:[()=>Promise.all([n.e(40532),n.e(69203)]).then(n.bind(n,70157)),"@site/docs/010-podstawy/070-kontrola-wersji/010-podstawy-gita/index.mdx",70157],a79cfbf2:[()=>n.e(15034).then(n.bind(n,49163)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/521-dostosowanie-typografii-i-kolorow.mdx",49163],a8d6ad3d:[()=>n.e(4152).then(n.bind(n,59481)),"@site/docs/010-podstawy/120-hosting/020-serwuj-strony-internetowe-z-twojego-komputera copy.mdx",59481],a8fc05df:[()=>n.e(41232).then(n.bind(n,98739)),"@site/src/pages/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionCode.md",98739],a945daee:[()=>Promise.all([n.e(40532),n.e(3473),n.e(28584)]).then(n.bind(n,86332)),"@site/src/pages/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/index.mdx",86332],a96b0693:[()=>n.e(61267).then(n.bind(n,25112)),"@site/src/pages/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugCode.md",25112],a97c0255:[()=>n.e(96544).then(n.bind(n,96202)),"@site/src/pages/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/links.md",96202],a9863ec3:[()=>n.e(33291).then(n.bind(n,40199)),"@site/src/pages/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/links.md",40199],a989a199:[()=>n.e(85397).then(n.bind(n,69874)),"@site/src/pages/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugCode.md",69874],a99ff4f5:[()=>n.e(27080).then(n.bind(n,1402)),"@site/src/pages/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionCode.md",1402],a9e2a5f5:[()=>n.e(33577).then(n.bind(n,12242)),"@site/src/pages/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionCode.md",12242],aa23cbb1:[()=>n.e(36662).then(n.bind(n,83068)),"@site/src/pages/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugDescription.md",83068],ab068eac:[()=>n.e(29544).then(n.bind(n,2537)),"@site/src/pages/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionCode.md",2537],ab3ac259:[()=>n.e(42349).then(n.bind(n,61388)),"@site/docs/030-frontend/110-aplikacje-mobilne/index.mdx",61388],ab6ff148:[()=>n.e(85382).then(n.bind(n,23533)),"@site/docs/030-frontend/020-css/index.mdx",23533],ab72c14f:[()=>n.e(30516).then(n.bind(n,19634)),"@site/src/pages/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionDescription.md",19634],ab98e4e2:[()=>n.e(83245).then(n.bind(n,88923)),"@site/src/pages/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionCode.md",88923],ac0ce67e:[()=>n.e(60921).then(n.bind(n,92201)),"@site/src/pages/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugDescription.md",92201],aca457c3:[()=>n.e(26390).then(n.t.bind(n,99724,19)),"~docs/default/tag-tags-tailwind-css-279.json",99724],acebbe6f:[()=>n.e(21646).then(n.bind(n,7966)),"@site/src/pages/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/links.md",7966],ad0b0ce2:[()=>n.e(24128).then(n.t.bind(n,65786,19)),"~docs/default/tag-tags-webpack-137.json",65786],ada0e0fd:[()=>n.e(34540).then(n.t.bind(n,58896,19)),"~docs/default/tag-tags-web-socket-6fb.json",58896],ada3cb0c:[()=>n.e(25456).then(n.bind(n,53448)),"@site/src/pages/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugCode.md",53448],ae04b98c:[()=>n.e(25595).then(n.t.bind(n,28,19)),"~docs/default/tag-tags-chrome-798.json",28],aef2cd7d:[()=>n.e(99059).then(n.bind(n,68621)),"@site/src/pages/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionCode.md",68621],afa54125:[()=>n.e(57483).then(n.bind(n,20912)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/332-projektowanie-szkieletu.mdx",20912],afe2f6b5:[()=>n.e(97219).then(n.bind(n,30121)),"@site/src/pages/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionCode.md",30121],b0131d81:[()=>n.e(28746).then(n.t.bind(n,16277,19)),"~docs/default/tag-tags-ip-378.json",16277],b046cce8:[()=>n.e(6545).then(n.t.bind(n,45626,19)),"~docs/default/tag-tags-ddd-3be.json",45626],b05437ef:[()=>n.e(59777).then(n.t.bind(n,49680,19)),"~docs/default/tag-tags-hash-a2c.json",49680],b073d7cd:[()=>n.e(52499).then(n.t.bind(n,76140,19)),"~docs/default/tag-tags-pwa-4bc.json",76140],b0973ba4:[()=>n.e(45989).then(n.bind(n,11102)),"@site/src/pages/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/links.md",11102],b12b33e9:[()=>Promise.all([n.e(40532),n.e(3473),n.e(68345)]).then(n.bind(n,87387)),"@site/src/pages/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/index.mdx",87387],b1698e34:[()=>n.e(89675).then(n.bind(n,54073)),"@site/src/pages/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionCode.md",54073],b1ba4cc6:[()=>n.e(25505).then(n.bind(n,94642)),"@site/src/pages/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugCode.md",94642],b1e87bbd:[()=>n.e(94747).then(n.t.bind(n,81975,19)),"~docs/default/tag-tags-prism-24e.json",81975],b218f480:[()=>n.e(56755).then(n.bind(n,42654)),"@site/src/pages/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/links.md",42654],b2383198:[()=>n.e(65310).then(n.bind(n,97799)),"@site/src/pages/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugDescription.md",97799],b2383bc8:[()=>Promise.all([n.e(40532),n.e(3473),n.e(72803)]).then(n.bind(n,12721)),"@site/src/pages/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/index.mdx",12721],b2cc28ad:[()=>n.e(8554).then(n.bind(n,93564)),"@site/src/pages/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugDescription.md",93564],b2cf6952:[()=>n.e(7995).then(n.t.bind(n,66932,19)),"~docs/default/tag-tags-es-lint-238.json",66932],b2ea0aa3:[()=>n.e(82366).then(n.bind(n,36535)),"@site/src/pages/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugDescription.md",36535],b31218dc:[()=>n.e(62280).then(n.bind(n,32367)),"@site/src/pages/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionCode.md",32367],b33c6ef0:[()=>n.e(61062).then(n.bind(n,41996)),"@site/docs/030-frontend/030-javascript/010-podstawy-javascript.mdx",41996],b35a5c8f:[()=>n.e(82785).then(n.t.bind(n,9845,19)),"~docs/default/tag-tags-npm-5d7.json",9845],b3b31dba:[()=>n.e(90626).then(n.t.bind(n,65437,19)),"~docs/default/tag-tags-mac-os-759.json",65437],b471f1aa:[()=>n.e(85326).then(n.bind(n,6754)),"@site/src/pages/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/links.md",6754],b4839aa5:[()=>n.e(46650).then(n.bind(n,74015)),"@site/src/pages/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugDescription.md",74015],b49b0f90:[()=>n.e(72087).then(n.bind(n,73244)),"@site/src/pages/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugCode.md",73244],b4ca7cd2:[()=>n.e(47128).then(n.bind(n,88802)),"@site/src/pages/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugDescription.md",88802],b5f07768:[()=>n.e(82969).then(n.bind(n,95586)),"@site/src/pages/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionDescription.md",95586],b6052b98:[()=>n.e(77518).then(n.bind(n,99565)),"@site/src/pages/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugDescription.md",99565],b6264fc3:[()=>n.e(91995).then(n.bind(n,64856)),"@site/docs/030-frontend/010-html/020-rdzen-metadane-sekcje.mdx",64856],b6441a16:[()=>n.e(52057).then(n.t.bind(n,393,19)),"~docs/default/tag-tags-prometheus-188.json",393],b651fca4:[()=>n.e(31289).then(n.bind(n,87995)),"@site/src/pages/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugDescription.md",87995],b67bb9f8:[()=>n.e(92534).then(n.bind(n,10035)),"@site/src/pages/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionCode.md",10035],b766ccfd:[()=>n.e(56039).then(n.bind(n,2917)),"@site/src/pages/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/links.md",2917],b76a165a:[()=>n.e(24293).then(n.t.bind(n,1906,19)),"~docs/default/tag-tags-react-5c0.json",1906],b773aa83:[()=>n.e(75035).then(n.bind(n,84893)),"@site/src/pages/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/links.md",84893],b83483c6:[()=>n.e(95923).then(n.bind(n,88617)),"@site/src/pages/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugCode.md",88617],b85753b3:[()=>n.e(60299).then(n.bind(n,1395)),"@site/src/pages/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugDescription.md",1395],b8c25d76:[()=>n.e(3354).then(n.bind(n,20921)),"@site/docs/010-podstawy/160-testowanie/index.mdx",20921],b92b9e7e:[()=>n.e(31022).then(n.bind(n,18453)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/524-dostosowanie-ilustracji.mdx",18453],b9c437a8:[()=>n.e(36248).then(n.bind(n,12212)),"@site/src/pages/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionCode.md",12212],b9c8e7c7:[()=>n.e(4259).then(n.bind(n,72353)),"@site/src/pages/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionDescription.md",72353],ba33c47c:[()=>n.e(30061).then(n.bind(n,289)),"@site/src/pages/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/links.md",289],ba3d1627:[()=>n.e(83743).then(n.bind(n,79917)),"@site/src/pages/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionDescription.md",79917],ba412cf9:[()=>n.e(23716).then(n.bind(n,13115)),"@site/src/pages/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugDescription.md",13115],ba6b2fd9:[()=>n.e(18678).then(n.bind(n,69446)),"@site/docs/030-frontend/010-html/050-tabele-formularze-elementy-interaktywne-komponenty.mdx",69446],bb0d8f28:[()=>n.e(39849).then(n.bind(n,7486)),"@site/docs/050-fullstack/060-next-js/020-mini-projekt-z-next-js/030-obsluga-formularza-i-api.mdx",7486],bbc80a75:[()=>n.e(15734).then(n.bind(n,54458)),"@site/src/pages/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionCode.md",54458],bc8dc425:[()=>n.e(7482).then(n.bind(n,46105)),"@site/src/pages/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionDescription.md",46105],bcd37ac2:[()=>n.e(62090).then(n.bind(n,19821)),"@site/src/pages/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugDescription.md",19821],bcd70e60:[()=>Promise.all([n.e(40532),n.e(3473),n.e(48587)]).then(n.bind(n,53737)),"@site/src/pages/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/index.mdx",53737],bcfe4bdc:[()=>Promise.all([n.e(40532),n.e(3473),n.e(96771)]).then(n.bind(n,12625)),"@site/src/pages/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/index.mdx",12625],bd5d6b23:[()=>n.e(51566).then(n.bind(n,54753)),"@site/docs/010-podstawy/130-dokumentacje/index.mdx",54753],bd5e77a8:[()=>n.e(42497).then(n.bind(n,40891)),"@site/src/pages/discord.ts",40891],bd786b82:[()=>Promise.all([n.e(40532),n.e(3473),n.e(79944)]).then(n.bind(n,35244)),"@site/src/pages/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/index.mdx",35244],bd840618:[()=>n.e(9753).then(n.bind(n,79701)),"@site/src/pages/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugDescription.md",79701],bd8f4b90:[()=>n.e(90419).then(n.t.bind(n,43775,19)),"~docs/default/tag-tags-tpay-1b6.json",43775],bd9b6c5d:[()=>n.e(67471).then(n.t.bind(n,63238,19)),"~docs/default/tag-tags-state-d01.json",63238],bdddc7f5:[()=>n.e(92974).then(n.bind(n,49709)),"@site/src/pages/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionDescription.md",49709],be531671:[()=>n.e(71524).then(n.bind(n,52164)),"@site/docs/010-podstawy/070-kontrola-wersji/010-podstawy-gita/010-instalacja.mdx",52164],be5bae9f:[()=>n.e(39979).then(n.bind(n,70719)),"@site/src/pages/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionCode.md",70719],be6c48cf:[()=>n.e(7233).then(n.bind(n,92075)),"@site/src/pages/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugCode.md",92075],be76e3a2:[()=>Promise.all([n.e(40532),n.e(3473),n.e(5616)]).then(n.bind(n,74906)),"@site/src/pages/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/index.mdx",74906],beaaf399:[()=>n.e(56130).then(n.bind(n,99269)),"@site/docs/010-podstawy/040-programowanie/index.mdx",99269],bee2906b:[()=>n.e(80161).then(n.bind(n,86569)),"@site/src/pages/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugDescription.md",86569],bf0bae1a:[()=>n.e(65769).then(n.bind(n,90595)),"@site/src/pages/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionDescription.md",90595],bf6af72d:[()=>n.e(37179).then(n.bind(n,61506)),"@site/src/pages/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugDescription.md",61506],bf6db502:[()=>n.e(18268).then(n.bind(n,15341)),"@site/src/pages/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/links.md",15341],bf8cb3eb:[()=>n.e(46645).then(n.t.bind(n,16922,19)),"~docs/default/tag-tags-linux-d59.json",16922],c007ecfe:[()=>n.e(45391).then(n.bind(n,2399)),"@site/src/pages/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugCode.md",2399],c10819ce:[()=>n.e(40583).then(n.bind(n,78483)),"@site/src/pages/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionCode.md",78483],c11e4322:[()=>n.e(30544).then(n.bind(n,59238)),"@site/src/pages/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/links.md",59238],c188cb46:[()=>n.e(94117).then(n.bind(n,12338)),"@site/src/pages/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionDescription.md",12338],c229b3fd:[()=>n.e(41244).then(n.bind(n,73681)),"@site/src/pages/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/links.md",73681],c2b14adf:[()=>n.e(5796).then(n.bind(n,68825)),"@site/src/pages/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionCode.md",68825],c2be12b7:[()=>n.e(38863).then(n.bind(n,80559)),"@site/src/pages/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionDescription.md",80559],c392861d:[()=>n.e(62562).then(n.bind(n,53543)),"@site/src/pages/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugCode.md",53543],c3b45d2c:[()=>n.e(64402).then(n.bind(n,37138)),"@site/src/pages/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugDescription.md",37138],c3c2bd6c:[()=>n.e(81679).then(n.bind(n,20304)),"@site/src/pages/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionDescription.md",20304],c3d20e95:[()=>Promise.all([n.e(40532),n.e(91952)]).then(n.bind(n,89954)),"@site/docs/030-frontend/070-pakiety-i-pakowarki/010-webpack-4/index.mdx",89954],c3df5564:[()=>n.e(28023).then(n.bind(n,4259)),"@site/src/pages/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugDescription.md",4259],c40960da:[()=>n.e(8484).then(n.bind(n,59313)),"@site/docs/030-frontend/070-pakiety-i-pakowarki/index.mdx",59313],c4a79712:[()=>n.e(1690).then(n.bind(n,68247)),"@site/src/pages/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugDescription.md",68247],c5132abf:[()=>n.e(3826).then(n.bind(n,26388)),"@site/src/pages/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionCode.md",26388],c56402d8:[()=>n.e(64401).then(n.bind(n,244)),"@site/src/pages/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionDescription.md",244],c63f55d5:[()=>n.e(82164).then(n.t.bind(n,16336,19)),"~docs/default/tag-tags-accessibility-874.json",16336],c673fddf:[()=>n.e(47115).then(n.bind(n,30849)),"@site/src/pages/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugDescription.md",30849],c675cfeb:[()=>Promise.all([n.e(40532),n.e(3473),n.e(68148)]).then(n.bind(n,35677)),"@site/src/pages/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/index.mdx",35677],c6b42185:[()=>n.e(55418).then(n.bind(n,34694)),"@site/docs/030-frontend/025-svg/index.mdx",34694],c7855b86:[()=>n.e(46706).then(n.t.bind(n,9451,19)),"~docs/default/tag-tags-google-4d3.json",9451],c7cb25dc:[()=>n.e(76938).then(n.bind(n,88628)),"@site/src/pages/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/links.md",88628],c7e62bb4:[()=>n.e(85830).then(n.bind(n,13668)),"@site/src/pages/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/links.md",13668],c8291d21:[()=>Promise.all([n.e(40532),n.e(21059)]).then(n.bind(n,45385)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/index.mdx",45385],c9135948:[()=>n.e(1656).then(n.bind(n,96795)),"@site/src/pages/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/links.md",96795],c924a973:[()=>n.e(18657).then(n.bind(n,61804)),"@site/src/pages/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugCode.md",61804],c925c4b1:[()=>n.e(77492).then(n.bind(n,76965)),"@site/docs/030-frontend/030-javascript/040-trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne.mdx",76965],c92adadf:[()=>n.e(6069).then(n.bind(n,4275)),"@site/docs/030-frontend/080-zarzadzanie-stanem/020-podstawy-reduxa/030-modyfikowanie-stanu-magazynu.mdx",4275],c9805ddd:[()=>n.e(41571).then(n.bind(n,11702)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/220-persona-uzytkownika.mdx",11702],c9c056cc:[()=>n.e(904).then(n.bind(n,19547)),"@site/src/pages/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugDescription.md",19547],c9c54e87:[()=>n.e(89914).then(n.bind(n,99576)),"@site/src/pages/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionDescription.md",99576],ca646102:[()=>n.e(26040).then(n.bind(n,50085)),"@site/src/pages/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/links.md",50085],ca6f906e:[()=>n.e(54818).then(n.bind(n,63974)),"@site/src/pages/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugDescription.md",63974],cac3cb0c:[()=>n.e(55217).then(n.t.bind(n,50045,19)),"~docs/default/tag-tags-http-1d4.json",50045],cacf64d3:[()=>n.e(30368).then(n.bind(n,96080)),"@site/src/pages/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/links.md",96080],caf4b0ca:[()=>n.e(72951).then(n.bind(n,11141)),"@site/docs/050-fullstack/010-autentykacja-i-autoryzacja/010-implementacja-autentykacji/010-projekt-systemu-uwierzytelniania.mdx",11141],cb12a0f1:[()=>n.e(34123).then(n.bind(n,44491)),"@site/src/pages/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionCode.md",44491],cb2433f7:[()=>Promise.all([n.e(40532),n.e(3473),n.e(7015)]).then(n.bind(n,9311)),"@site/src/pages/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/index.mdx",9311],cb2834e6:[()=>n.e(4005).then(n.t.bind(n,95063,19)),"~docs/default/tag-tags-graph-ql-120.json",95063],cb50e0fd:[()=>n.e(31106).then(n.bind(n,78105)),"@site/src/pages/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionCode.md",78105],cb7b101d:[()=>n.e(6501).then(n.t.bind(n,6187,19)),"~docs/default/tag-tags-grafana-c42.json",6187],cbb3be21:[()=>n.e(40607).then(n.bind(n,97326)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/525-rozmieszczenie-grafik.mdx",97326],cbb989e8:[()=>n.e(15115).then(n.t.bind(n,46572,19)),"~docs/default/tag-tags-testing-974.json",46572],cbf62edd:[()=>n.e(97188).then(n.bind(n,55038)),"@site/docs/050-fullstack/060-next-js/020-mini-projekt-z-next-js/020-stworzenie-strony-glownej.mdx",55038],cbfa5c34:[()=>Promise.all([n.e(40532),n.e(3473),n.e(61126)]).then(n.bind(n,66599)),"@site/src/pages/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/index.mdx",66599],cc8d6db7:[()=>n.e(44365).then(n.t.bind(n,62065,19)),"~docs/default/tag-tags-sass-96e.json",62065],cc9c3941:[()=>n.e(95541).then(n.bind(n,49059)),"@site/docs/010-podstawy/040-programowanie/030-paradygmaty-programowania.mdx",49059],ccc4640b:[()=>n.e(11146).then(n.bind(n,75099)),"@site/src/pages/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/links.md",75099],ccc500fc:[()=>n.e(56307).then(n.bind(n,54988)),"@site/docs/010-podstawy/220-praca-w-it/010-ux-ui-designer.mdx",54988],cd327e74:[()=>Promise.all([n.e(40532),n.e(3473),n.e(27620)]).then(n.bind(n,93021)),"@site/src/pages/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/index.mdx",93021],cd35f088:[()=>n.e(97637).then(n.bind(n,41807)),"@site/src/pages/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugDescription.md",41807],cd3ad747:[()=>n.e(4423).then(n.bind(n,43070)),"@site/src/pages/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionCode.md",43070],cd706f04:[()=>n.e(73225).then(n.bind(n,22732)),"@site/docs/030-frontend/080-zarzadzanie-stanem/020-podstawy-reduxa/020-koncept-dzialania-redux-a.mdx",22732],cd894699:[()=>Promise.all([n.e(40532),n.e(3473),n.e(56883)]).then(n.bind(n,85948)),"@site/src/pages/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/index.mdx",85948],ce35f5d9:[()=>n.e(98525).then(n.bind(n,48885)),"@site/docs/010-podstawy/040-programowanie/050-struktury-i-bazy-danych.mdx",48885],ce61bece:[()=>n.e(56168).then(n.bind(n,27446)),"@site/docs/030-frontend/080-zarzadzanie-stanem/020-podstawy-reduxa/070-laczenie-reduktorow.mdx",27446],cedc390a:[()=>n.e(12953).then(n.t.bind(n,94610,19)),"~docs/default/tag-tags-seo-542.json",94610],cfa297a4:[()=>n.e(39586).then(n.t.bind(n,38069,19)),"~docs/default/tag-tags-a-11-y-c15.json",38069],cfb509c7:[()=>n.e(66822).then(n.bind(n,62478)),"@site/src/pages/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugCode.md",62478],cfdefec2:[()=>n.e(60950).then(n.bind(n,59479)),"@site/src/pages/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugCode.md",59479],d02ab91e:[()=>n.e(49044).then(n.bind(n,49806)),"@site/src/pages/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/links.md",49806],d0359ea5:[()=>n.e(54054).then(n.t.bind(n,4838,19)),"~docs/default/tag-tags-sem-ver-10e.json",4838],d08b7dbc:[()=>n.e(31032).then(n.bind(n,54221)),"@site/docs/030-frontend/020-css/040-menu-mobilne-w-html-css-bez-javascript.mdx",54221],d11837e3:[()=>n.e(18673).then(n.bind(n,43861)),"@site/src/pages/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionDescription.md",43861],d1398c67:[()=>n.e(81851).then(n.t.bind(n,51148,19)),"~docs/default/tag-tags-it-b92.json",51148],d13f3052:[()=>n.e(60269).then(n.bind(n,71204)),"@site/docs/050-fullstack/020-trasowanie/index.mdx",71204],d16bfa8b:[()=>n.e(48238).then(n.bind(n,56669)),"@site/src/pages/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionDescription.md",56669],d1c3e56f:[()=>Promise.all([n.e(40532),n.e(3473),n.e(13043)]).then(n.bind(n,86345)),"@site/src/pages/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/index.mdx",86345],d26acc1c:[()=>n.e(74823).then(n.t.bind(n,6304,19)),"~docs/default/tag-tags-node-js-759.json",6304],d292be02:[()=>n.e(49936).then(n.bind(n,78438)),"@site/src/pages/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionDescription.md",78438],d2aec923:[()=>Promise.all([n.e(40532),n.e(3473),n.e(95875)]).then(n.bind(n,62325)),"@site/src/pages/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/index.mdx",62325],d2b4e236:[()=>n.e(77675).then(n.bind(n,32381)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/000-wprowadzenie.mdx",32381],d2e2c39f:[()=>n.e(16860).then(n.bind(n,96179)),"@site/src/pages/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionDescription.md",96179],d31e779f:[()=>n.e(98813).then(n.t.bind(n,4908,19)),"~docs/default/tag-tags-code-review-ed9.json",4908],d3844963:[()=>n.e(29413).then(n.bind(n,29639)),"@site/src/pages/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugCode.md",29639],d389b14e:[()=>n.e(48619).then(n.bind(n,23453)),"@site/src/pages/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionDescription.md",23453],d484a575:[()=>n.e(58485).then(n.bind(n,57962)),"@site/docs/020-ux-ui/040-przeprojektowanie-interfejsu-strony-internetowej-gls.mdx",57962],d49f4d31:[()=>n.e(78959).then(n.bind(n,30090)),"@site/src/pages/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionCode.md",30090],d5875b60:[()=>n.e(18942).then(n.t.bind(n,40249,19)),"~docs/default/tag-tags-api-f4a.json",40249],d6bdfd6e:[()=>n.e(71747).then(n.bind(n,95776)),"@site/src/pages/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/links.md",95776],d6d9252c:[()=>n.e(59350).then(n.bind(n,7800)),"@site/src/pages/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugDescription.md",7800],d7f0470a:[()=>n.e(70789).then(n.bind(n,70256)),"@site/docs/040-backend/130-monitoring/index.mdx",70256],d7f390c8:[()=>n.e(62200).then(n.t.bind(n,18446,19)),"~docs/default/tag-tags-developer-439.json",18446],d84f392e:[()=>Promise.all([n.e(40532),n.e(3473),n.e(87228)]).then(n.bind(n,21540)),"@site/src/pages/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/index.mdx",21540],d8754a83:[()=>n.e(62368).then(n.bind(n,49502)),"@site/src/pages/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/links.md",49502],d8756ba1:[()=>n.e(32353).then(n.bind(n,46409)),"@site/src/pages/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/links.md",46409],d8a25ba0:[()=>Promise.all([n.e(40532),n.e(42193)]).then(n.bind(n,10892)),"@site/docs/050-fullstack/060-next-js/020-mini-projekt-z-next-js/index.mdx",10892],d8ed4f82:[()=>n.e(45352).then(n.bind(n,35311)),"@site/src/pages/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionDescription.md",35311],d96bdff9:[()=>n.e(33278).then(n.t.bind(n,36174,19)),"~docs/default/tag-tags-ts-ddf.json",36174],d9b572bb:[()=>n.e(34298).then(n.t.bind(n,19057,19)),"~docs/default/tag-tags-cs-017.json",19057],da3c7939:[()=>n.e(57922).then(n.bind(n,67072)),"@site/src/pages/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionDescription.md",67072],da9f8516:[()=>n.e(90243).then(n.bind(n,11548)),"@site/src/pages/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugCode.md",11548],db1cecfd:[()=>Promise.all([n.e(40532),n.e(3473),n.e(22214)]).then(n.bind(n,33191)),"@site/src/pages/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/index.mdx",33191],db523f3d:[()=>n.e(55534).then(n.bind(n,18268)),"@site/src/pages/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugCode.md",18268],db88d36c:[()=>n.e(89895).then(n.bind(n,54605)),"@site/src/pages/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/links.md",54605],db9f9bb2:[()=>n.e(93343).then(n.bind(n,80080)),"@site/src/pages/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionDescription.md",80080],dba55630:[()=>n.e(46609).then(n.t.bind(n,25745,19)),"~docs/default/tag-tags-git-925.json",25745],dbd503d3:[()=>n.e(85372).then(n.bind(n,59055)),"@site/src/pages/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/links.md",59055],dce08ef6:[()=>Promise.all([n.e(40532),n.e(88935)]).then(n.bind(n,71936)),"@site/docs/050-fullstack/010-autentykacja-i-autoryzacja/010-implementacja-autentykacji/index.mdx",71936],ddb9fb9d:[()=>n.e(11878).then(n.t.bind(n,4778,19)),"~docs/default/tag-tags-scrum-117.json",4778],ddc43b58:[()=>Promise.all([n.e(40532),n.e(3473),n.e(27984)]).then(n.bind(n,39983)),"@site/src/pages/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/index.mdx",39983],ddc8cd89:[()=>n.e(11801).then(n.bind(n,24416)),"@site/docs/040-backend/030-api-zaplecza/020-graphql.mdx",24416],dddd2027:[()=>n.e(71257).then(n.bind(n,20733)),"@site/src/pages/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/links.md",20733],ddff506f:[()=>n.e(10899).then(n.bind(n,94029)),"@site/src/pages/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionDescription.md",94029],de0ea644:[()=>n.e(86700).then(n.bind(n,62430)),"@site/src/pages/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/links.md",62430],de37878b:[()=>n.e(18987).then(n.t.bind(n,57851,19)),"~docs/default/tag-tags-marketing-4a6.json",57851],de75a204:[()=>n.e(10195).then(n.bind(n,89568)),"@site/src/pages/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionCode.md",89568],dea09956:[()=>n.e(22863).then(n.bind(n,37128)),"@site/docs/010-podstawy/190-edytory-kodu/020-vim.mdx",37128],ded9aecb:[()=>n.e(15967).then(n.bind(n,27789)),"@site/src/pages/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/links.md",27789],dee91958:[()=>n.e(30359).then(n.bind(n,92891)),"@site/docs/010-podstawy/010-sprzet-komputerowy/000-system-binarny/020-system-binarny.mdx",92891],deff19d0:[()=>n.e(69816).then(n.bind(n,25392)),"@site/src/pages/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugCode.md",25392],df203c0f:[()=>n.e(99924).then(n.bind(n,97068)),"@theme/DocTagDocListPage",97068],df4d1eca:[()=>n.e(93049).then(n.bind(n,49841)),"@site/src/pages/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/links.md",49841],dfad4e5b:[()=>n.e(67211).then(n.bind(n,61301)),"@site/src/pages/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionCode.md",61301],e082f5ea:[()=>n.e(55411).then(n.bind(n,9155)),"@site/src/pages/100-bugow-js/sukces.mdx",9155],e0c1c0cc:[()=>n.e(62946).then(n.bind(n,52545)),"@site/src/pages/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugCode.md",52545],e13c7883:[()=>Promise.all([n.e(40532),n.e(3473),n.e(43692)]).then(n.bind(n,19764)),"@site/src/pages/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/index.mdx",19764],e191101b:[()=>n.e(2705).then(n.bind(n,48995)),"@site/src/pages/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugCode.md",48995],e216f4da:[()=>n.e(19496).then(n.bind(n,99423)),"@site/src/pages/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugDescription.md",99423],e225b845:[()=>n.e(86850).then(n.bind(n,46213)),"@site/docs/030-frontend/090-progresywne-aplikacje/index.mdx",46213],e27fbbe8:[()=>Promise.all([n.e(40532),n.e(3473),n.e(93985)]).then(n.bind(n,32505)),"@site/src/pages/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/index.mdx",32505],e28ff769:[()=>n.e(57417).then(n.t.bind(n,45314,19)),"~docs/default/tag-tags-osems-fe6.json",45314],e2a348e1:[()=>n.e(64911).then(n.bind(n,66386)),"@site/src/pages/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionCode.md",66386],e2f82b8d:[()=>n.e(38718).then(n.bind(n,58950)),"@site/src/pages/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugDescription.md",58950],e30d710f:[()=>n.e(60166).then(n.bind(n,15633)),"@site/docs/010-podstawy/150-wydajnosc/index.mdx",15633],e3205e86:[()=>n.e(84313).then(n.bind(n,29014)),"@site/src/pages/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionDescription.md",29014],e3921745:[()=>n.e(92922).then(n.bind(n,78963)),"@site/src/pages/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugCode.md",78963],e39def45:[()=>n.e(33385).then(n.bind(n,9323)),"@site/docs/010-podstawy/040-programowanie/020-typowanie-statyczne-i-dynamiczne.mdx",9323],e3c52b73:[()=>Promise.all([n.e(40532),n.e(3473),n.e(27879)]).then(n.bind(n,32762)),"@site/src/pages/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/index.mdx",32762],e408ddd1:[()=>n.e(57868).then(n.t.bind(n,28240,19)),"~docs/default/tag-tags-readme-681.json",28240],e41cc976:[()=>n.e(96293).then(n.bind(n,18238)),"@site/src/pages/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/links.md",18238],e41cf7ed:[()=>Promise.all([n.e(40532),n.e(3473),n.e(14041)]).then(n.bind(n,7747)),"@site/src/pages/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/index.mdx",7747],e432597c:[()=>n.e(80389).then(n.bind(n,70859)),"@site/src/pages/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/links.md",70859],e43f3435:[()=>Promise.all([n.e(40532),n.e(3473),n.e(86111)]).then(n.bind(n,51128)),"@site/src/pages/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/index.mdx",51128],e47104bd:[()=>Promise.all([n.e(40532),n.e(3473),n.e(13721)]).then(n.bind(n,33574)),"@site/src/pages/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/index.mdx",33574],e4e245d7:[()=>n.e(53302).then(n.bind(n,62685)),"@site/src/pages/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/links.md",62685],e4e385e6:[()=>n.e(20827).then(n.bind(n,17120)),"@site/src/pages/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionCode.md",17120],e50fb3d1:[()=>Promise.all([n.e(40532),n.e(3473),n.e(53470)]).then(n.bind(n,49077)),"@site/src/pages/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/index.mdx",49077],e528424c:[()=>Promise.all([n.e(40532),n.e(3473),n.e(93583)]).then(n.bind(n,84598)),"@site/src/pages/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/index.mdx",84598],e5501d88:[()=>n.e(20005).then(n.bind(n,76800)),"@site/src/pages/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugDescription.md",76800],e6036066:[()=>n.e(1983).then(n.bind(n,9677)),"@site/src/pages/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/links.md",9677],e6251d7b:[()=>n.e(96370).then(n.t.bind(n,53102,19)),"~docs/default/tag-tags-tailwind-dd9.json",53102],e62e4577:[()=>n.e(31489).then(n.bind(n,4211)),"@site/src/pages/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/links.md",4211],e6684714:[()=>n.e(66175).then(n.bind(n,67536)),"@site/docs/010-podstawy/110-dns-i-domeny/index.mdx",67536],e6bf88fd:[()=>n.e(17899).then(n.bind(n,61481)),"@site/src/pages/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionDescription.md",61481],e6cad7e4:[()=>n.e(36682).then(n.bind(n,55047)),"@site/src/pages/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionCode.md",55047],e6f3dde7:[()=>n.e(25708).then(n.bind(n,15114)),"@site/src/pages/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionDescription.md",15114],e6f8a6ef:[()=>n.e(4009).then(n.t.bind(n,20585,19)),"~docs/default/tag-tags-virtualbox-383.json",20585],e720185f:[()=>n.e(50916).then(n.bind(n,62909)),"@site/docs/010-podstawy/060-jezyki-programowania/020-c.mdx",62909],e7edc101:[()=>n.e(33902).then(n.bind(n,80747)),"@site/src/pages/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/links.md",80747],e854041a:[()=>Promise.all([n.e(40532),n.e(3473),n.e(6551)]).then(n.bind(n,51410)),"@site/src/pages/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/index.mdx",51410],e85f022e:[()=>n.e(93636).then(n.bind(n,4891)),"@site/src/pages/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionDescription.md",4891],e88156d1:[()=>Promise.all([n.e(40532),n.e(3473),n.e(10214)]).then(n.bind(n,84535)),"@site/src/pages/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/index.mdx",84535],e8aff1e0:[()=>Promise.all([n.e(40532),n.e(3473),n.e(13688)]).then(n.bind(n,70942)),"@site/src/pages/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/index.mdx",70942],e8f333dd:[()=>n.e(54456).then(n.t.bind(n,87665,19)),"~docs/default/tag-tags-vm-8a9.json",87665],e9077979:[()=>n.e(64049).then(n.bind(n,85327)),"@site/docs/010-podstawy/070-kontrola-wersji/010-podstawy-gita/040-ignorowanie-plikow-i-katalogow.mdx",85327],e91a71ff:[()=>n.e(3269).then(n.bind(n,91827)),"@site/src/pages/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionDescription.md",91827],e96aa823:[()=>n.e(6071).then(n.bind(n,14431)),"@site/src/pages/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugDescription.md",14431],e96ec661:[()=>n.e(70085).then(n.bind(n,5449)),"@site/docs/010-podstawy/100-siec/010-jak-dziala-internet.mdx",5449],e9b98b51:[()=>n.e(88342).then(n.bind(n,90399)),"@site/src/pages/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugCode.md",90399],eabad0ae:[()=>n.e(95359).then(n.bind(n,64296)),"@site/src/pages/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionDescription.md",64296],eae4e405:[()=>n.e(86531).then(n.bind(n,61835)),"@site/docs/010-podstawy/090-pamiec-podreczna/index.mdx",61835],eb64c09b:[()=>n.e(56027).then(n.bind(n,82425)),"@site/src/pages/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugCode.md",82425],eb9ffec0:[()=>n.e(78729).then(n.bind(n,55880)),"@site/src/pages/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/links.md",55880],ebbabef2:[()=>n.e(84395).then(n.bind(n,38380)),"@site/src/pages/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugDescription.md",38380],ebe70892:[()=>Promise.all([n.e(40532),n.e(3473),n.e(53526)]).then(n.bind(n,59218)),"@site/src/pages/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/index.mdx",59218],ec6fef3a:[()=>Promise.all([n.e(40532),n.e(3473),n.e(10653)]).then(n.bind(n,10319)),"@site/src/pages/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/index.mdx",10319],ecc75780:[()=>n.e(79116).then(n.bind(n,90834)),"@site/src/pages/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionDescription.md",90834],ed2f06be:[()=>n.e(55377).then(n.bind(n,61459)),"@site/src/pages/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugCode.md",61459],ed645329:[()=>n.e(14236).then(n.t.bind(n,42578,19)),"~docs/default/tag-tags-cloud-c13.json",42578],edf2427f:[()=>n.e(44890).then(n.bind(n,92164)),"@site/src/pages/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionCode.md",92164],ef00f9dc:[()=>n.e(60727).then(n.bind(n,91282)),"@site/src/pages/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionCode.md",91282],ef3b5271:[()=>n.e(53578).then(n.t.bind(n,88510,19)),"~docs/default/tag-tags-unit-945.json",88510],efa5fcef:[()=>n.e(95510).then(n.t.bind(n,98070,19)),"~docs/default/tag-tags-apple-d0b.json",98070],f042ee20:[()=>n.e(30259).then(n.bind(n,49884)),"@site/src/pages/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionCode.md",49884],f0522416:[()=>n.e(984).then(n.t.bind(n,36999,19)),"~docs/default/tag-tags-vcs-3fc.json",36999],f05655d5:[()=>n.e(30118).then(n.bind(n,7006)),"@site/src/pages/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionDescription.md",7006],f0682135:[()=>n.e(33269).then(n.bind(n,44245)),"@site/src/pages/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionCode.md",44245],f0f3b84a:[()=>n.e(50080).then(n.bind(n,6262)),"@site/src/pages/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugDescription.md",6262],f113a9ad:[()=>n.e(49319).then(n.bind(n,19006)),"@site/src/pages/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionCode.md",19006],f1b15f4f:[()=>n.e(12501).then(n.t.bind(n,59460,19)),"~docs/default/tag-tags-prisma-179.json",59460],f1c23ce2:[()=>n.e(1718).then(n.bind(n,54137)),"@site/src/pages/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugDescription.md",54137],f21972b9:[()=>n.e(9478).then(n.bind(n,64736)),"@site/src/pages/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionDescription.md",64736],f21fdbbb:[()=>n.e(43259).then(n.t.bind(n,66677,19)),"~docs/default/tag-tags-oop-c38.json",66677],f27731f5:[()=>n.e(70437).then(n.t.bind(n,76875,19)),"~docs/default/tag-tags-tcp-ip-e3d.json",76875],f2bf6a7e:[()=>n.e(40722).then(n.t.bind(n,99394,19)),"~docs/default/tag-tags-free-bsd-89d.json",99394],f3020eb8:[()=>Promise.all([n.e(40532),n.e(94818)]).then(n.bind(n,54998)),"@site/docs/010-podstawy/010-sprzet-komputerowy/000-system-binarny/index.mdx",54998],f35a7ead:[()=>n.e(72266).then(n.bind(n,75228)),"@site/src/pages/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/links.md",75228],f36e7a87:[()=>n.e(94725).then(n.bind(n,22421)),"@site/src/pages/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugCode.md",22421],f415b733:[()=>n.e(46934).then(n.t.bind(n,74930,19)),"~docs/default/tag-tags-serverless-f69.json",74930],f430487a:[()=>n.e(20284).then(n.bind(n,73813)),"@site/src/pages/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/links.md",73813],f44c625b:[()=>n.e(14615).then(n.bind(n,11881)),"@site/src/pages/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugCode.md",11881],f4530064:[()=>n.e(71584).then(n.bind(n,51483)),"@site/src/pages/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/links.md",51483],f4568fd4:[()=>n.e(42895).then(n.bind(n,54234)),"@site/docs/010-podstawy/140-licencje/index.mdx",54234],f457aeaf:[()=>n.e(66434).then(n.bind(n,80505)),"@site/src/pages/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionDescription.md",80505],f4689a72:[()=>n.e(16017).then(n.bind(n,50219)),"@site/src/pages/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugCode.md",50219],f4763366:[()=>n.e(53078).then(n.t.bind(n,83916,19)),"~docs/default/tag-tags-cli-09a.json",83916],f4fbc6cf:[()=>n.e(16508).then(n.bind(n,82427)),"@site/src/pages/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/links.md",82427],f52b3e0c:[()=>Promise.all([n.e(40532),n.e(3473),n.e(15735)]).then(n.bind(n,14958)),"@site/src/pages/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/index.mdx",14958],f56d2877:[()=>n.e(98269).then(n.bind(n,24030)),"@site/src/pages/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/links.md",24030],f5a94113:[()=>n.e(71723).then(n.bind(n,62752)),"@site/src/pages/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugCode.md",62752],f5d1779b:[()=>n.e(63665).then(n.t.bind(n,68452,19)),"~docs/default/tag-tags-no-sql-b20.json",68452],f65f218b:[()=>n.e(18453).then(n.bind(n,91958)),"@site/docs/020-ux-ui/010-projektowanie-interfejsu-i-doswiadczen-uzytkownikow/320-mapa-strony.mdx",91958],f6692c73:[()=>n.e(17559).then(n.t.bind(n,96194,19)),"~docs/default/tag-tags-kafka-384.json",96194],f70aa095:[()=>n.e(79350).then(n.bind(n,11474)),"@site/src/pages/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugDescription.md",11474],f7bae6de:[()=>n.e(5971).then(n.bind(n,57549)),"@site/src/pages/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionDescription.md",57549],f84cd168:[()=>n.e(80514).then(n.bind(n,95666)),"@site/docs/010-podstawy/070-kontrola-wersji/010-podstawy-gita/030-galezie-laczenie-galezi-i-rozwiazywanie-konfliktow.mdx",95666],f8f47053:[()=>n.e(80812).then(n.bind(n,38223)),"@site/src/pages/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugDescription.md",38223],f92ef410:[()=>Promise.all([n.e(40532),n.e(3473),n.e(28049)]).then(n.bind(n,93635)),"@site/src/pages/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/index.mdx",93635],f94c1a71:[()=>n.e(35987).then(n.bind(n,34897)),"@site/src/pages/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugCode.md",34897],f953a126:[()=>n.e(73736).then(n.bind(n,69277)),"@site/src/pages/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugDescription.md",69277],f9625544:[()=>n.e(36359).then(n.t.bind(n,49399,19)),"~docs/default/tag-tags-mobile-277.json",49399],f989d062:[()=>n.e(4982).then(n.bind(n,86181)),"@site/src/pages/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionDescription.md",86181],f9ce6cc8:[()=>n.e(76472).then(n.bind(n,17833)),"@site/src/pages/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugCode.md",17833],fa28ad03:[()=>n.e(48897).then(n.bind(n,25370)),"@site/src/pages/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionCode.md",25370],fa4fac62:[()=>n.e(42381).then(n.bind(n,32162)),"@site/src/pages/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugDescription.md",32162],fa792f1c:[()=>n.e(15725).then(n.bind(n,45399)),"@site/src/pages/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionDescription.md",45399],fa9af718:[()=>n.e(74105).then(n.bind(n,41437)),"@site/src/pages/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/links.md",41437],fb2cd42c:[()=>n.e(16503).then(n.bind(n,10762)),"@site/src/pages/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionDescription.md",10762],fb67979e:[()=>n.e(70847).then(n.bind(n,16679)),"@site/docs/010-podstawy/060-jezyki-programowania/index.mdx",16679],fb797052:[()=>Promise.all([n.e(40532),n.e(3473),n.e(31185)]).then(n.bind(n,33577)),"@site/src/pages/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/index.mdx",33577],fc059f5d:[()=>n.e(98577).then(n.bind(n,47490)),"@site/src/pages/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugDescription.md",47490],fc262a50:[()=>n.e(18430).then(n.bind(n,53528)),"@site/src/pages/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionDescription.md",53528],fc4340d2:[()=>n.e(62590).then(n.bind(n,47003)),"@site/docs/040-backend/040-bazy-danych/index.mdx",47003],fc6430c0:[()=>n.e(32771).then(n.bind(n,49727)),"@site/src/pages/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionDescription.md",49727],fcc928cc:[()=>n.e(28553).then(n.t.bind(n,97434,19)),"~docs/default/tag-tags-php-67e.json",97434],fd08e427:[()=>n.e(69020).then(n.bind(n,70382)),"@site/src/pages/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/links.md",70382],fd1f9f5e:[()=>n.e(32945).then(n.bind(n,74630)),"@site/src/pages/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugCode.md",74630],fde3afc6:[()=>n.e(20156).then(n.bind(n,7498)),"@site/src/pages/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionCode.md",7498],feacc639:[()=>n.e(43120).then(n.bind(n,32876)),"@site/src/pages/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionDescription.md",32876],feb62326:[()=>n.e(54613).then(n.bind(n,6566)),"@site/src/pages/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugCode.md",6566],fee0f439:[()=>n.e(94741).then(n.bind(n,76764)),"@site/src/pages/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugCode.md",76764],fee641d5:[()=>n.e(42675).then(n.bind(n,38772)),"@site/docs/030-frontend/030-javascript/030-nie-uzywaj-luznego-porownania-w-javascript.mdx",38772],ff02220a:[()=>Promise.all([n.e(40532),n.e(3473),n.e(42640)]).then(n.bind(n,72997)),"@site/src/pages/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/index.mdx",72997]};function d(e){let{error:t,retry:n,pastDelay:o}=e;return t?a.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},a.createElement("p",null,String(t)),a.createElement("div",null,a.createElement("button",{type:"button",onClick:n},"Retry"))):o?a.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},a.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},a.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},a.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},a.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),a.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},a.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),a.createElement("circle",{cx:"22",cy:"22",r:"8"},a.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(99670),b=n(30226);function l(e,t){if("*"===e)return i()({loading:d,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return a.createElement(b.z,{value:{plugin:{name:"native",id:"default"}}},a.createElement(n,t))}});const c=s[`${e}-${t}`],l={},f=[],p=[],g=(0,u.Z)(c);return Object.entries(g).forEach((e=>{let[t,n]=e;const a=r[n];a&&(l[t]=a[0],f.push(a[1]),p.push(a[2]))})),i().Map({loading:d,loader:l,modules:f,webpack:()=>p,render(t,n){const i=JSON.parse(JSON.stringify(c));Object.entries(t).forEach((t=>{let[n,a]=t;const o=a.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(a).filter((e=>"default"!==e)).forEach((e=>{o[e]=a[e]}));let c=i;const s=n.split(".");s.slice(0,-1).forEach((e=>{c=c[e]})),c[s[s.length-1]]=o}));const s=i.__comp;delete i.__comp;const r=i.__context;return delete i.__context,a.createElement(b.z,{value:r},a.createElement(s,(0,o.Z)({},i,n)))}})}const f=[{path:"/100-bugow-js",component:l("/100-bugow-js","f7f"),exact:!0},{path:"/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6",component:l("/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6","537"),exact:!0},{path:"/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugCode",component:l("/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugCode","73f"),exact:!0},{path:"/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugDescription",component:l("/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/bugDescription","253"),exact:!0},{path:"/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/links",component:l("/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/links","fc2"),exact:!0},{path:"/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionCode",component:l("/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionCode","efd"),exact:!0},{path:"/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionDescription",component:l("/100-bugow-js/05b581c3-2b7e-4ad7-b168-648f9849ebc6/solutionDescription","f49"),exact:!0},{path:"/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732",component:l("/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732","4b5"),exact:!0},{path:"/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugCode",component:l("/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugCode","54c"),exact:!0},{path:"/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugDescription",component:l("/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/bugDescription","b3d"),exact:!0},{path:"/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/links",component:l("/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/links","cb3"),exact:!0},{path:"/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionCode",component:l("/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionCode","b90"),exact:!0},{path:"/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionDescription",component:l("/100-bugow-js/07a13b0b-35fe-4c30-90b0-1ef7527d7732/solutionDescription","d46"),exact:!0},{path:"/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b",component:l("/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b","871"),exact:!0},{path:"/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugCode",component:l("/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugCode","b9c"),exact:!0},{path:"/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugDescription",component:l("/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/bugDescription","152"),exact:!0},{path:"/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/links",component:l("/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/links","812"),exact:!0},{path:"/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionCode",component:l("/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionCode","338"),exact:!0},{path:"/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionDescription",component:l("/100-bugow-js/0c3c689a-2e16-4c7a-b6c9-5333cc00289b/solutionDescription","011"),exact:!0},{path:"/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e",component:l("/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e","009"),exact:!0},{path:"/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugCode",component:l("/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugCode","ea4"),exact:!0},{path:"/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugDescription",component:l("/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/bugDescription","ba2"),exact:!0},{path:"/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/links",component:l("/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/links","36a"),exact:!0},{path:"/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionCode",component:l("/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionCode","7a9"),exact:!0},{path:"/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionDescription",component:l("/100-bugow-js/0dd66a7d-2f2e-43ca-80f5-b9ffa606279e/solutionDescription","51d"),exact:!0},{path:"/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a",component:l("/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a","63f"),exact:!0},{path:"/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugCode",component:l("/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugCode","941"),exact:!0},{path:"/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugDescription",component:l("/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/bugDescription","e58"),exact:!0},{path:"/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/links",component:l("/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/links","853"),exact:!0},{path:"/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionCode",component:l("/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionCode","61c"),exact:!0},{path:"/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionDescription",component:l("/100-bugow-js/0e1bfcac-da2c-4569-9dde-eb6c281eef1a/solutionDescription","609"),exact:!0},{path:"/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03",component:l("/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03","d88"),exact:!0},{path:"/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugCode",component:l("/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugCode","bb4"),exact:!0},{path:"/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugDescription",component:l("/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/bugDescription","3be"),exact:!0},{path:"/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/links",component:l("/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/links","288"),exact:!0},{path:"/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionCode",component:l("/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionCode","9a4"),exact:!0},{path:"/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionDescription",component:l("/100-bugow-js/111bba83-a18f-4245-ae3d-66e71e46db03/solutionDescription","565"),exact:!0},{path:"/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885",component:l("/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885","a03"),exact:!0},{path:"/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugCode",component:l("/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugCode","48d"),exact:!0},{path:"/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugDescription",component:l("/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/bugDescription","e26"),exact:!0},{path:"/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/links",component:l("/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/links","bc3"),exact:!0},{path:"/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionCode",component:l("/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionCode","78e"),exact:!0},{path:"/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionDescription",component:l("/100-bugow-js/1257df57-264f-4f1c-984c-89222207e885/solutionDescription","f6d"),exact:!0},{path:"/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211",component:l("/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211","149"),exact:!0},{path:"/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugCode",component:l("/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugCode","946"),exact:!0},{path:"/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugDescription",component:l("/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/bugDescription","3bb"),exact:!0},{path:"/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/links",component:l("/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/links","934"),exact:!0},{path:"/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionCode",component:l("/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionCode","803"),exact:!0},{path:"/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionDescription",component:l("/100-bugow-js/12e5df98-c0ca-429c-a9e8-8517c1873211/solutionDescription","d64"),exact:!0},{path:"/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53",component:l("/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53","12c"),exact:!0},{path:"/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugCode",component:l("/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugCode","997"),exact:!0},{path:"/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugDescription",component:l("/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/bugDescription","79b"),exact:!0},{path:"/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/links",component:l("/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/links","4bd"),exact:!0},{path:"/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionCode",component:l("/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionCode","d46"),exact:!0},{path:"/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionDescription",component:l("/100-bugow-js/1342370d-03e0-4f0b-aa22-69e05fc64d53/solutionDescription","ef2"),exact:!0},{path:"/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4",component:l("/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4","e7b"),exact:!0},{path:"/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugCode",component:l("/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugCode","1e6"),exact:!0},{path:"/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugDescription",component:l("/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/bugDescription","30a"),exact:!0},{path:"/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/links",component:l("/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/links","edc"),exact:!0},{path:"/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionCode",component:l("/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionCode","89d"),exact:!0},{path:"/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionDescription",component:l("/100-bugow-js/13faa6fb-1dfe-41df-9f96-62618e9ca0c4/solutionDescription","2d2"),exact:!0},{path:"/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802",component:l("/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802","a19"),exact:!0},{path:"/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugCode",component:l("/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugCode","087"),exact:!0},{path:"/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugDescription",component:l("/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/bugDescription","24d"),exact:!0},{path:"/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/links",component:l("/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/links","042"),exact:!0},{path:"/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionCode",component:l("/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionCode","085"),exact:!0},{path:"/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionDescription",component:l("/100-bugow-js/14a8fddb-055c-4504-841b-cb3f1ba5d802/solutionDescription","d34"),exact:!0},{path:"/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd",component:l("/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd","9bd"),exact:!0},{path:"/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugCode",component:l("/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugCode","d19"),exact:!0},{path:"/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugDescription",component:l("/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/bugDescription","23f"),exact:!0},{path:"/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/links",component:l("/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/links","e98"),exact:!0},{path:"/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionCode",component:l("/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionCode","e43"),exact:!0},{path:"/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionDescription",component:l("/100-bugow-js/14c07311-04f4-48dd-b5a6-8ebdc0a9a6cd/solutionDescription","9f2"),exact:!0},{path:"/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f",component:l("/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f","654"),exact:!0},{path:"/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugCode",component:l("/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugCode","d35"),exact:!0},{path:"/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugDescription",component:l("/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/bugDescription","18b"),exact:!0},{path:"/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/links",component:l("/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/links","f0d"),exact:!0},{path:"/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionCode",component:l("/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionCode","a38"),exact:!0},{path:"/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionDescription",component:l("/100-bugow-js/16de4343-9b81-49c5-92ea-e3e6b377132f/solutionDescription","9c8"),exact:!0},{path:"/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7",component:l("/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7","22d"),exact:!0},{path:"/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugCode",component:l("/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugCode","dbc"),exact:!0},{path:"/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugDescription",component:l("/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/bugDescription","4f2"),exact:!0},{path:"/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/links",component:l("/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/links","455"),exact:!0},{path:"/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionCode",component:l("/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionCode","1bc"),exact:!0},{path:"/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionDescription",component:l("/100-bugow-js/1748706a-b38f-403a-ab65-6666bd6bede7/solutionDescription","087"),exact:!0},{path:"/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696",component:l("/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696","c3a"),exact:!0},{path:"/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugCode",component:l("/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugCode","567"),exact:!0},{path:"/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugDescription",component:l("/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/bugDescription","c9c"),exact:!0},{path:"/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/links",component:l("/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/links","258"),exact:!0},{path:"/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionCode",component:l("/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionCode","60b"),exact:!0},{path:"/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionDescription",component:l("/100-bugow-js/17c27ac8-01d9-463d-84b4-f81cee835696/solutionDescription","96e"),exact:!0},{path:"/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b",component:l("/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b","cf2"),exact:!0},{path:"/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugCode",component:l("/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugCode","f7c"),exact:!0},{path:"/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugDescription",component:l("/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/bugDescription","c4e"),exact:!0},{path:"/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/links",component:l("/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/links","75b"),exact:!0},{path:"/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionCode",component:l("/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionCode","9b0"),exact:!0},{path:"/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionDescription",component:l("/100-bugow-js/1be29c44-56a0-4d02-81e3-8c93f17b434b/solutionDescription","cc5"),exact:!0},{path:"/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776",component:l("/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776","771"),exact:!0},{path:"/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugCode",component:l("/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugCode","798"),exact:!0},{path:"/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugDescription",component:l("/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/bugDescription","89f"),exact:!0},{path:"/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/links",component:l("/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/links","44c"),exact:!0},{path:"/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionCode",component:l("/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionCode","131"),exact:!0},{path:"/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionDescription",component:l("/100-bugow-js/28eab874-606d-49f2-bc6c-f8382476a776/solutionDescription","7c1"),exact:!0},{path:"/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a",component:l("/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a","95d"),exact:!0},{path:"/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugCode",component:l("/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugCode","73f"),exact:!0},{path:"/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugDescription",component:l("/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/bugDescription","2b9"),exact:!0},{path:"/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/links",component:l("/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/links","b3f"),exact:!0},{path:"/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionCode",component:l("/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionCode","d21"),exact:!0},{path:"/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionDescription",component:l("/100-bugow-js/2b40ab53-0110-4a5a-b43e-92e4ab97fd2a/solutionDescription","0f2"),exact:!0},{path:"/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295",component:l("/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295","0db"),exact:!0},{path:"/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugCode",component:l("/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugCode","b70"),exact:!0},{path:"/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugDescription",component:l("/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/bugDescription","69b"),exact:!0},{path:"/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/links",component:l("/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/links","3e6"),exact:!0},{path:"/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionCode",component:l("/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionCode","7e7"),exact:!0},{path:"/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionDescription",component:l("/100-bugow-js/2d8e841d-6b9b-4a0b-9a66-cf92bea23295/solutionDescription","fcd"),exact:!0},{path:"/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f",component:l("/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f","1a6"),exact:!0},{path:"/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugCode",component:l("/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugCode","198"),exact:!0},{path:"/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugDescription",component:l("/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/bugDescription","5d5"),exact:!0},{path:"/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/links",component:l("/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/links","a14"),exact:!0},{path:"/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionCode",component:l("/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionCode","1a4"),exact:!0},{path:"/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionDescription",component:l("/100-bugow-js/2da281dc-b213-448d-b3d2-4b90f901b93f/solutionDescription","987"),exact:!0},{path:"/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143",component:l("/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143","ce5"),exact:!0},{path:"/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugCode",component:l("/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugCode","a61"),exact:!0},{path:"/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugDescription",component:l("/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/bugDescription","0a6"),exact:!0},{path:"/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/links",component:l("/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/links","f5f"),exact:!0},{path:"/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionCode",component:l("/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionCode","44e"),exact:!0},{path:"/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionDescription",component:l("/100-bugow-js/31a6b892-4183-4589-a877-6c172e38d143/solutionDescription","aef"),exact:!0},{path:"/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0",component:l("/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0","1c5"),exact:!0},{path:"/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugCode",component:l("/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugCode","11d"),exact:!0},{path:"/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugDescription",component:l("/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/bugDescription","46d"),exact:!0},{path:"/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/links",component:l("/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/links","9da"),exact:!0},{path:"/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionCode",component:l("/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionCode","7e6"),exact:!0},{path:"/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionDescription",component:l("/100-bugow-js/35bf86c2-709d-4277-ac0d-0c74937a59d0/solutionDescription","560"),exact:!0},{path:"/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc",component:l("/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc","140"),exact:!0},{path:"/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugCode",component:l("/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugCode","ddf"),exact:!0},{path:"/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugDescription",component:l("/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/bugDescription","8c3"),exact:!0},{path:"/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/links",component:l("/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/links","bff"),exact:!0},{path:"/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionCode",component:l("/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionCode","80e"),exact:!0},{path:"/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionDescription",component:l("/100-bugow-js/39272e37-d6ce-4e24-bb1b-b8476234fdcc/solutionDescription","c93"),exact:!0},{path:"/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8",component:l("/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8","758"),exact:!0},{path:"/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugCode",component:l("/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugCode","2fd"),exact:!0},{path:"/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugDescription",component:l("/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/bugDescription","a83"),exact:!0},{path:"/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/links",component:l("/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/links","707"),exact:!0},{path:"/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionCode",component:l("/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionCode","36b"),exact:!0},{path:"/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionDescription",component:l("/100-bugow-js/3bf409bd-9ebd-4cea-8666-c410aec718c8/solutionDescription","864"),exact:!0},{path:"/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7",component:l("/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7","61d"),exact:!0},{path:"/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugCode",component:l("/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugCode","b2c"),exact:!0},{path:"/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugDescription",component:l("/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/bugDescription","433"),exact:!0},{path:"/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/links",component:l("/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/links","85f"),exact:!0},{path:"/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionCode",component:l("/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionCode","901"),exact:!0},{path:"/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionDescription",component:l("/100-bugow-js/3c9e16d8-b6bf-426a-9572-863deaced7c7/solutionDescription","669"),exact:!0},{path:"/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d",component:l("/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d","2ac"),exact:!0},{path:"/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugCode",component:l("/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugCode","e87"),exact:!0},{path:"/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugDescription",component:l("/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/bugDescription","8c5"),exact:!0},{path:"/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/links",component:l("/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/links","99a"),exact:!0},{path:"/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionCode",component:l("/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionCode","973"),exact:!0},{path:"/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionDescription",component:l("/100-bugow-js/3d3e0d19-47d7-4f73-a43f-bc6deaf3cc5d/solutionDescription","427"),exact:!0},{path:"/100-bugow-js/3f068db0-5299-4701-866c-36414d360814",component:l("/100-bugow-js/3f068db0-5299-4701-866c-36414d360814","67b"),exact:!0},{path:"/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugCode",component:l("/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugCode","9f0"),exact:!0},{path:"/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugDescription",component:l("/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/bugDescription","ed8"),exact:!0},{path:"/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/links",component:l("/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/links","cbc"),exact:!0},{path:"/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionCode",component:l("/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionCode","c85"),exact:!0},{path:"/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionDescription",component:l("/100-bugow-js/3f068db0-5299-4701-866c-36414d360814/solutionDescription","81a"),exact:!0},{path:"/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896",component:l("/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896","126"),exact:!0},{path:"/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugCode",component:l("/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugCode","ead"),exact:!0},{path:"/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugDescription",component:l("/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/bugDescription","d29"),exact:!0},{path:"/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/links",component:l("/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/links","997"),exact:!0},{path:"/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionCode",component:l("/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionCode","b1a"),exact:!0},{path:"/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionDescription",component:l("/100-bugow-js/4049d287-c406-4bb7-926c-43627310b896/solutionDescription","967"),exact:!0},{path:"/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166",component:l("/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166","e9b"),exact:!0},{path:"/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugCode",component:l("/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugCode","cce"),exact:!0},{path:"/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugDescription",component:l("/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/bugDescription","4d9"),exact:!0},{path:"/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/links",component:l("/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/links","3a3"),exact:!0},{path:"/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionCode",component:l("/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionCode","a12"),exact:!0},{path:"/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionDescription",component:l("/100-bugow-js/4090ba91-2b59-42f2-93d5-e1ecb4cc1166/solutionDescription","d50"),exact:!0},{path:"/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c",component:l("/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c","50b"),exact:!0},{path:"/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugCode",component:l("/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugCode","a6f"),exact:!0},{path:"/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugDescription",component:l("/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/bugDescription","f7a"),exact:!0},{path:"/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/links",component:l("/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/links","247"),exact:!0},{path:"/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionCode",component:l("/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionCode","d67"),exact:!0},{path:"/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionDescription",component:l("/100-bugow-js/47183b47-e13d-4247-9ef5-a447a35e530c/solutionDescription","dd4"),exact:!0},{path:"/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1",component:l("/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1","b4e"),exact:!0},{path:"/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugCode",component:l("/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugCode","cdc"),exact:!0},{path:"/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugDescription",component:l("/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/bugDescription","5e7"),exact:!0},{path:"/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/links",component:l("/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/links","231"),exact:!0},{path:"/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionCode",component:l("/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionCode","01f"),exact:!0},{path:"/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionDescription",component:l("/100-bugow-js/49405a75-e352-4a37-8afd-d231628e01e1/solutionDescription","681"),exact:!0},{path:"/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8",component:l("/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8","f25"),exact:!0},{path:"/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugCode",component:l("/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugCode","6e1"),exact:!0},{path:"/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugDescription",component:l("/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/bugDescription","a51"),exact:!0},{path:"/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/links",component:l("/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/links","f9f"),exact:!0},{path:"/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionCode",component:l("/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionCode","f2f"),exact:!0},{path:"/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionDescription",component:l("/100-bugow-js/4a3a28c4-f782-4ef5-911f-4f08799f54b8/solutionDescription","ef6"),exact:!0},{path:"/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7",component:l("/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7","d31"),exact:!0},{path:"/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugCode",component:l("/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugCode","ff6"),exact:!0},{path:"/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugDescription",component:l("/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/bugDescription","3a4"),exact:!0},{path:"/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/links",component:l("/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/links","5b3"),exact:!0},{path:"/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionCode",component:l("/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionCode","f63"),exact:!0},{path:"/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionDescription",component:l("/100-bugow-js/4fc04c98-b27d-4eb9-9a44-a69d790f60f7/solutionDescription","86b"),exact:!0},{path:"/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9",component:l("/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9","cb9"),exact:!0},{path:"/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugCode",component:l("/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugCode","611"),exact:!0},{path:"/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugDescription",component:l("/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/bugDescription","584"),exact:!0},{path:"/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/links",component:l("/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/links","a84"),exact:!0},{path:"/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionCode",component:l("/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionCode","d34"),exact:!0},{path:"/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionDescription",component:l("/100-bugow-js/52fbfe20-45e9-4a02-adc1-cb03d30fb6e9/solutionDescription","d33"),exact:!0},{path:"/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d",component:l("/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d","e2c"),exact:!0},{path:"/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugCode",component:l("/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugCode","7e9"),exact:!0},{path:"/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugDescription",component:l("/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/bugDescription","72e"),exact:!0},{path:"/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/links",component:l("/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/links","df9"),exact:!0},{path:"/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionCode",component:l("/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionCode","09e"),exact:!0},{path:"/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionDescription",component:l("/100-bugow-js/546817c4-7ea0-4bdb-90a3-438d4c17693d/solutionDescription","ddd"),exact:!0},{path:"/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59",component:l("/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59","19d"),exact:!0},{path:"/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugCode",component:l("/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugCode","bbd"),exact:!0},{path:"/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugDescription",component:l("/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/bugDescription","f7d"),exact:!0},{path:"/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/links",component:l("/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/links","27c"),exact:!0},{path:"/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionCode",component:l("/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionCode","e9c"),exact:!0},{path:"/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionDescription",component:l("/100-bugow-js/574c299a-b9ec-4b8c-b2db-63e41365ae59/solutionDescription","3bb"),exact:!0},{path:"/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0",component:l("/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0","586"),exact:!0},{path:"/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugCode",component:l("/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugCode","7fe"),exact:!0},{path:"/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugDescription",component:l("/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/bugDescription","3d2"),exact:!0},{path:"/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/links",component:l("/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/links","07d"),exact:!0},{path:"/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionCode",component:l("/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionCode","375"),exact:!0},{path:"/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionDescription",component:l("/100-bugow-js/5838b978-3b1c-433d-b118-9801923593e0/solutionDescription","fc1"),exact:!0},{path:"/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07",component:l("/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07","736"),exact:!0},{path:"/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugCode",component:l("/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugCode","451"),exact:!0},{path:"/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugDescription",component:l("/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/bugDescription","223"),exact:!0},{path:"/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/links",component:l("/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/links","8af"),exact:!0},{path:"/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionCode",component:l("/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionCode","852"),exact:!0},{path:"/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionDescription",component:l("/100-bugow-js/5964c80d-0d4d-42ac-be8b-827cfc1a5a07/solutionDescription","ccf"),exact:!0},{path:"/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0",component:l("/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0","6e7"),exact:!0},{path:"/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugCode",component:l("/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugCode","4e3"),exact:!0},{path:"/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugDescription",component:l("/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/bugDescription","82c"),exact:!0},{path:"/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/links",component:l("/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/links","af6"),exact:!0},{path:"/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionCode",component:l("/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionCode","31a"),exact:!0},{path:"/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionDescription",component:l("/100-bugow-js/5bdd1571-fc82-4acb-82e5-3280ff6344c0/solutionDescription","9ce"),exact:!0},{path:"/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb",component:l("/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb","dce"),exact:!0},{path:"/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugCode",component:l("/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugCode","3ee"),exact:!0},{path:"/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugDescription",component:l("/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/bugDescription","698"),exact:!0},{path:"/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/links",component:l("/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/links","6e2"),exact:!0},{path:"/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionCode",component:l("/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionCode","44c"),exact:!0},{path:"/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionDescription",component:l("/100-bugow-js/5cc2e5b1-db79-420b-8820-67d4d5acaddb/solutionDescription","7be"),exact:!0},{path:"/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8",component:l("/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8","56c"),exact:!0},{path:"/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugCode",component:l("/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugCode","d46"),exact:!0},{path:"/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugDescription",component:l("/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/bugDescription","511"),exact:!0},{path:"/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/links",component:l("/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/links","491"),exact:!0},{path:"/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionCode",component:l("/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionCode","17e"),exact:!0},{path:"/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionDescription",component:l("/100-bugow-js/5e53d805-c959-40a2-9acd-f85e690d58e8/solutionDescription","81b"),exact:!0},{path:"/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b",component:l("/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b","dcf"),exact:!0},{path:"/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugCode",component:l("/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugCode","491"),exact:!0},{path:"/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugDescription",component:l("/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/bugDescription","993"),exact:!0},{path:"/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/links",component:l("/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/links","189"),exact:!0},{path:"/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionCode",component:l("/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionCode","424"),exact:!0},{path:"/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionDescription",component:l("/100-bugow-js/602b9a01-9e69-4966-9cc6-610bebf8466b/solutionDescription","98e"),exact:!0},{path:"/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6",component:l("/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6","c91"),exact:!0},{path:"/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugCode",component:l("/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugCode","572"),exact:!0},{path:"/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugDescription",component:l("/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/bugDescription","c73"),exact:!0},{path:"/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/links",component:l("/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/links","25b"),exact:!0},{path:"/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionCode",component:l("/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionCode","0a4"),exact:!0},{path:"/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionDescription",component:l("/100-bugow-js/62d658b2-cf12-4c95-ab39-11a4d12acae6/solutionDescription","111"),exact:!0},{path:"/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815",component:l("/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815","dd9"),exact:!0},{path:"/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugCode",component:l("/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugCode","ed5"),exact:!0},{path:"/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugDescription",component:l("/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/bugDescription","fae"),exact:!0},{path:"/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/links",component:l("/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/links","a1c"),exact:!0},{path:"/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionCode",component:l("/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionCode","149"),exact:!0},{path:"/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionDescription",component:l("/100-bugow-js/63408939-dd63-4ec2-9eca-719a80260815/solutionDescription","6af"),exact:!0},{path:"/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c",component:l("/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c","af9"),exact:!0},{path:"/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugCode",component:l("/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugCode","dcd"),exact:!0},{path:"/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugDescription",component:l("/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/bugDescription","72c"),exact:!0},{path:"/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/links",component:l("/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/links","f8e"),exact:!0},{path:"/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionCode",component:l("/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionCode","cca"),exact:!0},{path:"/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionDescription",component:l("/100-bugow-js/64e0f8f8-ce00-4d01-bdf1-df6d85759a3c/solutionDescription","6d4"),exact:!0},{path:"/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7",component:l("/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7","e08"),exact:!0},{path:"/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugCode",component:l("/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugCode","35c"),exact:!0},{path:"/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugDescription",component:l("/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/bugDescription","058"),exact:!0},{path:"/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/links",component:l("/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/links","47f"),exact:!0},{path:"/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionCode",component:l("/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionCode","923"),exact:!0},{path:"/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionDescription",component:l("/100-bugow-js/69dd4421-faf2-484d-ab27-26a65940faf7/solutionDescription","b64"),exact:!0},{path:"/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6",component:l("/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6","a47"),exact:!0},{path:"/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugCode",component:l("/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugCode","058"),exact:!0},{path:"/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugDescription",component:l("/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/bugDescription","e12"),exact:!0},{path:"/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/links",component:l("/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/links","fcb"),exact:!0},{path:"/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionCode",component:l("/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionCode","688"),exact:!0},{path:"/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionDescription",component:l("/100-bugow-js/6bc1f45c-7f3e-4207-854f-e4ac9843f8b6/solutionDescription","0f1"),exact:!0},{path:"/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071",component:l("/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071","c30"),exact:!0},{path:"/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugCode",component:l("/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugCode","e36"),exact:!0},{path:"/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugDescription",component:l("/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/bugDescription","0d0"),exact:!0},{path:"/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/links",component:l("/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/links","4f0"),exact:!0},{path:"/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionCode",component:l("/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionCode","269"),exact:!0},{path:"/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionDescription",component:l("/100-bugow-js/6eb2ef7d-4568-4481-b56d-868c1bcd4071/solutionDescription","3c2"),exact:!0},{path:"/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01",component:l("/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01","ecb"),exact:!0},{path:"/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugCode",component:l("/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugCode","b29"),exact:!0},{path:"/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugDescription",component:l("/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/bugDescription","ebc"),exact:!0},{path:"/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/links",component:l("/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/links","bd8"),exact:!0},{path:"/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionCode",component:l("/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionCode","f12"),exact:!0},{path:"/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionDescription",component:l("/100-bugow-js/71c6322b-f4cb-4ab0-9497-0b618c975d01/solutionDescription","afd"),exact:!0},{path:"/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132",component:l("/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132","200"),exact:!0},{path:"/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugCode",component:l("/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugCode","ea3"),exact:!0},{path:"/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugDescription",component:l("/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/bugDescription","a33"),exact:!0},{path:"/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/links",component:l("/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/links","70d"),exact:!0},{path:"/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionCode",component:l("/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionCode","f4f"),exact:!0},{path:"/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionDescription",component:l("/100-bugow-js/74f05a57-ccd6-44f8-a982-aacec55d6132/solutionDescription","f1c"),exact:!0},{path:"/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6",component:l("/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6","24d"),exact:!0},{path:"/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugCode",component:l("/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugCode","3d0"),exact:!0},{path:"/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugDescription",component:l("/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/bugDescription","9b0"),exact:!0},{path:"/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/links",component:l("/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/links","60b"),exact:!0},{path:"/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionCode",component:l("/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionCode","3f4"),exact:!0},{path:"/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionDescription",component:l("/100-bugow-js/7a984008-730d-41bf-be00-1493e1c1cdc6/solutionDescription","e22"),exact:!0},{path:"/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6",component:l("/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6","077"),exact:!0},{path:"/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugCode",component:l("/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugCode","4df"),exact:!0},{path:"/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugDescription",component:l("/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/bugDescription","347"),exact:!0},{path:"/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/links",component:l("/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/links","ac4"),exact:!0},{path:"/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionCode",component:l("/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionCode","42e"),exact:!0},{path:"/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionDescription",component:l("/100-bugow-js/855033cb-80dc-4fd0-9371-f770d65ea1d6/solutionDescription","265"),exact:!0},{path:"/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096",component:l("/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096","533"),exact:!0},{path:"/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugCode",component:l("/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugCode","b0e"),exact:!0},{path:"/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugDescription",component:l("/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/bugDescription","2d2"),exact:!0},{path:"/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/links",component:l("/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/links","d06"),exact:!0},{path:"/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionCode",component:l("/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionCode","668"),exact:!0},{path:"/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionDescription",component:l("/100-bugow-js/86e9f1ca-3f32-445a-a15f-4ce1b6850096/solutionDescription","b28"),exact:!0},{path:"/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09",component:l("/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09","e76"),exact:!0},{path:"/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugCode",component:l("/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugCode","4ab"),exact:!0},{path:"/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugDescription",component:l("/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/bugDescription","7c1"),exact:!0},{path:"/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/links",component:l("/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/links","c91"),exact:!0},{path:"/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionCode",component:l("/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionCode","cf0"),exact:!0},{path:"/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionDescription",component:l("/100-bugow-js/87616015-586b-4477-ac08-cb1bc0e28e09/solutionDescription","e54"),exact:!0},{path:"/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9",component:l("/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9","7d3"),exact:!0},{path:"/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugCode",component:l("/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugCode","996"),exact:!0},{path:"/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugDescription",component:l("/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/bugDescription","d5a"),exact:!0},{path:"/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/links",component:l("/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/links","846"),exact:!0},{path:"/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionCode",component:l("/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionCode","a9b"),exact:!0},{path:"/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionDescription",component:l("/100-bugow-js/880c49ad-04a2-41f3-a4e0-bbc863aa5ec9/solutionDescription","0c9"),exact:!0},{path:"/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd",component:l("/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd","bc0"),exact:!0},{path:"/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugCode",component:l("/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugCode","166"),exact:!0},{path:"/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugDescription",component:l("/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/bugDescription","96e"),exact:!0},{path:"/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/links",component:l("/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/links","872"),exact:!0},{path:"/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionCode",component:l("/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionCode","440"),exact:!0},{path:"/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionDescription",component:l("/100-bugow-js/88306d48-4df5-4c3e-9452-4fee2be681fd/solutionDescription","37e"),exact:!0},{path:"/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0",component:l("/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0","e6b"),exact:!0},{path:"/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugCode",component:l("/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugCode","cf5"),exact:!0},{path:"/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugDescription",component:l("/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/bugDescription","20a"),exact:!0},{path:"/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/links",component:l("/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/links","281"),exact:!0},{path:"/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionCode",component:l("/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionCode","e00"),exact:!0},{path:"/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionDescription",component:l("/100-bugow-js/8bf80212-90d8-4c9b-b6af-3a60223e0fe0/solutionDescription","116"),exact:!0},{path:"/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed",component:l("/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed","765"),exact:!0},{path:"/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugCode",component:l("/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugCode","491"),exact:!0},{path:"/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugDescription",component:l("/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/bugDescription","499"),exact:!0},{path:"/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/links",component:l("/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/links","580"),exact:!0},{path:"/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionCode",component:l("/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionCode","43e"),exact:!0},{path:"/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionDescription",component:l("/100-bugow-js/8c1883e7-6c29-41ff-938b-81d605c565ed/solutionDescription","126"),exact:!0},{path:"/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115",component:l("/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115","ecd"),exact:!0},{path:"/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugCode",component:l("/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugCode","a23"),exact:!0},{path:"/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugDescription",component:l("/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/bugDescription","d36"),exact:!0},{path:"/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/links",component:l("/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/links","d5f"),exact:!0},{path:"/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionCode",component:l("/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionCode","447"),exact:!0},{path:"/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionDescription",component:l("/100-bugow-js/9040ce84-a478-468c-aca6-16b9f909e115/solutionDescription","b92"),exact:!0},{path:"/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961",component:l("/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961","929"),exact:!0},{path:"/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugCode",component:l("/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugCode","e5f"),exact:!0},{path:"/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugDescription",component:l("/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/bugDescription","33f"),exact:!0},{path:"/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/links",component:l("/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/links","e88"),exact:!0},{path:"/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionCode",component:l("/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionCode","f31"),exact:!0},{path:"/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionDescription",component:l("/100-bugow-js/90b2a251-a246-4713-adfc-adf089197961/solutionDescription","c68"),exact:!0},{path:"/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2",component:l("/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2","755"),exact:!0},{path:"/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugCode",component:l("/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugCode","b0f"),exact:!0},{path:"/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugDescription",component:l("/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/bugDescription","39c"),exact:!0},{path:"/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/links",component:l("/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/links","ea3"),exact:!0},{path:"/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionCode",component:l("/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionCode","f88"),exact:!0},{path:"/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionDescription",component:l("/100-bugow-js/967dd2e3-34d2-4e05-b56d-5c54782406d2/solutionDescription","37a"),exact:!0},{path:"/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03",component:l("/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03","a2d"),exact:!0},{path:"/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugCode",component:l("/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugCode","cef"),exact:!0},{path:"/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugDescription",component:l("/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/bugDescription","ed9"),exact:!0},{path:"/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/links",component:l("/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/links","dc9"),exact:!0},{path:"/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionCode",component:l("/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionCode","b52"),exact:!0},{path:"/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionDescription",component:l("/100-bugow-js/979ce6b4-71f8-4d13-80ea-8ab3a2b99a03/solutionDescription","ad8"),exact:!0},{path:"/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153",component:l("/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153","e5a"),exact:!0},{path:"/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugCode",component:l("/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugCode","179"),exact:!0},{path:"/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugDescription",component:l("/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/bugDescription","81e"),exact:!0},{path:"/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/links",component:l("/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/links","afe"),exact:!0},{path:"/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionCode",component:l("/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionCode","349"),exact:!0},{path:"/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionDescription",component:l("/100-bugow-js/98a75ad0-f321-4391-8167-a4dea7dfe153/solutionDescription","f75"),exact:!0},{path:"/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4",component:l("/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4","4fe"),exact:!0},{path:"/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugCode",component:l("/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugCode","73b"),exact:!0},{path:"/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugDescription",component:l("/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/bugDescription","76b"),exact:!0},{path:"/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/links",component:l("/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/links","646"),exact:!0},{path:"/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionCode",component:l("/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionCode","199"),exact:!0},{path:"/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionDescription",component:l("/100-bugow-js/a06206c4-6029-4865-9d92-d2bfdd3a82c4/solutionDescription","597"),exact:!0},{path:"/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927",component:l("/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927","efa"),exact:!0},{path:"/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugCode",component:l("/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugCode","53b"),exact:!0},{path:"/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugDescription",component:l("/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/bugDescription","2ce"),exact:!0},{path:"/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/links",component:l("/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/links","d32"),exact:!0},{path:"/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionCode",component:l("/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionCode","6ea"),exact:!0},{path:"/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionDescription",component:l("/100-bugow-js/a1ef5a9e-88dc-454f-9db1-9d21dbea6927/solutionDescription","bc2"),exact:!0},{path:"/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb",component:l("/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb","7f6"),exact:!0},{path:"/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugCode",component:l("/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugCode","a90"),exact:!0},{path:"/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugDescription",component:l("/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/bugDescription","da9"),exact:!0},{path:"/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/links",component:l("/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/links","ed4"),exact:!0},{path:"/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionCode",component:l("/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionCode","efd"),exact:!0},{path:"/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionDescription",component:l("/100-bugow-js/a8adcbd8-2151-494e-b538-44c1503f3beb/solutionDescription","30a"),exact:!0},{path:"/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5",component:l("/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5","58d"),exact:!0},{path:"/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugCode",component:l("/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugCode","6f0"),exact:!0},{path:"/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugDescription",component:l("/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/bugDescription","1d9"),exact:!0},{path:"/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/links",component:l("/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/links","c7a"),exact:!0},{path:"/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionCode",component:l("/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionCode","4d0"),exact:!0},{path:"/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionDescription",component:l("/100-bugow-js/ae0d38e8-00ed-416c-b87f-460de2a76ed5/solutionDescription","b93"),exact:!0},{path:"/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e",component:l("/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e","152"),exact:!0},{path:"/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugCode",component:l("/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugCode","960"),exact:!0},{path:"/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugDescription",component:l("/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/bugDescription","bf0"),exact:!0},{path:"/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/links",component:l("/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/links","50d"),exact:!0},{path:"/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionCode",component:l("/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionCode","3ad"),exact:!0},{path:"/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionDescription",component:l("/100-bugow-js/aefeac4f-fef6-4b65-b2cf-bd41c4111a8e/solutionDescription","878"),exact:!0},{path:"/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed",component:l("/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed","182"),exact:!0},{path:"/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugCode",component:l("/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugCode","3c0"),exact:!0},{path:"/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugDescription",component:l("/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/bugDescription","3af"),exact:!0},{path:"/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/links",component:l("/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/links","47a"),exact:!0},{path:"/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionCode",component:l("/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionCode","cde"),exact:!0},{path:"/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionDescription",component:l("/100-bugow-js/b18ad5f3-9589-4ff0-b9b2-43a9b5374aed/solutionDescription","9b6"),exact:!0},{path:"/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91",component:l("/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91","d45"),exact:!0},{path:"/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugCode",component:l("/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugCode","266"),exact:!0},{path:"/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugDescription",component:l("/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/bugDescription","3be"),exact:!0},{path:"/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/links",component:l("/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/links","e5f"),exact:!0},{path:"/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionCode",component:l("/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionCode","f6d"),exact:!0},{path:"/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionDescription",component:l("/100-bugow-js/b2d2c3dc-7b6e-4d08-a448-193140af5c91/solutionDescription","696"),exact:!0},{path:"/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910",component:l("/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910","b65"),exact:!0},{path:"/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugCode",component:l("/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugCode","518"),exact:!0},{path:"/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugDescription",component:l("/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/bugDescription","89b"),exact:!0},{path:"/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/links",component:l("/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/links","877"),exact:!0},{path:"/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionCode",component:l("/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionCode","517"),exact:!0},{path:"/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionDescription",component:l("/100-bugow-js/b625f893-5173-40ab-b1ce-257b5bff5910/solutionDescription","1a2"),exact:!0},{path:"/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2",component:l("/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2","5f6"),exact:!0},{path:"/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugCode",component:l("/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugCode","a23"),exact:!0},{path:"/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugDescription",component:l("/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/bugDescription","72c"),exact:!0},{path:"/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/links",component:l("/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/links","94d"),exact:!0},{path:"/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionCode",component:l("/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionCode","d89"),exact:!0},{path:"/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionDescription",component:l("/100-bugow-js/b799ee88-187a-41d3-8a50-7e5b422aa2e2/solutionDescription","837"),exact:!0},{path:"/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050",component:l("/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050","f9d"),exact:!0},{path:"/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugCode",component:l("/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugCode","f7c"),exact:!0},{path:"/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugDescription",component:l("/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/bugDescription","3cc"),exact:!0},{path:"/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/links",component:l("/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/links","709"),exact:!0},{path:"/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionCode",component:l("/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionCode","d1b"),exact:!0},{path:"/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionDescription",component:l("/100-bugow-js/b85b88a3-7e88-4091-a7f1-62ee08894050/solutionDescription","3bc"),exact:!0},{path:"/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2",component:l("/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2","830"),exact:!0},{path:"/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugCode",component:l("/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugCode","174"),exact:!0},{path:"/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugDescription",component:l("/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/bugDescription","e82"),exact:!0},{path:"/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/links",component:l("/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/links","b8e"),exact:!0},{path:"/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionCode",component:l("/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionCode","329"),exact:!0},{path:"/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionDescription",component:l("/100-bugow-js/b99780c7-a6bb-486a-a223-b9fc7979d8a2/solutionDescription","490"),exact:!0},{path:"/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3",component:l("/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3","ca3"),exact:!0},{path:"/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugCode",component:l("/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugCode","86c"),exact:!0},{path:"/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugDescription",component:l("/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/bugDescription","0a4"),exact:!0},{path:"/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/links",component:l("/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/links","bd7"),exact:!0},{path:"/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionCode",component:l("/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionCode","863"),exact:!0},{path:"/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionDescription",component:l("/100-bugow-js/bb05d968-36d2-4e0d-b17f-d60291b46bf3/solutionDescription","46b"),exact:!0},{path:"/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5",component:l("/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5","fab"),exact:!0},{path:"/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugCode",component:l("/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugCode","89a"),exact:!0},{path:"/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugDescription",component:l("/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/bugDescription","46a"),exact:!0},{path:"/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/links",component:l("/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/links","77e"),exact:!0},{path:"/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionCode",component:l("/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionCode","0d8"),exact:!0},{path:"/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionDescription",component:l("/100-bugow-js/bc9e86bd-8ba9-4163-941f-b605d24e56a5/solutionDescription","0da"),exact:!0},{path:"/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4",component:l("/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4","b1e"),exact:!0},{path:"/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugCode",component:l("/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugCode","465"),exact:!0},{path:"/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugDescription",component:l("/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/bugDescription","397"),exact:!0},{path:"/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/links",component:l("/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/links","2bd"),exact:!0},{path:"/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionCode",component:l("/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionCode","5fd"),exact:!0},{path:"/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionDescription",component:l("/100-bugow-js/bdf71c4c-20af-48f1-a556-386ecddf1fc4/solutionDescription","7eb"),exact:!0},{path:"/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe",component:l("/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe","d4a"),exact:!0},{path:"/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugCode",component:l("/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugCode","df3"),exact:!0},{path:"/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugDescription",component:l("/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/bugDescription","18f"),exact:!0},{path:"/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/links",component:l("/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/links","55c"),exact:!0},{path:"/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionCode",component:l("/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionCode","b6d"),exact:!0},{path:"/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionDescription",component:l("/100-bugow-js/be9e0eb9-ec46-4b89-bfc2-04922a0381fe/solutionDescription","e3b"),exact:!0},{path:"/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6",component:l("/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6","3fe"),exact:!0},{path:"/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugCode",component:l("/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugCode","ac1"),exact:!0},{path:"/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugDescription",component:l("/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/bugDescription","2c3"),exact:!0},{path:"/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/links",component:l("/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/links","4fb"),exact:!0},{path:"/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionCode",component:l("/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionCode","9b7"),exact:!0},{path:"/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionDescription",component:l("/100-bugow-js/c240b7f1-fb67-434c-9965-b41432f128c6/solutionDescription","5a6"),exact:!0},{path:"/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b",component:l("/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b","55d"),exact:!0},{path:"/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugCode",component:l("/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugCode","432"),exact:!0},{path:"/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugDescription",component:l("/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/bugDescription","620"),exact:!0},{path:"/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/links",component:l("/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/links","3cc"),exact:!0},{path:"/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionCode",component:l("/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionCode","a6f"),exact:!0},{path:"/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionDescription",component:l("/100-bugow-js/c2dd5dbc-7e6b-4982-8b05-023ee03dfa8b/solutionDescription","f16"),exact:!0},{path:"/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000",component:l("/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000","9f3"),exact:!0},{path:"/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugCode",component:l("/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugCode","8f2"),exact:!0},{path:"/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugDescription",component:l("/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/bugDescription","01e"),exact:!0},{path:"/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/links",component:l("/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/links","208"),exact:!0},{path:"/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionCode",component:l("/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionCode","cc3"),exact:!0},{path:"/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionDescription",component:l("/100-bugow-js/c4b37568-5a7d-44d1-89c8-b3f517b0c000/solutionDescription","b81"),exact:!0},{path:"/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4",component:l("/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4","3b1"),exact:!0},{path:"/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugCode",component:l("/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugCode","dc0"),exact:!0},{path:"/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugDescription",component:l("/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/bugDescription","7db"),exact:!0},{path:"/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/links",component:l("/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/links","90d"),exact:!0},{path:"/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionCode",component:l("/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionCode","c45"),exact:!0},{path:"/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionDescription",component:l("/100-bugow-js/c58e01be-7092-47d4-ba65-cffd25192ba4/solutionDescription","2f5"),exact:!0},{path:"/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6",component:l("/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6","e79"),exact:!0},{path:"/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugCode",component:l("/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugCode","fea"),exact:!0},{path:"/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugDescription",component:l("/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/bugDescription","f0e"),exact:!0},{path:"/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/links",component:l("/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/links","382"),exact:!0},{path:"/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionCode",component:l("/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionCode","4bf"),exact:!0},{path:"/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionDescription",component:l("/100-bugow-js/c5fc2e0b-19f9-47c2-8ba3-73ff395a3fd6/solutionDescription","57d"),exact:!0},{path:"/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1",component:l("/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1","904"),exact:!0},{path:"/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugCode",component:l("/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugCode","da0"),exact:!0},{path:"/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugDescription",component:l("/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/bugDescription","306"),exact:!0},{path:"/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/links",component:l("/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/links","a3e"),exact:!0},{path:"/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionCode",component:l("/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionCode","616"),exact:!0},{path:"/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionDescription",component:l("/100-bugow-js/cdbf2526-11cb-4db7-ba4f-5d6e4d94c0d1/solutionDescription","46b"),exact:!0},{path:"/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179",component:l("/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179","3aa"),exact:!0},{path:"/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugCode",component:l("/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugCode","0f7"),exact:!0},{path:"/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugDescription",component:l("/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/bugDescription","faf"),exact:!0},{path:"/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/links",component:l("/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/links","22d"),exact:!0},{path:"/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionCode",component:l("/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionCode","7ee"),exact:!0},{path:"/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionDescription",component:l("/100-bugow-js/cdc9845a-3304-4646-b257-3238bad1e179/solutionDescription","d2c"),exact:!0},{path:"/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff",component:l("/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff","09c"),exact:!0},{path:"/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugCode",component:l("/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugCode","550"),exact:!0},{path:"/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugDescription",component:l("/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/bugDescription","196"),exact:!0},{path:"/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/links",component:l("/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/links","1bf"),exact:!0},{path:"/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionCode",component:l("/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionCode","58c"),exact:!0},{path:"/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionDescription",component:l("/100-bugow-js/cf71a652-cfb3-4406-b6c8-89594f7546ff/solutionDescription","ef5"),exact:!0},{path:"/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb",component:l("/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb","4bd"),exact:!0},{path:"/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugCode",component:l("/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugCode","990"),exact:!0},{path:"/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugDescription",component:l("/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/bugDescription","cf0"),exact:!0},{path:"/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/links",component:l("/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/links","71a"),exact:!0},{path:"/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionCode",component:l("/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionCode","966"),exact:!0},{path:"/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionDescription",component:l("/100-bugow-js/d05d69bf-78ae-4c42-a213-81006fa7e6cb/solutionDescription","ae8"),exact:!0},{path:"/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e",component:l("/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e","fba"),exact:!0},{path:"/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugCode",component:l("/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugCode","f94"),exact:!0},{path:"/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugDescription",component:l("/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/bugDescription","934"),exact:!0},{path:"/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/links",component:l("/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/links","8e9"),exact:!0},{path:"/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionCode",component:l("/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionCode","f8e"),exact:!0},{path:"/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionDescription",component:l("/100-bugow-js/dd95137e-f378-4224-a3e7-5db4b217508e/solutionDescription","bcf"),exact:!0},{path:"/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a",component:l("/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a","491"),exact:!0},{path:"/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugCode",component:l("/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugCode","2e4"),exact:!0},{path:"/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugDescription",component:l("/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/bugDescription","cf8"),exact:!0},{path:"/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/links",component:l("/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/links","59f"),exact:!0},{path:"/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionCode",component:l("/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionCode","fc9"),exact:!0},{path:"/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionDescription",component:l("/100-bugow-js/df58179e-11c5-4987-9cf7-d513ef33ba6a/solutionDescription","021"),exact:!0},{path:"/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf",component:l("/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf","a60"),exact:!0},{path:"/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugCode",component:l("/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugCode","312"),exact:!0},{path:"/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugDescription",component:l("/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/bugDescription","3cb"),exact:!0},{path:"/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/links",component:l("/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/links","bca"),exact:!0},{path:"/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionCode",component:l("/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionCode","205"),exact:!0},{path:"/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionDescription",component:l("/100-bugow-js/e5651472-8df9-4bec-bea5-f9d5afb419bf/solutionDescription","ad3"),exact:!0},{path:"/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645",component:l("/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645","017"),exact:!0},{path:"/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugCode",component:l("/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugCode","dd6"),exact:!0},{path:"/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugDescription",component:l("/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/bugDescription","0c2"),exact:!0},{path:"/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/links",component:l("/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/links","145"),exact:!0},{path:"/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionCode",component:l("/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionCode","bf9"),exact:!0},{path:"/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionDescription",component:l("/100-bugow-js/e8edc07f-955c-4e36-b25f-7f49bcf55645/solutionDescription","a63"),exact:!0},{path:"/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e",component:l("/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e","b1c"),exact:!0},{path:"/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugCode",component:l("/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugCode","5ac"),exact:!0},{path:"/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugDescription",component:l("/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/bugDescription","478"),exact:!0},{path:"/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/links",component:l("/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/links","d5e"),exact:!0},{path:"/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionCode",component:l("/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionCode","34e"),exact:!0},{path:"/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionDescription",component:l("/100-bugow-js/ed75ecab-2ac8-44e9-b9c1-a1cce72ee45e/solutionDescription","245"),exact:!0},{path:"/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf",component:l("/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf","c42"),exact:!0},{path:"/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugCode",component:l("/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugCode","a2f"),exact:!0},{path:"/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugDescription",component:l("/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/bugDescription","f27"),exact:!0},{path:"/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/links",component:l("/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/links","b5c"),exact:!0},{path:"/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionCode",component:l("/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionCode","01d"),exact:!0},{path:"/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionDescription",component:l("/100-bugow-js/ee9b7199-3dfc-4496-be53-7c45a02e3ddf/solutionDescription","77e"),exact:!0},{path:"/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a",component:l("/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a","53c"),exact:!0},{path:"/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugCode",component:l("/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugCode","8df"),exact:!0},{path:"/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugDescription",component:l("/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/bugDescription","e8c"),exact:!0},{path:"/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/links",component:l("/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/links","a21"),exact:!0},{path:"/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionCode",component:l("/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionCode","ac6"),exact:!0},{path:"/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionDescription",component:l("/100-bugow-js/f4493212-ffba-4a48-818a-b82a22bce47a/solutionDescription","886"),exact:!0},{path:"/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea",component:l("/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea","79d"),exact:!0},{path:"/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugCode",component:l("/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugCode","556"),exact:!0},{path:"/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugDescription",component:l("/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/bugDescription","e79"),exact:!0},{path:"/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/links",component:l("/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/links","484"),exact:!0},{path:"/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionCode",component:l("/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionCode","4a6"),exact:!0},{path:"/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionDescription",component:l("/100-bugow-js/f681cf98-6d5a-4a0c-8245-0eddf7a6a7ea/solutionDescription","80d"),exact:!0},{path:"/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020",component:l("/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020","ae7"),exact:!0},{path:"/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugCode",component:l("/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugCode","231"),exact:!0},{path:"/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugDescription",component:l("/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/bugDescription","52c"),exact:!0},{path:"/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/links",component:l("/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/links","547"),exact:!0},{path:"/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionCode",component:l("/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionCode","464"),exact:!0},{path:"/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionDescription",component:l("/100-bugow-js/f6dca2d4-892a-4b22-a34c-1c6ded328020/solutionDescription","184"),exact:!0},{path:"/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f",component:l("/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f","c85"),exact:!0},{path:"/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugCode",component:l("/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugCode","6c2"),exact:!0},{path:"/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugDescription",component:l("/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/bugDescription","a6e"),exact:!0},{path:"/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/links",component:l("/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/links","e1b"),exact:!0},{path:"/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionCode",component:l("/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionCode","ca5"),exact:!0},{path:"/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionDescription",component:l("/100-bugow-js/f8fc4c9a-f11e-4205-99a3-19115d81b37f/solutionDescription","357"),exact:!0},{path:"/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0",component:l("/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0","6c4"),exact:!0},{path:"/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugCode",component:l("/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugCode","3ec"),exact:!0},{path:"/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugDescription",component:l("/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/bugDescription","c30"),exact:!0},{path:"/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/links",component:l("/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/links","6cc"),exact:!0},{path:"/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionCode",component:l("/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionCode","f5f"),exact:!0},{path:"/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionDescription",component:l("/100-bugow-js/fa73295e-34e5-4f5c-9098-291e3770e4b0/solutionDescription","e72"),exact:!0},{path:"/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf",component:l("/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf","774"),exact:!0},{path:"/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugCode",component:l("/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugCode","ce3"),exact:!0},{path:"/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugDescription",component:l("/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/bugDescription","53a"),exact:!0},{path:"/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/links",component:l("/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/links","075"),exact:!0},{path:"/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionCode",component:l("/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionCode","620"),exact:!0},{path:"/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionDescription",component:l("/100-bugow-js/fbd04755-cc69-4e14-ba17-5172fba6d6bf/solutionDescription","435"),exact:!0},{path:"/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef",component:l("/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef","2ea"),exact:!0},{path:"/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugCode",component:l("/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugCode","5e6"),exact:!0},{path:"/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugDescription",component:l("/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/bugDescription","cb9"),exact:!0},{path:"/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/links",component:l("/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/links","420"),exact:!0},{path:"/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionCode",component:l("/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionCode","a72"),exact:!0},{path:"/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionDescription",component:l("/100-bugow-js/ffc67d5d-0437-493c-b712-e1e3571caaef/solutionDescription","084"),exact:!0},{path:"/100-bugow-js/sukces",component:l("/100-bugow-js/sukces","2a9"),exact:!0},{path:"/100-bugow-js/wymagane-potwierdzenie",component:l("/100-bugow-js/wymagane-potwierdzenie","877"),exact:!0},{path:"/100-bugow-js/wypisanie",component:l("/100-bugow-js/wypisanie","fdb"),exact:!0},{path:"/digitalocean",component:l("/digitalocean","6d8"),exact:!0},{path:"/discord",component:l("/discord","034"),exact:!0},{path:"/facebook",component:l("/facebook","9b4"),exact:!0},{path:"/github",component:l("/github","cbf"),exact:!0},{path:"/instagram",component:l("/instagram","057"),exact:!0},{path:"/tags",component:l("/tags","f4e"),exact:!0},{path:"/tags/a-11-y",component:l("/tags/a-11-y","dc4"),exact:!0},{path:"/tags/accessibility",component:l("/tags/accessibility","d15"),exact:!0},{path:"/tags/agile",component:l("/tags/agile","c76"),exact:!0},{path:"/tags/algorytm",component:l("/tags/algorytm","829"),exact:!0},{path:"/tags/api",component:l("/tags/api","496"),exact:!0},{path:"/tags/app",component:l("/tags/app","982"),exact:!0},{path:"/tags/apple",component:l("/tags/apple","99c"),exact:!0},{path:"/tags/auth",component:l("/tags/auth","18e"),exact:!0},{path:"/tags/axios",component:l("/tags/axios","c46"),exact:!0},{path:"/tags/backend",component:l("/tags/backend","17b"),exact:!0},{path:"/tags/big-o",component:l("/tags/big-o","06b"),exact:!0},{path:"/tags/binary",component:l("/tags/binary","2fb"),exact:!0},{path:"/tags/bsd",component:l("/tags/bsd","4ba"),exact:!0},{path:"/tags/bug",component:l("/tags/bug","604"),exact:!0},{path:"/tags/bundle",component:l("/tags/bundle","a57"),exact:!0},{path:"/tags/cache",component:l("/tags/cache","04c"),exact:!0},{path:"/tags/cd",component:l("/tags/cd","c74"),exact:!0},{path:"/tags/chrome",component:l("/tags/chrome","847"),exact:!0},{path:"/tags/ci",component:l("/tags/ci","077"),exact:!0},{path:"/tags/cli",component:l("/tags/cli","84c"),exact:!0},{path:"/tags/cloud",component:l("/tags/cloud","a58"),exact:!0},{path:"/tags/cloudflare",component:l("/tags/cloudflare","86c"),exact:!0},{path:"/tags/cms",component:l("/tags/cms","f60"),exact:!0},{path:"/tags/code-review",component:l("/tags/code-review","b6b"),exact:!0},{path:"/tags/cpu",component:l("/tags/cpu","ae4"),exact:!0},{path:"/tags/cr",component:l("/tags/cr","b65"),exact:!0},{path:"/tags/cs",component:l("/tags/cs","e61"),exact:!0},{path:"/tags/css",component:l("/tags/css","272"),exact:!0},{path:"/tags/database",component:l("/tags/database","861"),exact:!0},{path:"/tags/db",component:l("/tags/db","078"),exact:!0},{path:"/tags/ddd",component:l("/tags/ddd","adb"),exact:!0},{path:"/tags/design-patterns",component:l("/tags/design-patterns","9a0"),exact:!0},{path:"/tags/designer",component:l("/tags/designer","e12"),exact:!0},{path:"/tags/dev-tools",component:l("/tags/dev-tools","83e"),exact:!0},{path:"/tags/developer",component:l("/tags/developer","db3"),exact:!0},{path:"/tags/dns",component:l("/tags/dns","2b9"),exact:!0},{path:"/tags/docker",component:l("/tags/docker","9a6"),exact:!0},{path:"/tags/docs",component:l("/tags/docs","52b"),exact:!0},{path:"/tags/e-2-e",component:l("/tags/e-2-e","7a0"),exact:!0},{path:"/tags/elasticsearch",component:l("/tags/elasticsearch","5a7"),exact:!0},{path:"/tags/email",component:l("/tags/email","309"),exact:!0},{path:"/tags/es-lint",component:l("/tags/es-lint","f22"),exact:!0},{path:"/tags/free-bsd",component:l("/tags/free-bsd","77d"),exact:!0},{path:"/tags/frontend",component:l("/tags/frontend","1f4"),exact:!0},{path:"/tags/ftp",component:l("/tags/ftp","d86"),exact:!0},{path:"/tags/full-stack",component:l("/tags/full-stack","493"),exact:!0},{path:"/tags/git",component:l("/tags/git","210"),exact:!0},{path:"/tags/git-hub",component:l("/tags/git-hub","13d"),exact:!0},{path:"/tags/google",component:l("/tags/google","8f9"),exact:!0},{path:"/tags/grafana",component:l("/tags/grafana","0af"),exact:!0},{path:"/tags/graph-ql",component:l("/tags/graph-ql","6c9"),exact:!0},{path:"/tags/hardware",component:l("/tags/hardware","72f"),exact:!0},{path:"/tags/hash",component:l("/tags/hash","74d"),exact:!0},{path:"/tags/hosting",component:l("/tags/hosting","dc7"),exact:!0},{path:"/tags/html",component:l("/tags/html","eb7"),exact:!0},{path:"/tags/http",component:l("/tags/http","e97"),exact:!0},{path:"/tags/i-o",component:l("/tags/i-o","3f6"),exact:!0},{path:"/tags/i-os",component:l("/tags/i-os","919"),exact:!0},{path:"/tags/ia-c",component:l("/tags/ia-c","5cd"),exact:!0},{path:"/tags/iaa-s",component:l("/tags/iaa-s","37e"),exact:!0},{path:"/tags/ide",component:l("/tags/ide","e38"),exact:!0},{path:"/tags/integration",component:l("/tags/integration","fb5"),exact:!0},{path:"/tags/internet",component:l("/tags/internet","712"),exact:!0},{path:"/tags/ip",component:l("/tags/ip","bfb"),exact:!0},{path:"/tags/it",component:l("/tags/it","bb3"),exact:!0},{path:"/tags/jasmine",component:l("/tags/jasmine","b51"),exact:!0},{path:"/tags/java-script",component:l("/tags/java-script","f67"),exact:!0},{path:"/tags/jest",component:l("/tags/jest","7e6"),exact:!0},{path:"/tags/js",component:l("/tags/js","e98"),exact:!0},{path:"/tags/kafka",component:l("/tags/kafka","39d"),exact:!0},{path:"/tags/kernel",component:l("/tags/kernel","7cc"),exact:!0},{path:"/tags/libs",component:l("/tags/libs","425"),exact:!0},{path:"/tags/linux",component:l("/tags/linux","b74"),exact:!0},{path:"/tags/lucene",component:l("/tags/lucene","536"),exact:!0},{path:"/tags/mac-os",component:l("/tags/mac-os","4a8"),exact:!0},{path:"/tags/marketing",component:l("/tags/marketing","826"),exact:!0},{path:"/tags/memo",component:l("/tags/memo","802"),exact:!0},{path:"/tags/microsoft",component:l("/tags/microsoft","f5d"),exact:!0},{path:"/tags/mobile",component:l("/tags/mobile","f41"),exact:!0},{path:"/tags/mocha",component:l("/tags/mocha","426"),exact:!0},{path:"/tags/mongo-db",component:l("/tags/mongo-db","fb0"),exact:!0},{path:"/tags/network",component:l("/tags/network","937"),exact:!0},{path:"/tags/next-js",component:l("/tags/next-js","5c0"),exact:!0},{path:"/tags/nginx",component:l("/tags/nginx","057"),exact:!0},{path:"/tags/no-sql",component:l("/tags/no-sql","9d6"),exact:!0},{path:"/tags/node-js",component:l("/tags/node-js","ea5"),exact:!0},{path:"/tags/notification",component:l("/tags/notification","697"),exact:!0},{path:"/tags/npm",component:l("/tags/npm","233"),exact:!0},{path:"/tags/oop",component:l("/tags/oop","8ee"),exact:!0},{path:"/tags/orm",component:l("/tags/orm","d0c"),exact:!0},{path:"/tags/os",component:l("/tags/os","825"),exact:!0},{path:"/tags/osems",component:l("/tags/osems","053"),exact:!0},{path:"/tags/owasp",component:l("/tags/owasp","fa1"),exact:!0},{path:"/tags/pagination",component:l("/tags/pagination","26a"),exact:!0},{path:"/tags/pay-u",component:l("/tags/pay-u","e5e"),exact:!0},{path:"/tags/performance",component:l("/tags/performance","c14"),exact:!0},{path:"/tags/php",component:l("/tags/php","dde"),exact:!0},{path:"/tags/prettier",component:l("/tags/prettier","10b"),exact:!0},{path:"/tags/prism",component:l("/tags/prism","1a3"),exact:!0},{path:"/tags/prisma",component:l("/tags/prisma","71d"),exact:!0},{path:"/tags/prometheus",component:l("/tags/prometheus","4c0"),exact:!0},{path:"/tags/przelewy-24",component:l("/tags/przelewy-24","51d"),exact:!0},{path:"/tags/push",component:l("/tags/push","6c4"),exact:!0},{path:"/tags/pwa",component:l("/tags/pwa","f5f"),exact:!0},{path:"/tags/rabbit-mq",component:l("/tags/rabbit-mq","a34"),exact:!0},{path:"/tags/ram",component:l("/tags/ram","112"),exact:!0},{path:"/tags/react",component:l("/tags/react","037"),exact:!0},{path:"/tags/readme",component:l("/tags/readme","4e2"),exact:!0},{path:"/tags/redux",component:l("/tags/redux","1d6"),exact:!0},{path:"/tags/reg-ex",component:l("/tags/reg-ex","6e1"),exact:!0},{path:"/tags/res-tful",component:l("/tags/res-tful","3c5"),exact:!0},{path:"/tags/rest",component:l("/tags/rest","551"),exact:!0},{path:"/tags/routing",component:l("/tags/routing","7aa"),exact:!0},{path:"/tags/rx-js",component:l("/tags/rx-js","080"),exact:!0},{path:"/tags/sass",component:l("/tags/sass","009"),exact:!0},{path:"/tags/scrum",component:l("/tags/scrum","c25"),exact:!0},{path:"/tags/scss",component:l("/tags/scss","c5d"),exact:!0},{path:"/tags/security",component:l("/tags/security","32a"),exact:!0},{path:"/tags/self-hosting",component:l("/tags/self-hosting","a99"),exact:!0},{path:"/tags/sem-ver",component:l("/tags/sem-ver","57d"),exact:!0},{path:"/tags/seo",component:l("/tags/seo","129"),exact:!0},{path:"/tags/serverless",component:l("/tags/serverless","4b9"),exact:!0},{path:"/tags/smtp",component:l("/tags/smtp","bed"),exact:!0},{path:"/tags/solr",component:l("/tags/solr","722"),exact:!0},{path:"/tags/sql",component:l("/tags/sql","206"),exact:!0},{path:"/tags/ssd",component:l("/tags/ssd","cec"),exact:!0},{path:"/tags/ssh",component:l("/tags/ssh","28d"),exact:!0},{path:"/tags/state",component:l("/tags/state","b01"),exact:!0},{path:"/tags/stripe",component:l("/tags/stripe","bbb"),exact:!0},{path:"/tags/svg",component:l("/tags/svg","233"),exact:!0},{path:"/tags/tailwind",component:l("/tags/tailwind","338"),exact:!0},{path:"/tags/tailwind-css",component:l("/tags/tailwind-css","35d"),exact:!0},{path:"/tags/tcp-ip",component:l("/tags/tcp-ip","59e"),exact:!0},{path:"/tags/tdd",component:l("/tags/tdd","c2c"),exact:!0},{path:"/tags/testing",component:l("/tags/testing","eff"),exact:!0},{path:"/tags/testing-library",component:l("/tags/testing-library","9c7"),exact:!0},{path:"/tags/tpay",component:l("/tags/tpay","a03"),exact:!0},{path:"/tags/tracking",component:l("/tags/tracking","afa"),exact:!0},{path:"/tags/ts",component:l("/tags/ts","f43"),exact:!0},{path:"/tags/type-script",component:l("/tags/type-script","8c5"),exact:!0},{path:"/tags/ui",component:l("/tags/ui","32e"),exact:!0},{path:"/tags/unit",component:l("/tags/unit","630"),exact:!0},{path:"/tags/uptime",component:l("/tags/uptime","790"),exact:!0},{path:"/tags/ux",component:l("/tags/ux","013"),exact:!0},{path:"/tags/vcs",component:l("/tags/vcs","83e"),exact:!0},{path:"/tags/vercel",component:l("/tags/vercel","7fa"),exact:!0},{path:"/tags/vim",component:l("/tags/vim","255"),exact:!0},{path:"/tags/virtualbox",component:l("/tags/virtualbox","bb0"),exact:!0},{path:"/tags/vite",component:l("/tags/vite","f1a"),exact:!0},{path:"/tags/vm",component:l("/tags/vm","378"),exact:!0},{path:"/tags/vps",component:l("/tags/vps","0ce"),exact:!0},{path:"/tags/vs-code",component:l("/tags/vs-code","fce"),exact:!0},{path:"/tags/web-components",component:l("/tags/web-components","cdb"),exact:!0},{path:"/tags/web-server",component:l("/tags/web-server","35f"),exact:!0},{path:"/tags/web-socket",component:l("/tags/web-socket","3ec"),exact:!0},{path:"/tags/webpack",component:l("/tags/webpack","465"),exact:!0},{path:"/tags/windows",component:l("/tags/windows","20d"),exact:!0},{path:"/tags/zabbix",component:l("/tags/zabbix","b40"),exact:!0},{path:"/twitter",component:l("/twitter","727"),exact:!0},{path:"/youtube",component:l("/youtube","e26"),exact:!0},{path:"/",component:l("/","b41"),exact:!0},{path:"/",component:l("/","f7a"),routes:[{path:"/backend/api-zaplecza",component:l("/backend/api-zaplecza","66b"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/api-zaplecza/graphql",component:l("/backend/api-zaplecza/graphql","94b"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/api-zaplecza/restful-api",component:l("/backend/api-zaplecza/restful-api","163"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/bazy-danych",component:l("/backend/bazy-danych","9fe"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/bazy-danych/mapowanie-obiektowo-relacyjne",component:l("/backend/bazy-danych/mapowanie-obiektowo-relacyjne","b9b"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/brokery-wiadomosci",component:l("/backend/brokery-wiadomosci","d4c"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/ciagla-integracja-i-wdrazanie",component:l("/backend/ciagla-integracja-i-wdrazanie","1e4"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/infrastuktura",component:l("/backend/infrastuktura","1bb"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/monitoring",component:l("/backend/monitoring","48c"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/node-js",component:l("/backend/node-js","5c4"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/obsluga-emaili",component:l("/backend/obsluga-emaili","21e"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems",component:l("/backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems","1b5"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare",component:l("/backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare","d0e"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/projektowanie-backendu",component:l("/backend/projektowanie-backendu","9ea"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/serwery-internetowe",component:l("/backend/serwery-internetowe","154"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/silniki-wyszukiwania",component:l("/backend/silniki-wyszukiwania","8c2"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/systemy-zarzadzania-trescia",component:l("/backend/systemy-zarzadzania-trescia","729"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/wierwsz-polecen",component:l("/backend/wierwsz-polecen","07b"),exact:!0,sidebar:"backendSidebar"},{path:"/backend/wirtualizacja-i-konteneryzacja",component:l("/backend/wirtualizacja-i-konteneryzacja","44e"),exact:!0,sidebar:"backendSidebar"},{path:"/frontend/aplikacje-mobilne",component:l("/frontend/aplikacje-mobilne","17a"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/biblioteki",component:l("/frontend/biblioteki","1f7"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/css",component:l("/frontend/css","fa4"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/css/debugowanie-css-przez-narzedzia-developerskie",component:l("/frontend/css/debugowanie-css-przez-narzedzia-developerskie","df6"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/css/menu-mobilne-w-html-css-bez-javascript",component:l("/frontend/css/menu-mobilne-w-html-css-bez-javascript","2db"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/css/organizacja-styli-css-i-preprocesory",component:l("/frontend/css/organizacja-styli-css-i-preprocesory","321"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/css/tailwind-css",component:l("/frontend/css/tailwind-css","03e"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/css/wprowadzenie-w-css",component:l("/frontend/css/wprowadzenie-w-css","59b"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/dostepnosc",component:l("/frontend/dostepnosc","409"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/frontend",component:l("/frontend/frontend","77f"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/html",component:l("/frontend/html","19d"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji",component:l("/frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji","c71"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/html/rdzen-metadane-sekcje",component:l("/frontend/html/rdzen-metadane-sekcje","ef5"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/html/tabele-formularze-elementy-interaktywne-komponenty",component:l("/frontend/html/tabele-formularze-elementy-interaktywne-komponenty","2dc"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/html/tekst",component:l("/frontend/html/tekst","fb2"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/html/wprowadzenie-do-htmla",component:l("/frontend/html/wprowadzenie-do-htmla","cdb"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/html/zadanie-domowe",component:l("/frontend/html/zadanie-domowe","08e"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/javascript",component:l("/frontend/javascript","645"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js",component:l("/frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js","a41"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript",component:l("/frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript","dd2"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/javascript/node-js-na-frontendzie copy",component:l("/frontend/javascript/node-js-na-frontendzie copy","4c7"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/javascript/podstawy-javascript",component:l("/frontend/javascript/podstawy-javascript","c3c"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne",component:l("/frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne","cc0"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/javascript/wprowadzenie-w-typescript",component:l("/frontend/javascript/wprowadzenie-w-typescript","649"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/komponenty",component:l("/frontend/komponenty","7dd"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/pakiety-i-pakowarki",component:l("/frontend/pakiety-i-pakowarki","05b"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/pakiety-i-pakowarki/webpack-4",component:l("/frontend/pakiety-i-pakowarki/webpack-4","251"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania",component:l("/frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania","d2c"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu",component:l("/frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu","19a"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/pakiety-i-pakowarki/webpack-4/ladowarki",component:l("/frontend/pakiety-i-pakowarki/webpack-4/ladowarki","dde"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny",component:l("/frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny","f4c"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia",component:l("/frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia","1b8"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych",component:l("/frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych","b5c"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow",component:l("/frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow","d27"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian",component:l("/frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian","e71"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/progresywne-aplikacje",component:l("/frontend/progresywne-aplikacje","c77"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/react",component:l("/frontend/react","1b2"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta",component:l("/frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta","15c"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni",component:l("/frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni","2d4"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/seo",component:l("/frontend/seo","2a9"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/svg",component:l("/frontend/svg","539"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/webassembly",component:l("/frontend/webassembly","db8"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem",component:l("/frontend/zarzadzanie-stanem","e0b"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/podstawy-reduxa",component:l("/frontend/zarzadzanie-stanem/podstawy-reduxa","102"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje",component:l("/frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje","d70"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a",component:l("/frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a","3d6"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow",component:l("/frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow","cc7"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu",component:l("/frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu","e49"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow",component:l("/frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow","c48"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki",component:l("/frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki","0af"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji",component:l("/frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji","9f1"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego",component:l("/frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego","49d"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk",component:l("/frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk","c11"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami",component:l("/frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami","bf0"),exact:!0,sidebar:"frontendSidebar"},{path:"/frontend/zarzadzanie-stanem/redux",component:l("/frontend/zarzadzanie-stanem/redux","e86"),exact:!0,sidebar:"frontendSidebar"},{path:"/fullstack/autentykacja-i-autoryzacja",component:l("/fullstack/autentykacja-i-autoryzacja","767"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji",component:l("/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji","eb6"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie",component:l("/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie","5bc"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji",component:l("/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji","784"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania",component:l("/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania","62c"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja",component:l("/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja","aa2"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie",component:l("/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie","9de"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/fullstack",component:l("/fullstack/fullstack","fd9"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/next-js",component:l("/fullstack/next-js","81c"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/next-js/mini-projekt-z-next-js",component:l("/fullstack/next-js/mini-projekt-z-next-js","50c"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel",component:l("/fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel","dab"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development",component:l("/fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development","45f"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania",component:l("/fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania","752"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy",component:l("/fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy","44a"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api",component:l("/fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api","ca9"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej",component:l("/fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej","ca8"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github",component:l("/fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github","f9a"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/next-js/warsztat-next-js-2022-12-20",component:l("/fullstack/next-js/warsztat-next-js-2022-12-20","9b2"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/paginacja",component:l("/fullstack/paginacja","979"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/powiadomienia-push",component:l("/fullstack/powiadomienia-push","501"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/przetwarzanie-platnosci",component:l("/fullstack/przetwarzanie-platnosci","e6c"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/sledzenie",component:l("/fullstack/sledzenie","a0e"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/trasowanie",component:l("/fullstack/trasowanie","385"),exact:!0,sidebar:"fullstackSidebar"},{path:"/fullstack/websocket",component:l("/fullstack/websocket","54a"),exact:!0,sidebar:"fullstackSidebar"},{path:"/podstawy/aplikacje",component:l("/podstawy/aplikacje","d25"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/architektura-oprogramowania",component:l("/podstawy/architektura-oprogramowania","f63"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/bezpieczenstwo",component:l("/podstawy/bezpieczenstwo","e5c"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/debugowanie",component:l("/podstawy/debugowanie","0aa"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/dns-i-domeny",component:l("/podstawy/dns-i-domeny","dc2"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/dokumentacje",component:l("/podstawy/dokumentacje","e58"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/dokumentacje/jak-czytac-dokumentacje",component:l("/podstawy/dokumentacje/jak-czytac-dokumentacje","972"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/dokumentacje/jak-tworzyc-dokumentacje",component:l("/podstawy/dokumentacje/jak-tworzyc-dokumentacje","fa2"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/edytory-kodu",component:l("/podstawy/edytory-kodu","16c"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/edytory-kodu/formatowanie-kodu",component:l("/podstawy/edytory-kodu/formatowanie-kodu","45e"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/edytory-kodu/vim",component:l("/podstawy/edytory-kodu/vim","09a"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/edytory-kodu/visual-studio-code",component:l("/podstawy/edytory-kodu/visual-studio-code","5f0"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/haszowanie",component:l("/podstawy/haszowanie","470"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/hosting",component:l("/podstawy/hosting","920"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github",component:l("/podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github","483"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy",component:l("/podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy","206"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy",component:l("/podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy","a62"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/informatyka",component:l("/podstawy/informatyka","f92"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/jezyki-programowania",component:l("/podstawy/jezyki-programowania","5f1"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/jezyki-programowania/c",component:l("/podstawy/jezyki-programowania/c","ccf"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/jezyki-programowania/javascript",component:l("/podstawy/jezyki-programowania/javascript","86b"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/jezyki-programowania/php",component:l("/podstawy/jezyki-programowania/php","e21"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/jezyki-programowania/python",component:l("/podstawy/jezyki-programowania/python","a65"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/jezyki-programowania/scratch",component:l("/podstawy/jezyki-programowania/scratch","8ea"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji",component:l("/podstawy/kontrola-wersji","f6c"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/github",component:l("/podstawy/kontrola-wersji/github","8f0"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/inspekcja-kodu",component:l("/podstawy/kontrola-wersji/inspekcja-kodu","daa"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/podstawy-gita",component:l("/podstawy/kontrola-wersji/podstawy-gita","2fe"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/podstawy-gita/czym-jest-git",component:l("/podstawy/kontrola-wersji/podstawy-gita/czym-jest-git","a93"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/podstawy-gita/etykietowanie",component:l("/podstawy/kontrola-wersji/podstawy-gita/etykietowanie","69a"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow",component:l("/podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow","062"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow",component:l("/podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow","1cd"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/podstawy-gita/instalacja",component:l("/podstawy/kontrola-wersji/podstawy-gita/instalacja","5b9"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji",component:l("/podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji","4b5"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie",component:l("/podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie","c73"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code",component:l("/podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code","1a3"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github",component:l("/podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github","1d5"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian",component:l("/podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian","ea6"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/licencje",component:l("/podstawy/licencje","bb5"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/pamiec-podreczna",component:l("/podstawy/pamiec-podreczna","0f4"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/praca-w-it",component:l("/podstawy/praca-w-it","2fe"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/praca-w-it/backend-developer",component:l("/podstawy/praca-w-it/backend-developer","ed7"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/praca-w-it/devops-qa-i-inne",component:l("/podstawy/praca-w-it/devops-qa-i-inne","8b3"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/praca-w-it/frontend-developer",component:l("/podstawy/praca-w-it/frontend-developer","938"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/praca-w-it/ux-ui-designer",component:l("/podstawy/praca-w-it/ux-ui-designer","090"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/programowanie",component:l("/podstawy/programowanie","055"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/programowanie/algorytmy",component:l("/podstawy/programowanie/algorytmy","3bf"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/programowanie/api",component:l("/podstawy/programowanie/api","157"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/programowanie/frameworki-i-biblioteki",component:l("/podstawy/programowanie/frameworki-i-biblioteki","ab3"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/programowanie/paradygmaty-programowania",component:l("/podstawy/programowanie/paradygmaty-programowania","13d"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/programowanie/struktury-i-bazy-danych",component:l("/podstawy/programowanie/struktury-i-bazy-danych","88e"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/programowanie/typowanie-statyczne-i-dynamiczne",component:l("/podstawy/programowanie/typowanie-statyczne-i-dynamiczne","b5c"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/programowanie/wyrazenia-regularne",component:l("/podstawy/programowanie/wyrazenia-regularne","c94"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/programowanie/wzorce-projektowe",component:l("/podstawy/programowanie/wzorce-projektowe","0a1"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/siec",component:l("/podstawy/siec","07e"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/siec/jak-dziala-internet",component:l("/podstawy/siec/jak-dziala-internet","404"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/sprzet-komputerowy",component:l("/podstawy/sprzet-komputerowy","eb4"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/sprzet-komputerowy/system-binarny",component:l("/podstawy/sprzet-komputerowy/system-binarny","f09"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego",component:l("/podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego","206"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/sprzet-komputerowy/system-binarny/system-binarny",component:l("/podstawy/sprzet-komputerowy/system-binarny/system-binarny","9b9"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/systemy-operacyjne",component:l("/podstawy/systemy-operacyjne","44d"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/systemy-operacyjne/chrome-os",component:l("/podstawy/systemy-operacyjne/chrome-os","e10"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/systemy-operacyjne/free-bsd",component:l("/podstawy/systemy-operacyjne/free-bsd","60d"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/systemy-operacyjne/linux",component:l("/podstawy/systemy-operacyjne/linux","879"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/systemy-operacyjne/macos-i-ios",component:l("/podstawy/systemy-operacyjne/macos-i-ios","243"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/systemy-operacyjne/windows",component:l("/podstawy/systemy-operacyjne/windows","689"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/testowanie",component:l("/podstawy/testowanie","6b9"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e",component:l("/podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e","0ab"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/testowanie/wprowadzenie-do-testowania",component:l("/podstawy/testowanie/wprowadzenie-do-testowania","908"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/warstwy-abstrakcji",component:l("/podstawy/warstwy-abstrakcji","a62"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/wydajnosc",component:l("/podstawy/wydajnosc","9a3"),exact:!0,sidebar:"basicsSidebar"},{path:"/podstawy/zarzadzanie-projektami",component:l("/podstawy/zarzadzanie-projektami","c44"),exact:!0,sidebar:"basicsSidebar"},{path:"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin",component:l("/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin","324"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui",component:l("/ux-ui/praktyczne-szkolenie-projektowania-ux-ui","17c"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui",component:l("/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui","97b"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux",component:l("/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux","de0"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow","cac"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale","056"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji","c70"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow","91e"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi","2a0"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia","08a"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki","88a"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy","5d0"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony","ed1"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika","85b"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu","691"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp","050"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu","f50"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik","e9f"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika","b48"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika","07f"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji","656"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne","687"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe","7b9"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie","d9f"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem",component:l("/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem","f2d"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-ux-ui",component:l("/ux-ui/projektowanie-ux-ui","808"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/projektowanie-vs-kodowanie",component:l("/ux-ui/projektowanie-vs-kodowanie","c13"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls",component:l("/ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls","9e9"),exact:!0,sidebar:"uxuiSidebar"},{path:"/ux-ui/roznice-miedzy-ux-ui",component:l("/ux-ui/roznice-miedzy-ux-ui","cc1"),exact:!0,sidebar:"uxuiSidebar"}]},{path:"*",component:l("*")}]},98934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>c});var a=n(67294);const o=a.createContext(!1);function c(e){let{children:t}=e;const[n,c]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{c(!0)}),[]),a.createElement(o.Provider,{value:n},t)}},49383:(e,t,n)=>{"use strict";var a=n(67294),o=n(73935),c=n(73727),i=n(70405),s=n(10412);const r=[n(56657),n(32497),n(3310),n(18320),n(52295)];var d=n(723),u=n(16550),b=n(18790);function l(e){let{children:t}=e;return a.createElement(a.Fragment,null,t)}var f=n(87462),p=n(35742),g=n(52263),m=n(44996),w=n(86668),h=n(1944),_=n(94711),j=n(19727),y=n(43320),k=n(90197);function x(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,_.l)();return a.createElement(p.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return a.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),a.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function v(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),o=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,u.TH)();return e+(0,m.Z)(t)}(),c=t?`${n}${t}`:o;return a.createElement(p.Z,null,a.createElement("meta",{property:"og:url",content:c}),a.createElement("link",{rel:"canonical",href:c}))}function z(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,w.L)();return a.createElement(a.Fragment,null,a.createElement(p.Z,null,a.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),a.createElement("body",{className:j.h})),n&&a.createElement(h.d,{image:n}),a.createElement(v,null),a.createElement(x,null),a.createElement(k.Z,{tag:y.HX,locale:e}),a.createElement(p.Z,null,t.map(((e,t)=>a.createElement("meta",(0,f.Z)({key:t},e))))))}const C=new Map;function S(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,b.f)(d.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var E=n(98934),D=n(58940);function T(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a{const a=t.default?.[e]??t[e];return a?.(...n)}));return()=>o.forEach((e=>e?.()))}const P=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,a.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const a=t.pathname===n.pathname,o=t.hash===n.hash,c=t.search===n.search;if(a&&o&&!c)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),T("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,b.f)(d.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class A extends a.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?T("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=T("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return a.createElement(P,{previousLocation:this.previousLocation,location:t},a.createElement(u.AW,{location:t,render:()=>e}))}}const N=A,R="__docusaurus-base-url-issue-banner-container",O="__docusaurus-base-url-issue-banner",I="__docusaurus-base-url-issue-banner-suggestion-container",M="__DOCUSAURUS_INSERT_BASEURL_BANNER";function F(e){return`\nwindow['${M}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${M}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${R}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[M]=!1}),[]),a.createElement(a.Fragment,null,!s.Z.canUseDOM&&a.createElement(p.Z,null,a.createElement("script",null,F(e))),a.createElement("div",{id:R}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?a.createElement(B,null):null}function $(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:c}}=(0,g.Z)(),i=(0,m.Z)(e),{htmlLang:s,direction:r}=c[o];return a.createElement(p.Z,null,a.createElement("html",{lang:s,dir:r}),a.createElement("title",null,t),a.createElement("meta",{property:"og:title",content:t}),a.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&a.createElement("link",{rel:"icon",href:i}))}var q=n(44763);function H(){const e=(0,b.H)(d.Z),t=(0,u.TH)();return a.createElement(q.Z,null,a.createElement(D.M,null,a.createElement(E.t,null,a.createElement(l,null,a.createElement($,null),a.createElement(z,null),a.createElement(U,null),a.createElement(N,{location:S(t)},e)))))}var G=n(16887);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const a=document.createElement("link");a.setAttribute("rel","prefetch"),a.setAttribute("href",e),a.onload=()=>t(),a.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(a)}))}:function(e){return new Promise(((t,n)=>{const a=new XMLHttpRequest;a.open("GET",e,!0),a.withCredentials=!0,a.onload=()=>{200===a.status?t():n()},a.send(null)}))};var V=n(99670);const W=new Set,Y=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,X={prefetch(e){if(!(e=>!K()&&!Y.has(e)&&!W.has(e))(e))return!1;W.add(e);const t=(0,b.f)(d.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,V.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!Y.has(e))(e)&&(Y.add(e),L(e))},Q=Object.freeze(X);if(s.Z.canUseDOM){window.docusaurus=Q;const e=o.hydrate;L(window.location.pathname).then((()=>{e(a.createElement(i.B6,null,a.createElement(c.VK,null,a.createElement(H,null))),document.getElementById("__docusaurus"))}))}},58940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>b});var a=n(67294),o=n(36809);const c=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-C4MJB6VCM9"],"anonymizeIP":true,"id":"default"}},"docusaurus-lunr-search":{"default":{"fileNames":{"searchDoc":"search-doc-1691335443042.json","lunrIndex":"lunr-index-1691335443042.json"}}},"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"podstawy/informatyka/index","docs":[{"id":"backend/api-zaplecza/graphql","path":"/backend/api-zaplecza/graphql","sidebar":"backendSidebar"},{"id":"backend/api-zaplecza/index","path":"/backend/api-zaplecza/","sidebar":"backendSidebar"},{"id":"backend/api-zaplecza/restful-api","path":"/backend/api-zaplecza/restful-api","sidebar":"backendSidebar"},{"id":"backend/bazy-danych/index","path":"/backend/bazy-danych/","sidebar":"backendSidebar"},{"id":"backend/bazy-danych/mapowanie-obiektowo-relacyjne","path":"/backend/bazy-danych/mapowanie-obiektowo-relacyjne","sidebar":"backendSidebar"},{"id":"backend/brokery-wiadomosci/index","path":"/backend/brokery-wiadomosci/","sidebar":"backendSidebar"},{"id":"backend/ciagla-integracja-i-wdrazanie/index","path":"/backend/ciagla-integracja-i-wdrazanie/","sidebar":"backendSidebar"},{"id":"backend/infrastuktura/index","path":"/backend/infrastuktura/","sidebar":"backendSidebar"},{"id":"backend/monitoring/index","path":"/backend/monitoring/","sidebar":"backendSidebar"},{"id":"backend/node-js/index","path":"/backend/node-js/","sidebar":"backendSidebar"},{"id":"backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems","path":"/backend/obsluga-emaili/darmowy-system-do-email-marketingu-osems","sidebar":"backendSidebar"},{"id":"backend/obsluga-emaili/index","path":"/backend/obsluga-emaili/","sidebar":"backendSidebar"},{"id":"backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare","path":"/backend/obsluga-emaili/przekierowywanie-emaili-przez-cloudflare","sidebar":"backendSidebar"},{"id":"backend/projektowanie-backendu/index","path":"/backend/projektowanie-backendu/","sidebar":"backendSidebar"},{"id":"backend/serwery-internetowe/index","path":"/backend/serwery-internetowe/","sidebar":"backendSidebar"},{"id":"backend/silniki-wyszukiwania/index","path":"/backend/silniki-wyszukiwania/","sidebar":"backendSidebar"},{"id":"backend/systemy-zarzadzania-trescia/index","path":"/backend/systemy-zarzadzania-trescia/","sidebar":"backendSidebar"},{"id":"backend/wierwsz-polecen/index","path":"/backend/wierwsz-polecen/","sidebar":"backendSidebar"},{"id":"backend/wirtualizacja-i-konteneryzacja/index","path":"/backend/wirtualizacja-i-konteneryzacja/","sidebar":"backendSidebar"},{"id":"frontend/aplikacje-mobilne/index","path":"/frontend/aplikacje-mobilne/","sidebar":"frontendSidebar"},{"id":"frontend/biblioteki/biblioteki","path":"/frontend/biblioteki/","sidebar":"frontendSidebar"},{"id":"frontend/css/debugowanie-css-przez-narzedzia-developerskie","path":"/frontend/css/debugowanie-css-przez-narzedzia-developerskie","sidebar":"frontendSidebar"},{"id":"frontend/css/index","path":"/frontend/css/","sidebar":"frontendSidebar"},{"id":"frontend/css/menu-mobilne-w-html-css-bez-javascript","path":"/frontend/css/menu-mobilne-w-html-css-bez-javascript","sidebar":"frontendSidebar"},{"id":"frontend/css/organizacja-styli-css-i-preprocesory","path":"/frontend/css/organizacja-styli-css-i-preprocesory","sidebar":"frontendSidebar"},{"id":"frontend/css/tailwind-css/index","path":"/frontend/css/tailwind-css/","sidebar":"frontendSidebar"},{"id":"frontend/css/wprowadzenie-w-css","path":"/frontend/css/wprowadzenie-w-css","sidebar":"frontendSidebar"},{"id":"frontend/dostepnosc/index","path":"/frontend/dostepnosc/","sidebar":"frontendSidebar"},{"id":"frontend/frontend/index","path":"/frontend/frontend/","sidebar":"frontendSidebar"},{"id":"frontend/html/index","path":"/frontend/html/","sidebar":"frontendSidebar"},{"id":"frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji","path":"/frontend/html/obrazki-i-multimedia-osadzanie-skrypty-sledzenie-edycji","sidebar":"frontendSidebar"},{"id":"frontend/html/rdzen-metadane-sekcje","path":"/frontend/html/rdzen-metadane-sekcje","sidebar":"frontendSidebar"},{"id":"frontend/html/tabele-formularze-elementy-interaktywne-komponenty","path":"/frontend/html/tabele-formularze-elementy-interaktywne-komponenty","sidebar":"frontendSidebar"},{"id":"frontend/html/tekst","path":"/frontend/html/tekst","sidebar":"frontendSidebar"},{"id":"frontend/html/wprowadzenie-do-htmla","path":"/frontend/html/wprowadzenie-do-htmla","sidebar":"frontendSidebar"},{"id":"frontend/html/zadanie-domowe","path":"/frontend/html/zadanie-domowe","sidebar":"frontendSidebar"},{"id":"frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js","path":"/frontend/javascript/automatyzacja-zadan-w-przegladarce-z-js","sidebar":"frontendSidebar"},{"id":"frontend/javascript/index","path":"/frontend/javascript/","sidebar":"frontendSidebar"},{"id":"frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript","path":"/frontend/javascript/nie-uzywaj-luznego-porownania-w-javascript","sidebar":"frontendSidebar"},{"id":"frontend/javascript/node-js-na-frontendzie copy","path":"/frontend/javascript/node-js-na-frontendzie copy","sidebar":"frontendSidebar"},{"id":"frontend/javascript/podstawy-javascript","path":"/frontend/javascript/podstawy-javascript","sidebar":"frontendSidebar"},{"id":"frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne","path":"/frontend/javascript/trawersowanie-drzewa-w-javascript-zadanie-rekrutacyjne","sidebar":"frontendSidebar"},{"id":"frontend/javascript/wprowadzenie-w-typescript","path":"/frontend/javascript/wprowadzenie-w-typescript","sidebar":"frontendSidebar"},{"id":"frontend/komponenty/index","path":"/frontend/komponenty/","sidebar":"frontendSidebar"},{"id":"frontend/pakiety-i-pakowarki/index","path":"/frontend/pakiety-i-pakowarki/","sidebar":"frontendSidebar"},{"id":"frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania","path":"/frontend/pakiety-i-pakowarki/webpack-4/deweloperski-serwer-webpack-i-gorace-przeladowania","sidebar":"frontendSidebar"},{"id":"frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu","path":"/frontend/pakiety-i-pakowarki/webpack-4/generowanie-pliku-html-z-szablonu","sidebar":"frontendSidebar"},{"id":"frontend/pakiety-i-pakowarki/webpack-4/index","path":"/frontend/pakiety-i-pakowarki/webpack-4/","sidebar":"frontendSidebar"},{"id":"frontend/pakiety-i-pakowarki/webpack-4/ladowarki","path":"/frontend/pakiety-i-pakowarki/webpack-4/ladowarki","sidebar":"frontendSidebar"},{"id":"frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny","path":"/frontend/pakiety-i-pakowarki/webpack-4/plik-konfiguracyjny","sidebar":"frontendSidebar"},{"id":"frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia","path":"/frontend/pakiety-i-pakowarki/webpack-4/podstawowy-sposob-uzycia","sidebar":"frontendSidebar"},{"id":"frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych","path":"/frontend/pakiety-i-pakowarki/webpack-4/podzial-plikow-konfiguracyjnych","sidebar":"frontendSidebar"},{"id":"frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow","path":"/frontend/pakiety-i-pakowarki/webpack-4/rozwiazywanie-sciezek-importu-plikow","sidebar":"frontendSidebar"},{"id":"frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian","path":"/frontend/pakiety-i-pakowarki/webpack-4/tryb-deweloperski-mapa-zrodla-i-obserwacja-zmian","sidebar":"frontendSidebar"},{"id":"frontend/progresywne-aplikacje/index","path":"/frontend/progresywne-aplikacje/","sidebar":"frontendSidebar"},{"id":"frontend/react/index","path":"/frontend/react/","sidebar":"frontendSidebar"},{"id":"frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta","path":"/frontend/react/memoizowanie-cacheowanie-na-przykladzie-reacta","sidebar":"frontendSidebar"},{"id":"frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni","path":"/frontend/react/tworzenie-kopiarki-fragmentow-kodu-z-kolorowaniem-skladni","sidebar":"frontendSidebar"},{"id":"frontend/seo/index","path":"/frontend/seo/","sidebar":"frontendSidebar"},{"id":"frontend/svg/index","path":"/frontend/svg/","sidebar":"frontendSidebar"},{"id":"frontend/webassembly/index","path":"/frontend/webassembly/","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/index","path":"/frontend/zarzadzanie-stanem/","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje","path":"/frontend/zarzadzanie-stanem/podstawy-reduxa/asynchroniczne-akcje","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/index","path":"/frontend/zarzadzanie-stanem/podstawy-reduxa/","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a","path":"/frontend/zarzadzanie-stanem/podstawy-reduxa/koncept-dzialania-redux-a","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow","path":"/frontend/zarzadzanie-stanem/podstawy-reduxa/laczenie-reduktorow","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu","path":"/frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-magazynu","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow","path":"/frontend/zarzadzanie-stanem/podstawy-reduxa/modyfikowanie-stanu-pojedynczych-elementow","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki","path":"/frontend/zarzadzanie-stanem/podstawy-reduxa/podzial-kodu-na-mniejsze-pliki","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji","path":"/frontend/zarzadzanie-stanem/podstawy-reduxa/predefiniowane-typy-akcji-i-kreatory-akcji","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego","path":"/frontend/zarzadzanie-stanem/podstawy-reduxa/przygotowanie-srodowiska-deweloperskiego","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk","path":"/frontend/zarzadzanie-stanem/podstawy-reduxa/redux-thunk","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami","path":"/frontend/zarzadzanie-stanem/podstawy-reduxa/zarzadzanie-wieloma-stanami","sidebar":"frontendSidebar"},{"id":"frontend/zarzadzanie-stanem/redux/index","path":"/frontend/zarzadzanie-stanem/redux/","sidebar":"frontendSidebar"},{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/index","path":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/","sidebar":"fullstackSidebar"},{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie","path":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/logowanie","sidebar":"fullstackSidebar"},{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji","path":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/obsluga-sesji","sidebar":"fullstackSidebar"},{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania","path":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/projekt-systemu-uwierzytelniania","sidebar":"fullstackSidebar"},{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja","path":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/rejestracja","sidebar":"fullstackSidebar"},{"id":"fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie","path":"/fullstack/autentykacja-i-autoryzacja/implementacja-autentykacji/wylogowanie","sidebar":"fullstackSidebar"},{"id":"fullstack/autentykacja-i-autoryzacja/index","path":"/fullstack/autentykacja-i-autoryzacja/","sidebar":"fullstackSidebar"},{"id":"fullstack/fullstack/index","path":"/fullstack/fullstack/","sidebar":"fullstackSidebar"},{"id":"fullstack/next-js/index","path":"/fullstack/next-js/","sidebar":"fullstackSidebar"},{"id":"fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel","path":"/fullstack/next-js/mini-projekt-z-next-js/hosting-aplikacji-w-serwisie-vercel","sidebar":"fullstackSidebar"},{"id":"fullstack/next-js/mini-projekt-z-next-js/index","path":"/fullstack/next-js/mini-projekt-z-next-js/","sidebar":"fullstackSidebar"},{"id":"fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development","path":"/fullstack/next-js/mini-projekt-z-next-js/inne-serwisy-hostingowe-i-cloud-development","sidebar":"fullstackSidebar"},{"id":"fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania","path":"/fullstack/next-js/mini-projekt-z-next-js/instalacja-niezbednego-oprogramowania","sidebar":"fullstackSidebar"},{"id":"fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy","path":"/fullstack/next-js/mini-projekt-z-next-js/korzystanie-z-bazy-danych-mongodb-i-prismy","sidebar":"fullstackSidebar"},{"id":"fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api","path":"/fullstack/next-js/mini-projekt-z-next-js/obsluga-formularza-i-api","sidebar":"fullstackSidebar"},{"id":"fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej","path":"/fullstack/next-js/mini-projekt-z-next-js/stworzenie-strony-glownej","sidebar":"fullstackSidebar"},{"id":"fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github","path":"/fullstack/next-js/mini-projekt-z-next-js/system-kontroli-wersji-git-i-serwis-github","sidebar":"fullstackSidebar"},{"id":"fullstack/next-js/warsztat-next-js-2022-12-20","path":"/fullstack/next-js/warsztat-next-js-2022-12-20","sidebar":"fullstackSidebar"},{"id":"fullstack/paginacja/index","path":"/fullstack/paginacja/","sidebar":"fullstackSidebar"},{"id":"fullstack/powiadomienia-push/index","path":"/fullstack/powiadomienia-push/","sidebar":"fullstackSidebar"},{"id":"fullstack/przetwarzanie-platnosci/index","path":"/fullstack/przetwarzanie-platnosci/","sidebar":"fullstackSidebar"},{"id":"fullstack/sledzenie/index","path":"/fullstack/sledzenie/","sidebar":"fullstackSidebar"},{"id":"fullstack/trasowanie/index","path":"/fullstack/trasowanie/","sidebar":"fullstackSidebar"},{"id":"fullstack/websocket/index","path":"/fullstack/websocket/","sidebar":"fullstackSidebar"},{"id":"podstawy/aplikacje/index","path":"/podstawy/aplikacje/","sidebar":"basicsSidebar"},{"id":"podstawy/architektura-oprogramowania/index","path":"/podstawy/architektura-oprogramowania/","sidebar":"basicsSidebar"},{"id":"podstawy/bezpieczenstwo/index","path":"/podstawy/bezpieczenstwo/","sidebar":"basicsSidebar"},{"id":"podstawy/debugowanie/index","path":"/podstawy/debugowanie/","sidebar":"basicsSidebar"},{"id":"podstawy/dns-i-domeny/index","path":"/podstawy/dns-i-domeny/","sidebar":"basicsSidebar"},{"id":"podstawy/dokumentacje/index","path":"/podstawy/dokumentacje/","sidebar":"basicsSidebar"},{"id":"podstawy/dokumentacje/jak-czytac-dokumentacje","path":"/podstawy/dokumentacje/jak-czytac-dokumentacje","sidebar":"basicsSidebar"},{"id":"podstawy/dokumentacje/jak-tworzyc-dokumentacje","path":"/podstawy/dokumentacje/jak-tworzyc-dokumentacje","sidebar":"basicsSidebar"},{"id":"podstawy/edytory-kodu/formatowanie-kodu","path":"/podstawy/edytory-kodu/formatowanie-kodu","sidebar":"basicsSidebar"},{"id":"podstawy/edytory-kodu/index","path":"/podstawy/edytory-kodu/","sidebar":"basicsSidebar"},{"id":"podstawy/edytory-kodu/vim","path":"/podstawy/edytory-kodu/vim","sidebar":"basicsSidebar"},{"id":"podstawy/edytory-kodu/visual-studio-code","path":"/podstawy/edytory-kodu/visual-studio-code","sidebar":"basicsSidebar"},{"id":"podstawy/haszowanie/index","path":"/podstawy/haszowanie/","sidebar":"basicsSidebar"},{"id":"podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github","path":"/podstawy/hosting/darmowy-hosting-statycznych-stron-w-serwisie-github","sidebar":"basicsSidebar"},{"id":"podstawy/hosting/index","path":"/podstawy/hosting/","sidebar":"basicsSidebar"},{"id":"podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy","path":"/podstawy/hosting/konfiguracja-wlasnego-serwera-wirtualnego-vps copy","sidebar":"basicsSidebar"},{"id":"podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy","path":"/podstawy/hosting/serwuj-strony-internetowe-z-twojego-komputera copy","sidebar":"basicsSidebar"},{"id":"podstawy/informatyka/index","path":"/podstawy/informatyka/","sidebar":"basicsSidebar"},{"id":"podstawy/jezyki-programowania/c","path":"/podstawy/jezyki-programowania/c","sidebar":"basicsSidebar"},{"id":"podstawy/jezyki-programowania/index","path":"/podstawy/jezyki-programowania/","sidebar":"basicsSidebar"},{"id":"podstawy/jezyki-programowania/javascript","path":"/podstawy/jezyki-programowania/javascript","sidebar":"basicsSidebar"},{"id":"podstawy/jezyki-programowania/php","path":"/podstawy/jezyki-programowania/php","sidebar":"basicsSidebar"},{"id":"podstawy/jezyki-programowania/python","path":"/podstawy/jezyki-programowania/python","sidebar":"basicsSidebar"},{"id":"podstawy/jezyki-programowania/scratch","path":"/podstawy/jezyki-programowania/scratch","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/github","path":"/podstawy/kontrola-wersji/github","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/index","path":"/podstawy/kontrola-wersji/","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/inspekcja-kodu","path":"/podstawy/kontrola-wersji/inspekcja-kodu","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/podstawy-gita/czym-jest-git","path":"/podstawy/kontrola-wersji/podstawy-gita/czym-jest-git","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/podstawy-gita/etykietowanie","path":"/podstawy/kontrola-wersji/podstawy-gita/etykietowanie","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow","path":"/podstawy/kontrola-wersji/podstawy-gita/galezie-laczenie-galezi-i-rozwiazywanie-konfliktow","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow","path":"/podstawy/kontrola-wersji/podstawy-gita/ignorowanie-plikow-i-katalogow","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/podstawy-gita/index","path":"/podstawy/kontrola-wersji/podstawy-gita/","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/podstawy-gita/instalacja","path":"/podstawy/kontrola-wersji/podstawy-gita/instalacja","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji","path":"/podstawy/kontrola-wersji/podstawy-gita/korzystanie-z-dokumentacji","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie","path":"/podstawy/kontrola-wersji/podstawy-gita/podrozowanie-w-czasie","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code","path":"/podstawy/kontrola-wersji/podstawy-gita/praca-z-graficznym-interfejsem-git-w-visual-studio-code","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github","path":"/podstawy/kontrola-wersji/podstawy-gita/praca-ze-zdalnym-repozytorium-github","sidebar":"basicsSidebar"},{"id":"podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian","path":"/podstawy/kontrola-wersji/podstawy-gita/tymczasowe-przechowywanie-zmian","sidebar":"basicsSidebar"},{"id":"podstawy/licencje/index","path":"/podstawy/licencje/","sidebar":"basicsSidebar"},{"id":"podstawy/pamiec-podreczna/index","path":"/podstawy/pamiec-podreczna/","sidebar":"basicsSidebar"},{"id":"podstawy/praca-w-it/backend-developer","path":"/podstawy/praca-w-it/backend-developer","sidebar":"basicsSidebar"},{"id":"podstawy/praca-w-it/devops-qa-i-inne","path":"/podstawy/praca-w-it/devops-qa-i-inne","sidebar":"basicsSidebar"},{"id":"podstawy/praca-w-it/frontend-developer","path":"/podstawy/praca-w-it/frontend-developer","sidebar":"basicsSidebar"},{"id":"podstawy/praca-w-it/index","path":"/podstawy/praca-w-it/","sidebar":"basicsSidebar"},{"id":"podstawy/praca-w-it/ux-ui-designer","path":"/podstawy/praca-w-it/ux-ui-designer","sidebar":"basicsSidebar"},{"id":"podstawy/programowanie/algorytmy","path":"/podstawy/programowanie/algorytmy","sidebar":"basicsSidebar"},{"id":"podstawy/programowanie/api","path":"/podstawy/programowanie/api","sidebar":"basicsSidebar"},{"id":"podstawy/programowanie/frameworki-i-biblioteki","path":"/podstawy/programowanie/frameworki-i-biblioteki","sidebar":"basicsSidebar"},{"id":"podstawy/programowanie/index","path":"/podstawy/programowanie/","sidebar":"basicsSidebar"},{"id":"podstawy/programowanie/paradygmaty-programowania","path":"/podstawy/programowanie/paradygmaty-programowania","sidebar":"basicsSidebar"},{"id":"podstawy/programowanie/struktury-i-bazy-danych","path":"/podstawy/programowanie/struktury-i-bazy-danych","sidebar":"basicsSidebar"},{"id":"podstawy/programowanie/typowanie-statyczne-i-dynamiczne","path":"/podstawy/programowanie/typowanie-statyczne-i-dynamiczne","sidebar":"basicsSidebar"},{"id":"podstawy/programowanie/wyrazenia-regularne","path":"/podstawy/programowanie/wyrazenia-regularne","sidebar":"basicsSidebar"},{"id":"podstawy/programowanie/wzorce-projektowe","path":"/podstawy/programowanie/wzorce-projektowe","sidebar":"basicsSidebar"},{"id":"podstawy/siec/index","path":"/podstawy/siec/","sidebar":"basicsSidebar"},{"id":"podstawy/siec/jak-dziala-internet","path":"/podstawy/siec/jak-dziala-internet","sidebar":"basicsSidebar"},{"id":"podstawy/sprzet-komputerowy/index","path":"/podstawy/sprzet-komputerowy/","sidebar":"basicsSidebar"},{"id":"podstawy/sprzet-komputerowy/system-binarny/index","path":"/podstawy/sprzet-komputerowy/system-binarny/","sidebar":"basicsSidebar"},{"id":"podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego","path":"/podstawy/sprzet-komputerowy/system-binarny/podstawy-systemu-binarnego","sidebar":"basicsSidebar"},{"id":"podstawy/sprzet-komputerowy/system-binarny/system-binarny","path":"/podstawy/sprzet-komputerowy/system-binarny/system-binarny","sidebar":"basicsSidebar"},{"id":"podstawy/systemy-operacyjne/chrome-os","path":"/podstawy/systemy-operacyjne/chrome-os","sidebar":"basicsSidebar"},{"id":"podstawy/systemy-operacyjne/free-bsd","path":"/podstawy/systemy-operacyjne/free-bsd","sidebar":"basicsSidebar"},{"id":"podstawy/systemy-operacyjne/index","path":"/podstawy/systemy-operacyjne/","sidebar":"basicsSidebar"},{"id":"podstawy/systemy-operacyjne/linux","path":"/podstawy/systemy-operacyjne/linux","sidebar":"basicsSidebar"},{"id":"podstawy/systemy-operacyjne/macos-i-ios","path":"/podstawy/systemy-operacyjne/macos-i-ios","sidebar":"basicsSidebar"},{"id":"podstawy/systemy-operacyjne/windows","path":"/podstawy/systemy-operacyjne/windows","sidebar":"basicsSidebar"},{"id":"podstawy/testowanie/index","path":"/podstawy/testowanie/","sidebar":"basicsSidebar"},{"id":"podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e","path":"/podstawy/testowanie/przyklady-testow-jednostkowych-integracyjnych-i-e2e","sidebar":"basicsSidebar"},{"id":"podstawy/testowanie/wprowadzenie-do-testowania","path":"/podstawy/testowanie/wprowadzenie-do-testowania","sidebar":"basicsSidebar"},{"id":"podstawy/warstwy-abstrakcji/index","path":"/podstawy/warstwy-abstrakcji/","sidebar":"basicsSidebar"},{"id":"podstawy/wydajnosc/index","path":"/podstawy/wydajnosc/","sidebar":"basicsSidebar"},{"id":"podstawy/zarzadzanie-projektami/index","path":"/podstawy/zarzadzanie-projektami/","sidebar":"basicsSidebar"},{"id":"ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin","path":"/ux-ui/czy-do-zostania-designerem-ux-ui-potrzeba-10000-godzin","sidebar":"uxuiSidebar"},{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/index","path":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/","sidebar":"uxuiSidebar"},{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui","path":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/material-uzupelniajacy-ui","sidebar":"uxuiSidebar"},{"id":"ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux","path":"/ux-ui/praktyczne-szkolenie-projektowania-ux-ui/nagranie-z-webinaru-ux","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/detale","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-ilustracji","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/dostosowanie-typografii-i-kolorow","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/formularzdostepnosci-uslugi","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/glebia","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/identyfikacja-marki","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/index","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/korzystanie-z-figmy","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/mapa-strony","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/persona-uzytkownika","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/projektowanie-szkieletu","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/prototyp","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/przygotowanie-elementow-szkieletu","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/rozmieszczenie-grafik","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/scenariusze-uzytkownika","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/schemat-dzialan-uzytkownika","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tablica-inspiracji","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-graficzne","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/tresci-tekstowe","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/wprowadzenie","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem","path":"/ux-ui/projektowanie-interfejsu-i-doswiadczen-uzytkownikow/zapoznanie-z-interfejsem","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-ux-ui","path":"/ux-ui/projektowanie-ux-ui","sidebar":"uxuiSidebar"},{"id":"ux-ui/projektowanie-vs-kodowanie","path":"/ux-ui/projektowanie-vs-kodowanie","sidebar":"uxuiSidebar"},{"id":"ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls","path":"/ux-ui/przeprojektowanie-interfejsu-strony-internetowej-gls","sidebar":"uxuiSidebar"},{"id":"ux-ui/roznice-miedzy-ux-ui","path":"/ux-ui/roznice-miedzy-ux-ui","sidebar":"uxuiSidebar"}],"draftIds":[],"sidebars":{"basicsSidebar":{"link":{"path":"/podstawy/informatyka/","label":"Informatyka"}},"uxuiSidebar":{"link":{"path":"/ux-ui/projektowanie-ux-ui","label":"ux-ui/projektowanie-ux-ui"}},"frontendSidebar":{"link":{"path":"/frontend/frontend/","label":"Frontend"}},"backendSidebar":{"link":{"path":"/backend/projektowanie-backendu/","label":"\u25b6\ufe0f Projektowanie backendu"}},"fullstackSidebar":{"link":{"path":"/fullstack/fullstack/","label":"Full Stack"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"pl","locales":["pl"],"path":"i18n","currentLocale":"pl","localeConfigs":{"pl":{"label":"Polski","direction":"ltr","htmlLang":"pl","calendar":"gregory","path":"pl"}}}');var s=n(57529);const r=JSON.parse('{"docusaurusVersion":"2.4.1","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"},"docusaurus-lunr-search":{"type":"package","name":"docusaurus-lunr-search","version":"2.3.2"},"docusaurus-tailwindcss":{"type":"local"}}}'),d={siteConfig:o.default,siteMetadata:r,globalData:c,i18n:i,codeTranslations:s},u=a.createContext(d);function b(e){let{children:t}=e;return a.createElement(u.Provider,{value:d},t)}},44763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var a=n(67294),o=n(10412),c=n(35742),i=n(18780),s=n(84173);function r(e){let{error:t,tryAgain:n}=e;return a.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},a.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),a.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),a.createElement(d,{error:t}))}function d(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return a.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return a.createElement(l,{fallback:()=>a.createElement(r,{error:t,tryAgain:n})},a.createElement(c.Z,null,a.createElement("title",null,"Page Error")),a.createElement(s.Z,null,a.createElement(r,{error:t,tryAgain:n})))}const b=e=>a.createElement(u,e);class l extends a.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??b)(e)}return e??null}}},10412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const a="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:a,canUseEventListeners:a&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:a&&"IntersectionObserver"in window,canUseViewport:a&&"screen"in window}},35742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var a=n(67294),o=n(70405);function c(e){return a.createElement(o.ql,e)}},39960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(87462),o=n(67294),c=n(73727),i=n(18780),s=n(52263),r=n(13919),d=n(10412);const u=o.createContext({collectLink:()=>{}});var b=n(44996);function l(e,t){let{isNavLink:n,to:l,href:f,activeClassName:p,isActive:g,"data-noBrokenLinkCheck":m,autoAddBaseUrl:w=!0,...h}=e;const{siteConfig:{trailingSlash:_,baseUrl:j}}=(0,s.Z)(),{withBaseUrl:y}=(0,b.C)(),k=(0,o.useContext)(u),x=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>x.current));const v=l||f;const z=(0,r.Z)(v),C=v?.replace("pathname://","");let S=void 0!==C?(E=C,w&&(e=>e.startsWith("/"))(E)?y(E):E):void 0;var E;S&&z&&(S=(0,i.applyTrailingSlash)(S,{trailingSlash:_,baseUrl:j}));const D=(0,o.useRef)(!1),T=n?c.OL:c.rU,P=d.Z.canUseIntersectionObserver,L=(0,o.useRef)(),A=()=>{D.current||null==S||(window.docusaurus.preload(S),D.current=!0)};(0,o.useEffect)((()=>(!P&&z&&null!=S&&window.docusaurus.prefetch(S),()=>{P&&L.current&&L.current.disconnect()})),[L,S,P,z]);const N=S?.startsWith("#")??!1,R=!S||!z||N;return R||m||k.collectLink(S),R?o.createElement("a",(0,a.Z)({ref:x,href:S},v&&!z&&{target:"_blank",rel:"noopener noreferrer"},h)):o.createElement(T,(0,a.Z)({},h,{onMouseEnter:A,onTouchStart:A,innerRef:e=>{x.current=e,P&&e&&z&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=S&&window.docusaurus.prefetch(S))}))})),L.current.observe(e))},to:S},n&&{isActive:g,activeClassName:p}))}const f=o.forwardRef(l)},95999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r,I:()=>s});var a=n(67294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,a.isValidElement)(e)))?n.map(((e,t)=>(0,a.isValidElement)(e)?a.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var c=n(57529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return c[t??n]??n??t}function s(e,t){let{message:n,id:a}=e;return o(i({message:n,id:a}),t)}function r(e){let{children:t,id:n,values:c}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const s=i({message:t,id:n});return a.createElement(a.Fragment,null,o(s,c))}},29935:(e,t,n)=>{"use strict";n.d(t,{m:()=>a});const a="default"},13919:(e,t,n)=>{"use strict";function a(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!a(e)}n.d(t,{Z:()=>o,b:()=>a})},44996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var a=n(67294),o=n(52263),c=n(13919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,a.useCallback)(((n,a)=>function(e,t,n,a){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===a?{}:a;if(!n||n.startsWith("#")||(0,c.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,a)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},52263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var a=n(67294),o=n(58940);function c(){return(0,a.useContext)(o._)}},28084:(e,t,n)=>{"use strict";n.d(t,{OD:()=>c,eZ:()=>i});var a=n(52263),o=n(29935);function c(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const a=c(e),i=a?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},72389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var a=n(67294),o=n(98934);function c(){return(0,a.useContext)(o._)}},99670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const a=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[c,i]=n;const s=o?`${o}.${c}`:c;a(i)?e(i,s):t[s]=i}))}(e),t}},30226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>c});var a=n(67294);const o=a.createContext(null);function c(e){let{children:t,value:n}=e;const c=a.useContext(o),i=(0,a.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const a={...t.data,...n?.data};return{plugin:t.plugin,data:a}}({parent:c,value:n})),[c,n]);return a.createElement(o.Provider,{value:i},t)}},94104:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>f,gA:()=>u,_r:()=>r,Jo:()=>p,zh:()=>d,yW:()=>l,gB:()=>b});var a=n(16550),o=n(28084);const c=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=function(e,t){const n=c(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,a.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,a.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((a=>{a.id===t&&(n[e.name]=a)}))})),n}(o.id):{}}}const s={},r=()=>(0,o.OD)("docusaurus-plugin-content-docs")??s,d=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function u(e){void 0===e&&(e={});const t=r(),{pathname:n}=(0,a.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,a.LX)(t,{path:n.path,exact:!1,strict:!1})})),c=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!c&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return c}(t,n,e)}function b(e){return d(e).versions}function l(e){const t=d(e);return c(t)}function f(e){const t=d(e),{pathname:n}=(0,a.TH)();return i(t,n)}function p(e){const t=d(e),{pathname:n}=(0,a.TH)();return function(e,t){const n=c(e);return{latestDocSuggestion:i(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},56657:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});const a={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},18320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var a=n(74865),o=n.n(a);o().configure({showSpinner:!1});const c={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var a=n(87410),o=n(36809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:a}=t;globalThis.Prism=e,a.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(a.Z)},39471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var a=n(67294);const o={iconExternalLink:"iconExternalLink_nPIU"};function c(e){let{width:t=13.5,height:n=13.5}=e;return a.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},a.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},84173:(e,t,n)=>{"use strict";n.d(t,{Z:()=>pt});var a=n(67294),o=n(86010),c=n(44763),i=n(1944),s=n(87462),r=n(16550),d=n(95999),u=n(85936);const b="__docusaurus_skipToContent_fallback";function l(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,a.useRef)(null),{action:t}=(0,r.k6)(),n=(0,a.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(b);t&&l(t)}),[]);return(0,u.S)((n=>{let{location:a}=n;e.current&&!a.hash&&"PUSH"===t&&l(e.current)})),{containerRef:e,onClick:n}}const p=(0,d.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??p,{containerRef:n,onClick:o}=f();return a.createElement("div",{ref:n,role:"region","aria-label":p},a.createElement("a",(0,s.Z)({},e,{href:`#${b}`,onClick:o}),t))}var m=n(35281),w=n(19727);const h={skipToContent:"skipToContent_fXgn"};function _(){return a.createElement(g,{className:h.skipToContent})}var j=n(86668),y=n(59689);function k(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:c=1.2,className:i,...r}=e;return a.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:t,height:n},r),a.createElement("g",{stroke:o,strokeWidth:c},a.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const x={closeButton:"closeButton_CVFx"};function v(e){return a.createElement("button",(0,s.Z)({type:"button","aria-label":(0,d.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",x.closeButton,e.className)}),a.createElement(k,{width:14,height:14,strokeWidth:3.1}))}const z={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,j.L)(),{content:n}=t;return a.createElement("div",(0,s.Z)({},e,{className:(0,o.Z)(z.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const S={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function E(){const{announcementBar:e}=(0,j.L)(),{isActive:t,close:n}=(0,y.nT)();if(!t)return null;const{backgroundColor:o,textColor:c,isCloseable:i}=e;return a.createElement("div",{className:S.announcementBar,style:{backgroundColor:o,color:c},role:"banner"},i&&a.createElement("div",{className:S.announcementBarPlaceholder}),a.createElement(C,{className:S.announcementBarContent}),i&&a.createElement(v,{onClick:n,className:S.announcementBarClose}))}var D=n(72961),T=n(12466);var P=n(902),L=n(13102);const A=a.createContext(null);function N(e){let{children:t}=e;const n=function(){const e=(0,D.e)(),t=(0,L.HY)(),[n,o]=(0,a.useState)(!1),c=null!==t.component,i=(0,P.D9)(c);return(0,a.useEffect)((()=>{c&&!i&&o(!0)}),[c,i]),(0,a.useEffect)((()=>{c?e.shown||o(!0):o(!1)}),[e.shown,c]),(0,a.useMemo)((()=>[n,o]),[n])}();return a.createElement(A.Provider,{value:n},t)}function R(e){if(e.component){const t=e.component;return a.createElement(t,e.props)}}function O(){const e=(0,a.useContext)(A);if(!e)throw new P.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,a.useCallback)((()=>n(!1)),[n]),c=(0,L.HY)();return(0,a.useMemo)((()=>({shown:t,hide:o,content:R(c)})),[o,c,t])}function I(e){let{header:t,primaryMenu:n,secondaryMenu:c}=e;const{shown:i}=O();return a.createElement("div",{className:"navbar-sidebar"},t,a.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},a.createElement("div",{className:"navbar-sidebar__item menu"},n),a.createElement("div",{className:"navbar-sidebar__item menu"},c)))}var M=n(92949),F=n(72389);function B(e){return a.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),a.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return a.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),a.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:c,onChange:i}=e;const s=(0,F.Z)(),r=(0,d.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===c?(0,d.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,d.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return a.createElement("div",{className:(0,o.Z)($.toggle,t)},a.createElement("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!s&&$.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===c?"light":"dark"),disabled:!s,title:r,"aria-label":r,"aria-live":"polite"},a.createElement(B,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),a.createElement(U,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})))}const H=a.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Z(e){let{className:t}=e;const n=(0,j.L)().navbar.style,o=(0,j.L)().colorMode.disableSwitch,{colorMode:c,setColorMode:i}=(0,M.I)();return o?null:a.createElement(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:c,onChange:i})}var V=n(21327);function W(){return a.createElement(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,D.e)();return a.createElement("button",{type:"button","aria-label":(0,d.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},a.createElement(k,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return a.createElement("div",{className:"navbar-sidebar__brand"},a.createElement(W,null),a.createElement(Z,{className:"margin-right--md"}),a.createElement(Y,null))}var X=n(39960),Q=n(44996),J=n(13919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(39471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:c,label:i,html:r,isDropdownLink:d,prependBaseUrlToHref:u,...b}=e;const l=(0,Q.Z)(o),f=(0,Q.Z)(t),p=(0,Q.Z)(c,{forcePrependBaseUrl:!0}),g=i&&c&&!(0,J.Z)(c),m=r?{dangerouslySetInnerHTML:{__html:r}}:{children:a.createElement(a.Fragment,null,i,g&&a.createElement(te.Z,d&&{width:12,height:12}))};return c?a.createElement(X.Z,(0,s.Z)({href:u?p:c},b,m)):a.createElement(X.Z,(0,s.Z)({to:l,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},b,m))}function ae(e){let{className:t,isDropdownItem:n=!1,...c}=e;const i=a.createElement(ne,(0,s.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},c));return n?a.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...c}=e;return a.createElement("li",{className:"menu__list-item"},a.createElement(ne,(0,s.Z)({className:(0,o.Z)("menu__link",t)},c)))}function ce(e){let{mobile:t=!1,position:n,...o}=e;const c=t?oe:ae;return a.createElement(c,(0,s.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(86043),se=n(48596),re=n(52263);function de(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:c,onClick:i,...r}=e;const d=(0,a.useRef)(null),[u,b]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{const e=e=>{d.current&&!d.current.contains(e.target)&&b(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[d]),a.createElement("div",{ref:d,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},a.createElement(ne,(0,s.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:r.to?void 0:"#",className:(0,o.Z)("navbar__link",c)},r,{onClick:r.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),b(!u))}}),r.children??r.label),a.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>a.createElement(Se,(0,s.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function be(e){let{items:t,className:n,position:c,onClick:i,...d}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,re.Z)(),{pathname:t}=(0,r.TH)();return t.replace(e,"/")}(),b=de(t,u),{collapsed:l,toggleCollapsed:f,setCollapsed:p}=(0,ie.u)({initialState:()=>!b});return(0,a.useEffect)((()=>{b&&p(!b)}),[u,b,p]),a.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":l})},a.createElement(ne,(0,s.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},d,{onClick:e=>{e.preventDefault(),f()}}),d.children??d.label),a.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:l},t.map(((e,t)=>a.createElement(Se,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function le(e){let{mobile:t=!1,...n}=e;const o=t?be:ue;return a.createElement(o,n)}var fe=n(94711);function pe(e){let{width:t=20,height:n=20,...o}=e;return a.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),a.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ge="iconLanguage_nlXk";var me=n(94184),we=n.n(me),he=n(28084);const _e=e=>{const t=(0,a.useRef)(!1),o=(0,a.useRef)(null),[c,i]=(0,a.useState)(!1),s=(0,r.k6)(),{siteConfig:d={}}=(0,re.Z)(),u=(0,F.Z)(),{baseUrl:b}=d,l=(0,he.eZ)("docusaurus-lunr-search"),f=()=>{t.current||(Promise.all([fetch(`${b}${l.fileNames.searchDoc}`).then((e=>e.json())),fetch(`${b}${l.fileNames.lunrIndex}`).then((e=>e.json())),Promise.all([n.e(84611),n.e(25684)]).then(n.bind(n,4734)),Promise.all([n.e(40532),n.e(32572)]).then(n.bind(n,32572))]).then((e=>{let[t,n,{default:a}]=e;0!==t.length&&(((e,t,n)=>{new n({searchDocs:e,searchIndex:t,baseUrl:b,inputSelector:"#search_input_react",handleSelected:(e,t,n)=>{const a=n.url||"/";document.createElement("a").href=a,s.push(a)}})})(t,n,a),i(!0))})),t.current=!0)},p=(0,a.useCallback)((t=>{o.current.contains(t.target)||o.current.focus(),e.handleSearchBarToggle&&e.handleSearchBarToggle(!e.isSearchBarExpanded)}),[e.isSearchBarExpanded]);return u&&f(),a.createElement("div",{className:"navbar__search",key:"search-box"},a.createElement("span",{"aria-label":"expand searchbar",role:"button",className:we()("search-icon",{"search-icon-hidden":e.isSearchBarExpanded}),onClick:p,onKeyDown:p,tabIndex:0}),a.createElement("input",{id:"search_input_react",type:"search",placeholder:c?"Search":"Loading...","aria-label":"Search",className:we()("navbar__search-input",{"search-bar-expanded":e.isSearchBarExpanded},{"search-bar":!e.isSearchBarExpanded}),onClick:f,onMouseOver:f,onFocus:p,onBlur:p,ref:o,disabled:!c}))},je={searchBox:"searchBox_ZlJk"};function ye(e){let{children:t,className:n}=e;return a.createElement("div",{className:(0,o.Z)(n,je.searchBox)},t)}var ke=n(94104),xe=n(52802);var ve=n(60373);const ze=e=>e.docs.find((t=>t.id===e.mainDocId));const Ce={default:ce,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...c}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:b}}=(0,re.Z)(),l=(0,fe.l)(),{search:f,hash:p}=(0,r.TH)(),g=[...n,...u.map((e=>{const n=`${`pathname://${l.createUrl({locale:e,fullyQualified:!1})}`}${f}${p}`;return{label:b[e].label,lang:b[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],m=t?(0,d.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):b[i].label;return a.createElement(le,(0,s.Z)({},c,{mobile:t,label:a.createElement(a.Fragment,null,a.createElement(pe,{className:ge}),m),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:a.createElement(ye,{className:n},a.createElement(_e,null))},dropdown:le,html:function(e){let{value:t,className:n,mobile:c=!1,isDropdownItem:i=!1}=e;const s=i?"li":"div";return a.createElement(s,{className:(0,o.Z)({navbar__item:!c&&!i,"menu__list-item":c},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...c}=e;const{activeDoc:i}=(0,ke.Iw)(o),r=(0,xe.vY)(t,o);return null===r?null:a.createElement(ce,(0,s.Z)({exact:!0},c,{isActive:()=>i?.path===r.path||!!i?.sidebar&&i.sidebar===r.sidebar,label:n??r.id,to:r.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...c}=e;const{activeDoc:i}=(0,ke.Iw)(o),r=(0,xe.oz)(t,o).link;if(!r)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return a.createElement(ce,(0,s.Z)({exact:!0},c,{isActive:()=>i?.sidebar===t,label:n??r.label,to:r.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...c}=e;const i=(0,xe.lO)(o)[0],r=t??i.label,d=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return a.createElement(ce,(0,s.Z)({},c,{label:r,to:d}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:c,dropdownItemsAfter:i,...u}=e;const{search:b,hash:l}=(0,r.TH)(),f=(0,ke.Iw)(n),p=(0,ke.gB)(n),{savePreferredVersionName:g}=(0,ve.J)(n),m=[...c,...p.map((e=>{const t=f.alternateDocVersions[e.name]??ze(e);return{label:e.label,to:`${t.path}${b}${l}`,isActive:()=>e===f.activeVersion,onClick:()=>g(e.name)}})),...i],w=(0,xe.lO)(n)[0],h=t&&m.length>1?(0,d.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):w.label,_=t&&m.length>1?void 0:ze(w).path;return m.length<=1?a.createElement(ce,(0,s.Z)({},u,{mobile:t,label:h,to:_,isActive:o?()=>!1:void 0})):a.createElement(le,(0,s.Z)({},u,{mobile:t,label:h,to:_,items:m,isActive:o?()=>!1:void 0}))}};function Se(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),c=Ce[o];if(!c)throw new Error(`No NavbarItem component found for type "${t}".`);return a.createElement(c,n)}function Ee(){const e=(0,D.e)(),t=(0,j.L)().navbar.items;return a.createElement("ul",{className:"menu__list"},t.map(((t,n)=>a.createElement(Se,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function De(e){return a.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),a.createElement(d.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Te(){const e=0===(0,j.L)().navbar.items.length,t=O();return a.createElement(a.Fragment,null,!e&&a.createElement(De,{onClick:()=>t.hide()}),t.content)}function Pe(){const e=(0,D.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,a.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?a.createElement(I,{header:a.createElement(K,null),primaryMenu:a.createElement(Ee,null),secondaryMenu:a.createElement(Te,null)}):null}const Le={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ae(e){return a.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function Ne(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:c}}=(0,j.L)(),i=(0,D.e)(),{navbarRef:s,isNavbarVisible:r}=function(e){const[t,n]=(0,a.useState)(e),o=(0,a.useRef)(!1),c=(0,a.useRef)(0),i=(0,a.useCallback)((e=>{null!==e&&(c.current=e.getBoundingClientRect().height)}),[]);return(0,T.RF)(((t,a)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+d{if(!e)return;const a=t.location.hash;if(a?document.getElementById(a.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return a.createElement("nav",{ref:s,"aria-label":(0,d.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Le.navbarHideable,!r&&Le.navbarHidden],{"navbar--dark":"dark"===c,"navbar--primary":"primary"===c,"navbar-sidebar--show":i.shown})},t,a.createElement(Ae,{onClick:i.toggle}),a.createElement(Pe,null))}var Re=n(18780);const Oe={errorBoundaryError:"errorBoundaryError_a6uf"};function Ie(e){return a.createElement("button",(0,s.Z)({type:"button"},e),a.createElement(d.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Me(e){let{error:t}=e;const n=(0,Re.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return a.createElement("p",{className:Oe.errorBoundaryError},n)}class Fe extends a.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Be="right";function Ue(e){let{width:t=30,height:n=30,className:o,...c}=e;return a.createElement("svg",(0,s.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},c),a.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function $e(){const{toggle:e,shown:t}=(0,D.e)();return a.createElement("button",{onClick:e,"aria-label":(0,d.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},a.createElement(Ue,null))}const qe={colorModeToggle:"colorModeToggle_DEke"};function He(e){let{items:t}=e;return a.createElement(a.Fragment,null,t.map(((e,t)=>a.createElement(Fe,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},a.createElement(Se,e)))))}function Ge(e){let{left:t,right:n}=e;return a.createElement("div",{className:"navbar__inner"},a.createElement("div",{className:"navbar__items"},t),a.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Ze(){const e=(0,D.e)(),t=(0,j.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Be)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),c=t.find((e=>"search"===e.type));return a.createElement(Ge,{left:a.createElement(a.Fragment,null,!e.disabled&&a.createElement($e,null),a.createElement(W,null),a.createElement(He,{items:n})),right:a.createElement(a.Fragment,null,a.createElement(He,{items:o}),a.createElement(Z,{className:qe.colorModeToggle}),!c&&a.createElement(ye,null,a.createElement(_e,null)))})}function Ve(){return a.createElement(Ne,null,a.createElement(Ze,null))}function We(e){let{item:t}=e;const{to:n,href:o,label:c,prependBaseUrlToHref:i,...r}=t,d=(0,Q.Z)(n),u=(0,Q.Z)(o,{forcePrependBaseUrl:!0});return a.createElement(X.Z,(0,s.Z)({className:"footer__link-item"},o?{href:i?u:o}:{to:d},r),c,o&&!(0,J.Z)(o)&&a.createElement(te.Z,null))}function Ye(e){let{item:t}=e;return t.html?a.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):a.createElement("li",{key:t.href??t.to,className:"footer__item"},a.createElement(We,{item:t}))}function Ke(e){let{column:t}=e;return a.createElement("div",{className:"col footer__col"},a.createElement("div",{className:"footer__title"},t.title),a.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>a.createElement(Ye,{key:t,item:e})))))}function Xe(e){let{columns:t}=e;return a.createElement("div",{className:"row footer__links"},t.map(((e,t)=>a.createElement(Ke,{key:t,column:e}))))}function Qe(){return a.createElement("span",{className:"footer__link-separator"},"\xb7")}function Je(e){let{item:t}=e;return t.html?a.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):a.createElement(We,{item:t})}function et(e){let{links:t}=e;return a.createElement("div",{className:"footer__links text--center"},a.createElement("div",{className:"footer__links"},t.map(((e,n)=>a.createElement(a.Fragment,{key:n},a.createElement(Je,{item:e}),t.length!==n+1&&a.createElement(Qe,null))))))}function tt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?a.createElement(Xe,{columns:t}):a.createElement(et,{links:t})}var nt=n(50941);const at={footerLogoLink:"footerLogoLink_BH7S"};function ot(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Q.C)(),c={light:n(t.src),dark:n(t.srcDark??t.src)};return a.createElement(nt.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:c,width:t.width,height:t.height,style:t.style})}function ct(e){let{logo:t}=e;return t.href?a.createElement(X.Z,{href:t.href,className:at.footerLogoLink,target:t.target},a.createElement(ot,{logo:t})):a.createElement(ot,{logo:t})}function it(e){let{copyright:t}=e;return a.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function st(e){let{style:t,links:n,logo:c,copyright:i}=e;return a.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},a.createElement("div",{className:"container container-fluid"},n,(c||i)&&a.createElement("div",{className:"footer__bottom text--center"},c&&a.createElement("div",{className:"margin-bottom--sm"},c),i)))}function rt(){const{footer:e}=(0,j.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:c}=e;return a.createElement(st,{style:c,links:n&&n.length>0&&a.createElement(tt,{links:n}),logo:o&&a.createElement(ct,{logo:o}),copyright:t&&a.createElement(it,{copyright:t})})}const dt=a.memo(rt),ut=(0,P.Qc)([M.S,y.pl,T.OC,ve.L5,i.VC,function(e){let{children:t}=e;return a.createElement(L.n2,null,a.createElement(D.M,null,a.createElement(N,null,t)))}]);function bt(e){let{children:t}=e;return a.createElement(ut,null,t)}function lt(e){let{error:t,tryAgain:n}=e;return a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(d.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),a.createElement("div",{className:"margin-vert--lg"},a.createElement(Ie,{onClick:n,className:"button button--primary shadow--lw"})),a.createElement("hr",null),a.createElement("div",{className:"margin-vert--md"},a.createElement(Me,{error:t})))))}const ft={mainWrapper:"mainWrapper_z2l0"};function pt(e){const{children:t,noFooter:n,wrapperClassName:s,title:r,description:d}=e;return(0,w.t)(),a.createElement(bt,null,a.createElement(i.d,{title:r,description:d}),a.createElement(_,null),a.createElement(E,null),a.createElement(Ve,null),a.createElement("div",{id:b,className:(0,o.Z)(m.k.wrapper.main,ft.mainWrapper,s)},a.createElement(c.Z,{fallback:e=>a.createElement(lt,e)},t)),!n&&a.createElement(dt,null))}},21327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>b});var a=n(87462),o=n(67294),c=n(39960),i=n(44996),s=n(52263),r=n(86668),d=n(50941);function u(e){let{logo:t,alt:n,imageClassName:a}=e;const c={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},s=o.createElement(d.Z,{className:t.className,sources:c,height:t.height,width:t.width,alt:n,style:t.style});return a?o.createElement("div",{className:a},s):s}function b(e){const{siteConfig:{title:t}}=(0,s.Z)(),{navbar:{title:n,logo:d}}=(0,r.L)(),{imageClassName:b,titleClassName:l,...f}=e,p=(0,i.Z)(d?.href||"/"),g=n?"":t,m=d?.alt??g;return o.createElement(c.Z,(0,a.Z)({to:p},f,d?.target&&{target:d.target}),d&&o.createElement(u,{logo:d,alt:m,imageClassName:b}),null!=n&&o.createElement("b",{className:l},n))}},90197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var a=n(67294),o=n(35742);function c(e){let{locale:t,version:n,tag:c}=e;const i=t;return a.createElement(o.Z,null,t&&a.createElement("meta",{name:"docusaurus_locale",content:t}),n&&a.createElement("meta",{name:"docusaurus_version",content:n}),c&&a.createElement("meta",{name:"docusaurus_tag",content:c}),i&&a.createElement("meta",{name:"docsearch:language",content:i}),n&&a.createElement("meta",{name:"docsearch:version",content:n}),c&&a.createElement("meta",{name:"docsearch:docusaurus_tag",content:c}))}},50941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var a=n(87462),o=n(67294),c=n(86010),i=n(72389),s=n(92949);const r={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function d(e){const t=(0,i.Z)(),{colorMode:n}=(0,s.I)(),{sources:d,className:u,alt:b,...l}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,f.map((e=>o.createElement("img",(0,a.Z)({key:e,src:d[e],alt:b,className:(0,c.Z)(r.themedImage,r[`themedImage--${e}`],u)},l)))))}},86043:(e,t,n)=>{"use strict";n.d(t,{u:()=>r,z:()=>m});var a=n(87462),o=n(67294),c=n(10412),i=n(91442);const s="ease-in-out";function r(e){let{initialState:t}=e;const[n,a]=(0,o.useState)(t??!1),c=(0,o.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:c}}const d={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function b(e,t){const n=t?d:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function l(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const c=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??s}`,height:`${t}px`}}function r(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!c.current)return b(e,n),void(c.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(r(),requestAnimationFrame((()=>{e.style.height=d.height,e.style.overflow=d.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{r()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function f(e){if(!c.Z.canUseDOM)return e?d:u}function p(e){let{as:t="div",collapsed:n,children:a,animation:c,onCollapseTransitionEnd:i,className:s,disableSSRStyle:r}=e;const d=(0,o.useRef)(null);return l({collapsibleRef:d,collapsed:n,animation:c}),o.createElement(t,{ref:d,style:r?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(b(d.current,n),i?.(n))},className:s},a)}function g(e){let{collapsed:t,...n}=e;const[c,i]=(0,o.useState)(!t),[s,r]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{c&&r(t)}),[c,t]),c?o.createElement(p,(0,a.Z)({},n,{collapsed:s})):null}function m(e){let{lazy:t,...n}=e;const a=t?g:p;return o.createElement(a,n)}},59689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>p,pl:()=>f});var a=n(67294),o=n(72389),c=n(50012),i=n(902),s=n(86668);const r=(0,c.WA)("docusaurus.announcement.dismiss"),d=(0,c.WA)("docusaurus.announcement.id"),u=()=>"true"===r.get(),b=e=>r.set(String(e)),l=a.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,o.Z)(),[n,c]=(0,a.useState)((()=>!!t&&u()));(0,a.useEffect)((()=>{c(u())}),[]);const i=(0,a.useCallback)((()=>{b(!0),c(!0)}),[]);return(0,a.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=d.get();"annoucement-bar"===n&&(n="announcement-bar");const a=t!==n;d.set(t),a&&b(!1),!a&&u()||c(!1)}),[e]),(0,a.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return a.createElement(l.Provider,{value:n},t)}function p(){const e=(0,a.useContext)(l);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},92949:(e,t,n)=>{"use strict";n.d(t,{I:()=>m,S:()=>g});var a=n(67294),o=n(10412),c=n(902),i=n(50012),s=n(86668);const r=a.createContext(void 0),d="theme",u=(0,i.WA)(d),b={light:"light",dark:"dark"},l=e=>e===b.dark?b.dark:b.light,f=e=>o.Z.canUseDOM?l(document.documentElement.getAttribute("data-theme")):l(e),p=e=>{u.set(l(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[o,c]=(0,a.useState)(f(e));(0,a.useEffect)((()=>{t&&u.del()}),[t]);const i=(0,a.useCallback)((function(t,a){void 0===a&&(a={});const{persist:o=!0}=a;t?(c(t),o&&p(t)):(c(n?window.matchMedia("(prefers-color-scheme: dark)").matches?b.dark:b.light:e),u.del())}),[n,e]);(0,a.useEffect)((()=>{document.documentElement.setAttribute("data-theme",l(o))}),[o]),(0,a.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==d)return;const t=u.get();null!==t&&i(l(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const r=(0,a.useRef)(!1);return(0,a.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),a=()=>{window.matchMedia("print").matches||r.current?r.current=window.matchMedia("print").matches:i(null)};return e.addListener(a),()=>e.removeListener(a)}),[i,t,n]),(0,a.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===b.dark},setLightTheme(){i(b.light)},setDarkTheme(){i(b.dark)}})),[o,i])}();return a.createElement(r.Provider,{value:n},t)}function m(){const e=(0,a.useContext)(r);if(null==e)throw new c.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,t,n)=>{"use strict";n.d(t,{J:()=>h,L5:()=>m});var a=n(67294),o=n(94104),c=n(29935),i=n(86668),s=n(52802),r=n(902),d=n(50012);const u=e=>`docs-preferred-version-${e}`,b={save:(e,t,n)=>{(0,d.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,d.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,d.WA)(u(e),{persistence:t}).del()}},l=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=a.createContext(null);function p(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,a.useMemo)((()=>Object.keys(e)),[e]),[c,s]=(0,a.useState)((()=>l(n)));(0,a.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:a}=e;function o(e){const t=b.read(e,n);return a[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(b.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[c,(0,a.useMemo)((()=>({savePreferredVersion:function(e,n){b.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=p();return a.createElement(f.Provider,{value:n},t)}function m(e){let{children:t}=e;return s.cE?a.createElement(g,null,t):a.createElement(a.Fragment,null,t)}function w(){const e=(0,a.useContext)(f);if(!e)throw new r.i6("DocsPreferredVersionContextProvider");return e}function h(e){void 0===e&&(e=c.m);const t=(0,o.zh)(e),[n,i]=w(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,a.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>r,b:()=>s});var a=n(67294),o=n(902);const c=Symbol("EmptyContext"),i=a.createContext(c);function s(e){let{children:t,name:n,items:o}=e;const c=(0,a.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return a.createElement(i.Provider,{value:c},t)}function r(){const e=(0,a.useContext)(i);if(e===c)throw new o.i6("DocsSidebarProvider");return e}},72961:(e,t,n)=>{"use strict";n.d(t,{M:()=>l,e:()=>f});var a=n(67294),o=n(13102),c=n(87524),i=n(16550),s=(n(61688),n(902));function r(e){!function(e){const t=(0,i.k6)(),n=(0,s.zX)(e);(0,a.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var d=n(86668);const u=a.createContext(void 0);function b(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,d.L)().navbar;return 0===t.length&&!e.component}(),t=(0,c.i)(),n=!e&&"mobile"===t,[i,s]=(0,a.useState)(!1);r((()=>{if(i)return s(!1),!1}));const u=(0,a.useCallback)((()=>{s((e=>!e))}),[]);return(0,a.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,a.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function l(e){let{children:t}=e;const n=b();return a.createElement(u.Provider,{value:n},t)}function f(){const e=a.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},13102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>r,n2:()=>i});var a=n(67294),o=n(902);const c=a.createContext(null);function i(e){let{children:t}=e;const n=(0,a.useState)({component:null,props:null});return a.createElement(c.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(c);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function r(e){let{component:t,props:n}=e;const i=(0,a.useContext)(c);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,s]=i,r=(0,o.Ql)(n);return(0,a.useEffect)((()=>{s({component:t,props:r})}),[s,t,r]),(0,a.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},19727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>c});var a=n(67294);const o="navigation-with-keyboard";function c(){(0,a.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},87524:(e,t,n)=>{"use strict";n.d(t,{i:()=>d});var a=n(67294),o=n(10412);const c={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){return o.Z.canUseDOM?window.innerWidth>i?c.desktop:c.mobile:c.ssr}const r=!1;function d(){const[e,t]=(0,a.useState)((()=>r?"ssr":s()));return(0,a.useEffect)((()=>{function e(){t(s())}const n=r?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},35281:(e,t,n)=>{"use strict";n.d(t,{k:()=>a});const a={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},91442:(e,t,n)=>{"use strict";function a(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>a})},52802:(e,t,n)=>{"use strict";n.d(t,{MN:()=>x,Wl:()=>l,_F:()=>m,cE:()=>b,jA:()=>f,hI:()=>k,lO:()=>_,vY:()=>y,oz:()=>j,s1:()=>h});var a=n(67294),o=n(16550),c=n(18790),i=n(94104),s=n(60373),r=n(1116);function d(e){return Array.from(new Set(e))}var u=n(48596);const b=!!i._r;function l(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=l(t);if(e)return e}}}function f(){const{pathname:e}=(0,o.TH)(),t=(0,r.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=w({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const p=(e,t)=>void 0!==e&&(0,u.Mg)(e,t),g=(e,t)=>e.some((e=>m(e,t)));function m(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||g(e.items,t))}function w(e){let{sidebarItems:t,pathname:n,onlyCategories:a=!1}=e;const o=[];return function e(t){for(const c of t)if("category"===c.type&&((0,u.Mg)(c.href,n)||e(c.items))||"link"===c.type&&(0,u.Mg)(c.href,n)){return a&&"category"!==c.type||o.unshift(c),!0}return!1}(t),o}function h(){const e=(0,r.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?w({sidebarItems:e.items,pathname:t}):null}function _(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),o=(0,i.yW)(e);return(0,a.useMemo)((()=>d([t,n,o].filter(Boolean))),[t,n,o])}function j(e,t){const n=_(t);return(0,a.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),a=t.find((t=>t[0]===e));if(!a)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return a[1]}),[e,n])}function y(e,t){const n=_(t);return(0,a.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),a=t.find((t=>t.id===e));if(!a){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${d(t.map((e=>e.id))).join("\n- ")}`)}return a}),[e,n])}function k(e){let{route:t,versionMetadata:n}=e;const a=(0,o.TH)(),i=t.routes,s=i.find((e=>(0,o.LX)(a.pathname,e)));if(!s)return null;const r=s.sidebar,d=r?n.docsSidebars[r]:void 0;return{docElement:(0,c.H)(i),sidebarName:r,sidebarItems:d}}function x(e){return e.filter((e=>"category"!==e.type||!!l(e)))}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>l,d:()=>u,VC:()=>f});var a=n(67294),o=n(86010),c=n(35742),i=n(30226);function s(){const e=a.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var r=n(44996),d=n(52263);function u(e){let{title:t,description:n,keywords:o,image:i,children:s}=e;const u=function(e){const{siteConfig:t}=(0,d.Z)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}(t),{withBaseUrl:b}=(0,r.C)(),l=i?b(i,{absolute:!0}):void 0;return a.createElement(c.Z,null,t&&a.createElement("title",null,u),t&&a.createElement("meta",{property:"og:title",content:u}),n&&a.createElement("meta",{name:"description",content:n}),n&&a.createElement("meta",{property:"og:description",content:n}),o&&a.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),l&&a.createElement("meta",{property:"og:image",content:l}),l&&a.createElement("meta",{name:"twitter:image",content:l}),s)}const b=a.createContext(void 0);function l(e){let{className:t,children:n}=e;const i=a.useContext(b),s=(0,o.Z)(i,t);return a.createElement(b.Provider,{value:s},a.createElement(c.Z,null,a.createElement("html",{className:s})),n)}function f(e){let{children:t}=e;const n=s(),c=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return a.createElement(l,{className:(0,o.Z)(c,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>d,Ql:()=>r,i6:()=>s,zX:()=>c});var a=n(67294);const o=n(10412).Z.canUseDOM?a.useLayoutEffect:a.useEffect;function c(e){const t=(0,a.useRef)(e);return o((()=>{t.current=e}),[e]),(0,a.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,a.useRef)();return o((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function r(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,a.useMemo)((()=>e),t.flat())}function d(e){return t=>{let{children:n}=t;return a.createElement(a.Fragment,null,e.reduceRight(((e,t)=>a.createElement(t,null,e)),n))}}},48596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var a=n(67294),o=n(723),c=n(52263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,c.Z)().siteConfig;return(0,a.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function a(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(a)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},12466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>l,OC:()=>r,RF:()=>b});var a=n(67294),o=n(10412),c=n(72389),i=n(902);const s=a.createContext(void 0);function r(e){let{children:t}=e;const n=function(){const e=(0,a.useRef)(!0);return(0,a.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return a.createElement(s.Provider,{value:n},t)}function d(){const e=(0,a.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function b(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),o=(0,a.useRef)(u()),c=(0,i.zX)(e);(0,a.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();c(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[c,n,...t])}function l(){const e=(0,a.useRef)(null),t=(0,c.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function a(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},43320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>a,os:()=>o});n(52263);const a="default";function o(e,t){return`docs-${e}-${t}`}},50012:(e,t,n)=>{"use strict";n.d(t,{WA:()=>r});n(67294),n(61688);const a="localStorage";function o(e){let{key:t,oldValue:n,newValue:a,storage:o}=e;if(n===a)return;const c=document.createEvent("StorageEvent");c.initStorageEvent("storage",!1,!1,t,n,a,window.location.href,o),window.dispatchEvent(c)}function c(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function r(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=c(t?.persistence);return null===n?s:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const a=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:a,newValue:t,storage:n})}catch(a){console.error(`Docusaurus storage error, can't set ${e}=${t}`,a)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const a=a=>{a.storageArea===n&&a.key===e&&t(a)};return window.addEventListener("storage",a),()=>window.removeEventListener("storage",a)}catch(a){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,a),()=>{}}}}}},94711:(e,t,n)=>{"use strict";n.d(t,{l:()=>c});var a=n(52263),o=n(16550);function c(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:c}}=(0,a.Z)(),{pathname:i}=(0,o.TH)(),s=c===n?e:e.replace(`/${c}/`,"/"),r=i.replace(e,"");return{createUrl:function(e){let{locale:a,fullyQualified:o}=e;return`${o?t:""}${function(e){return e===n?`${s}`:`${s}${e}/`}(a)}${r}`}}}},85936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var a=n(67294),o=n(16550),c=n(902);function i(e){const t=(0,o.TH)(),n=(0,c.D9)(t),i=(0,c.zX)(e);(0,a.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},86668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var a=n(52263);function o(){return(0,a.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:a}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),c="/"===o||o===a?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,c)}},54143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},18780:function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return a(o).default}});var c=n(54143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return c.getErrorCausalChain}})},94184:(e,t)=>{var n;!function(){"use strict";var a={}.hasOwnProperty;function o(){for(var e=[],t=0;t{"use strict";function a(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;to});const o=function(){for(var e,t,n=0,o="";n{"use strict";n.d(t,{lX:()=>j,q_:()=>C,ob:()=>f,PP:()=>E,Ep:()=>l});var a=n(87462);function o(e){return"/"===e.charAt(0)}function c(e,t){for(var n=t,a=n+1,o=e.length;a=0;l--){var f=i[l];"."===f?c(i,l):".."===f?(c(i,l),b++):b&&(c(i,l),b--)}if(!d)for(;b--;b)i.unshift("..");!d||""===i[0]||i[0]&&o(i[0])||i.unshift("");var p=i.join("/");return n&&"/"!==p.substr(-1)&&(p+="/"),p};var s=n(38776);function r(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function b(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function l(e){var t=e.pathname,n=e.search,a=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),a&&"#"!==a&&(o+="#"===a.charAt(0)?a:"#"+a),o}function f(e,t,n,o){var c;"string"==typeof e?(c=function(e){var t=e||"/",n="",a="",o=t.indexOf("#");-1!==o&&(a=t.substr(o),t=t.substr(0,o));var c=t.indexOf("?");return-1!==c&&(n=t.substr(c),t=t.substr(0,c)),{pathname:t,search:"?"===n?"":n,hash:"#"===a?"":a}}(e),c.state=t):(void 0===(c=(0,a.Z)({},e)).pathname&&(c.pathname=""),c.search?"?"!==c.search.charAt(0)&&(c.search="?"+c.search):c.search="",c.hash?"#"!==c.hash.charAt(0)&&(c.hash="#"+c.hash):c.hash="",void 0!==t&&void 0===c.state&&(c.state=t));try{c.pathname=decodeURI(c.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+c.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(c.key=n),o?c.pathname?"/"!==c.pathname.charAt(0)&&(c.pathname=i(c.pathname,o.pathname)):c.pathname=o.pathname:c.pathname||(c.pathname="/"),c}function p(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,a,o){if(null!=e){var c="function"==typeof e?e(t,n):e;"string"==typeof c?"function"==typeof a?a(c,o):o(!0):o(!1!==c)}else o(!0)},appendListener:function(e){var n=!0;function a(){n&&e.apply(void 0,arguments)}return t.push(a),function(){n=!1,t=t.filter((function(e){return e!==a}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),a=0;at?n.splice(t,n.length-t,o):n.push(o),b({action:a,location:o,index:t,entries:n})}}))},replace:function(e,t){var a="REPLACE",o=f(e,t,g(),j.location);u.confirmTransitionTo(o,a,n,(function(e){e&&(j.entries[j.index]=o,b({action:a,location:o}))}))},go:_,goBack:function(){_(-1)},goForward:function(){_(1)},canGo:function(e){var t=j.index+e;return t>=0&&t{"use strict";var a=n(59864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},c={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function r(e){return a.isMemo(e)?i:s[e.$$typeof]||o}s[a.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[a.Memo]=i;var d=Object.defineProperty,u=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols,l=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,p=Object.prototype;e.exports=function e(t,n,a){if("string"!=typeof n){if(p){var o=f(n);o&&o!==p&&e(t,o,a)}var i=u(n);b&&(i=i.concat(b(n)));for(var s=r(t),g=r(n),m=0;m{"use strict";e.exports=function(e,t,n,a,o,c,i,s){if(!e){var r;if(void 0===t)r=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var d=[n,a,o,c,i,s],u=0;(r=new Error(t.replace(/%s/g,(function(){return d[u++]})))).name="Invariant Violation"}throw r.framesToPop=1,r}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},32497:(e,t,n)=>{"use strict";n.r(t)},52295:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var a,o;a=function(){var e,t,n={version:"0.2.0"},a=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(e,t,n){return en?n:e}function c(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===a.positionUsing?{transform:"translate3d("+c(e)+"%,0,0)"}:"translate"===a.positionUsing?{transform:"translate("+c(e)+"%,0)"}:{"margin-left":c(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(a[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,a.minimum,1),n.status=1===e?null:e;var c=n.render(!t),d=c.querySelector(a.barSelector),u=a.speed,b=a.easing;return c.offsetWidth,s((function(t){""===a.positionUsing&&(a.positionUsing=n.getPositioningCSS()),r(d,i(e,u,b)),1===e?(r(c,{transition:"none",opacity:1}),c.offsetWidth,setTimeout((function(){r(c,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),a.trickleSpeed)};return a.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*a.trickleRate)},e=0,t=0,n.promise=function(a){return a&&"resolved"!==a.state()?(0===t&&n.start(),e++,t++,a.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=a.template;var o,i=t.querySelector(a.barSelector),s=e?"-100":c(n.status||0),d=document.querySelector(a.parent);return r(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),a.showSpinner||(o=t.querySelector(a.spinnerSelector))&&f(o),d!=document.body&&u(d,"nprogress-custom-parent"),d.appendChild(t),t},n.remove=function(){b(document.documentElement,"nprogress-busy"),b(document.querySelector(a.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),r=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function a(t){var n=document.body.style;if(t in n)return t;for(var a,o=e.length,c=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((a=e[o]+c)in n)return a;return t}function o(e){return e=n(e),t[e]||(t[e]=a(e))}function c(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,a,o=arguments;if(2==o.length)for(n in t)void 0!==(a=t[n])&&t.hasOwnProperty(n)&&c(e,n,a);else c(e,o[1],o[2])}}();function d(e,t){return("string"==typeof e?e:l(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=l(e),a=n+t;d(n,t)||(e.className=a.substring(1))}function b(e,t){var n,a=l(e);d(e,t)&&(n=a.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function l(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof a?a.call(t,n,t,e):a)||(e.exports=o)},27418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach((function(e){a[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},a)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var c,i,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),r=1;r{var a=n(5826);e.exports=f,e.exports.parse=c,e.exports.compile=function(e,t){return s(c(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=l;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function c(e,t){for(var n,a=[],c=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var b=n[0],l=n[1],f=n.index;if(s+=e.slice(i,f),i=f+b.length,l)s+=l[1];else{var p=e[i],g=n[2],m=n[3],w=n[4],h=n[5],_=n[6],j=n[7];s&&(a.push(s),s="");var y=null!=g&&null!=p&&p!==g,k="+"===_||"*"===_,x="?"===_||"*"===_,v=n[2]||u,z=w||h;a.push({name:m||c++,prefix:g||"",delimiter:v,optional:x,repeat:k,partial:y,asterisk:!!j,pattern:z?d(z):j?".*":"[^"+r(v)+"]+?"})}}return i{"use strict";n.d(t,{Z:()=>c});var a=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},a={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=b.reach);x+=k.value.length,k=k.next){var v=k.value;if(t.length>e.length)return;if(!(v instanceof o)){var z,C=1;if(h){if(!(z=c(y,x,e,w))||z.index>=e.length)break;var S=z.index,E=z.index+z[0].length,D=x;for(D+=k.value.length;S>=D;)D+=(k=k.next).value.length;if(x=D-=k.value.length,k.value instanceof o)continue;for(var T=k;T!==t.tail&&(Db.reach&&(b.reach=N);var R=k.prev;if(L&&(R=r(t,R,L),x+=L.length),d(t,R,C),k=r(t,R,new o(l,m?a.tokenize(P,m):P,_,P)),A&&r(t,k,A),C>1){var O={cause:l+","+p,reach:N};i(e,t,n,k.prev,x,O),b&&O.reach>b.reach&&(b.reach=O.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function r(e,t,n){var a=t.next,o={value:n,prev:t,next:a};return t.next=o,a.prev=o,e.length++,o}function d(e,t,n){for(var a=t.next,o=0;o"+c.content+""},a}(),o=a;a.default=a,o.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^$/i;var a={"included-cdata":{pattern://i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var c={};c[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:a},o.languages.insertBefore("markup","cdata",c)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],c=a.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var a={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:a,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:a,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,a="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),c=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return a})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return a}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return a})).replace(/<>/g,(function(){return"(?:"+o+"|"+c+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(c),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var a=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return a})),c=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+c+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+c+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(a),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+c+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(a),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,a=t.length;n",quot:'"'},r=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var s=l(/^\{$/,/^\}$/);if(-1===s)continue;for(var r=n;r=0&&f(d,"variable-input")}}}}function u(e){return t[n+e]}function b(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,a=t.inside.interpolation,o=a.inside["interpolation-punctuation"],c=a.pattern.source;function i(t,a){if(e.languages[t])return{pattern:RegExp("((?:"+a+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function r(t,n,a){var o={code:t,grammar:n,language:a};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function d(t){var n={};n["interpolation-punctuation"]=o;var c=e.tokenize(t,n);if(3===c.length){var i=[1,1];i.push.apply(i,r(c[1],e.languages.javascript,"javascript")),c.splice.apply(c,i)}return new e.Token("interpolation",c,a.alias,t)}function u(t,n,a){var o=e.tokenize(t,{interpolation:{pattern:RegExp(c),lookbehind:!0}}),i=0,u={},b=r(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=s(i++,a)););return u[n]=o,n})).join(""),n,a),l=Object.keys(u);return i=0,function e(t){for(var n=0;n=l.length)return;var a=t[n];if("string"==typeof a||"string"==typeof a.content){var o=l[i],c="string"==typeof a?a:a.content,s=c.indexOf(o);if(-1!==s){++i;var r=c.substring(0,s),b=d(u[o]),f=c.substring(s+o.length),p=[];if(r&&p.push(r),p.push(b),f){var g=[f];e(g),p.push.apply(p,g)}"string"==typeof a?(t.splice.apply(t,[n,1].concat(p)),n+=p.length-1):a.content=p}}else{var m=a.content;Array.isArray(m)?e(m):e([m])}}}(b),new e.Token(a,b,"language-"+a,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var b={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function l(e){return"string"==typeof e?e:Array.isArray(e)?e.map(l).join(""):l(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in b&&function t(n){for(var a=0,o=n.length;a]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],a=0;a*\.{3}(?:[^{}]|)*\})/.source;function c(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return a})).replace(//g,(function(){return o})),RegExp(e,t)}o=c(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=c(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:c(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:c(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(t){for(var n=[],a=0;a0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:c=!0),(c||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var r=i(o);a0&&("string"==typeof t[a-1]||"plain-text"===t[a-1].type)&&(r=i(t[a-1])+r,t.splice(a-1,1),a--),t[a]=new e.Token("plain-text",r,null,r)}o.content&&"string"!=typeof o.content&&s(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var a=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+a+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,o,c){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof c&&!c(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(a,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language===a&&n.tokenStack){n.grammar=e.languages[a];var o=0,c=Object.keys(n.tokenStack);!function i(s){for(var r=0;r=c.length);r++){var d=s[r];if("string"==typeof d||d.content&&"string"==typeof d.content){var u=c[o],b=n.tokenStack[u],l="string"==typeof d?d:d.content,f=t(a,u),p=l.indexOf(f);if(p>-1){++o;var g=l.substring(0,p),m=new e.Token(a,e.tokenize(b,n.grammar),"language-"+a,b),w=l.substring(p+f.length),h=[];g&&h.push.apply(h,i([g])),h.push(m),w&&h.push.apply(h,i([w])),"string"==typeof d?s.splice.apply(s,[r,1].concat(h)):d.content=h}}else d.content&&i(d.content)}return s}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},a={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};a.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:a}},a.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:a}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:a}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:a}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:a}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:a.interpolation}},rest:a}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:a.interpolation,comment:a.comment,punctuation:/[{},]/}},func:a.func,string:a.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:a.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const c=o},29901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const a=n(29901),o=n(39642),c=new Set;function i(e){void 0===e?e=Object.keys(a.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...c,...Object.keys(Prism.languages)];o(a,e,t).load((e=>{if(!(e in a.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(16500).resolve(t)],delete Prism.languages[e],n(16500)(t),c.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var a={"./":2885};function o(e){var t=c(e);return n(t)}function c(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}o.keys=function(){return Object.keys(a)},o.resolve=c,e.exports=o,o.id=6726},16500:(e,t,n)=>{var a={"./":2885};function o(e){var t=c(e);return n(t)}function c(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}o.keys=function(){return Object.keys(a)},o.resolve=c,e.exports=o,o.id=16500},39642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,a=e.length;n "));var s={},r=e[a];if(r){function d(t){if(!(t in e))throw new Error(a+" depends on an unknown component "+t);if(!(t in s))for(var i in o(t,c),s[t]=!0,n[t])s[i]=!0}t(r.require,d),t(r.optional,d),t(r.modify,d)}n[a]=s,c.pop()}}return function(e){var t=n[e];return t||(o(e,a),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(c,i,s){var r=function(e){var t={};for(var n in e){var a=e[n];for(var o in a)if("meta"!=o){var c=a[o];t[o]="string"==typeof c?{title:c}:c}}return t}(c),d=function(e){var n;return function(a){if(a in e)return a;if(!n)for(var o in n={},e){var c=e[o];t(c&&c.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[a]||a}}(r);i=i.map(d),s=(s||[]).map(d);var u=n(i),b=n(s);i.forEach((function e(n){var a=r[n];t(a&&a.require,(function(t){t in b||(u[t]=!0,e(t))}))}));for(var l,f=a(r),p=u;o(p);){for(var g in l={},p){var m=r[g];t(m&&m.modify,(function(e){e in b&&(l[e]=!0)}))}for(var w in b)if(!(w in u))for(var h in f(w))if(h in u){l[w]=!0;break}for(var _ in p=l)u[_]=!0}var j={getIds:function(){var e=[];return j.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,a,o){var c=o?o.series:void 0,i=o?o.parallel:e,s={},r={};function d(e){if(e in s)return s[e];r[e]=!0;var o,u=[];for(var b in t(e))b in n&&u.push(b);if(0===u.length)o=a(e);else{var l=i(u.map((function(e){var t=d(e);return delete r[e],t})));c?o=c(l,(function(){return a(e)})):a(e)}return s[e]=o}for(var u in n)d(u);var b=[];for(var l in r)b.push(s[l]);return i(b)}(f,u,t,n)}};return j}}();e.exports=t},92703:(e,t,n)=>{"use strict";var a=n(50414);function o(){}function c(){}c.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,c,i){if(i!==a){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:c,resetWarningCache:o};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var a=n(67294),o=n(27418),c=n(63840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n