@jfdevelops/react-layout 1.6.1 → 2.1.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 (157) hide show
  1. package/dist/create-config/create-defined-resource-layout.cjs +26 -14
  2. package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
  3. package/dist/create-config/create-defined-resource-layout.d.cts +12 -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 +12 -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 +27 -15
  8. package/dist/create-config/create-defined-resource-layout.mjs.map +1 -1
  9. package/dist/create-config/define-layout.cjs +129 -58
  10. package/dist/create-config/define-layout.cjs.map +1 -1
  11. package/dist/create-config/define-layout.d.cts +9 -13
  12. package/dist/create-config/define-layout.d.cts.map +1 -1
  13. package/dist/create-config/define-layout.d.mts +9 -13
  14. package/dist/create-config/define-layout.d.mts.map +1 -1
  15. package/dist/create-config/define-layout.mjs +130 -59
  16. package/dist/create-config/define-layout.mjs.map +1 -1
  17. package/dist/create-config/for-resources/create-component.d.cts +62 -38
  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 +62 -38
  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 +88 -12
  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 +88 -12
  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 +39 -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 +39 -4
  36. package/dist/create-config/for-resources/scoped-render.mjs.map +1 -1
  37. package/dist/create-config/index.d.cts +3 -2
  38. package/dist/create-config/index.d.mts +3 -2
  39. package/dist/create-config/layout-name.cjs +1 -1
  40. package/dist/create-config/layout-name.mjs +1 -1
  41. package/dist/create-config/lazy-resource-layout.cjs +70 -86
  42. package/dist/create-config/lazy-resource-layout.cjs.map +1 -1
  43. package/dist/create-config/lazy-resource-layout.d.cts +9 -31
  44. package/dist/create-config/lazy-resource-layout.d.cts.map +1 -1
  45. package/dist/create-config/lazy-resource-layout.d.mts +9 -31
  46. package/dist/create-config/lazy-resource-layout.d.mts.map +1 -1
  47. package/dist/create-config/lazy-resource-layout.mjs +70 -86
  48. package/dist/create-config/lazy-resource-layout.mjs.map +1 -1
  49. package/dist/create-config/preview.cjs +1 -1
  50. package/dist/create-config/preview.d.cts +2 -0
  51. package/dist/create-config/preview.d.cts.map +1 -1
  52. package/dist/create-config/preview.d.mts +2 -0
  53. package/dist/create-config/preview.d.mts.map +1 -1
  54. package/dist/create-config/preview.mjs +1 -1
  55. package/dist/create-config/render-state-context.cjs +24 -0
  56. package/dist/create-config/render-state-context.cjs.map +1 -0
  57. package/dist/create-config/render-state-context.mjs +22 -0
  58. package/dist/create-config/render-state-context.mjs.map +1 -0
  59. package/dist/create-config/render-state.cjs +58 -18
  60. package/dist/create-config/render-state.cjs.map +1 -1
  61. package/dist/create-config/render-state.d.cts +44 -21
  62. package/dist/create-config/render-state.d.cts.map +1 -1
  63. package/dist/create-config/render-state.d.mts +44 -21
  64. package/dist/create-config/render-state.d.mts.map +1 -1
  65. package/dist/create-config/render-state.mjs +55 -18
  66. package/dist/create-config/render-state.mjs.map +1 -1
  67. package/dist/create-config/state-composable.cjs +4 -2
  68. package/dist/create-config/state-composable.cjs.map +1 -1
  69. package/dist/create-config/state-composable.d.cts.map +1 -1
  70. package/dist/create-config/state-composable.d.mts.map +1 -1
  71. package/dist/create-config/state-composable.mjs +4 -2
  72. package/dist/create-config/state-composable.mjs.map +1 -1
  73. package/dist/errors/lazy-resource-error.cjs +37 -0
  74. package/dist/errors/lazy-resource-error.cjs.map +1 -0
  75. package/dist/errors/lazy-resource-error.d.cts +26 -0
  76. package/dist/errors/lazy-resource-error.d.cts.map +1 -0
  77. package/dist/errors/lazy-resource-error.d.mts +26 -0
  78. package/dist/errors/lazy-resource-error.d.mts.map +1 -0
  79. package/dist/errors/lazy-resource-error.mjs +35 -0
  80. package/dist/errors/lazy-resource-error.mjs.map +1 -0
  81. package/dist/errors/react-layout-error.cjs +1 -1
  82. package/dist/errors/react-layout-error.mjs +1 -1
  83. package/dist/errors/resource-state-error.cjs +4 -1
  84. package/dist/errors/resource-state-error.cjs.map +1 -1
  85. package/dist/errors/resource-state-error.d.cts +1 -0
  86. package/dist/errors/resource-state-error.d.cts.map +1 -1
  87. package/dist/errors/resource-state-error.d.mts +1 -0
  88. package/dist/errors/resource-state-error.d.mts.map +1 -1
  89. package/dist/errors/resource-state-error.mjs +4 -1
  90. package/dist/errors/resource-state-error.mjs.map +1 -1
  91. package/dist/index.cjs +6 -2
  92. package/dist/index.d.cts +9 -5
  93. package/dist/index.d.mts +9 -5
  94. package/dist/index.mjs +4 -3
  95. package/dist/lazy/create-lazy-loader.cjs +78 -0
  96. package/dist/lazy/create-lazy-loader.cjs.map +1 -0
  97. package/dist/lazy/create-lazy-loader.d.cts +19 -0
  98. package/dist/lazy/create-lazy-loader.d.cts.map +1 -0
  99. package/dist/lazy/create-lazy-loader.d.mts +19 -0
  100. package/dist/lazy/create-lazy-loader.d.mts.map +1 -0
  101. package/dist/lazy/create-lazy-loader.mjs +78 -0
  102. package/dist/lazy/create-lazy-loader.mjs.map +1 -0
  103. package/dist/lazy/create-render-state.cjs +59 -0
  104. package/dist/lazy/create-render-state.cjs.map +1 -0
  105. package/dist/lazy/create-render-state.d.cts +33 -0
  106. package/dist/lazy/create-render-state.d.cts.map +1 -0
  107. package/dist/lazy/create-render-state.d.mts +33 -0
  108. package/dist/lazy/create-render-state.d.mts.map +1 -0
  109. package/dist/lazy/create-render-state.mjs +59 -0
  110. package/dist/lazy/create-render-state.mjs.map +1 -0
  111. package/dist/lazy/fallback-props.cjs +9 -0
  112. package/dist/lazy/fallback-props.cjs.map +1 -0
  113. package/dist/lazy/fallback-props.mjs +9 -0
  114. package/dist/lazy/fallback-props.mjs.map +1 -0
  115. package/dist/lazy/inspection.cjs +51 -0
  116. package/dist/lazy/inspection.cjs.map +1 -0
  117. package/dist/lazy/inspection.d.cts +28 -0
  118. package/dist/lazy/inspection.d.cts.map +1 -0
  119. package/dist/lazy/inspection.d.mts +28 -0
  120. package/dist/lazy/inspection.d.mts.map +1 -0
  121. package/dist/lazy/inspection.mjs +50 -0
  122. package/dist/lazy/inspection.mjs.map +1 -0
  123. package/dist/lazy/lazy-boundary.cjs +63 -0
  124. package/dist/lazy/lazy-boundary.cjs.map +1 -0
  125. package/dist/lazy/lazy-boundary.mjs +63 -0
  126. package/dist/lazy/lazy-boundary.mjs.map +1 -0
  127. package/dist/lazy/scoped-content.cjs +87 -0
  128. package/dist/lazy/scoped-content.cjs.map +1 -0
  129. package/dist/lazy/scoped-content.d.cts +19 -0
  130. package/dist/lazy/scoped-content.d.cts.map +1 -0
  131. package/dist/lazy/scoped-content.d.mts +19 -0
  132. package/dist/lazy/scoped-content.d.mts.map +1 -0
  133. package/dist/lazy/scoped-content.mjs +86 -0
  134. package/dist/lazy/scoped-content.mjs.map +1 -0
  135. package/dist/lazy/types.cjs +10 -0
  136. package/dist/lazy/types.cjs.map +1 -0
  137. package/dist/lazy/types.d.cts +40 -0
  138. package/dist/lazy/types.d.cts.map +1 -0
  139. package/dist/lazy/types.d.mts +40 -0
  140. package/dist/lazy/types.d.mts.map +1 -0
  141. package/dist/lazy/types.mjs +8 -0
  142. package/dist/lazy/types.mjs.map +1 -0
  143. package/dist/props.cjs +4 -2
  144. package/dist/props.cjs.map +1 -1
  145. package/dist/props.d.cts +6 -50
  146. package/dist/props.d.cts.map +1 -1
  147. package/dist/props.d.mts +6 -50
  148. package/dist/props.d.mts.map +1 -1
  149. package/dist/props.mjs +5 -2
  150. package/dist/props.mjs.map +1 -1
  151. package/dist/resource.cjs.map +1 -1
  152. package/dist/resource.d.cts +1 -1
  153. package/dist/resource.d.cts.map +1 -1
  154. package/dist/resource.d.mts +1 -1
  155. package/dist/resource.d.mts.map +1 -1
  156. package/dist/resource.mjs.map +1 -1
  157. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"props.cjs","names":[],"sources":["../src/props.ts"],"sourcesContent":["import type {\n ComposableComponents,\n MergePresetProps,\n} from '@jfdevelops/react-layout-composables';\nimport type { InPropsObject } from '@jfdevelops/react-layout-composables';\nimport {\n EnumWrappedProp,\n LiteralWrappedProp,\n ResolveLayoutProps,\n ResolveLayoutPropsAsDefined,\n ResolveProps,\n} from '@jfdevelops/react-layout-validator';\nimport { ResourceDefinition, ResourceEnum } from './resource';\nimport { Show } from './utils';\n\nexport type { InPropsObject };\n\n/**\n * Two-argument `render(props, context)` used by createComponent and scoped\n * resource components. `Context` is sibling components (scoped) or the\n * resource render context (top-level).\n */\nexport type PropsContextRender<RenderProps, Context, Result = unknown> = (\n props: RenderProps,\n context: Context\n) => Result;\n\n/**\n * Shared `{ props?, render }` shape used by createComponent, scoped\n * components, and anywhere else a value declares props and a two-arg render.\n *\n * @typeParam Props - Declared on the entry (`props`). Often an\n * {@link InPropsObject}, or a layout include/custom bag.\n * @typeParam RenderProps - First argument to `render` (defaults to\n * {@link ResolveProps}<Props> when Props is an {@link InPropsObject})\n * @typeParam Result - `render` return type\n * @typeParam Context - Second argument to `render`\n */\nexport interface PropsRenderDefinition<\n Props = InPropsObject,\n RenderProps = Props extends InPropsObject ? ResolveProps<Props> : unknown,\n Result = unknown,\n Context = unknown\n> {\n props?: Props;\n render: PropsContextRender<RenderProps, Context, Result>;\n}\n\nexport type InPropsOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Name extends string\n> = {\n name: LiteralWrappedProp<Name, 'string', 'required'>;\n resource: EnumWrappedProp<ResourceEnum<Resources>, 'string', 'required'>;\n};\nexport type InPropsFunction<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = <Name extends string>(\n props: Show<InPropsOptions<Resources, Name>>\n) => InPropsObject;\nexport type InPropsDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = InPropsObject | InPropsFunction<Resources>;\nexport type InferredInProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>\n> = Options extends InPropsFunction<Resources> ? ReturnType<Options> : Options;\nexport type MergedLayoutInProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents\n> = InferredInProps<Resources, Options> extends InPropsObject\n ? InferredInProps<Resources, Options> & MergePresetProps<Composables>\n : never;\nexport type RequiredVariant = true | 'required';\n/**\n * @typeParam RequiredVariant How the required props are selected. In application code,\n * it will always be `true`, but internally we need to support `'required'` as well.\n */\ntype PropsType<Variant extends RequiredVariant = true> = Variant | 'optional';\ntype InternalPropsType = PropsType<'required'>;\ntype IncludedPropSource = 'component' | 'config';\ntype IncludedPropRequirement =\n | {\n /**\n * Whether the prop must be supplied. When both names are present,\n * `required` takes precedence over the deprecated `visibility` setting.\n */\n required: boolean;\n }\n | {\n /**\n * Whether the prop must be supplied (`'required'`) or may be omitted\n * (`'optional'`). The `required` setting takes precedence when both are present.\n *\n * @deprecated Use `required: true` instead of `visibility: 'required'`, or\n * `required: false` instead of `visibility: 'optional'`.\n * This property will be removed in the next major version.\n */\n visibility: 'optional' | 'required';\n };\ntype IncludedPropSupply =\n | {\n /**\n * Where the prop is supplied: at component render time (`'component'`)\n * or through layout creation options (`'config'`). Optional component props\n * also accept configuration-time defaults. This setting takes precedence\n * over the deprecated `passthrough` setting.\n */\n suppliedVia: IncludedPropSource;\n }\n | {\n /**\n * Where the prop is supplied: at component render time (`'component'`)\n * or through layout creation options (`'config'`). Optional component props\n * also accept configuration-time defaults. The `suppliedVia` setting takes\n * precedence when both names are present.\n *\n * @deprecated Use `suppliedVia: 'component'` instead of\n * `passthrough: 'component'`, or `suppliedVia: 'config'` instead of\n * `passthrough: 'config'`. This property will be removed in the next major version.\n */\n passthrough: IncludedPropSource;\n };\n\n/**\n * Controls where an included layout prop is supplied and whether it is required there.\n */\nexport type IncludedPropBehavior = IncludedPropRequirement & IncludedPropSupply;\n\ntype IncludedPropType = PropsType | IncludedPropBehavior;\n/**\n * A map of props to include in the layout.\n */\nexport type IncludedProps<T extends object> = {\n [K in keyof T & string]?: IncludedPropType;\n};\n\ntype PropsKeys<Props extends InPropsObject, T> = T & keyof Props;\nexport type IncludedPropVisibility<Value> = Value extends { required: boolean }\n ? Value['required'] extends true\n ? 'required'\n : 'optional'\n : Value extends { visibility: 'required' | 'optional' }\n ? Value['visibility']\n : Value extends true | 'required'\n ? 'required'\n : Value extends 'optional'\n ? 'optional'\n : never;\nexport type IncludedPropSupplySource<Value> = Value extends {\n suppliedVia: IncludedPropSource;\n}\n ? Value['suppliedVia']\n : Value extends { passthrough: IncludedPropSource }\n ? Value['passthrough']\n : never;\n/**\n * Canonical shape used internally for either spelling of an include behavior.\n */\nexport type NormalizedIncludedPropBehavior<Value> = Value extends\n | { required: boolean }\n | { suppliedVia: IncludedPropSource }\n ? {\n visibility: IncludedPropVisibility<Value>;\n passthrough: IncludedPropSupplySource<Value>;\n }\n : Value;\n\nexport type IncludedPropPassthrough<Value> = Value extends\n | { required: boolean }\n | { suppliedVia: IncludedPropSource }\n ? IncludedPropSupplySource<Value> extends 'component'\n ? IncludedPropVisibility<Value> extends 'optional'\n ? 'component' | 'config'\n : 'component'\n : IncludedPropSupplySource<Value>\n : Value extends {\n visibility: 'required' | 'optional';\n passthrough: IncludedPropSource;\n }\n ? Value['passthrough'] extends 'component'\n ? Value['visibility'] extends 'optional'\n ? 'component' | 'config'\n : 'component'\n : Value['passthrough']\n : Value extends true | 'required'\n ? 'config'\n : Value extends 'optional'\n ? 'component' | 'config'\n : never;\n\ntype GetPropsKey<\n IncludeProps extends object,\n Visibility extends InternalPropsType,\n Passthrough extends IncludedPropSource | 'render' = 'render'\n> = {\n [Key in keyof IncludeProps]: IncludedPropVisibility<\n IncludeProps[Key]\n > extends Visibility\n ? Passthrough extends 'render'\n ? Key\n : Passthrough extends IncludedPropPassthrough<IncludeProps[Key]>\n ? Key\n : never\n : never;\n}[keyof IncludeProps];\ntype SelectedIncludedProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n Visibility extends InternalPropsType,\n Passthrough extends IncludedPropSource | 'render' = 'render'\n> = Pick<\n Props,\n PropsKeys<Props, GetPropsKey<IncludeProps, Visibility, Passthrough>>\n>;\n\ntype OptionalPropDefinition<Definition> = Definition extends {\n optional(): infer OptionalDefinition;\n}\n ? OptionalDefinition\n : Definition;\n\n/** Raw validator definitions accepted by a generated component call. */\nexport type IncludedComponentPropDefinitions<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>\n> = SelectedIncludedProps<Props, IncludeProps, 'required', 'component'> & {\n [Key in keyof SelectedIncludedProps<\n Props,\n IncludeProps,\n 'optional',\n 'component'\n >]: OptionalPropDefinition<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'component'>[Key]\n >;\n};\n\nexport type ResolvedIncludedProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>\n> = ResolveLayoutProps<SelectedIncludedProps<Props, IncludeProps, 'required'>> &\n Partial<\n ResolveLayoutProps<SelectedIncludedProps<Props, IncludeProps, 'optional'>>\n >;\n\nexport type ResolvedIncludedConfigProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>\n> = ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'required', 'config'>\n> &\n Partial<\n ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'config'>\n >\n >;\n\nexport type ResolvedIncludedComponentProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>\n> = ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'required', 'component'>\n> &\n Partial<\n ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'component'>\n >\n >;\n\n/**\n * Like {@link ResolvedIncludedProps}, but keeps included prop keys exactly as\n * declared (no `JSX.Element` capitalization).\n */\nexport type ResolvedIncludedPropsAsDefined<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>\n> = ResolveLayoutPropsAsDefined<\n SelectedIncludedProps<Props, IncludeProps, 'required'>\n> &\n Partial<\n ResolveLayoutPropsAsDefined<\n SelectedIncludedProps<Props, IncludeProps, 'optional'>\n >\n >;\nexport type LayoutRenderProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>\n > = {},\n CustomProps extends InPropsObject = {}\n> = Show<\n ResolveProps<CustomProps> &\n ResolvedIncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>,\n IncludeProps\n >\n>;\n\nexport function getIncludedPropBehavior(value: unknown): {\n visibility: 'required' | 'optional';\n passthrough: 'component' | 'config';\n} | null {\n if (value === null || typeof value !== 'object') {\n return null;\n }\n\n const required =\n 'required' in value && typeof value.required === 'boolean'\n ? value.required\n : 'visibility' in value\n ? value.visibility === 'required'\n : undefined;\n const suppliedVia =\n 'suppliedVia' in value\n ? value.suppliedVia\n : 'passthrough' in value\n ? value.passthrough\n : undefined;\n\n if (\n required === undefined ||\n (suppliedVia !== 'component' && suppliedVia !== 'config')\n ) {\n return null;\n }\n\n return {\n visibility: required ? 'required' : 'optional',\n passthrough: suppliedVia,\n };\n}\n"],"mappings":";;AA6SA,SAAgB,wBAAwB,OAG/B;CACP,IAAI,UAAU,QAAQ,OAAO,UAAU,UACrC,OAAO;CAGT,MAAM,WACJ,cAAc,SAAS,OAAO,MAAM,aAAa,YAC7C,MAAM,WACN,gBAAgB,QAChB,MAAM,eAAe,aACrB;CACN,MAAM,cACJ,iBAAiB,QACb,MAAM,cACN,iBAAiB,QACjB,MAAM,cACN;CAEN,IACE,aAAa,UACZ,gBAAgB,eAAe,gBAAgB,UAEhD,OAAO;CAGT,OAAO;EACL,YAAY,WAAW,aAAa;EACpC,aAAa;CACf;AACF"}
