@cdmbase/wiki-browser 12.0.18-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. package/LICENSE +21 -0
  2. package/lib/components/Logo.d.ts +4 -0
  3. package/lib/components/Logo.d.ts.map +1 -0
  4. package/lib/components/Logo.js +16 -0
  5. package/lib/components/Logo.js.map +1 -0
  6. package/lib/components/help/SidebarSearch.d.ts +8 -0
  7. package/lib/components/help/SidebarSearch.d.ts.map +1 -0
  8. package/lib/components/help/SidebarSearch.js +111 -0
  9. package/lib/components/help/SidebarSearch.js.map +1 -0
  10. package/lib/components/help/index.d.ts +2 -0
  11. package/lib/components/help/index.d.ts.map +1 -0
  12. package/lib/components/landing/FeatureCard.d.ts +13 -0
  13. package/lib/components/landing/FeatureCard.d.ts.map +1 -0
  14. package/lib/components/landing/FeatureCard.js +85 -0
  15. package/lib/components/landing/FeatureCard.js.map +1 -0
  16. package/lib/components/landing/QuickLinkCard.d.ts +8 -0
  17. package/lib/components/landing/QuickLinkCard.d.ts.map +1 -0
  18. package/lib/components/landing/QuickLinkCard.js +26 -0
  19. package/lib/components/landing/QuickLinkCard.js.map +1 -0
  20. package/lib/components/landing/SearchInput.d.ts +10 -0
  21. package/lib/components/landing/SearchInput.d.ts.map +1 -0
  22. package/lib/components/landing/SearchInput.js +223 -0
  23. package/lib/components/landing/SearchInput.js.map +1 -0
  24. package/lib/components/landing/index.d.ts +4 -0
  25. package/lib/components/landing/index.d.ts.map +1 -0
  26. package/lib/components/welcome.d.ts +3 -0
  27. package/lib/components/welcome.d.ts.map +1 -0
  28. package/lib/compute.d.ts +4 -0
  29. package/lib/compute.d.ts.map +1 -0
  30. package/lib/compute.js +96 -0
  31. package/lib/compute.js.map +1 -0
  32. package/lib/config/env-config.d.ts +4 -0
  33. package/lib/config/env-config.d.ts.map +1 -0
  34. package/lib/config/env-config.js +7 -0
  35. package/lib/config/env-config.js.map +1 -0
  36. package/lib/docs.config.d.ts +48 -0
  37. package/lib/docs.config.d.ts.map +1 -0
  38. package/lib/index.d.ts +4 -0
  39. package/lib/index.d.ts.map +1 -0
  40. package/lib/index.js +2 -0
  41. package/lib/index.js.map +1 -0
  42. package/lib/loaders/search.d.ts +1 -0
  43. package/lib/loaders/search.d.ts.map +1 -0
  44. package/lib/module.d.ts +4 -0
  45. package/lib/module.d.ts.map +1 -0
  46. package/lib/module.js +11 -0
  47. package/lib/module.js.map +1 -0
  48. package/lib/pages/ArticlePage/ArticlePage.d.ts +4 -0
  49. package/lib/pages/ArticlePage/ArticlePage.d.ts.map +1 -0
  50. package/lib/pages/ArticlePage/ArticlePage.js +222 -0
  51. package/lib/pages/ArticlePage/ArticlePage.js.map +1 -0
  52. package/lib/pages/ArticlePage/index.d.ts +3 -0
  53. package/lib/pages/ArticlePage/index.d.ts.map +1 -0
  54. package/lib/pages/ArticlePage/index.js +3 -0
  55. package/lib/pages/ArticlePage/index.js.map +1 -0
  56. package/lib/pages/CategoryCollection/CategoryCollection.d.ts +4 -0
  57. package/lib/pages/CategoryCollection/CategoryCollection.d.ts.map +1 -0
  58. package/lib/pages/CategoryCollection/CategoryCollection.js +103 -0
  59. package/lib/pages/CategoryCollection/CategoryCollection.js.map +1 -0
  60. package/lib/pages/CategoryCollection/index.d.ts +3 -0
  61. package/lib/pages/CategoryCollection/index.d.ts.map +1 -0
  62. package/lib/pages/CategoryCollection/index.js +3 -0
  63. package/lib/pages/CategoryCollection/index.js.map +1 -0
  64. package/lib/pages/Help/HelpIndex.d.ts +4 -0
  65. package/lib/pages/Help/HelpIndex.d.ts.map +1 -0
  66. package/lib/pages/Help/HelpIndex.js +44 -0
  67. package/lib/pages/Help/HelpIndex.js.map +1 -0
  68. package/lib/pages/Help/index.d.ts +4 -0
  69. package/lib/pages/Help/index.d.ts.map +1 -0
  70. package/lib/pages/Help/index.js +226 -0
  71. package/lib/pages/Help/index.js.map +1 -0
  72. package/lib/pages/Landing/index.d.ts +3 -0
  73. package/lib/pages/Landing/index.d.ts.map +1 -0
  74. package/lib/pages/Landing/index.js +281 -0
  75. package/lib/pages/Landing/index.js.map +1 -0
  76. package/lib/routes.json +2533 -0
  77. package/lib/seo.d.ts +22 -0
  78. package/lib/seo.d.ts.map +1 -0
  79. package/lib/slot-fill/FooterFill.d.ts +3 -0
  80. package/lib/slot-fill/FooterFill.d.ts.map +1 -0
  81. package/lib/slot-fill/FooterFill.js +18 -0
  82. package/lib/slot-fill/FooterFill.js.map +1 -0
  83. package/lib/slot-fill/LogoFill.d.ts +5 -0
  84. package/lib/slot-fill/LogoFill.d.ts.map +1 -0
  85. package/lib/slot-fill/LogoFill.js +74 -0
  86. package/lib/slot-fill/LogoFill.js.map +1 -0
  87. package/lib/slot-fill/consts.d.ts +5 -0
  88. package/lib/slot-fill/consts.d.ts.map +1 -0
  89. package/lib/slot-fill/consts.js +1 -0
  90. package/lib/slot-fill/consts.js.map +1 -0
  91. package/lib/slot-fill/index.d.ts +4 -0
  92. package/lib/slot-fill/index.d.ts.map +1 -0
  93. package/lib/templates/assets/images/add-link-frontend.png +0 -0
  94. package/lib/templates/assets/images/add-package-backend.png +0 -0
  95. package/lib/templates/assets/images/add-to-backend-module.png +0 -0
  96. package/lib/templates/assets/images/add-upload-client-frontend.png +0 -0
  97. package/lib/templates/assets/images/additional-parameters.png +0 -0
  98. package/lib/templates/assets/images/aeh-implementation.png +0 -0
  99. package/lib/templates/assets/images/aeh-usage.png +0 -0
  100. package/lib/templates/assets/images/apollo-client/recommendation_cache_mgmt.png +0 -0
  101. package/lib/templates/assets/images/app-deploy-new-version/jenkins1.PNG +0 -0
  102. package/lib/templates/assets/images/app-deploy-new-version/jenkins2.PNG +0 -0
  103. package/lib/templates/assets/images/auth-wrapper-code.png +0 -0
  104. package/lib/templates/assets/images/cdebase.png +0 -0
  105. package/lib/templates/assets/images/cdm-locales-directory.png +0 -0
  106. package/lib/templates/assets/images/client-settings.png +0 -0
  107. package/lib/templates/assets/images/codegen_file_update.png +0 -0
  108. package/lib/templates/assets/images/configuration.png +0 -0
  109. package/lib/templates/assets/images/copy-plugin.png +0 -0
  110. package/lib/templates/assets/images/docusaurus.png +0 -0
  111. package/lib/templates/assets/images/error-link.png +0 -0
  112. package/lib/templates/assets/images/error-sample.png +0 -0
  113. package/lib/templates/assets/images/extension copy.png +0 -0
  114. package/lib/templates/assets/images/extension.png +0 -0
  115. package/lib/templates/assets/images/graphql/graphql-folder-backend.png +0 -0
  116. package/lib/templates/assets/images/graphql/graphql-folder-with-gql.png +0 -0
  117. package/lib/templates/assets/images/i18n-config.png +0 -0
  118. package/lib/templates/assets/images/image.png +0 -0
  119. package/lib/templates/assets/images/logo.svg +10 -0
  120. package/lib/templates/assets/images/logo1.svg +1 -0
  121. package/lib/templates/assets/images/modify-upload-false-server.png +0 -0
  122. package/lib/templates/assets/images/navigation-auth-enabled.png +0 -0
  123. package/lib/templates/assets/images/org-dashboard-navigation.png +0 -0
  124. package/lib/templates/assets/images/org-navigation.png +0 -0
  125. package/lib/templates/assets/images/preferences_graphql_type.png +0 -0
  126. package/lib/templates/assets/images/provider.png +0 -0
  127. package/lib/templates/assets/images/route-config.png +0 -0
  128. package/lib/templates/assets/images/service-accounts.png +0 -0
  129. package/lib/templates/assets/images/source-code/source-code-environments.png +0 -0
  130. package/lib/templates/assets/images/source-code/source-code-organization.png +0 -0
  131. package/lib/templates/assets/images/spin-clone-develop-deployment/jenkins-changes.png +0 -0
  132. package/lib/templates/assets/images/spin-clone-develop-deployment/lerna-changes.png +0 -0
  133. package/lib/templates/assets/images/spin-clone-develop-deployment/root-package-json-changes.png +0 -0
  134. package/lib/templates/assets/images/spin-clone-develop-deployment/values-dev-changes.png +0 -0
  135. package/lib/templates/assets/images/sso-mappers.png +0 -0
  136. package/lib/templates/assets/images/sso-picture-mapper.png +0 -0
  137. package/lib/templates/assets/images/sso-settings.png +0 -0
  138. package/lib/templates/assets/images/timesheet_apollo_cache.png +0 -0
  139. package/lib/templates/assets/images/timesheet_query.png +0 -0
  140. package/lib/templates/assets/images/tutorial/docsVersionDropdown.png +0 -0
  141. package/lib/templates/assets/images/tutorial/localeDropdown.png +0 -0
  142. package/lib/templates/assets/images/unauthenticated.png +0 -0
  143. package/lib/templates/assets/images/undraw_docusaurus_mountain.svg +170 -0
  144. package/lib/templates/assets/images/undraw_docusaurus_react.svg +169 -0
  145. package/lib/templates/assets/images/undraw_docusaurus_tree.svg +1 -0
  146. package/lib/templates/assets/images/vite-plugin-config.png +0 -0
  147. package/lib/templates/content/docs/Generators/Project/generate-fullproject.md +12 -0
  148. package/lib/templates/content/docs/LLM/Logger.llm.md +194 -0
  149. package/lib/templates/content/docs/LLM/backend-proxies-services-llm.md +2687 -0
  150. package/lib/templates/content/docs/LLM/backend-service-llm.md +3384 -0
  151. package/lib/templates/content/docs/LLM/db_migration_llm.md +954 -0
  152. package/lib/templates/content/docs/LLM/frontend/REMIX-15.3-upgrade-llm.md +1245 -0
  153. package/lib/templates/content/docs/LLM/inngest/INNGEST_FUNCTION_DEVELOPMENT_GUIDE_LLM.md +1241 -0
  154. package/lib/templates/content/docs/LLM/inngest/INNGEST_NAMESPACE_LLM.md +384 -0
  155. package/lib/templates/content/docs/LLM/llm_workflow_namespace.md +384 -0
  156. package/lib/templates/content/docs/LLM/organization-components-form-llm.md +1395 -0
  157. package/lib/templates/content/docs/LLM/page-component-llm.md +173 -0
  158. package/lib/templates/content/docs/LLM/preferences-settings-llm.md +2781 -0
  159. package/lib/templates/content/docs/LLM/tailwind-css-llm.md +502 -0
  160. package/lib/templates/content/docs/UI/SchemaBasedUI.md +334 -0
  161. package/lib/templates/content/docs/UI/SlotFillComponent.md +334 -0
  162. package/lib/templates/content/docs/adminide-modules/account/auth0-login.md +31 -0
  163. package/lib/templates/content/docs/adminide-modules/account/index.md +14 -0
  164. package/lib/templates/content/docs/adminide-modules/account/keycloak-remix-setup.md +86 -0
  165. package/lib/templates/content/docs/adminide-modules/account/remix-auth-setup.md +79 -0
  166. package/lib/templates/content/docs/adminide-modules/account/various-auth-qatest.md +157 -0
  167. package/lib/templates/content/docs/adminide-modules/api-builders/graphql.md +906 -0
  168. package/lib/templates/content/docs/adminide-modules/billing/payments/index.md +14 -0
  169. package/lib/templates/content/docs/adminide-modules/billing/payments/stripe/index.md +14 -0
  170. package/lib/templates/content/docs/adminide-modules/billing/payments/stripe/settingup-stripe-locally.md +25 -0
  171. package/lib/templates/content/docs/adminide-modules/billing/tier-config.md +293 -0
  172. package/lib/templates/content/docs/adminide-modules/connectors/Connector.md +207 -0
  173. package/lib/templates/content/docs/adminide-modules/file-upload/index.md +16 -0
  174. package/lib/templates/content/docs/adminide-modules/file-upload/setup.md +435 -0
  175. package/lib/templates/content/docs/adminide-modules/file-upload/upload-file-using-signed-url.md +161 -0
  176. package/lib/templates/content/docs/adminide-modules/preferences/AddAdditionalPermissions.md +151 -0
  177. package/lib/templates/content/docs/adminide-modules/preferences/Configuration.md +241 -0
  178. package/lib/templates/content/docs/adminide-modules/preferences/Policy-Configuration.md +61 -0
  179. package/lib/templates/content/docs/adminide-modules/preferences/UI-components/ResourceSettingsLoader.md +319 -0
  180. package/lib/templates/content/docs/adminide-modules/preferences/contribute_scope_target.md +280 -0
  181. package/lib/templates/content/docs/adminide-modules/preferences/generate-urii.md +94 -0
  182. package/lib/templates/content/docs/adminide-modules/preferences/index.md +28 -0
  183. package/lib/templates/content/docs/adminide-modules/preferences/machine-configuration.md +157 -0
  184. package/lib/templates/content/docs/adminide-modules/preferences/pageSettings/generateCdecodeUri.md +1289 -0
  185. package/lib/templates/content/docs/adminide-modules/preferences/pageSettings/migratingFromUseSettings.md +215 -0
  186. package/lib/templates/content/docs/adminide-modules/preferences/permissions/Roles-Permissions.md +72 -0
  187. package/lib/templates/content/docs/adminide-modules/preferences/permissions/settingUserPermissions.md +139 -0
  188. package/lib/templates/content/docs/adminide-modules/preferences/preference-dependency.md +138 -0
  189. package/lib/templates/content/docs/adminide-modules/preferences/route-based-configuration.md +41 -0
  190. package/lib/templates/content/docs/adminide-modules/preferences/schema-configuration.md +71 -0
  191. package/lib/templates/content/docs/adminide-modules/preferences/supported.md +24 -0
  192. package/lib/templates/content/docs/adminide-modules/preferences/useSettingsLoader.md +248 -0
  193. package/lib/templates/content/docs/adminide-modules/project-tools/auth-providers.md +1317 -0
  194. package/lib/templates/content/docs/adminide-modules/project-tools/keycloak-guide.md +543 -0
  195. package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenant-based-authentication.md +846 -0
  196. package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenant-management.md +708 -0
  197. package/lib/templates/content/docs/adminide-modules/project-tools/tenant-management/tenants.md +1117 -0
  198. package/lib/templates/content/docs/chrome-extension/index.md +14 -0
  199. package/lib/templates/content/docs/chrome-extension/setup.md +30 -0
  200. package/lib/templates/content/docs/contributing/adding-package.md +23 -0
  201. package/lib/templates/content/docs/contributing/adding_new_modules.md +99 -0
  202. package/lib/templates/content/docs/contributing/architecture-updates.md +19 -0
  203. package/lib/templates/content/docs/contributing/avoid-using-promises-ui.md +116 -0
  204. package/lib/templates/content/docs/contributing/coding-guidelines.md +111 -0
  205. package/lib/templates/content/docs/contributing/do-and-dont.md +42 -0
  206. package/lib/templates/content/docs/contributing/faq.md +22 -0
  207. package/lib/templates/content/docs/contributing/folder-setup/browser.md +12 -0
  208. package/lib/templates/content/docs/contributing/folder-setup/config.md +12 -0
  209. package/lib/templates/content/docs/contributing/folder-setup/containers-server.md +12 -0
  210. package/lib/templates/content/docs/contributing/folder-setup/core.md +12 -0
  211. package/lib/templates/content/docs/contributing/folder-setup/graphql.md +12 -0
  212. package/lib/templates/content/docs/contributing/folder-setup/index.md +30 -0
  213. package/lib/templates/content/docs/contributing/folder-setup/module.md +12 -0
  214. package/lib/templates/content/docs/contributing/folder-setup/server.md +12 -0
  215. package/lib/templates/content/docs/contributing/folder-setup/services.md +12 -0
  216. package/lib/templates/content/docs/contributing/folder-setup/store.md +12 -0
  217. package/lib/templates/content/docs/contributing/frontend-coding.md +30 -0
  218. package/lib/templates/content/docs/contributing/git-subtree-sharing.md +73 -0
  219. package/lib/templates/content/docs/contributing/graphql-subscriptions.md +69 -0
  220. package/lib/templates/content/docs/contributing/how-to-contribute.md +30 -0
  221. package/lib/templates/content/docs/contributing/how_to_check_pure_esm.md +29 -0
  222. package/lib/templates/content/docs/contributing/index.md +60 -0
  223. package/lib/templates/content/docs/contributing/installation-issues.md +23 -0
  224. package/lib/templates/content/docs/contributing/keyboard-shortcut.md +131 -0
  225. package/lib/templates/content/docs/contributing/language/locale-support.md +12 -0
  226. package/lib/templates/content/docs/contributing/lerna-build-tools.md +516 -0
  227. package/lib/templates/content/docs/contributing/lerna-yarn-workspaces.md +95 -0
  228. package/lib/templates/content/docs/contributing/lint-and-formatter.md +20 -0
  229. package/lib/templates/content/docs/contributing/mobile-setup.md +16 -0
  230. package/lib/templates/content/docs/contributing/project-setup.md +233 -0
  231. package/lib/templates/content/docs/contributing/react/index.md +14 -0
  232. package/lib/templates/content/docs/contributing/react/lazy-component.md +70 -0
  233. package/lib/templates/content/docs/contributing/run-various-options.md +124 -0
  234. package/lib/templates/content/docs/contributing/schema-first-graphql-types.md +37 -0
  235. package/lib/templates/content/docs/contributing/source-code-organization.md +57 -0
  236. package/lib/templates/content/docs/contributing/staging-docker.md +88 -0
  237. package/lib/templates/content/docs/contributing/third-party/apollo-client-v3-tutorials.md +28 -0
  238. package/lib/templates/content/docs/contributing/third-party/index.md +18 -0
  239. package/lib/templates/content/docs/contributing/typescript-contribution.md +16 -0
  240. package/lib/templates/content/docs/devops/app-deploy-new-version.md +30 -0
  241. package/lib/templates/content/docs/devops/index.md +14 -0
  242. package/lib/templates/content/docs/devops/mobile-jenkins-build.md +40 -0
  243. package/lib/templates/content/docs/devops/versioning-the-project.md +128 -0
  244. package/lib/templates/content/docs/error-handler/application-error-handler.md +40 -0
  245. package/lib/templates/content/docs/error-handler/error-handling.md +26 -0
  246. package/lib/templates/content/docs/error-handler/index.md +16 -0
  247. package/lib/templates/content/docs/error-handler/logging-errors.md +14 -0
  248. package/lib/templates/content/docs/feature-api/copy-operation.md +427 -0
  249. package/lib/templates/content/docs/feature-api/feature-browser/assets.md +46 -0
  250. package/lib/templates/content/docs/feature-api/feature-browser/auth-permissions.md +12 -0
  251. package/lib/templates/content/docs/feature-api/feature-browser/feature.md +131 -0
  252. package/lib/templates/content/docs/feature-api/feature-browser/index.md +22 -0
  253. package/lib/templates/content/docs/feature-api/feature-browser/routes-menu.md +110 -0
  254. package/lib/templates/content/docs/feature-api/feature-browser/routing-convention.md +124 -0
  255. package/lib/templates/content/docs/feature-api/feature-browser/routing.md +338 -0
  256. package/lib/templates/content/docs/feature-api/feature-mobile/auth-permissions.md +20 -0
  257. package/lib/templates/content/docs/feature-api/feature-mobile/feature.md +130 -0
  258. package/lib/templates/content/docs/feature-api/feature-mobile/index.md +18 -0
  259. package/lib/templates/content/docs/feature-api/feature-mobile/navigation.md +187 -0
  260. package/lib/templates/content/docs/feature-api/feature-server/Scheduling.md +44 -0
  261. package/lib/templates/content/docs/feature-api/feature-server/dataloader.md +320 -0
  262. package/lib/templates/content/docs/feature-api/feature-server/dependency-injection.md +81 -0
  263. package/lib/templates/content/docs/feature-api/feature-server/feature.md +65 -0
  264. package/lib/templates/content/docs/feature-api/feature-server/generic-dataloader.md +135 -0
  265. package/lib/templates/content/docs/feature-api/feature-server/index.md +40 -0
  266. package/lib/templates/content/docs/feature-api/feature-server/migration.md +127 -0
  267. package/lib/templates/content/docs/feature-api/feature-server/mongo-model.md +72 -0
  268. package/lib/templates/content/docs/feature-api/feature-server/permissions.md +12 -0
  269. package/lib/templates/content/docs/feature-api/feature-server/policies.md +57 -0
  270. package/lib/templates/content/docs/feature-api/feature-server/preferences.md +57 -0
  271. package/lib/templates/content/docs/feature-api/feature-server/repositories.md +114 -0
  272. package/lib/templates/content/docs/feature-api/feature-server/resolvers.md +126 -0
  273. package/lib/templates/content/docs/feature-api/feature-server/rules.md +132 -0
  274. package/lib/templates/content/docs/feature-api/feature-server/schema.md +12 -0
  275. package/lib/templates/content/docs/feature-api/feature-server/services.md +102 -0
  276. package/lib/templates/content/docs/feature-api/feature-server/setup-resource-crud.md +359 -0
  277. package/lib/templates/content/docs/feature-api/index.md +18 -0
  278. package/lib/templates/content/docs/graphql/apolloClient-mutation.md +94 -0
  279. package/lib/templates/content/docs/graphql/index.md +14 -0
  280. package/lib/templates/content/docs/graphql/scalars.md +15 -0
  281. package/lib/templates/content/docs/help/index.md +14 -0
  282. package/lib/templates/content/docs/help/intro.md +16 -0
  283. package/lib/templates/content/docs/intl/ant-design-menu-translation.md +74 -0
  284. package/lib/templates/content/docs/intl/intl-namespace.md +129 -0
  285. package/lib/templates/content/docs/intl/vite-plugin-intl.md +87 -0
  286. package/lib/templates/content/docs/intl/webpack-plugin-intl.md +12 -0
  287. package/lib/templates/content/docs/intro.md +18 -0
  288. package/lib/templates/content/docs/knowledge/basic-fullstack.md +238 -0
  289. package/lib/templates/content/docs/mailing/index.md +14 -0
  290. package/lib/templates/content/docs/mailing/mailing-template.md +148 -0
  291. package/lib/templates/content/docs/mobile/App-navigation-generator.md +410 -0
  292. package/lib/templates/content/docs/mobile/MobileTestCases.md +264 -0
  293. package/lib/templates/content/docs/mobile/eas-profile-build.md +107 -0
  294. package/lib/templates/content/docs/mobile/expo-push-notification-setup.md +216 -0
  295. package/lib/templates/content/docs/mobile/index.md +14 -0
  296. package/lib/templates/content/docs/mobile/routes.md +83 -0
  297. package/lib/templates/content/docs/organization/adding-account-context.md +116 -0
  298. package/lib/templates/content/docs/organization/adding-org-mobile-navigation.md +22 -0
  299. package/lib/templates/content/docs/organization/adding-org-web-navigation.md +12 -0
  300. package/lib/templates/content/docs/organization/index.md +20 -0
  301. package/lib/templates/content/docs/organization/initialization.md +20 -0
  302. package/lib/templates/content/docs/organization/organization-resource-vs-resource.md +112 -0
  303. package/lib/templates/content/docs/remix/configuration/component-structure-best-practices.md +152 -0
  304. package/lib/templates/content/docs/remix/configuration/configurations.md +218 -0
  305. package/lib/templates/content/docs/remix/configuration/css-import-and-stylesheets.md +142 -0
  306. package/lib/templates/content/docs/remix/configuration/dont-subcomponent-network.md +166 -0
  307. package/lib/templates/content/docs/remix/configuration/generated-data-loaders.md +122 -0
  308. package/lib/templates/content/docs/remix/configuration/generated-resource-loaders.md +257 -0
  309. package/lib/templates/content/docs/remix/configuration/query-params-generator.md +216 -0
  310. package/lib/templates/content/docs/remix/configuration/routes-extra-icons.md +103 -0
  311. package/lib/templates/content/docs/remix/configuration/routes-json-advanced.md +86 -0
  312. package/lib/templates/content/docs/remix/configuration/routes-json-auth.md +113 -0
  313. package/lib/templates/content/docs/remix/configuration/routes-json-best-practices.md +55 -0
  314. package/lib/templates/content/docs/remix/configuration/routes-json-fields.md +79 -0
  315. package/lib/templates/content/docs/remix/configuration/routes-json-graphql.md +79 -0
  316. package/lib/templates/content/docs/remix/configuration/routes-json-index.md +112 -0
  317. package/lib/templates/content/docs/remix/configuration/routes-json-loaders.md +165 -0
  318. package/lib/templates/content/docs/remix/configuration/routes-json-middleware.md +196 -0
  319. package/lib/templates/content/docs/remix/configuration/routes-json-overview.md +53 -0
  320. package/lib/templates/content/docs/remix/data-loaders.md +43 -0
  321. package/lib/templates/content/docs/remix/devtools/remix-devtools.md +58 -0
  322. package/lib/templates/content/docs/remix/examples/changes-using-servercode.md +79 -0
  323. package/lib/templates/content/docs/remix/extra-icons.md +62 -0
  324. package/lib/templates/content/docs/remix/extra-links.md +65 -0
  325. package/lib/templates/content/docs/remix/generated-data-loaders.md +114 -0
  326. package/lib/templates/content/docs/remix/queryParamsGenerator.md +89 -0
  327. package/lib/templates/content/docs/remix/resources.md +16 -0
  328. package/lib/templates/content/docs/remix/styles.md +132 -0
  329. package/lib/templates/content/docs/remix/wiki.md +12 -0
  330. package/lib/templates/content/docs/security/auth-wrapper/auth-wrapper.md +24 -0
  331. package/lib/templates/content/docs/security/index.md +18 -0
  332. package/lib/templates/content/docs/security/secure-button-mobilenative.md +88 -0
  333. package/lib/templates/content/docs/security/secure-button-web.md +89 -0
  334. package/lib/templates/content/docs/server-side/account-customization.md +82 -0
  335. package/lib/templates/content/docs/server-side/apollo/caching.md +164 -0
  336. package/lib/templates/content/docs/server-side/backend-architecture/FINAL-DECISION.md +209 -0
  337. package/lib/templates/content/docs/server-side/backend-architecture/TRUE-FINAL-ARCHITECTURE.md +603 -0
  338. package/lib/templates/content/docs/server-side/backend-architecture/index1.md +0 -0
  339. package/lib/templates/content/docs/server-side/backend-coding.md +839 -0
  340. package/lib/templates/content/docs/server-side/e2b/manageing-template.md +197 -0
  341. package/lib/templates/content/docs/server-side/index.md +14 -0
  342. package/lib/templates/content/docs/server-side/inngest-functions-module.md +309 -0
  343. package/lib/templates/content/docs/server-side/listen-stripe-events.md +43 -0
  344. package/lib/templates/content/docs/server-side/slug-service.md +323 -0
  345. package/lib/templates/content/docs/tests/index.md +18 -0
  346. package/lib/templates/content/docs/tests/jest-test-debug-vscode.md +40 -0
  347. package/lib/templates/content/docs/tests/known-errors.md +116 -0
  348. package/lib/templates/content/docs/tests/service-test-template.md +118 -0
  349. package/lib/templates/content/docs/tests/test-setup.md +93 -0
  350. package/lib/templates/content/docs/xstate.md +23 -0
  351. package/lib/types.d.ts +37 -0
  352. package/lib/types.d.ts.map +1 -0
  353. package/lib/utils/docsNavigation.d.ts +9 -0
  354. package/lib/utils/docsNavigation.d.ts.map +1 -0
  355. package/lib/utils/docsNavigation.js +37 -0
  356. package/lib/utils/docsNavigation.js.map +1 -0
  357. package/lib/utils/helpCenterUtils.d.ts +26 -0
  358. package/lib/utils/helpCenterUtils.d.ts.map +1 -0
  359. package/lib/utils/index.d.ts +3 -0
  360. package/lib/utils/index.d.ts.map +1 -0
  361. package/lib/utils/index.js +3 -0
  362. package/lib/utils/index.js.map +1 -0
  363. package/lib/utils/markdownLoader.d.ts +36 -0
  364. package/lib/utils/markdownLoader.d.ts.map +1 -0
  365. package/lib/utils/markdownLoader.js +2242 -0
  366. package/lib/utils/markdownLoader.js.map +1 -0
  367. package/package.json +71 -0
