Page Not Found
We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
From 1ee9474647df7377d5d03180d9de89a8b8de7d53 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 18 May 2024 20:09:35 +0000 Subject: [PATCH] deploy: 5322f272734d9d4dbf26e972c7cee2c5bb928b07 --- 404.html | 8 +- assets/css/styles.106b6d16.css | 1 + assets/css/styles.6559cc61.css | 1 - ...33570.a27ccb3d.js => 08133570.bedbb75d.js} | 2 +- ...406e9.ea213bb9.js => 0b6406e9.da42f77f.js} | 2 +- assets/js/1169.b37bfd01.js | 1 + assets/js/1176.3fa1f1a0.js | 1 + .../js/{2244.581b5672.js => 1245.0093dbf5.js} | 2 +- assets/js/130.d40b9a2f.js | 18473 ++++++ assets/js/1303.ece083bc.js | 2 + ...CENSE.txt => 1303.ece083bc.js.LICENSE.txt} | 8 +- assets/js/1331.b04ae620.js | 1 + assets/js/1398.b34f2eb3.js | 1 + assets/js/162.a6a66926.js | 20438 ++++++ assets/js/1644.0dcfb256.js | 1 - assets/js/1688.9b5abf8f.js | 1 - assets/js/1772.072dd336.js | 1 - assets/js/17896441.20e27d3c.js | 1 - assets/js/17896441.8080a7a9.js | 1 + assets/js/1946.c1f898cd.js | 1 + ...e5704.4503ab9a.js => 1bfe5704.5807a985.js} | 2 +- ...4e3ed.b885b82f.js => 1cb4e3ed.eef470f2.js} | 2 +- assets/js/1df93b7f.50f773da.js | 1 + assets/js/1df93b7f.a3f54be7.js | 1 - assets/js/1f33cfc6.16c8544e.js | 1 - assets/js/1f391b9e.890bdb41.js | 1 - assets/js/1f391b9e.f47ed7ff.js | 1 + assets/js/2127.edae4370.js | 1 - assets/js/2130.59c93ed1.js | 1 + assets/js/21dc2778.4fa88f77.js | 1 - assets/js/21dc2778.937de606.js | 1 + assets/js/2237.e35c7faa.js | 1 + assets/js/230.f24d31b3.js | 1 - assets/js/2362.92df48f8.js | 1 + .../js/{9469.73800656.js => 2376.89729940.js} | 2 +- assets/js/2453.4efe8b38.js | 1 + assets/js/2548.b0f7735f.js | 1 + ...f7947.e2795dcf.js => 25ef7947.591dd342.js} | 2 +- ...55d6c.e57178ed.js => 26455d6c.9e6fb798.js} | 2 +- .../js/{2027.58a68e7f.js => 2843.88f75fed.js} | 2 +- ...593c7.a6331d38.js => 28a593c7.c5440720.js} | 2 +- assets/js/2924.f6df9113.js | 2 - .../js/{8687.a3f8295e.js => 2925.9d15cf56.js} | 2 +- assets/js/2983.44d58df4.js | 1 + assets/js/2ab4562b.d7ae5e3b.js | 1 + assets/js/2ab4562b.fc83a82a.js | 1 - assets/js/303.a360443a.js | 51571 ++++++++++++++++ assets/js/3068.a770ed84.js | 1 + ...27832.8e174e4b.js => 30d27832.7f729ce5.js} | 2 +- ...58b07.3fa75a06.js => 31058b07.6114e2f5.js} | 2 +- .../js/{816.dcd00e38.js => 331.fec0101f.js} | 1622 +- assets/js/360.090aa725.js | 1 - assets/js/3601.97f94c19.js | 1 - assets/js/3626.5a9700a2.js | 1 + assets/js/3706.59d3c775.js | 1 + .../js/{469.66086d5a.js => 376.396be82d.js} | 74 +- assets/js/391d9c20.53d14b68.js | 1 - assets/js/391d9c20.d39fb521.js | 1 + ...fb2a9.4801e826.js => 3aefb2a9.32eb9ab2.js} | 2 +- assets/js/3ebc3d67.458ba45d.js | 1 - assets/js/3ebc3d67.5b085205.js | 1 + assets/js/3f163355.1f047cbf.js | 1 - assets/js/3f163355.86d39dc3.js | 1 + ...3fb7f.3eaa8c87.js => 3fb3fb7f.943668d2.js} | 2 +- assets/js/4132.472205b2.js | 1 + assets/js/4148.43bdaf12.js | 1 - assets/js/4162.d00bd1cc.js | 1 + .../js/{506.17e673b8.js => 420.d1a95da0.js} | 81 +- assets/js/{46.53124cb6.js => 426.b7e95b87.js} | 1881 +- assets/js/4334.66dbfd08.js | 1 + .../js/{371.b9948998.js => 453.113746e1.js} | 2780 +- assets/js/4741.8e6c530a.js | 1 + .../js/{254.da0a5da3.js => 478.14f1af40.js} | 96 +- assets/js/4943.60400b58.js | 1 + ...25bb5.93ace705.js => 4ca25bb5.f4be1dd5.js} | 2 +- ...fad63.aead9967.js => 50bfad63.f4f63f2a.js} | 2 +- assets/js/5131.5e46ae6f.js | 1 - assets/js/5254.3eb9ebd8.js | 1 - assets/js/5283.99849d12.js | 1 - assets/js/5373.d484caaa.js | 1 - assets/js/59190afd.9475ede9.js | 1 + assets/js/59190afd.bc0b8c99.js | 1 - assets/js/5e95c892.506f1936.js | 1 + assets/js/5e95c892.98ec5397.js | 1 - ...18129.24976881.js => 60418129.d251e87b.js} | 2 +- assets/js/6046.05219399.js | 1 - assets/js/6284.5a5433cb.js | 1 - ...3c86b.d055b31f.js => 62e3c86b.40eae743.js} | 2 +- .../js/{688.9f1a5208.js => 635.3e80cd93.js} | 2939 +- .../js/{3506.9edd1dee.js => 6420.f2879ce4.js} | 2 +- ...9b84b.e461bf2d.js => 6459b84b.3d49dc6c.js} | 2 +- assets/js/6715.e8cb9fbd.js | 1 - .../js/{6278.afd805f6.js => 6788.80aec321.js} | 2 +- assets/js/{284.8091b9df.js => 68.88df7d9a.js} | 2577 +- .../js/{8365.91257d46.js => 6803.73ef982b.js} | 2 +- .../js/{601.bd9904a4.js => 689.51613cea.js} | 801 +- .../js/{189.5aec15e9.js => 706.047b3a58.js} | 1454 +- assets/js/7111.50abb3d1.js | 1 - assets/js/740.e410e6ba.js | 23570 ------- assets/js/741.a0ad8db0.js | 23923 +++++++ assets/js/7426.280729df.js | 1 + assets/js/751a75f6.3f07fc73.js | 1 + assets/js/751a75f6.bb0a106f.js | 1 - assets/js/762.4ca7866e.js | 1 - ...e5683.2c91368a.js => 76be5683.09c92fae.js} | 2 +- assets/js/7707.39e71ec4.js | 1 - assets/js/7740.3c8b4943.js | 1 - ...b9a17.8893f074.js => 77db9a17.2b9ea54e.js} | 2 +- assets/js/7807.45746fce.js | 2 - .../js/{278.c18a43f9.js => 788.d55fe659.js} | 58 +- assets/js/7c110bd0.9ef3cb90.js | 1 + assets/js/801e3691.37bd374e.js | 1 - assets/js/801e3691.38ee09d1.js | 1 + .../js/{365.da569cd3.js => 803.3585a98c.js} | 73 +- assets/js/8055.b792f2c6.js | 1 + assets/js/807.e8ea5136.js | 50986 --------------- .../js/{205.f53fd1d6.js => 810.8436feb4.js} | 3030 +- assets/js/8189.052631a2.js | 1 - .../js/{9610.b4783ee8.js => 8337.8759c63e.js} | 2 +- assets/js/8371.753404ac.js | 1 - assets/js/8416df86.3199682b.js | 1 - assets/js/8416df86.74767f91.js | 1 + assets/js/{27.96a4e28f.js => 843.b93daff8.js} | 22 +- .../js/{6254.534a8984.js => 8478.2abe6c83.js} | 2 +- assets/js/84dac133.6eb6f3f1.js | 1 + assets/js/84dac133.b04bb491.js | 1 - assets/js/8635.75cbcfbe.js | 1 + .../js/{762.ba125ab2.js => 869.cbb475b2.js} | 311 +- assets/js/8810.92902e39.js | 1 + assets/js/8869.a2913ed8.js | 1 + assets/js/8f88d278.0cf7c8ce.js | 1 + assets/js/8f88d278.b1b8a32a.js | 1 - .../js/{313.fb64a2c4.js => 902.32d46a57.js} | 1488 +- assets/js/9205.1b6742f5.js | 1 - .../js/{687.51b2a3b6.js => 925.ecb05b21.js} | 99 +- assets/js/935f2afb.81dce83d.js | 1 - .../js/{715.7c02bf77.js => 943.e677d0e4.js} | 520 +- .../js/{111.1a77f36c.js => 946.10626dca.js} | 127 +- assets/js/9475.0f1ef4ee.js | 2 + ...CENSE.txt => 9475.0f1ef4ee.js.LICENSE.txt} | 2 +- assets/js/94cba6ed.3cd26515.js | 1 + assets/js/94cba6ed.af48bdaf.js | 1 - assets/js/9689.74e05a4b.js | 1 + assets/js/9730.4e94f70f.js | 1 + assets/js/9816.a49284d7.js | 1 - ...8cc29.018426d5.js => 98b8cc29.cb3e7d75.js} | 2 +- ...dcd43.aedcb4db.js => a21dcd43.b94f5b9d.js} | 2 +- ...501c8.62e4cbe1.js => a2c501c8.d07b64b5.js} | 2 +- assets/js/a4d3e054.195d0863.js | 1 - assets/js/a4d3e054.9f84f987.js | 1 + assets/js/a7456010.899d59d8.js | 1 + assets/js/a7bd4aaa.21db5993.js | 1 + assets/js/a7bd4aaa.8ed155cd.js | 1 - assets/js/a94703ab.dfe0379b.js | 1 + assets/js/a94703ab.f6df80e0.js | 1 - ...3a07e.4b4c4682.js => aba21aa0.9e876600.js} | 2 +- ...f9ff5.80bf0e10.js => ad6f9ff5.da4481a4.js} | 2 +- assets/js/ba3d4959.17e2ef95.js | 1 + assets/js/ba3d4959.df025922.js | 1 - ...34fa7.cc2205c4.js => bfc34fa7.3bbd87a1.js} | 2 +- ...576a4.a3b25428.js => bfc576a4.2a3d9a85.js} | 2 +- ...fb5a2.48764531.js => c24fb5a2.c61a0be0.js} | 2 +- ...663fe.000adc1b.js => cbe663fe.21efa276.js} | 2 +- assets/js/cc784980.50d26df0.js | 1 - assets/js/cc784980.eabde083.js | 1 + ...5d49b.155d0e62.js => d295d49b.37a6f6fb.js} | 2 +- assets/js/d550161c.53c5d3f1.js | 1 - assets/js/d550161c.df515310.js | 1 + ...eca55.bfe6cbe7.js => e2eeca55.c8c93fc3.js} | 2 +- assets/js/e6388bba.07ead248.js | 1 + assets/js/e6388bba.9c793527.js | 1 - ...332dd.6c157557.js => e71332dd.8c2fc672.js} | 2 +- ...3bc46.ec825d14.js => ead3bc46.f60c2624.js} | 2 +- ...0ba15.c22ae324.js => f210ba15.ad4693e2.js} | 2 +- assets/js/f3e8f525.6e0d876e.js | 1 + assets/js/f3e8f525.a9b8ad68.js | 1 - ...1d430.3a2b5dfe.js => f991d430.0e2e6b34.js} | 2 +- assets/js/main.9b1355e8.js | 2 - assets/js/main.b195fff1.js | 2 + ...CENSE.txt => main.b195fff1.js.LICENSE.txt} | 0 assets/js/reactPlayerDailyMotion.738f2818.js | 1 - ....js => reactPlayerDailyMotion.bbf6379c.js} | 12 +- assets/js/reactPlayerDailyMotion.ea480b77.js | 1 + assets/js/reactPlayerFacebook.1dd4863c.js | 1 + assets/js/reactPlayerFacebook.29d829e4.js | 1 - ...abe.js => reactPlayerFacebook.582f7f1c.js} | 12 +- assets/js/reactPlayerFilePlayer.369ebcd2.js | 1 - assets/js/reactPlayerFilePlayer.bef56796.js | 1 + ...9.js => reactPlayerFilePlayer.fdcd1f51.js} | 12 +- ...8f0d.js => reactPlayerKaltura.065e45b1.js} | 2 +- ...8d61.js => reactPlayerKaltura.079e6b00.js} | 12 +- assets/js/reactPlayerMixcloud.628d2aad.js | 1 - ...93c.js => reactPlayerMixcloud.a3fb461d.js} | 12 +- assets/js/reactPlayerMixcloud.c3e2db4a.js | 1 + assets/js/reactPlayerMux.7e2e3f86.js | 1 + ...6602b8ee.js => reactPlayerMux.93d5edbd.js} | 35 +- assets/js/reactPlayerMux.9857ba56.js | 1 - ...f9f6.js => reactPlayerPreview.5615f48a.js} | 8 +- ...d3af.js => reactPlayerPreview.9d736f65.js} | 2 +- ...2.js => reactPlayerSoundCloud.97cc8ff6.js} | 12 +- assets/js/reactPlayerSoundCloud.a9caeb97.js | 1 - assets/js/reactPlayerSoundCloud.d89f0440.js | 1 + ...d.js => reactPlayerStreamable.ac5473ea.js} | 12 +- ...6.js => reactPlayerStreamable.d93f5569.js} | 2 +- assets/js/reactPlayerTwitch.29de27b3.js | 1 - assets/js/reactPlayerTwitch.55051469.js | 1 + ...914f9.js => reactPlayerTwitch.cc430dc4.js} | 12 +- assets/js/reactPlayerVidyard.090f167f.js | 1 + assets/js/reactPlayerVidyard.3062dff8.js | 1 - ...8e65.js => reactPlayerVidyard.f5b36523.js} | 12 +- ...34e0c7.js => reactPlayerVimeo.3dff7ecf.js} | 12 +- ...82082c.js => reactPlayerVimeo.6ee50fc8.js} | 2 +- assets/js/reactPlayerWistia.2f05a362.js | 1 - assets/js/reactPlayerWistia.5498c2c2.js | 1 + ...ec54b.js => reactPlayerWistia.de05d934.js} | 12 +- ...e867.js => reactPlayerYouTube.6664bacb.js} | 2 +- ...a3d3.js => reactPlayerYouTube.ac7a68b5.js} | 12 +- assets/js/runtime~main.18db3224.js | 1 + assets/js/runtime~main.9c1af1bf.js | 1 - benchmarks.html | 8 +- .../application-lifecycle.html | 12 +- docs/architecture-concepts/facades.html | 12 +- .../service-container.html | 12 +- .../service-providers.html | 12 +- docs/cli-application/annotations.html | 12 +- docs/cli-application/commands.html | 12 +- docs/cli-application/error-handling.html | 12 +- docs/cli-application/publishing.html | 12 +- docs/cli-application/running.html | 12 +- docs/database/getting-started.html | 12 +- docs/database/migrations.html | 12 +- docs/database/query-builder.html | 12 +- docs/database/seeding.html | 12 +- docs/digging-deeper/collections.html | 14 +- docs/digging-deeper/graceful-shutdown.html | 12 +- docs/digging-deeper/library-development.html | 12 +- docs/digging-deeper/mail.html | 12 +- docs/digging-deeper/repl.html | 12 +- docs/getting-started/athennarc-file.html | 12 +- docs/getting-started/configuration.html | 12 +- docs/getting-started/directory-structure.html | 12 +- docs/getting-started/installation.html | 12 +- docs/orm/annotations.html | 12 +- docs/orm/extending-models.html | 12 +- docs/orm/factories.html | 12 +- docs/orm/getting-started.html | 12 +- docs/orm/query-builder.html | 12 +- docs/orm/relationships.html | 14 +- docs/rest-api-application/annotations.html | 12 +- docs/rest-api-application/controllers.html | 12 +- docs/rest-api-application/error-handling.html | 12 +- docs/rest-api-application/middlewares.html | 12 +- docs/rest-api-application/rate-limiting.html | 12 +- .../rest-api-application/request-context.html | 12 +- docs/rest-api-application/routing.html | 12 +- .../security-with-helmet.html | 12 +- docs/rest-api-application/static-files.html | 14 +- .../swagger-documentation.html | 12 +- .../tracing-requests.html | 12 +- docs/rest-api-application/views.html | 12 +- docs/testing/annotations.html | 12 +- docs/testing/cli-tests.html | 12 +- docs/testing/getting-started.html | 12 +- docs/testing/mocking.html | 12 +- docs/testing/rest-api-testing.html | 12 +- docs/the-basics/compilation.html | 12 +- docs/the-basics/deployment.html | 12 +- docs/the-basics/helpers.html | 47 +- docs/the-basics/logging.html | 12 +- index.html | 8 +- sw.js | 2 +- 271 files changed, 125529 insertions(+), 84546 deletions(-) create mode 100644 assets/css/styles.106b6d16.css delete mode 100644 assets/css/styles.6559cc61.css rename assets/js/{08133570.a27ccb3d.js => 08133570.bedbb75d.js} (97%) rename assets/js/{0b6406e9.ea213bb9.js => 0b6406e9.da42f77f.js} (96%) create mode 100644 assets/js/1169.b37bfd01.js create mode 100644 assets/js/1176.3fa1f1a0.js rename assets/js/{2244.581b5672.js => 1245.0093dbf5.js} (98%) create mode 100644 assets/js/130.d40b9a2f.js create mode 100644 assets/js/1303.ece083bc.js rename assets/js/{7807.45746fce.js.LICENSE.txt => 1303.ece083bc.js.LICENSE.txt} (56%) create mode 100644 assets/js/1331.b04ae620.js create mode 100644 assets/js/1398.b34f2eb3.js create mode 100644 assets/js/162.a6a66926.js delete mode 100644 assets/js/1644.0dcfb256.js delete mode 100644 assets/js/1688.9b5abf8f.js delete mode 100644 assets/js/1772.072dd336.js delete mode 100644 assets/js/17896441.20e27d3c.js create mode 100644 assets/js/17896441.8080a7a9.js create mode 100644 assets/js/1946.c1f898cd.js rename assets/js/{1bfe5704.4503ab9a.js => 1bfe5704.5807a985.js} (67%) rename assets/js/{1cb4e3ed.b885b82f.js => 1cb4e3ed.eef470f2.js} (96%) create mode 100644 assets/js/1df93b7f.50f773da.js delete mode 100644 assets/js/1df93b7f.a3f54be7.js delete mode 100644 assets/js/1f33cfc6.16c8544e.js delete mode 100644 assets/js/1f391b9e.890bdb41.js create mode 100644 assets/js/1f391b9e.f47ed7ff.js delete mode 100644 assets/js/2127.edae4370.js create mode 100644 assets/js/2130.59c93ed1.js delete mode 100644 assets/js/21dc2778.4fa88f77.js create mode 100644 assets/js/21dc2778.937de606.js create mode 100644 assets/js/2237.e35c7faa.js delete mode 100644 assets/js/230.f24d31b3.js create mode 100644 assets/js/2362.92df48f8.js rename assets/js/{9469.73800656.js => 2376.89729940.js} (63%) create mode 100644 assets/js/2453.4efe8b38.js create mode 100644 assets/js/2548.b0f7735f.js rename assets/js/{25ef7947.e2795dcf.js => 25ef7947.591dd342.js} (96%) rename assets/js/{26455d6c.e57178ed.js => 26455d6c.9e6fb798.js} (99%) rename assets/js/{2027.58a68e7f.js => 2843.88f75fed.js} (97%) rename assets/js/{28a593c7.a6331d38.js => 28a593c7.c5440720.js} (95%) delete mode 100644 assets/js/2924.f6df9113.js rename assets/js/{8687.a3f8295e.js => 2925.9d15cf56.js} (67%) create mode 100644 assets/js/2983.44d58df4.js create mode 100644 assets/js/2ab4562b.d7ae5e3b.js delete mode 100644 assets/js/2ab4562b.fc83a82a.js create mode 100644 assets/js/303.a360443a.js create mode 100644 assets/js/3068.a770ed84.js rename assets/js/{30d27832.8e174e4b.js => 30d27832.7f729ce5.js} (98%) rename assets/js/{31058b07.3fa75a06.js => 31058b07.6114e2f5.js} (95%) rename assets/js/{816.dcd00e38.js => 331.fec0101f.js} (85%) delete mode 100644 assets/js/360.090aa725.js delete mode 100644 assets/js/3601.97f94c19.js create mode 100644 assets/js/3626.5a9700a2.js create mode 100644 assets/js/3706.59d3c775.js rename assets/js/{469.66086d5a.js => 376.396be82d.js} (95%) delete mode 100644 assets/js/391d9c20.53d14b68.js create mode 100644 assets/js/391d9c20.d39fb521.js rename assets/js/{3aefb2a9.4801e826.js => 3aefb2a9.32eb9ab2.js} (96%) delete mode 100644 assets/js/3ebc3d67.458ba45d.js create mode 100644 assets/js/3ebc3d67.5b085205.js delete mode 100644 assets/js/3f163355.1f047cbf.js create mode 100644 assets/js/3f163355.86d39dc3.js rename assets/js/{3fb3fb7f.3eaa8c87.js => 3fb3fb7f.943668d2.js} (97%) create mode 100644 assets/js/4132.472205b2.js delete mode 100644 assets/js/4148.43bdaf12.js create mode 100644 assets/js/4162.d00bd1cc.js rename assets/js/{506.17e673b8.js => 420.d1a95da0.js} (94%) rename assets/js/{46.53124cb6.js => 426.b7e95b87.js} (81%) create mode 100644 assets/js/4334.66dbfd08.js rename assets/js/{371.b9948998.js => 453.113746e1.js} (88%) create mode 100644 assets/js/4741.8e6c530a.js rename assets/js/{254.da0a5da3.js => 478.14f1af40.js} (92%) create mode 100644 assets/js/4943.60400b58.js rename assets/js/{4ca25bb5.93ace705.js => 4ca25bb5.f4be1dd5.js} (96%) rename assets/js/{50bfad63.aead9967.js => 50bfad63.f4f63f2a.js} (98%) delete mode 100644 assets/js/5131.5e46ae6f.js delete mode 100644 assets/js/5254.3eb9ebd8.js delete mode 100644 assets/js/5283.99849d12.js delete mode 100644 assets/js/5373.d484caaa.js create mode 100644 assets/js/59190afd.9475ede9.js delete mode 100644 assets/js/59190afd.bc0b8c99.js create mode 100644 assets/js/5e95c892.506f1936.js delete mode 100644 assets/js/5e95c892.98ec5397.js rename assets/js/{60418129.24976881.js => 60418129.d251e87b.js} (93%) delete mode 100644 assets/js/6046.05219399.js delete mode 100644 assets/js/6284.5a5433cb.js rename assets/js/{62e3c86b.d055b31f.js => 62e3c86b.40eae743.js} (85%) rename assets/js/{688.9f1a5208.js => 635.3e80cd93.js} (87%) rename assets/js/{3506.9edd1dee.js => 6420.f2879ce4.js} (86%) rename assets/js/{6459b84b.e461bf2d.js => 6459b84b.3d49dc6c.js} (96%) delete mode 100644 assets/js/6715.e8cb9fbd.js rename assets/js/{6278.afd805f6.js => 6788.80aec321.js} (62%) rename assets/js/{284.8091b9df.js => 68.88df7d9a.js} (90%) rename assets/js/{8365.91257d46.js => 6803.73ef982b.js} (72%) rename assets/js/{601.bd9904a4.js => 689.51613cea.js} (83%) rename assets/js/{189.5aec15e9.js => 706.047b3a58.js} (87%) delete mode 100644 assets/js/7111.50abb3d1.js delete mode 100644 assets/js/740.e410e6ba.js create mode 100644 assets/js/741.a0ad8db0.js create mode 100644 assets/js/7426.280729df.js create mode 100644 assets/js/751a75f6.3f07fc73.js delete mode 100644 assets/js/751a75f6.bb0a106f.js delete mode 100644 assets/js/762.4ca7866e.js rename assets/js/{76be5683.2c91368a.js => 76be5683.09c92fae.js} (93%) delete mode 100644 assets/js/7707.39e71ec4.js delete mode 100644 assets/js/7740.3c8b4943.js rename assets/js/{77db9a17.8893f074.js => 77db9a17.2b9ea54e.js} (95%) delete mode 100644 assets/js/7807.45746fce.js rename assets/js/{278.c18a43f9.js => 788.d55fe659.js} (96%) create mode 100644 assets/js/7c110bd0.9ef3cb90.js delete mode 100644 assets/js/801e3691.37bd374e.js create mode 100644 assets/js/801e3691.38ee09d1.js rename assets/js/{365.da569cd3.js => 803.3585a98c.js} (92%) create mode 100644 assets/js/8055.b792f2c6.js delete mode 100644 assets/js/807.e8ea5136.js rename assets/js/{205.f53fd1d6.js => 810.8436feb4.js} (88%) delete mode 100644 assets/js/8189.052631a2.js rename assets/js/{9610.b4783ee8.js => 8337.8759c63e.js} (58%) delete mode 100644 assets/js/8371.753404ac.js delete mode 100644 assets/js/8416df86.3199682b.js create mode 100644 assets/js/8416df86.74767f91.js rename assets/js/{27.96a4e28f.js => 843.b93daff8.js} (97%) rename assets/js/{6254.534a8984.js => 8478.2abe6c83.js} (77%) create mode 100644 assets/js/84dac133.6eb6f3f1.js delete mode 100644 assets/js/84dac133.b04bb491.js create mode 100644 assets/js/8635.75cbcfbe.js rename assets/js/{762.ba125ab2.js => 869.cbb475b2.js} (91%) create mode 100644 assets/js/8810.92902e39.js create mode 100644 assets/js/8869.a2913ed8.js create mode 100644 assets/js/8f88d278.0cf7c8ce.js delete mode 100644 assets/js/8f88d278.b1b8a32a.js rename assets/js/{313.fb64a2c4.js => 902.32d46a57.js} (87%) delete mode 100644 assets/js/9205.1b6742f5.js rename assets/js/{687.51b2a3b6.js => 925.ecb05b21.js} (99%) delete mode 100644 assets/js/935f2afb.81dce83d.js rename assets/js/{715.7c02bf77.js => 943.e677d0e4.js} (76%) rename assets/js/{111.1a77f36c.js => 946.10626dca.js} (96%) create mode 100644 assets/js/9475.0f1ef4ee.js rename assets/js/{2924.f6df9113.js.LICENSE.txt => 9475.0f1ef4ee.js.LICENSE.txt} (66%) create mode 100644 assets/js/94cba6ed.3cd26515.js delete mode 100644 assets/js/94cba6ed.af48bdaf.js create mode 100644 assets/js/9689.74e05a4b.js create mode 100644 assets/js/9730.4e94f70f.js delete mode 100644 assets/js/9816.a49284d7.js rename assets/js/{98b8cc29.018426d5.js => 98b8cc29.cb3e7d75.js} (98%) rename assets/js/{a21dcd43.aedcb4db.js => a21dcd43.b94f5b9d.js} (97%) rename assets/js/{a2c501c8.62e4cbe1.js => a2c501c8.d07b64b5.js} (90%) delete mode 100644 assets/js/a4d3e054.195d0863.js create mode 100644 assets/js/a4d3e054.9f84f987.js create mode 100644 assets/js/a7456010.899d59d8.js create mode 100644 assets/js/a7bd4aaa.21db5993.js delete mode 100644 assets/js/a7bd4aaa.8ed155cd.js create mode 100644 assets/js/a94703ab.dfe0379b.js delete mode 100644 assets/js/a94703ab.f6df80e0.js rename assets/js/{22c3a07e.4b4c4682.js => aba21aa0.9e876600.js} (66%) rename assets/js/{ad6f9ff5.80bf0e10.js => ad6f9ff5.da4481a4.js} (99%) create mode 100644 assets/js/ba3d4959.17e2ef95.js delete mode 100644 assets/js/ba3d4959.df025922.js rename assets/js/{bfc34fa7.cc2205c4.js => bfc34fa7.3bbd87a1.js} (99%) rename assets/js/{bfc576a4.a3b25428.js => bfc576a4.2a3d9a85.js} (95%) rename assets/js/{c24fb5a2.48764531.js => c24fb5a2.c61a0be0.js} (98%) rename assets/js/{cbe663fe.000adc1b.js => cbe663fe.21efa276.js} (99%) delete mode 100644 assets/js/cc784980.50d26df0.js create mode 100644 assets/js/cc784980.eabde083.js rename assets/js/{d295d49b.155d0e62.js => d295d49b.37a6f6fb.js} (96%) delete mode 100644 assets/js/d550161c.53c5d3f1.js create mode 100644 assets/js/d550161c.df515310.js rename assets/js/{e2eeca55.bfe6cbe7.js => e2eeca55.c8c93fc3.js} (97%) create mode 100644 assets/js/e6388bba.07ead248.js delete mode 100644 assets/js/e6388bba.9c793527.js rename assets/js/{e71332dd.6c157557.js => e71332dd.8c2fc672.js} (90%) rename assets/js/{ead3bc46.ec825d14.js => ead3bc46.f60c2624.js} (98%) rename assets/js/{f210ba15.c22ae324.js => f210ba15.ad4693e2.js} (96%) create mode 100644 assets/js/f3e8f525.6e0d876e.js delete mode 100644 assets/js/f3e8f525.a9b8ad68.js rename assets/js/{f991d430.3a2b5dfe.js => f991d430.0e2e6b34.js} (98%) delete mode 100644 assets/js/main.9b1355e8.js create mode 100644 assets/js/main.b195fff1.js rename assets/js/{main.9b1355e8.js.LICENSE.txt => main.b195fff1.js.LICENSE.txt} (100%) delete mode 100644 assets/js/reactPlayerDailyMotion.738f2818.js rename assets/js/{reactPlayerDailyMotion.7a0663a3.js => reactPlayerDailyMotion.bbf6379c.js} (96%) create mode 100644 assets/js/reactPlayerDailyMotion.ea480b77.js create mode 100644 assets/js/reactPlayerFacebook.1dd4863c.js delete mode 100644 assets/js/reactPlayerFacebook.29d829e4.js rename assets/js/{reactPlayerFacebook.f356aabe.js => reactPlayerFacebook.582f7f1c.js} (96%) delete mode 100644 assets/js/reactPlayerFilePlayer.369ebcd2.js create mode 100644 assets/js/reactPlayerFilePlayer.bef56796.js rename assets/js/{reactPlayerFilePlayer.22eac319.js => reactPlayerFilePlayer.fdcd1f51.js} (98%) rename assets/js/{reactPlayerKaltura.a01c8f0d.js => reactPlayerKaltura.065e45b1.js} (68%) rename assets/js/{reactPlayerKaltura.d9fe8d61.js => reactPlayerKaltura.079e6b00.js} (95%) delete mode 100644 assets/js/reactPlayerMixcloud.628d2aad.js rename assets/js/{reactPlayerMixcloud.18ab793c.js => reactPlayerMixcloud.a3fb461d.js} (95%) create mode 100644 assets/js/reactPlayerMixcloud.c3e2db4a.js create mode 100644 assets/js/reactPlayerMux.7e2e3f86.js rename assets/js/{reactPlayerMux.6602b8ee.js => reactPlayerMux.93d5edbd.js} (91%) delete mode 100644 assets/js/reactPlayerMux.9857ba56.js rename assets/js/{reactPlayerPreview.19d1f9f6.js => reactPlayerPreview.5615f48a.js} (97%) rename assets/js/{reactPlayerPreview.4f1fd3af.js => reactPlayerPreview.9d736f65.js} (95%) rename assets/js/{reactPlayerSoundCloud.dbf66862.js => reactPlayerSoundCloud.97cc8ff6.js} (95%) delete mode 100644 assets/js/reactPlayerSoundCloud.a9caeb97.js create mode 100644 assets/js/reactPlayerSoundCloud.d89f0440.js rename assets/js/{reactPlayerStreamable.a7989fed.js => reactPlayerStreamable.ac5473ea.js} (95%) rename assets/js/{reactPlayerStreamable.73717b36.js => reactPlayerStreamable.d93f5569.js} (70%) delete mode 100644 assets/js/reactPlayerTwitch.29de27b3.js create mode 100644 assets/js/reactPlayerTwitch.55051469.js rename assets/js/{reactPlayerTwitch.0e1914f9.js => reactPlayerTwitch.cc430dc4.js} (96%) create mode 100644 assets/js/reactPlayerVidyard.090f167f.js delete mode 100644 assets/js/reactPlayerVidyard.3062dff8.js rename assets/js/{reactPlayerVidyard.8f758e65.js => reactPlayerVidyard.f5b36523.js} (95%) rename assets/js/{reactPlayerVimeo.9434e0c7.js => reactPlayerVimeo.3dff7ecf.js} (96%) rename assets/js/{reactPlayerVimeo.7c82082c.js => reactPlayerVimeo.6ee50fc8.js} (76%) delete mode 100644 assets/js/reactPlayerWistia.2f05a362.js create mode 100644 assets/js/reactPlayerWistia.5498c2c2.js rename assets/js/{reactPlayerWistia.401ec54b.js => reactPlayerWistia.de05d934.js} (96%) rename assets/js/{reactPlayerYouTube.0ed3e867.js => reactPlayerYouTube.6664bacb.js} (81%) rename assets/js/{reactPlayerYouTube.57dea3d3.js => reactPlayerYouTube.ac7a68b5.js} (97%) create mode 100644 assets/js/runtime~main.18db3224.js delete mode 100644 assets/js/runtime~main.9c1af1bf.js diff --git a/404.html b/404.html index 1a6f7793..2140afab 100644 --- a/404.html +++ b/404.html @@ -2,7 +2,7 @@
- +We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
register
method",id:"the-register-method",level:3},{value:"The boot
method",id:"the-boot-method",level:3},{value:"The shutdown
method",id:"the-shutdown-method",level:3},{value:"Registering providers",id:"registering-providers",level:2},{value:"Choosing applications",id:"choosing-applications",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"service-providers",children:"Service Providers"}),"\n",(0,i.jsx)(n.p,{children:"Understand the purpose and how to use the Athenna service providers."}),"\n",(0,i.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsx)(n.p,{children:"Service providers are the central place of all Athenna application bootstrapping.\nYour own application, as well as all of Athenna core services, are bootstrapped\nvia service providers."}),"\n",(0,i.jsx)(n.p,{children:'But what do we mean by "bootstrapped"? In general, we mean registering things,\nincluding registering service container bindings, retry strategies for your http\nrequests, booting your FakeApi. Service providers are the central place to\nconfigure your application.'}),"\n",(0,i.jsxs)(n.p,{children:["If you open the ",(0,i.jsx)(n.code,{children:".athennarc.json"})," file included with Athenna, you will see a\n",(0,i.jsx)(n.code,{children:"providers"})," array. These are all the service provider classes that will be\nloaded for your application. By default, a set of Athenna core service\nproviders are listed in this array. These providers bootstrap the core\nAthenna components, such as the http, route, controllers and others."]}),"\n",(0,i.jsx)(n.p,{children:"In this overview, you will learn how to write your own service providers and\nregister them with your Athenna application."}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["If you would like to learn more about how Athenna works internally, check\nout the ",(0,i.jsx)(n.a,{href:"/docs/architecture-concepts/application-lifecycle",children:"application lifecycle documentation section"}),"."]})}),"\n",(0,i.jsx)(n.h2,{id:"writing-service-providers",children:"Writing service providers"}),"\n",(0,i.jsxs)(n.p,{children:["All service providers extend the ",(0,i.jsx)(n.code,{children:"ServiceProvider"})," class. Most service providers\ncontain a ",(0,i.jsx)(n.code,{children:"register"})," and a ",(0,i.jsx)(n.code,{children:"boot"})," method. Within the ",(0,i.jsx)(n.code,{children:"register"})," method, you should\nonly bind things into the service container. We will check lately why this\nbehavior. To create a new provider, use the following command:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"node artisan make:provider AppProvider\n"})}),"\n",(0,i.jsxs)(n.h3,{id:"the-register-method",children:["The ",(0,i.jsx)(n.code,{children:"register"})," method"]}),"\n",(0,i.jsxs)(n.p,{children:["As mentioned previously, within the ",(0,i.jsx)(n.code,{children:"register"})," method, you should only bind\nthings into the service container. You should never attempt to register any\npiece of functionality within the ",(0,i.jsx)(n.code,{children:"register"})," method. Otherwise, you may\naccidentally use a service provided by a service provider which has\nnot loaded yet."]}),"\n",(0,i.jsxs)(n.p,{children:["Let's take a look at a basic service provider. Within any of your service\nprovider methods, you always have access to the ",(0,i.jsx)(n.code,{children:"this.container"})," property\nwhich provides access to the service container:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"import { ServiceProvider } from '@athenna/ioc'\nimport { AppHelper } from '#app/helpers/AppHelper'\n\nexport default class AppProvider extends ServiceProvider {\n public register() {\n this.container.singleton('App/Helpers/AppHelper', AppHelper)\n }\n}\n"})}),"\n",(0,i.jsxs)(n.p,{children:["This service provider only defines a ",(0,i.jsx)(n.code,{children:"register"})," method, and uses that method to\ndefine an implementation of ",(0,i.jsx)(n.code,{children:"AppHelper"})," in the service container. If you're\nnot yet familiar with Athenna service container, ",(0,i.jsx)(n.a,{href:"/docs/architecture-concepts/service-container",children:"check out its documentation"}),"."]}),"\n",(0,i.jsxs)(n.h3,{id:"the-boot-method",children:["The ",(0,i.jsx)(n.code,{children:"boot"})," method"]}),"\n",(0,i.jsxs)(n.p,{children:["So, what if we need to register a dependency that needs another dependency\nwithin our service provider? This should be done within the ",(0,i.jsx)(n.code,{children:"boot"})," method.\nThis method is called after all other service providers have been registered,\nmeaning you have access to all other services that have been registered by\nthe framework:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"import { ServiceProvider } from '@athenna/ioc'\nimport { AppHelper } from '#app/helpers/AppHelper'\n\nexport default class AppProvider extends ServiceProvider {\n public boot() {\n const appService = this.container.safeUse('App/Services/AppService')\n const appHelper = new AppHelper(appService)\n\n this.container.instance('App/Helpers/AppHelper', appHelper)\n }\n}\n"})}),"\n",(0,i.jsxs)(n.h3,{id:"the-shutdown-method",children:["The ",(0,i.jsx)(n.code,{children:"shutdown"})," method"]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"shutdown"})," method will be called when the application is going down for\nsome reason. This method is extremely useful for graceful shutdown the\napplication, and it's used in providers such as ",(0,i.jsx)(n.code,{children:"HttpServerProvider"})," and\n",(0,i.jsx)(n.code,{children:"DatabaseProvider"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"import { ServiceProvider } from '@athenna/ioc'\n\nexport default class AppProvider extends ServiceProvider {\n public async shutdown() {\n const appHelper = this.container.use('App/Helpers/AppHelper')\n\n if (!appHelper) {\n return\n }\n\n await appHelper.close()\n }\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"registering-providers",children:"Registering providers"}),"\n",(0,i.jsxs)(n.p,{children:["All service providers are registered in the ",(0,i.jsx)(n.code,{children:".athennarc.json file"}),". This file\ncontains a ",(0,i.jsx)(n.code,{children:"providers"})," array where you can list the class names of your service\nproviders. By default, a set of Athenna core service providers are listed in\nthis array. These providers bootstrap the core Athenna components, such as\nthe http, route, services and others."]}),"\n",(0,i.jsxs)(n.p,{children:["If you are using the ",(0,i.jsx)(n.code,{children:"make:provider"})," command to create providers, Athenna\nwill automatically register the provider for you in this array, but if you\nmight need to register it manually, just add the path to it to the array:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "providers": [\n // Other service providers...\n\n "#providers/AppProvider"\n ]\n}\n'})}),"\n",(0,i.jsx)(n.h2,{id:"choosing-applications",children:"Choosing applications"}),"\n",(0,i.jsxs)(n.p,{children:["In some cases you want that your provider only runs for a determined type of\nAthenna applications. For example, I have a ",(0,i.jsx)(n.code,{children:"MockedDbProvider"})," that connects\nwith some database if I don't have an Artisan command that do some work\ninside this database, why I would need to run this ",(0,i.jsx)(n.code,{children:"MockedDbProvider"})," when\nrunning Artisan application and commands?"]}),"\n",(0,i.jsxs)(n.p,{children:["To solve this problem you can use the ",(0,i.jsx)(n.code,{children:"environment"})," getter to choose the\napplications that could run this provider:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"import { ServiceProvider } from '@athenna/ioc'\n\nexport default class MockedDbProvider extends ServiceProvider {\n public get environment() {\n return ['http', 'repl']\n }\n}\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Now when running Artisan application and commands, ",(0,i.jsx)(n.code,{children:"MockedDbProvider"})," will be\nignored."]}),"\n",(0,i.jsx)(n.p,{children:"The following environments are available by default in Athenna at this moment:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"http"}),"\n",(0,i.jsx)(n.li,{children:"repl"}),"\n",(0,i.jsx)(n.li,{children:"console"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["You could also create your own environments. In your ",(0,i.jsx)(n.code,{children:"Path.bootstrap('main.ts')"})," file\nyou can add an ",(0,i.jsx)(n.code,{children:"environments"})," option when calling ",(0,i.jsx)(n.code,{children:"Ignite.load()"})," method:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"import { Ignite } from '@athenna/core'\n\nconst ignite = await new Ignite().load(import.meta.url, {\n environments: ['myEnv']\n})\n\nawait ignite.httpServer()\n"})}),"\n",(0,i.jsxs)(n.p,{children:["All of your environments will be merged with Athenna default ones when running\nyour application. This means that in the example above, when running your\nhttp server, the providers bootstrapped will be only the ones that got the\nenvironments getter returning ",(0,i.jsx)(n.code,{children:"['*']"})," and ",(0,i.jsx)(n.code,{children:"['myEnv', 'http']"}),"."]})]})}function l(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>c,a:()=>s});var i=r(7294);const t={},o=i.createContext(t);function s(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunk_athenna_docs=self.webpackChunk_athenna_docs||[]).push([[8459],{6170:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>l,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var i=r(4848),t=r(8453);const o={title:"Service Providers",sidebar_position:3,description:"Understand the purpose and how to use the Athenna service providers."},s="Service Providers",c={id:"architecture-concepts/service-providers",title:"Service Providers",description:"Understand the purpose and how to use the Athenna service providers.",source:"@site/docs/architecture-concepts/service-providers.mdx",sourceDirName:"architecture-concepts",slug:"/architecture-concepts/service-providers",permalink:"/docs/architecture-concepts/service-providers",draft:!1,unlisted:!1,editUrl:"https://github.com/AthennaIO/Docs/tree/main/docs/architecture-concepts/service-providers.mdx",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Service Providers",sidebar_position:3,description:"Understand the purpose and how to use the Athenna service providers."},sidebar:"tutorialSidebar",previous:{title:"Service Container",permalink:"/docs/architecture-concepts/service-container"},next:{title:"Facades",permalink:"/docs/architecture-concepts/facades"}},a={},d=[{value:"Introduction",id:"introduction",level:2},{value:"Writing service providers",id:"writing-service-providers",level:2},{value:"The register
method",id:"the-register-method",level:3},{value:"The boot
method",id:"the-boot-method",level:3},{value:"The shutdown
method",id:"the-shutdown-method",level:3},{value:"Registering providers",id:"registering-providers",level:2},{value:"Choosing applications",id:"choosing-applications",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"service-providers",children:"Service Providers"}),"\n",(0,i.jsx)(n.p,{children:"Understand the purpose and how to use the Athenna service providers."}),"\n",(0,i.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsx)(n.p,{children:"Service providers are the central place of all Athenna application bootstrapping.\nYour own application, as well as all of Athenna core services, are bootstrapped\nvia service providers."}),"\n",(0,i.jsx)(n.p,{children:'But what do we mean by "bootstrapped"? In general, we mean registering things,\nincluding registering service container bindings, retry strategies for your http\nrequests, booting your FakeApi. Service providers are the central place to\nconfigure your application.'}),"\n",(0,i.jsxs)(n.p,{children:["If you open the ",(0,i.jsx)(n.code,{children:".athennarc.json"})," file included with Athenna, you will see a\n",(0,i.jsx)(n.code,{children:"providers"})," array. These are all the service provider classes that will be\nloaded for your application. By default, a set of Athenna core service\nproviders are listed in this array. These providers bootstrap the core\nAthenna components, such as the http, route, controllers and others."]}),"\n",(0,i.jsx)(n.p,{children:"In this overview, you will learn how to write your own service providers and\nregister them with your Athenna application."}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["If you would like to learn more about how Athenna works internally, check\nout the ",(0,i.jsx)(n.a,{href:"/docs/architecture-concepts/application-lifecycle",children:"application lifecycle documentation section"}),"."]})}),"\n",(0,i.jsx)(n.h2,{id:"writing-service-providers",children:"Writing service providers"}),"\n",(0,i.jsxs)(n.p,{children:["All service providers extend the ",(0,i.jsx)(n.code,{children:"ServiceProvider"})," class. Most service providers\ncontain a ",(0,i.jsx)(n.code,{children:"register"})," and a ",(0,i.jsx)(n.code,{children:"boot"})," method. Within the ",(0,i.jsx)(n.code,{children:"register"})," method, you should\nonly bind things into the service container. We will check lately why this\nbehavior. To create a new provider, use the following command:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"node artisan make:provider AppProvider\n"})}),"\n",(0,i.jsxs)(n.h3,{id:"the-register-method",children:["The ",(0,i.jsx)(n.code,{children:"register"})," method"]}),"\n",(0,i.jsxs)(n.p,{children:["As mentioned previously, within the ",(0,i.jsx)(n.code,{children:"register"})," method, you should only bind\nthings into the service container. You should never attempt to register any\npiece of functionality within the ",(0,i.jsx)(n.code,{children:"register"})," method. Otherwise, you may\naccidentally use a service provided by a service provider which has\nnot loaded yet."]}),"\n",(0,i.jsxs)(n.p,{children:["Let's take a look at a basic service provider. Within any of your service\nprovider methods, you always have access to the ",(0,i.jsx)(n.code,{children:"this.container"})," property\nwhich provides access to the service container:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"import { ServiceProvider } from '@athenna/ioc'\nimport { AppHelper } from '#app/helpers/AppHelper'\n\nexport default class AppProvider extends ServiceProvider {\n public register() {\n this.container.singleton('App/Helpers/AppHelper', AppHelper)\n }\n}\n"})}),"\n",(0,i.jsxs)(n.p,{children:["This service provider only defines a ",(0,i.jsx)(n.code,{children:"register"})," method, and uses that method to\ndefine an implementation of ",(0,i.jsx)(n.code,{children:"AppHelper"})," in the service container. If you're\nnot yet familiar with Athenna service container, ",(0,i.jsx)(n.a,{href:"/docs/architecture-concepts/service-container",children:"check out its documentation"}),"."]}),"\n",(0,i.jsxs)(n.h3,{id:"the-boot-method",children:["The ",(0,i.jsx)(n.code,{children:"boot"})," method"]}),"\n",(0,i.jsxs)(n.p,{children:["So, what if we need to register a dependency that needs another dependency\nwithin our service provider? This should be done within the ",(0,i.jsx)(n.code,{children:"boot"})," method.\nThis method is called after all other service providers have been registered,\nmeaning you have access to all other services that have been registered by\nthe framework:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"import { ServiceProvider } from '@athenna/ioc'\nimport { AppHelper } from '#app/helpers/AppHelper'\n\nexport default class AppProvider extends ServiceProvider {\n public boot() {\n const appService = this.container.safeUse('App/Services/AppService')\n const appHelper = new AppHelper(appService)\n\n this.container.instance('App/Helpers/AppHelper', appHelper)\n }\n}\n"})}),"\n",(0,i.jsxs)(n.h3,{id:"the-shutdown-method",children:["The ",(0,i.jsx)(n.code,{children:"shutdown"})," method"]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"shutdown"})," method will be called when the application is going down for\nsome reason. This method is extremely useful for graceful shutdown the\napplication, and it's used in providers such as ",(0,i.jsx)(n.code,{children:"HttpServerProvider"})," and\n",(0,i.jsx)(n.code,{children:"DatabaseProvider"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"import { ServiceProvider } from '@athenna/ioc'\n\nexport default class AppProvider extends ServiceProvider {\n public async shutdown() {\n const appHelper = this.container.use('App/Helpers/AppHelper')\n\n if (!appHelper) {\n return\n }\n\n await appHelper.close()\n }\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"registering-providers",children:"Registering providers"}),"\n",(0,i.jsxs)(n.p,{children:["All service providers are registered in the ",(0,i.jsx)(n.code,{children:".athennarc.json file"}),". This file\ncontains a ",(0,i.jsx)(n.code,{children:"providers"})," array where you can list the class names of your service\nproviders. By default, a set of Athenna core service providers are listed in\nthis array. These providers bootstrap the core Athenna components, such as\nthe http, route, services and others."]}),"\n",(0,i.jsxs)(n.p,{children:["If you are using the ",(0,i.jsx)(n.code,{children:"make:provider"})," command to create providers, Athenna\nwill automatically register the provider for you in this array, but if you\nmight need to register it manually, just add the path to it to the array:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "providers": [\n // Other service providers...\n\n "#providers/AppProvider"\n ]\n}\n'})}),"\n",(0,i.jsx)(n.h2,{id:"choosing-applications",children:"Choosing applications"}),"\n",(0,i.jsxs)(n.p,{children:["In some cases you want that your provider only runs for a determined type of\nAthenna applications. For example, I have a ",(0,i.jsx)(n.code,{children:"MockedDbProvider"})," that connects\nwith some database if I don't have an Artisan command that do some work\ninside this database, why I would need to run this ",(0,i.jsx)(n.code,{children:"MockedDbProvider"})," when\nrunning Artisan application and commands?"]}),"\n",(0,i.jsxs)(n.p,{children:["To solve this problem you can use the ",(0,i.jsx)(n.code,{children:"environment"})," getter to choose the\napplications that could run this provider:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"import { ServiceProvider } from '@athenna/ioc'\n\nexport default class MockedDbProvider extends ServiceProvider {\n public get environment() {\n return ['http', 'repl']\n }\n}\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Now when running Artisan application and commands, ",(0,i.jsx)(n.code,{children:"MockedDbProvider"})," will be\nignored."]}),"\n",(0,i.jsx)(n.p,{children:"The following environments are available by default in Athenna at this moment:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"http"}),"\n",(0,i.jsx)(n.li,{children:"repl"}),"\n",(0,i.jsx)(n.li,{children:"console"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["You could also create your own environments. In your ",(0,i.jsx)(n.code,{children:"Path.bootstrap('main.ts')"})," file\nyou can add an ",(0,i.jsx)(n.code,{children:"environments"})," option when calling ",(0,i.jsx)(n.code,{children:"Ignite.load()"})," method:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"import { Ignite } from '@athenna/core'\n\nconst ignite = await new Ignite().load(import.meta.url, {\n environments: ['myEnv']\n})\n\nawait ignite.httpServer()\n"})}),"\n",(0,i.jsxs)(n.p,{children:["All of your environments will be merged with Athenna default ones when running\nyour application. This means that in the example above, when running your\nhttp server, the providers bootstrapped will be only the ones that got the\nenvironments getter returning ",(0,i.jsx)(n.code,{children:"['*']"})," and ",(0,i.jsx)(n.code,{children:"['myEnv', 'http']"}),"."]})]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>c});var i=r(6540);const t={},o=i.createContext(t);function s(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/1169.b37bfd01.js b/assets/js/1169.b37bfd01.js
new file mode 100644
index 00000000..457415ab
--- /dev/null
+++ b/assets/js/1169.b37bfd01.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_athenna_docs=self.webpackChunk_athenna_docs||[]).push([[1169],{3046:(t,e,n)=>{n.d(e,{T:()=>k});var r=n(8585),o=n(9142),i=n(9610),s=n(7422),u=n(1662),c=n(6401),a=n(8058),f=n(9592),h=n(3588),A=n(4326),d=n(2062),l=n(5707);const v=function(t){return t!=t};const b=function(t,e,n){for(var r=n-1,o=t.length;++r