polen 0.10.0-next.14 → 0.10.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +375 -49
- package/build/api/api.d.ts +0 -1
- package/build/api/api.d.ts.map +1 -1
- package/build/api/api.js +0 -1
- package/build/api/api.js.map +1 -1
- package/build/api/builder/builder.js +1 -1
- package/build/api/builder/builder.js.map +1 -1
- package/build/api/config/load.js +6 -6
- package/build/api/config/load.js.map +1 -1
- package/build/api/config-resolver/resolve.js +2 -2
- package/build/api/config-resolver/resolve.js.map +1 -1
- package/build/api/schema/data-sources/schema-directory/schema-directory.js +1 -1
- package/build/api/schema/data-sources/schema-directory/schema-directory.js.map +1 -1
- package/build/api/vite/plugins/branding/index.js +4 -4
- package/build/api/vite/plugins/branding/index.js.map +1 -1
- package/build/api/vite/plugins/build.d.ts.map +1 -1
- package/build/api/vite/plugins/build.js +4 -33
- package/build/api/vite/plugins/build.js.map +1 -1
- package/build/api/vite/plugins/core.d.ts +2 -2
- package/build/api/vite/plugins/core.d.ts.map +1 -1
- package/build/api/vite/plugins/core.js +13 -13
- package/build/api/vite/plugins/core.js.map +1 -1
- package/build/api/vite/plugins/pages.d.ts +14 -8
- package/build/api/vite/plugins/pages.d.ts.map +1 -1
- package/build/api/vite/plugins/pages.js +185 -111
- package/build/api/vite/plugins/pages.js.map +1 -1
- package/build/api/vite/plugins/serve.d.ts.map +1 -1
- package/build/api/vite/plugins/serve.js +12 -52
- package/build/api/vite/plugins/serve.js.map +1 -1
- package/build/cli/_/self-contained-mode.js +5 -5
- package/build/cli/_/self-contained-mode.js.map +1 -1
- package/build/lib/file-router/diagnostic-reporter.js +2 -2
- package/build/lib/file-router/diagnostic-reporter.js.map +1 -1
- package/build/lib/file-router/file-router.d.ts +2 -0
- package/build/lib/file-router/file-router.d.ts.map +1 -1
- package/build/lib/file-router/file-router.js +2 -0
- package/build/lib/file-router/file-router.js.map +1 -1
- package/build/lib/file-router/route.d.ts +0 -2
- package/build/lib/file-router/route.d.ts.map +1 -1
- package/build/lib/file-router/route.js.map +1 -1
- package/build/lib/file-router/scan-tree.d.ts +20 -0
- package/build/lib/file-router/scan-tree.d.ts.map +1 -0
- package/build/lib/file-router/scan-tree.js +158 -0
- package/build/lib/file-router/scan-tree.js.map +1 -0
- package/build/lib/file-router/scan.d.ts.map +1 -1
- package/build/lib/file-router/scan.js +13 -22
- package/build/lib/file-router/scan.js.map +1 -1
- package/build/lib/file-router/sidebar/index.d.ts +3 -0
- package/build/lib/file-router/sidebar/index.d.ts.map +1 -0
- package/build/lib/file-router/sidebar/index.js +4 -0
- package/build/lib/file-router/sidebar/index.js.map +1 -0
- package/build/lib/file-router/sidebar/sidebar-tree.d.ts +9 -0
- package/build/lib/file-router/sidebar/sidebar-tree.d.ts.map +1 -0
- package/build/lib/file-router/sidebar/sidebar-tree.js +85 -0
- package/build/lib/file-router/sidebar/sidebar-tree.js.map +1 -0
- package/build/lib/file-router/sidebar/types.d.ts +17 -0
- package/build/lib/file-router/sidebar/types.d.ts.map +1 -0
- package/build/lib/file-router/sidebar/types.js.map +1 -0
- package/build/lib/helpers.d.ts.map +1 -1
- package/build/lib/helpers.js +3 -5
- package/build/lib/helpers.js.map +1 -1
- package/build/lib/kit-temp.d.ts +0 -157
- package/build/lib/kit-temp.d.ts.map +1 -1
- package/build/lib/kit-temp.js +14 -316
- package/build/lib/kit-temp.js.map +1 -1
- package/build/lib/tree/index.d.ts +3 -0
- package/build/lib/tree/index.d.ts.map +1 -0
- package/build/lib/tree/index.js +2 -0
- package/build/lib/tree/index.js.map +1 -0
- package/build/lib/tree/tree.d.ts +62 -0
- package/build/lib/tree/tree.d.ts.map +1 -0
- package/build/lib/tree/tree.js +134 -0
- package/build/lib/tree/tree.js.map +1 -0
- package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.d.ts +8 -1
- package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.d.ts.map +1 -1
- package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.js +53 -48
- package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.js.map +1 -1
- package/build/package-paths.js +3 -3
- package/build/package-paths.js.map +1 -1
- package/build/singletons/debug.d.ts +1 -1
- package/build/singletons/debug.d.ts.map +1 -1
- package/build/singletons/debug.js +1 -1
- package/build/singletons/debug.js.map +1 -1
- package/build/template/components/ArgumentAnnotation.jsx +16 -0
- package/build/template/components/ArgumentAnnotation.jsx.map +1 -0
- package/build/template/components/ArgumentList.jsx +16 -0
- package/build/template/components/ArgumentList.jsx.map +1 -0
- package/build/template/components/ArgumentListAnnotation.jsx +23 -0
- package/build/template/components/ArgumentListAnnotation.jsx.map +1 -0
- package/build/template/components/Changelog.jsx +68 -0
- package/build/template/components/Changelog.jsx.map +1 -0
- package/build/template/components/{CodeBlock.js → CodeBlock.jsx} +5 -4
- package/build/template/components/{CodeBlock.js.map → CodeBlock.jsx.map} +1 -1
- package/build/template/components/DeprecationReason.jsx +10 -0
- package/build/template/components/DeprecationReason.jsx.map +1 -0
- package/build/template/components/Description.jsx +10 -0
- package/build/template/components/Description.jsx.map +1 -0
- package/build/template/components/Field.jsx +22 -0
- package/build/template/components/Field.jsx.map +1 -0
- package/build/template/components/{FieldList.js → FieldList.jsx} +5 -4
- package/build/template/components/FieldList.jsx.map +1 -0
- package/build/template/components/{FieldListSection.js → FieldListSection.jsx} +6 -4
- package/build/template/components/FieldListSection.jsx.map +1 -0
- package/build/template/components/Link.d.ts +2 -2
- package/build/template/components/Link.d.ts.map +1 -1
- package/build/template/components/{Link.js → Link.jsx} +10 -18
- package/build/template/components/Link.jsx.map +1 -0
- package/build/template/components/Logo.jsx +29 -0
- package/build/template/components/Logo.jsx.map +1 -0
- package/build/template/components/{Markdown.js → Markdown.jsx} +2 -3
- package/build/template/components/Markdown.jsx.map +1 -0
- package/build/template/components/MissingSchema.d.ts +1 -1
- package/build/template/components/MissingSchema.d.ts.map +1 -1
- package/build/template/components/MissingSchema.jsx +4 -0
- package/build/template/components/MissingSchema.jsx.map +1 -0
- package/build/template/components/NamedType.jsx +17 -0
- package/build/template/components/NamedType.jsx.map +1 -0
- package/build/template/components/{RadixLink.js → RadixLink.jsx} +1 -1
- package/build/template/components/RadixLink.jsx.map +1 -0
- package/build/template/components/Texts/{MinorHeading.js → MinorHeading.jsx} +3 -4
- package/build/template/components/Texts/MinorHeading.jsx.map +1 -0
- package/build/template/components/Texts/texts.js +1 -1
- package/build/template/components/Texts/texts.js.map +1 -1
- package/build/template/components/{TypeAnnotation.js → TypeAnnotation.jsx} +18 -8
- package/build/template/components/TypeAnnotation.jsx.map +1 -0
- package/build/template/components/TypeFieldsLinkList.jsx +17 -0
- package/build/template/components/TypeFieldsLinkList.jsx.map +1 -0
- package/build/template/components/TypeIndex.jsx +27 -0
- package/build/template/components/TypeIndex.jsx.map +1 -0
- package/build/template/components/graphql/graphql.d.ts +2 -2
- package/build/template/components/graphql/graphql.jsx +3 -0
- package/build/template/components/graphql/graphql.jsx.map +1 -0
- package/build/template/components/graphql/index.d.ts +1 -1
- package/build/template/components/graphql/index.js +1 -1
- package/build/template/components/graphql/index.js.map +1 -1
- package/build/template/components/graphql/{type-kind-icon.js → type-kind-icon.jsx} +2 -3
- package/build/template/components/graphql/type-kind-icon.jsx.map +1 -0
- package/build/template/components/graphql/type-link.jsx +16 -0
- package/build/template/components/graphql/type-link.jsx.map +1 -0
- package/build/template/components/sidebar/Sidebar.d.ts +3 -3
- package/build/template/components/sidebar/Sidebar.d.ts.map +1 -1
- package/build/template/components/sidebar/Sidebar.jsx +15 -0
- package/build/template/components/sidebar/Sidebar.jsx.map +1 -0
- package/build/template/components/sidebar/SidebarItem.d.ts +3 -3
- package/build/template/components/sidebar/SidebarItem.d.ts.map +1 -1
- package/build/template/components/sidebar/{SidebarItem.js → SidebarItem.jsx} +35 -18
- package/build/template/components/sidebar/SidebarItem.jsx.map +1 -0
- package/build/template/components/sidebar/ToggleButton.d.ts +1 -1
- package/build/template/components/sidebar/ToggleButton.d.ts.map +1 -1
- package/build/template/components/sidebar/ToggleButton.jsx +6 -0
- package/build/template/components/sidebar/ToggleButton.jsx.map +1 -0
- package/build/template/entry.client.d.ts +0 -1
- package/build/template/entry.client.d.ts.map +1 -1
- package/build/template/{entry.client.js → entry.client.jsx} +9 -5
- package/build/template/entry.client.jsx.map +1 -0
- package/build/template/routes/changelog.d.ts +1 -1
- package/build/template/routes/{changelog.js → changelog.jsx} +4 -5
- package/build/template/routes/changelog.jsx.map +1 -0
- package/build/template/routes/{index.js → index.jsx} +2 -3
- package/build/template/routes/index.jsx.map +1 -0
- package/build/template/routes/reference.$type.$field.d.ts +1 -1
- package/build/template/routes/{reference.$type.$field.js → reference.$type.$field.jsx} +5 -6
- package/build/template/routes/reference.$type.$field.jsx.map +1 -0
- package/build/template/routes/reference.$type.d.ts +1 -1
- package/build/template/routes/{reference.$type.js → reference.$type.jsx} +5 -6
- package/build/template/routes/reference.$type.jsx.map +1 -0
- package/build/template/routes/reference.d.ts +2 -2
- package/build/template/routes/reference.d.ts.map +1 -1
- package/build/template/routes/{reference.js → reference.jsx} +12 -7
- package/build/template/routes/reference.jsx.map +1 -0
- package/build/template/routes/root.d.ts +2 -2
- package/build/template/routes/root.d.ts.map +1 -1
- package/build/template/routes/root.jsx +188 -0
- package/build/template/routes/root.jsx.map +1 -0
- package/build/template/routes.jsx +5 -0
- package/build/template/routes.jsx.map +1 -0
- package/build/template/server/app.d.ts +1 -8
- package/build/template/server/app.d.ts.map +1 -1
- package/build/template/server/app.js +21 -21
- package/build/template/server/app.js.map +1 -1
- package/build/template/server/main.js +1 -2
- package/build/template/server/main.js.map +1 -1
- package/build/template/server/render-page.d.ts +3 -0
- package/build/template/server/render-page.d.ts.map +1 -0
- package/build/template/server/{create-page-html-response.js → render-page.jsx} +17 -11
- package/build/template/server/render-page.jsx.map +1 -0
- package/build/template/server/ssg/generate.d.ts.map +1 -1
- package/build/template/server/ssg/generate.js +34 -33
- package/build/template/server/ssg/generate.js.map +1 -1
- package/build/template/server/ssg/get-route-paths.js +1 -1
- package/build/template/server/ssg/get-route-paths.js.map +1 -1
- package/build/template/server/view.js +1 -1
- package/build/template/server/view.js.map +1 -1
- package/package.json +9 -73
- package/src/api/api.ts +0 -1
- package/src/api/config/load.ts +5 -5
- package/src/api/config-resolver/resolve.ts +2 -2
- package/src/api/schema/data-sources/schema-directory/schema-directory.ts +1 -1
- package/src/api/singletons/markdown/markdown.test.ts +2 -2
- package/src/api/utils/asset-url/asset-url.test.ts +4 -4
- package/src/api/vite/plugins/branding/index.ts +4 -4
- package/src/api/vite/plugins/build.ts +89 -121
- package/src/api/vite/plugins/core.ts +17 -19
- package/src/api/vite/plugins/pages.ts +209 -135
- package/src/api/vite/plugins/serve.ts +14 -67
- package/src/cli/_/self-contained-mode.ts +5 -5
- package/src/lib/file-router/diagnostic-reporter.ts +2 -2
- package/src/lib/file-router/file-router.ts +2 -0
- package/src/lib/file-router/linter.test.ts +0 -2
- package/src/lib/file-router/route.ts +0 -2
- package/src/lib/file-router/scan-tree.test.ts +189 -0
- package/src/lib/file-router/scan-tree.ts +205 -0
- package/src/lib/file-router/scan.ts +14 -26
- package/src/lib/file-router/sidebar/index.ts +3 -0
- package/src/lib/file-router/sidebar/sidebar-tree.test.ts +123 -0
- package/src/lib/file-router/sidebar/sidebar-tree.ts +110 -0
- package/src/lib/file-router/sidebar/types.ts +19 -0
- package/src/lib/helpers.ts +3 -4
- package/src/lib/kit-temp.ts +14 -428
- package/src/lib/shiki/shiki.test.ts +1 -1
- package/src/lib/tree/index.ts +2 -0
- package/src/lib/tree/tree.test.ts +117 -0
- package/src/lib/tree/tree.ts +183 -0
- package/src/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.ts +58 -52
- package/src/package-paths.ts +3 -3
- package/src/singletons/debug.ts +1 -1
- package/src/template/components/ArgumentAnnotation.tsx +1 -1
- package/src/template/components/ArgumentList.tsx +1 -1
- package/src/template/components/ArgumentListAnnotation.tsx +2 -2
- package/src/template/components/DeprecationReason.tsx +1 -1
- package/src/template/components/Description.tsx +1 -1
- package/src/template/components/Field.tsx +4 -4
- package/src/template/components/FieldList.tsx +1 -1
- package/src/template/components/FieldListSection.tsx +1 -1
- package/src/template/components/Link.tsx +15 -23
- package/src/template/components/NamedType.tsx +2 -2
- package/src/template/components/TypeAnnotation.tsx +1 -1
- package/src/template/components/TypeFieldsLinkList.tsx +1 -1
- package/src/template/components/TypeIndex.tsx +1 -1
- package/src/template/components/graphql/graphql.tsx +2 -2
- package/src/template/components/graphql/index.ts +1 -1
- package/src/template/components/graphql/type-link.tsx +2 -2
- package/src/template/components/sidebar/Sidebar.tsx +2 -2
- package/src/template/components/sidebar/SidebarItem.tsx +14 -14
- package/src/template/entry.client.tsx +5 -2
- package/src/template/routes/changelog.tsx +1 -1
- package/src/template/routes/reference.$type.$field.tsx +3 -3
- package/src/template/routes/reference.$type.tsx +3 -3
- package/src/template/routes/reference.tsx +10 -6
- package/src/template/routes/root.tsx +108 -112
- package/src/template/routes.tsx +1 -1
- package/src/template/server/app.ts +23 -33
- package/src/template/server/main.ts +1 -2
- package/src/template/server/{create-page-html-response.ts → render-page.tsx} +16 -19
- package/src/template/server/ssg/generate.ts +72 -68
- package/src/template/server/ssg/get-route-paths.ts +1 -1
- package/src/template/server/view.ts +1 -1
- package/src/template/styles/code-block.css +0 -32
- package/build/api/content/$$.d.ts +0 -7
- package/build/api/content/$$.d.ts.map +0 -1
- package/build/api/content/$$.js +0 -7
- package/build/api/content/$$.js.map +0 -1
- package/build/api/content/$.d.ts +0 -2
- package/build/api/content/$.d.ts.map +0 -1
- package/build/api/content/$.js +0 -2
- package/build/api/content/$.js.map +0 -1
- package/build/api/content/metadata.d.ts +0 -10
- package/build/api/content/metadata.d.ts.map +0 -1
- package/build/api/content/metadata.js +0 -9
- package/build/api/content/metadata.js.map +0 -1
- package/build/api/content/navbar.d.ts +0 -10
- package/build/api/content/navbar.d.ts.map +0 -1
- package/build/api/content/navbar.js +0 -45
- package/build/api/content/navbar.js.map +0 -1
- package/build/api/content/page.d.ts +0 -11
- package/build/api/content/page.d.ts.map +0 -1
- package/build/api/content/page.js +0 -2
- package/build/api/content/page.js.map +0 -1
- package/build/api/content/scan.d.ts +0 -19
- package/build/api/content/scan.d.ts.map +0 -1
- package/build/api/content/scan.js +0 -90
- package/build/api/content/scan.js.map +0 -1
- package/build/api/content/sidebar.d.ts +0 -104
- package/build/api/content/sidebar.d.ts.map +0 -1
- package/build/api/content/sidebar.js +0 -166
- package/build/api/content/sidebar.js.map +0 -1
- package/build/api/content/utils.d.ts +0 -5
- package/build/api/content/utils.d.ts.map +0 -1
- package/build/api/content/utils.js +0 -8
- package/build/api/content/utils.js.map +0 -1
- package/build/api/static/index.d.ts +0 -2
- package/build/api/static/index.d.ts.map +0 -1
- package/build/api/static/index.js +0 -2
- package/build/api/static/index.js.map +0 -1
- package/build/api/static/manifest.d.ts +0 -18
- package/build/api/static/manifest.d.ts.map +0 -1
- package/build/api/static/manifest.js +0 -13
- package/build/api/static/manifest.js.map +0 -1
- package/build/api/static/rebase.d.ts +0 -14
- package/build/api/static/rebase.d.ts.map +0 -1
- package/build/api/static/rebase.js +0 -110
- package/build/api/static/rebase.js.map +0 -1
- package/build/api/static/static.d.ts +0 -3
- package/build/api/static/static.d.ts.map +0 -1
- package/build/api/static/static.js +0 -3
- package/build/api/static/static.js.map +0 -1
- package/build/cli/commands/static/$default.d.ts +0 -3
- package/build/cli/commands/static/$default.d.ts.map +0 -1
- package/build/cli/commands/static/$default.js +0 -38
- package/build/cli/commands/static/$default.js.map +0 -1
- package/build/cli/commands/static/rebase.d.ts +0 -2
- package/build/cli/commands/static/rebase.d.ts.map +0 -1
- package/build/cli/commands/static/rebase.js +0 -26
- package/build/cli/commands/static/rebase.js.map +0 -1
- package/build/cli/commands/static.d.ts +0 -3
- package/build/cli/commands/static.d.ts.map +0 -1
- package/build/cli/commands/static.js +0 -5
- package/build/cli/commands/static.js.map +0 -1
- package/build/exports/components.d.ts +0 -5
- package/build/exports/components.d.ts.map +0 -1
- package/build/exports/components.js +0 -5
- package/build/exports/components.js.map +0 -1
- package/build/lib/demos/builder.d.ts +0 -83
- package/build/lib/demos/builder.d.ts.map +0 -1
- package/build/lib/demos/builder.js +0 -237
- package/build/lib/demos/builder.js.map +0 -1
- package/build/lib/demos/config-schema.d.ts +0 -243
- package/build/lib/demos/config-schema.d.ts.map +0 -1
- package/build/lib/demos/config-schema.js +0 -52
- package/build/lib/demos/config-schema.js.map +0 -1
- package/build/lib/demos/config.d.ts +0 -40
- package/build/lib/demos/config.d.ts.map +0 -1
- package/build/lib/demos/config.js +0 -180
- package/build/lib/demos/config.js.map +0 -1
- package/build/lib/demos/index.d.ts +0 -9
- package/build/lib/demos/index.d.ts.map +0 -1
- package/build/lib/demos/index.js +0 -8
- package/build/lib/demos/index.js.map +0 -1
- package/build/lib/demos/ui/components.d.ts +0 -33
- package/build/lib/demos/ui/components.d.ts.map +0 -1
- package/build/lib/demos/ui/components.js +0 -699
- package/build/lib/demos/ui/components.js.map +0 -1
- package/build/lib/demos/ui/data-collector.d.ts +0 -88
- package/build/lib/demos/ui/data-collector.d.ts.map +0 -1
- package/build/lib/demos/ui/data-collector.js +0 -174
- package/build/lib/demos/ui/data-collector.js.map +0 -1
- package/build/lib/demos/ui/landing-page-cli.d.ts +0 -3
- package/build/lib/demos/ui/landing-page-cli.d.ts.map +0 -1
- package/build/lib/demos/ui/landing-page-cli.js +0 -21
- package/build/lib/demos/ui/landing-page-cli.js.map +0 -1
- package/build/lib/demos/ui/landing-page.d.ts +0 -32
- package/build/lib/demos/ui/landing-page.d.ts.map +0 -1
- package/build/lib/demos/ui/landing-page.js +0 -83
- package/build/lib/demos/ui/landing-page.js.map +0 -1
- package/build/lib/demos/ui/page-renderer.d.ts +0 -26
- package/build/lib/demos/ui/page-renderer.d.ts.map +0 -1
- package/build/lib/demos/ui/page-renderer.js +0 -104
- package/build/lib/demos/ui/page-renderer.js.map +0 -1
- package/build/lib/demos/utils.d.ts +0 -14
- package/build/lib/demos/utils.d.ts.map +0 -1
- package/build/lib/demos/utils.js +0 -37
- package/build/lib/demos/utils.js.map +0 -1
- package/build/lib/deployment/$$.d.ts +0 -3
- package/build/lib/deployment/$$.d.ts.map +0 -1
- package/build/lib/deployment/$$.js +0 -3
- package/build/lib/deployment/$$.js.map +0 -1
- package/build/lib/deployment/$.d.ts +0 -2
- package/build/lib/deployment/$.d.ts.map +0 -1
- package/build/lib/deployment/$.js +0 -2
- package/build/lib/deployment/$.js.map +0 -1
- package/build/lib/deployment/metadata.d.ts +0 -32
- package/build/lib/deployment/metadata.d.ts.map +0 -1
- package/build/lib/deployment/metadata.js +0 -37
- package/build/lib/deployment/metadata.js.map +0 -1
- package/build/lib/deployment/path-manager.d.ts +0 -41
- package/build/lib/deployment/path-manager.d.ts.map +0 -1
- package/build/lib/deployment/path-manager.js +0 -157
- package/build/lib/deployment/path-manager.js.map +0 -1
- package/build/lib/github-actions/git-controller.d.ts +0 -50
- package/build/lib/github-actions/git-controller.d.ts.map +0 -1
- package/build/lib/github-actions/git-controller.js +0 -90
- package/build/lib/github-actions/git-controller.js.map +0 -1
- package/build/lib/github-actions/github-actions.d.ts +0 -7
- package/build/lib/github-actions/github-actions.d.ts.map +0 -1
- package/build/lib/github-actions/github-actions.js +0 -7
- package/build/lib/github-actions/github-actions.js.map +0 -1
- package/build/lib/github-actions/index.d.ts +0 -2
- package/build/lib/github-actions/index.d.ts.map +0 -1
- package/build/lib/github-actions/index.js +0 -2
- package/build/lib/github-actions/index.js.map +0 -1
- package/build/lib/github-actions/lib/get-pr-deployments.d.ts +0 -12
- package/build/lib/github-actions/lib/get-pr-deployments.d.ts.map +0 -1
- package/build/lib/github-actions/lib/get-pr-deployments.js +0 -51
- package/build/lib/github-actions/lib/get-pr-deployments.js.map +0 -1
- package/build/lib/github-actions/pr-controller.d.ts +0 -39
- package/build/lib/github-actions/pr-controller.d.ts.map +0 -1
- package/build/lib/github-actions/pr-controller.js +0 -122
- package/build/lib/github-actions/pr-controller.js.map +0 -1
- package/build/lib/github-actions/run-step-cli.d.ts +0 -9
- package/build/lib/github-actions/run-step-cli.d.ts.map +0 -1
- package/build/lib/github-actions/run-step-cli.js +0 -71
- package/build/lib/github-actions/run-step-cli.js.map +0 -1
- package/build/lib/github-actions/runner.d.ts +0 -17
- package/build/lib/github-actions/runner.d.ts.map +0 -1
- package/build/lib/github-actions/runner.js +0 -195
- package/build/lib/github-actions/runner.js.map +0 -1
- package/build/lib/github-actions/schemas/context.d.ts +0 -933
- package/build/lib/github-actions/schemas/context.d.ts.map +0 -1
- package/build/lib/github-actions/schemas/context.js +0 -407
- package/build/lib/github-actions/schemas/context.js.map +0 -1
- package/build/lib/github-actions/schemas/index.d.ts +0 -5
- package/build/lib/github-actions/schemas/index.d.ts.map +0 -1
- package/build/lib/github-actions/schemas/index.js +0 -5
- package/build/lib/github-actions/schemas/index.js.map +0 -1
- package/build/lib/github-actions/search-module.d.ts +0 -38
- package/build/lib/github-actions/search-module.d.ts.map +0 -1
- package/build/lib/github-actions/search-module.js +0 -40
- package/build/lib/github-actions/search-module.js.map +0 -1
- package/build/lib/github-actions/step.d.ts +0 -163
- package/build/lib/github-actions/step.d.ts.map +0 -1
- package/build/lib/github-actions/step.js +0 -121
- package/build/lib/github-actions/step.js.map +0 -1
- package/build/lib/graphql-document/$$.d.ts +0 -5
- package/build/lib/graphql-document/$$.d.ts.map +0 -1
- package/build/lib/graphql-document/$$.js +0 -5
- package/build/lib/graphql-document/$$.js.map +0 -1
- package/build/lib/graphql-document/$.d.ts +0 -2
- package/build/lib/graphql-document/$.d.ts.map +0 -1
- package/build/lib/graphql-document/$.js +0 -2
- package/build/lib/graphql-document/$.js.map +0 -1
- package/build/lib/graphql-document/analysis.d.ts +0 -44
- package/build/lib/graphql-document/analysis.d.ts.map +0 -1
- package/build/lib/graphql-document/analysis.js +0 -361
- package/build/lib/graphql-document/analysis.js.map +0 -1
- package/build/lib/graphql-document/components/CopyButton.d.ts +0 -19
- package/build/lib/graphql-document/components/CopyButton.d.ts.map +0 -1
- package/build/lib/graphql-document/components/CopyButton.js +0 -43
- package/build/lib/graphql-document/components/CopyButton.js.map +0 -1
- package/build/lib/graphql-document/components/GraphQLDocument.d.ts +0 -38
- package/build/lib/graphql-document/components/GraphQLDocument.d.ts.map +0 -1
- package/build/lib/graphql-document/components/GraphQLDocument.js +0 -142
- package/build/lib/graphql-document/components/GraphQLDocument.js.map +0 -1
- package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.d.ts +0 -7
- package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.d.ts.map +0 -1
- package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.js +0 -45
- package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.js.map +0 -1
- package/build/lib/graphql-document/components/GraphQLIdentifierPopover.d.ts +0 -33
- package/build/lib/graphql-document/components/GraphQLIdentifierPopover.d.ts.map +0 -1
- package/build/lib/graphql-document/components/GraphQLIdentifierPopover.js +0 -48
- package/build/lib/graphql-document/components/GraphQLIdentifierPopover.js.map +0 -1
- package/build/lib/graphql-document/components/IdentifierLink.d.ts +0 -39
- package/build/lib/graphql-document/components/IdentifierLink.d.ts.map +0 -1
- package/build/lib/graphql-document/components/IdentifierLink.js +0 -75
- package/build/lib/graphql-document/components/IdentifierLink.js.map +0 -1
- package/build/lib/graphql-document/components/graphql-document-styles.d.ts +0 -5
- package/build/lib/graphql-document/components/graphql-document-styles.d.ts.map +0 -1
- package/build/lib/graphql-document/components/graphql-document-styles.js +0 -167
- package/build/lib/graphql-document/components/graphql-document-styles.js.map +0 -1
- package/build/lib/graphql-document/components/index.d.ts +0 -6
- package/build/lib/graphql-document/components/index.d.ts.map +0 -1
- package/build/lib/graphql-document/components/index.js +0 -6
- package/build/lib/graphql-document/components/index.js.map +0 -1
- package/build/lib/graphql-document/example.d.ts +0 -25
- package/build/lib/graphql-document/example.d.ts.map +0 -1
- package/build/lib/graphql-document/example.js +0 -140
- package/build/lib/graphql-document/example.js.map +0 -1
- package/build/lib/graphql-document/graphql-document.d.ts +0 -35
- package/build/lib/graphql-document/graphql-document.d.ts.map +0 -1
- package/build/lib/graphql-document/graphql-document.js +0 -36
- package/build/lib/graphql-document/graphql-document.js.map +0 -1
- package/build/lib/graphql-document/hooks/use-tooltip-state.d.ts +0 -43
- package/build/lib/graphql-document/hooks/use-tooltip-state.d.ts.map +0 -1
- package/build/lib/graphql-document/hooks/use-tooltip-state.js +0 -132
- package/build/lib/graphql-document/hooks/use-tooltip-state.js.map +0 -1
- package/build/lib/graphql-document/positioning-simple.d.ts +0 -63
- package/build/lib/graphql-document/positioning-simple.d.ts.map +0 -1
- package/build/lib/graphql-document/positioning-simple.js +0 -185
- package/build/lib/graphql-document/positioning-simple.js.map +0 -1
- package/build/lib/graphql-document/schema-context.d.ts +0 -8
- package/build/lib/graphql-document/schema-context.d.ts.map +0 -1
- package/build/lib/graphql-document/schema-context.js +0 -11
- package/build/lib/graphql-document/schema-context.js.map +0 -1
- package/build/lib/graphql-document/schema-integration-example.d.ts +0 -27
- package/build/lib/graphql-document/schema-integration-example.d.ts.map +0 -1
- package/build/lib/graphql-document/schema-integration-example.js +0 -297
- package/build/lib/graphql-document/schema-integration-example.js.map +0 -1
- package/build/lib/graphql-document/schema-integration.d.ts +0 -135
- package/build/lib/graphql-document/schema-integration.d.ts.map +0 -1
- package/build/lib/graphql-document/schema-integration.js +0 -328
- package/build/lib/graphql-document/schema-integration.js.map +0 -1
- package/build/lib/graphql-document/types.d.ts +0 -117
- package/build/lib/graphql-document/types.d.ts.map +0 -1
- package/build/lib/graphql-document/types.js.map +0 -1
- package/build/lib/kit-temp.test-d.d.ts +0 -2
- package/build/lib/kit-temp.test-d.d.ts.map +0 -1
- package/build/lib/kit-temp.test-d.js +0 -75
- package/build/lib/kit-temp.test-d.js.map +0 -1
- package/build/lib/mask/$$.d.ts +0 -3
- package/build/lib/mask/$$.d.ts.map +0 -1
- package/build/lib/mask/$$.js +0 -3
- package/build/lib/mask/$$.js.map +0 -1
- package/build/lib/mask/$.d.ts +0 -2
- package/build/lib/mask/$.d.ts.map +0 -1
- package/build/lib/mask/$.js +0 -2
- package/build/lib/mask/$.js.map +0 -1
- package/build/lib/mask/apply.d.ts +0 -86
- package/build/lib/mask/apply.d.ts.map +0 -1
- package/build/lib/mask/apply.js +0 -86
- package/build/lib/mask/apply.js.map +0 -1
- package/build/lib/mask/mask.d.ts +0 -124
- package/build/lib/mask/mask.d.ts.map +0 -1
- package/build/lib/mask/mask.js +0 -137
- package/build/lib/mask/mask.js.map +0 -1
- package/build/lib/mask/mask.test-d.d.ts +0 -2
- package/build/lib/mask/mask.test-d.d.ts.map +0 -1
- package/build/lib/mask/mask.test-d.js +0 -102
- package/build/lib/mask/mask.test-d.js.map +0 -1
- package/build/lib/task/$$.d.ts +0 -3
- package/build/lib/task/$$.d.ts.map +0 -1
- package/build/lib/task/$$.js +0 -3
- package/build/lib/task/$$.js.map +0 -1
- package/build/lib/task/$.d.ts +0 -2
- package/build/lib/task/$.d.ts.map +0 -1
- package/build/lib/task/$.js +0 -2
- package/build/lib/task/$.js.map +0 -1
- package/build/lib/task/report.d.ts +0 -28
- package/build/lib/task/report.d.ts.map +0 -1
- package/build/lib/task/report.js +0 -33
- package/build/lib/task/report.js.map +0 -1
- package/build/lib/task/task.d.ts +0 -44
- package/build/lib/task/task.d.ts.map +0 -1
- package/build/lib/task/task.js +0 -63
- package/build/lib/task/task.js.map +0 -1
- package/build/lib/version-history/index.d.ts +0 -3
- package/build/lib/version-history/index.d.ts.map +0 -1
- package/build/lib/version-history/index.js +0 -2
- package/build/lib/version-history/index.js.map +0 -1
- package/build/lib/version-history/types.d.ts +0 -64
- package/build/lib/version-history/types.d.ts.map +0 -1
- package/build/lib/version-history/types.js +0 -5
- package/build/lib/version-history/types.js.map +0 -1
- package/build/lib/version-history/version-history.d.ts +0 -85
- package/build/lib/version-history/version-history.d.ts.map +0 -1
- package/build/lib/version-history/version-history.js +0 -248
- package/build/lib/version-history/version-history.js.map +0 -1
- package/build/sandbox.d.ts +0 -2
- package/build/sandbox.d.ts.map +0 -1
- package/build/sandbox.js +0 -18
- package/build/sandbox.js.map +0 -1
- package/build/template/components/ArgumentAnnotation.js +0 -10
- package/build/template/components/ArgumentAnnotation.js.map +0 -1
- package/build/template/components/ArgumentList.js +0 -9
- package/build/template/components/ArgumentList.js.map +0 -1
- package/build/template/components/ArgumentListAnnotation.js +0 -15
- package/build/template/components/ArgumentListAnnotation.js.map +0 -1
- package/build/template/components/Changelog.js +0 -44
- package/build/template/components/Changelog.js.map +0 -1
- package/build/template/components/CodeBlockEnhancer.d.ts +0 -2
- package/build/template/components/CodeBlockEnhancer.d.ts.map +0 -1
- package/build/template/components/CodeBlockEnhancer.js +0 -175
- package/build/template/components/CodeBlockEnhancer.js.map +0 -1
- package/build/template/components/DeprecationReason.js +0 -9
- package/build/template/components/DeprecationReason.js.map +0 -1
- package/build/template/components/Description.js +0 -9
- package/build/template/components/Description.js.map +0 -1
- package/build/template/components/Field.js +0 -14
- package/build/template/components/Field.js.map +0 -1
- package/build/template/components/FieldList.js.map +0 -1
- package/build/template/components/FieldListSection.js.map +0 -1
- package/build/template/components/HamburgerMenu.d.ts +0 -9
- package/build/template/components/HamburgerMenu.d.ts.map +0 -1
- package/build/template/components/HamburgerMenu.js +0 -30
- package/build/template/components/HamburgerMenu.js.map +0 -1
- package/build/template/components/Link.js.map +0 -1
- package/build/template/components/Logo.js +0 -20
- package/build/template/components/Logo.js.map +0 -1
- package/build/template/components/MDXComponents.d.ts +0 -11
- package/build/template/components/MDXComponents.d.ts.map +0 -1
- package/build/template/components/MDXComponents.js +0 -70
- package/build/template/components/MDXComponents.js.map +0 -1
- package/build/template/components/Markdown.js.map +0 -1
- package/build/template/components/MissingSchema.js +0 -5
- package/build/template/components/MissingSchema.js.map +0 -1
- package/build/template/components/NamedType.js +0 -12
- package/build/template/components/NamedType.js.map +0 -1
- package/build/template/components/NotFound.d.ts +0 -2
- package/build/template/components/NotFound.d.ts.map +0 -1
- package/build/template/components/NotFound.js +0 -7
- package/build/template/components/NotFound.js.map +0 -1
- package/build/template/components/RadixLink.js.map +0 -1
- package/build/template/components/TestComponent.d.ts +0 -5
- package/build/template/components/TestComponent.d.ts.map +0 -1
- package/build/template/components/TestComponent.js +0 -7
- package/build/template/components/TestComponent.js.map +0 -1
- package/build/template/components/Texts/MinorHeading.js.map +0 -1
- package/build/template/components/ThemeToggle.d.ts +0 -3
- package/build/template/components/ThemeToggle.d.ts.map +0 -1
- package/build/template/components/ThemeToggle.js +0 -9
- package/build/template/components/ThemeToggle.js.map +0 -1
- package/build/template/components/TypeAnnotation.js.map +0 -1
- package/build/template/components/TypeFieldsLinkList.js +0 -9
- package/build/template/components/TypeFieldsLinkList.js.map +0 -1
- package/build/template/components/TypeIndex.js +0 -17
- package/build/template/components/TypeIndex.js.map +0 -1
- package/build/template/components/content/$$.d.ts +0 -3
- package/build/template/components/content/$$.d.ts.map +0 -1
- package/build/template/components/content/$$.js +0 -3
- package/build/template/components/content/$$.js.map +0 -1
- package/build/template/components/content/GraphQLDocumentWithSchema.d.ts +0 -8
- package/build/template/components/content/GraphQLDocumentWithSchema.d.ts.map +0 -1
- package/build/template/components/content/GraphQLDocumentWithSchema.js +0 -13
- package/build/template/components/content/GraphQLDocumentWithSchema.js.map +0 -1
- package/build/template/components/content/GraphQLDocumentWrapper.d.ts +0 -7
- package/build/template/components/content/GraphQLDocumentWrapper.d.ts.map +0 -1
- package/build/template/components/content/GraphQLDocumentWrapper.js +0 -63
- package/build/template/components/content/GraphQLDocumentWrapper.js.map +0 -1
- package/build/template/components/graphql/graphql.js +0 -3
- package/build/template/components/graphql/graphql.js.map +0 -1
- package/build/template/components/graphql/type-kind-icon.js.map +0 -1
- package/build/template/components/graphql/type-link.js +0 -11
- package/build/template/components/graphql/type-link.js.map +0 -1
- package/build/template/components/sidebar/Sidebar.js +0 -11
- package/build/template/components/sidebar/Sidebar.js.map +0 -1
- package/build/template/components/sidebar/SidebarItem.js.map +0 -1
- package/build/template/components/sidebar/ToggleButton.js +0 -5
- package/build/template/components/sidebar/ToggleButton.js.map +0 -1
- package/build/template/contexts/ThemeContext.d.ts +0 -12
- package/build/template/contexts/ThemeContext.d.ts.map +0 -1
- package/build/template/contexts/ThemeContext.js +0 -40
- package/build/template/contexts/ThemeContext.js.map +0 -1
- package/build/template/entry.client.js.map +0 -1
- package/build/template/hooks/useClientOnly.d.ts +0 -9
- package/build/template/hooks/useClientOnly.d.ts.map +0 -1
- package/build/template/hooks/useClientOnly.js +0 -16
- package/build/template/hooks/useClientOnly.js.map +0 -1
- package/build/template/routes/changelog.js.map +0 -1
- package/build/template/routes/index.js.map +0 -1
- package/build/template/routes/reference.$type.$field.js.map +0 -1
- package/build/template/routes/reference.$type.js.map +0 -1
- package/build/template/routes/reference.js.map +0 -1
- package/build/template/routes/root.js +0 -138
- package/build/template/routes/root.js.map +0 -1
- package/build/template/routes.js +0 -5
- package/build/template/routes.js.map +0 -1
- package/build/template/server/create-page-html-response.d.ts +0 -7
- package/build/template/server/create-page-html-response.d.ts.map +0 -1
- package/build/template/server/create-page-html-response.js.map +0 -1
- package/build/template/server/middleware/page.d.ts +0 -4
- package/build/template/server/middleware/page.d.ts.map +0 -1
- package/build/template/server/middleware/page.js +0 -15
- package/build/template/server/middleware/page.js.map +0 -1
- package/build/template/server/middleware/unsupported-assets.d.ts +0 -10
- package/build/template/server/middleware/unsupported-assets.d.ts.map +0 -1
- package/build/template/server/middleware/unsupported-assets.js +0 -21
- package/build/template/server/middleware/unsupported-assets.js.map +0 -1
- package/build/template/styles/code-block.css +0 -218
- package/src/api/content/$$.ts +0 -6
- package/src/api/content/$.test.ts +0 -72
- package/src/api/content/$.ts +0 -1
- package/src/api/content/metadata.ts +0 -11
- package/src/api/content/navbar.test.ts +0 -55
- package/src/api/content/navbar.ts +0 -61
- package/src/api/content/page.ts +0 -12
- package/src/api/content/scan.ts +0 -117
- package/src/api/content/sidebar.test.ts +0 -297
- package/src/api/content/sidebar.ts +0 -283
- package/src/api/content/utils.ts +0 -7
- package/src/api/static/index.ts +0 -1
- package/src/api/static/manifest.test.ts +0 -106
- package/src/api/static/manifest.ts +0 -16
- package/src/api/static/rebase.test.ts +0 -229
- package/src/api/static/rebase.ts +0 -140
- package/src/api/static/static.ts +0 -2
- package/src/cli/commands/static/$default.ts +0 -43
- package/src/cli/commands/static/rebase.ts +0 -37
- package/src/cli/commands/static.ts +0 -6
- package/src/exports/components.ts +0 -4
- package/src/lib/demos/builder.ts +0 -298
- package/src/lib/demos/config-schema.ts +0 -56
- package/src/lib/demos/config.test.ts +0 -193
- package/src/lib/demos/config.ts +0 -205
- package/src/lib/demos/index.ts +0 -9
- package/src/lib/demos/ui/components.ts +0 -739
- package/src/lib/demos/ui/data-collector.ts +0 -246
- package/src/lib/demos/ui/landing-page-cli.ts +0 -23
- package/src/lib/demos/ui/landing-page.ts +0 -126
- package/src/lib/demos/ui/page-renderer.ts +0 -124
- package/src/lib/demos/utils.ts +0 -43
- package/src/lib/deployment/$$.ts +0 -2
- package/src/lib/deployment/$.test.ts +0 -53
- package/src/lib/deployment/$.ts +0 -1
- package/src/lib/deployment/metadata.ts +0 -40
- package/src/lib/deployment/path-manager.ts +0 -186
- package/src/lib/github-actions/git-controller.ts +0 -151
- package/src/lib/github-actions/github-actions.ts +0 -6
- package/src/lib/github-actions/index.ts +0 -1
- package/src/lib/github-actions/lib/get-pr-deployments.ts +0 -76
- package/src/lib/github-actions/pr-controller.test.ts +0 -172
- package/src/lib/github-actions/pr-controller.ts +0 -183
- package/src/lib/github-actions/run-step-cli.ts +0 -84
- package/src/lib/github-actions/runner.test.ts +0 -192
- package/src/lib/github-actions/runner.ts +0 -226
- package/src/lib/github-actions/schemas/context.ts +0 -424
- package/src/lib/github-actions/schemas/index.ts +0 -5
- package/src/lib/github-actions/search-module.test.ts +0 -110
- package/src/lib/github-actions/search-module.ts +0 -76
- package/src/lib/github-actions/step.test.ts +0 -149
- package/src/lib/github-actions/step.ts +0 -232
- package/src/lib/graphql-document/$$.ts +0 -4
- package/src/lib/graphql-document/$.test.ts +0 -132
- package/src/lib/graphql-document/$.ts +0 -1
- package/src/lib/graphql-document/README.md +0 -102
- package/src/lib/graphql-document/analysis.ts +0 -415
- package/src/lib/graphql-document/components/CopyButton.tsx +0 -76
- package/src/lib/graphql-document/components/GraphQLDocument.tsx +0 -262
- package/src/lib/graphql-document/components/GraphQLDocument.unit.test.ts +0 -188
- package/src/lib/graphql-document/components/GraphQLDocumentWithSchema.tsx +0 -70
- package/src/lib/graphql-document/components/GraphQLIdentifierPopover.tsx +0 -197
- package/src/lib/graphql-document/components/IdentifierLink.tsx +0 -160
- package/src/lib/graphql-document/components/graphql-document-styles.ts +0 -167
- package/src/lib/graphql-document/components/index.ts +0 -5
- package/src/lib/graphql-document/demo.md +0 -155
- package/src/lib/graphql-document/example.ts +0 -163
- package/src/lib/graphql-document/graphql-document.ts +0 -37
- package/src/lib/graphql-document/hooks/use-tooltip-state.test.ts +0 -76
- package/src/lib/graphql-document/hooks/use-tooltip-state.ts +0 -191
- package/src/lib/graphql-document/positioning-simple.test.ts +0 -248
- package/src/lib/graphql-document/positioning-simple.ts +0 -260
- package/src/lib/graphql-document/schema-context.tsx +0 -20
- package/src/lib/graphql-document/schema-integration-example.ts +0 -341
- package/src/lib/graphql-document/schema-integration.test.ts +0 -365
- package/src/lib/graphql-document/schema-integration.ts +0 -497
- package/src/lib/graphql-document/types.ts +0 -129
- package/src/lib/kit-temp.test-d.ts +0 -115
- package/src/lib/kit-temp.test.ts +0 -139
- package/src/lib/mask/$$.ts +0 -2
- package/src/lib/mask/$.test.ts +0 -248
- package/src/lib/mask/$.ts +0 -1
- package/src/lib/mask/apply.ts +0 -134
- package/src/lib/mask/mask.test-d.ts +0 -144
- package/src/lib/mask/mask.ts +0 -244
- package/src/lib/task/$$.ts +0 -2
- package/src/lib/task/$.test.ts +0 -209
- package/src/lib/task/$.ts +0 -1
- package/src/lib/task/report.ts +0 -72
- package/src/lib/task/task.ts +0 -112
- package/src/lib/version-history/index.test.ts +0 -196
- package/src/lib/version-history/index.ts +0 -4
- package/src/lib/version-history/types.ts +0 -68
- package/src/lib/version-history/version-history.ts +0 -293
- package/src/sandbox.ts +0 -20
- package/src/template/components/CodeBlockEnhancer.tsx +0 -192
- package/src/template/components/HamburgerMenu.tsx +0 -96
- package/src/template/components/MDXComponents.tsx +0 -101
- package/src/template/components/NotFound.tsx +0 -28
- package/src/template/components/TestComponent.tsx +0 -6
- package/src/template/components/ThemeToggle.tsx +0 -21
- package/src/template/components/content/$$.ts +0 -2
- package/src/template/components/content/GraphQLDocumentWithSchema.tsx +0 -13
- package/src/template/components/content/GraphQLDocumentWrapper.tsx +0 -89
- package/src/template/contexts/ThemeContext.tsx +0 -60
- package/src/template/hooks/useClientOnly.ts +0 -21
- package/src/template/server/middleware/page.ts +0 -19
- package/src/template/server/middleware/unsupported-assets.ts +0 -25
- /package/build/lib/{graphql-document → file-router/sidebar}/types.js +0 -0
@@ -1,115 +0,0 @@
|
|
1
|
-
import { Ts } from '@wollybeard/kit'
|
2
|
-
import { objFilter, ObjOmit, ObjPick, objPolicyFilter } from './kit-temp.js'
|
3
|
-
import type { ObjPolicyFilter } from './kit-temp.js'
|
4
|
-
|
5
|
-
// Test object for all tests
|
6
|
-
type TestObj = { a: string; b: number; c: boolean; d: string[] }
|
7
|
-
declare const testObj: TestObj
|
8
|
-
|
9
|
-
// Test 1: objPolicyFilter with allow mode
|
10
|
-
{
|
11
|
-
const result = objPolicyFilter('allow', testObj, ['a', 'c'] as const)
|
12
|
-
Ts.assertEqual<{ a: string; c: boolean }>()(result)
|
13
|
-
}
|
14
|
-
|
15
|
-
// Test 2: objPolicyFilter with deny mode
|
16
|
-
{
|
17
|
-
const result = objPolicyFilter('deny', testObj, ['a', 'c'] as const)
|
18
|
-
Ts.assertEqual<{ b: number; d: string[] }>()(result)
|
19
|
-
}
|
20
|
-
|
21
|
-
// Test 3: objFilter returns Partial<T>
|
22
|
-
{
|
23
|
-
const result = objFilter(testObj, (key, value) => value !== 'hello')
|
24
|
-
Ts.assertEqual<Partial<TestObj>>()(result)
|
25
|
-
|
26
|
-
// All properties are optional
|
27
|
-
Ts.assertSub<typeof result.a>()(undefined)
|
28
|
-
Ts.assertSub<typeof result.b>()(undefined)
|
29
|
-
Ts.assertSub<typeof result.c>()(undefined)
|
30
|
-
Ts.assertSub<typeof result.d>()(undefined)
|
31
|
-
}
|
32
|
-
|
33
|
-
// Test 4: ObjPick type inference
|
34
|
-
{
|
35
|
-
const result = ObjPick(testObj, ['a', 'c'] as const)
|
36
|
-
Ts.assertEqual<{ a: string; c: boolean }>()(result)
|
37
|
-
}
|
38
|
-
|
39
|
-
// Test 5: ObjOmit type inference
|
40
|
-
{
|
41
|
-
const result = ObjOmit(testObj, ['a', 'c'] as const)
|
42
|
-
Ts.assertEqual<{ b: number; d: string[] }>()(result)
|
43
|
-
}
|
44
|
-
|
45
|
-
// Test 6: ObjPolicyFilter type-level function
|
46
|
-
{
|
47
|
-
type Allow = ObjPolicyFilter<TestObj, 'a' | 'c', 'allow'>
|
48
|
-
type _TestAllow = Ts.AssertEqual<Allow, { a: string; c: boolean }>
|
49
|
-
|
50
|
-
type Deny = ObjPolicyFilter<TestObj, 'a' | 'c', 'deny'>
|
51
|
-
type _TestDeny = Ts.AssertEqual<Deny, { b: number; d: string[] }>
|
52
|
-
|
53
|
-
type AllowEmpty = ObjPolicyFilter<TestObj, never, 'allow'>
|
54
|
-
type _TestAllowEmpty = Ts.AssertEqual<AllowEmpty, {}>
|
55
|
-
|
56
|
-
type DenyEmpty = ObjPolicyFilter<TestObj, never, 'deny'>
|
57
|
-
type _TestDenyEmpty = Ts.AssertEqual<DenyEmpty, TestObj>
|
58
|
-
}
|
59
|
-
|
60
|
-
// Test 7: Edge cases
|
61
|
-
{
|
62
|
-
// Empty object
|
63
|
-
const empty = {}
|
64
|
-
const allowEmpty = objPolicyFilter('allow', empty, [])
|
65
|
-
const denyEmpty = objPolicyFilter('deny', empty, [])
|
66
|
-
const filterEmpty = objFilter(empty, () => true)
|
67
|
-
|
68
|
-
Ts.assertEqual<{}>()(allowEmpty)
|
69
|
-
Ts.assertEqual<{}>()(denyEmpty)
|
70
|
-
Ts.assertEqual<{}>()(filterEmpty)
|
71
|
-
|
72
|
-
// Single property object
|
73
|
-
const single = { a: 1 }
|
74
|
-
const allowSingle = objPolicyFilter('allow', single, ['a'] as const)
|
75
|
-
const denySingle = objPolicyFilter('deny', single, ['a'] as const)
|
76
|
-
const filterSingle = objFilter(single, () => true)
|
77
|
-
|
78
|
-
Ts.assertEqual<{ a: number }>()(allowSingle)
|
79
|
-
Ts.assertEqual<{}>()(denySingle)
|
80
|
-
Ts.assertEqual<{ a?: number }>()(filterSingle)
|
81
|
-
}
|
82
|
-
|
83
|
-
// Test 8: Complex nested object
|
84
|
-
{
|
85
|
-
type ComplexObj = {
|
86
|
-
nested: { a: string; b: number }
|
87
|
-
array: string[]
|
88
|
-
optional?: boolean
|
89
|
-
readonly ro: string
|
90
|
-
}
|
91
|
-
const complexObj = {} as ComplexObj
|
92
|
-
|
93
|
-
const picked = objPolicyFilter('allow', complexObj, ['nested', 'optional'] as const)
|
94
|
-
Ts.assertEqual<{ nested: { a: string; b: number }; optional?: boolean }>()(picked)
|
95
|
-
|
96
|
-
const omitted = objPolicyFilter('deny', complexObj, ['nested', 'optional'] as const)
|
97
|
-
Ts.assertEqual<{ array: string[]; readonly ro: string }>()(omitted)
|
98
|
-
|
99
|
-
const filtered = objFilter(complexObj, (key) => key !== 'array')
|
100
|
-
Ts.assertEqual<Partial<ComplexObj>>()(filtered)
|
101
|
-
}
|
102
|
-
|
103
|
-
// Test 9: Keys parameter type inference
|
104
|
-
{
|
105
|
-
// With const assertion
|
106
|
-
const keys1 = ['a', 'c'] as const
|
107
|
-
const result1 = objPolicyFilter('allow', testObj, keys1)
|
108
|
-
Ts.assertEqual<{ a: string; c: boolean }>()(result1)
|
109
|
-
|
110
|
-
// Without const assertion (wider type)
|
111
|
-
const keys2: (keyof TestObj)[] = ['a', 'c']
|
112
|
-
const result2 = objPolicyFilter('allow', testObj, keys2)
|
113
|
-
// Result is a union of all possible picks
|
114
|
-
type Result2 = typeof result2 // Pick<TestObj, keyof TestObj>
|
115
|
-
}
|
package/src/lib/kit-temp.test.ts
DELETED
@@ -1,139 +0,0 @@
|
|
1
|
-
import * as fc from 'fast-check'
|
2
|
-
import { describe, expect, test } from 'vitest'
|
3
|
-
import { objFilter, ObjOmit, ObjPick, objPolicyFilter } from './kit-temp.js'
|
4
|
-
|
5
|
-
describe('objPolicyFilter', () => {
|
6
|
-
const testObj = { a: 1, b: 2, c: 3, d: 4 }
|
7
|
-
|
8
|
-
test('allow mode picks specified keys', () => {
|
9
|
-
expect(objPolicyFilter('allow', testObj, ['a', 'c'])).toEqual({ a: 1, c: 3 })
|
10
|
-
expect(objPolicyFilter('allow', testObj, [])).toEqual({})
|
11
|
-
expect(objPolicyFilter('allow', testObj, ['a', 'z'] as any)).toEqual({ a: 1 })
|
12
|
-
})
|
13
|
-
|
14
|
-
test('deny mode omits specified keys', () => {
|
15
|
-
expect(objPolicyFilter('deny', testObj, ['a', 'c'])).toEqual({ b: 2, d: 4 })
|
16
|
-
expect(objPolicyFilter('deny', testObj, [])).toEqual(testObj)
|
17
|
-
expect(objPolicyFilter('deny', testObj, ['z'] as any)).toEqual(testObj)
|
18
|
-
})
|
19
|
-
|
20
|
-
test('preserves undefined values', () => {
|
21
|
-
const obj = { a: 1, b: undefined, c: 3 }
|
22
|
-
expect(objPolicyFilter('allow', obj, ['a', 'b'])).toEqual({ a: 1, b: undefined })
|
23
|
-
})
|
24
|
-
})
|
25
|
-
|
26
|
-
describe('objFilter', () => {
|
27
|
-
const testObj = { a: 1, b: 2, c: 3, d: 4 }
|
28
|
-
|
29
|
-
test('filters by predicates', () => {
|
30
|
-
// By value
|
31
|
-
expect(objFilter(testObj, (k, v) => v > 2)).toEqual({ c: 3, d: 4 })
|
32
|
-
|
33
|
-
// By key
|
34
|
-
expect(objFilter(testObj, k => k === 'a' || k === 'c')).toEqual({ a: 1, c: 3 })
|
35
|
-
|
36
|
-
// By full object context
|
37
|
-
expect(objFilter(testObj, (k, v, obj) => {
|
38
|
-
const avg = Object.values(obj).reduce((a, b) => a + b, 0) / Object.keys(obj).length
|
39
|
-
return v < avg
|
40
|
-
})).toEqual({ a: 1, b: 2 })
|
41
|
-
})
|
42
|
-
|
43
|
-
test('edge cases', () => {
|
44
|
-
expect(objFilter(testObj, () => false)).toEqual({})
|
45
|
-
expect(objFilter(testObj, () => true)).toEqual(testObj)
|
46
|
-
expect(objFilter({}, () => true)).toEqual({})
|
47
|
-
})
|
48
|
-
})
|
49
|
-
|
50
|
-
describe('ObjPick and ObjOmit', () => {
|
51
|
-
test('are aliases for objPolicyFilter', () => {
|
52
|
-
const obj = { a: 1, b: 2, c: 3 }
|
53
|
-
const keys = ['a', 'c'] as const
|
54
|
-
|
55
|
-
expect(ObjPick(obj, keys)).toEqual(objPolicyFilter('allow', obj, keys))
|
56
|
-
expect(ObjOmit(obj, keys)).toEqual(objPolicyFilter('deny', obj, keys))
|
57
|
-
})
|
58
|
-
})
|
59
|
-
|
60
|
-
describe('property-based tests', () => {
|
61
|
-
test('objPolicyFilter allow/deny are complementary', () => {
|
62
|
-
fc.assert(
|
63
|
-
fc.property(
|
64
|
-
fc.object(),
|
65
|
-
fc.array(fc.string()),
|
66
|
-
(obj, keys) => {
|
67
|
-
const allowed = objPolicyFilter('allow', obj, keys)
|
68
|
-
const denied = objPolicyFilter('deny', obj, keys)
|
69
|
-
|
70
|
-
// Every key in obj is either in allowed or denied, never both
|
71
|
-
Object.keys(obj).forEach(key => {
|
72
|
-
const inAllowed = Object.prototype.hasOwnProperty.call(allowed, key)
|
73
|
-
const inDenied = Object.prototype.hasOwnProperty.call(denied, key)
|
74
|
-
expect(inAllowed).toBe(!inDenied)
|
75
|
-
})
|
76
|
-
|
77
|
-
// Combined they reconstruct the original object (only own properties)
|
78
|
-
const reconstructed = { ...allowed, ...denied }
|
79
|
-
const ownPropsObj = Object.keys(obj).reduce((acc, key) => {
|
80
|
-
acc[key] = obj[key]
|
81
|
-
return acc
|
82
|
-
}, {} as any)
|
83
|
-
expect(reconstructed).toEqual(ownPropsObj)
|
84
|
-
},
|
85
|
-
),
|
86
|
-
)
|
87
|
-
})
|
88
|
-
|
89
|
-
test('objFilter preserves values unchanged', () => {
|
90
|
-
fc.assert(
|
91
|
-
fc.property(
|
92
|
-
fc.object(),
|
93
|
-
(obj) => {
|
94
|
-
const filtered = objFilter(obj, () => true)
|
95
|
-
|
96
|
-
// Object.keys doesn't include __proto__, so we need to handle it specially
|
97
|
-
const objWithoutProto = Object.keys(obj).reduce((acc, key) => {
|
98
|
-
acc[key] = obj[key]
|
99
|
-
return acc
|
100
|
-
}, {} as any)
|
101
|
-
|
102
|
-
expect(filtered).toEqual(objWithoutProto)
|
103
|
-
|
104
|
-
// Values are the same reference
|
105
|
-
Object.keys(filtered).forEach(key => {
|
106
|
-
expect(filtered[key]).toBe(obj[key])
|
107
|
-
})
|
108
|
-
},
|
109
|
-
),
|
110
|
-
)
|
111
|
-
})
|
112
|
-
|
113
|
-
test('objPolicyFilter is immutable', () => {
|
114
|
-
fc.assert(
|
115
|
-
fc.property(
|
116
|
-
fc.object(),
|
117
|
-
fc.array(fc.string()),
|
118
|
-
fc.oneof(fc.constant('allow' as const), fc.constant('deny' as const)),
|
119
|
-
(obj, keys, mode) => {
|
120
|
-
const original = { ...obj }
|
121
|
-
objPolicyFilter(mode, obj, keys)
|
122
|
-
expect(obj).toEqual(original)
|
123
|
-
},
|
124
|
-
),
|
125
|
-
)
|
126
|
-
})
|
127
|
-
|
128
|
-
test('empty keys behavior', () => {
|
129
|
-
fc.assert(
|
130
|
-
fc.property(
|
131
|
-
fc.object(),
|
132
|
-
(obj) => {
|
133
|
-
expect(objPolicyFilter('allow', obj, [])).toEqual({})
|
134
|
-
expect(objPolicyFilter('deny', obj, [])).toEqual(obj)
|
135
|
-
},
|
136
|
-
),
|
137
|
-
)
|
138
|
-
})
|
139
|
-
})
|
package/src/lib/mask/$$.ts
DELETED
package/src/lib/mask/$.test.ts
DELETED
@@ -1,248 +0,0 @@
|
|
1
|
-
import * as fc from 'fast-check'
|
2
|
-
import { describe, expect, test } from 'vitest'
|
3
|
-
import { Mask } from './$.ts'
|
4
|
-
|
5
|
-
describe('Mask.create', () => {
|
6
|
-
test('boolean options create binary masks', () => {
|
7
|
-
const showMask = Mask.create(true)
|
8
|
-
const hideMask = Mask.create(false)
|
9
|
-
|
10
|
-
expect(showMask.type).toBe('binary')
|
11
|
-
expect(hideMask.type).toBe('binary')
|
12
|
-
|
13
|
-
if (showMask.type === 'binary' && hideMask.type === 'binary') {
|
14
|
-
expect(showMask.show).toBe(true)
|
15
|
-
expect(hideMask.show).toBe(false)
|
16
|
-
}
|
17
|
-
})
|
18
|
-
|
19
|
-
test('array options create allow mode properties mask', () => {
|
20
|
-
const mask = Mask.create(['name', 'age'])
|
21
|
-
|
22
|
-
expect(mask.type).toBe('properties')
|
23
|
-
if (mask.type === 'properties') {
|
24
|
-
expect(mask.mode).toBe('allow')
|
25
|
-
expect(mask.properties).toEqual(['name', 'age'])
|
26
|
-
}
|
27
|
-
})
|
28
|
-
|
29
|
-
test('object options create mode based on values', () => {
|
30
|
-
const allowMask = Mask.create({ name: true, age: true, password: false })
|
31
|
-
const denyMask = Mask.create({ password: false, secret: false })
|
32
|
-
|
33
|
-
expect(allowMask.type).toBe('properties')
|
34
|
-
expect(denyMask.type).toBe('properties')
|
35
|
-
|
36
|
-
if (allowMask.type === 'properties' && denyMask.type === 'properties') {
|
37
|
-
expect(allowMask.mode).toBe('allow')
|
38
|
-
expect(allowMask.properties).toEqual(['name', 'age'])
|
39
|
-
|
40
|
-
expect(denyMask.mode).toBe('deny')
|
41
|
-
expect(denyMask.properties).toEqual(['password', 'secret'])
|
42
|
-
}
|
43
|
-
})
|
44
|
-
})
|
45
|
-
|
46
|
-
describe('Mask.apply', () => {
|
47
|
-
test('binary masks show/hide data', () => {
|
48
|
-
const data = { a: 1 }
|
49
|
-
|
50
|
-
expect(Mask.apply(data, Mask.create(true))).toBe(data)
|
51
|
-
expect(Mask.apply(data, Mask.create(false))).toBe(undefined)
|
52
|
-
})
|
53
|
-
|
54
|
-
test('properties masks filter objects', () => {
|
55
|
-
const data = { name: 'John', age: 30, password: 'secret' }
|
56
|
-
|
57
|
-
// Allow mode
|
58
|
-
const allowMask = Mask.create(['name', 'age'])
|
59
|
-
expect(Mask.apply(data, allowMask)).toEqual({ name: 'John', age: 30 })
|
60
|
-
|
61
|
-
// Deny mode
|
62
|
-
const denyMask = Mask.create({ password: false })
|
63
|
-
expect(Mask.apply(data, denyMask)).toEqual({ name: 'John', age: 30 })
|
64
|
-
})
|
65
|
-
|
66
|
-
test('properties masks throw for non-objects', () => {
|
67
|
-
const mask = Mask.create(['name'])
|
68
|
-
|
69
|
-
expect(() => Mask.apply('string' as any, mask)).toThrow()
|
70
|
-
expect(() => Mask.apply(123 as any, mask)).toThrow()
|
71
|
-
expect(() => Mask.apply(null as any, mask)).toThrow()
|
72
|
-
})
|
73
|
-
})
|
74
|
-
|
75
|
-
describe('apply variants', () => {
|
76
|
-
test('applyPartial allows missing properties', () => {
|
77
|
-
const mask = Mask.create<{ name: string; age: number }>(['name', 'age'])
|
78
|
-
const partial = { name: 'John' }
|
79
|
-
|
80
|
-
expect(Mask.applyPartial(partial, mask)).toEqual({ name: 'John' })
|
81
|
-
expect(Mask.applyPartial({}, mask)).toEqual({})
|
82
|
-
})
|
83
|
-
|
84
|
-
test('applyExact works with any data for binary masks', () => {
|
85
|
-
const showMask = Mask.create(true)
|
86
|
-
const hideMask = Mask.create(false)
|
87
|
-
|
88
|
-
expect(Mask.applyExact('hello' as any, showMask)).toBe('hello')
|
89
|
-
expect(Mask.applyExact('hello' as any, hideMask)).toBe(undefined)
|
90
|
-
})
|
91
|
-
})
|
92
|
-
|
93
|
-
describe('property-based tests', () => {
|
94
|
-
test('binary masks - invariants', () => {
|
95
|
-
fc.assert(
|
96
|
-
fc.property(fc.anything(), (data) => {
|
97
|
-
expect(Mask.apply(data, Mask.create(true))).toBe(data)
|
98
|
-
expect(Mask.apply(data, Mask.create(false))).toBe(undefined)
|
99
|
-
}),
|
100
|
-
)
|
101
|
-
})
|
102
|
-
|
103
|
-
test('properties mask - allow mode filters correctly', () => {
|
104
|
-
fc.assert(
|
105
|
-
fc.property(
|
106
|
-
fc.dictionary(fc.string(), fc.anything()),
|
107
|
-
fc.array(fc.string(), { minLength: 1 }),
|
108
|
-
(obj, keys) => {
|
109
|
-
const mask = Mask.create(keys)
|
110
|
-
const result = Mask.apply(obj as any, mask)
|
111
|
-
const resultKeys = Object.keys(result as any)
|
112
|
-
|
113
|
-
// Result contains only keys that were in both mask and object
|
114
|
-
expect(resultKeys.every(key => keys.includes(key))).toBe(true)
|
115
|
-
|
116
|
-
// All requested keys that exist in obj are in result
|
117
|
-
keys.forEach(key => {
|
118
|
-
if (key in obj) {
|
119
|
-
expect(result).toHaveProperty(key, (obj as any)[key])
|
120
|
-
}
|
121
|
-
})
|
122
|
-
},
|
123
|
-
),
|
124
|
-
)
|
125
|
-
})
|
126
|
-
|
127
|
-
test('properties mask - deny mode filters correctly', () => {
|
128
|
-
fc.assert(
|
129
|
-
fc.property(
|
130
|
-
fc.dictionary(fc.string(), fc.anything()),
|
131
|
-
fc.uniqueArray(fc.string(), { minLength: 1 }),
|
132
|
-
(data, keysToRemove) => {
|
133
|
-
const maskSpec = Object.fromEntries(keysToRemove.map(k => [k, false]))
|
134
|
-
const mask = Mask.create(maskSpec)
|
135
|
-
|
136
|
-
expect(mask.type).toBe('properties')
|
137
|
-
if (mask.type !== 'properties') return
|
138
|
-
expect(mask.mode).toBe('deny')
|
139
|
-
|
140
|
-
const result = Mask.apply(data as any, mask)
|
141
|
-
|
142
|
-
// Result should not have any of the denied keys
|
143
|
-
keysToRemove.forEach(key => {
|
144
|
-
expect(Object.prototype.hasOwnProperty.call(result, key)).toBe(false)
|
145
|
-
})
|
146
|
-
|
147
|
-
// Result should have all other keys from data
|
148
|
-
Object.keys(data).forEach(key => {
|
149
|
-
if (!keysToRemove.includes(key)) {
|
150
|
-
expect(Object.prototype.hasOwnProperty.call(result, key)).toBe(true)
|
151
|
-
expect((result as any)[key]).toBe((data as any)[key])
|
152
|
-
}
|
153
|
-
})
|
154
|
-
},
|
155
|
-
),
|
156
|
-
)
|
157
|
-
})
|
158
|
-
|
159
|
-
test('undefined values are preserved', () => {
|
160
|
-
fc.assert(
|
161
|
-
fc.property(
|
162
|
-
fc.record({
|
163
|
-
a: fc.oneof(fc.anything(), fc.constant(undefined)),
|
164
|
-
b: fc.oneof(fc.anything(), fc.constant(undefined)),
|
165
|
-
c: fc.oneof(fc.anything(), fc.constant(undefined)),
|
166
|
-
}),
|
167
|
-
fc.shuffledSubarray(['a', 'b', 'c'], { minLength: 1 }),
|
168
|
-
(obj, keys) => {
|
169
|
-
const result = Mask.apply(obj as any, Mask.create(keys))
|
170
|
-
|
171
|
-
keys.forEach(key => {
|
172
|
-
if (key in obj) {
|
173
|
-
expect(result).toHaveProperty(key)
|
174
|
-
expect((result as any)[key]).toBe((obj as any)[key])
|
175
|
-
}
|
176
|
-
})
|
177
|
-
},
|
178
|
-
),
|
179
|
-
)
|
180
|
-
})
|
181
|
-
|
182
|
-
test('apply and applyPartial are consistent for complete data', () => {
|
183
|
-
fc.assert(
|
184
|
-
fc.property(
|
185
|
-
fc.dictionary(fc.string(), fc.anything()),
|
186
|
-
fc.array(fc.string(), { minLength: 1 }),
|
187
|
-
(data, keys) => {
|
188
|
-
const mask = Mask.create(keys)
|
189
|
-
expect(Mask.apply(data as any, mask)).toEqual(Mask.applyPartial(data as any, mask))
|
190
|
-
},
|
191
|
-
),
|
192
|
-
)
|
193
|
-
})
|
194
|
-
|
195
|
-
test('non-objects throw with properties masks', () => {
|
196
|
-
fc.assert(
|
197
|
-
fc.property(
|
198
|
-
fc.oneof(
|
199
|
-
fc.string(),
|
200
|
-
fc.integer(),
|
201
|
-
fc.boolean(),
|
202
|
-
fc.constant(null),
|
203
|
-
fc.constant(undefined),
|
204
|
-
),
|
205
|
-
fc.array(fc.string(), { minLength: 1 }),
|
206
|
-
(nonObject, keys) => {
|
207
|
-
const mask = Mask.create(keys)
|
208
|
-
expect(() => Mask.apply(nonObject as any, mask)).toThrow('Cannot apply properties mask to non-object data')
|
209
|
-
},
|
210
|
-
),
|
211
|
-
)
|
212
|
-
})
|
213
|
-
|
214
|
-
test('immutability invariants', () => {
|
215
|
-
fc.assert(
|
216
|
-
fc.property(
|
217
|
-
fc.dictionary(
|
218
|
-
fc.string(),
|
219
|
-
fc.oneof(
|
220
|
-
fc.string(),
|
221
|
-
fc.integer(),
|
222
|
-
fc.boolean(),
|
223
|
-
fc.constant(null),
|
224
|
-
),
|
225
|
-
),
|
226
|
-
fc.oneof(
|
227
|
-
fc.boolean(),
|
228
|
-
fc.array(fc.string()),
|
229
|
-
fc.dictionary(fc.string(), fc.boolean()),
|
230
|
-
),
|
231
|
-
(data, maskOptions) => {
|
232
|
-
const mask = Mask.create(maskOptions as any)
|
233
|
-
const originalData = { ...data }
|
234
|
-
const originalMask = JSON.parse(JSON.stringify(mask))
|
235
|
-
|
236
|
-
try {
|
237
|
-
Mask.apply(data as any, mask)
|
238
|
-
} catch {
|
239
|
-
// Ignore errors for invalid combinations
|
240
|
-
}
|
241
|
-
|
242
|
-
expect(data).toEqual(originalData)
|
243
|
-
expect(mask).toEqual(originalMask)
|
244
|
-
},
|
245
|
-
),
|
246
|
-
)
|
247
|
-
})
|
248
|
-
})
|
package/src/lib/mask/$.ts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
export * as Mask from './$$.ts'
|
package/src/lib/mask/apply.ts
DELETED
@@ -1,134 +0,0 @@
|
|
1
|
-
import { type ExtendsExact, objPolicyFilter } from '#lib/kit-temp'
|
2
|
-
import { Obj } from '@wollybeard/kit'
|
3
|
-
import { never } from '@wollybeard/kit/language'
|
4
|
-
import type { GetDataType, Mask } from './mask.ts'
|
5
|
-
|
6
|
-
/**
|
7
|
-
* Type-level function that applies a mask to data.
|
8
|
-
*
|
9
|
-
* @template Data - The data type
|
10
|
-
* @template M - The mask type
|
11
|
-
*
|
12
|
-
* Binary masks:
|
13
|
-
* - show=true returns the data unchanged
|
14
|
-
* - show=false returns undefined
|
15
|
-
*
|
16
|
-
* Properties masks:
|
17
|
-
* - 'allow' mode returns Pick<Data, keys>
|
18
|
-
* - 'deny' mode returns Omit<Data, keys>
|
19
|
-
* - Non-objects throw an error at runtime
|
20
|
-
*/
|
21
|
-
// dprint-ignore
|
22
|
-
export type Apply<Data, M extends Mask<any>> =
|
23
|
-
M extends { type: 'binary', show: boolean }
|
24
|
-
? M['show'] extends true
|
25
|
-
? Data
|
26
|
-
: undefined
|
27
|
-
: M extends { type: 'properties', mode: string, properties: any[] }
|
28
|
-
? Data extends object
|
29
|
-
? M['mode'] extends 'allow'
|
30
|
-
? Pick<Data, Extract<M['properties'][number], keyof Data>>
|
31
|
-
: Omit<Data, Extract<M['properties'][number], keyof Data>>
|
32
|
-
: never // Non-objects not allowed with property masks
|
33
|
-
: never
|
34
|
-
|
35
|
-
/**
|
36
|
-
* Apply mask to data with standard covariance.
|
37
|
-
*
|
38
|
-
* Data must be assignable to the mask's expected type (may have excess properties).
|
39
|
-
*
|
40
|
-
* @param data - The data to mask
|
41
|
-
* @param mask - The mask to apply
|
42
|
-
* @returns The masked data
|
43
|
-
*
|
44
|
-
* @example
|
45
|
-
* ```ts
|
46
|
-
* const user = { name: 'John', email: 'john@example.com', password: 'secret' }
|
47
|
-
* const mask = Mask.pick<User>(['name', 'email'])
|
48
|
-
* const safeUser = apply(user, mask) // { name: 'John', email: 'john@example.com' }
|
49
|
-
* ```
|
50
|
-
*/
|
51
|
-
export const apply = <
|
52
|
-
data extends GetDataType<mask>,
|
53
|
-
mask extends Mask<any>,
|
54
|
-
>(data: data, mask: mask): Apply<data, mask> => {
|
55
|
-
return applyInternal(data, mask) as Apply<data, mask>
|
56
|
-
}
|
57
|
-
|
58
|
-
/**
|
59
|
-
* Apply mask to partial data.
|
60
|
-
*
|
61
|
-
* Data may have only a subset of the mask's expected properties.
|
62
|
-
* Useful when working with incomplete data or optional fields.
|
63
|
-
*
|
64
|
-
* @param data - The partial data to mask
|
65
|
-
* @param mask - The mask to apply
|
66
|
-
* @returns The masked data
|
67
|
-
*
|
68
|
-
* @example
|
69
|
-
* ```ts
|
70
|
-
* const partialUser = { name: 'John' } // missing email
|
71
|
-
* const mask = Mask.pick<User>(['name', 'email'])
|
72
|
-
* const result = applyPartial(partialUser, mask) // { name: 'John' }
|
73
|
-
* ```
|
74
|
-
*/
|
75
|
-
export const applyPartial = <
|
76
|
-
data extends Partial<GetDataType<mask>>,
|
77
|
-
mask extends Mask<any>,
|
78
|
-
>(data: data, mask: mask): Apply<data, mask> => {
|
79
|
-
return applyInternal(data, mask) as Apply<data, mask>
|
80
|
-
}
|
81
|
-
|
82
|
-
/**
|
83
|
-
* Apply mask to data with exact type matching.
|
84
|
-
*
|
85
|
-
* Data must exactly match the mask's expected type - no missing or excess properties.
|
86
|
-
* Provides the strictest type checking.
|
87
|
-
*
|
88
|
-
* @param data - The data to mask (must exactly match expected type)
|
89
|
-
* @param mask - The mask to apply
|
90
|
-
* @returns The masked data
|
91
|
-
*
|
92
|
-
* @example
|
93
|
-
* ```ts
|
94
|
-
* type User = { name: string; email: string }
|
95
|
-
* const mask = Mask.pick<User>(['name'])
|
96
|
-
*
|
97
|
-
* // This works - exact match
|
98
|
-
* const user: User = { name: 'John', email: 'john@example.com' }
|
99
|
-
* const result = applyExact(user, mask)
|
100
|
-
*
|
101
|
-
* // This fails - has extra property
|
102
|
-
* const userWithExtra = { name: 'John', email: 'john@example.com', age: 30 }
|
103
|
-
* const result2 = applyExact(userWithExtra, mask) // Type error!
|
104
|
-
* ```
|
105
|
-
*/
|
106
|
-
export const applyExact = <
|
107
|
-
data,
|
108
|
-
mask extends Mask<any>,
|
109
|
-
>(
|
110
|
-
data: ExtendsExact<data, GetDataType<mask>>,
|
111
|
-
mask: mask,
|
112
|
-
): Apply<data, mask> => {
|
113
|
-
return applyInternal(data, mask) as Apply<data, mask>
|
114
|
-
}
|
115
|
-
|
116
|
-
// Internal implementation
|
117
|
-
const applyInternal = (data: any, mask: Mask<any>): any => {
|
118
|
-
// ━ Handle binary mask
|
119
|
-
if (mask.type === 'binary') {
|
120
|
-
return mask.show ? data : undefined
|
121
|
-
}
|
122
|
-
|
123
|
-
// ━ Handle properties mask
|
124
|
-
if (mask.type === 'properties') {
|
125
|
-
// Properties mask requires object data
|
126
|
-
if (!Obj.is(data)) {
|
127
|
-
throw new Error('Cannot apply properties mask to non-object data')
|
128
|
-
}
|
129
|
-
|
130
|
-
return objPolicyFilter(mask.mode, data, mask.properties)
|
131
|
-
}
|
132
|
-
|
133
|
-
never()
|
134
|
-
}
|