@@ -0,0 +1,130 @@
1
+ ---
2
+ meta:
3
+ title: Feature Mobile API
4
+ description: Feature Mobile API
5
+ date: '2023-06-02T00:00:00'
6
+ updated: '2024-06-02T00:00:00'
7
+ excerpt: Feature Mobile API...
8
+ headers:
9
+ Cache-Control: no-cache
10
+ ---
11
+
12
+ # Feature Mobile API
13
+
14
+ Similar to Feature Browser API, the backend Feature API support all that need to run the backend application..
15
+
16
+ It is opiniated and it supports
17
+
18
+ - react-native
19
+ - expo
20
+ - apollo-client
21
+ - redux-observable
22
+ - redux
23
+ - redux-persist
24
+ - react-navigation
25
+
26
+ Components are rendered only through `react-navigation`, for that we pass `routeConfig`.
27
+
28
+ Dynamic Components are provided using `slot-fill` logic using `componentFillPlugins` configuration.
29
+
30
+ Third-party Scripts can be inserted into HTML page as well.
31
+
32
+ Each of these packaged module is used in the `mobile-device` like below
33
+
34
+ ```js
35
+ import counterModule from '@sample-stack/counter-module-mobile';
36
+ import accountModule from '@sample-stack/account-module-mobile';
37
+ import paymentModule from '@sample-stack/payment-module-mobile';
38
+
39
+ const features = new Feature(FeatureWithRouterFactory, counterModule, accountModule, paymentModule);
40
+ ```
41
+
42
+ The `mobile-device` have all required logic to consolidate the `reducers`, `epics`, `apollo-client configuration`, `react-router configuration` etc to run the application.
43
+
44
+ For example provide all the required configuration to the `Feature` like below.
45
+
46
+ ```js
47
+ const module = new Feature({
48
+ /**
49
+ Customizing ID in the apollo cache.
50
+ **/
51
+ dataIdFromObject,
52
+ /**
53
+ load apollo-client state management.
54
+ **/
55
+ clientStateParams: { resolvers, typeDefs: schema },
56
+ /**
57
+ load redux-observables to manage the client state.
58
+ **/
59
+ epic: [onUserAccountNotFound],
60
+ /**
61
+ load react-router configuration to display component based on navigation.
62
+ for more information check [Routing](./routing.mx)
63
+ **/
64
+ routeConfig: filteredRoutes,
65
+ componentFillPlugins: [
66
+ {
67
+ name: 'teams-contribution',
68
+ render: TeamsContribution,
69
+ },
70
+ ],
71
+ createContainerFunc: [Auth0Module],
72
+ /**
73
+ load reducers to the Redux Store when this Feature Module is used.
74
+ **/
75
+ reducer: { user: userReducer, redirectRoutes: redirectRoutesReducer, authErrors: authErrorsReducer },
76
+ /**
77
+ By default all redux state is persisted using redux-persist, if you need to manipulate the persist state
78
+ add configuration here.
79
+ **/
80
+ reduxPersistTransforms: [blacklistErrorFilter, blacklistUserFilter],
81
+ });
82
+ ```
83
+
84
+ We don't need to put the `redux` store creation nor apollo-client setup in the Module as this action will be taken care at the higher level (frontend-server).
85
+
86
+ ### Client State Management
87
+
88
+ Applciation state can be managed using Apollo Link State and Redux.
89
+
90
+ #### Redux
91
+
92
+ Support [redux's reducers](https://redux.js.org/usage/structuring-reducers/basic-reducer-structure)
93
+ Example:
94
+
95
+ ```js
96
+ const module = new Feature({
97
+ reducer: { user: userReducer, redirectRoutes: redirectRoutesReducer, authErrors: authErrorsReducer },
98
+ ....
99
+ });
100
+ ```
101
+
102
+ #### Apollo Client State Management
103
+
104
+ Support [interacting with local data in Apollo Client](https://www.apollographql.com/docs/react/local-state/local-state-management/)
105
+
106
+ Example:
107
+
108
+ ```js
109
+ const module = new Feature({
110
+ clientStateParams: { resolvers, typeDefs: schema, typePolicies },
111
+ ....
112
+ });
113
+ ```
114
+
115
+ ##### dataIdFromObject
116
+
117
+ Support cusotmizing the ID in the apollo cache. More infromation is [here](https://www.apollographql.com/docs/react/caching/cache-configuration/#dataidfromobject)
118
+
119
+ #### Epic
120
+
121
+ Support [redux-observable](https://redux-observable.js.org/docs/basics/Epics.html)
122
+
123
+ Example:
124
+
125
+ ```js
126
+ const module = new Feature({
127
+ epic: [onUserAccountNotFound],
128
+ ....
129
+ });
130
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ meta:
3
+ title: Feature Mobile
4
+ description: Feature Mobile
5
+ date: '2023-06-02T00:00:00'
6
+ updated: '2024-06-02T00:00:00'
7
+ excerpt: Feature Mobile...
8
+ headers:
9
+ Cache-Control: no-cache
10
+ ---
11
+
12
+ ## Feature Mobile
13
+
14
+ **[Feature Mobile API](/docs/feature-api/feature-mobile/feature)**
15
+
16
+ **[Navigation](/docs/feature-api/feature-mobile/navigation)**
17
+
18
+ **[Auth & Permissions](/docs/feature-api/feature-mobile/auth-permissions)**
@@ -0,0 +1,187 @@
1
+ ---
2
+ meta:
3
+ title: Navigation
4
+ description: Navigation
5
+ date: '2023-06-02T00:00:00'
6
+ updated: '2024-06-02T00:00:00'
7
+ excerpt: Navigation...
8
+ headers:
9
+ Cache-Control: no-cache
10
+ ---
11
+
12
+ ## Navigation
13
+
14
+ ## Configuring Navigation
15
+
16
+ Configure through `routeConfig` in the configuration file, the format is an object of routing information.
17
+
18
+ ```js
19
+ const routerConfig1: IRouteData = {
20
+ ['/']: {
21
+ exact: false,
22
+ container: createStackNavigator(),
23
+ name: 'MainStack',
24
+ props: {
25
+ initialRouteName: 'Guest',
26
+ screenOptions: {
27
+ headerShown: false,
28
+ },
29
+ },
30
+ },
31
+ ['//guest']: {
32
+ container: createBottomTabNavigator(),
33
+ exact: false,
34
+ name: 'Guest',
35
+ props: {
36
+ initialRouteName: 'Home',
37
+ screenOptions: {
38
+ headerShown: false,
39
+ tabBarLabel: 'About',
40
+ // tabBarIcon: ({ color }) => <Ionicons name="person" size={24} color={color} />,
41
+ },
42
+ },
43
+ },
44
+ ['//guest/home']: {
45
+ name: 'Home',
46
+ props: {
47
+ initialParams: {},
48
+ component: MyComponent,
49
+ options: {
50
+ headerShown: true,
51
+ tabBarLabel: 'Home',
52
+ headerTitle: 'Home',
53
+ // tabBarIcon: ({ color }) => <Ionicons name="home" size={24} color={color} />,
54
+ },
55
+ },
56
+ },
57
+ ['//guest/about']: {
58
+ exact: false,
59
+ container: createStackNavigator(),
60
+ name: 'About',
61
+ props: {
62
+ initialRouteName: 'Hello',
63
+ },
64
+ },
65
+ ['//guest/about/hello']: {
66
+ name: 'Hello',
67
+ props: {
68
+ initialParams: {},
69
+ component: MyComponent,
70
+ options: {
71
+ headerTitle: 'About',
72
+ },
73
+ },
74
+ },
75
+ ['//guest/about/personalinfo']: {
76
+ name: 'PersonalInfo',
77
+ props: {
78
+ initialParams: { name: 'Test' },
79
+ component: MyComponent,
80
+ options: {
81
+ headerTitle: 'Personal Info',
82
+ },
83
+ },
84
+ },
85
+ ['//setting']: {
86
+ name: 'Setting',
87
+ props: {
88
+ initialParams: {},
89
+ component: MyComponent,
90
+ options: {
91
+ headerShown: true,
92
+ headerTitle: 'Settings',
93
+ headerBackTitle: 'Back',
94
+ },
95
+ },
96
+ exact: false,
97
+ },
98
+ };
99
+ ```
100
+
101
+ It generates
102
+
103
+ ```js
104
+ <StackNavigator
105
+ initialRouteName="Guest"
106
+ screenOptions={
107
+ Object {
108
+ "headerShown": false,
109
+ }
110
+ }
111
+ >
112
+ <Screen
113
+ name="MainStack.Guest"
114
+ >
115
+ <BottomTabNavigator
116
+ initialRouteName="Home"
117
+ screenOptions={
118
+ Object {
119
+ "headerShown": false,
120
+ "tabBarLabel": "About",
121
+ }
122
+ }
123
+ >
124
+ <Screen
125
+ initialParams={Object {}}
126
+ name="MainStack.Guest.Home"
127
+ options={
128
+ Object {
129
+ "headerShown": true,
130
+ "headerTitle": "Home",
131
+ "tabBarLabel": "Home",
132
+ }
133
+ }
134
+ >
135
+ [Function]
136
+ </Screen>
137
+ <Screen
138
+ name="MainStack.Guest.About"
139
+ >
140
+ <StackNavigator
141
+ initialRouteName="Hello"
142
+ >
143
+ <Screen
144
+ initialParams={Object {}}
145
+ name="MainStack.Guest.About.Hello"
146
+ options={
147
+ Object {
148
+ "headerTitle": "About",
149
+ }
150
+ }
151
+ >
152
+ [Function]
153
+ </Screen>
154
+ <Screen
155
+ initialParams={
156
+ Object {
157
+ "name": "Test",
158
+ }
159
+ }
160
+ name="MainStack.Guest.About.PersonalInfo"
161
+ options={
162
+ Object {
163
+ "headerTitle": "Personal Info",
164
+ }
165
+ }
166
+ >
167
+ [Function]
168
+ </Screen>
169
+ </StackNavigator>
170
+ </Screen>
171
+ </BottomTabNavigator>
172
+ </Screen>
173
+ <Screen
174
+ initialParams={Object {}}
175
+ name="MainStack.Setting"
176
+ options={
177
+ Object {
178
+ "headerBackTitle": "Back",
179
+ "headerShown": true,
180
+ "headerTitle": "Settings",
181
+ }
182
+ }
183
+ >
184
+ [Function]
185
+ </Screen>
186
+ </StackNavigator>
187
+ ```
@@ -0,0 +1,44 @@
1
+ ---
2
+ meta:
3
+ title: Scheduling / Cron Jobs
4
+ description: Scheduling / Cron Jobs
5
+ date: '2023-06-02T00:00:00'
6
+ updated: '2024-06-02T00:00:00'
7
+ excerpt: Scheduling / Cron Jobs...
8
+ headers:
9
+ Cache-Control: no-cache
10
+ ---
11
+
12
+ # Scheduling / Cron Jobs
13
+
14
+ ## What are Cron Jobs
15
+
16
+ Cron jobs are scheduled tasks that are run automatically at specified intervals. Cron jobs are an essential component of many applications and software systems. They allow developers and system administrators to schedule and automate recurring tasks that need to be performed on a regular basis. These tasks can be anything from running a script to sending an email to cleaning up temporary files.
17
+
18
+ For example, an e-commerce website might use a cron job to perform a daily inventory update, which would update the stock levels of each product based on the sales from the previous day. A social media platform might use a cron job to generate a weekly activity report for each user, which would summarize their engagement with the platform over the past week.
19
+ Cron jobs are needed in applications because they provide a reliable and efficient way to automate repetitive tasks, reducing the workload on human operators and improving the overall efficiency of the system. They can also help ensure that critical tasks are performed on time, reducing the risk of errors or delays that could impact the user experience.
20
+
21
+ In summary, cron jobs are an important tool for developers and system administrators that can help improve the performance, reliability, and functionality of an application.
22
+
23
+ ## Adding a Cron Job
24
+
25
+ There are numerous ways to add cron jobs to your Node JS application, we are defining them
26
+ using the [Moleculer Services](https://moleculer.services/). Creating cron jobs is simple using the
27
+ Moleculer Service and [Cron Tasker](https://www.npmjs.com/package/@skoropletov/moleculer-cron-tasks.
28
+
29
+ ```typescript
30
+ this.broker.createService({
31
+ name: 'cron-service', // Name of Moleculer Service
32
+ mixins: [CronTasks], // Cron Tasker Plugin to enable Cron Jobs
33
+ tasks: [
34
+ {
35
+ name: 'log-seconds', // Cron Task Name
36
+ cronTime: '* * * * * *', // Unix Cron Schedule
37
+ callback: (): void => {
38
+ // Call back function to run on each job
39
+ console.log('[!] second passed');
40
+ },
41
+ },
42
+ ],
43
+ });
44
+ ```
@@ -0,0 +1,320 @@
1
+ ---
2
+ meta:
3
+ title: Dataloader
4
+ description: Dataloader
5
+ date: '2023-06-02T00:00:00'
6
+ updated: '2024-06-02T00:00:00'
7
+ excerpt: Dataloader...
8
+ headers:
9
+ Cache-Control: no-cache
10
+ ---
11
+
12
+ # Dataloader
13
+
14
+ ### How Dataloaders are Used and Their Benefits
15
+
16
+ Based on [PR #2716](https://github.com/CDEBase/adminIde-stack/pull/2716), dataloaders were introduced to optimize GraphQL performance by **batching and caching** requests. This document provides an in-depth explanation of their implementation, usage, and advantages.
17
+
18
+ ---
19
+
20
+ #### What is a DataLoader?
21
+
22
+ A **DataLoader** is a utility for batching and caching requests in a GraphQL environment. It allows efficient resolution of GraphQL queries by queuing up multiple requests during execution and batching them into a single query to the database or API.
23
+
24
+ ---
25
+
26
+ #### Implementation of Dataloaders
27
+
28
+ 1. **Defining the DataLoader Type**:
29
+ - A specific `ITeamsDataLoader` type is created to handle team entities.
30
+ - This type is derived from a generic `IDataLoader` interface for flexibility and reuse.
31
+
32
+ ```typescript
33
+ export type ITeamsDataLoader = IDataLoader<ITeam>;
34
+ ```
35
+
36
+ 2. **Integrating Dataloaders in Service Interfaces**:
37
+ - To ensure seamless access throughout the application, the `teamsDataLoader` is added to the `IServices` interface.
38
+ - This allows dependency injection and promotes consistency.
39
+
40
+ ```typescript
41
+ export interface IServices {
42
+ teamService: ITeamService;
43
+ accountUserDataLoader: IAccountUserDataLoader;
44
+ teamsDataLoader: ITeamsDataLoader;
45
+ }
46
+ ```
47
+
48
+ 3. **Creating the DataLoader Instance**:
49
+ - The DataLoader instance is initialized to handle batching and caching logic.
50
+ - Below is an example of how a DataLoader might be initialized and how batched results are mapped back to GraphQL child resolvers:
51
+
52
+ ```typescript
53
+ import DataLoader from 'dataloader';
54
+ import { getTeamsByIds } from './teamRepository';
55
+
56
+ export const createTeamsDataLoader = (): ITeamsDataLoader => {
57
+ return new DataLoader<string, ITeam>(async (teamIds) => {
58
+ // Fetch all teams in a single batch based on provided IDs
59
+ const teams = await getTeamsByIds(teamIds);
60
+
61
+ // Map the fetched teams back to their corresponding IDs
62
+ return teamIds.map((id) => teams.find((team) => team.id === id) || new Error(`Team not found: ${id}`));
63
+ });
64
+ };
65
+ ```
66
+
67
+ **Explanation of Mapping**:
68
+ - **Input**: A list of `teamIds` queued by the DataLoader (e.g., `['team1', 'team2', 'team3']`).
69
+ - **Process**: Fetch the data for all `teamIds` in a single query (e.g., `getTeamsByIds(teamIds)`).
70
+ - **Mapping Back**:
71
+ - Use the input `teamIds` to order the results so they correspond to the original request order.
72
+ - If a team is missing, return an error or handle it gracefully.
73
+
74
+ This ensures that the batched result aligns with the request order, even if the database query returns the results in a different sequence.
75
+
76
+ 4. **Using the DataLoader in GraphQL Resolvers**:
77
+ - Resolvers can now delegate data fetching to the DataLoader, ensuring efficient data retrieval and proper mapping back to the GraphQL schema.
78
+
79
+ ```typescript
80
+ const resolvers = {
81
+ Query: {
82
+ team: async (_: any, { id }: { id: string }, { services }: { services: IServices }) => {
83
+ return services.teamsDataLoader.load(id); // Delegates to the DataLoader
84
+ },
85
+ },
86
+ User: {
87
+ teams: async (parent: IUser, _: any, { services }: { services: IServices }) => {
88
+ // Batch fetch all team IDs associated with the user
89
+ return services.teamsDataLoader.loadMany(parent.teamIds);
90
+ },
91
+ },
92
+ };
93
+ ```
94
+
95
+ ---
96
+
97
+ #### Benefits of Using Dataloaders
98
+
99
+ 1. **Batching Requests**:
100
+ - Groups multiple identical or related queries into a single request.
101
+ - Reduces the overhead caused by multiple queries, improving efficiency.
102
+
103
+ Example:
104
+ Without DataLoader:
105
+
106
+ ```
107
+ Query: getTeam(1)
108
+ Query: getTeam(2)
109
+ Query: getTeam(3)
110
+ ```
111
+
112
+ With DataLoader:
113
+
114
+ ```
115
+ Single Query: getTeams([1, 2, 3])
116
+ ```
117
+
118
+ 2. **Caching**:
119
+ - Automatically caches the results of requests made during the same execution cycle.
120
+ - Prevents fetching the same data more than once, reducing redundant calls.
121
+
122
+ Example:
123
+
124
+ ```
125
+ First Request: getTeam(1) -> Fetch from database
126
+ Second Request: getTeam(1) -> Return from cache
127
+ ```
128
+
129
+ 3. **Improved Performance**:
130
+ - Fewer queries mean reduced latency and lower server/database load.
131
+ - Scales better as the number of concurrent requests increases.
132
+
133
+ 4. **Solves the N+1 Problem**:
134
+ - In GraphQL, resolvers often make repetitive requests (N+1 Problem). DataLoader batches these queries, solving this inefficiency.
135
+
136
+ Example:
137
+
138
+ ```
139
+ Query: Get all teams for users
140
+ Team Resolvers: Fetch team for each user -> N queries
141
+ With DataLoader: Fetch all teams in one query
142
+ ```
143
+
144
+ 5. **Mapping Ensures Correctness**:
145
+ - By maintaining a consistent mapping of inputs to outputs, DataLoader guarantees that each GraphQL child resolver receives the data it requested, even if some IDs are missing.
146
+
147
+ ---
148
+
149
+ ### Key Steps to Map Batched Results Back to GraphQL Children
150
+
151
+ 1. **Use the Input IDs for Consistent Ordering**:
152
+ - The input IDs passed to the DataLoader (`teamIds`) must dictate the order of the output array.
153
+
154
+ 2. **Handle Missing Data Gracefully**:
155
+ - If the requested ID is not found in the fetched data, return an error or null to the corresponding resolver.
156
+ - Example:
157
+ ```typescript
158
+ teamIds.map((id) => teams.find((team) => team.id === id) || new Error(`Team not found: ${id}`));
159
+ ```
160
+
161
+ 3. **Leverage `loadMany` for Collections**:
162
+ - When fetching collections of data (e.g., all teams for a user), use `loadMany` to handle multiple IDs at once.
163
+ - Example:
164
+ ```typescript
165
+ const teamData = await services.teamsDataLoader.loadMany(parent.teamIds);
166
+ ```
167
+
168
+ ---
169
+
170
+ ### Example Usage in GraphQL Context
171
+
172
+ Here’s how DataLoader optimizes GraphQL child resolvers:
173
+
174
+ ```graphql
175
+ query {
176
+ user(id: "123") {
177
+ id
178
+ name
179
+ teams {
180
+ id
181
+ name
182
+ }
183
+ }
184
+ }
185
+ ```
186
+
187
+ - The `User` resolver fetches `teamIds` for the user.
188
+ - The `teams` field uses `loadMany` to batch all `teamIds` into a single request.
189
+ - DataLoader maps the results back to each team field for the user in the correct order.
190
+
191
+ ---
192
+
193
+ ### Changes Required to Add DataLoader to Existing Code
194
+
195
+ #### **Steps to Integrate DataLoader**
196
+
197
+ 1. **Create the DataLoader File**:
198
+ - Create a file named `teams-dataloader.ts` for defining the DataLoader logic.
199
+ - This file will contain the initialization and batching logic for the `TeamsDataLoader`.
200
+
201
+ 2. **Modify `types.ts` to Add DataLoader Type**:
202
+ - Update the `TYPES` constant to include a new type for `TeamsDataLoader`.
203
+
204
+ 3. **Update Service Interfaces**:
205
+ - Add the `TeamsDataLoader` to the `IServices` interface, ensuring it can be accessed across the application.
206
+
207
+ 4. **Implement DataLoader in Team Service**:
208
+ - Use the `TeamsDataLoader` in the `ITeamService` implementation for efficient data fetching.
209
+
210
+ 5. **Inject DataLoader in Dependency Container**:
211
+ - Register the `TeamsDataLoader` in your dependency injection container, ensuring it is initialized and injected where required.
212
+
213
+ ### Files Modified for DataLoader Implementation
214
+
215
+ Here is a list of files modified for integrating DataLoader, along with a new file for the `TeamsDataLoader`.
216
+
217
+ ---
218
+
219
+ #### **New File: `teams-dataloader.ts`**
220
+
221
+ Here you can use the `BulkDataLoader` to simplify the boilerplate code.
222
+
223
+ ```typescript
224
+ import { injectable, inject } from 'inversify';
225
+ import { BulkDataLoader } from '@common-stack/store-mongo';
226
+ import { ITeamService, TYPES } from '@adminide-stack/account-api-core';
227
+ import { IAccountTeam as ITeam } from '@adminide-stack/core';
228
+
229
+ @injectable()
230
+ export class TeamsDataLoader extends BulkDataLoader<ITeam & { id: string }> {
231
+ constructor(
232
+ @inject(TYPES.ITeamService)
233
+ teamService: ITeamService,
234
+ ) {
235
+ super(teamService as never); // Pass the teamService to the BulkDataLoader utility
236
+ }
237
+ }
238
+ ```
239
+
240
+ ---
241
+
242
+ #### **Modified File: `types.ts`**
243
+
244
+ ```diff
245
+ export const TYPES = {
246
+ IOrganizationRepository: Symbol('IOrganizationRepository'),
247
+ IOrganizationMicroservice: Symbol('IOrganizationMicroservice'),
248
+ AccountUserDataLoader: Symbol('AccountUserDataLoader'),
249
+ + TeamsDataLoader: Symbol('TeamsDataLoader'),
250
+ };
251
+ ```
252
+
253
+ ---
254
+
255
+ #### **Modified File: `services.ts`**
256
+
257
+ ```diff
258
+ import { IPreferencesService } from '@adminide-stack/core';
259
+ import { IOrganizationService } from './organization-service';
260
+ import { IAccountService } from './account-service';
261
+ import { ITeamsDataLoader, ITeamService } from './team-service';
262
+ import { IAccountUserDataLoader } from './account-user-data-loader';
263
+ import { ICountryService } from '@container-stack/territory';
264
+
265
+ export interface IServices {
266
+ teamService: ITeamService;
267
+ preferenceService?: IPreferencesService;
268
+ countryService?: ICountryService;
269
+ accountUserDataLoader: IAccountUserDataLoader;
270
+ + teamsDataLoader: ITeamsDataLoader;
271
+ }
272
+ ```
273
+
274
+ ---
275
+
276
+ #### **Modified File: `team-service.ts`**
277
+
278
+ ```diff
279
+ import { IBaseService, IDataLoader } from '@common-stack/store-mongo';
280
+
281
+ export type ITeamsDataLoader = IDataLoader<ITeam>;
282
+
283
+ export interface ITeamService extends IBaseService<ITeam> {
284
+ getTeam(id: string): Promise<ITeam>;
285
+
286
+ getTeamByName(orgName: string, teamName: string): Promise<ITeam>;
287
+ }
288
+ ```
289
+
290
+ ---
291
+
292
+ #### **Modified File: Dependency Injection Container**
293
+
294
+ Ensure the `TeamsDataLoader` is registered in your DI container:
295
+
296
+ ```typescript
297
+ container.bind<IDataLoader<ITeam>>(TYPES.TeamsDataLoader).toDynamicValue(() => createTeamsDataLoader());
298
+ ```
299
+
300
+ ## For more details on how to use generic dataloader you can read [Generic Dataloader from common-stac](./generic-dataloader.md)
301
+
302
+ ### Guidelines for Developers
303
+
304
+ 1. **Create a DataLoader for Each Entity**:
305
+ - Define a specific DataLoader type for each data entity (e.g., `ITeamsDataLoader`, `IUsersDataLoader`).
306
+
307
+ 2. **Ensure Proper Mapping in Batch Functions**:
308
+ - Always map the batched results back to the original input keys.
309
+
310
+ 3. **Use Dependency Injection**:
311
+ - Pass DataLoader instances via service interfaces (`IServices`) to ensure easy access across the application.
312
+
313
+ 4. **Gracefully Handle Errors**:
314
+ - Ensure missing or invalid IDs are handled correctly without breaking the execution.
315
+
316
+ ---
317
+
318
+ For more details on implementation, review the [files changed in PR #2716](https://github.com/CDEBase/adminIde-stack/pull/2716/files).
319
+
320
+ ---