@cdmbase/wiki-browser 12.0.18-alpha.10

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,906 @@
1
+ # GraphQL Builder - Comprehensive Documentation
2
+
3
+ ## Overview
4
+
5
+ GraphQL Builder is a powerful, directive-based GraphQL API generation tool that automatically generates Prisma schemas, resolvers, queries, mutations, and DataLoaders from a GraphQL Schema Definition Language (SDL). It provides a visual code editor interface for managing GraphQL projects and enables rapid API development with minimal boilerplate code.
6
+
7
+ ## Key Features
8
+
9
+ ### 1. **Directive-Based Code Generation**
10
+
11
+ - Automatically converts GraphQL SDL to Prisma schema
12
+ - Generates TypeScript resolvers for queries and mutations
13
+ - Creates DataLoaders for efficient data fetching
14
+ - Supports custom directives for extending functionality
15
+
16
+ ### 2. **Visual Code Editor**
17
+
18
+ - Monaco Editor-based IDE for editing GraphQL schemas
19
+ - File tree management for organizing schema, resolvers, and directives
20
+ - Tab-based editing interface
21
+ - Real-time syntax highlighting and validation
22
+ - Auto-save functionality
23
+
24
+ ### 3. **Auto-Generated Queries & Mutations**
25
+
26
+ - Automatically generates CRUD operations for all entity types
27
+ - Supports filtering, pagination, and sorting
28
+ - Generates both single-item and list queries
29
+ - Creates create, update, and delete mutations
30
+
31
+ ### 4. **Custom Directives Support**
32
+
33
+ - Create and manage custom directives via file-based system
34
+ - Directives are stored as TypeScript files in `/directives` folder
35
+ - Automatic directive extraction and compilation
36
+ - Support for directive composition and reuse
37
+
38
+ ### 5. **DataLoader Generation**
39
+
40
+ - Automatically generates DataLoaders for relationships
41
+ - Prevents N+1 query problems
42
+ - Supports both single and batch loading
43
+ - Generated DataLoaders are type-safe and optimized
44
+
45
+ ### 6. **Project Management**
46
+
47
+ - Multi-project support with tenant isolation
48
+ - Project deployment to Express.js servers
49
+ - Environment-specific configurations
50
+ - Connection status monitoring
51
+
52
+ ## Resolvers
53
+
54
+ ### Overview
55
+
56
+ Resolvers are functions that resolve the value for a field in your GraphQL schema. GraphQL Builder automatically generates resolvers for all entity types, handling queries, mutations, and field relationships.
57
+
58
+ ### Types of Resolvers
59
+
60
+ #### 1. Query Resolvers
61
+
62
+ Query resolvers handle read operations. For each entity type, two query resolvers are automatically generated:
63
+
64
+ **Single Item Query (`get{TypeName}`)**
65
+
66
+ - Fetches a single entity by ID
67
+ - Uses Prisma's `findUnique` method
68
+ - Returns `null` if not found
69
+
70
+ **List Query (`getAll{TypeName}s`)**
71
+
72
+ - Fetches multiple entities with filtering and pagination
73
+ - Uses Prisma's `findMany` method
74
+ - Supports `filter`, `limit`, and `offset` arguments
75
+
76
+ **Generated Code Example:**
77
+
78
+ ```typescript
79
+ const queryResolvers = {
80
+ Query: {
81
+ getUser: async (_parent, { id }, _context) => {
82
+ const { prisma } = _context;
83
+ return prisma.user.findUnique({
84
+ where: { id },
85
+ });
86
+ },
87
+ getAllUsers: async (_, args, _context) => {
88
+ const { prisma } = _context;
89
+ const { filter, limit, offset } = args;
90
+ return prisma.user.findMany({
91
+ where: filter || {},
92
+ take: limit || 10,
93
+ skip: offset || 0,
94
+ });
95
+ },
96
+ },
97
+ };
98
+ ```
99
+
100
+ #### 2. Mutation Resolvers
101
+
102
+ Mutation resolvers handle write operations. For each entity type, three mutation resolvers are automatically generated:
103
+
104
+ **Create Mutation (`create{TypeName}`)**
105
+
106
+ - Creates a new entity
107
+ - Uses Prisma's `create` method
108
+ - Accepts `data` argument with entity fields
109
+
110
+ **Update Mutation (`update{TypeName}`)**
111
+
112
+ - Updates an existing entity by ID
113
+ - Uses Prisma's `update` method
114
+ - Accepts `id` and `data` arguments
115
+
116
+ **Delete Mutation (`delete{TypeName}`)**
117
+
118
+ - Deletes an entity by ID
119
+ - Uses Prisma's `delete` method
120
+ - Accepts `id` argument
121
+
122
+ **Generated Code Example:**
123
+
124
+ ```typescript
125
+ const mutationResolvers = {
126
+ Mutation: {
127
+ createUser: async (_parent, args, _context) => {
128
+ const { prisma } = _context;
129
+ return prisma.user.create({
130
+ data: args.data,
131
+ });
132
+ },
133
+ updateUser: async (_parent, { id, data }, _context) => {
134
+ const { prisma } = _context;
135
+ return prisma.user.update({
136
+ where: { id },
137
+ data,
138
+ });
139
+ },
140
+ deleteUser: async (_parent, { id }, _context) => {
141
+ const { prisma } = _context;
142
+ return prisma.user.delete({
143
+ where: { id },
144
+ });
145
+ },
146
+ },
147
+ };
148
+ ```
149
+
150
+ #### 3. Field Resolvers (Type Resolvers)
151
+
152
+ Field resolvers resolve fields on entity types. They are generated for:
153
+
154
+ - **Non-column fields**: Fields without `@column` directive that need custom resolution
155
+ - **DataLoader fields**: Fields with `@useLoader` directive for efficient relationship loading
156
+ - **Computed fields**: Fields that require custom logic
157
+
158
+ **DataLoader Field Resolver Example:**
159
+
160
+ ```typescript
161
+ const typeResolvers = {
162
+ Post: {
163
+ author: (parent, args, context) => {
164
+ const { userAuthorDataLoader } = context;
165
+ return userAuthorDataLoader.load(parent.authorId);
166
+ },
167
+ },
168
+ User: {
169
+ posts: (parent, args, context) => {
170
+ const { userPostsDataLoader } = context;
171
+ const postIds = (parent.postIds || []).filter(Boolean);
172
+ return userPostsDataLoader.loadMany(postIds);
173
+ },
174
+ },
175
+ };
176
+ ```
177
+
178
+ **TODO Field Resolver Example:**
179
+ For fields that need custom implementation but don't have `@useLoader`:
180
+
181
+ ```typescript
182
+ const typeResolvers = {
183
+ User: {
184
+ fullName: (parent, args, context) => {
185
+ // TODO: Implement resolver for fullName
186
+ return null;
187
+ },
188
+ },
189
+ };
190
+ ```
191
+
192
+ ### Resolver Structure
193
+
194
+ All resolvers follow this structure:
195
+
196
+ ```typescript
197
+ export const resolvers = [
198
+ queryResolvers, // Query resolvers
199
+ mutationResolvers, // Mutation resolvers
200
+ typeResolvers, // Field/Type resolvers
201
+ ];
202
+ ```
203
+
204
+ ### Resolver Parameters
205
+
206
+ All resolvers receive three parameters:
207
+
208
+ 1. **`parent`** (or `_parent`): The result from the resolver on the parent field
209
+ 2. **`args`**: Arguments passed to the field
210
+ 3. **`context`** (or `_context`): Context object containing:
211
+ - `prisma`: PrismaClient instance
212
+ - `[DataLoaderName]`: Generated DataLoaders for relationships
213
+ - `user`: Authenticated user (if using `@auth` directive)
214
+ - Other context properties
215
+
216
+ ### Resolver Context
217
+
218
+ The resolver context provides access to:
219
+
220
+ ```typescript
221
+ interface ResolverContext {
222
+ prisma: PrismaClient;
223
+ // Generated DataLoaders
224
+ userAuthorDataLoader?: DataLoader<string, User>;
225
+ postCommentsDataLoader?: DataLoader<string[], Comment[]>;
226
+ // Authentication
227
+ user?: User;
228
+ // Request object
229
+ req?: Express.Request;
230
+ }
231
+ ```
232
+
233
+ ### Customizing Resolvers
234
+
235
+ #### Editing Generated Resolvers
236
+
237
+ The generated `resolvers.ts` file can be edited directly in the editor. You can:
238
+
239
+ 1. **Modify existing resolvers**: Update the generated resolver logic
240
+ 2. **Add custom resolvers**: Add new query/mutation/field resolvers
241
+ 3. **Override defaults**: Replace generated resolvers with custom implementations
242
+
243
+ **Example: Adding Custom Query Resolver**
244
+
245
+ ```typescript
246
+ const queryResolvers = {
247
+ Query: {
248
+ getUser: async (_parent, { id }, _context) => {
249
+ // Generated resolver
250
+ const { prisma } = _context;
251
+ return prisma.user.findUnique({ where: { id } });
252
+ },
253
+ // Custom resolver
254
+ getUserByEmail: async (_parent, { email }, _context) => {
255
+ const { prisma } = _context;
256
+ return prisma.user.findUnique({ where: { email } });
257
+ },
258
+ searchUsers: async (_parent, { query }, _context) => {
259
+ const { prisma } = _context;
260
+ return prisma.user.findMany({
261
+ where: {
262
+ OR: [{ name: { contains: query } }, { email: { contains: query } }],
263
+ },
264
+ });
265
+ },
266
+ },
267
+ };
268
+ ```
269
+
270
+ **Example: Adding Custom Field Resolver**
271
+
272
+ ```typescript
273
+ const typeResolvers = {
274
+ User: {
275
+ // Generated DataLoader resolver
276
+ posts: (parent, args, context) => {
277
+ const { userPostsDataLoader } = context;
278
+ return userPostsDataLoader.loadMany(parent.postIds || []);
279
+ },
280
+ // Custom computed field
281
+ postCount: async (parent, args, context) => {
282
+ const { prisma } = context;
283
+ return prisma.post.count({
284
+ where: { authorId: parent.id },
285
+ });
286
+ },
287
+ // Custom field with business logic
288
+ isActive: (parent) => {
289
+ return parent.status === 'active' && parent.emailVerified;
290
+ },
291
+ },
292
+ };
293
+ ```
294
+
295
+ #### Resolver Best Practices
296
+
297
+ 1. **Use DataLoaders for Relationships**: Always use `@useLoader` directive for relationships to prevent N+1 queries
298
+ 2. **Keep Resolvers Thin**: Move business logic to service layers
299
+ 3. **Handle Errors**: Wrap resolver logic in try-catch blocks
300
+ 4. **Validate Input**: Validate arguments before database operations
301
+ 5. **Use Context**: Access shared resources through context (prisma, user, etc.)
302
+ 6. **Async/Await**: Use async/await for database operations
303
+ 7. **Type Safety**: Leverage TypeScript types for resolver parameters and return values
304
+
305
+ ### Resolver Generation Rules
306
+
307
+ #### Entity Types
308
+
309
+ - All entity types (`@entity` directive) get query and mutation resolvers
310
+ - Field resolvers are generated for non-column fields and DataLoader fields
311
+ - ID field resolvers are skipped (handled by Prisma)
312
+
313
+ #### Abstract Entities
314
+
315
+ - Abstract entities (`@abstractEntity` directive) get query and mutation resolvers
316
+ - Implementing types inherit resolvers from abstract entity
317
+ - Polymorphic queries are generated
318
+
319
+ #### Non-Entity Types
320
+
321
+ - Non-entity object types get stub resolvers with TODO comments
322
+ - Stub resolvers return `null` by default
323
+ - You must implement these manually
324
+
325
+ ### Resolver File Location
326
+
327
+ Generated resolvers are saved in:
328
+
329
+ ```
330
+ project-name/resolvers.ts
331
+ ```
332
+
333
+ This file is editable in the GraphQL Builder editor and persists across deployments.
334
+
335
+ ### Resolver Regeneration
336
+
337
+ Resolvers are regenerated when:
338
+
339
+ - Schema changes are saved
340
+ - Project is deployed
341
+ - Types are generated manually
342
+
343
+ **Important**: Custom resolver modifications are preserved during regeneration. Only new resolvers are added; existing ones are not overwritten unless the schema structure changes significantly.
344
+
345
+ ## Supported Directives
346
+
347
+ ### Core Directives
348
+
349
+ #### `@entity`
350
+
351
+ Marks a GraphQL type as a database entity. Only types with this directive are included in Prisma schema generation.
352
+
353
+ ```graphql
354
+ type User @entity {
355
+ id: ID! @id
356
+ name: String! @column
357
+ }
358
+ ```
359
+
360
+ #### `@column(overrideType: String)`
361
+
362
+ Marks a field to be stored as a database column. The `overrideType` parameter allows overriding the Prisma type.
363
+
364
+ ```graphql
365
+ type User @entity {
366
+ id: ID! @id
367
+ email: String! @column
368
+ age: Int @column(overrideType: "Int")
369
+ }
370
+ ```
371
+
372
+ #### `@id`
373
+
374
+ Marks a field as the primary key. Automatically maps to MongoDB ObjectId.
375
+
376
+ ```graphql
377
+ type User @entity {
378
+ id: ID! @id
379
+ # or
380
+ userId: ID! @id
381
+ }
382
+ ```
383
+
384
+ #### `@useLoader(fieldName: String)`
385
+
386
+ Generates a DataLoader for efficient relationship loading. The `fieldName` specifies which field contains the foreign key.
387
+
388
+ ```graphql
389
+ type Post @entity {
390
+ id: ID! @id
391
+ authorId: String! @column
392
+ author: User @useLoader(fieldName: "authorId")
393
+ }
394
+ ```
395
+
396
+ #### `@abstractEntity(discriminatorField: String!)`
397
+
398
+ Creates a polymorphic entity pattern. Useful for inheritance-like structures.
399
+
400
+ ```graphql
401
+ interface Content @abstractEntity(discriminatorField: "contentType") {
402
+ id: ID! @id
403
+ title: String! @column
404
+ }
405
+
406
+ type Article implements Content @entity {
407
+ contentType: ContentType!
408
+ body: String! @column
409
+ }
410
+
411
+ type Video implements Content @entity {
412
+ contentType: ContentType!
413
+ url: String! @column
414
+ }
415
+ ```
416
+
417
+ #### `@auth`
418
+
419
+ Adds authentication middleware to queries, mutations, or fields. Requires valid Keycloak JWT token.
420
+
421
+ ```graphql
422
+ type Query {
423
+ protectedData: String @auth
424
+ }
425
+
426
+ type Mutation {
427
+ updateUser(id: ID!): User @auth
428
+ }
429
+ ```
430
+
431
+ ### Prisma-Specific Directives
432
+
433
+ #### `@unique`
434
+
435
+ Marks a field as unique in the database.
436
+
437
+ ```graphql
438
+ type User @entity {
439
+ email: String! @column @unique
440
+ }
441
+ ```
442
+
443
+ #### `@relation(field: String)`
444
+
445
+ Defines relationships between entities.
446
+
447
+ ```graphql
448
+ type User @entity {
449
+ id: ID! @id
450
+ posts: [Post!] @relation(field: "authorId")
451
+ }
452
+
453
+ type Post @entity {
454
+ id: ID! @id
455
+ authorId: String! @column
456
+ author: User @useLoader(fieldName: "authorId")
457
+ }
458
+ ```
459
+
460
+ #### `@default(value: String)`
461
+
462
+ Sets a default value for a field.
463
+
464
+ ```graphql
465
+ type User @entity {
466
+ status: String! @column @default(value: "active")
467
+ }
468
+ ```
469
+
470
+ #### `@defaultBoolean(value: Boolean)`
471
+
472
+ Sets a default boolean value.
473
+
474
+ ```graphql
475
+ type User @entity {
476
+ isActive: Boolean! @column @defaultBoolean(value: true)
477
+ }
478
+ ```
479
+
480
+ #### `@defaultInt(value: Int)`
481
+
482
+ Sets a default integer value.
483
+
484
+ ```graphql
485
+ type Post @entity {
486
+ viewCount: Int! @column @defaultInt(value: 0)
487
+ }
488
+ ```
489
+
490
+ #### `@defaultFloat(value: Float)`
491
+
492
+ Sets a default float value.
493
+
494
+ ```graphql
495
+ type Product @entity {
496
+ price: Float! @column @defaultFloat(value: 0.0)
497
+ }
498
+ ```
499
+
500
+ ## Auto-Generated Operations
501
+
502
+ ### Query Operations
503
+
504
+ For each entity type, the following queries are automatically generated:
505
+
506
+ #### Single Item Query
507
+
508
+ ```graphql
509
+ query {
510
+ getUser(id: "123") {
511
+ id
512
+ name
513
+ email
514
+ }
515
+ }
516
+ ```
517
+
518
+ #### List Query with Filtering & Pagination
519
+
520
+ ```graphql
521
+ query {
522
+ getAllUsers(filter: { name: { contains: "John" } }, limit: 10, offset: 0) {
523
+ id
524
+ name
525
+ email
526
+ }
527
+ }
528
+ ```
529
+
530
+ ### Mutation Operations
531
+
532
+ For each entity type, the following mutations are automatically generated:
533
+
534
+ #### Create Mutation
535
+
536
+ ```graphql
537
+ mutation {
538
+ createUser(data: { name: "John Doe", email: "john@example.com" }) {
539
+ id
540
+ name
541
+ email
542
+ }
543
+ }
544
+ ```
545
+
546
+ #### Update Mutation
547
+
548
+ ```graphql
549
+ mutation {
550
+ updateUser(id: "123", data: { name: "Jane Doe" }) {
551
+ id
552
+ name
553
+ email
554
+ }
555
+ }
556
+ ```
557
+
558
+ #### Delete Mutation
559
+
560
+ ```graphql
561
+ mutation {
562
+ deleteUser(id: "123") {
563
+ id
564
+ }
565
+ }
566
+ ```
567
+
568
+ ## Architecture
569
+
570
+ ### Code Generation Flow
571
+
572
+ 1. **Schema Input**: User writes GraphQL SDL in the editor
573
+ 2. **Validation**: Schema is validated for syntax and semantic correctness
574
+ 3. **Parsing**: GraphQL schema is parsed into AST
575
+ 4. **Directive Processing**: Directives are analyzed and processed
576
+ 5. **Prisma Schema Generation**: Prisma schema is generated from entity types
577
+ 6. **Resolver Generation**: TypeScript resolvers are generated
578
+ 7. **DataLoader Generation**: DataLoaders are created for relationships
579
+ 8. **Code Compilation**: Generated code is written to project directory
580
+ 9. **Prisma Generate**: Prisma Client is generated
581
+ 10. **Deployment**: Project is deployed to Express.js server
582
+
583
+ ### File Structure
584
+
585
+ ```
586
+ project-name/
587
+ ├── schema.prisma # Generated Prisma schema
588
+ ├── schema.graphql # Original GraphQL schema
589
+ ├── resolvers.ts # Generated resolvers
590
+ ├── server.ts # Express server setup
591
+ ├── client/ # Generated Prisma Client
592
+ │ └── index.js
593
+ └── dataloaders/ # Generated DataLoaders
594
+ ├── index.ts
595
+ └── [entity]DataLoader.ts
596
+ ```
597
+
598
+ ### Editor File Structure
599
+
600
+ ```
601
+ /
602
+ ├── schema.graphql # Main GraphQL schema
603
+ ├── resolver.ts # Custom resolvers (optional)
604
+ ├── model.ts # Generated model types
605
+ ├── directives/ # Custom directive files
606
+ │ ├── directive.ts # Compiled directives index
607
+ │ └── [custom].ts # Individual directive files
608
+ └── _generated/ # Auto-generated client files
609
+ └── ...
610
+ ```
611
+
612
+ ## Usage Guide
613
+
614
+ ### Creating a New Project
615
+
616
+ 1. Navigate to the GraphQL Builder interface
617
+ 2. Select your organization
618
+ 3. Start editing the default schema template
619
+ 4. Define your entities using directives
620
+ 5. Save the project
621
+ 6. Deploy when ready
622
+
623
+ ### Example Schema
624
+
625
+ ```graphql
626
+ type User @entity {
627
+ id: ID! @id
628
+ email: String! @column @unique
629
+ name: String! @column
630
+ posts: [Post!] @relation(field: "authorId")
631
+ createdAt: DateTime! @column
632
+ updatedAt: DateTime! @column
633
+ }
634
+
635
+ type Post @entity {
636
+ id: ID! @id
637
+ title: String! @column
638
+ content: String! @column
639
+ authorId: String! @column
640
+ author: User @useLoader(fieldName: "authorId")
641
+ published: Boolean! @column @defaultBoolean(value: false)
642
+ createdAt: DateTime! @column
643
+ updatedAt: DateTime! @column
644
+ }
645
+
646
+ type Query {
647
+ getUser(id: ID!): User
648
+ getAllUsers(filter: JSON, limit: Int, offset: Int): [User!]!
649
+ getPost(id: ID!): Post
650
+ getAllPosts(filter: JSON, limit: Int, offset: Int): [Post!]!
651
+ }
652
+
653
+ type Mutation {
654
+ createUser(data: JSON!): User!
655
+ updateUser(id: ID!, data: JSON!): User!
656
+ deleteUser(id: ID!): User!
657
+ createPost(data: JSON!): Post!
658
+ updatePost(id: ID!, data: JSON!): Post!
659
+ deletePost(id: ID!): Post!
660
+ }
661
+ ```
662
+
663
+ ### Creating Custom Directives
664
+
665
+ 1. Create a new `.ts` file in the `/directives` folder
666
+ 2. Export a directive function:
667
+
668
+ ```typescript
669
+ export const myCustomDirective = (next, source, args, context, info) => {
670
+ // Custom logic here
671
+ return next();
672
+ };
673
+ ```
674
+
675
+ 3. The directive will be automatically extracted and compiled
676
+ 4. Use it in your schema:
677
+
678
+ ```graphql
679
+ type Query {
680
+ myField: String @myCustomDirective
681
+ }
682
+ ```
683
+
684
+ ### Deploying a Project
685
+
686
+ 1. Save your project changes
687
+ 2. Click the "Deploy" button
688
+ 3. The system will:
689
+ - Generate Prisma schema
690
+ - Generate resolvers
691
+ - Generate DataLoaders
692
+ - Run `prisma generate`
693
+ - Deploy to Express server
694
+ - Create Apollo Server endpoint
695
+
696
+ ## API Endpoints
697
+
698
+ ### GraphQL Endpoint
699
+
700
+ After deployment, each project gets its own GraphQL endpoint:
701
+
702
+ ```
703
+ POST /graphql/{projectName}
704
+ ```
705
+
706
+ ### Project Management Endpoints
707
+
708
+ #### Get Projects
709
+
710
+ ```graphql
711
+ query {
712
+ prismaProjects(
713
+ tenantProject: { projectId: "project-id", environmentTag: "env-tag" }
714
+ criteria: { name: "project-name" }
715
+ ) {
716
+ data {
717
+ id
718
+ name
719
+ schema
720
+ lastDeployedAt
721
+ }
722
+ totalCount
723
+ }
724
+ }
725
+ ```
726
+
727
+ #### Create Project
728
+
729
+ ```graphql
730
+ mutation {
731
+ createPrismaProject(
732
+ prismaProject: {
733
+ name: "my-project"
734
+ schema: "type User @entity { ... }"
735
+ resolvers: "..."
736
+ directives: []
737
+ projectId: "project-id"
738
+ environmentTag: "env-tag"
739
+ }
740
+ ) {
741
+ id
742
+ name
743
+ }
744
+ }
745
+ ```
746
+
747
+ #### Deploy Project
748
+
749
+ ```graphql
750
+ mutation {
751
+ deployPrismaProject(id: "project-id")
752
+ }
753
+ ```
754
+
755
+ #### Generate Types
756
+
757
+ ```graphql
758
+ query {
759
+ generateTypes(schema: "type User @entity { ... }") {
760
+ types
761
+ resolvers
762
+ collections
763
+ }
764
+ }
765
+ ```
766
+
767
+ ## Advanced Features
768
+
769
+ ### Polymorphic Types
770
+
771
+ Use `@abstractEntity` to create polymorphic relationships:
772
+
773
+ ```graphql
774
+ interface Media @abstractEntity(discriminatorField: "mediaType") {
775
+ id: ID! @id
776
+ title: String! @column
777
+ url: String! @column
778
+ }
779
+
780
+ type Image implements Media @entity {
781
+ mediaType: MediaType!
782
+ width: Int @column
783
+ height: Int @column
784
+ }
785
+
786
+ type Video implements Media @entity {
787
+ mediaType: MediaType!
788
+ duration: Int @column
789
+ }
790
+ ```
791
+
792
+ ### Custom Resolvers
793
+
794
+ You can add custom resolvers in the `resolver.ts` file:
795
+
796
+ ```typescript
797
+ export const resolvers = [
798
+ {
799
+ Query: {
800
+ // Custom query resolvers
801
+ customQuery: async (parent, args, context) => {
802
+ // Your custom logic
803
+ },
804
+ },
805
+ Mutation: {
806
+ // Custom mutation resolvers
807
+ customMutation: async (parent, args, context) => {
808
+ // Your custom logic
809
+ },
810
+ },
811
+ User: {
812
+ // Custom field resolvers
813
+ customField: (parent, args, context) => {
814
+ // Your custom logic
815
+ },
816
+ },
817
+ },
818
+ ];
819
+ ```
820
+
821
+ ### Authentication
822
+
823
+ Use `@auth` directive to protect operations:
824
+
825
+ ```graphql
826
+ type Query {
827
+ publicData: String
828
+ privateData: String @auth
829
+ }
830
+
831
+ type Mutation {
832
+ updateProfile(id: ID!): User @auth
833
+ }
834
+ ```
835
+
836
+ The `@auth` directive validates Keycloak JWT tokens and ensures the user is authenticated before executing the resolver.
837
+
838
+ ## Best Practices
839
+
840
+ 1. **Use Descriptive Entity Names**: Use clear, singular nouns for entity types
841
+ 2. **Leverage Directives**: Use appropriate directives to reduce boilerplate
842
+ 3. **Organize Directives**: Keep custom directives in separate files
843
+ 4. **Validate Early**: Use the editor's validation before deploying
844
+ 5. **Version Control**: Keep your GraphQL schemas in version control
845
+ 6. **Use DataLoaders**: Always use `@useLoader` for relationships to avoid N+1 queries
846
+ 7. **Test Locally**: Test your schema locally before deploying to production
847
+ 8. **Customize Resolvers**: Edit generated resolvers to add business logic
848
+ 9. **Handle Errors**: Implement proper error handling in custom resolvers
849
+ 10. **Use TypeScript**: Leverage TypeScript types for type safety
850
+
851
+ ## Troubleshooting
852
+
853
+ ### Schema Validation Errors
854
+
855
+ - Check for syntax errors in your GraphQL SDL
856
+ - Ensure all directives are properly formatted
857
+ - Verify entity types have `@entity` directive
858
+
859
+ ### Deployment Failures
860
+
861
+ - Check database connection string
862
+ - Verify Prisma schema is valid
863
+ - Ensure all required fields have proper types
864
+
865
+ ### DataLoader Issues
866
+
867
+ - Verify `@useLoader` directive has correct `fieldName`
868
+ - Check that the field specified exists on the entity
869
+ - Ensure foreign key relationships are properly defined
870
+
871
+ ### Resolver Issues
872
+
873
+ - Check that resolver context includes required DataLoaders
874
+ - Verify Prisma client is properly initialized
875
+ - Ensure resolver return types match schema types
876
+ - Check for async/await usage in async resolvers
877
+
878
+ ## Technical Details
879
+
880
+ ### Prisma Schema Generation
881
+
882
+ - Converts GraphQL types to Prisma models
883
+ - Maps GraphQL types to Prisma types
884
+ - Generates relationships based on directives
885
+ - Creates indexes for unique fields
886
+
887
+ ### Resolver Generation
888
+
889
+ - Generates CRUD operations for all entities
890
+ - Creates field resolvers for relationships
891
+ - Implements DataLoader resolvers
892
+ - Adds TODO placeholders for custom resolvers
893
+ - Preserves custom resolver modifications
894
+
895
+ ### DataLoader Generation
896
+
897
+ - Creates DataLoader classes for each relationship
898
+ - Implements batch loading logic
899
+ - Handles both single and list relationships
900
+ - Optimizes database queries
901
+
902
+ ### Video Tutorial
903
+
904
+ https://www.loom.com/share/18b5b92fd3bf406da27c58b3496c8be6
905
+
906
+ https://www.loom.com/share/7264060666124560b549a082b266fcf8