@jfdevelops/react-layout 2.0.0 → 2.2.0

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 (97) hide show
  1. package/dist/create-config/create-defined-resource-layout.cjs +14 -5
  2. package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
  3. package/dist/create-config/create-defined-resource-layout.d.cts +8 -6
  4. package/dist/create-config/create-defined-resource-layout.d.cts.map +1 -1
  5. package/dist/create-config/create-defined-resource-layout.d.mts +8 -6
  6. package/dist/create-config/create-defined-resource-layout.d.mts.map +1 -1
  7. package/dist/create-config/create-defined-resource-layout.mjs +14 -5
  8. package/dist/create-config/create-defined-resource-layout.mjs.map +1 -1
  9. package/dist/create-config/define-layout.cjs +69 -21
  10. package/dist/create-config/define-layout.cjs.map +1 -1
  11. package/dist/create-config/define-layout.d.cts +9 -8
  12. package/dist/create-config/define-layout.d.cts.map +1 -1
  13. package/dist/create-config/define-layout.d.mts +9 -8
  14. package/dist/create-config/define-layout.d.mts.map +1 -1
  15. package/dist/create-config/define-layout.mjs +72 -24
  16. package/dist/create-config/define-layout.mjs.map +1 -1
  17. package/dist/create-config/for-resources/create-component.d.cts +30 -24
  18. package/dist/create-config/for-resources/create-component.d.cts.map +1 -1
  19. package/dist/create-config/for-resources/create-component.d.mts +30 -24
  20. package/dist/create-config/for-resources/create-component.d.mts.map +1 -1
  21. package/dist/create-config/for-resources/create-for-resources.cjs +27 -6
  22. package/dist/create-config/for-resources/create-for-resources.cjs.map +1 -1
  23. package/dist/create-config/for-resources/create-for-resources.mjs +27 -6
  24. package/dist/create-config/for-resources/create-for-resources.mjs.map +1 -1
  25. package/dist/create-config/for-resources/scoped-layout.d.cts +2 -2
  26. package/dist/create-config/for-resources/scoped-layout.d.cts.map +1 -1
  27. package/dist/create-config/for-resources/scoped-layout.d.mts +2 -2
  28. package/dist/create-config/for-resources/scoped-layout.d.mts.map +1 -1
  29. package/dist/create-config/for-resources/scoped-render.cjs +38 -4
  30. package/dist/create-config/for-resources/scoped-render.cjs.map +1 -1
  31. package/dist/create-config/for-resources/scoped-render.d.cts +8 -1
  32. package/dist/create-config/for-resources/scoped-render.d.cts.map +1 -1
  33. package/dist/create-config/for-resources/scoped-render.d.mts +8 -1
  34. package/dist/create-config/for-resources/scoped-render.d.mts.map +1 -1
  35. package/dist/create-config/for-resources/scoped-render.mjs +38 -4
  36. package/dist/create-config/for-resources/scoped-render.mjs.map +1 -1
  37. package/dist/create-config/index.d.cts +1 -1
  38. package/dist/create-config/index.d.mts +1 -1
  39. package/dist/create-config/inspection.cjs +23 -1
  40. package/dist/create-config/inspection.cjs.map +1 -1
  41. package/dist/create-config/inspection.mjs +24 -3
  42. package/dist/create-config/inspection.mjs.map +1 -1
  43. package/dist/create-config/lazy-resource-layout.cjs +4 -4
  44. package/dist/create-config/lazy-resource-layout.cjs.map +1 -1
  45. package/dist/create-config/lazy-resource-layout.d.cts +1 -1
  46. package/dist/create-config/lazy-resource-layout.d.cts.map +1 -1
  47. package/dist/create-config/lazy-resource-layout.d.mts +1 -1
  48. package/dist/create-config/lazy-resource-layout.d.mts.map +1 -1
  49. package/dist/create-config/lazy-resource-layout.mjs +4 -4
  50. package/dist/create-config/lazy-resource-layout.mjs.map +1 -1
  51. package/dist/create-config/render-state-context.cjs +24 -0
  52. package/dist/create-config/render-state-context.cjs.map +1 -0
  53. package/dist/create-config/render-state-context.mjs +22 -0
  54. package/dist/create-config/render-state-context.mjs.map +1 -0
  55. package/dist/create-config/render-state.cjs +1 -0
  56. package/dist/create-config/render-state.cjs.map +1 -1
  57. package/dist/create-config/render-state.d.cts +26 -15
  58. package/dist/create-config/render-state.d.cts.map +1 -1
  59. package/dist/create-config/render-state.d.mts +26 -15
  60. package/dist/create-config/render-state.d.mts.map +1 -1
  61. package/dist/create-config/render-state.mjs +1 -0
  62. package/dist/create-config/render-state.mjs.map +1 -1
  63. package/dist/create-config/state-composable.cjs +4 -2
  64. package/dist/create-config/state-composable.cjs.map +1 -1
  65. package/dist/create-config/state-composable.d.cts.map +1 -1
  66. package/dist/create-config/state-composable.d.mts.map +1 -1
  67. package/dist/create-config/state-composable.mjs +4 -2
  68. package/dist/create-config/state-composable.mjs.map +1 -1
  69. package/dist/index.d.cts +3 -2
  70. package/dist/index.d.mts +3 -2
  71. package/dist/lazy/create-lazy-loader.cjs +30 -9
  72. package/dist/lazy/create-lazy-loader.cjs.map +1 -1
  73. package/dist/lazy/create-lazy-loader.mjs +31 -10
  74. package/dist/lazy/create-lazy-loader.mjs.map +1 -1
  75. package/dist/lazy/create-render-state.cjs +59 -0
  76. package/dist/lazy/create-render-state.cjs.map +1 -0
  77. package/dist/lazy/create-render-state.d.cts +33 -0
  78. package/dist/lazy/create-render-state.d.cts.map +1 -0
  79. package/dist/lazy/create-render-state.d.mts +33 -0
  80. package/dist/lazy/create-render-state.d.mts.map +1 -0
  81. package/dist/lazy/create-render-state.mjs +59 -0
  82. package/dist/lazy/create-render-state.mjs.map +1 -0
  83. package/dist/lazy/lazy-boundary.cjs +14 -6
  84. package/dist/lazy/lazy-boundary.cjs.map +1 -1
  85. package/dist/lazy/lazy-boundary.mjs +14 -6
  86. package/dist/lazy/lazy-boundary.mjs.map +1 -1
  87. package/dist/lazy/types.cjs.map +1 -1
  88. package/dist/lazy/types.d.cts +7 -6
  89. package/dist/lazy/types.d.cts.map +1 -1
  90. package/dist/lazy/types.d.mts +7 -6
  91. package/dist/lazy/types.d.mts.map +1 -1
  92. package/dist/lazy/types.mjs.map +1 -1
  93. package/package.json +4 -4
  94. package/dist/lazy/create-error-component.cjs +0 -17
  95. package/dist/lazy/create-error-component.cjs.map +0 -1
  96. package/dist/lazy/create-error-component.mjs +0 -16
  97. package/dist/lazy/create-error-component.mjs.map +0 -1
package/dist/index.d.cts CHANGED
@@ -6,7 +6,7 @@ import { BaseComponent, MergeIntersection, Show, UnionToIntersection, pick } fro
6
6
  import { LayoutResourceKey, NormalizeResource, NormalizeResources, NormalizedResourceDefinition, NormalizedResourceDefinitions, ResourceDefinition, ResourceDefinitionValue, ResourceEnum, ResourceLayoutComponentProps, ResourcePath, ResourceTree, normalizeResource, normalizeResourceDefinitions, normalizeResources, toResourceEnum } from "./resource.cjs";
7
7
  import { InPropsDefinition, InPropsFunction, InPropsObject, InPropsOptions, IncludedComponentPropDefinitions, IncludedPropBehavior, IncludedProps, InferredInProps, LayoutRenderProps, MergedLayoutInProps, PropsContextRender, PropsRenderDefinition, ResolvedIncludedComponentProps, ResolvedIncludedConfigProps, ResolvedIncludedProps, ResolvedIncludedPropsAsDefined } from "./props.cjs";
8
8
  import { AsStateComposable, StateComposable, StateComposableOptions } from "./create-config/state-composable.cjs";
9
- import { AnyRenderStateDefinition, CreateLayoutBuildingBlocks, CreateLayoutBuildingBlocksArguments, CreateLayoutBuildingBlocksResult, CreateRenderState, CreateRenderStateBuilderArguments, CreateRenderStateBuilderResult, CreateRenderStateFromState, DeferredRenderState, DefineLayoutComposables, LayoutComposablesDefinition, LazyRenderState, RenderStateCallProps, RenderStateCallback, RenderStateComposablesDefinition, RenderStateContext, RenderStateFragment, RenderStateName, RenderStateOverloads, RenderStateProps, RenderStateReferences, TypedRenderStateCallback } from "./create-config/render-state.cjs";
9
+ import { AnyRenderStateDefinition, BuiltinRenderStateName, CreateLayoutBuildingBlocks, CreateLayoutBuildingBlocksArguments, CreateLayoutBuildingBlocksResult, CreateRenderState, CreateRenderStateBuilderArguments, CreateRenderStateBuilderResult, CreateRenderStateFromState, DeferredRenderState, DefineLayoutComposables, LayoutComposablesDefinition, LazyRenderState, RenderStateCallProps, RenderStateCallback, RenderStateComposablesDefinition, RenderStateContext, RenderStateFragment, RenderStateName, RenderStateOverloads, RenderStateProps, RenderStateReferences, TypedRenderStateCallback } from "./create-config/render-state.cjs";
10
10
  import { LayoutNameCallback, LayoutNameContext, LayoutNameFactory, LayoutNameInput, LayoutNameOptions, LayoutNamePartDefinitions, LayoutNamePartType, LayoutNamePartValues, LayoutNameParts, LayoutNameResolver, ResolvedLayoutName, defineLayoutName } from "./create-config/layout-name.cjs";
11
11
  import { ParameterizedResourcePath, PathVariables } from "./create-config/paths/types.cjs";
12
12
  import { CreateGetComponentForPath, GetComponentForPath, ResolvedPathValue } from "./create-config/for-paths/get-component-for-path.cjs";