1
+ {"version":3,"file":"props.cjs","names":["LayoutConfigurationError"],"sources":["../src/props.ts"],"sourcesContent":["import { LayoutConfigurationError } from './errors';\nimport type {\n ComposableComponents,\n MergePresetProps,\n} from '@jfdevelops/react-layout-composables';\nimport type { InPropsObject } from '@jfdevelops/react-layout-composables';\nimport {\n EnumWrappedProp,\n LiteralWrappedProp,\n ResolveLayoutProps,\n ResolveLayoutPropsAsDefined,\n ResolveProps,\n} from '@jfdevelops/react-layout-validator';\nimport { ResourceDefinition, ResourceEnum } from './resource';\nimport { Show } from './utils';\n\nexport type { InPropsObject };\n\n/**\n * Two-argument `render(props, context)` used by createComponent and scoped\n * resource components. `Context` is sibling components (scoped) or the\n * resource render context (top-level).\n */\nexport type PropsContextRender<RenderProps, Context, Result = unknown> = (\n props: RenderProps,\n context: Context,\n) => Result;\n\n/**\n * Shared `{ props?, render }` shape used by createComponent, scoped\n * components, and anywhere else a value declares props and a two-arg render.\n *\n * @typeParam Props - Declared on the entry (`props`). Often an\n * {@link InPropsObject}, or a layout include/custom bag.\n * @typeParam RenderProps - First argument to `render` (defaults to\n * {@link ResolveProps}<Props> when Props is an {@link InPropsObject})\n * @typeParam Result - `render` return type\n * @typeParam Context - Second argument to `render`\n */\nexport interface PropsRenderDefinition<\n Props = InPropsObject,\n RenderProps = Props extends InPropsObject ? ResolveProps<Props> : unknown,\n Result = unknown,\n Context = unknown,\n> {\n props?: Props;\n render: PropsContextRender<RenderProps, Context, Result>;\n}\n\nexport type InPropsOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Name extends string,\n> = {\n name: LiteralWrappedProp<Name, 'string', 'required'>;\n resource: EnumWrappedProp<ResourceEnum<Resources>, 'string', 'required'>;\n};\nexport type InPropsFunction<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = <Name extends string>(\n props: Show<InPropsOptions<Resources, Name>>,\n) => InPropsObject;\nexport type InPropsDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = InPropsObject | InPropsFunction<Resources>;\nexport type InferredInProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = Options extends InPropsFunction<Resources> ? ReturnType<Options> : Options;\nexport type MergedLayoutInProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n> =\n InferredInProps<Resources, Options> extends InPropsObject\n ? InferredInProps<Resources, Options> & MergePresetProps<Composables>\n : never;\nexport type RequiredVariant = true | 'required';\n/**\n * @typeParam RequiredVariant How the required props are selected. In application code,\n * it will always be `true`, but internally we need to support `'required'` as well.\n */\ntype PropsType<Variant extends RequiredVariant = true> = Variant | 'optional';\ntype InternalPropsType = PropsType<'required'>;\ntype IncludedPropSource = 'component' | 'config';\n/** Controls whether an included prop is required and where it is supplied. */\nexport type IncludedPropBehavior = {\n required: boolean;\n suppliedVia: IncludedPropSource;\n};\n\ntype IncludedPropType = PropsType | IncludedPropBehavior;\n/**\n * A map of props to include in the layout.\n */\nexport type IncludedProps<T extends object> = {\n [K in keyof T & string]?: IncludedPropType;\n};\n\ntype PropsKeys<Props extends InPropsObject, T> = T & keyof Props;\nexport type IncludedPropVisibility<Value> = Value extends { required: boolean }\n ? Value['required'] extends true\n ? 'required'\n : 'optional'\n : Value extends true | 'required'\n ? 'required'\n : Value extends 'optional'\n ? 'optional'\n : never;\nexport type IncludedPropSupplySource<Value> = Value extends {\n suppliedVia: IncludedPropSource;\n}\n ? Value['suppliedVia']\n : never;\n/**\n * Internal representation of the supported include behavior.\n */\nexport type NormalizedIncludedPropBehavior<Value> = Value extends\n | { required: boolean }\n | { suppliedVia: IncludedPropSource }\n ? {\n visibility: IncludedPropVisibility<Value>;\n passthrough: IncludedPropSupplySource<Value>;\n }\n : Value;\n\nexport type IncludedPropPassthrough<Value> = Value extends\n | { required: boolean }\n | { suppliedVia: IncludedPropSource }\n ? IncludedPropSupplySource<Value> extends 'component'\n ? IncludedPropVisibility<Value> extends 'optional'\n ? 'component' | 'config'\n : 'component'\n : IncludedPropSupplySource<Value>\n : Value extends true | 'required'\n ? 'config'\n : Value extends 'optional'\n ? 'component' | 'config'\n : never;\n\ntype GetPropsKey<\n IncludeProps extends object,\n Visibility extends InternalPropsType,\n Passthrough extends IncludedPropSource | 'render' = 'render',\n> = {\n [Key in keyof IncludeProps]: IncludedPropVisibility<\n IncludeProps[Key]\n > extends Visibility\n ? Passthrough extends 'render'\n ? Key\n : Passthrough extends IncludedPropPassthrough<IncludeProps[Key]>\n ? Key\n : never\n : never;\n}[keyof IncludeProps];\ntype SelectedIncludedProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n Visibility extends InternalPropsType,\n Passthrough extends IncludedPropSource | 'render' = 'render',\n> = Pick<\n Props,\n PropsKeys<Props, GetPropsKey<IncludeProps, Visibility, Passthrough>>\n>;\n\ntype OptionalPropDefinition<Definition> = Definition extends {\n optional(): infer OptionalDefinition;\n}\n ? OptionalDefinition\n : Definition;\n\n/** Raw validator definitions accepted by a generated component call. */\nexport type IncludedComponentPropDefinitions<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n> = SelectedIncludedProps<Props, IncludeProps, 'required', 'component'> & {\n [Key in keyof SelectedIncludedProps<\n Props,\n IncludeProps,\n 'optional',\n 'component'\n >]: OptionalPropDefinition<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'component'>[Key]\n >;\n};\n\nexport type ResolvedIncludedProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n> = ResolveLayoutProps<SelectedIncludedProps<Props, IncludeProps, 'required'>> &\n Partial<\n ResolveLayoutProps<SelectedIncludedProps<Props, IncludeProps, 'optional'>>\n >;\n\nexport type ResolvedIncludedConfigProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n> = ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'required', 'config'>\n> &\n Partial<\n ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'config'>\n >\n >;\n\nexport type ResolvedIncludedComponentProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n> = ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'required', 'component'>\n> &\n Partial<\n ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'component'>\n >\n >;\n\n/**\n * Like {@link ResolvedIncludedProps}, but keeps included prop keys exactly as\n * declared (no `JSX.Element` capitalization).\n */\nexport type ResolvedIncludedPropsAsDefined<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n> = ResolveLayoutPropsAsDefined<\n SelectedIncludedProps<Props, IncludeProps, 'required'>\n> &\n Partial<\n ResolveLayoutPropsAsDefined<\n SelectedIncludedProps<Props, IncludeProps, 'optional'>\n >\n >;\nexport type LayoutRenderProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>\n > = {},\n CustomProps extends InPropsObject = {},\n> = Show<\n ResolveProps<CustomProps> &\n ResolvedIncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>,\n IncludeProps\n >\n>;\n\nexport function getIncludedPropBehavior(value: unknown): {\n visibility: 'required' | 'optional';\n passthrough: 'component' | 'config';\n} | null {\n if (value === null || typeof value !== 'object') {\n return null;\n }\n\n if ('visibility' in value || 'passthrough' in value) {\n throw new LayoutConfigurationError(\n 'Include properties visibility and passthrough were removed; use required and suppliedVia.',\n );\n }\n\n const required =\n 'required' in value && typeof value.required === 'boolean'\n ? value.required\n : undefined;\n const suppliedVia = 'suppliedVia' in value ? value.suppliedVia : undefined;\n\n if (\n required === undefined ||\n (suppliedVia !== 'component' && suppliedVia !== 'config')\n ) {\n return null;\n }\n\n return {\n visibility: required ? 'required' : 'optional',\n passthrough: suppliedVia,\n };\n}\n"],"mappings":";;;AAwPA,SAAgB,wBAAwB,OAG/B;CACP,IAAI,UAAU,QAAQ,OAAO,UAAU,UACrC,OAAO;CAGT,IAAI,gBAAgB,SAAS,iBAAiB,OAC5C,MAAM,IAAIA,4DACR,2FACF;CAGF,MAAM,WACJ,cAAc,SAAS,OAAO,MAAM,aAAa,YAC7C,MAAM,WACN;CACN,MAAM,cAAc,iBAAiB,QAAQ,MAAM,cAAc;CAEjE,IACE,aAAa,UACZ,gBAAgB,eAAe,gBAAgB,UAEhD,OAAO;CAGT,OAAO;EACL,YAAY,WAAW,aAAa;EACpC,aAAa;CACf;AACF"}
package/dist/props.d.cts CHANGED
@@ -41,48 +41,11 @@ type RequiredVariant = true | 'required';
41
41
  type PropsType<Variant extends RequiredVariant = true> = Variant | 'optional';
