create-jen-app 1.2.3 → 1.2.4
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.
- package/dist/colors.js +0 -17
- package/dist/create.js +5 -17
- package/dist/generator.js +14 -31
- package/dist/index.js +6 -1
- package/package.json +1 -1
- package/templates/ssr-isr/README.md +77 -0
- package/templates/ssr-isr/build.js +118 -0
- package/templates/ssr-isr/jen.config.ts +109 -0
- package/templates/ssr-isr/jenjs.d.ts +22 -0
- package/templates/ssr-isr/lib/api/(hello).js +9 -0
- package/templates/ssr-isr/lib/auth/cookie-utils.js +79 -0
- package/templates/ssr-isr/lib/auth/index.js +2 -0
- package/templates/ssr-isr/lib/auth/jwt.js +57 -0
- package/templates/ssr-isr/lib/auth/session.js +92 -0
- package/templates/ssr-isr/lib/build/asset-hashing.d.ts +10 -0
- package/templates/ssr-isr/lib/build/asset-hashing.js +25 -0
- package/templates/ssr-isr/lib/build/asset-manifest.d.ts +11 -0
- package/templates/ssr-isr/lib/build/asset-manifest.js +21 -0
- package/templates/{static → ssr-isr}/lib/build/build.d.ts +1 -1
- package/templates/ssr-isr/lib/build/build.js +141 -0
- package/templates/{static → ssr-isr}/lib/build/island-hydration.d.ts +8 -5
- package/templates/ssr-isr/lib/build/island-hydration.js +44 -0
- package/templates/ssr-isr/lib/build/minifier.d.ts +20 -0
- package/templates/ssr-isr/lib/build/minifier.js +46 -0
- package/templates/ssr-isr/lib/build/page-renderer.d.ts +17 -0
- package/templates/ssr-isr/lib/build/page-renderer.js +28 -0
- package/templates/ssr-isr/lib/build/production-build.d.ts +10 -0
- package/templates/ssr-isr/lib/build/production-build.js +13 -0
- package/templates/ssr-isr/lib/build/ssg-pipeline.d.ts +15 -0
- package/templates/ssr-isr/lib/build/ssg-pipeline.js +113 -0
- package/templates/ssr-isr/lib/build-tools/build-site.js +36 -0
- package/templates/ssr-isr/lib/cache/index.js +10 -0
- package/templates/ssr-isr/lib/cache/memory.js +40 -0
- package/templates/ssr-isr/lib/cache/redis.js +61 -0
- package/templates/ssr-isr/lib/cli/banner.js +28 -0
- package/templates/ssr-isr/lib/cli/templates/ssg/jen.config.js +32 -0
- package/templates/ssr-isr/lib/cli/templates/ssg/site/index.js +9 -0
- package/templates/ssr-isr/lib/cli/templates/ssr/jen.config.js +32 -0
- package/templates/ssr-isr/lib/cli/templates/ssr/site/index.js +9 -0
- package/templates/ssr-isr/lib/compilers/esbuild-plugins.js +111 -0
- package/templates/ssr-isr/lib/compilers/svelte.js +44 -0
- package/templates/ssr-isr/lib/compilers/vue.js +90 -0
- package/templates/ssr-isr/lib/core/http.js +71 -0
- package/templates/ssr-isr/lib/core/middleware-hooks.js +97 -0
- package/templates/ssr-isr/lib/core/paths.js +39 -0
- package/templates/ssr-isr/lib/core/routes/match.js +47 -0
- package/templates/ssr-isr/lib/core/routes/scan.js +190 -0
- package/templates/ssr-isr/lib/core/types.js +1 -0
- package/templates/ssr-isr/lib/css/compiler.js +74 -0
- package/templates/ssr-isr/lib/db/connector.js +42 -0
- package/templates/ssr-isr/lib/db/drivers/jdb.js +44 -0
- package/templates/ssr-isr/lib/db/drivers/sql.js +182 -0
- package/templates/ssr-isr/lib/db/index.js +48 -0
- package/templates/ssr-isr/lib/db/types.js +1 -0
- package/templates/ssr-isr/lib/graphql/index.js +52 -0
- package/templates/ssr-isr/lib/graphql/resolvers.js +25 -0
- package/templates/ssr-isr/lib/graphql/schema.js +35 -0
- package/templates/ssr-isr/lib/i18n/en.json +4 -0
- package/templates/ssr-isr/lib/i18n/es.json +4 -0
- package/templates/ssr-isr/lib/i18n/index.js +15 -0
- package/templates/ssr-isr/lib/import/jen-import.js +161 -0
- package/templates/ssr-isr/lib/index.js +116 -0
- package/templates/ssr-isr/lib/jdb/engine.js +275 -0
- package/templates/ssr-isr/lib/jdb/index.js +34 -0
- package/templates/ssr-isr/lib/jdb/types.js +1 -0
- package/templates/ssr-isr/lib/jdb/utils.js +176 -0
- package/templates/{static → ssr-isr}/lib/middleware/builtins/body-parser.js +0 -17
- package/templates/ssr-isr/lib/middleware/builtins/cors.js +54 -0
- package/templates/{static → ssr-isr}/lib/middleware/builtins/logger.js +0 -17
- package/templates/{static → ssr-isr}/lib/middleware/builtins/rate-limit.js +0 -17
- package/templates/{static → ssr-isr}/lib/middleware/builtins/request-id.js +0 -17
- package/templates/{static → ssr-isr}/lib/middleware/builtins/security-headers.js +0 -17
- package/templates/ssr-isr/lib/middleware/context.js +124 -0
- package/templates/{static → ssr-isr}/lib/middleware/decorators.js +0 -17
- package/templates/{static → ssr-isr}/lib/middleware/errors/handler.js +0 -17
- package/templates/ssr-isr/lib/middleware/errors/http-error.js +10 -0
- package/templates/ssr-isr/lib/middleware/kernel.js +85 -0
- package/templates/ssr-isr/lib/middleware/pipeline.js +148 -0
- package/templates/ssr-isr/lib/middleware/registry.js +85 -0
- package/templates/ssr-isr/lib/middleware/response.js +107 -0
- package/templates/ssr-isr/lib/middleware/types.d.ts +1 -0
- package/templates/ssr-isr/lib/middleware/types.js +1 -0
- package/templates/ssr-isr/lib/middleware/utils/matcher.js +13 -0
- package/templates/{static → ssr-isr}/lib/native/bundle.js +0 -17
- package/templates/{static → ssr-isr}/lib/native/dev-server.js +0 -17
- package/templates/{static → ssr-isr}/lib/native/index.js +0 -17
- package/templates/{static → ssr-isr}/lib/native/optimizer.js +0 -17
- package/templates/ssr-isr/lib/native/style-compiler.js +19 -0
- package/templates/ssr-isr/lib/plugin/loader.js +36 -0
- package/templates/ssr-isr/lib/runtime/client-runtime.js +25 -0
- package/templates/ssr-isr/lib/runtime/hmr.js +59 -0
- package/templates/ssr-isr/lib/runtime/hydrate.js +55 -0
- package/templates/ssr-isr/lib/runtime/island-hydration-client.js +146 -0
- package/templates/ssr-isr/lib/runtime/islands.js +110 -0
- package/templates/ssr-isr/lib/runtime/render.js +244 -0
- package/templates/ssr-isr/lib/server/api-routes.js +237 -0
- package/templates/ssr-isr/lib/server/api.js +108 -0
- package/templates/ssr-isr/lib/server/app.js +438 -0
- package/templates/ssr-isr/lib/server/runtimeServe.js +169 -0
- package/templates/ssr-isr/lib/server/ssr.js +202 -0
- package/templates/ssr-isr/lib/shared/log.js +64 -0
- package/templates/ssr-isr/package.json +23 -0
- package/templates/ssr-isr/server.js +128 -0
- package/templates/ssr-isr/site/pages/(index).tsx +11 -0
- package/templates/ssr-isr/site/styles/global.scss +37 -0
- package/templates/ssr-isr/tsconfig.json +39 -0
- package/templates/static/build.js +30 -18
- package/templates/static/jen.config.ts +0 -18
- package/templates/static/jenjs.d.ts +0 -18
- package/templates/static/lib/api/(hello).js +0 -17
- package/templates/static/lib/api/examples/files/[...slug].js +22 -0
- package/templates/static/lib/api/examples/hello.js +11 -0
- package/templates/static/lib/api/examples/posts/[id].js +37 -0
- package/templates/static/lib/api/examples/posts.js +37 -0
- package/templates/static/lib/api/examples/search.js +23 -0
- package/templates/static/lib/api/index.js +41 -0
- package/templates/static/lib/api/loader.js +234 -0
- package/templates/static/lib/api/router.js +259 -0
- package/templates/static/lib/assets/types.js +1 -0
- package/templates/static/lib/auth/cookie-utils.js +3 -16
- package/templates/static/lib/auth/index.js +0 -17
- package/templates/static/lib/auth/jwt.js +0 -17
- package/templates/static/lib/auth/session.js +0 -17
- package/templates/static/lib/build/asset-hashing.js +44 -36
- package/templates/static/lib/build/asset-manifest.js +16 -33
- package/templates/static/lib/build/build.js +270 -125
- package/templates/static/lib/build/bundle-analyzer-ui.js +417 -0
- package/templates/static/lib/build/bundle-analyzer.js +945 -0
- package/templates/static/lib/build/code-splitter.js +194 -0
- package/templates/static/lib/build/feature-analyzer.js +190 -0
- package/templates/static/lib/build/feature-gate.js +257 -0
- package/templates/static/lib/build/island-hydration.js +17 -35
- package/templates/static/lib/build/lazy-loader.js +322 -0
- package/templates/static/lib/build/minifier.js +40 -59
- package/templates/static/lib/build/page-renderer.js +23 -40
- package/templates/static/lib/build/production-build.js +9 -26
- package/templates/static/lib/build/rust-hashing.js +71 -0
- package/templates/static/lib/build/script-optimizer.js +285 -0
- package/templates/static/lib/build/ssg-pipeline.js +100 -106
- package/templates/static/lib/build/vercel-output.js +298 -0
- package/templates/static/lib/build-tools/build-site.js +0 -17
- package/templates/static/lib/cache/index.js +0 -17
- package/templates/static/lib/cache/memory.js +0 -17
- package/templates/static/lib/cache/redis.js +0 -17
- package/templates/static/lib/cli/banner.js +0 -17
- package/templates/static/lib/cli/templates/ssg/jen.config.js +0 -17
- package/templates/static/lib/cli/templates/ssr/jen.config.js +0 -17
- package/templates/static/lib/client/Image.js +42 -0
- package/templates/static/lib/client/Link.js +190 -0
- package/templates/static/lib/client/PWA.js +46 -0
- package/templates/static/lib/client/Seo.js +97 -0
- package/templates/static/lib/client/index.js +9 -0
- package/templates/static/lib/client/useNavigation.js +25 -0
- package/templates/static/lib/client/useRouter.js +64 -0
- package/templates/static/lib/client-routing/Link.js +17 -0
- package/templates/static/lib/client-routing/index.js +19 -0
- package/templates/static/lib/client-routing/router.js +151 -0
- package/templates/static/lib/client-routing/signal.js +147 -0
- package/templates/static/lib/compilers/esbuild-plugins.js +0 -17
- package/templates/static/lib/compilers/svelte.js +0 -17
- package/templates/static/lib/compilers/vue.js +0 -17
- package/templates/static/lib/core/config.js +0 -17
- package/templates/static/lib/core/feature-guard.js +136 -0
- package/templates/static/lib/core/features.js +99 -0
- package/templates/static/lib/core/http.js +0 -17
- package/templates/static/lib/core/layouts/index.js +10 -0
- package/templates/static/lib/core/layouts/render.js +158 -0
- package/templates/static/lib/core/layouts/scan.js +112 -0
- package/templates/static/lib/core/layouts/types.js +1 -0
- package/templates/static/lib/core/lifecycle.js +129 -0
- package/templates/static/lib/core/loader-schema.js +81 -0
- package/templates/static/lib/core/middleware-hooks.js +0 -17
- package/templates/static/lib/core/paths.js +0 -17
- package/templates/static/lib/core/routes/advanced.js +114 -0
- package/templates/static/lib/core/routes/handlers.js +181 -0
- package/templates/static/lib/core/routes/match.js +89 -17
- package/templates/static/lib/core/routes/orchestrator.js +171 -0
- package/templates/static/lib/core/routes/rendering-config.js +131 -0
- package/templates/static/lib/core/routes/scan.js +0 -17
- package/templates/static/lib/core/types.js +0 -17
- package/templates/static/lib/css/compiler.js +1 -18
- package/templates/static/lib/data-fetching/cache.js +223 -0
- package/templates/static/lib/data-fetching/client.js +202 -0
- package/templates/static/lib/data-fetching/feature-guard.js +29 -0
- package/templates/static/lib/data-fetching/graphql.js +265 -0
- package/templates/static/lib/data-fetching/index.js +57 -0
- package/templates/static/lib/data-fetching/rest.js +256 -0
- package/templates/static/lib/data-fetching/server.js +182 -0
- package/templates/static/lib/data-fetching/types.js +5 -0
- package/templates/static/lib/db/connector.js +0 -17
- package/templates/static/lib/db/drivers/jdb.js +0 -17
- package/templates/static/lib/db/drivers/sql.js +0 -17
- package/templates/static/lib/db/index.js +0 -17
- package/templates/static/lib/db/types.js +0 -17
- package/templates/static/lib/devtools/component-tree.js +106 -0
- package/templates/static/lib/devtools/devtools.js +638 -0
- package/templates/static/lib/devtools/event-bus.js +29 -0
- package/templates/static/lib/devtools/event-logger.js +67 -0
- package/templates/static/lib/devtools/index.js +9 -0
- package/templates/static/lib/devtools/integration.js +149 -0
- package/templates/static/lib/devtools/performance.js +84 -0
- package/templates/static/lib/devtools/persistence.js +57 -0
- package/templates/static/lib/devtools/plugins.js +97 -0
- package/templates/static/lib/devtools/search.js +89 -0
- package/templates/static/lib/devtools/ui.js +769 -0
- package/templates/static/lib/features/api/handler.js +10 -0
- package/templates/static/lib/features/api/index.js +5 -0
- package/templates/static/lib/features/api/types.js +4 -0
- package/templates/static/lib/features/middleware/compiled.js +7 -0
- package/templates/static/lib/features/middleware/index.js +5 -0
- package/templates/static/lib/features/middleware/types.js +4 -0
- package/templates/static/lib/fonts/index.js +46 -0
- package/templates/static/lib/fonts/inject.js +125 -0
- package/templates/static/lib/fonts/loader.js +196 -0
- package/templates/static/lib/fonts/types.js +1 -0
- package/templates/static/lib/graphql/index.js +1 -18
- package/templates/static/lib/graphql/resolvers.js +20 -13
- package/templates/static/lib/graphql/schema.js +0 -17
- package/templates/static/lib/i18n/index.js +7 -19
- package/templates/static/lib/import/jen-import.js +1 -18
- package/templates/static/lib/index.js +79 -125
- package/templates/static/lib/jdb/engine.js +0 -17
- package/templates/static/lib/jdb/index.js +1 -18
- package/templates/static/lib/jdb/types.js +0 -17
- package/templates/static/lib/jdb/utils.js +0 -17
- package/templates/static/lib/middleware/builtins/cors.js +3 -16
- package/templates/static/lib/middleware/context.js +0 -17
- package/templates/static/lib/middleware/kernel.js +117 -25
- package/templates/static/lib/middleware/pipeline.js +0 -17
- package/templates/static/lib/middleware/registry.js +0 -17
- package/templates/static/lib/middleware/response.js +0 -17
- package/templates/static/lib/plugin/examples/analytics-plugin.js +183 -0
- package/templates/static/lib/plugin/examples/cdn-upload-plugin.js +94 -0
- package/templates/static/lib/plugin/loader.js +0 -17
- package/templates/static/lib/plugin/plugin-manager.js +177 -0
- package/templates/static/lib/plugin/types.js +28 -0
- package/templates/static/lib/runtime/client-runtime.js +0 -17
- package/templates/static/lib/runtime/hmr.js +0 -17
- package/templates/static/lib/runtime/hydrate.js +0 -17
- package/templates/static/lib/runtime/island-hydration-client.js +0 -17
- package/templates/static/lib/runtime/islands.js +0 -17
- package/templates/static/lib/runtime/render.js +208 -50
- package/templates/static/lib/security/security-config.js +60 -0
- package/templates/static/lib/security/security-middleware.js +229 -0
- package/templates/static/lib/server/api-routes.js +153 -43
- package/templates/static/lib/server/api.js +0 -17
- package/templates/static/lib/server/app.js +539 -223
- package/templates/static/lib/server/isr.js +365 -0
- package/templates/static/lib/server/runtimeServe.js +31 -24
- package/templates/static/lib/server/ssr.js +98 -22
- package/templates/static/lib/server-actions/handler.js +180 -0
- package/templates/static/lib/server-actions/index.js +19 -0
- package/templates/static/lib/server-actions/middleware.js +146 -0
- package/templates/static/lib/server-actions/scan.js +152 -0
- package/templates/static/lib/server-actions/types.js +1 -0
- package/templates/static/lib/server-actions/validators.js +156 -0
- package/templates/static/lib/shared/log.js +19 -20
- package/templates/static/lib/telemetry/api/rate-limiter.js +32 -0
- package/templates/static/lib/telemetry/api/validator.js +67 -0
- package/templates/static/lib/telemetry/client.js +121 -0
- package/templates/static/lib/telemetry/tests/rate-limiter.test.js +46 -0
- package/templates/static/lib/telemetry/tests/validator.test.js +62 -0
- package/templates/static/lib/vendor/glob/glob.js +4766 -0
- package/templates/static/lib/vendor/preact/LICENSE +21 -0
- package/templates/static/lib/vendor/preact/preact.module.js +797 -0
- package/templates/static/lib/vendor/sass/sass.node.mjs +212 -0
- package/templates/static/package.json +4 -0
- package/templates/static/server.js +22 -22
- package/templates/static/site/(home).tsx +0 -18
- package/templates/static/tsconfig.json +5 -1
- package/templates/static/.esbuild/jen.config.js +0 -19
- package/templates/static/lib/build/asset-hashing.d.ts +0 -10
- package/templates/static/lib/build/asset-manifest.d.ts +0 -11
- package/templates/static/lib/build/minifier.d.ts +0 -20
- package/templates/static/lib/build/page-renderer.d.ts +0 -17
- package/templates/static/lib/build/production-build.d.ts +0 -10
- package/templates/static/lib/build/ssg-pipeline.d.ts +0 -15
- package/templates/static/lib/middleware/errors/http-error.js +0 -27
- package/templates/static/lib/middleware/types.js +0 -18
- package/templates/static/lib/middleware/utils/matcher.js +0 -30
- package/templates/static/lib/native/style-compiler.js +0 -36
- /package/templates/{static → ssr-isr}/lib/api/(hello).d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/auth/cookie-utils.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/auth/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/auth/jwt.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/auth/session.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/build-tools/build-site.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cache/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cache/memory.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cache/redis.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cli/banner.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cli/templates/ssg/jen.config.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cli/templates/ssg/site/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cli/templates/ssr/jen.config.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/cli/templates/ssr/site/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/compilers/esbuild-plugins.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/compilers/svelte.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/compilers/vue.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/core/config.d.ts +0 -0
- /package/templates/{static/lib/middleware/types.d.ts → ssr-isr/lib/core/config.js} +0 -0
- /package/templates/{static → ssr-isr}/lib/core/http.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/core/middleware-hooks.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/core/paths.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/core/routes/match.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/core/routes/scan.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/core/types.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/css/compiler.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/db/connector.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/db/drivers/jdb.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/db/drivers/sql.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/db/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/db/types.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/graphql/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/graphql/resolvers.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/graphql/schema.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/i18n/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/import/jen-import.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/jdb/engine.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/jdb/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/jdb/types.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/jdb/utils.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/builtins/body-parser.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/builtins/cors.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/builtins/logger.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/builtins/rate-limit.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/builtins/request-id.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/builtins/security-headers.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/context.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/decorators.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/errors/handler.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/errors/http-error.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/kernel.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/pipeline.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/registry.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/response.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/middleware/utils/matcher.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/native/bundle.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/native/dev-server.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/native/index.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/native/optimizer.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/native/style-compiler.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/plugin/loader.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/runtime/client-runtime.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/runtime/hmr.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/runtime/hydrate.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/runtime/island-hydration-client.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/runtime/islands.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/runtime/render.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/server/api-routes.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/server/api.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/server/app.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/server/runtimeServe.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/server/ssr.d.ts +0 -0
- /package/templates/{static → ssr-isr}/lib/shared/log.d.ts +0 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { RestFetcher } from "./rest.js";
|
|
2
|
+
import { GraphQLClient } from "./graphql.js";
|
|
3
|
+
/**
|
|
4
|
+
* Client-side data fetching utilities for browser and Preact components.
|
|
5
|
+
* Provides reactive data fetching with cache, retry, and suspense support.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Automatic refetch on mount/dependency changes
|
|
9
|
+
* - Suspense integration for data boundaries
|
|
10
|
+
* - In-flight request deduplication
|
|
11
|
+
* - Optimistic updates
|
|
12
|
+
*/
|
|
13
|
+
export class ClientDataFetcher {
|
|
14
|
+
rest;
|
|
15
|
+
graphql;
|
|
16
|
+
inflight = new Map();
|
|
17
|
+
constructor(clientCtx) {
|
|
18
|
+
this.rest = new RestFetcher({
|
|
19
|
+
cache: clientCtx.cache,
|
|
20
|
+
interceptors: clientCtx.interceptors,
|
|
21
|
+
});
|
|
22
|
+
this.graphql = new GraphQLClient({
|
|
23
|
+
endpoint: clientCtx.config.baseUrl || "/api/graphql",
|
|
24
|
+
cache: clientCtx.cache,
|
|
25
|
+
interceptors: clientCtx.interceptors,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Fetches data with deduplication.
|
|
30
|
+
* Multiple requests for the same URL while one is inflight return the same promise.
|
|
31
|
+
*/
|
|
32
|
+
async fetch(url, config) {
|
|
33
|
+
const key = `${config?.method || "GET"}:${url}`;
|
|
34
|
+
// Return existing promise if request is in-flight
|
|
35
|
+
if (this.inflight.has(key)) {
|
|
36
|
+
return this.inflight.get(key);
|
|
37
|
+
}
|
|
38
|
+
const promise = this.rest.fetch(url, config).finally(() => {
|
|
39
|
+
this.inflight.delete(key);
|
|
40
|
+
});
|
|
41
|
+
this.inflight.set(key, promise);
|
|
42
|
+
return promise;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Fetches multiple resources in parallel with race condition handling.
|
|
46
|
+
*/
|
|
47
|
+
async fetchAll(urls, config) {
|
|
48
|
+
const results = {};
|
|
49
|
+
const promises = Object.entries(urls).map(async ([key, url]) => {
|
|
50
|
+
const result = await this.fetch(url, config);
|
|
51
|
+
if (!result.ok) {
|
|
52
|
+
throw new Error(`Failed to fetch ${key}: ${result.error.message}`);
|
|
53
|
+
}
|
|
54
|
+
results[key] = result.data;
|
|
55
|
+
});
|
|
56
|
+
try {
|
|
57
|
+
await Promise.all(promises);
|
|
58
|
+
return {
|
|
59
|
+
ok: true,
|
|
60
|
+
data: results,
|
|
61
|
+
meta: {
|
|
62
|
+
status: 200,
|
|
63
|
+
statusText: "OK",
|
|
64
|
+
headers: {},
|
|
65
|
+
url: Object.values(urls)[0],
|
|
66
|
+
ok: true,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
} catch (err) {
|
|
70
|
+
return {
|
|
71
|
+
ok: false,
|
|
72
|
+
error: {
|
|
73
|
+
message: err.message,
|
|
74
|
+
details: err,
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Adds an authorization token to all requests.
|
|
81
|
+
*/
|
|
82
|
+
withAuthToken(token) {
|
|
83
|
+
this.rest.addInterceptor({
|
|
84
|
+
beforeRequest: (req) => {
|
|
85
|
+
req.headers = {
|
|
86
|
+
...req.headers,
|
|
87
|
+
Authorization: `Bearer ${token}`,
|
|
88
|
+
};
|
|
89
|
+
return req;
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Adds common headers to all requests.
|
|
96
|
+
*/
|
|
97
|
+
withHeaders(headers) {
|
|
98
|
+
this.rest.addInterceptor({
|
|
99
|
+
beforeRequest: (req) => {
|
|
100
|
+
req.headers = {
|
|
101
|
+
...req.headers,
|
|
102
|
+
...headers,
|
|
103
|
+
};
|
|
104
|
+
return req;
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Global client fetch context for browser.
|
|
112
|
+
* Initialized when app hydrates on client.
|
|
113
|
+
*/
|
|
114
|
+
let globalClientFetcher = null;
|
|
115
|
+
/**
|
|
116
|
+
* Initializes the client data fetcher.
|
|
117
|
+
* Should be called during client hydration.
|
|
118
|
+
*/
|
|
119
|
+
export function initializeClientFetch(context) {
|
|
120
|
+
globalClientFetcher = new ClientDataFetcher(context);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Gets the global client data fetcher.
|
|
124
|
+
*/
|
|
125
|
+
export function getClientDataFetcher() {
|
|
126
|
+
if (!globalClientFetcher) {
|
|
127
|
+
throw new Error(
|
|
128
|
+
"Client fetch not initialized. Call initializeClientFetch() during client hydration.",
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
return globalClientFetcher;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Convenience hook for fetching data in components.
|
|
135
|
+
* Returns { data, error, loading, refetch }.
|
|
136
|
+
*/
|
|
137
|
+
export function useData(url, options) {
|
|
138
|
+
// This is a simplified API description
|
|
139
|
+
// Full implementation would use Preact hooks (useEffect, useState)
|
|
140
|
+
return {
|
|
141
|
+
data: options?.initialData || null,
|
|
142
|
+
error: null,
|
|
143
|
+
loading: false,
|
|
144
|
+
refetch: async () => {
|
|
145
|
+
const fetcher = getClientDataFetcher();
|
|
146
|
+
return fetcher.rest.get(url, options);
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Convenience hook for fetching multiple resources in parallel.
|
|
152
|
+
*/
|
|
153
|
+
export function useDataAll(urls, options) {
|
|
154
|
+
return {
|
|
155
|
+
data: {},
|
|
156
|
+
error: null,
|
|
157
|
+
loading: false,
|
|
158
|
+
refetch: async () => {
|
|
159
|
+
const fetcher = getClientDataFetcher();
|
|
160
|
+
return fetcher.fetchAll(urls, options);
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Convenience hook for GraphQL queries in components.
|
|
166
|
+
*/
|
|
167
|
+
export function useGraphQL(query, variables) {
|
|
168
|
+
return {
|
|
169
|
+
data: null,
|
|
170
|
+
error: null,
|
|
171
|
+
loading: false,
|
|
172
|
+
refetch: async () => {
|
|
173
|
+
const fetcher = getClientDataFetcher();
|
|
174
|
+
return fetcher.graphql.query(
|
|
175
|
+
{ query, variables },
|
|
176
|
+
{ cache: { strategy: "cache-first" } },
|
|
177
|
+
);
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Convenience hook for GraphQL mutations in components.
|
|
183
|
+
*/
|
|
184
|
+
export function useMutation(mutation, onSuccess, onError) {
|
|
185
|
+
return {
|
|
186
|
+
execute: async (variables) => {
|
|
187
|
+
const fetcher = getClientDataFetcher();
|
|
188
|
+
const result = await fetcher.graphql.mutation(
|
|
189
|
+
{ query: mutation, variables },
|
|
190
|
+
{ cache: { strategy: "no-cache" } },
|
|
191
|
+
);
|
|
192
|
+
if (result.ok) {
|
|
193
|
+
onSuccess?.(result.data);
|
|
194
|
+
} else {
|
|
195
|
+
onError?.(new Error(result.error.message));
|
|
196
|
+
}
|
|
197
|
+
return result;
|
|
198
|
+
},
|
|
199
|
+
loading: false,
|
|
200
|
+
error: null,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature guards for data-fetching module.
|
|
3
|
+
*
|
|
4
|
+
* The data-fetching feature must be enabled in jen.config.ts:
|
|
5
|
+
* ```
|
|
6
|
+
* features: {
|
|
7
|
+
* dataFetching: true
|
|
8
|
+
* }
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* This module would typically use the framework's feature gating system
|
|
12
|
+
* to ensure the feature is enabled before allowing use of these utilities.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Validates that data-fetching feature is enabled.
|
|
16
|
+
* Throws helpful error if disabled.
|
|
17
|
+
*/
|
|
18
|
+
export function requireDataFetchingFeature(features, context) {
|
|
19
|
+
// Note: "dataFetching" would be added to FeatureName type in features.ts
|
|
20
|
+
// For now, this is a placeholder that documents the pattern
|
|
21
|
+
// guardFeature(features, "dataFetching", context);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Validates that both cache and data-fetching features are enabled.
|
|
25
|
+
* Required for some advanced caching features.
|
|
26
|
+
*/
|
|
27
|
+
export function requireCacheWithDataFetching(features, context) {
|
|
28
|
+
// guardFeatures(features, ["cache", "dataFetching"], context);
|
|
29
|
+
}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { RestFetcher } from "./rest.js";
|
|
2
|
+
import { executeCacheStrategy } from "./cache.js";
|
|
3
|
+
/**
|
|
4
|
+
* GraphQL client for querying GraphQL APIs.
|
|
5
|
+
* Integrates with REST fetcher infrastructure for cache and interceptor support.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Query and mutation execution
|
|
9
|
+
* - Automatic error extraction from GraphQL responses
|
|
10
|
+
* - Cache support with tag-based invalidation
|
|
11
|
+
* - Request/response interceptors
|
|
12
|
+
* - Type-safe operation configuration
|
|
13
|
+
*/
|
|
14
|
+
export class GraphQLClient {
|
|
15
|
+
restFetcher;
|
|
16
|
+
endpoint;
|
|
17
|
+
cache;
|
|
18
|
+
interceptors;
|
|
19
|
+
constructor(opts) {
|
|
20
|
+
this.endpoint = opts.endpoint;
|
|
21
|
+
this.cache = opts.cache;
|
|
22
|
+
this.interceptors = opts.interceptors || [];
|
|
23
|
+
this.restFetcher = new RestFetcher({
|
|
24
|
+
cache: opts.cache,
|
|
25
|
+
interceptors: opts.interceptors,
|
|
26
|
+
baseUrl: opts.endpoint.includes("http")
|
|
27
|
+
? undefined
|
|
28
|
+
: "https://api.example.com",
|
|
29
|
+
defaultHeaders: {
|
|
30
|
+
"content-type": "application/json",
|
|
31
|
+
...opts.defaultHeaders,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Registers a new interceptor.
|
|
37
|
+
*/
|
|
38
|
+
addInterceptor(interceptor) {
|
|
39
|
+
this.restFetcher.addInterceptor(interceptor);
|
|
40
|
+
this.interceptors.push(interceptor);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Executes a GraphQL query.
|
|
44
|
+
* Queries are cached by default (cache-first strategy).
|
|
45
|
+
*/
|
|
46
|
+
async query(request, config) {
|
|
47
|
+
const gqlRequest =
|
|
48
|
+
typeof request === "string" ? { query: request } : request;
|
|
49
|
+
// Queries are safe to cache
|
|
50
|
+
const cacheConfig = {
|
|
51
|
+
strategy: "cache-first",
|
|
52
|
+
ttl: 300000, // 5 minutes default
|
|
53
|
+
};
|
|
54
|
+
if (config?.cache && typeof config.cache === "object") {
|
|
55
|
+
Object.assign(cacheConfig, config.cache);
|
|
56
|
+
}
|
|
57
|
+
return this.execute(gqlRequest, {
|
|
58
|
+
...config,
|
|
59
|
+
cache: cacheConfig,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Executes a GraphQL mutation.
|
|
64
|
+
* Mutations are NOT cached by default (no-cache strategy).
|
|
65
|
+
*/
|
|
66
|
+
async mutation(request, config) {
|
|
67
|
+
const gqlRequest =
|
|
68
|
+
typeof request === "string" ? { query: request } : request;
|
|
69
|
+
// Mutations should not be cached
|
|
70
|
+
const cacheConfig = {
|
|
71
|
+
strategy: "no-cache",
|
|
72
|
+
};
|
|
73
|
+
if (config?.cache && typeof config.cache === "object") {
|
|
74
|
+
Object.assign(cacheConfig, config.cache);
|
|
75
|
+
}
|
|
76
|
+
return this.execute(gqlRequest, {
|
|
77
|
+
...config,
|
|
78
|
+
cache: cacheConfig,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Core GraphQL execution with cache and interceptor support.
|
|
83
|
+
*/
|
|
84
|
+
async execute(request, config) {
|
|
85
|
+
const cacheStrategy = config?.cache?.strategy || "cache-first";
|
|
86
|
+
const cacheKey = this.createGraphQLCacheKey(request);
|
|
87
|
+
const cacheTtl = config?.cache?.ttl || 300000;
|
|
88
|
+
const cacheTags = config?.cache?.tags || [
|
|
89
|
+
`gql:${this.extractOperationName(request)}`,
|
|
90
|
+
];
|
|
91
|
+
try {
|
|
92
|
+
let data;
|
|
93
|
+
if (cacheStrategy !== "no-cache") {
|
|
94
|
+
const { data: cachedData, cached } = await executeCacheStrategy(
|
|
95
|
+
cacheStrategy,
|
|
96
|
+
{
|
|
97
|
+
key: cacheKey,
|
|
98
|
+
cache: this.cache,
|
|
99
|
+
fetchFn: () => this.performRequest(request),
|
|
100
|
+
ttl: cacheTtl,
|
|
101
|
+
tags: cacheTags,
|
|
102
|
+
},
|
|
103
|
+
);
|
|
104
|
+
data = cachedData;
|
|
105
|
+
} else {
|
|
106
|
+
data = await this.performRequest(request);
|
|
107
|
+
}
|
|
108
|
+
const result = {
|
|
109
|
+
ok: true,
|
|
110
|
+
data,
|
|
111
|
+
meta: {
|
|
112
|
+
status: 200,
|
|
113
|
+
statusText: "OK",
|
|
114
|
+
headers: { "content-type": "application/json" },
|
|
115
|
+
url: this.endpoint,
|
|
116
|
+
ok: true,
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
// Run afterResponse interceptors
|
|
120
|
+
for (const interceptor of this.interceptors) {
|
|
121
|
+
if (interceptor.afterResponse) {
|
|
122
|
+
const intercepted = await interceptor.afterResponse(result);
|
|
123
|
+
if (!intercepted.ok) return intercepted;
|
|
124
|
+
if (intercepted.ok) {
|
|
125
|
+
result.data = intercepted.data;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
} catch (err) {
|
|
131
|
+
const errorResult = {
|
|
132
|
+
ok: false,
|
|
133
|
+
error: {
|
|
134
|
+
message: err.message || "GraphQL request failed",
|
|
135
|
+
code: err.code,
|
|
136
|
+
details: err,
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
// Run onError interceptors
|
|
140
|
+
for (const interceptor of this.interceptors) {
|
|
141
|
+
if (interceptor.onError) {
|
|
142
|
+
return await interceptor.onError(errorResult);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return errorResult;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Performs the actual GraphQL request.
|
|
150
|
+
*/
|
|
151
|
+
async performRequest(request) {
|
|
152
|
+
const response = await this.restFetcher.post(this.endpoint, request, {
|
|
153
|
+
cache: false, // Already handled by execute()
|
|
154
|
+
});
|
|
155
|
+
if (!response.ok) {
|
|
156
|
+
throw new Error(`GraphQL request failed: ${response.error.message}`);
|
|
157
|
+
}
|
|
158
|
+
const { data, errors } = response.data;
|
|
159
|
+
if (errors && errors.length > 0) {
|
|
160
|
+
const errorMessages = errors.map((e) => e.message).join("; ");
|
|
161
|
+
throw new Error(`GraphQL errors: ${errorMessages}`);
|
|
162
|
+
}
|
|
163
|
+
return data;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Generates cache key from GraphQL request.
|
|
167
|
+
*/
|
|
168
|
+
createGraphQLCacheKey(request) {
|
|
169
|
+
const key = `gql:${this.extractOperationName(request)}`;
|
|
170
|
+
const varsStr = request.variables ? JSON.stringify(request.variables) : "";
|
|
171
|
+
return `${key}:${varsStr}`;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Extracts operation name from GraphQL query/mutation.
|
|
175
|
+
*/
|
|
176
|
+
extractOperationName(request) {
|
|
177
|
+
if (request.operationName) return request.operationName;
|
|
178
|
+
// Try to extract from query string
|
|
179
|
+
const match = request.query.match(/(?:query|mutation)\s+(\w+)/);
|
|
180
|
+
return match ? match[1] : "anonymous";
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Invalidates cache entries by GraphQL operation name(s).
|
|
184
|
+
*/
|
|
185
|
+
async invalidate(operationNames) {
|
|
186
|
+
const tags = operationNames.map((name) => `gql:${name}`);
|
|
187
|
+
await this.cache.invalidate(tags);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Batch execute multiple GraphQL queries.
|
|
191
|
+
*/
|
|
192
|
+
async batch(requests, config) {
|
|
193
|
+
const results = {};
|
|
194
|
+
for (const [key, request] of Object.entries(requests)) {
|
|
195
|
+
const result = await this.query(request, config);
|
|
196
|
+
if (!result.ok) {
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
results[key] = result.data;
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
ok: true,
|
|
203
|
+
data: results,
|
|
204
|
+
meta: {
|
|
205
|
+
status: 200,
|
|
206
|
+
statusText: "OK",
|
|
207
|
+
headers: {},
|
|
208
|
+
url: this.endpoint,
|
|
209
|
+
ok: true,
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Creates a GraphQL client with sensible defaults.
|
|
216
|
+
*/
|
|
217
|
+
export function createGraphQLClient(opts) {
|
|
218
|
+
return new GraphQLClient(opts);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Helper to build GraphQL query strings programmatically.
|
|
222
|
+
* Useful for type-safe query construction.
|
|
223
|
+
*/
|
|
224
|
+
export class GraphQLQueryBuilder {
|
|
225
|
+
query = "";
|
|
226
|
+
variables = {};
|
|
227
|
+
/**
|
|
228
|
+
* Adds a field selection to the query.
|
|
229
|
+
*/
|
|
230
|
+
field(name, fields) {
|
|
231
|
+
this.query += name;
|
|
232
|
+
if (fields) {
|
|
233
|
+
this.query += ` { ${fields.join(" ")} }`;
|
|
234
|
+
}
|
|
235
|
+
return this;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Adds a variable to the query.
|
|
239
|
+
*/
|
|
240
|
+
variable(name, type, value) {
|
|
241
|
+
if (value !== undefined) {
|
|
242
|
+
this.variables[name] = value;
|
|
243
|
+
}
|
|
244
|
+
return this;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Builds the final GraphQL request.
|
|
248
|
+
*/
|
|
249
|
+
build(operationType = "query", operationName) {
|
|
250
|
+
const opName = operationName || "Operation";
|
|
251
|
+
const vars = Object.entries(this.variables).map(
|
|
252
|
+
([name, value]) => `$${name}: ${typeof value}`,
|
|
253
|
+
);
|
|
254
|
+
const finalQuery = `
|
|
255
|
+
${operationType} ${opName}${vars.length ? `(${vars.join(", ")})` : ""} {
|
|
256
|
+
${this.query}
|
|
257
|
+
}
|
|
258
|
+
`.trim();
|
|
259
|
+
return {
|
|
260
|
+
query: finalQuery,
|
|
261
|
+
variables: this.variables,
|
|
262
|
+
operationName: opName,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jen.js Data Fetching Module
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive data fetching infrastructure with support for:
|
|
5
|
+
* - REST/HTTP APIs with automatic retry and timeout handling
|
|
6
|
+
* - GraphQL queries and mutations with error handling
|
|
7
|
+
* - Multi-backend caching (memory, Redis, custom)
|
|
8
|
+
* - Cache strategies (cache-first, network-first, stale-while-revalidate)
|
|
9
|
+
* - Request/response interceptors
|
|
10
|
+
* - Server-side and client-side fetching
|
|
11
|
+
* - Type-safe configuration and results
|
|
12
|
+
*
|
|
13
|
+
* Key exports:
|
|
14
|
+
* - Types: FetchResult, DataFetchConfig, CacheBackend, etc.
|
|
15
|
+
* - REST: RestFetcher, createRestFetcher
|
|
16
|
+
* - GraphQL: GraphQLClient, createGraphQLClient
|
|
17
|
+
* - Cache: MemoryDataCache, NoOpCache, createCacheKey
|
|
18
|
+
* - Server: ServerDataFetcher, initializeServerFetch, getServerDataFetcher
|
|
19
|
+
* - Client: ClientDataFetcher, initializeClientFetch, getClientDataFetcher
|
|
20
|
+
*/
|
|
21
|
+
// Cache exports
|
|
22
|
+
export {
|
|
23
|
+
MemoryDataCache,
|
|
24
|
+
NoOpCache,
|
|
25
|
+
createCacheKey,
|
|
26
|
+
executeCacheStrategy,
|
|
27
|
+
} from "./cache.js";
|
|
28
|
+
// REST/HTTP exports
|
|
29
|
+
export { RestFetcher, createRestFetcher } from "./rest.js";
|
|
30
|
+
// GraphQL exports
|
|
31
|
+
export {
|
|
32
|
+
GraphQLClient,
|
|
33
|
+
createGraphQLClient,
|
|
34
|
+
GraphQLQueryBuilder,
|
|
35
|
+
} from "./graphql.js";
|
|
36
|
+
// Server-side exports
|
|
37
|
+
export {
|
|
38
|
+
ServerDataFetcher,
|
|
39
|
+
initializeServerFetch,
|
|
40
|
+
getServerDataFetcher,
|
|
41
|
+
fetchData,
|
|
42
|
+
queryGraphQL,
|
|
43
|
+
createDataLoader,
|
|
44
|
+
createParallelDataLoader,
|
|
45
|
+
createConditionalDataLoader,
|
|
46
|
+
createResilientDataLoader,
|
|
47
|
+
} from "./server.js";
|
|
48
|
+
// Client-side exports
|
|
49
|
+
export {
|
|
50
|
+
ClientDataFetcher,
|
|
51
|
+
initializeClientFetch,
|
|
52
|
+
getClientDataFetcher,
|
|
53
|
+
useData,
|
|
54
|
+
useDataAll,
|
|
55
|
+
useGraphQL,
|
|
56
|
+
useMutation,
|
|
57
|
+
} from "./client.js";
|