@@ -16,6 +16,7 @@ import { ComponentTypes, CreateResourceConfigFn, CreateResourceConfigForResource
16
16
  import { CreateResourceMap, CreateResourceMapFn } from "./create-config/create-resource-links.cjs";
17
17
  import { ScopedComponentRenderFn } from "./lazy/scoped-content.cjs";
18
18
  import { ContextualInlineRenderState, ContextualInlineRenderStates, CreateResourceLayoutWithLayoutOptions, CreateViewMapBuiltInRenderStatesOptions, CreateViewMapFunctionRenderOptions, CreateViewMapInlineRenderStatesOptions, CreateViewMapRenderStatesOptions, DefineResourceLayoutWithLayoutFn, DefineResourcesFn, DefinedResourceLayoutWithShell, LayoutRenderResourcesAccessor, LayoutResourcesAccessor, ResourceLayoutProvider, ResourceLayoutProviderProps, ResourceLayoutShellComponent, ResourceLayoutShellProps, ResourceSelection, ShellLayoutDefinition, ShellRenderContext, TypedBuiltInRenderStates, TypedInlineRenderState, defineResourceLayout } from "./create-config/define-layout.cjs";
19
+ import { CreateLazyRenderState, LazyDefaultState } from "./lazy/create-render-state.cjs";
19
20
  import { LazyResourceLayoutComponent, LazyResourceLayoutOptions } from "./create-config/lazy-resource-layout.cjs";
20
21
  import { BoundDefineResourceLayout, CreateDefinedResourceLayoutOptions, CreateDefinedResourceLayoutResult, DefineLazyDefaults, DefinedResourceLayoutInput, NonEmptyResources, createDefinedResourceLayout } from "./create-config/create-defined-resource-layout.cjs";
21
22
  import { ResourceLayoutShellPublisher } from "./create-config/shell-context.cjs";
@@ -32,4 +33,4 @@ import { MissingPathVariableContext, MissingPathVariableError } from "./errors/m
32
33
  import { MissingResourceProviderError } from "./errors/missing-resource-provider.cjs";
33
34
  import { AnyComposableComponent, ComposableComponent, ComposableComponentCallable, ComposableComponents, ComposableNameContext, ComposablePresetComponent, ComposablePresetComponentCallProps, ComposablePresetMeta, ComposablePresetProps, ComposableResourceLayout, CreateLayoutComposable, DefinedComposableComponentRecord, LayoutComposablePresetProvider, LayoutComposablesFactory, MakeComposable, MakeComposableOptions, MergePresetProps, PresetPropsFromComposable, RequiredPresetLayoutProps, RequiredPresetRenderProps, ResolveLayoutComposables, collectComposablePresetEntries, createComposableComponent, createLayoutComposableFactory, defineComposableComponent, makeComposable, resolveComposablePresetProps, resolveLayoutComposables } from "@jfdevelops/react-layout-composables";
34
35
  import { AnyBuiltPropDefinition, ExtractDefinitionValue, PropError, PropErrorOptions, ResolveLayoutProps, ResolveLayoutPropsAsDefined, ResolveProps, ResolvedBuiltPropShape, createPrimitivePropBuilder, createProp, isPropDefinitionShape, resolvePropDefinitionValues, validateProps } from "@jfdevelops/react-layout-validator";
35
- export { type AnyBuiltPropDefinition, type AnyComposableComponent, type AnyRenderStateDefinition, type AsStateComposable, type BaseComponent, type BoundDefineResourceLayout, type ComponentTypes, type ComposableComponent, type ComposableComponentCallable, type ComposableComponents, type ComposableNameContext, type ComposablePresetComponent, type ComposablePresetComponentCallProps, type ComposablePresetMeta, type ComposablePresetProps, type ComposableResourceLayout, type ContextualInlineRenderState, type ContextualInlineRenderStates, type CreateDefinedResourceLayoutOptions, type CreateDefinedResourceLayoutResult, type CreateGetComponentForPath, type CreateLayoutBuildingBlocks, type CreateLayoutBuildingBlocksArguments, type CreateLayoutBuildingBlocksResult, type CreateLayoutComposable, type CreateLazyErrorComponent, type CreateRenderState, type CreateRenderStateBuilderArguments, type CreateRenderStateBuilderResult, type CreateRenderStateFromState, type CreateResourceConfigFn, type CreateResourceConfigForResource, type CreateResourceLayoutWithLayoutOptions, type CreateResourceMap, type CreateResourceMapFn, type CreateViewMapBuiltInRenderStatesOptions, type CreateViewMapFunctionRenderOptions, type CreateViewMapInlineRenderStatesOptions, type CreateViewMapRenderStatesOptions, type CreatedResourceConfig, type DeferredRenderState, type DefineLayoutComposables, type DefineLazyDefaults, type DefineResourceLayoutWithLayoutFn, type DefineResourcesFn, type DefinedComposableComponentRecord, type DefinedResourceLayoutInput, type DefinedResourceLayoutWithShell, type ExtractDefinitionValue, type ForPaths, type ForPathsRenderContext, type GetComponentForPath, type InPropsDefinition, type InPropsFunction, type InPropsObject, type InPropsOptions, type IncludedComponentPropDefinitions, type IncludedPropBehavior, type IncludedProps, type InferredInProps, type InvalidComponentContext, InvalidComponentError, type InvalidConfigContext, InvalidConfigError, type InvalidPartContext, InvalidPartError, type InvalidPartTypeContext, InvalidPartTypeError, type InvalidPathContext, InvalidPathError, type InvalidResourceContext, InvalidResourceError, type InvalidSubResourceContext, InvalidSubResourceError, type IsSubResourceKey, LayoutComposablePresetProvider, type LayoutComposablesDefinition, type LayoutComposablesFactory, LayoutConfigurationError, type LayoutConfigurationErrorContext, type LayoutNameCallback, type LayoutNameContext, type LayoutNameFactory, type LayoutNameInput, type LayoutNameOptions, type LayoutNamePartDefinitions, type LayoutNamePartType, type LayoutNamePartValues, type LayoutNameParts, type LayoutNameResolver, type LayoutPreviewProps, type LayoutRenderProps, type LayoutRenderResourcesAccessor, type LayoutResourceKey, type LayoutResourcesAccessor, type LazyErrorHandlers, type LazyHandle, type LazyOptions, type LazyRenderState, type LazyResourceError, type LazyResourceErrorComponent, type LazyResourceErrorMap, type LazyResourceErrorProps, type LazyResourceLayoutComponent, type LazyResourceLayoutOptions, type LazyResourceLoadingComponent, LazyResourceModuleShapeError, LazyResourceStateNotFoundError, type LazyResourceStates, type LoadStatus, type MakeComposable, type MakeComposableOptions, type MergeIntersection, type MergePresetProps, type MergedLayoutInProps, type MissingPathVariableContext, MissingPathVariableError, MissingResourceProviderError, type NonEmptyResources, type NormalizeResource, type NormalizeResources, type NormalizedResourceDefinition, type NormalizedResourceDefinitions, type ParameterizedResourcePath, type PathVariables, type PresetPropsFromComposable, PropError, type PropErrorOptions, type PropsContextRender, type PropsRenderDefinition, ReactLayoutError, type RenderStateCallProps, type RenderStateCallback, type RenderStateComposablesDefinition, type RenderStateContext, type RenderStateFragment, type RenderStateName, type RenderStateOverloads, type RenderStateProps, type RenderStateReferences, type RenderedPathComponent, type RenderedPathComponentHOF, type RequiredPresetLayoutProps, type RequiredPresetRenderProps, type ResolveLayoutComposables, type ResolveLayoutProps, type ResolveLayoutPropsAsDefined, type ResolveProps, type ResolvedBuiltPropShape, type ResolvedIncludedComponentProps, type ResolvedIncludedConfigProps, type ResolvedIncludedProps, type ResolvedIncludedPropsAsDefined, type ResolvedLayoutName, type ResolvedPathValue, type ResourceConfigFragment, type ResourceDefinition, type ResourceDefinitionValue, type ResourceEnum, type ResourceLayoutComponentProps, type ResourceLayoutProvider, type ResourceLayoutProviderProps, type ResourceLayoutShellComponent, type ResourceLayoutShellProps, type ResourceLayoutShellPublisher, ResourceModuleLoadError, type ResourcePath, ResourceRenderError, type ResourceSelection, type ResourceStateError, type ResourceTree, type ScopedComponentRenderFn, type ShellLayoutDefinition, type ShellRenderContext, type Show, type StateComposable, type StateComposableOptions, type TargetPathBuilder, type TypedBuiltInRenderStates, type TypedInlineRenderState, type TypedRenderStateCallback, type UnionToIntersection, collectComposablePresetEntries, createComposableComponent, createDefinedResourceLayout, createLayoutComposableFactory, createPrimitivePropBuilder, createProp, defineComposableComponent, defineLayoutName, defineLayoutPreview, defineResourceLayout, isLazyResourceError, isPropDefinitionShape, makeComposable, normalizeResource, normalizeResourceDefinitions, normalizeResources, pick, resolveComposablePresetProps, resolveLayoutComposables, resolvePropDefinitionValues, toResourceEnum, validateProps };
36
+ export { type AnyBuiltPropDefinition, type AnyComposableComponent, type AnyRenderStateDefinition, type AsStateComposable, type BaseComponent, type BoundDefineResourceLayout, type BuiltinRenderStateName, type ComponentTypes, type ComposableComponent, type ComposableComponentCallable, type ComposableComponents, type ComposableNameContext, type ComposablePresetComponent, type ComposablePresetComponentCallProps, type ComposablePresetMeta, type ComposablePresetProps, type ComposableResourceLayout, type ContextualInlineRenderState, type ContextualInlineRenderStates, type CreateDefinedResourceLayoutOptions, type CreateDefinedResourceLayoutResult, type CreateGetComponentForPath, type CreateLayoutBuildingBlocks, type CreateLayoutBuildingBlocksArguments, type CreateLayoutBuildingBlocksResult, type CreateLayoutComposable, type CreateLazyErrorComponent, type CreateLazyRenderState, type CreateRenderState, type CreateRenderStateBuilderArguments, type CreateRenderStateBuilderResult, type CreateRenderStateFromState, type CreateResourceConfigFn, type CreateResourceConfigForResource, type CreateResourceLayoutWithLayoutOptions, type CreateResourceMap, type CreateResourceMapFn, type CreateViewMapBuiltInRenderStatesOptions, type CreateViewMapFunctionRenderOptions, type CreateViewMapInlineRenderStatesOptions, type CreateViewMapRenderStatesOptions, type CreatedResourceConfig, type DeferredRenderState, type DefineLayoutComposables, type DefineLazyDefaults, type DefineResourceLayoutWithLayoutFn, type DefineResourcesFn, type DefinedComposableComponentRecord, type DefinedResourceLayoutInput, type DefinedResourceLayoutWithShell, type ExtractDefinitionValue, type ForPaths, type ForPathsRenderContext, type GetComponentForPath, type InPropsDefinition, type InPropsFunction, type InPropsObject, type InPropsOptions, type IncludedComponentPropDefinitions, type IncludedPropBehavior, type IncludedProps, type InferredInProps, type InvalidComponentContext, InvalidComponentError, type InvalidConfigContext, InvalidConfigError, type InvalidPartContext, InvalidPartError, type InvalidPartTypeContext, InvalidPartTypeError, type InvalidPathContext, InvalidPathError, type InvalidResourceContext, InvalidResourceError, type InvalidSubResourceContext, InvalidSubResourceError, type IsSubResourceKey, LayoutComposablePresetProvider, type LayoutComposablesDefinition, type LayoutComposablesFactory, LayoutConfigurationError, type LayoutConfigurationErrorContext, type LayoutNameCallback, type LayoutNameContext, type LayoutNameFactory, type LayoutNameInput, type LayoutNameOptions, type LayoutNamePartDefinitions, type LayoutNamePartType, type LayoutNamePartValues, type LayoutNameParts, type LayoutNameResolver, type LayoutPreviewProps, type LayoutRenderProps, type LayoutRenderResourcesAccessor, type LayoutResourceKey, type LayoutResourcesAccessor, type LazyDefaultState, type LazyErrorHandlers, type LazyHandle, type LazyOptions, type LazyRenderState, type LazyResourceError, type LazyResourceErrorComponent, type LazyResourceErrorMap, type LazyResourceErrorProps, type LazyResourceLayoutComponent, type LazyResourceLayoutOptions, type LazyResourceLoadingComponent, LazyResourceModuleShapeError, LazyResourceStateNotFoundError, type LazyResourceStates, type LoadStatus, type MakeComposable, type MakeComposableOptions, type MergeIntersection, type MergePresetProps, type MergedLayoutInProps, type MissingPathVariableContext, MissingPathVariableError, MissingResourceProviderError, type NonEmptyResources, type NormalizeResource, type NormalizeResources, type NormalizedResourceDefinition, type NormalizedResourceDefinitions, type ParameterizedResourcePath, type PathVariables, type PresetPropsFromComposable, PropError, type PropErrorOptions, type PropsContextRender, type PropsRenderDefinition, ReactLayoutError, type RenderStateCallProps, type RenderStateCallback, type RenderStateComposablesDefinition, type RenderStateContext, type RenderStateFragment, type RenderStateName, type RenderStateOverloads, type RenderStateProps, type RenderStateReferences, type RenderedPathComponent, type RenderedPathComponentHOF, type RequiredPresetLayoutProps, type RequiredPresetRenderProps, type ResolveLayoutComposables, type ResolveLayoutProps, type ResolveLayoutPropsAsDefined, type ResolveProps, type ResolvedBuiltPropShape, type ResolvedIncludedComponentProps, type ResolvedIncludedConfigProps, type ResolvedIncludedProps, type ResolvedIncludedPropsAsDefined, type ResolvedLayoutName, type ResolvedPathValue, type ResourceConfigFragment, type ResourceDefinition, type ResourceDefinitionValue, type ResourceEnum, type ResourceLayoutComponentProps, type ResourceLayoutProvider, type ResourceLayoutProviderProps, type ResourceLayoutShellComponent, type ResourceLayoutShellProps, type ResourceLayoutShellPublisher, ResourceModuleLoadError, type ResourcePath, ResourceRenderError, type ResourceSelection, type ResourceStateError, type ResourceTree, type ScopedComponentRenderFn, type ShellLayoutDefinition, type ShellRenderContext, type Show, type StateComposable, type StateComposableOptions, type TargetPathBuilder, type TypedBuiltInRenderStates, type TypedInlineRenderState, type TypedRenderStateCallback, type UnionToIntersection, collectComposablePresetEntries, createComposableComponent, createDefinedResourceLayout, createLayoutComposableFactory, createPrimitivePropBuilder, createProp, defineComposableComponent, defineLayoutName, defineLayoutPreview, defineResourceLayout, isLazyResourceError, isPropDefinitionShape, makeComposable, normalizeResource, normalizeResourceDefinitions, normalizeResources, pick, resolveComposablePresetProps, resolveLayoutComposables, resolvePropDefinitionValues, toResourceEnum, validateProps };
package/dist/index.d.mts CHANGED
@@ -6,7 +6,7 @@ import { BaseComponent, MergeIntersection, Show, UnionToIntersection, pick } fro
6
6
  import { LayoutResourceKey, NormalizeResource, NormalizeResources, NormalizedResourceDefinition, NormalizedResourceDefinitions, ResourceDefinition, ResourceDefinitionValue, ResourceEnum, ResourceLayoutComponentProps, ResourcePath, ResourceTree, normalizeResource, normalizeResourceDefinitions, normalizeResources, toResourceEnum } from "./resource.mjs";
7
7
  import { InPropsDefinition, InPropsFunction, InPropsObject, InPropsOptions, IncludedComponentPropDefinitions, IncludedPropBehavior, IncludedProps, InferredInProps, LayoutRenderProps, MergedLayoutInProps, PropsContextRender, PropsRenderDefinition, ResolvedIncludedComponentProps, ResolvedIncludedConfigProps, ResolvedIncludedProps, ResolvedIncludedPropsAsDefined } from "./props.mjs";
8
8
  import { AsStateComposable, StateComposable, StateComposableOptions } from "./create-config/state-composable.mjs";
9
- import { AnyRenderStateDefinition, CreateLayoutBuildingBlocks, CreateLayoutBuildingBlocksArguments, CreateLayoutBuildingBlocksResult, CreateRenderState, CreateRenderStateBuilderArguments, CreateRenderStateBuilderResult, CreateRenderStateFromState, DeferredRenderState, DefineLayoutComposables, LayoutComposablesDefinition, LazyRenderState, RenderStateCallProps, RenderStateCallback, RenderStateComposablesDefinition, RenderStateContext, RenderStateFragment, RenderStateName, RenderStateOverloads, RenderStateProps, RenderStateReferences, TypedRenderStateCallback } from "./create-config/render-state.mjs";
9
+ import { AnyRenderStateDefinition, BuiltinRenderStateName, CreateLayoutBuildingBlocks, CreateLayoutBuildingBlocksArguments, CreateLayoutBuildingBlocksResult, CreateRenderState, CreateRenderStateBuilderArguments, CreateRenderStateBuilderResult, CreateRenderStateFromState, DeferredRenderState, DefineLayoutComposables, LayoutComposablesDefinition, LazyRenderState, RenderStateCallProps, RenderStateCallback, RenderStateComposablesDefinition, RenderStateContext, RenderStateFragment, RenderStateName, RenderStateOverloads, RenderStateProps, RenderStateReferences, TypedRenderStateCallback } from "./create-config/render-state.mjs";
10
10
  import { LayoutNameCallback, LayoutNameContext, LayoutNameFactory, LayoutNameInput, LayoutNameOptions, LayoutNamePartDefinitions, LayoutNamePartType, LayoutNamePartValues, LayoutNameParts, LayoutNameResolver, ResolvedLayoutName, defineLayoutName } from "./create-config/layout-name.mjs";
11
11
  import { ParameterizedResourcePath, PathVariables } from "./create-config/paths/types.mjs";
12
12
  import { CreateGetComponentForPath, GetComponentForPath, ResolvedPathValue } from "./create-config/for-paths/get-component-for-path.mjs";
@@ -16,6 +16,7 @@ import { ComponentTypes, CreateResourceConfigFn, CreateResourceConfigForResource
16
16
  import { CreateResourceMap, CreateResourceMapFn } from "./create-config/create-resource-links.mjs";
17
17
  import { ScopedComponentRenderFn } from "./lazy/scoped-content.mjs";
18
18
  import { ContextualInlineRenderState, ContextualInlineRenderStates, CreateResourceLayoutWithLayoutOptions, CreateViewMapBuiltInRenderStatesOptions, CreateViewMapFunctionRenderOptions, CreateViewMapInlineRenderStatesOptions, CreateViewMapRenderStatesOptions, DefineResourceLayoutWithLayoutFn, DefineResourcesFn, DefinedResourceLayoutWithShell, LayoutRenderResourcesAccessor, LayoutResourcesAccessor, ResourceLayoutProvider, ResourceLayoutProviderProps, ResourceLayoutShellComponent, ResourceLayoutShellProps, ResourceSelection, ShellLayoutDefinition, ShellRenderContext, TypedBuiltInRenderStates, TypedInlineRenderState, defineResourceLayout } from "./create-config/define-layout.mjs";
19
+ import { CreateLazyRenderState, LazyDefaultState } from "./lazy/create-render-state.mjs";
19
20
  import { LazyResourceLayoutComponent, LazyResourceLayoutOptions } from "./create-config/lazy-resource-layout.mjs";
20
21
  import { BoundDefineResourceLayout, CreateDefinedResourceLayoutOptions, CreateDefinedResourceLayoutResult, DefineLazyDefaults, DefinedResourceLayoutInput, NonEmptyResources, createDefinedResourceLayout } from "./create-config/create-defined-resource-layout.mjs";
21
22
  import { ResourceLayoutShellPublisher } from "./create-config/shell-context.mjs";
@@ -32,4 +33,4 @@ import { MissingPathVariableContext, MissingPathVariableError } from "./errors/m
32
33
  import { MissingResourceProviderError } from "./errors/missing-resource-provider.mjs";
33
34
  import { AnyComposableComponent, ComposableComponent, ComposableComponentCallable, ComposableComponents, ComposableNameContext, ComposablePresetComponent, ComposablePresetComponentCallProps, ComposablePresetMeta, ComposablePresetProps, ComposableResourceLayout, CreateLayoutComposable, DefinedComposableComponentRecord, LayoutComposablePresetProvider, LayoutComposablesFactory, MakeComposable, MakeComposableOptions, MergePresetProps, PresetPropsFromComposable, RequiredPresetLayoutProps, RequiredPresetRenderProps, ResolveLayoutComposables, collectComposablePresetEntries, createComposableComponent, createLayoutComposableFactory, defineComposableComponent, makeComposable, resolveComposablePresetProps, resolveLayoutComposables } from "@jfdevelops/react-layout-composables";
34
35
  import { AnyBuiltPropDefinition, ExtractDefinitionValue, PropError, PropErrorOptions, ResolveLayoutProps, ResolveLayoutPropsAsDefined, ResolveProps, ResolvedBuiltPropShape, createPrimitivePropBuilder, createProp, isPropDefinitionShape, resolvePropDefinitionValues, validateProps } from "@jfdevelops/react-layout-validator";
35
- export { type AnyBuiltPropDefinition, type AnyComposableComponent, type AnyRenderStateDefinition, type AsStateComposable, type BaseComponent, type BoundDefineResourceLayout, type ComponentTypes, type ComposableComponent, type ComposableComponentCallable, type ComposableComponents, type ComposableNameContext, type ComposablePresetComponent, type ComposablePresetComponentCallProps, type ComposablePresetMeta, type ComposablePresetProps, type ComposableResourceLayout, type ContextualInlineRenderState, type ContextualInlineRenderStates, type CreateDefinedResourceLayoutOptions, type CreateDefinedResourceLayoutResult, type CreateGetComponentForPath, type CreateLayoutBuildingBlocks, type CreateLayoutBuildingBlocksArguments, type CreateLayoutBuildingBlocksResult, type CreateLayoutComposable, type CreateLazyErrorComponent, type CreateRenderState, type CreateRenderStateBuilderArguments, type CreateRenderStateBuilderResult, type CreateRenderStateFromState, type CreateResourceConfigFn, type CreateResourceConfigForResource, type CreateResourceLayoutWithLayoutOptions, type CreateResourceMap, type CreateResourceMapFn, type CreateViewMapBuiltInRenderStatesOptions, type CreateViewMapFunctionRenderOptions, type CreateViewMapInlineRenderStatesOptions, type CreateViewMapRenderStatesOptions, type CreatedResourceConfig, type DeferredRenderState, type DefineLayoutComposables, type DefineLazyDefaults, type DefineResourceLayoutWithLayoutFn, type DefineResourcesFn, type DefinedComposableComponentRecord, type DefinedResourceLayoutInput, type DefinedResourceLayoutWithShell, type ExtractDefinitionValue, type ForPaths, type ForPathsRenderContext, type GetComponentForPath, type InPropsDefinition, type InPropsFunction, type InPropsObject, type InPropsOptions, type IncludedComponentPropDefinitions, type IncludedPropBehavior, type IncludedProps, type InferredInProps, type InvalidComponentContext, InvalidComponentError, type InvalidConfigContext, InvalidConfigError, type InvalidPartContext, InvalidPartError, type InvalidPartTypeContext, InvalidPartTypeError, type InvalidPathContext, InvalidPathError, type InvalidResourceContext, InvalidResourceError, type InvalidSubResourceContext, InvalidSubResourceError, type IsSubResourceKey, LayoutComposablePresetProvider, type LayoutComposablesDefinition, type LayoutComposablesFactory, LayoutConfigurationError, type LayoutConfigurationErrorContext, type LayoutNameCallback, type LayoutNameContext, type LayoutNameFactory, type LayoutNameInput, type LayoutNameOptions, type LayoutNamePartDefinitions, type LayoutNamePartType, type LayoutNamePartValues, type LayoutNameParts, type LayoutNameResolver, type LayoutPreviewProps, type LayoutRenderProps, type LayoutRenderResourcesAccessor, type LayoutResourceKey, type LayoutResourcesAccessor, type LazyErrorHandlers, type LazyHandle, type LazyOptions, type LazyRenderState, type LazyResourceError, type LazyResourceErrorComponent, type LazyResourceErrorMap, type LazyResourceErrorProps, type LazyResourceLayoutComponent, type LazyResourceLayoutOptions, type LazyResourceLoadingComponent, LazyResourceModuleShapeError, LazyResourceStateNotFoundError, type LazyResourceStates, type LoadStatus, type MakeComposable, type MakeComposableOptions, type MergeIntersection, type MergePresetProps, type MergedLayoutInProps, type MissingPathVariableContext, MissingPathVariableError, MissingResourceProviderError, type NonEmptyResources, type NormalizeResource, type NormalizeResources, type NormalizedResourceDefinition, type NormalizedResourceDefinitions, type ParameterizedResourcePath, type PathVariables, type PresetPropsFromComposable, PropError, type PropErrorOptions, type PropsContextRender, type PropsRenderDefinition, ReactLayoutError, type RenderStateCallProps, type RenderStateCallback, type RenderStateComposablesDefinition, type RenderStateContext, type RenderStateFragment, type RenderStateName, type RenderStateOverloads, type RenderStateProps, type RenderStateReferences, type RenderedPathComponent, type RenderedPathComponentHOF, type RequiredPresetLayoutProps, type RequiredPresetRenderProps, type ResolveLayoutComposables, type ResolveLayoutProps, type ResolveLayoutPropsAsDefined, type ResolveProps, type ResolvedBuiltPropShape, type ResolvedIncludedComponentProps, type ResolvedIncludedConfigProps, type ResolvedIncludedProps, type ResolvedIncludedPropsAsDefined, type ResolvedLayoutName, type ResolvedPathValue, type ResourceConfigFragment, type ResourceDefinition, type ResourceDefinitionValue, type ResourceEnum, type ResourceLayoutComponentProps, type ResourceLayoutProvider, type ResourceLayoutProviderProps, type ResourceLayoutShellComponent, type ResourceLayoutShellProps, type ResourceLayoutShellPublisher, ResourceModuleLoadError, type ResourcePath, ResourceRenderError, type ResourceSelection, type ResourceStateError, type ResourceTree, type ScopedComponentRenderFn, type ShellLayoutDefinition, type ShellRenderContext, type Show, type StateComposable, type StateComposableOptions, type TargetPathBuilder, type TypedBuiltInRenderStates, type TypedInlineRenderState, type TypedRenderStateCallback, type UnionToIntersection, collectComposablePresetEntries, createComposableComponent, createDefinedResourceLayout, createLayoutComposableFactory, createPrimitivePropBuilder, createProp, defineComposableComponent, defineLayoutName, defineLayoutPreview, defineResourceLayout, isLazyResourceError, isPropDefinitionShape, makeComposable, normalizeResource, normalizeResourceDefinitions, normalizeResources, pick, resolveComposablePresetProps, resolveLayoutComposables, resolvePropDefinitionValues, toResourceEnum, validateProps };
36
+ export { type AnyBuiltPropDefinition, type AnyComposableComponent, type AnyRenderStateDefinition, type AsStateComposable, type BaseComponent, type BoundDefineResourceLayout, type BuiltinRenderStateName, type ComponentTypes, type ComposableComponent, type ComposableComponentCallable, type ComposableComponents, type ComposableNameContext, type ComposablePresetComponent, type ComposablePresetComponentCallProps, type ComposablePresetMeta, type ComposablePresetProps, type ComposableResourceLayout, type ContextualInlineRenderState, type ContextualInlineRenderStates, type CreateDefinedResourceLayoutOptions, type CreateDefinedResourceLayoutResult, type CreateGetComponentForPath, type CreateLayoutBuildingBlocks, type CreateLayoutBuildingBlocksArguments, type CreateLayoutBuildingBlocksResult, type CreateLayoutComposable, type CreateLazyErrorComponent, type CreateLazyRenderState, type CreateRenderState, type CreateRenderStateBuilderArguments, type CreateRenderStateBuilderResult, type CreateRenderStateFromState, type CreateResourceConfigFn, type CreateResourceConfigForResource, type CreateResourceLayoutWithLayoutOptions, type CreateResourceMap, type CreateResourceMapFn, type CreateViewMapBuiltInRenderStatesOptions, type CreateViewMapFunctionRenderOptions, type CreateViewMapInlineRenderStatesOptions, type CreateViewMapRenderStatesOptions, type CreatedResourceConfig, type DeferredRenderState, type DefineLayoutComposables, type DefineLazyDefaults, type DefineResourceLayoutWithLayoutFn, type DefineResourcesFn, type DefinedComposableComponentRecord, type DefinedResourceLayoutInput, type DefinedResourceLayoutWithShell, type ExtractDefinitionValue, type ForPaths, type ForPathsRenderContext, type GetComponentForPath, type InPropsDefinition, type InPropsFunction, type InPropsObject, type InPropsOptions, type IncludedComponentPropDefinitions, type IncludedPropBehavior, type IncludedProps, type InferredInProps, type InvalidComponentContext, InvalidComponentError, type InvalidConfigContext, InvalidConfigError, type InvalidPartContext, InvalidPartError, type InvalidPartTypeContext, InvalidPartTypeError, type InvalidPathContext, InvalidPathError, type InvalidResourceContext, InvalidResourceError, type InvalidSubResourceContext, InvalidSubResourceError, type IsSubResourceKey, LayoutComposablePresetProvider, type LayoutComposablesDefinition, type LayoutComposablesFactory, LayoutConfigurationError, type LayoutConfigurationErrorContext, type LayoutNameCallback, type LayoutNameContext, type LayoutNameFactory, type LayoutNameInput, type LayoutNameOptions, type LayoutNamePartDefinitions, type LayoutNamePartType, type LayoutNamePartValues, type LayoutNameParts, type LayoutNameResolver, type LayoutPreviewProps, type LayoutRenderProps, type LayoutRenderResourcesAccessor, type LayoutResourceKey, type LayoutResourcesAccessor, type LazyDefaultState, type LazyErrorHandlers, type LazyHandle, type LazyOptions, type LazyRenderState, type LazyResourceError, type LazyResourceErrorComponent, type LazyResourceErrorMap, type LazyResourceErrorProps, type LazyResourceLayoutComponent, type LazyResourceLayoutOptions, type LazyResourceLoadingComponent, LazyResourceModuleShapeError, LazyResourceStateNotFoundError, type LazyResourceStates, type LoadStatus, type MakeComposable, type MakeComposableOptions, type MergeIntersection, type MergePresetProps, type MergedLayoutInProps, type MissingPathVariableContext, MissingPathVariableError, MissingResourceProviderError, type NonEmptyResources, type NormalizeResource, type NormalizeResources, type NormalizedResourceDefinition, type NormalizedResourceDefinitions, type ParameterizedResourcePath, type PathVariables, type PresetPropsFromComposable, PropError, type PropErrorOptions, type PropsContextRender, type PropsRenderDefinition, ReactLayoutError, type RenderStateCallProps, type RenderStateCallback, type RenderStateComposablesDefinition, type RenderStateContext, type RenderStateFragment, type RenderStateName, type RenderStateOverloads, type RenderStateProps, type RenderStateReferences, type RenderedPathComponent, type RenderedPathComponentHOF, type RequiredPresetLayoutProps, type RequiredPresetRenderProps, type ResolveLayoutComposables, type ResolveLayoutProps, type ResolveLayoutPropsAsDefined, type ResolveProps, type ResolvedBuiltPropShape, type ResolvedIncludedComponentProps, type ResolvedIncludedConfigProps, type ResolvedIncludedProps, type ResolvedIncludedPropsAsDefined, type ResolvedLayoutName, type ResolvedPathValue, type ResourceConfigFragment, type ResourceDefinition, type ResourceDefinitionValue, type ResourceEnum, type ResourceLayoutComponentProps, type ResourceLayoutProvider, type ResourceLayoutProviderProps, type ResourceLayoutShellComponent, type ResourceLayoutShellProps, type ResourceLayoutShellPublisher, ResourceModuleLoadError, type ResourcePath, ResourceRenderError, type ResourceSelection, type ResourceStateError, type ResourceTree, type ScopedComponentRenderFn, type ShellLayoutDefinition, type ShellRenderContext, type Show, type StateComposable, type StateComposableOptions, type TargetPathBuilder, type TypedBuiltInRenderStates, type TypedInlineRenderState, type TypedRenderStateCallback, type UnionToIntersection, collectComposablePresetEntries, createComposableComponent, createDefinedResourceLayout, createLayoutComposableFactory, createPrimitivePropBuilder, createProp, defineComposableComponent, defineLayoutName, defineLayoutPreview, defineResourceLayout, isLazyResourceError, isPropDefinitionShape, makeComposable, normalizeResource, normalizeResourceDefinitions, normalizeResources, pick, resolveComposablePresetProps, resolveLayoutComposables, resolvePropDefinitionValues, toResourceEnum, validateProps };
@@ -8,6 +8,7 @@ function createLazyLoader(options) {
8
8
  let promise;
9
9
  let preloadPromise;
10
10
  let status = "unresolved";
11
+ let settled;
11
12
  const components = /* @__PURE__ */ new Map();
12
13
  let generation = 0;
13
14
  function get() {
@@ -21,12 +22,20 @@ function createLazyLoader(options) {
21
22
  throw new require_resource_state_error.ResourceModuleLoadError(options.label, cause);
22
23
  }).then(options.select).then((selected) => {
23
24
  if (attempt === generation) {
25
+ settled = {
26
+ ok: true,
27
+ value: selected
28
+ };
24
29
  status = "resolved";
25
30
  options.hooks?.onLoadSuccess?.();
26
31
  }
27
32
  return selected;
28
33
  }, (error) => {
29
34
  if (attempt === generation) {
35
+ settled = {
36
+ ok: false,
37
+ error
38
+ };
30
39
  status = "error";
31
40
  options.hooks?.onLoadError?.(error);
32
41
  }
@@ -44,6 +53,7 @@ function createLazyLoader(options) {
44
53
  generation++;
45
54
  promise = void 0;
46
55
  preloadPromise = void 0;
56
+ settled = void 0;
47
57
  components.clear();
48
58
  status = "unresolved";
49
59
  },
@@ -51,21 +61,32 @@ function createLazyLoader(options) {
51
61
  const key = map ?? member;
52
62
  let component = components.get(key);
53
63
  if (!component) {
54
- component = (0, react.lazy)(async () => {
55
- const attempt = generation;
56
- const selected = await get();
57
- try {
58
- const candidate = map ? map(selected) : member === void 0 ? selected : selected[member];
64
+ let resolved;
65
+ component = function LazyMember(props) {
66
+ if (!settled) throw get();
67
+ if (!settled.ok) throw settled.error;
68
+ if (!resolved || resolved.generation !== generation) try {
69
+ const candidate = map ? map(settled.value) : member === void 0 ? settled.value : settled.value[member];
59
70
  if (typeof candidate !== "function") throw new require_lazy_resource_error.LazyResourceStateNotFoundError(options.label, String(member));
60
- return { default: candidate };
71
+ resolved = {
72
+ generation,
73
+ ok: true,
74
+ value: candidate
75
+ };
61
76
  } catch (error) {
62
- if (attempt === generation && require_lazy_resource_error.isLazyResourceError(error)) {
77
+ resolved = {
78
+ generation,
79
+ ok: false,
80
+ error
81
+ };
82
+ if (require_lazy_resource_error.isLazyResourceError(error)) {
63
83
  status = "error";
64
84
  options.hooks?.onLoadError?.(error);
65
85
  }
66
- throw error;
67
86
  }
68
- });
87
+ if (!resolved.ok) throw resolved.error;
88
+ return (0, react.createElement)(resolved.value, props);
89
+ };
69
90
  components.set(key, component);
70
91
  }
71
92
  return component;
@@ -1 +1 @@
1
- {"version":3,"file":"create-lazy-loader.cjs","names":["isLazyResourceError","ResourceModuleLoadError","LazyResourceStateNotFoundError"],"sources":["../../src/lazy/create-lazy-loader.ts"],"sourcesContent":["import { lazy, type ComponentType } from 'react';\nimport { ResourceModuleLoadError } from '../errors/resource-state-error';\nimport {\n LazyResourceStateNotFoundError,\n isLazyResourceError,\n type LazyResourceError,\n} from '../errors/lazy-resource-error';\nimport type { LazyHandle, LoadStatus } from './types';\n\nexport type LazyResourceLoadHooks = {\n onLoadStart?: () => void;\n onLoadSuccess?: () => void;\n onLoadError?: (error: LazyResourceError) => void;\n onMount?: () => (() => void) | undefined;\n};\n\nexport type LazyLoader<Selected> = LazyHandle & {\n get(): Promise<Selected>;\n reset(): void;\n component(\n member?: PropertyKey,\n map?: (selected: Selected) => ComponentType<any>,\n ): ComponentType<any>;\n};\n\n/** A single import cache and lifecycle shared by every lazy entry point. */\nexport function createLazyLoader<Module, Selected>(options: {\n load: () => Promise<Module>;\n select: (module: Module) => Selected | Promise<Selected>;\n label: string;\n hooks?: LazyResourceLoadHooks;\n}): LazyLoader<Selected> {\n let promise: Promise<Selected> | undefined;\n let preloadPromise: Promise<void> | undefined;\n let status: LoadStatus = 'unresolved';\n const components = new Map<unknown, ComponentType<any>>();\n let generation = 0;\n\n function get() {\n if (promise) return promise;\n const attempt = generation;\n status = 'loading';\n options.hooks?.onLoadStart?.();\n promise = Promise.resolve()\n .then(options.load)\n .catch((cause: unknown) => {\n if (isLazyResourceError(cause)) throw cause;\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `[react-layout] lazy \"${options.label}\" failed to load`,\n cause,\n );\n }\n throw new ResourceModuleLoadError(options.label, cause);\n })\n .then(options.select)\n .then(\n (selected) => {\n if (attempt === generation) {\n status = 'resolved';\n options.hooks?.onLoadSuccess?.();\n }\n return selected;\n },\n (error: LazyResourceError) => {\n if (attempt === generation) {\n status = 'error';\n options.hooks?.onLoadError?.(error);\n }\n throw error;\n },\n );\n return promise;\n }\n\n return {\n get,\n get status() {\n return status;\n },\n preload: () => (preloadPromise ??= get().then(() => undefined)),\n reset() {\n generation++;\n promise = undefined;\n preloadPromise = undefined;\n components.clear();\n status = 'unresolved';\n },\n component(member, map) {\n const key = map ?? member;\n let component = components.get(key);\n if (!component) {\n component = lazy(async () => {\n const attempt = generation;\n const selected = await get();\n try {\n const candidate = map\n ? map(selected)\n : member === undefined\n ? selected\n : (selected as Record<PropertyKey, unknown>)[member];\n if (typeof candidate !== 'function') {\n throw new LazyResourceStateNotFoundError(\n options.label,\n String(member),\n );\n }\n return { default: candidate as ComponentType<any> };\n } catch (error) {\n if (attempt === generation && isLazyResourceError(error)) {\n status = 'error';\n options.hooks?.onLoadError?.(error);\n }\n throw error;\n }\n });\n components.set(key, component);\n }\n return component;\n },\n };\n}\n"],"mappings":";;;;;;AA0BA,SAAgB,iBAAmC,SAK1B;CACvB,IAAI;CACJ,IAAI;CACJ,IAAI,SAAqB;CACzB,MAAM,6BAAa,IAAI,IAAiC;CACxD,IAAI,aAAa;CAEjB,SAAS,MAAM;EACb,IAAI,SAAS,OAAO;EACpB,MAAM,UAAU;EAChB,SAAS;EACT,QAAQ,OAAO,cAAc;EAC7B,UAAU,QAAQ,QAAQ,EACvB,KAAK,QAAQ,IAAI,EACjB,OAAO,UAAmB;GACzB,IAAIA,gDAAoB,KAAK,GAAG,MAAM;GACtC,IAAI,QAAQ,IAAI,aAAa,cAC3B,QAAQ,MACN,wBAAwB,QAAQ,MAAM,mBACtC,KACF;GAEF,MAAM,IAAIC,qDAAwB,QAAQ,OAAO,KAAK;EACxD,CAAC,EACA,KAAK,QAAQ,MAAM,EACnB,MACE,aAAa;GACZ,IAAI,YAAY,YAAY;IAC1B,SAAS;IACT,QAAQ,OAAO,gBAAgB;GACjC;GACA,OAAO;EACT,IACC,UAA6B;GAC5B,IAAI,YAAY,YAAY;IAC1B,SAAS;IACT,QAAQ,OAAO,cAAc,KAAK;GACpC;GACA,MAAM;EACR,CACF;EACF,OAAO;CACT;CAEA,OAAO;EACL;EACA,IAAI,SAAS;GACX,OAAO;EACT;EACA,eAAgB,mBAAmB,IAAI,EAAE,WAAW,MAAS;EAC7D,QAAQ;GACN;GACA,UAAU;GACV,iBAAiB;GACjB,WAAW,MAAM;GACjB,SAAS;EACX;EACA,UAAU,QAAQ,KAAK;GACrB,MAAM,MAAM,OAAO;GACnB,IAAI,YAAY,WAAW,IAAI,GAAG;GAClC,IAAI,CAAC,WAAW;IACd,4BAAiB,YAAY;KAC3B,MAAM,UAAU;KAChB,MAAM,WAAW,MAAM,IAAI;KAC3B,IAAI;MACF,MAAM,YAAY,MACd,IAAI,QAAQ,IACZ,WAAW,SACT,WACC,SAA0C;MACjD,IAAI,OAAO,cAAc,YACvB,MAAM,IAAIC,2DACR,QAAQ,OACR,OAAO,MAAM,CACf;MAEF,OAAO,EAAE,SAAS,UAAgC;KACpD,SAAS,OAAO;MACd,IAAI,YAAY,cAAcF,gDAAoB,KAAK,GAAG;OACxD,SAAS;OACT,QAAQ,OAAO,cAAc,KAAK;MACpC;MACA,MAAM;KACR;IACF,CAAC;IACD,WAAW,IAAI,KAAK,SAAS;GAC/B;GACA,OAAO;EACT;CACF;AACF"}
1
+ {"version":3,"file":"create-lazy-loader.cjs","names":["isLazyResourceError","ResourceModuleLoadError","LazyResourceStateNotFoundError"],"sources":["../../src/lazy/create-lazy-loader.ts"],"sourcesContent":["import { createElement, type ComponentType } from 'react';\nimport { ResourceModuleLoadError } from '../errors/resource-state-error';\nimport {\n LazyResourceStateNotFoundError,\n isLazyResourceError,\n type LazyResourceError,\n} from '../errors/lazy-resource-error';\nimport type { LazyHandle, LoadStatus } from './types';\n\nexport type LazyResourceLoadHooks = {\n onLoadStart?: () => void;\n onLoadSuccess?: () => void;\n onLoadError?: (error: LazyResourceError) => void;\n onMount?: () => (() => void) | undefined;\n};\n\nexport type LazyLoader<Selected> = LazyHandle & {\n get(): Promise<Selected>;\n reset(): void;\n component(\n member?: PropertyKey,\n map?: (selected: Selected) => ComponentType<any>\n ): ComponentType<any>;\n};\n\n/** A single import cache and lifecycle shared by every lazy entry point. */\nexport function createLazyLoader<Module, Selected>(options: {\n load: () => Promise<Module>;\n select: (module: Module) => Selected | Promise<Selected>;\n label: string;\n hooks?: LazyResourceLoadHooks;\n}): LazyLoader<Selected> {\n let promise: Promise<Selected> | undefined;\n let preloadPromise: Promise<void> | undefined;\n let status: LoadStatus = 'unresolved';\n let settled:\n { ok: true; value: Selected } | { ok: false; error: unknown } | undefined;\n const components = new Map<unknown, ComponentType<any>>();\n let generation = 0;\n\n function get() {\n if (promise) return promise;\n const attempt = generation;\n status = 'loading';\n options.hooks?.onLoadStart?.();\n promise = Promise.resolve()\n .then(options.load)\n .catch((cause: unknown) => {\n if (isLazyResourceError(cause)) throw cause;\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `[react-layout] lazy \"${options.label}\" failed to load`,\n cause\n );\n }\n throw new ResourceModuleLoadError(options.label, cause);\n })\n .then(options.select)\n .then(\n (selected) => {\n if (attempt === generation) {\n settled = { ok: true, value: selected };\n status = 'resolved';\n options.hooks?.onLoadSuccess?.();\n }\n return selected;\n },\n (error: LazyResourceError) => {\n if (attempt === generation) {\n settled = { ok: false, error };\n status = 'error';\n options.hooks?.onLoadError?.(error);\n }\n throw error;\n }\n );\n return promise;\n }\n\n return {\n get,\n get status() {\n return status;\n },\n preload: () => (preloadPromise ??= get().then(() => undefined)),\n reset() {\n generation++;\n promise = undefined;\n preloadPromise = undefined;\n settled = undefined;\n components.clear();\n status = 'unresolved';\n },\n component(member, map) {\n const key = map ?? member;\n let component = components.get(key);\n if (!component) {\n let resolved:\n | { generation: number; ok: true; value: ComponentType<any> }\n | { generation: number; ok: false; error: unknown }\n | undefined;\n // Every member reads the same module result. Throw only while that\n // shared import is pending, rather than starting a promise per member.\n // Keep this component stable so later renders preserve child state.\n component = function LazyMember(props: Record<string, unknown>) {\n if (!settled) throw get();\n if (!settled.ok) throw settled.error;\n if (!resolved || resolved.generation !== generation) {\n try {\n const candidate = map\n ? map(settled.value)\n : member === undefined\n ? settled.value\n : (settled.value as Record<PropertyKey, unknown>)[member];\n if (typeof candidate !== 'function') {\n throw new LazyResourceStateNotFoundError(\n options.label,\n String(member)\n );\n }\n resolved = {\n generation,\n ok: true,\n value: candidate as ComponentType<any>,\n };\n } catch (error) {\n resolved = { generation, ok: false, error };\n if (isLazyResourceError(error)) {\n status = 'error';\n options.hooks?.onLoadError?.(error);\n }\n }\n }\n if (!resolved.ok) throw resolved.error;\n return createElement(resolved.value, props);\n };\n components.set(key, component);\n }\n return component;\n },\n };\n}\n"],"mappings":";;;;;;AA0BA,SAAgB,iBAAmC,SAK1B;CACvB,IAAI;CACJ,IAAI;CACJ,IAAI,SAAqB;CACzB,IAAI;CAEJ,MAAM,6BAAa,IAAI,IAAiC;CACxD,IAAI,aAAa;CAEjB,SAAS,MAAM;EACb,IAAI,SAAS,OAAO;EACpB,MAAM,UAAU;EAChB,SAAS;EACT,QAAQ,OAAO,cAAc;EAC7B,UAAU,QAAQ,QAAQ,EACvB,KAAK,QAAQ,IAAI,EACjB,OAAO,UAAmB;GACzB,IAAIA,gDAAoB,KAAK,GAAG,MAAM;GACtC,IAAI,QAAQ,IAAI,aAAa,cAC3B,QAAQ,MACN,wBAAwB,QAAQ,MAAM,mBACtC,KACF;GAEF,MAAM,IAAIC,qDAAwB,QAAQ,OAAO,KAAK;EACxD,CAAC,EACA,KAAK,QAAQ,MAAM,EACnB,MACE,aAAa;GACZ,IAAI,YAAY,YAAY;IAC1B,UAAU;KAAE,IAAI;KAAM,OAAO;IAAS;IACtC,SAAS;IACT,QAAQ,OAAO,gBAAgB;GACjC;GACA,OAAO;EACT,IACC,UAA6B;GAC5B,IAAI,YAAY,YAAY;IAC1B,UAAU;KAAE,IAAI;KAAO;IAAM;IAC7B,SAAS;IACT,QAAQ,OAAO,cAAc,KAAK;GACpC;GACA,MAAM;EACR,CACF;EACF,OAAO;CACT;CAEA,OAAO;EACL;EACA,IAAI,SAAS;GACX,OAAO;EACT;EACA,eAAgB,mBAAmB,IAAI,EAAE,WAAW,MAAS;EAC7D,QAAQ;GACN;GACA,UAAU;GACV,iBAAiB;GACjB,UAAU;GACV,WAAW,MAAM;GACjB,SAAS;EACX;EACA,UAAU,QAAQ,KAAK;GACrB,MAAM,MAAM,OAAO;GACnB,IAAI,YAAY,WAAW,IAAI,GAAG;GAClC,IAAI,CAAC,WAAW;IACd,IAAI;IAOJ,YAAY,SAAS,WAAW,OAAgC;KAC9D,IAAI,CAAC,SAAS,MAAM,IAAI;KACxB,IAAI,CAAC,QAAQ,IAAI,MAAM,QAAQ;KAC/B,IAAI,CAAC,YAAY,SAAS,eAAe,YACvC,IAAI;MACF,MAAM,YAAY,MACd,IAAI,QAAQ,KAAK,IACjB,WAAW,SACT,QAAQ,QACP,QAAQ,MAAuC;MACtD,IAAI,OAAO,cAAc,YACvB,MAAM,IAAIC,2DACR,QAAQ,OACR,OAAO,MAAM,CACf;MAEF,WAAW;OACT;OACA,IAAI;OACJ,OAAO;MACT;KACF,SAAS,OAAO;MACd,WAAW;OAAE;OAAY,IAAI;OAAO;MAAM;MAC1C,IAAIF,gDAAoB,KAAK,GAAG;OAC9B,SAAS;OACT,QAAQ,OAAO,cAAc,KAAK;MACpC;KACF;KAEF,IAAI,CAAC,SAAS,IAAI,MAAM,SAAS;KACjC,gCAAqB,SAAS,OAAO,KAAK;IAC5C;IACA,WAAW,IAAI,KAAK,SAAS;GAC/B;GACA,OAAO;EACT;CACF;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { ResourceModuleLoadError } from "../errors/resource-state-error.mjs";
2
2
  import { LazyResourceStateNotFoundError, isLazyResourceError } from "../errors/lazy-resource-error.mjs";
3
- import { lazy } from "react";
3
+ import { createElement } from "react";
4
4
 
5
5
  //#region src/lazy/create-lazy-loader.ts
6
6
  /** A single import cache and lifecycle shared by every lazy entry point. */
@@ -8,6 +8,7 @@ function createLazyLoader(options) {
8
8
  let promise;
9
9
  let preloadPromise;
10
10
  let status = "unresolved";
11
+ let settled;
11
12
  const components = /* @__PURE__ */ new Map();
12
13
  let generation = 0;
13
14
  function get() {
@@ -21,12 +22,20 @@ function createLazyLoader(options) {
21
22
  throw new ResourceModuleLoadError(options.label, cause);
22
23
  }).then(options.select).then((selected) => {
23
24
  if (attempt === generation) {
25
+ settled = {
26
+ ok: true,
27
+ value: selected
28
+ };
24
29
  status = "resolved";
25
30
  options.hooks?.onLoadSuccess?.();
26
31
  }
27
32
  return selected;
28
33
  }, (error) => {
29
34
  if (attempt === generation) {
35
+ settled = {
36
+ ok: false,
37
+ error
38
+ };
30
39
  status = "error";
31
40
  options.hooks?.onLoadError?.(error);
32
41
  }
@@ -44,6 +53,7 @@ function createLazyLoader(options) {
44
53
  generation++;
45
54
  promise = void 0;
46
55
  preloadPromise = void 0;
56
+ settled = void 0;
47
57
  components.clear();
48
58
  status = "unresolved";
49
59
  },
@@ -51,21 +61,32 @@ function createLazyLoader(options) {
51
61
  const key = map ?? member;
52
62
  let component = components.get(key);
53
63
  if (!component) {
54
- component = lazy(async () => {
55
- const attempt = generation;
56
- const selected = await get();
57
- try {
58
- const candidate = map ? map(selected) : member === void 0 ? selected : selected[member];
64
+ let resolved;
65
+ component = function LazyMember(props) {
66
+ if (!settled) throw get();
67
+ if (!settled.ok) throw settled.error;
68
+ if (!resolved || resolved.generation !== generation) try {
69
+ const candidate = map ? map(settled.value) : member === void 0 ? settled.value : settled.value[member];
59
70
  if (typeof candidate !== "function") throw new LazyResourceStateNotFoundError(options.label, String(member));
60
- return { default: candidate };
71
+ resolved = {
72
+ generation,
73
+ ok: true,
74
+ value: candidate
75
+ };
61
76
  } catch (error) {
62
- if (attempt === generation && isLazyResourceError(error)) {
77
+ resolved = {
78
+ generation,
79
+ ok: false,
80
+ error
81
+ };
82
+ if (isLazyResourceError(error)) {
63
83
  status = "error";
64
84
  options.hooks?.onLoadError?.(error);
65
85
  }
66
- throw error;
67
86
  }
68
- });
87
+ if (!resolved.ok) throw resolved.error;
88
+ return createElement(resolved.value, props);
89
+ };
69
90
  components.set(key, component);
70
91
  }
71
92
  return component;
@@ -1 +1 @@
1
- {"version":3,"file":"create-lazy-loader.mjs","names":[],"sources":["../../src/lazy/create-lazy-loader.ts"],"sourcesContent":["import { lazy, type ComponentType } from 'react';\nimport { ResourceModuleLoadError } from '../errors/resource-state-error';\nimport {\n LazyResourceStateNotFoundError,\n isLazyResourceError,\n type LazyResourceError,\n} from '../errors/lazy-resource-error';\nimport type { LazyHandle, LoadStatus } from './types';\n\nexport type LazyResourceLoadHooks = {\n onLoadStart?: () => void;\n onLoadSuccess?: () => void;\n onLoadError?: (error: LazyResourceError) => void;\n onMount?: () => (() => void) | undefined;\n};\n\nexport type LazyLoader<Selected> = LazyHandle & {\n get(): Promise<Selected>;\n reset(): void;\n component(\n member?: PropertyKey,\n map?: (selected: Selected) => ComponentType<any>,\n ): ComponentType<any>;\n};\n\n/** A single import cache and lifecycle shared by every lazy entry point. */\nexport function createLazyLoader<Module, Selected>(options: {\n load: () => Promise<Module>;\n select: (module: Module) => Selected | Promise<Selected>;\n label: string;\n hooks?: LazyResourceLoadHooks;\n}): LazyLoader<Selected> {\n let promise: Promise<Selected> | undefined;\n let preloadPromise: Promise<void> | undefined;\n let status: LoadStatus = 'unresolved';\n const components = new Map<unknown, ComponentType<any>>();\n let generation = 0;\n\n function get() {\n if (promise) return promise;\n const attempt = generation;\n status = 'loading';\n options.hooks?.onLoadStart?.();\n promise = Promise.resolve()\n .then(options.load)\n .catch((cause: unknown) => {\n if (isLazyResourceError(cause)) throw cause;\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `[react-layout] lazy \"${options.label}\" failed to load`,\n cause,\n );\n }\n throw new ResourceModuleLoadError(options.label, cause);\n })\n .then(options.select)\n .then(\n (selected) => {\n if (attempt === generation) {\n status = 'resolved';\n options.hooks?.onLoadSuccess?.();\n }\n return selected;\n },\n (error: LazyResourceError) => {\n if (attempt === generation) {\n status = 'error';\n options.hooks?.onLoadError?.(error);\n }\n throw error;\n },\n );\n return promise;\n }\n\n return {\n get,\n get status() {\n return status;\n },\n preload: () => (preloadPromise ??= get().then(() => undefined)),\n reset() {\n generation++;\n promise = undefined;\n preloadPromise = undefined;\n components.clear();\n status = 'unresolved';\n },\n component(member, map) {\n const key = map ?? member;\n let component = components.get(key);\n if (!component) {\n component = lazy(async () => {\n const attempt = generation;\n const selected = await get();\n try {\n const candidate = map\n ? map(selected)\n : member === undefined\n ? selected\n : (selected as Record<PropertyKey, unknown>)[member];\n if (typeof candidate !== 'function') {\n throw new LazyResourceStateNotFoundError(\n options.label,\n String(member),\n );\n }\n return { default: candidate as ComponentType<any> };\n } catch (error) {\n if (attempt === generation && isLazyResourceError(error)) {\n status = 'error';\n options.hooks?.onLoadError?.(error);\n }\n throw error;\n }\n });\n components.set(key, component);\n }\n return component;\n },\n };\n}\n"],"mappings":";;;;;;AA0BA,SAAgB,iBAAmC,SAK1B;CACvB,IAAI;CACJ,IAAI;CACJ,IAAI,SAAqB;CACzB,MAAM,6BAAa,IAAI,IAAiC;CACxD,IAAI,aAAa;CAEjB,SAAS,MAAM;EACb,IAAI,SAAS,OAAO;EACpB,MAAM,UAAU;EAChB,SAAS;EACT,QAAQ,OAAO,cAAc;EAC7B,UAAU,QAAQ,QAAQ,EACvB,KAAK,QAAQ,IAAI,EACjB,OAAO,UAAmB;GACzB,IAAI,oBAAoB,KAAK,GAAG,MAAM;GACtC,IAAI,QAAQ,IAAI,aAAa,cAC3B,QAAQ,MACN,wBAAwB,QAAQ,MAAM,mBACtC,KACF;GAEF,MAAM,IAAI,wBAAwB,QAAQ,OAAO,KAAK;EACxD,CAAC,EACA,KAAK,QAAQ,MAAM,EACnB,MACE,aAAa;GACZ,IAAI,YAAY,YAAY;IAC1B,SAAS;IACT,QAAQ,OAAO,gBAAgB;GACjC;GACA,OAAO;EACT,IACC,UAA6B;GAC5B,IAAI,YAAY,YAAY;IAC1B,SAAS;IACT,QAAQ,OAAO,cAAc,KAAK;GACpC;GACA,MAAM;EACR,CACF;EACF,OAAO;CACT;CAEA,OAAO;EACL;EACA,IAAI,SAAS;GACX,OAAO;EACT;EACA,eAAgB,mBAAmB,IAAI,EAAE,WAAW,MAAS;EAC7D,QAAQ;GACN;GACA,UAAU;GACV,iBAAiB;GACjB,WAAW,MAAM;GACjB,SAAS;EACX;EACA,UAAU,QAAQ,KAAK;GACrB,MAAM,MAAM,OAAO;GACnB,IAAI,YAAY,WAAW,IAAI,GAAG;GAClC,IAAI,CAAC,WAAW;IACd,YAAY,KAAK,YAAY;KAC3B,MAAM,UAAU;KAChB,MAAM,WAAW,MAAM,IAAI;KAC3B,IAAI;MACF,MAAM,YAAY,MACd,IAAI,QAAQ,IACZ,WAAW,SACT,WACC,SAA0C;MACjD,IAAI,OAAO,cAAc,YACvB,MAAM,IAAI,+BACR,QAAQ,OACR,OAAO,MAAM,CACf;MAEF,OAAO,EAAE,SAAS,UAAgC;KACpD,SAAS,OAAO;MACd,IAAI,YAAY,cAAc,oBAAoB,KAAK,GAAG;OACxD,SAAS;OACT,QAAQ,OAAO,cAAc,KAAK;MACpC;MACA,MAAM;KACR;IACF,CAAC;IACD,WAAW,IAAI,KAAK,SAAS;GAC/B;GACA,OAAO;EACT;CACF;AACF"}
1
+ {"version":3,"file":"create-lazy-loader.mjs","names":[],"sources":["../../src/lazy/create-lazy-loader.ts"],"sourcesContent":["import { createElement, type ComponentType } from 'react';\nimport { ResourceModuleLoadError } from '../errors/resource-state-error';\nimport {\n LazyResourceStateNotFoundError,\n isLazyResourceError,\n type LazyResourceError,\n} from '../errors/lazy-resource-error';\nimport type { LazyHandle, LoadStatus } from './types';\n\nexport type LazyResourceLoadHooks = {\n onLoadStart?: () => void;\n onLoadSuccess?: () => void;\n onLoadError?: (error: LazyResourceError) => void;\n onMount?: () => (() => void) | undefined;\n};\n\nexport type LazyLoader<Selected> = LazyHandle & {\n get(): Promise<Selected>;\n reset(): void;\n component(\n member?: PropertyKey,\n map?: (selected: Selected) => ComponentType<any>\n ): ComponentType<any>;\n};\n\n/** A single import cache and lifecycle shared by every lazy entry point. */\nexport function createLazyLoader<Module, Selected>(options: {\n load: () => Promise<Module>;\n select: (module: Module) => Selected | Promise<Selected>;\n label: string;\n hooks?: LazyResourceLoadHooks;\n}): LazyLoader<Selected> {\n let promise: Promise<Selected> | undefined;\n let preloadPromise: Promise<void> | undefined;\n let status: LoadStatus = 'unresolved';\n let settled:\n { ok: true; value: Selected } | { ok: false; error: unknown } | undefined;\n const components = new Map<unknown, ComponentType<any>>();\n let generation = 0;\n\n function get() {\n if (promise) return promise;\n const attempt = generation;\n status = 'loading';\n options.hooks?.onLoadStart?.();\n promise = Promise.resolve()\n .then(options.load)\n .catch((cause: unknown) => {\n if (isLazyResourceError(cause)) throw cause;\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `[react-layout] lazy \"${options.label}\" failed to load`,\n cause\n );\n }\n throw new ResourceModuleLoadError(options.label, cause);\n })\n .then(options.select)\n .then(\n (selected) => {\n if (attempt === generation) {\n settled = { ok: true, value: selected };\n status = 'resolved';\n options.hooks?.onLoadSuccess?.();\n }\n return selected;\n },\n (error: LazyResourceError) => {\n if (attempt === generation) {\n settled = { ok: false, error };\n status = 'error';\n options.hooks?.onLoadError?.(error);\n }\n throw error;\n }\n );\n return promise;\n }\n\n return {\n get,\n get status() {\n return status;\n },\n preload: () => (preloadPromise ??= get().then(() => undefined)),\n reset() {\n generation++;\n promise = undefined;\n preloadPromise = undefined;\n settled = undefined;\n components.clear();\n status = 'unresolved';\n },\n component(member, map) {\n const key = map ?? member;\n let component = components.get(key);\n if (!component) {\n let resolved:\n | { generation: number; ok: true; value: ComponentType<any> }\n | { generation: number; ok: false; error: unknown }\n | undefined;\n // Every member reads the same module result. Throw only while that\n // shared import is pending, rather than starting a promise per member.\n // Keep this component stable so later renders preserve child state.\n component = function LazyMember(props: Record<string, unknown>) {\n if (!settled) throw get();\n if (!settled.ok) throw settled.error;\n if (!resolved || resolved.generation !== generation) {\n try {\n const candidate = map\n ? map(settled.value)\n : member === undefined\n ? settled.value\n : (settled.value as Record<PropertyKey, unknown>)[member];\n if (typeof candidate !== 'function') {\n throw new LazyResourceStateNotFoundError(\n options.label,\n String(member)\n );\n }\n resolved = {\n generation,\n ok: true,\n value: candidate as ComponentType<any>,\n };\n } catch (error) {\n resolved = { generation, ok: false, error };\n if (isLazyResourceError(error)) {\n status = 'error';\n options.hooks?.onLoadError?.(error);\n }\n }\n }\n if (!resolved.ok) throw resolved.error;\n return createElement(resolved.value, props);\n };\n components.set(key, component);\n }\n return component;\n },\n };\n}\n"],"mappings":";;;;;;AA0BA,SAAgB,iBAAmC,SAK1B;CACvB,IAAI;CACJ,IAAI;CACJ,IAAI,SAAqB;CACzB,IAAI;CAEJ,MAAM,6BAAa,IAAI,IAAiC;CACxD,IAAI,aAAa;CAEjB,SAAS,MAAM;EACb,IAAI,SAAS,OAAO;EACpB,MAAM,UAAU;EAChB,SAAS;EACT,QAAQ,OAAO,cAAc;EAC7B,UAAU,QAAQ,QAAQ,EACvB,KAAK,QAAQ,IAAI,EACjB,OAAO,UAAmB;GACzB,IAAI,oBAAoB,KAAK,GAAG,MAAM;GACtC,IAAI,QAAQ,IAAI,aAAa,cAC3B,QAAQ,MACN,wBAAwB,QAAQ,MAAM,mBACtC,KACF;GAEF,MAAM,IAAI,wBAAwB,QAAQ,OAAO,KAAK;EACxD,CAAC,EACA,KAAK,QAAQ,MAAM,EACnB,MACE,aAAa;GACZ,IAAI,YAAY,YAAY;IAC1B,UAAU;KAAE,IAAI;KAAM,OAAO;IAAS;IACtC,SAAS;IACT,QAAQ,OAAO,gBAAgB;GACjC;GACA,OAAO;EACT,IACC,UAA6B;GAC5B,IAAI,YAAY,YAAY;IAC1B,UAAU;KAAE,IAAI;KAAO;IAAM;IAC7B,SAAS;IACT,QAAQ,OAAO,cAAc,KAAK;GACpC;GACA,MAAM;EACR,CACF;EACF,OAAO;CACT;CAEA,OAAO;EACL;EACA,IAAI,SAAS;GACX,OAAO;EACT;EACA,eAAgB,mBAAmB,IAAI,EAAE,WAAW,MAAS;EAC7D,QAAQ;GACN;GACA,UAAU;GACV,iBAAiB;GACjB,UAAU;GACV,WAAW,MAAM;GACjB,SAAS;EACX;EACA,UAAU,QAAQ,KAAK;GACrB,MAAM,MAAM,OAAO;GACnB,IAAI,YAAY,WAAW,IAAI,GAAG;GAClC,IAAI,CAAC,WAAW;IACd,IAAI;IAOJ,YAAY,SAAS,WAAW,OAAgC;KAC9D,IAAI,CAAC,SAAS,MAAM,IAAI;KACxB,IAAI,CAAC,QAAQ,IAAI,MAAM,QAAQ;KAC/B,IAAI,CAAC,YAAY,SAAS,eAAe,YACvC,IAAI;MACF,MAAM,YAAY,MACd,IAAI,QAAQ,KAAK,IACjB,WAAW,SACT,QAAQ,QACP,QAAQ,MAAuC;MACtD,IAAI,OAAO,cAAc,YACvB,MAAM,IAAI,+BACR,QAAQ,OACR,OAAO,MAAM,CACf;MAEF,WAAW;OACT;OACA,IAAI;OACJ,OAAO;MACT;KACF,SAAS,OAAO;MACd,WAAW;OAAE;OAAY,IAAI;OAAO;MAAM;MAC1C,IAAI,oBAAoB,KAAK,GAAG;OAC9B,SAAS;OACT,QAAQ,OAAO,cAAc,KAAK;MACpC;KACF;KAEF,IAAI,CAAC,SAAS,IAAI,MAAM,SAAS;KACjC,OAAO,cAAc,SAAS,OAAO,KAAK;IAC5C;IACA,WAAW,IAAI,KAAK,SAAS;GAC/B;GACA,OAAO;EACT;CACF;AACF"}
@@ -0,0 +1,59 @@
1
+ const require_layout_configuration_error = require('../errors/layout-configuration-error.cjs');
2
+ const require_define_layout = require('../create-config/define-layout.cjs');
3
+ let react = require("react");
4
+
5
+ //#region src/lazy/create-render-state.tsx
6
+ function createLazyRenderStateBuilder(configuration) {
7
+ function createRenderState(definition) {
8
+ if (definition.state !== "Loading" && definition.state !== "Error") throw new require_layout_configuration_error.LayoutConfigurationError(`Unknown lazy default state "${definition.state}"`);
9
+ const include = Object.fromEntries(Object.entries(definition.props?.include ?? {}).map(([key, behavior]) => [key, behavior === true ? {
10
+ required: true,
11
+ suppliedVia: "component"
12
+ } : behavior]));
13
+ function RenderLazyDefault({ props, context }) {
14
+ if (typeof definition.render === "function") return definition.render(props, context);
15
+ const errorProps = props;
16
+ const handler = definition.render[errorProps.error.code] ?? definition.render.fallback;
17
+ if (!handler) throw errorProps.error;
18
+ return handler(props, context);
19
+ }
20
+ const layout = require_define_layout.defineResourceLayout({
21
+ resources: configuration.resources,
22
+ options: configuration.options,
23
+ layout: { render: {
24
+ default: () => null,
25
+ [definition.state]: {
26
+ composables: configuration.composables,
27
+ props: {
28
+ include,
29
+ custom: definition.props?.custom
30
+ },
31
+ render: (props, context) => (0, react.createElement)(RenderLazyDefault, {
32
+ props,
33
+ context
34
+ })
35
+ }
36
+ } }
37
+ });
38
+ const components = /* @__PURE__ */ new Map();
39
+ function LazyDefault(props) {
40
+ const resource = props.resource.split(".")[0];
41
+ let Component = components.get(resource);
42
+ if (!Component) {
43
+ Component = layout.createResourceLayout({
44
+ resource,
45
+ name: "LazyDefault",
46
+ namespace: false
47
+ })[definition.state];
48
+ components.set(resource, Component);
49
+ }
50
+ return (0, react.createElement)(Component, props);
51
+ }
52
+ return LazyDefault;
53
+ }
54
+ return createRenderState;
55
+ }
56
+
57
+ //#endregion
58
+ exports.createLazyRenderStateBuilder = createLazyRenderStateBuilder;
59
+ //# sourceMappingURL=create-render-state.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-render-state.cjs","names":["LayoutConfigurationError","defineResourceLayout"],"sources":["../../src/lazy/create-render-state.tsx"],"sourcesContent":["import { createElement, type ComponentType, type ReactNode } from 'react';\nimport type { ComposableComponents } from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { ResourceDefinition, ResourcePath } from '../resource';\nimport {\n type ResolvedIncludedComponentProps,\n type IncludedProps,\n type InPropsDefinition,\n type InPropsObject,\n type MergedLayoutInProps,\n} from '../props';\nimport { defineResourceLayout } from '../create-config/define-layout';\nimport type {\n LayoutComposablesDefinition,\n RenderStateContext,\n RenderStateProps,\n OptionalStateChildren,\n} from '../create-config/render-state';\nimport type { ResolveProps } from '@jfdevelops/react-layout-validator';\nimport type {\n LazyResourceErrorProps,\n LazyErrorHandlers,\n CreateLazyErrorComponent,\n} from './types';\n\nexport type LazyDefaultState = 'Loading' | 'Error';\ntype BuiltinProps<\n State extends LazyDefaultState,\n Resource,\n> = State extends 'Error'\n ? LazyResourceErrorProps<Resource>\n : { resource: Resource };\n\n/** Shorthand includes are direct props; explicit supply sources retain their contract. */\ntype LazyDefaultIncludes<Include> = {\n [Key in keyof Include]: Include[Key] extends true\n ? { required: true; suppliedVia: 'component' }\n : Include[Key];\n};\n\ntype LazyRender<State extends LazyDefaultState, Resource, Props, Context> =\n | ((\n props: Props & BuiltinProps<State, Resource>,\n context: Context,\n ) => ReactNode)\n | (State extends 'Error'\n ? LazyErrorHandlers<Resource, Props & object, Context>\n : never);\n\n/** Creates validated, composable-aware fallback components for one factory. */\nexport type CreateLazyRenderState<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n> = <\n const State extends LazyDefaultState,\n const Custom extends InPropsObject = {},\n const Include extends IncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>\n > = {},\n>(definition: {\n state: State;\n props?: { include?: Include; custom?: Custom };\n render: LazyRender<State, ResourcePath<Resources>, RenderStateProps<Resources, Options, Composables, Include, Custom>, RenderStateContext<Composables, Resources, State>>;\n}) => ComponentType<\n OptionalStateChildren<\n ResolveProps<Custom> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, Options, Composables>,\n LazyDefaultIncludes<Include>\n >\n > &\n BuiltinProps<State, ResourcePath<Resources>>\n>;\n\n/** Compatibility helper; custom props keep their existing unchecked contract. */\nexport type CreateBoundLazyErrorComponent<Resource, Context> =\n CreateLazyErrorComponent<Resource, Context>;\n\ntype RuntimeDefinition = {\n state: LazyDefaultState;\n props?: { include?: Record<string, unknown>; custom?: InPropsObject };\n render:\n | ((props: any, context: any) => ReactNode)\n | LazyErrorHandlers<string, object, any>;\n};\n\nexport function createLazyRenderStateBuilder<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n>(configuration: {\n resources: Resources;\n options: Options;\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n}): CreateLazyRenderState<Resources, Options, Composables> {\n function createRenderState(definition: RuntimeDefinition) {\n if (definition.state !== 'Loading' && definition.state !== 'Error') {\n throw new LayoutConfigurationError(\n `Unknown lazy default state \"${definition.state}\"`,\n );\n }\n // Lazy defaults have no create-time configuration call. Included values are\n // supplied by their component caller unless an explicit config source is selected.\n const include = Object.fromEntries(\n Object.entries(definition.props?.include ?? {}).map(([key, behavior]) => [\n key,\n behavior === true\n ? { required: true, suppliedVia: 'component' }\n : behavior,\n ]),\n );\n function RenderLazyDefault({\n props,\n context,\n }: {\n props: any;\n context: any;\n }) {\n if (typeof definition.render === 'function') {\n return definition.render(props, context);\n }\n const errorProps = props as LazyResourceErrorProps;\n const handler =\n definition.render[errorProps.error.code] ?? definition.render.fallback;\n if (!handler) throw errorProps.error;\n return handler(props as never, context);\n }\n const layout = defineResourceLayout({\n resources: configuration.resources,\n options: configuration.options,\n layout: {\n render: {\n default: () => null,\n [definition.state]: {\n composables: configuration.composables,\n props: { include, custom: definition.props?.custom },\n render: (props: any, context: any) =>\n createElement(RenderLazyDefault, { props, context }),\n },\n },\n },\n } as never);\n const components = new Map<string, ComponentType<any>>();\n function LazyDefault(props: { resource: string }) {\n // Nested lazy paths use the factory's top-level resource definitions for\n // option resolution. The callback still receives the complete path.\n const resource = props.resource.split('.')[0]!;\n let Component = components.get(resource);\n if (!Component) {\n const Root = layout.createResourceLayout({\n resource,\n name: 'LazyDefault',\n namespace: false,\n } as never) as unknown as Record<LazyDefaultState, ComponentType<any>>;\n Component = Root[definition.state];\n components.set(resource, Component);\n }\n return createElement(Component, props);\n }\n return LazyDefault;\n }\n return createRenderState as CreateLazyRenderState<\n Resources,\n Options,\n Composables\n >;\n}\n"],"mappings":";;;;;AAuFA,SAAgB,6BAId,eAIyD;CACzD,SAAS,kBAAkB,YAA+B;EACxD,IAAI,WAAW,UAAU,aAAa,WAAW,UAAU,SACzD,MAAM,IAAIA,4DACR,+BAA+B,WAAW,MAAM,EAClD;EAIF,MAAM,UAAU,OAAO,YACrB,OAAO,QAAQ,WAAW,OAAO,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,cAAc,CACvE,KACA,aAAa,OACT;GAAE,UAAU;GAAM,aAAa;EAAY,IAC3C,QACN,CAAC,CACH;EACA,SAAS,kBAAkB,EACzB,OACA,WAIC;GACD,IAAI,OAAO,WAAW,WAAW,YAC/B,OAAO,WAAW,OAAO,OAAO,OAAO;GAEzC,MAAM,aAAa;GACnB,MAAM,UACJ,WAAW,OAAO,WAAW,MAAM,SAAS,WAAW,OAAO;GAChE,IAAI,CAAC,SAAS,MAAM,WAAW;GAC/B,OAAO,QAAQ,OAAgB,OAAO;EACxC;EACA,MAAM,SAASC,2CAAqB;GAClC,WAAW,cAAc;GACzB,SAAS,cAAc;GACvB,QAAQ,EACN,QAAQ;IACN,eAAe;KACd,WAAW,QAAQ;KAClB,aAAa,cAAc;KAC3B,OAAO;MAAE;MAAS,QAAQ,WAAW,OAAO;KAAO;KACnD,SAAS,OAAY,qCACL,mBAAmB;MAAE;MAAO;KAAQ,CAAC;IACvD;GACF,EACF;EACF,CAAU;EACV,MAAM,6BAAa,IAAI,IAAgC;EACvD,SAAS,YAAY,OAA6B;GAGhD,MAAM,WAAW,MAAM,SAAS,MAAM,GAAG,EAAE;GAC3C,IAAI,YAAY,WAAW,IAAI,QAAQ;GACvC,IAAI,CAAC,WAAW;IAMd,YALa,OAAO,qBAAqB;KACvC;KACA,MAAM;KACN,WAAW;IACb,CACe,EAAE,WAAW;IAC5B,WAAW,IAAI,UAAU,SAAS;GACpC;GACA,gCAAqB,WAAW,KAAK;EACvC;EACA,OAAO;CACT;CACA,OAAO;AAKT"}
@@ -0,0 +1,33 @@
1
+ import { CreateLazyErrorComponent, LazyErrorHandlers, LazyResourceErrorProps } from "./types.cjs";
2
+ import { ResourceDefinition, ResourcePath } from "../resource.cjs";
3
+ import { InPropsDefinition, InPropsObject, IncludedProps, MergedLayoutInProps, ResolvedIncludedComponentProps } from "../props.cjs";
4
+ import { OptionalStateChildren, RenderStateContext, RenderStateProps } from "../create-config/render-state.cjs";
5
+ import { ComposableComponents } from "@jfdevelops/react-layout-composables";
6
+ import { ComponentType, ReactNode } from "react";
7
+ import { ResolveProps } from "@jfdevelops/react-layout-validator";
8
+
9
+ //#region src/lazy/create-render-state.d.ts
10
+ type LazyDefaultState = 'Loading' | 'Error';
11
+ type BuiltinProps<State extends LazyDefaultState, Resource> = State extends 'Error' ? LazyResourceErrorProps<Resource> : {
12
+ resource: Resource;
13
+ };
14
+ /** Shorthand includes are direct props; explicit supply sources retain their contract. */
15
+ type LazyDefaultIncludes<Include> = { [Key in keyof Include]: Include[Key] extends true ? {
16
+ required: true;
17
+ suppliedVia: 'component';
18
+ } : Include[Key] };
19
+ type LazyRender<State extends LazyDefaultState, Resource, Props, Context> = ((props: Props & BuiltinProps<State, Resource>, context: Context) => ReactNode) | (State extends 'Error' ? LazyErrorHandlers<Resource, Props & object, Context> : never);
20
+ /** Creates validated, composable-aware fallback components for one factory. */
21
+ type CreateLazyRenderState<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents> = <const State extends LazyDefaultState, const Custom extends InPropsObject = {}, const Include extends IncludedProps<MergedLayoutInProps<Resources, Options, Composables>> = {}>(definition: {
22
+ state: State;
23
+ props?: {
24
+ include?: Include;
25
+ custom?: Custom;
26
+ };
27
+ render: LazyRender<State, ResourcePath<Resources>, RenderStateProps<Resources, Options, Composables, Include, Custom>, RenderStateContext<Composables, Resources, State>>;
28
+ }) => ComponentType<OptionalStateChildren<ResolveProps<Custom> & ResolvedIncludedComponentProps<MergedLayoutInProps<Resources, Options, Composables>, LazyDefaultIncludes<Include>>> & BuiltinProps<State, ResourcePath<Resources>>>;
29
+ /** Compatibility helper; custom props keep their existing unchecked contract. */
30
+ type CreateBoundLazyErrorComponent<Resource, Context> = CreateLazyErrorComponent<Resource, Context>;
31
+ //#endregion
32
+ export { CreateBoundLazyErrorComponent, CreateLazyRenderState, LazyDefaultState };
33
+ //# sourceMappingURL=create-render-state.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-render-state.d.cts","names":[],"sources":["../../src/lazy/create-render-state.tsx"],"mappings":";;;;;;;;;KAyBY,gBAAA;AAAA,KACP,YAAA,eACW,gBAAA,cAEZ,KAAA,mBACA,sBAAA,CAAuB,QAAA;EACrB,QAAA,EAAU,QAAA;AAAA;;KAGX,mBAAA,4BACW,OAAA,GAAU,OAAA,CAAQ,GAAA;EAC1B,QAAA;EAAgB,WAAA;AAAA,IAClB,OAAA,CAAQ,GAAA;AAAA,KAGT,UAAA,eAAyB,gBAAA,gCAExB,KAAA,EAAO,KAAA,GAAQ,YAAA,CAAa,KAAA,EAAO,QAAA,GACnC,OAAA,EAAS,OAAA,KACN,SAAA,KACJ,KAAA,mBACG,iBAAA,CAAkB,QAAA,EAAU,KAAA,WAAgB,OAAA;;KAIxC,qBAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA,uBACd,oBAAA,yBAEA,gBAAA,uBACC,aAAA,6BACC,aAAA,CACpB,mBAAA,CAAoB,SAAA,EAAW,OAAA,EAAS,WAAA,SAE1C,UAAA;EACA,KAAA,EAAO,KAAA;EACP,KAAA;IAAU,OAAA,GAAU,OAAA;IAAS,MAAA,GAAS,MAAA;EAAA;EACtC,MAAA,EAAQ,UAAA,CAAW,KAAA,EAAO,YAAA,CAAa,SAAA,GAAY,gBAAA,CAAiB,SAAA,EAAW,OAAA,EAAS,WAAA,EAAa,OAAA,EAAS,MAAA,GAAS,kBAAA,CAAmB,WAAA,EAAa,SAAA,EAAW,KAAA;AAAA,MAC9J,aAAA,CACJ,qBAAA,CACE,YAAA,CAAa,MAAA,IACX,8BAAA,CACE,mBAAA,CAAoB,SAAA,EAAW,OAAA,EAAS,WAAA,GACxC,mBAAA,CAAoB,OAAA,MAGxB,YAAA,CAAa,KAAA,EAAO,YAAA,CAAa,SAAA;;KAIzB,6BAAA,sBACV,wBAAA,CAAyB,QAAA,EAAU,OAAA"}
@@ -0,0 +1,33 @@
1
+ import { CreateLazyErrorComponent, LazyErrorHandlers, LazyResourceErrorProps } from "./types.mjs";
2
+ import { ResourceDefinition, ResourcePath } from "../resource.mjs";
3
+ import { InPropsDefinition, InPropsObject, IncludedProps, MergedLayoutInProps, ResolvedIncludedComponentProps } from "../props.mjs";
4
+ import { OptionalStateChildren, RenderStateContext, RenderStateProps } from "../create-config/render-state.mjs";
5
+ import { ComposableComponents } from "@jfdevelops/react-layout-composables";
6
+ import { ComponentType, ReactNode } from "react";
7
+ import { ResolveProps } from "@jfdevelops/react-layout-validator";
8
+
9
+ //#region src/lazy/create-render-state.d.ts
10
+ type LazyDefaultState = 'Loading' | 'Error';
11
+ type BuiltinProps<State extends LazyDefaultState, Resource> = State extends 'Error' ? LazyResourceErrorProps<Resource> : {
12
+ resource: Resource;
13
+ };
14
+ /** Shorthand includes are direct props; explicit supply sources retain their contract. */
15
+ type LazyDefaultIncludes<Include> = { [Key in keyof Include]: Include[Key] extends true ? {
16
+ required: true;
17
+ suppliedVia: 'component';
18
+ } : Include[Key] };
19
+ type LazyRender<State extends LazyDefaultState, Resource, Props, Context> = ((props: Props & BuiltinProps<State, Resource>, context: Context) => ReactNode) | (State extends 'Error' ? LazyErrorHandlers<Resource, Props & object, Context> : never);
20
+ /** Creates validated, composable-aware fallback components for one factory. */
21
+ type CreateLazyRenderState<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents> = <const State extends LazyDefaultState, const Custom extends InPropsObject = {}, const Include extends IncludedProps<MergedLayoutInProps<Resources, Options, Composables>> = {}>(definition: {
22
+ state: State;
23
+ props?: {
24
+ include?: Include;
25
+ custom?: Custom;
26
+ };
27
+ render: LazyRender<State, ResourcePath<Resources>, RenderStateProps<Resources, Options, Composables, Include, Custom>, RenderStateContext<Composables, Resources, State>>;
28
+ }) => ComponentType<OptionalStateChildren<ResolveProps<Custom> & ResolvedIncludedComponentProps<MergedLayoutInProps<Resources, Options, Composables>, LazyDefaultIncludes<Include>>> & BuiltinProps<State, ResourcePath<Resources>>>;
29
+ /** Compatibility helper; custom props keep their existing unchecked contract. */
30
+ type CreateBoundLazyErrorComponent<Resource, Context> = CreateLazyErrorComponent<Resource, Context>;
31
+ //#endregion
32
+ export { CreateBoundLazyErrorComponent, CreateLazyRenderState, LazyDefaultState };
33
+ //# sourceMappingURL=create-render-state.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-render-state.d.mts","names":[],"sources":["../../src/lazy/create-render-state.tsx"],"mappings":";;;;;;;;;KAyBY,gBAAA;AAAA,KACP,YAAA,eACW,gBAAA,cAEZ,KAAA,mBACA,sBAAA,CAAuB,QAAA;EACrB,QAAA,EAAU,QAAA;AAAA;;KAGX,mBAAA,4BACW,OAAA,GAAU,OAAA,CAAQ,GAAA;EAC1B,QAAA;EAAgB,WAAA;AAAA,IAClB,OAAA,CAAQ,GAAA;AAAA,KAGT,UAAA,eAAyB,gBAAA,gCAExB,KAAA,EAAO,KAAA,GAAQ,YAAA,CAAa,KAAA,EAAO,QAAA,GACnC,OAAA,EAAS,OAAA,KACN,SAAA,KACJ,KAAA,mBACG,iBAAA,CAAkB,QAAA,EAAU,KAAA,WAAgB,OAAA;;KAIxC,qBAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA,uBACd,oBAAA,yBAEA,gBAAA,uBACC,aAAA,6BACC,aAAA,CACpB,mBAAA,CAAoB,SAAA,EAAW,OAAA,EAAS,WAAA,SAE1C,UAAA;EACA,KAAA,EAAO,KAAA;EACP,KAAA;IAAU,OAAA,GAAU,OAAA;IAAS,MAAA,GAAS,MAAA;EAAA;EACtC,MAAA,EAAQ,UAAA,CAAW,KAAA,EAAO,YAAA,CAAa,SAAA,GAAY,gBAAA,CAAiB,SAAA,EAAW,OAAA,EAAS,WAAA,EAAa,OAAA,EAAS,MAAA,GAAS,kBAAA,CAAmB,WAAA,EAAa,SAAA,EAAW,KAAA;AAAA,MAC9J,aAAA,CACJ,qBAAA,CACE,YAAA,CAAa,MAAA,IACX,8BAAA,CACE,mBAAA,CAAoB,SAAA,EAAW,OAAA,EAAS,WAAA,GACxC,mBAAA,CAAoB,OAAA,MAGxB,YAAA,CAAa,KAAA,EAAO,YAAA,CAAa,SAAA;;KAIzB,6BAAA,sBACV,wBAAA,CAAyB,QAAA,EAAU,OAAA"}
@@ -0,0 +1,59 @@
1
+ import { LayoutConfigurationError } from "../errors/layout-configuration-error.mjs";
2
+ import { defineResourceLayout } from "../create-config/define-layout.mjs";
3
+ import { createElement } from "react";
4
+
5
+ //#region src/lazy/create-render-state.tsx
6
+ function createLazyRenderStateBuilder(configuration) {
7
+ function createRenderState(definition) {
8
+ if (definition.state !== "Loading" && definition.state !== "Error") throw new LayoutConfigurationError(`Unknown lazy default state "${definition.state}"`);
9
+ const include = Object.fromEntries(Object.entries(definition.props?.include ?? {}).map(([key, behavior]) => [key, behavior === true ? {
10
+ required: true,
11
+ suppliedVia: "component"
12
+ } : behavior]));
13
+ function RenderLazyDefault({ props, context }) {
14
+ if (typeof definition.render === "function") return definition.render(props, context);
15
+ const errorProps = props;
16
+ const handler = definition.render[errorProps.error.code] ?? definition.render.fallback;
17
+ if (!handler) throw errorProps.error;
18
+ return handler(props, context);
19
+ }
20
+ const layout = defineResourceLayout({
21
+ resources: configuration.resources,
22
+ options: configuration.options,
23
+ layout: { render: {
24
+ default: () => null,
25
+ [definition.state]: {
26
+ composables: configuration.composables,
27
+ props: {
28
+ include,
29
+ custom: definition.props?.custom
30
+ },
31
+ render: (props, context) => createElement(RenderLazyDefault, {
32
+ props,
33
+ context
34
+ })
35
+ }
36
+ } }
37
+ });
38
+ const components = /* @__PURE__ */ new Map();
39
+ function LazyDefault(props) {
40
+ const resource = props.resource.split(".")[0];
41
+ let Component = components.get(resource);
42
+ if (!Component) {
43
+ Component = layout.createResourceLayout({
44
+ resource,
45
+ name: "LazyDefault",
46
+ namespace: false
47
+ })[definition.state];
48
+ components.set(resource, Component);
49
+ }
50
+ return createElement(Component, props);
51
+ }
52
+ return LazyDefault;
53
+ }
54
+ return createRenderState;
55
+ }
56
+
57
+ //#endregion
58
+ export { createLazyRenderStateBuilder };
59
+ //# sourceMappingURL=create-render-state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-render-state.mjs","names":[],"sources":["../../src/lazy/create-render-state.tsx"],"sourcesContent":["import { createElement, type ComponentType, type ReactNode } from 'react';\nimport type { ComposableComponents } from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { ResourceDefinition, ResourcePath } from '../resource';\nimport {\n type ResolvedIncludedComponentProps,\n type IncludedProps,\n type InPropsDefinition,\n type InPropsObject,\n type MergedLayoutInProps,\n} from '../props';\nimport { defineResourceLayout } from '../create-config/define-layout';\nimport type {\n LayoutComposablesDefinition,\n RenderStateContext,\n RenderStateProps,\n OptionalStateChildren,\n} from '../create-config/render-state';\nimport type { ResolveProps } from '@jfdevelops/react-layout-validator';\nimport type {\n LazyResourceErrorProps,\n LazyErrorHandlers,\n CreateLazyErrorComponent,\n} from './types';\n\nexport type LazyDefaultState = 'Loading' | 'Error';\ntype BuiltinProps<\n State extends LazyDefaultState,\n Resource,\n> = State extends 'Error'\n ? LazyResourceErrorProps<Resource>\n : { resource: Resource };\n\n/** Shorthand includes are direct props; explicit supply sources retain their contract. */\ntype LazyDefaultIncludes<Include> = {\n [Key in keyof Include]: Include[Key] extends true\n ? { required: true; suppliedVia: 'component' }\n : Include[Key];\n};\n\ntype LazyRender<State extends LazyDefaultState, Resource, Props, Context> =\n | ((\n props: Props & BuiltinProps<State, Resource>,\n context: Context,\n ) => ReactNode)\n | (State extends 'Error'\n ? LazyErrorHandlers<Resource, Props & object, Context>\n : never);\n\n/** Creates validated, composable-aware fallback components for one factory. */\nexport type CreateLazyRenderState<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n> = <\n const State extends LazyDefaultState,\n const Custom extends InPropsObject = {},\n const Include extends IncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>\n > = {},\n>(definition: {\n state: State;\n props?: { include?: Include; custom?: Custom };\n render: LazyRender<State, ResourcePath<Resources>, RenderStateProps<Resources, Options, Composables, Include, Custom>, RenderStateContext<Composables, Resources, State>>;\n}) => ComponentType<\n OptionalStateChildren<\n ResolveProps<Custom> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, Options, Composables>,\n LazyDefaultIncludes<Include>\n >\n > &\n BuiltinProps<State, ResourcePath<Resources>>\n>;\n\n/** Compatibility helper; custom props keep their existing unchecked contract. */\nexport type CreateBoundLazyErrorComponent<Resource, Context> =\n CreateLazyErrorComponent<Resource, Context>;\n\ntype RuntimeDefinition = {\n state: LazyDefaultState;\n props?: { include?: Record<string, unknown>; custom?: InPropsObject };\n render:\n | ((props: any, context: any) => ReactNode)\n | LazyErrorHandlers<string, object, any>;\n};\n\nexport function createLazyRenderStateBuilder<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n>(configuration: {\n resources: Resources;\n options: Options;\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n}): CreateLazyRenderState<Resources, Options, Composables> {\n function createRenderState(definition: RuntimeDefinition) {\n if (definition.state !== 'Loading' && definition.state !== 'Error') {\n throw new LayoutConfigurationError(\n `Unknown lazy default state \"${definition.state}\"`,\n );\n }\n // Lazy defaults have no create-time configuration call. Included values are\n // supplied by their component caller unless an explicit config source is selected.\n const include = Object.fromEntries(\n Object.entries(definition.props?.include ?? {}).map(([key, behavior]) => [\n key,\n behavior === true\n ? { required: true, suppliedVia: 'component' }\n : behavior,\n ]),\n );\n function RenderLazyDefault({\n props,\n context,\n }: {\n props: any;\n context: any;\n }) {\n if (typeof definition.render === 'function') {\n return definition.render(props, context);\n }\n const errorProps = props as LazyResourceErrorProps;\n const handler =\n definition.render[errorProps.error.code] ?? definition.render.fallback;\n if (!handler) throw errorProps.error;\n return handler(props as never, context);\n }\n const layout = defineResourceLayout({\n resources: configuration.resources,\n options: configuration.options,\n layout: {\n render: {\n default: () => null,\n [definition.state]: {\n composables: configuration.composables,\n props: { include, custom: definition.props?.custom },\n render: (props: any, context: any) =>\n createElement(RenderLazyDefault, { props, context }),\n },\n },\n },\n } as never);\n const components = new Map<string, ComponentType<any>>();\n function LazyDefault(props: { resource: string }) {\n // Nested lazy paths use the factory's top-level resource definitions for\n // option resolution. The callback still receives the complete path.\n const resource = props.resource.split('.')[0]!;\n let Component = components.get(resource);\n if (!Component) {\n const Root = layout.createResourceLayout({\n resource,\n name: 'LazyDefault',\n namespace: false,\n } as never) as unknown as Record<LazyDefaultState, ComponentType<any>>;\n Component = Root[definition.state];\n components.set(resource, Component);\n }\n return createElement(Component, props);\n }\n return LazyDefault;\n }\n return createRenderState as CreateLazyRenderState<\n Resources,\n Options,\n Composables\n >;\n}\n"],"mappings":";;;;;AAuFA,SAAgB,6BAId,eAIyD;CACzD,SAAS,kBAAkB,YAA+B;EACxD,IAAI,WAAW,UAAU,aAAa,WAAW,UAAU,SACzD,MAAM,IAAI,yBACR,+BAA+B,WAAW,MAAM,EAClD;EAIF,MAAM,UAAU,OAAO,YACrB,OAAO,QAAQ,WAAW,OAAO,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,cAAc,CACvE,KACA,aAAa,OACT;GAAE,UAAU;GAAM,aAAa;EAAY,IAC3C,QACN,CAAC,CACH;EACA,SAAS,kBAAkB,EACzB,OACA,WAIC;GACD,IAAI,OAAO,WAAW,WAAW,YAC/B,OAAO,WAAW,OAAO,OAAO,OAAO;GAEzC,MAAM,aAAa;GACnB,MAAM,UACJ,WAAW,OAAO,WAAW,MAAM,SAAS,WAAW,OAAO;GAChE,IAAI,CAAC,SAAS,MAAM,WAAW;GAC/B,OAAO,QAAQ,OAAgB,OAAO;EACxC;EACA,MAAM,SAAS,qBAAqB;GAClC,WAAW,cAAc;GACzB,SAAS,cAAc;GACvB,QAAQ,EACN,QAAQ;IACN,eAAe;KACd,WAAW,QAAQ;KAClB,aAAa,cAAc;KAC3B,OAAO;MAAE;MAAS,QAAQ,WAAW,OAAO;KAAO;KACnD,SAAS,OAAY,YACnB,cAAc,mBAAmB;MAAE;MAAO;KAAQ,CAAC;IACvD;GACF,EACF;EACF,CAAU;EACV,MAAM,6BAAa,IAAI,IAAgC;EACvD,SAAS,YAAY,OAA6B;GAGhD,MAAM,WAAW,MAAM,SAAS,MAAM,GAAG,EAAE;GAC3C,IAAI,YAAY,WAAW,IAAI,QAAQ;GACvC,IAAI,CAAC,WAAW;IAMd,YALa,OAAO,qBAAqB;KACvC;KACA,MAAM;KACN,WAAW;IACb,CACe,EAAE,WAAW;IAC5B,WAAW,IAAI,UAAU,SAAS;GACpC;GACA,OAAO,cAAc,WAAW,KAAK;EACvC;EACA,OAAO;CACT;CACA,OAAO;AAKT"}