42
42
  type InternalPropsType = PropsType<'required'>;
43
43
  type IncludedPropSource = 'component' | 'config';
44
- type IncludedPropRequirement = {
45
- /**
46
- * Whether the prop must be supplied. When both names are present,
47
- * `required` takes precedence over the deprecated `visibility` setting.
48
- */
44
+ /** Controls whether an included prop is required and where it is supplied. */
45
+ type IncludedPropBehavior = {
49
46
  required: boolean;
50
- } | {
51
- /**
52
- * Whether the prop must be supplied (`'required'`) or may be omitted
53
- * (`'optional'`). The `required` setting takes precedence when both are present.
54
- *
55
- * @deprecated Use `required: true` instead of `visibility: 'required'`, or
56
- * `required: false` instead of `visibility: 'optional'`.
57
- * This property will be removed in the next major version.
58
- */
59
- visibility: 'optional' | 'required';
60
- };
61
- type IncludedPropSupply = {
62
- /**
63
- * Where the prop is supplied: at component render time (`'component'`)
64
- * or through layout creation options (`'config'`). Optional component props
65
- * also accept configuration-time defaults. This setting takes precedence
66
- * over the deprecated `passthrough` setting.
67
- */
68
47
  suppliedVia: IncludedPropSource;
69
- } | {
70
- /**
71
- * Where the prop is supplied: at component render time (`'component'`)
72
- * or through layout creation options (`'config'`). Optional component props
73
- * also accept configuration-time defaults. The `suppliedVia` setting takes
74
- * precedence when both names are present.
75
- *
76
- * @deprecated Use `suppliedVia: 'component'` instead of
77
- * `passthrough: 'component'`, or `suppliedVia: 'config'` instead of
78
- * `passthrough: 'config'`. This property will be removed in the next major version.
79
- */
80
- passthrough: IncludedPropSource;
81
48
  };
82
- /**
83
- * Controls where an included layout prop is supplied and whether it is required there.
84
- */
85
- type IncludedPropBehavior = IncludedPropRequirement & IncludedPropSupply;
86
49
  type IncludedPropType = PropsType | IncludedPropBehavior;
87
50
  /**
88
51
  * A map of props to include in the layout.
@@ -91,16 +54,12 @@ type IncludedProps<T extends object> = { [K in keyof T & string]?: IncludedPropT
91
54
  type PropsKeys<Props extends InPropsObject, T> = T & keyof Props;
92
55
  type IncludedPropVisibility<Value> = Value extends {
93
56
  required: boolean;
94
- } ? Value['required'] extends true ? 'required' : 'optional' : Value extends {
95
- visibility: 'required' | 'optional';
96
- } ? Value['visibility'] : Value extends true | 'required' ? 'required' : Value extends 'optional' ? 'optional' : never;
57
+ } ? Value['required'] extends true ? 'required' : 'optional' : Value extends true | 'required' ? 'required' : Value extends 'optional' ? 'optional' : never;
97
58
  type IncludedPropSupplySource<Value> = Value extends {
98
59
  suppliedVia: IncludedPropSource;
99
- } ? Value['suppliedVia'] : Value extends {
100
- passthrough: IncludedPropSource;
101
- } ? Value['passthrough'] : never;
60
+ } ? Value['suppliedVia'] : never;
102
61
  /**
103
- * Canonical shape used internally for either spelling of an include behavior.
62
+ * Internal representation of the supported include behavior.
104
63
  */
105
64
  type NormalizedIncludedPropBehavior<Value> = Value extends {
106
65
  required: boolean;
@@ -114,10 +73,7 @@ type IncludedPropPassthrough<Value> = Value extends {
114
73
  required: boolean;
115
74
  } | {
116
75
  suppliedVia: IncludedPropSource;
117
- } ? IncludedPropSupplySource<Value> extends 'component' ? IncludedPropVisibility<Value> extends 'optional' ? 'component' | 'config' : 'component' : IncludedPropSupplySource<Value> : Value extends {
118
- visibility: 'required' | 'optional';
119
- passthrough: IncludedPropSource;
120
- } ? Value['passthrough'] extends 'component' ? Value['visibility'] extends 'optional' ? 'component' | 'config' : 'component' : Value['passthrough'] : Value extends true | 'required' ? 'config' : Value extends 'optional' ? 'component' | 'config' : never;
76
+ } ? IncludedPropSupplySource<Value> extends 'component' ? IncludedPropVisibility<Value> extends 'optional' ? 'component' | 'config' : 'component' : IncludedPropSupplySource<Value> : Value extends true | 'required' ? 'config' : Value extends 'optional' ? 'component' | 'config' : never;
121
77
  type GetPropsKey<IncludeProps extends object, Visibility extends InternalPropsType, Passthrough extends IncludedPropSource | 'render' = 'render'> = { [Key in keyof IncludeProps]: IncludedPropVisibility<IncludeProps[Key]> extends Visibility ? Passthrough extends 'render' ? Key : Passthrough extends IncludedPropPassthrough<IncludeProps[Key]> ? Key : never : never }[keyof IncludeProps];
122
78
  type SelectedIncludedProps<Props extends InPropsObject, IncludeProps extends IncludedProps<Props>, Visibility extends InternalPropsType, Passthrough extends IncludedPropSource | 'render' = 'render'> = Pick<Props, PropsKeys<Props, GetPropsKey<IncludeProps, Visibility, Passthrough>>>;
123
79
  type OptionalPropDefinition<Definition> = Definition extends {
@@ -1 +1 @@
1
- {"version":3,"file":"props.d.cts","names":[],"sources":["../src/props.ts"],"mappings":";;;;;;AAsBA;;;;;AAAA,KAAY,kBAAA,4CACV,KAAA,EAAO,WAAA,EACP,OAAA,EAAS,OAAA,KACN,MAAA;;;;;;;;;;;;UAaY,qBAAA,SACP,aAAA,iBACM,KAAA,SAAc,aAAA,GAAgB,YAAA,CAAa,KAAA;EAIzD,KAAA,GAAQ,KAAA;EACR,MAAA,EAAQ,kBAAA,CAAmB,WAAA,EAAa,OAAA,EAAS,MAAA;AAAA;AAAA,KAGvC,cAAA,mBACQ,aAAA,CAAc,kBAAA;EAGhC,IAAA,EAAM,kBAAA,CAAmB,IAAA;EACzB,QAAA,EAAU,eAAA,CAAgB,YAAA,CAAa,SAAA;AAAA;AAAA,KAE7B,eAAA,mBACQ,aAAA,CAAc,kBAAA,2BAEhC,KAAA,EAAO,IAAA,CAAK,cAAA,CAAe,SAAA,EAAW,IAAA,OACnC,aAAA;AAAA,KACO,iBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,aAAA,GAAgB,eAAA,CAAgB,SAAA;AAAA,KACxB,eAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA,KAChC,OAAA,SAAgB,eAAA,CAAgB,SAAA,IAAa,UAAA,CAAW,OAAA,IAAW,OAAA;AAAA,KAC3D,mBAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA,uBACd,oBAAA,IAClB,eAAA,CAAgB,SAAA,EAAW,OAAA,UAAiB,aAAA,GAC5C,eAAA,CAAgB,SAAA,EAAW,OAAA,IAAW,gBAAA,CAAiB,WAAA;AAAA,KAE/C,eAAA;;;;;KAKP,SAAA,iBAA0B,eAAA,WAA0B,OAAO;AAAA,KAC3D,iBAAA,GAAoB,SAAS;AAAA,KAC7B,kBAAA;AAAA,KACA,uBAAA;EA1CyC;;;;EAgDxC,QAAA;AAAA;EA3CJ;;;;;;AAAuD;AAGzD;EAmDM,UAAU;AAAA;AAAA,KAEX,kBAAA;EApDe;;;;;;EA4Dd,WAAA,EAAa,kBAAA;AAAA;EA5DjB;;;;;;;;;;EAyEI,WAAA,EAAa,kBAAkB;AAAA;AArEa;AAElD;;AAFkD,KA2EtC,oBAAA,GAAuB,uBAAA,GAA0B,kBAAkB;AAAA,KAE1E,gBAAA,GAAmB,SAAA,GAAY,oBAAoB;;;;KAI5C,aAAA,mCACE,CAAA,aAAc,gBAAgB;AAAA,KAGvC,SAAA,eAAwB,aAAA,OAAoB,CAAA,SAAU,KAAA;AAAA,KAC/C,sBAAA,UAAgC,KAAA;EAAgB,QAAA;AAAA,IACxD,KAAA,sDAGA,KAAA;EAAgB,UAAA;AAAA,IAChB,KAAA,iBACA,KAAA,0CAEA,KAAA;AAAA,KAGQ,wBAAA,UAAkC,KAAA;EAC5C,WAAA,EAAa,kBAAA;AAAA,IAEX,KAAA,kBACA,KAAA;EAAgB,WAAA,EAAa,kBAAA;AAAA,IAC7B,KAAA;;;AAhGc;KAqGN,8BAAA,UAAwC,KAAA;EAC9C,QAAA;AAAA;EACA,WAAA,EAAa,kBAAA;AAAA;EAEb,UAAA,EAAY,sBAAA,CAAuB,KAAA;EACnC,WAAA,EAAa,wBAAA,CAAyB,KAAA;AAAA,IAExC,KAAA;AAAA,KAEQ,uBAAA,UAAiC,KAAA;EACvC,QAAA;AAAA;EACA,WAAA,EAAa,kBAAA;AAAA,IACf,wBAAA,CAAyB,KAAA,wBACvB,sBAAA,CAAuB,KAAA,8DAGvB,wBAAA,CAAyB,KAAA,IAC3B,KAAA;EACE,UAAA;EACA,WAAA,EAAa,kBAAA;AAAA,IAEf,KAAA,sCACE,KAAA,2EAGA,KAAA,kBACF,KAAA,wCAEA,KAAA;AAAA,KAIC,WAAA,iDAEgB,iBAAA,sBACC,kBAAA,0CAEN,YAAA,GAAe,sBAAA,CAC3B,YAAA,CAAa,GAAA,WACL,UAAA,GACN,WAAA,oBACE,GAAA,GACA,WAAA,SAAoB,uBAAA,CAAwB,YAAA,CAAa,GAAA,KACzD,GAAA,yBAGA,YAAA;AAAA,KACH,qBAAA,eACW,aAAA,uBACO,aAAA,CAAc,KAAA,sBAChB,iBAAA,sBACC,kBAAA,0BAClB,IAAA,CACF,KAAA,EACA,SAAA,CAAU,KAAA,EAAO,WAAA,CAAY,YAAA,EAAc,UAAA,EAAY,WAAA;AAAA,KAGpD,sBAAA,eAAqC,UAAA;EACxC,QAAA;AAAA,IAEE,kBAAA,GACA,UAAU;;KAGF,gCAAA,eACI,aAAA,uBACO,aAAA,CAAc,KAAA,KACjC,qBAAA,CAAsB,KAAA,EAAO,YAAA,6CACjB,qBAAA,CACZ,KAAA,EACA,YAAA,6BAGE,sBAAA,CACF,qBAAA,CAAsB,KAAA,EAAO,YAAA,2BAAuC,GAAA;AAAA,KAI5D,qBAAA,eACI,aAAA,uBACO,aAAA,CAAc,KAAA,KACjC,kBAAA,CAAmB,qBAAA,CAAsB,KAAA,EAAO,YAAA,iBAClD,OAAA,CACE,kBAAA,CAAmB,qBAAA,CAAsB,KAAA,EAAO,YAAA;AAAA,KAGxC,2BAAA,eACI,aAAA,uBACO,aAAA,CAAc,KAAA,KACjC,kBAAA,CACF,qBAAA,CAAsB,KAAA,EAAO,YAAA,2BAE7B,OAAA,CACE,kBAAA,CACE,qBAAA,CAAsB,KAAA,EAAO,YAAA;AAAA,KAIvB,8BAAA,eACI,aAAA,uBACO,aAAA,CAAc,KAAA,KACjC,kBAAA,CACF,qBAAA,CAAsB,KAAA,EAAO,YAAA,8BAE7B,OAAA,CACE,kBAAA,CACE,qBAAA,CAAsB,KAAA,EAAO,YAAA;;;;;KAQvB,8BAAA,eACI,aAAA,uBACO,aAAA,CAAc,KAAA,KACjC,2BAAA,CACF,qBAAA,CAAsB,KAAA,EAAO,YAAA,iBAE7B,OAAA,CACE,2BAAA,CACE,qBAAA,CAAsB,KAAA,EAAO,YAAA;AAAA,KAGvB,iBAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA,uBACd,oBAAA,4BACC,aAAA,CACnB,mBAAA,CAAoB,SAAA,EAAW,OAAA,EAAS,WAAA,6BAEtB,aAAA,SAClB,IAAA,CACF,YAAA,CAAa,WAAA,IACX,qBAAA,CACE,mBAAA,CAAoB,SAAA,EAAW,OAAA,EAAS,WAAA,GACxC,YAAA"}
1
+ {"version":3,"file":"props.d.cts","names":[],"sources":["../src/props.ts"],"mappings":"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"}
package/dist/props.d.mts CHANGED
@@ -41,48 +41,11 @@ type RequiredVariant = true | 'required';
41
41
  type PropsType<Variant extends RequiredVariant = true> = Variant | 'optional';
42
42
  type InternalPropsType = PropsType<'required'>;
43
43
  type IncludedPropSource = 'component' | 'config';
44
- type IncludedPropRequirement = {
45
- /**
46
- * Whether the prop must be supplied. When both names are present,
47
- * `required` takes precedence over the deprecated `visibility` setting.
48
- */
44
+ /** Controls whether an included prop is required and where it is supplied. */
45
+ type IncludedPropBehavior = {
49
46
  required: boolean;
50
- } | {
51
- /**
52
- * Whether the prop must be supplied (`'required'`) or may be omitted
53
- * (`'optional'`). The `required` setting takes precedence when both are present.
54
- *
55
- * @deprecated Use `required: true` instead of `visibility: 'required'`, or
56
- * `required: false` instead of `visibility: 'optional'`.
57
- * This property will be removed in the next major version.
58
- */
59
- visibility: 'optional' | 'required';
60
- };
61
- type IncludedPropSupply = {
62
- /**
63
- * Where the prop is supplied: at component render time (`'component'`)
64
- * or through layout creation options (`'config'`). Optional component props
65
- * also accept configuration-time defaults. This setting takes precedence
66
- * over the deprecated `passthrough` setting.
67
- */
68
47
  suppliedVia: IncludedPropSource;
69
- } | {
70
- /**
71
- * Where the prop is supplied: at component render time (`'component'`)
72
- * or through layout creation options (`'config'`). Optional component props
73
- * also accept configuration-time defaults. The `suppliedVia` setting takes
74
- * precedence when both names are present.
75
- *
76
- * @deprecated Use `suppliedVia: 'component'` instead of
77
- * `passthrough: 'component'`, or `suppliedVia: 'config'` instead of
78
- * `passthrough: 'config'`. This property will be removed in the next major version.
79
- */
80
- passthrough: IncludedPropSource;
81
48
  };
82
- /**
83
- * Controls where an included layout prop is supplied and whether it is required there.
84
- */
85
- type IncludedPropBehavior = IncludedPropRequirement & IncludedPropSupply;
86
49
  type IncludedPropType = PropsType | IncludedPropBehavior;
87
50
  /**
88
51
  * A map of props to include in the layout.
@@ -91,16 +54,12 @@ type IncludedProps<T extends object> = { [K in keyof T & string]?: IncludedPropT
91
54
  type PropsKeys<Props extends InPropsObject, T> = T & keyof Props;
92
55
  type IncludedPropVisibility<Value> = Value extends {
93
56
  required: boolean;
94
- } ? Value['required'] extends true ? 'required' : 'optional' : Value extends {
95
- visibility: 'required' | 'optional';
96
- } ? Value['visibility'] : Value extends true | 'required' ? 'required' : Value extends 'optional' ? 'optional' : never;
57
+ } ? Value['required'] extends true ? 'required' : 'optional' : Value extends true | 'required' ? 'required' : Value extends 'optional' ? 'optional' : never;
97
58
  type IncludedPropSupplySource<Value> = Value extends {
98
59
  suppliedVia: IncludedPropSource;
99
- } ? Value['suppliedVia'] : Value extends {
100
- passthrough: IncludedPropSource;
101
- } ? Value['passthrough'] : never;
60
+ } ? Value['suppliedVia'] : never;
102
61
  /**
103
- * Canonical shape used internally for either spelling of an include behavior.
62
+ * Internal representation of the supported include behavior.
104
63
  */
105
64
  type NormalizedIncludedPropBehavior<Value> = Value extends {
106
65
  required: boolean;
@@ -114,10 +73,7 @@ type IncludedPropPassthrough<Value> = Value extends {
114
73
  required: boolean;
115
74
  } | {
116
75
  suppliedVia: IncludedPropSource;
117
- } ? IncludedPropSupplySource<Value> extends 'component' ? IncludedPropVisibility<Value> extends 'optional' ? 'component' | 'config' : 'component' : IncludedPropSupplySource<Value> : Value extends {
118
- visibility: 'required' | 'optional';
119
- passthrough: IncludedPropSource;
120
- } ? Value['passthrough'] extends 'component' ? Value['visibility'] extends 'optional' ? 'component' | 'config' : 'component' : Value['passthrough'] : Value extends true | 'required' ? 'config' : Value extends 'optional' ? 'component' | 'config' : never;
76
+ } ? IncludedPropSupplySource<Value> extends 'component' ? IncludedPropVisibility<Value> extends 'optional' ? 'component' | 'config' : 'component' : IncludedPropSupplySource<Value> : Value extends true | 'required' ? 'config' : Value extends 'optional' ? 'component' | 'config' : never;
121
77
  type GetPropsKey<IncludeProps extends object, Visibility extends InternalPropsType, Passthrough extends IncludedPropSource | 'render' = 'render'> = { [Key in keyof IncludeProps]: IncludedPropVisibility<IncludeProps[Key]> extends Visibility ? Passthrough extends 'render' ? Key : Passthrough extends IncludedPropPassthrough<IncludeProps[Key]> ? Key : never : never }[keyof IncludeProps];
122
78
  type SelectedIncludedProps<Props extends InPropsObject, IncludeProps extends IncludedProps<Props>, Visibility extends InternalPropsType, Passthrough extends IncludedPropSource | 'render' = 'render'> = Pick<Props, PropsKeys<Props, GetPropsKey<IncludeProps, Visibility, Passthrough>>>;
123
79
  type OptionalPropDefinition<Definition> = Definition extends {
@@ -1 +1 @@
1
- {"version":3,"file":"props.d.mts","names":[],"sources":["../src/props.ts"],"mappings":"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"}
1
+ {"version":3,"file":"props.d.mts","names":[],"sources":["../src/props.ts"],"mappings":"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"}
package/dist/props.mjs CHANGED
@@ -1,8 +1,11 @@
1
+ import { LayoutConfigurationError } from "./errors/layout-configuration-error.mjs";
2
+
1
3
  //#region src/props.ts
2
4
  function getIncludedPropBehavior(value) {
3
5
  if (value === null || typeof value !== "object") return null;
4
- const required = "required" in value && typeof value.required === "boolean" ? value.required : "visibility" in value ? value.visibility === "required" : void 0;
5
- const suppliedVia = "suppliedVia" in value ? value.suppliedVia : "passthrough" in value ? value.passthrough : void 0;
6
+ if ("visibility" in value || "passthrough" in value) throw new LayoutConfigurationError("Include properties visibility and passthrough were removed; use required and suppliedVia.");
7
+ const required = "required" in value && typeof value.required === "boolean" ? value.required : void 0;
8
+ const suppliedVia = "suppliedVia" in value ? value.suppliedVia : void 0;
6
9
  if (required === void 0 || suppliedVia !== "component" && suppliedVia !== "config") return null;
7
10
  return {
8
11
  visibility: required ? "required" : "optional",
@@ -1 +1 @@
1
- {"version":3,"file":"props.mjs","names":[],"sources":["../src/props.ts"],"sourcesContent":["import type {\n ComposableComponents,\n MergePresetProps,\n} from '@jfdevelops/react-layout-composables';\nimport type { InPropsObject } from '@jfdevelops/react-layout-composables';\nimport {\n EnumWrappedProp,\n LiteralWrappedProp,\n ResolveLayoutProps,\n ResolveLayoutPropsAsDefined,\n ResolveProps,\n} from '@jfdevelops/react-layout-validator';\nimport { ResourceDefinition, ResourceEnum } from './resource';\nimport { Show } from './utils';\n\nexport type { InPropsObject };\n\n/**\n * Two-argument `render(props, context)` used by createComponent and scoped\n * resource components. `Context` is sibling components (scoped) or the\n * resource render context (top-level).\n */\nexport type PropsContextRender<RenderProps, Context, Result = unknown> = (\n props: RenderProps,\n context: Context\n) => Result;\n\n/**\n * Shared `{ props?, render }` shape used by createComponent, scoped\n * components, and anywhere else a value declares props and a two-arg render.\n *\n * @typeParam Props - Declared on the entry (`props`). Often an\n * {@link InPropsObject}, or a layout include/custom bag.\n * @typeParam RenderProps - First argument to `render` (defaults to\n * {@link ResolveProps}<Props> when Props is an {@link InPropsObject})\n * @typeParam Result - `render` return type\n * @typeParam Context - Second argument to `render`\n */\nexport interface PropsRenderDefinition<\n Props = InPropsObject,\n RenderProps = Props extends InPropsObject ? ResolveProps<Props> : unknown,\n Result = unknown,\n Context = unknown\n> {\n props?: Props;\n render: PropsContextRender<RenderProps, Context, Result>;\n}\n\nexport type InPropsOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Name extends string\n> = {\n name: LiteralWrappedProp<Name, 'string', 'required'>;\n resource: EnumWrappedProp<ResourceEnum<Resources>, 'string', 'required'>;\n};\nexport type InPropsFunction<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = <Name extends string>(\n props: Show<InPropsOptions<Resources, Name>>\n) => InPropsObject;\nexport type InPropsDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = InPropsObject | InPropsFunction<Resources>;\nexport type InferredInProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>\n> = Options extends InPropsFunction<Resources> ? ReturnType<Options> : Options;\nexport type MergedLayoutInProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents\n> = InferredInProps<Resources, Options> extends InPropsObject\n ? InferredInProps<Resources, Options> & MergePresetProps<Composables>\n : never;\nexport type RequiredVariant = true | 'required';\n/**\n * @typeParam RequiredVariant How the required props are selected. In application code,\n * it will always be `true`, but internally we need to support `'required'` as well.\n */\ntype PropsType<Variant extends RequiredVariant = true> = Variant | 'optional';\ntype InternalPropsType = PropsType<'required'>;\ntype IncludedPropSource = 'component' | 'config';\ntype IncludedPropRequirement =\n | {\n /**\n * Whether the prop must be supplied. When both names are present,\n * `required` takes precedence over the deprecated `visibility` setting.\n */\n required: boolean;\n }\n | {\n /**\n * Whether the prop must be supplied (`'required'`) or may be omitted\n * (`'optional'`). The `required` setting takes precedence when both are present.\n *\n * @deprecated Use `required: true` instead of `visibility: 'required'`, or\n * `required: false` instead of `visibility: 'optional'`.\n * This property will be removed in the next major version.\n */\n visibility: 'optional' | 'required';\n };\ntype IncludedPropSupply =\n | {\n /**\n * Where the prop is supplied: at component render time (`'component'`)\n * or through layout creation options (`'config'`). Optional component props\n * also accept configuration-time defaults. This setting takes precedence\n * over the deprecated `passthrough` setting.\n */\n suppliedVia: IncludedPropSource;\n }\n | {\n /**\n * Where the prop is supplied: at component render time (`'component'`)\n * or through layout creation options (`'config'`). Optional component props\n * also accept configuration-time defaults. The `suppliedVia` setting takes\n * precedence when both names are present.\n *\n * @deprecated Use `suppliedVia: 'component'` instead of\n * `passthrough: 'component'`, or `suppliedVia: 'config'` instead of\n * `passthrough: 'config'`. This property will be removed in the next major version.\n */\n passthrough: IncludedPropSource;\n };\n\n/**\n * Controls where an included layout prop is supplied and whether it is required there.\n */\nexport type IncludedPropBehavior = IncludedPropRequirement & IncludedPropSupply;\n\ntype IncludedPropType = PropsType | IncludedPropBehavior;\n/**\n * A map of props to include in the layout.\n */\nexport type IncludedProps<T extends object> = {\n [K in keyof T & string]?: IncludedPropType;\n};\n\ntype PropsKeys<Props extends InPropsObject, T> = T & keyof Props;\nexport type IncludedPropVisibility<Value> = Value extends { required: boolean }\n ? Value['required'] extends true\n ? 'required'\n : 'optional'\n : Value extends { visibility: 'required' | 'optional' }\n ? Value['visibility']\n : Value extends true | 'required'\n ? 'required'\n : Value extends 'optional'\n ? 'optional'\n : never;\nexport type IncludedPropSupplySource<Value> = Value extends {\n suppliedVia: IncludedPropSource;\n}\n ? Value['suppliedVia']\n : Value extends { passthrough: IncludedPropSource }\n ? Value['passthrough']\n : never;\n/**\n * Canonical shape used internally for either spelling of an include behavior.\n */\nexport type NormalizedIncludedPropBehavior<Value> = Value extends\n | { required: boolean }\n | { suppliedVia: IncludedPropSource }\n ? {\n visibility: IncludedPropVisibility<Value>;\n passthrough: IncludedPropSupplySource<Value>;\n }\n : Value;\n\nexport type IncludedPropPassthrough<Value> = Value extends\n | { required: boolean }\n | { suppliedVia: IncludedPropSource }\n ? IncludedPropSupplySource<Value> extends 'component'\n ? IncludedPropVisibility<Value> extends 'optional'\n ? 'component' | 'config'\n : 'component'\n : IncludedPropSupplySource<Value>\n : Value extends {\n visibility: 'required' | 'optional';\n passthrough: IncludedPropSource;\n }\n ? Value['passthrough'] extends 'component'\n ? Value['visibility'] extends 'optional'\n ? 'component' | 'config'\n : 'component'\n : Value['passthrough']\n : Value extends true | 'required'\n ? 'config'\n : Value extends 'optional'\n ? 'component' | 'config'\n : never;\n\ntype GetPropsKey<\n IncludeProps extends object,\n Visibility extends InternalPropsType,\n Passthrough extends IncludedPropSource | 'render' = 'render'\n> = {\n [Key in keyof IncludeProps]: IncludedPropVisibility<\n IncludeProps[Key]\n > extends Visibility\n ? Passthrough extends 'render'\n ? Key\n : Passthrough extends IncludedPropPassthrough<IncludeProps[Key]>\n ? Key\n : never\n : never;\n}[keyof IncludeProps];\ntype SelectedIncludedProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n Visibility extends InternalPropsType,\n Passthrough extends IncludedPropSource | 'render' = 'render'\n> = Pick<\n Props,\n PropsKeys<Props, GetPropsKey<IncludeProps, Visibility, Passthrough>>\n>;\n\ntype OptionalPropDefinition<Definition> = Definition extends {\n optional(): infer OptionalDefinition;\n}\n ? OptionalDefinition\n : Definition;\n\n/** Raw validator definitions accepted by a generated component call. */\nexport type IncludedComponentPropDefinitions<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>\n> = SelectedIncludedProps<Props, IncludeProps, 'required', 'component'> & {\n [Key in keyof SelectedIncludedProps<\n Props,\n IncludeProps,\n 'optional',\n 'component'\n >]: OptionalPropDefinition<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'component'>[Key]\n >;\n};\n\nexport type ResolvedIncludedProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>\n> = ResolveLayoutProps<SelectedIncludedProps<Props, IncludeProps, 'required'>> &\n Partial<\n ResolveLayoutProps<SelectedIncludedProps<Props, IncludeProps, 'optional'>>\n >;\n\nexport type ResolvedIncludedConfigProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>\n> = ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'required', 'config'>\n> &\n Partial<\n ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'config'>\n >\n >;\n\nexport type ResolvedIncludedComponentProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>\n> = ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'required', 'component'>\n> &\n Partial<\n ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'component'>\n >\n >;\n\n/**\n * Like {@link ResolvedIncludedProps}, but keeps included prop keys exactly as\n * declared (no `JSX.Element` capitalization).\n */\nexport type ResolvedIncludedPropsAsDefined<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>\n> = ResolveLayoutPropsAsDefined<\n SelectedIncludedProps<Props, IncludeProps, 'required'>\n> &\n Partial<\n ResolveLayoutPropsAsDefined<\n SelectedIncludedProps<Props, IncludeProps, 'optional'>\n >\n >;\nexport type LayoutRenderProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>\n > = {},\n CustomProps extends InPropsObject = {}\n> = Show<\n ResolveProps<CustomProps> &\n ResolvedIncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>,\n IncludeProps\n >\n>;\n\nexport function getIncludedPropBehavior(value: unknown): {\n visibility: 'required' | 'optional';\n passthrough: 'component' | 'config';\n} | null {\n if (value === null || typeof value !== 'object') {\n return null;\n }\n\n const required =\n 'required' in value && typeof value.required === 'boolean'\n ? value.required\n : 'visibility' in value\n ? value.visibility === 'required'\n : undefined;\n const suppliedVia =\n 'suppliedVia' in value\n ? value.suppliedVia\n : 'passthrough' in value\n ? value.passthrough\n : undefined;\n\n if (\n required === undefined ||\n (suppliedVia !== 'component' && suppliedVia !== 'config')\n ) {\n return null;\n }\n\n return {\n visibility: required ? 'required' : 'optional',\n passthrough: suppliedVia,\n };\n}\n"],"mappings":";AA6SA,SAAgB,wBAAwB,OAG/B;CACP,IAAI,UAAU,QAAQ,OAAO,UAAU,UACrC,OAAO;CAGT,MAAM,WACJ,cAAc,SAAS,OAAO,MAAM,aAAa,YAC7C,MAAM,WACN,gBAAgB,QAChB,MAAM,eAAe,aACrB;CACN,MAAM,cACJ,iBAAiB,QACb,MAAM,cACN,iBAAiB,QACjB,MAAM,cACN;CAEN,IACE,aAAa,UACZ,gBAAgB,eAAe,gBAAgB,UAEhD,OAAO;CAGT,OAAO;EACL,YAAY,WAAW,aAAa;EACpC,aAAa;CACf;AACF"}
1
+ {"version":3,"file":"props.mjs","names":[],"sources":["../src/props.ts"],"sourcesContent":["import { LayoutConfigurationError } from './errors';\nimport type {\n ComposableComponents,\n MergePresetProps,\n} from '@jfdevelops/react-layout-composables';\nimport type { InPropsObject } from '@jfdevelops/react-layout-composables';\nimport {\n EnumWrappedProp,\n LiteralWrappedProp,\n ResolveLayoutProps,\n ResolveLayoutPropsAsDefined,\n ResolveProps,\n} from '@jfdevelops/react-layout-validator';\nimport { ResourceDefinition, ResourceEnum } from './resource';\nimport { Show } from './utils';\n\nexport type { InPropsObject };\n\n/**\n * Two-argument `render(props, context)` used by createComponent and scoped\n * resource components. `Context` is sibling components (scoped) or the\n * resource render context (top-level).\n */\nexport type PropsContextRender<RenderProps, Context, Result = unknown> = (\n props: RenderProps,\n context: Context,\n) => Result;\n\n/**\n * Shared `{ props?, render }` shape used by createComponent, scoped\n * components, and anywhere else a value declares props and a two-arg render.\n *\n * @typeParam Props - Declared on the entry (`props`). Often an\n * {@link InPropsObject}, or a layout include/custom bag.\n * @typeParam RenderProps - First argument to `render` (defaults to\n * {@link ResolveProps}<Props> when Props is an {@link InPropsObject})\n * @typeParam Result - `render` return type\n * @typeParam Context - Second argument to `render`\n */\nexport interface PropsRenderDefinition<\n Props = InPropsObject,\n RenderProps = Props extends InPropsObject ? ResolveProps<Props> : unknown,\n Result = unknown,\n Context = unknown,\n> {\n props?: Props;\n render: PropsContextRender<RenderProps, Context, Result>;\n}\n\nexport type InPropsOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Name extends string,\n> = {\n name: LiteralWrappedProp<Name, 'string', 'required'>;\n resource: EnumWrappedProp<ResourceEnum<Resources>, 'string', 'required'>;\n};\nexport type InPropsFunction<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = <Name extends string>(\n props: Show<InPropsOptions<Resources, Name>>,\n) => InPropsObject;\nexport type InPropsDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = InPropsObject | InPropsFunction<Resources>;\nexport type InferredInProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = Options extends InPropsFunction<Resources> ? ReturnType<Options> : Options;\nexport type MergedLayoutInProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n> =\n InferredInProps<Resources, Options> extends InPropsObject\n ? InferredInProps<Resources, Options> & MergePresetProps<Composables>\n : never;\nexport type RequiredVariant = true | 'required';\n/**\n * @typeParam RequiredVariant How the required props are selected. In application code,\n * it will always be `true`, but internally we need to support `'required'` as well.\n */\ntype PropsType<Variant extends RequiredVariant = true> = Variant | 'optional';\ntype InternalPropsType = PropsType<'required'>;\ntype IncludedPropSource = 'component' | 'config';\n/** Controls whether an included prop is required and where it is supplied. */\nexport type IncludedPropBehavior = {\n required: boolean;\n suppliedVia: IncludedPropSource;\n};\n\ntype IncludedPropType = PropsType | IncludedPropBehavior;\n/**\n * A map of props to include in the layout.\n */\nexport type IncludedProps<T extends object> = {\n [K in keyof T & string]?: IncludedPropType;\n};\n\ntype PropsKeys<Props extends InPropsObject, T> = T & keyof Props;\nexport type IncludedPropVisibility<Value> = Value extends { required: boolean }\n ? Value['required'] extends true\n ? 'required'\n : 'optional'\n : Value extends true | 'required'\n ? 'required'\n : Value extends 'optional'\n ? 'optional'\n : never;\nexport type IncludedPropSupplySource<Value> = Value extends {\n suppliedVia: IncludedPropSource;\n}\n ? Value['suppliedVia']\n : never;\n/**\n * Internal representation of the supported include behavior.\n */\nexport type NormalizedIncludedPropBehavior<Value> = Value extends\n | { required: boolean }\n | { suppliedVia: IncludedPropSource }\n ? {\n visibility: IncludedPropVisibility<Value>;\n passthrough: IncludedPropSupplySource<Value>;\n }\n : Value;\n\nexport type IncludedPropPassthrough<Value> = Value extends\n | { required: boolean }\n | { suppliedVia: IncludedPropSource }\n ? IncludedPropSupplySource<Value> extends 'component'\n ? IncludedPropVisibility<Value> extends 'optional'\n ? 'component' | 'config'\n : 'component'\n : IncludedPropSupplySource<Value>\n : Value extends true | 'required'\n ? 'config'\n : Value extends 'optional'\n ? 'component' | 'config'\n : never;\n\ntype GetPropsKey<\n IncludeProps extends object,\n Visibility extends InternalPropsType,\n Passthrough extends IncludedPropSource | 'render' = 'render',\n> = {\n [Key in keyof IncludeProps]: IncludedPropVisibility<\n IncludeProps[Key]\n > extends Visibility\n ? Passthrough extends 'render'\n ? Key\n : Passthrough extends IncludedPropPassthrough<IncludeProps[Key]>\n ? Key\n : never\n : never;\n}[keyof IncludeProps];\ntype SelectedIncludedProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n Visibility extends InternalPropsType,\n Passthrough extends IncludedPropSource | 'render' = 'render',\n> = Pick<\n Props,\n PropsKeys<Props, GetPropsKey<IncludeProps, Visibility, Passthrough>>\n>;\n\ntype OptionalPropDefinition<Definition> = Definition extends {\n optional(): infer OptionalDefinition;\n}\n ? OptionalDefinition\n : Definition;\n\n/** Raw validator definitions accepted by a generated component call. */\nexport type IncludedComponentPropDefinitions<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n> = SelectedIncludedProps<Props, IncludeProps, 'required', 'component'> & {\n [Key in keyof SelectedIncludedProps<\n Props,\n IncludeProps,\n 'optional',\n 'component'\n >]: OptionalPropDefinition<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'component'>[Key]\n >;\n};\n\nexport type ResolvedIncludedProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n> = ResolveLayoutProps<SelectedIncludedProps<Props, IncludeProps, 'required'>> &\n Partial<\n ResolveLayoutProps<SelectedIncludedProps<Props, IncludeProps, 'optional'>>\n >;\n\nexport type ResolvedIncludedConfigProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n> = ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'required', 'config'>\n> &\n Partial<\n ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'config'>\n >\n >;\n\nexport type ResolvedIncludedComponentProps<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n> = ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'required', 'component'>\n> &\n Partial<\n ResolveLayoutProps<\n SelectedIncludedProps<Props, IncludeProps, 'optional', 'component'>\n >\n >;\n\n/**\n * Like {@link ResolvedIncludedProps}, but keeps included prop keys exactly as\n * declared (no `JSX.Element` capitalization).\n */\nexport type ResolvedIncludedPropsAsDefined<\n Props extends InPropsObject,\n IncludeProps extends IncludedProps<Props>,\n> = ResolveLayoutPropsAsDefined<\n SelectedIncludedProps<Props, IncludeProps, 'required'>\n> &\n Partial<\n ResolveLayoutPropsAsDefined<\n SelectedIncludedProps<Props, IncludeProps, 'optional'>\n >\n >;\nexport type LayoutRenderProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>\n > = {},\n CustomProps extends InPropsObject = {},\n> = Show<\n ResolveProps<CustomProps> &\n ResolvedIncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>,\n IncludeProps\n >\n>;\n\nexport function getIncludedPropBehavior(value: unknown): {\n visibility: 'required' | 'optional';\n passthrough: 'component' | 'config';\n} | null {\n if (value === null || typeof value !== 'object') {\n return null;\n }\n\n if ('visibility' in value || 'passthrough' in value) {\n throw new LayoutConfigurationError(\n 'Include properties visibility and passthrough were removed; use required and suppliedVia.',\n );\n }\n\n const required =\n 'required' in value && typeof value.required === 'boolean'\n ? value.required\n : undefined;\n const suppliedVia = 'suppliedVia' in value ? value.suppliedVia : undefined;\n\n if (\n required === undefined ||\n (suppliedVia !== 'component' && suppliedVia !== 'config')\n ) {\n return null;\n }\n\n return {\n visibility: required ? 'required' : 'optional',\n passthrough: suppliedVia,\n };\n}\n"],"mappings":";;;AAwPA,SAAgB,wBAAwB,OAG/B;CACP,IAAI,UAAU,QAAQ,OAAO,UAAU,UACrC,OAAO;CAGT,IAAI,gBAAgB,SAAS,iBAAiB,OAC5C,MAAM,IAAI,yBACR,2FACF;CAGF,MAAM,WACJ,cAAc,SAAS,OAAO,MAAM,aAAa,YAC7C,MAAM,WACN;CACN,MAAM,cAAc,iBAAiB,QAAQ,MAAM,cAAc;CAEjE,IACE,aAAa,UACZ,gBAAgB,eAAe,gBAAgB,UAEhD,OAAO;CAGT,OAAO;EACL,YAAY,WAAW,aAAa;EACpC,aAAa;CACf;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"resource.cjs","names":["LayoutConfigurationError"],"sources":["../src/resource.ts"],"sourcesContent":["import { ReactNode } from 'react';\nimport { NonEmptyReadonlyArray } from '@jfdevelops/react-layout-validator';\nimport { MergeIntersection, UnionToIntersection } from './utils';\nimport { LayoutConfigurationError } from './errors';\n\nexport type ResourceDefinition =\n | string\n | {\n value: string;\n subResources: ReadonlyArray<\n ResourceDefinition & {\n /**\n * Whether to allow any string as a sub resource.\n *\n * @default false\n */\n allowAnyString?: boolean;\n }\n >;\n };\n\n/**\n * A resource definition normalized to an object with a stable `value` key.\n * `subResources` is present only when it existed on the declared resource.\n */\nexport type NormalizedResourceDefinition<\n Resource extends ResourceDefinition = ResourceDefinition,\n> = Resource extends string\n ? { value: Resource }\n : Resource extends {\n value: infer Value extends string;\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? {\n value: Value;\n subResources: NormalizedResourceDefinitions<SubResources>;\n }\n : never;\n\n/**\n * A tuple of resource definitions with strings converted to `{ value }`\n * objects and nested sub-resources normalized recursively.\n */\nexport type NormalizedResourceDefinitions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = {\n readonly [Index in keyof Resources]: Resources[Index] extends ResourceDefinition\n ? NormalizedResourceDefinition<Resources[Index]>\n : never;\n};\n\nexport type ResourceTree = Record<\n string,\n {\n subResources: ResourceTree;\n }\n>;\n\nexport type NormalizeResource<Resource extends ResourceDefinition> =\n Resource extends string\n ? {\n [Key in Resource]: {\n subResources: {};\n };\n }\n : Resource extends {\n value: infer Value extends string;\n subResources: infer SubResources extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? {\n [Key in Value]: {\n subResources: NormalizeResources<SubResources>;\n };\n }\n : never;\n\nexport type NormalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = MergeIntersection<\n UnionToIntersection<NormalizeResource<Resources[number]>>\n>;\nexport type ResourceLayoutComponentProps = {\n children: ReactNode;\n};\n\nfunction normalizeResourceTree(resource: ResourceDefinition): ResourceTree {\n if (typeof resource === 'string') {\n return {\n [resource]: {\n subResources: {},\n },\n };\n }\n\n const { value, subResources } = resource;\n\n return {\n [value]: {\n subResources: normalizeResourcesTree(subResources),\n },\n };\n}\n\nfunction normalizeResourcesTree(\n resources: ReadonlyArray<ResourceDefinition>,\n): ResourceTree {\n const normalizedResources: ResourceTree = {};\n\n for (const resource of resources) {\n Object.assign(normalizedResources, normalizeResourceTree(resource));\n }\n\n return normalizedResources;\n}\n\nexport function normalizeResource(resource: ResourceDefinition): ResourceTree {\n return normalizeResourceTree(resource);\n}\n\nexport function normalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): NormalizeResources<Resources> {\n return normalizeResourcesTree(resources) as NormalizeResources<Resources>;\n}\n\n/**\n * Normalizes public resource declarations to a consistent object shape while\n * preserving tuple positions and string literals in the returned type.\n *\n * @param resources - Resource definitions in their original declared form.\n * @returns A recursively normalized tuple whose entries always have `value`.\n */\nexport function normalizeResourceDefinitions<\n const Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): NormalizedResourceDefinitions<Resources> {\n return resources.map((resource) => {\n if (typeof resource === 'string') {\n return { value: resource };\n }\n\n return {\n value: resource.value,\n subResources: normalizeResourceDefinitions(resource.subResources),\n };\n }) as NormalizedResourceDefinitions<Resources>;\n}\n\nexport function createIsValidResourceFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources) {\n return (value: unknown): value is LayoutResourceKey<Resources> => {\n return (\n typeof value === 'string' &&\n Object.keys(normalizeResources(resources)).includes(value)\n );\n };\n}\n\nexport type ResourceDefinitionValue<Resource extends ResourceDefinition> =\n Resource extends string\n ? Resource\n : Resource extends { value: infer Value extends string }\n ? Value\n : never;\n\ntype NestedResourcePath<\n Definition extends ResourceDefinition,\n Prefix extends string = '',\n> = Definition extends string\n ? Prefix extends ''\n ? Definition\n : `${Prefix}.${Definition}`\n : Definition extends {\n value: infer Value extends string;\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? | (Prefix extends '' ? Value : `${Prefix}.${Value}`)\n | NestedResourcePath<\n SubResources[number],\n Prefix extends '' ? Value : `${Prefix}.${Value}`\n >\n : never;\n\n/** Dot-delimited paths for every resource and nested sub-resource. */\nexport type ResourcePath<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = NestedResourcePath<Resources[number]>;\n\n/**\n * Top-level resource names declared in a `resources` array. Preserves string\n * literal unions for const resource definitions (unlike `keyof` on the\n * normalized resource tree, which tends to widen to `string` in hovers).\n */\nexport type LayoutResourceKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = ResourceDefinitionValue<Resources[number]>;\n\nexport type ResourceDefinitionForKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Key extends string,\n> = Extract<Resources[number], Key | { value: Key }>;\n\n/** `subResources` array declared on a layout resource. */\nexport type SubResourceDefinitionsFor<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? SubResources\n : readonly [];\n\ntype CanNestSubResourceParam<\n MaxDepth extends number,\n DepthAcc extends readonly unknown[],\n> = [...DepthAcc, unknown]['length'] extends MaxDepth ? false : true;\n\n/**\n * `subResource` route param: a slug at the current depth, or `{ value, subResource }`\n * when that slug has nested `subResources` in the layout tree and `MaxDepth` allows it.\n */\nexport type RecursiveSubResourceParam<\n Resources extends ReadonlyArray<ResourceDefinition>,\n SubDefs extends ReadonlyArray<ResourceDefinition>,\n MaxDepth extends number = 6,\n DepthAcc extends readonly unknown[] = readonly [],\n> =\n LayoutResourceKey<SubDefs> extends infer Key\n ? Key extends LayoutResourceKey<SubDefs>\n ? CanNestSubResourceParam<MaxDepth, DepthAcc> extends true\n ? ResourceDefinitionForKey<SubDefs, Key> extends {\n subResources: infer Nested extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? [LayoutResourceKey<Nested>] extends [never]\n ? Key\n :\n | Key\n | {\n value: Key;\n subResource: RecursiveSubResourceParam<\n Resources,\n Nested,\n MaxDepth,\n readonly [...DepthAcc, unknown]\n >;\n }\n : Key\n : Key\n : never\n : never;\n\n/** Recursive `subResource` values for a layout resource (full tree depth). */\nexport type SubResourceParamForResource<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> = [SubResourceDefinitionsFor<Resources, Resource>] extends [readonly []]\n ? never\n : RecursiveSubResourceParam<\n Resources,\n SubResourceDefinitionsFor<Resources, Resource>\n >;\n\nexport type GetSubResourceKeys<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? LayoutResourceKey<SubResources>\n : never;\nexport type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> =\n NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;\nexport function toResourceEnum<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: NormalizeResources<Resources>) {\n const keys = Object.keys(resources);\n\n if (keys.length === 0) {\n throw new LayoutConfigurationError('No resources provided');\n }\n\n return keys as unknown as ResourceEnum<Resources>;\n}\n"],"mappings":";;;AAsFA,SAAS,sBAAsB,UAA4C;CACzE,IAAI,OAAO,aAAa,UACtB,OAAO,GACJ,WAAW,EACV,cAAc,CAAC,EACjB,EACF;CAGF,MAAM,EAAE,OAAO,iBAAiB;CAEhC,OAAO,GACJ,QAAQ,EACP,cAAc,uBAAuB,YAAY,EACnD,EACF;AACF;AAEA,SAAS,uBACP,WACc;CACd,MAAM,sBAAoC,CAAC;CAE3C,KAAK,MAAM,YAAY,WACrB,OAAO,OAAO,qBAAqB,sBAAsB,QAAQ,CAAC;CAGpE,OAAO;AACT;AAEA,SAAgB,kBAAkB,UAA4C;CAC5E,OAAO,sBAAsB,QAAQ;AACvC;AAEA,SAAgB,mBAEd,WAAqD;CACrD,OAAO,uBAAuB,SAAS;AACzC;;;;;;;;AASA,SAAgB,6BAEd,WAAgE;CAChE,OAAO,UAAU,KAAK,aAAa;EACjC,IAAI,OAAO,aAAa,UACtB,OAAO,EAAE,OAAO,SAAS;EAG3B,OAAO;GACL,OAAO,SAAS;GAChB,cAAc,6BAA6B,SAAS,YAAY;EAClE;CACF,CAAC;AACH;AAEA,SAAgB,wBAEd,WAAsB;CACtB,QAAQ,UAA0D;EAChE,OACE,OAAO,UAAU,YACjB,OAAO,KAAK,mBAAmB,SAAS,CAAC,EAAE,SAAS,KAAK;CAE7D;AACF;AAuHA,SAAgB,eAEd,WAA0C;CAC1C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAClB,MAAM,IAAIA,4DAAyB,uBAAuB;CAG5D,OAAO;AACT"}
1
+ {"version":3,"file":"resource.cjs","names":["LayoutConfigurationError"],"sources":["../src/resource.ts"],"sourcesContent":["import { ReactNode } from 'react';\nimport { NonEmptyReadonlyArray } from '@jfdevelops/react-layout-validator';\nimport { MergeIntersection, UnionToIntersection } from './utils';\nimport { LayoutConfigurationError } from './errors';\n\nexport type ResourceDefinition =\n | string\n | {\n value: string;\n subResources: ReadonlyArray<\n ResourceDefinition & {\n /**\n * Whether to allow any string as a sub resource.\n *\n * @default false\n */\n allowAnyString?: boolean;\n }\n >;\n };\n\n/**\n * A resource definition normalized to an object with a stable `value` key.\n * `subResources` is present only when it existed on the declared resource.\n */\nexport type NormalizedResourceDefinition<\n Resource extends ResourceDefinition = ResourceDefinition,\n> = Resource extends string\n ? { value: Resource }\n : Resource extends {\n value: infer Value extends string;\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? {\n value: Value;\n subResources: NormalizedResourceDefinitions<SubResources>;\n }\n : never;\n\n/**\n * A tuple of resource definitions with strings converted to `{ value }`\n * objects and nested sub-resources normalized recursively.\n */\nexport type NormalizedResourceDefinitions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = {\n readonly [Index in keyof Resources]: Resources[Index] extends ResourceDefinition\n ? NormalizedResourceDefinition<Resources[Index]>\n : never;\n};\n\nexport type ResourceTree = Record<\n string,\n {\n subResources: ResourceTree;\n }\n>;\n\nexport type NormalizeResource<Resource extends ResourceDefinition> =\n Resource extends string\n ? {\n [Key in Resource]: {\n subResources: {};\n };\n }\n : Resource extends {\n value: infer Value extends string;\n subResources: infer SubResources extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? {\n [Key in Value]: {\n subResources: NormalizeResources<SubResources>;\n };\n }\n : never;\n\nexport type NormalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = MergeIntersection<\n UnionToIntersection<NormalizeResource<Resources[number]>>\n>;\nexport type ResourceLayoutComponentProps = {\n children: ReactNode;\n};\n\nfunction normalizeResourceTree(resource: ResourceDefinition): ResourceTree {\n if (typeof resource === 'string') {\n return {\n [resource]: {\n subResources: {},\n },\n };\n }\n\n const { value, subResources } = resource;\n\n return {\n [value]: {\n subResources: normalizeResourcesTree(subResources),\n },\n };\n}\n\nfunction normalizeResourcesTree(\n resources: ReadonlyArray<ResourceDefinition>,\n): ResourceTree {\n const normalizedResources: ResourceTree = {};\n\n for (const resource of resources) {\n Object.assign(normalizedResources, normalizeResourceTree(resource));\n }\n\n return normalizedResources;\n}\n\nexport function normalizeResource(resource: ResourceDefinition): ResourceTree {\n return normalizeResourceTree(resource);\n}\n\nexport function normalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): NormalizeResources<Resources> {\n return normalizeResourcesTree(resources) as NormalizeResources<Resources>;\n}\n\n/**\n * Normalizes public resource declarations to a consistent object shape while\n * preserving tuple positions and string literals in the returned type.\n *\n * @param resources - Resource definitions in their original declared form.\n * @returns A recursively normalized tuple whose entries always have `value`.\n */\nexport function normalizeResourceDefinitions<\n const Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): NormalizedResourceDefinitions<Resources> {\n return resources.map((resource) => {\n if (typeof resource === 'string') {\n return { value: resource };\n }\n\n return {\n value: resource.value,\n subResources: normalizeResourceDefinitions(resource.subResources),\n };\n }) as NormalizedResourceDefinitions<Resources>;\n}\n\nexport function createIsValidResourceFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources) {\n return (value: unknown): value is LayoutResourceKey<Resources> => {\n return (\n typeof value === 'string' &&\n Object.keys(normalizeResources(resources)).includes(value)\n );\n };\n}\n\nexport type ResourceDefinitionValue<Resource extends ResourceDefinition> =\n Resource extends string\n ? Resource\n : Resource extends { value: infer Value extends string }\n ? Value\n : never;\n\ntype NestedResourcePath<\n Definition extends ResourceDefinition,\n Prefix extends string = '',\n> = Definition extends string\n ? Prefix extends ''\n ? Definition\n : `${Prefix}.${Definition}`\n : Definition extends {\n value: infer Value extends string;\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? | (Prefix extends '' ? Value : `${Prefix}.${Value}`)\n | NestedResourcePath<\n SubResources[number],\n Prefix extends '' ? Value : `${Prefix}.${Value}`\n >\n : never;\n\n/** Dot-delimited paths for every resource and nested sub-resource. */\nexport type ResourcePath<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = ResourceDefinition extends Resources[number] ? string : NestedResourcePath<Resources[number]>;\n\n/**\n * Top-level resource names declared in a `resources` array. Preserves string\n * literal unions for const resource definitions (unlike `keyof` on the\n * normalized resource tree, which tends to widen to `string` in hovers).\n */\nexport type LayoutResourceKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = ResourceDefinitionValue<Resources[number]>;\n\nexport type ResourceDefinitionForKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Key extends string,\n> = Extract<Resources[number], Key | { value: Key }>;\n\n/** `subResources` array declared on a layout resource. */\nexport type SubResourceDefinitionsFor<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? SubResources\n : readonly [];\n\ntype CanNestSubResourceParam<\n MaxDepth extends number,\n DepthAcc extends readonly unknown[],\n> = [...DepthAcc, unknown]['length'] extends MaxDepth ? false : true;\n\n/**\n * `subResource` route param: a slug at the current depth, or `{ value, subResource }`\n * when that slug has nested `subResources` in the layout tree and `MaxDepth` allows it.\n */\nexport type RecursiveSubResourceParam<\n Resources extends ReadonlyArray<ResourceDefinition>,\n SubDefs extends ReadonlyArray<ResourceDefinition>,\n MaxDepth extends number = 6,\n DepthAcc extends readonly unknown[] = readonly [],\n> =\n LayoutResourceKey<SubDefs> extends infer Key\n ? Key extends LayoutResourceKey<SubDefs>\n ? CanNestSubResourceParam<MaxDepth, DepthAcc> extends true\n ? ResourceDefinitionForKey<SubDefs, Key> extends {\n subResources: infer Nested extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? [LayoutResourceKey<Nested>] extends [never]\n ? Key\n :\n | Key\n | {\n value: Key;\n subResource: RecursiveSubResourceParam<\n Resources,\n Nested,\n MaxDepth,\n readonly [...DepthAcc, unknown]\n >;\n }\n : Key\n : Key\n : never\n : never;\n\n/** Recursive `subResource` values for a layout resource (full tree depth). */\nexport type SubResourceParamForResource<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> = [SubResourceDefinitionsFor<Resources, Resource>] extends [readonly []]\n ? never\n : RecursiveSubResourceParam<\n Resources,\n SubResourceDefinitionsFor<Resources, Resource>\n >;\n\nexport type GetSubResourceKeys<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? LayoutResourceKey<SubResources>\n : never;\nexport type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> =\n NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;\nexport function toResourceEnum<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: NormalizeResources<Resources>) {\n const keys = Object.keys(resources);\n\n if (keys.length === 0) {\n throw new LayoutConfigurationError('No resources provided');\n }\n\n return keys as unknown as ResourceEnum<Resources>;\n}\n"],"mappings":";;;AAsFA,SAAS,sBAAsB,UAA4C;CACzE,IAAI,OAAO,aAAa,UACtB,OAAO,GACJ,WAAW,EACV,cAAc,CAAC,EACjB,EACF;CAGF,MAAM,EAAE,OAAO,iBAAiB;CAEhC,OAAO,GACJ,QAAQ,EACP,cAAc,uBAAuB,YAAY,EACnD,EACF;AACF;AAEA,SAAS,uBACP,WACc;CACd,MAAM,sBAAoC,CAAC;CAE3C,KAAK,MAAM,YAAY,WACrB,OAAO,OAAO,qBAAqB,sBAAsB,QAAQ,CAAC;CAGpE,OAAO;AACT;AAEA,SAAgB,kBAAkB,UAA4C;CAC5E,OAAO,sBAAsB,QAAQ;AACvC;AAEA,SAAgB,mBAEd,WAAqD;CACrD,OAAO,uBAAuB,SAAS;AACzC;;;;;;;;AASA,SAAgB,6BAEd,WAAgE;CAChE,OAAO,UAAU,KAAK,aAAa;EACjC,IAAI,OAAO,aAAa,UACtB,OAAO,EAAE,OAAO,SAAS;EAG3B,OAAO;GACL,OAAO,SAAS;GAChB,cAAc,6BAA6B,SAAS,YAAY;EAClE;CACF,CAAC;AACH;AAEA,SAAgB,wBAEd,WAAsB;CACtB,QAAQ,UAA0D;EAChE,OACE,OAAO,UAAU,YACjB,OAAO,KAAK,mBAAmB,SAAS,CAAC,EAAE,SAAS,KAAK;CAE7D;AACF;AAuHA,SAAgB,eAEd,WAA0C;CAC1C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAClB,MAAM,IAAIA,4DAAyB,uBAAuB;CAG5D,OAAO;AACT"}
@@ -65,7 +65,7 @@ type NestedResourcePath<Definition extends ResourceDefinition, Prefix extends st
65
65
  subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;
66
66
  } ? (Prefix extends '' ? Value : `${Prefix}.${Value}`) | NestedResourcePath<SubResources[number], Prefix extends '' ? Value : `${Prefix}.${Value}`> : never;
67
67
  /** Dot-delimited paths for every resource and nested sub-resource. */
68
- type ResourcePath<Resources extends ReadonlyArray<ResourceDefinition>> = NestedResourcePath<Resources[number]>;
68
+ type ResourcePath<Resources extends ReadonlyArray<ResourceDefinition>> = ResourceDefinition extends Resources[number] ? string : NestedResourcePath<Resources[number]>;
69
69
  /**
70
70
  * Top-level resource names declared in a `resources` array. Preserves string
71
71
  * literal unions for const resource definitions (unlike `keyof` on the
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.cts","names":[],"sources":["../src/resource.ts"],"mappings":"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"}
1
+ {"version":3,"file":"resource.d.cts","names":[],"sources":["../src/resource.ts"],"mappings":"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"}
@@ -65,7 +65,7 @@ type NestedResourcePath<Definition extends ResourceDefinition, Prefix extends st
65
65
  subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;
66
66
  } ? (Prefix extends '' ? Value : `${Prefix}.${Value}`) | NestedResourcePath<SubResources[number], Prefix extends '' ? Value : `${Prefix}.${Value}`> : never;
67
67
  /** Dot-delimited paths for every resource and nested sub-resource. */
68
- type ResourcePath<Resources extends ReadonlyArray<ResourceDefinition>> = NestedResourcePath<Resources[number]>;
68
+ type ResourcePath<Resources extends ReadonlyArray<ResourceDefinition>> = ResourceDefinition extends Resources[number] ? string : NestedResourcePath<Resources[number]>;
69
69
  /**
70
70
  * Top-level resource names declared in a `resources` array. Preserves string
71
71
  * literal unions for const resource definitions (unlike `keyof` on the
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.mts","names":[],"sources":["../src/resource.ts"],"mappings":"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"}
1
+ {"version":3,"file":"resource.d.mts","names":[],"sources":["../src/resource.ts"],"mappings":";;;;;KAKY,kBAAA;EAGN,KAAA;EACA,YAAA,EAAc,aAAa,CACzB,kBAAA;IALsB;;;;;IAWpB,cAAA;EAAA;AAAA;;AAAc;AASxB;;KAAY,4BAAA,kBACO,kBAAA,GAAqB,kBAAA,IACpC,QAAA;EACE,KAAA,EAAO,QAAA;AAAA,IACT,QAAA;EACI,KAAA;EACA,YAAA,6BAAyC,aAAA,CAAc,kBAAA;AAAA;EAGvD,KAAA,EAAO,KAAA;EACP,YAAA,EAAc,6BAAA,CAA8B,YAAA;AAAA;;;;;KAQxC,6BAAA,mBACQ,aAAA,CAAc,kBAAA,gCAEP,SAAA,GAAY,SAAA,CAAU,KAAA,UAAe,kBAAA,GAC1D,4BAAA,CAA6B,SAAA,CAAU,KAAA;AAAA,KAIjC,YAAA,GAAe,MAAM;EAG7B,YAAA,EAAc,YAAA;AAAA;AAAA,KAIN,iBAAA,kBAAmC,kBAAA,IAC7C,QAAA,4BAEc,QAAA;EACN,YAAA;AAAA,MAGJ,QAAA;EACI,KAAA;EACA,YAAA,6BACE,aAAA,CAAc,kBAAA;AAAA,cAGR,KAAA;EACN,YAAA,EAAc,kBAAA,CAAmB,YAAA;AAAA;AAAA,KAKjC,kBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,iBAAA,CACF,mBAAA,CAAoB,iBAAA,CAAkB,SAAA;AAAA,KAE5B,4BAAA;EACV,QAAA,EAAU,SAAS;AAAA;AAAA,iBAiCL,iBAAA,CAAkB,QAAA,EAAU,kBAAA,GAAqB,YAAY;AAAA,iBAI7D,kBAAA,mBACI,aAAA,CAAc,kBAAA,GAChC,SAAA,EAAW,SAAA,GAAY,kBAAA,CAAmB,SAAA;;;;;;;;iBAW5B,4BAAA,yBACU,aAAA,CAAc,kBAAA,GACtC,SAAA,EAAW,SAAA,GAAY,6BAAA,CAA8B,SAAA;AAAA,KAwB3C,uBAAA,kBAAyC,kBAAA,IACnD,QAAA,kBACI,QAAA,GACA,QAAA;EAAmB,KAAA;AAAA,IACjB,KAAA;AAAA,KAGH,kBAAA,oBACgB,kBAAA,gCAEjB,UAAA,kBACA,MAAA,cACE,UAAA,MACG,MAAA,IAAU,UAAA,KACf,UAAA;EACI,KAAA;EACA,YAAA,6BAAyC,aAAA,CAAc,kBAAA;AAAA,KAEtD,MAAA,cAAoB,KAAA,MAAW,MAAA,IAAU,KAAA,MAC1C,kBAAA,CACE,YAAA,UACA,MAAA,cAAoB,KAAA,MAAW,MAAA,IAAU,KAAA;;KAKvC,YAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,kBAAA,SAA2B,SAAA,oBAA6B,kBAAA,CAAmB,SAAA;;;;;AA5I7B;KAmJtC,iBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,uBAAA,CAAwB,SAAA;AAAA,KAEhB,wBAAA,mBACQ,aAAA,CAAc,kBAAA,yBAE9B,OAAA,CAAQ,SAAA,UAAmB,GAAA;EAAQ,KAAA,EAAO,GAAA;AAAA;;KAGlC,yBAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,iBAAA,CAAkB,SAAA,KAEnC,wBAAA,CAAyB,SAAA,EAAW,QAAA;EAClC,YAAA,6BAAyC,aAAA,CAAc,kBAAA;AAAA,IAErD,YAAA;AAAA,KAGD,uBAAA,qEAGG,QAAA,6BAAqC,QAAQ;AA/JrD;;;;AAAA,KAqKY,yBAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,aAAA,CAAc,kBAAA,qFAI9B,iBAAA,CAAkB,OAAA,sBACd,GAAA,SAAY,iBAAA,CAAkB,OAAA,IAC5B,uBAAA,CAAwB,QAAA,EAAU,QAAA,iBAChC,wBAAA,CAAyB,OAAA,EAAS,GAAA;EAChC,YAAA,uBACE,aAAA,CAAc,kBAAA;AAAA,KAEf,iBAAA,CAAkB,MAAA,qBACjB,GAAA,GAEI,GAAA;EAEE,KAAA,EAAO,GAAA;EACP,WAAA,EAAa,yBAAA,CACX,SAAA,EACA,MAAA,EACA,QAAA,eACa,QAAA;AAAA,IAGvB,GAAA,GACF,GAAA;;KAKE,2BAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,iBAAA,CAAkB,SAAA,MAChC,yBAAA,CAA0B,SAAA,EAAW,QAAA,mCAEtC,yBAAA,CACE,SAAA,EACA,yBAAA,CAA0B,SAAA,EAAW,QAAA;AAAA,KAY/B,YAAA,mBAA+B,aAAA,CAAc,kBAAA,KACvD,qBAAA,CAAsB,iBAAA,CAAkB,SAAA;AAAA,iBAC1B,cAAA,mBACI,aAAA,CAAc,kBAAA,GAChC,SAAA,EAAW,kBAAA,CAAmB,SAAA,IAOJ,YAAA,CAAa,SAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"resource.mjs","names":[],"sources":["../src/resource.ts"],"sourcesContent":["import { ReactNode } from 'react';\nimport { NonEmptyReadonlyArray } from '@jfdevelops/react-layout-validator';\nimport { MergeIntersection, UnionToIntersection } from './utils';\nimport { LayoutConfigurationError } from './errors';\n\nexport type ResourceDefinition =\n | string\n | {\n value: string;\n subResources: ReadonlyArray<\n ResourceDefinition & {\n /**\n * Whether to allow any string as a sub resource.\n *\n * @default false\n */\n allowAnyString?: boolean;\n }\n >;\n };\n\n/**\n * A resource definition normalized to an object with a stable `value` key.\n * `subResources` is present only when it existed on the declared resource.\n */\nexport type NormalizedResourceDefinition<\n Resource extends ResourceDefinition = ResourceDefinition,\n> = Resource extends string\n ? { value: Resource }\n : Resource extends {\n value: infer Value extends string;\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? {\n value: Value;\n subResources: NormalizedResourceDefinitions<SubResources>;\n }\n : never;\n\n/**\n * A tuple of resource definitions with strings converted to `{ value }`\n * objects and nested sub-resources normalized recursively.\n */\nexport type NormalizedResourceDefinitions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = {\n readonly [Index in keyof Resources]: Resources[Index] extends ResourceDefinition\n ? NormalizedResourceDefinition<Resources[Index]>\n : never;\n};\n\nexport type ResourceTree = Record<\n string,\n {\n subResources: ResourceTree;\n }\n>;\n\nexport type NormalizeResource<Resource extends ResourceDefinition> =\n Resource extends string\n ? {\n [Key in Resource]: {\n subResources: {};\n };\n }\n : Resource extends {\n value: infer Value extends string;\n subResources: infer SubResources extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? {\n [Key in Value]: {\n subResources: NormalizeResources<SubResources>;\n };\n }\n : never;\n\nexport type NormalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = MergeIntersection<\n UnionToIntersection<NormalizeResource<Resources[number]>>\n>;\nexport type ResourceLayoutComponentProps = {\n children: ReactNode;\n};\n\nfunction normalizeResourceTree(resource: ResourceDefinition): ResourceTree {\n if (typeof resource === 'string') {\n return {\n [resource]: {\n subResources: {},\n },\n };\n }\n\n const { value, subResources } = resource;\n\n return {\n [value]: {\n subResources: normalizeResourcesTree(subResources),\n },\n };\n}\n\nfunction normalizeResourcesTree(\n resources: ReadonlyArray<ResourceDefinition>,\n): ResourceTree {\n const normalizedResources: ResourceTree = {};\n\n for (const resource of resources) {\n Object.assign(normalizedResources, normalizeResourceTree(resource));\n }\n\n return normalizedResources;\n}\n\nexport function normalizeResource(resource: ResourceDefinition): ResourceTree {\n return normalizeResourceTree(resource);\n}\n\nexport function normalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): NormalizeResources<Resources> {\n return normalizeResourcesTree(resources) as NormalizeResources<Resources>;\n}\n\n/**\n * Normalizes public resource declarations to a consistent object shape while\n * preserving tuple positions and string literals in the returned type.\n *\n * @param resources - Resource definitions in their original declared form.\n * @returns A recursively normalized tuple whose entries always have `value`.\n */\nexport function normalizeResourceDefinitions<\n const Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): NormalizedResourceDefinitions<Resources> {\n return resources.map((resource) => {\n if (typeof resource === 'string') {\n return { value: resource };\n }\n\n return {\n value: resource.value,\n subResources: normalizeResourceDefinitions(resource.subResources),\n };\n }) as NormalizedResourceDefinitions<Resources>;\n}\n\nexport function createIsValidResourceFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources) {\n return (value: unknown): value is LayoutResourceKey<Resources> => {\n return (\n typeof value === 'string' &&\n Object.keys(normalizeResources(resources)).includes(value)\n );\n };\n}\n\nexport type ResourceDefinitionValue<Resource extends ResourceDefinition> =\n Resource extends string\n ? Resource\n : Resource extends { value: infer Value extends string }\n ? Value\n : never;\n\ntype NestedResourcePath<\n Definition extends ResourceDefinition,\n Prefix extends string = '',\n> = Definition extends string\n ? Prefix extends ''\n ? Definition\n : `${Prefix}.${Definition}`\n : Definition extends {\n value: infer Value extends string;\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? | (Prefix extends '' ? Value : `${Prefix}.${Value}`)\n | NestedResourcePath<\n SubResources[number],\n Prefix extends '' ? Value : `${Prefix}.${Value}`\n >\n : never;\n\n/** Dot-delimited paths for every resource and nested sub-resource. */\nexport type ResourcePath<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = NestedResourcePath<Resources[number]>;\n\n/**\n * Top-level resource names declared in a `resources` array. Preserves string\n * literal unions for const resource definitions (unlike `keyof` on the\n * normalized resource tree, which tends to widen to `string` in hovers).\n */\nexport type LayoutResourceKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = ResourceDefinitionValue<Resources[number]>;\n\nexport type ResourceDefinitionForKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Key extends string,\n> = Extract<Resources[number], Key | { value: Key }>;\n\n/** `subResources` array declared on a layout resource. */\nexport type SubResourceDefinitionsFor<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? SubResources\n : readonly [];\n\ntype CanNestSubResourceParam<\n MaxDepth extends number,\n DepthAcc extends readonly unknown[],\n> = [...DepthAcc, unknown]['length'] extends MaxDepth ? false : true;\n\n/**\n * `subResource` route param: a slug at the current depth, or `{ value, subResource }`\n * when that slug has nested `subResources` in the layout tree and `MaxDepth` allows it.\n */\nexport type RecursiveSubResourceParam<\n Resources extends ReadonlyArray<ResourceDefinition>,\n SubDefs extends ReadonlyArray<ResourceDefinition>,\n MaxDepth extends number = 6,\n DepthAcc extends readonly unknown[] = readonly [],\n> =\n LayoutResourceKey<SubDefs> extends infer Key\n ? Key extends LayoutResourceKey<SubDefs>\n ? CanNestSubResourceParam<MaxDepth, DepthAcc> extends true\n ? ResourceDefinitionForKey<SubDefs, Key> extends {\n subResources: infer Nested extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? [LayoutResourceKey<Nested>] extends [never]\n ? Key\n :\n | Key\n | {\n value: Key;\n subResource: RecursiveSubResourceParam<\n Resources,\n Nested,\n MaxDepth,\n readonly [...DepthAcc, unknown]\n >;\n }\n : Key\n : Key\n : never\n : never;\n\n/** Recursive `subResource` values for a layout resource (full tree depth). */\nexport type SubResourceParamForResource<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> = [SubResourceDefinitionsFor<Resources, Resource>] extends [readonly []]\n ? never\n : RecursiveSubResourceParam<\n Resources,\n SubResourceDefinitionsFor<Resources, Resource>\n >;\n\nexport type GetSubResourceKeys<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? LayoutResourceKey<SubResources>\n : never;\nexport type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> =\n NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;\nexport function toResourceEnum<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: NormalizeResources<Resources>) {\n const keys = Object.keys(resources);\n\n if (keys.length === 0) {\n throw new LayoutConfigurationError('No resources provided');\n }\n\n return keys as unknown as ResourceEnum<Resources>;\n}\n"],"mappings":";;;AAsFA,SAAS,sBAAsB,UAA4C;CACzE,IAAI,OAAO,aAAa,UACtB,OAAO,GACJ,WAAW,EACV,cAAc,CAAC,EACjB,EACF;CAGF,MAAM,EAAE,OAAO,iBAAiB;CAEhC,OAAO,GACJ,QAAQ,EACP,cAAc,uBAAuB,YAAY,EACnD,EACF;AACF;AAEA,SAAS,uBACP,WACc;CACd,MAAM,sBAAoC,CAAC;CAE3C,KAAK,MAAM,YAAY,WACrB,OAAO,OAAO,qBAAqB,sBAAsB,QAAQ,CAAC;CAGpE,OAAO;AACT;AAEA,SAAgB,kBAAkB,UAA4C;CAC5E,OAAO,sBAAsB,QAAQ;AACvC;AAEA,SAAgB,mBAEd,WAAqD;CACrD,OAAO,uBAAuB,SAAS;AACzC;;;;;;;;AASA,SAAgB,6BAEd,WAAgE;CAChE,OAAO,UAAU,KAAK,aAAa;EACjC,IAAI,OAAO,aAAa,UACtB,OAAO,EAAE,OAAO,SAAS;EAG3B,OAAO;GACL,OAAO,SAAS;GAChB,cAAc,6BAA6B,SAAS,YAAY;EAClE;CACF,CAAC;AACH;AAEA,SAAgB,wBAEd,WAAsB;CACtB,QAAQ,UAA0D;EAChE,OACE,OAAO,UAAU,YACjB,OAAO,KAAK,mBAAmB,SAAS,CAAC,EAAE,SAAS,KAAK;CAE7D;AACF;AAuHA,SAAgB,eAEd,WAA0C;CAC1C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAClB,MAAM,IAAI,yBAAyB,uBAAuB;CAG5D,OAAO;AACT"}
1
+ {"version":3,"file":"resource.mjs","names":[],"sources":["../src/resource.ts"],"sourcesContent":["import { ReactNode } from 'react';\nimport { NonEmptyReadonlyArray } from '@jfdevelops/react-layout-validator';\nimport { MergeIntersection, UnionToIntersection } from './utils';\nimport { LayoutConfigurationError } from './errors';\n\nexport type ResourceDefinition =\n | string\n | {\n value: string;\n subResources: ReadonlyArray<\n ResourceDefinition & {\n /**\n * Whether to allow any string as a sub resource.\n *\n * @default false\n */\n allowAnyString?: boolean;\n }\n >;\n };\n\n/**\n * A resource definition normalized to an object with a stable `value` key.\n * `subResources` is present only when it existed on the declared resource.\n */\nexport type NormalizedResourceDefinition<\n Resource extends ResourceDefinition = ResourceDefinition,\n> = Resource extends string\n ? { value: Resource }\n : Resource extends {\n value: infer Value extends string;\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? {\n value: Value;\n subResources: NormalizedResourceDefinitions<SubResources>;\n }\n : never;\n\n/**\n * A tuple of resource definitions with strings converted to `{ value }`\n * objects and nested sub-resources normalized recursively.\n */\nexport type NormalizedResourceDefinitions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = {\n readonly [Index in keyof Resources]: Resources[Index] extends ResourceDefinition\n ? NormalizedResourceDefinition<Resources[Index]>\n : never;\n};\n\nexport type ResourceTree = Record<\n string,\n {\n subResources: ResourceTree;\n }\n>;\n\nexport type NormalizeResource<Resource extends ResourceDefinition> =\n Resource extends string\n ? {\n [Key in Resource]: {\n subResources: {};\n };\n }\n : Resource extends {\n value: infer Value extends string;\n subResources: infer SubResources extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? {\n [Key in Value]: {\n subResources: NormalizeResources<SubResources>;\n };\n }\n : never;\n\nexport type NormalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = MergeIntersection<\n UnionToIntersection<NormalizeResource<Resources[number]>>\n>;\nexport type ResourceLayoutComponentProps = {\n children: ReactNode;\n};\n\nfunction normalizeResourceTree(resource: ResourceDefinition): ResourceTree {\n if (typeof resource === 'string') {\n return {\n [resource]: {\n subResources: {},\n },\n };\n }\n\n const { value, subResources } = resource;\n\n return {\n [value]: {\n subResources: normalizeResourcesTree(subResources),\n },\n };\n}\n\nfunction normalizeResourcesTree(\n resources: ReadonlyArray<ResourceDefinition>,\n): ResourceTree {\n const normalizedResources: ResourceTree = {};\n\n for (const resource of resources) {\n Object.assign(normalizedResources, normalizeResourceTree(resource));\n }\n\n return normalizedResources;\n}\n\nexport function normalizeResource(resource: ResourceDefinition): ResourceTree {\n return normalizeResourceTree(resource);\n}\n\nexport function normalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): NormalizeResources<Resources> {\n return normalizeResourcesTree(resources) as NormalizeResources<Resources>;\n}\n\n/**\n * Normalizes public resource declarations to a consistent object shape while\n * preserving tuple positions and string literals in the returned type.\n *\n * @param resources - Resource definitions in their original declared form.\n * @returns A recursively normalized tuple whose entries always have `value`.\n */\nexport function normalizeResourceDefinitions<\n const Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): NormalizedResourceDefinitions<Resources> {\n return resources.map((resource) => {\n if (typeof resource === 'string') {\n return { value: resource };\n }\n\n return {\n value: resource.value,\n subResources: normalizeResourceDefinitions(resource.subResources),\n };\n }) as NormalizedResourceDefinitions<Resources>;\n}\n\nexport function createIsValidResourceFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources) {\n return (value: unknown): value is LayoutResourceKey<Resources> => {\n return (\n typeof value === 'string' &&\n Object.keys(normalizeResources(resources)).includes(value)\n );\n };\n}\n\nexport type ResourceDefinitionValue<Resource extends ResourceDefinition> =\n Resource extends string\n ? Resource\n : Resource extends { value: infer Value extends string }\n ? Value\n : never;\n\ntype NestedResourcePath<\n Definition extends ResourceDefinition,\n Prefix extends string = '',\n> = Definition extends string\n ? Prefix extends ''\n ? Definition\n : `${Prefix}.${Definition}`\n : Definition extends {\n value: infer Value extends string;\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? | (Prefix extends '' ? Value : `${Prefix}.${Value}`)\n | NestedResourcePath<\n SubResources[number],\n Prefix extends '' ? Value : `${Prefix}.${Value}`\n >\n : never;\n\n/** Dot-delimited paths for every resource and nested sub-resource. */\nexport type ResourcePath<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = ResourceDefinition extends Resources[number] ? string : NestedResourcePath<Resources[number]>;\n\n/**\n * Top-level resource names declared in a `resources` array. Preserves string\n * literal unions for const resource definitions (unlike `keyof` on the\n * normalized resource tree, which tends to widen to `string` in hovers).\n */\nexport type LayoutResourceKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = ResourceDefinitionValue<Resources[number]>;\n\nexport type ResourceDefinitionForKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Key extends string,\n> = Extract<Resources[number], Key | { value: Key }>;\n\n/** `subResources` array declared on a layout resource. */\nexport type SubResourceDefinitionsFor<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? SubResources\n : readonly [];\n\ntype CanNestSubResourceParam<\n MaxDepth extends number,\n DepthAcc extends readonly unknown[],\n> = [...DepthAcc, unknown]['length'] extends MaxDepth ? false : true;\n\n/**\n * `subResource` route param: a slug at the current depth, or `{ value, subResource }`\n * when that slug has nested `subResources` in the layout tree and `MaxDepth` allows it.\n */\nexport type RecursiveSubResourceParam<\n Resources extends ReadonlyArray<ResourceDefinition>,\n SubDefs extends ReadonlyArray<ResourceDefinition>,\n MaxDepth extends number = 6,\n DepthAcc extends readonly unknown[] = readonly [],\n> =\n LayoutResourceKey<SubDefs> extends infer Key\n ? Key extends LayoutResourceKey<SubDefs>\n ? CanNestSubResourceParam<MaxDepth, DepthAcc> extends true\n ? ResourceDefinitionForKey<SubDefs, Key> extends {\n subResources: infer Nested extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? [LayoutResourceKey<Nested>] extends [never]\n ? Key\n :\n | Key\n | {\n value: Key;\n subResource: RecursiveSubResourceParam<\n Resources,\n Nested,\n MaxDepth,\n readonly [...DepthAcc, unknown]\n >;\n }\n : Key\n : Key\n : never\n : never;\n\n/** Recursive `subResource` values for a layout resource (full tree depth). */\nexport type SubResourceParamForResource<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> = [SubResourceDefinitionsFor<Resources, Resource>] extends [readonly []]\n ? never\n : RecursiveSubResourceParam<\n Resources,\n SubResourceDefinitionsFor<Resources, Resource>\n >;\n\nexport type GetSubResourceKeys<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? LayoutResourceKey<SubResources>\n : never;\nexport type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> =\n NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;\nexport function toResourceEnum<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: NormalizeResources<Resources>) {\n const keys = Object.keys(resources);\n\n if (keys.length === 0) {\n throw new LayoutConfigurationError('No resources provided');\n }\n\n return keys as unknown as ResourceEnum<Resources>;\n}\n"],"mappings":";;;AAsFA,SAAS,sBAAsB,UAA4C;CACzE,IAAI,OAAO,aAAa,UACtB,OAAO,GACJ,WAAW,EACV,cAAc,CAAC,EACjB,EACF;CAGF,MAAM,EAAE,OAAO,iBAAiB;CAEhC,OAAO,GACJ,QAAQ,EACP,cAAc,uBAAuB,YAAY,EACnD,EACF;AACF;AAEA,SAAS,uBACP,WACc;CACd,MAAM,sBAAoC,CAAC;CAE3C,KAAK,MAAM,YAAY,WACrB,OAAO,OAAO,qBAAqB,sBAAsB,QAAQ,CAAC;CAGpE,OAAO;AACT;AAEA,SAAgB,kBAAkB,UAA4C;CAC5E,OAAO,sBAAsB,QAAQ;AACvC;AAEA,SAAgB,mBAEd,WAAqD;CACrD,OAAO,uBAAuB,SAAS;AACzC;;;;;;;;AASA,SAAgB,6BAEd,WAAgE;CAChE,OAAO,UAAU,KAAK,aAAa;EACjC,IAAI,OAAO,aAAa,UACtB,OAAO,EAAE,OAAO,SAAS;EAG3B,OAAO;GACL,OAAO,SAAS;GAChB,cAAc,6BAA6B,SAAS,YAAY;EAClE;CACF,CAAC;AACH;AAEA,SAAgB,wBAEd,WAAsB;CACtB,QAAQ,UAA0D;EAChE,OACE,OAAO,UAAU,YACjB,OAAO,KAAK,mBAAmB,SAAS,CAAC,EAAE,SAAS,KAAK;CAE7D;AACF;AAuHA,SAAgB,eAEd,WAA0C;CAC1C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAClB,MAAM,IAAI,yBAAyB,uBAAuB;CAG5D,OAAO;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jfdevelops/react-layout",
3
- "version": "1.6.1",
3
+ "version": "2.1.0",
4
4
  "description": "A React library for creating layout components.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -29,8 +29,8 @@
29
29
  "dependencies": {
30
30
  "@jfdevelops/create-error": "0.2.0",
31
31
  "arktype": "2.2.8",
32
- "@jfdevelops/react-layout-devtools-core": "0.2.0",
33
32
  "@jfdevelops/react-layout-composables": "0.3.1",
33
+ "@jfdevelops/react-layout-devtools-core": "0.3.0",
34
34
  "@jfdevelops/react-layout-validator": "0.3.1"
35
35
  },
36
36
  "peerDependencies": {