polen 0.10.0-next.14 → 0.10.0-next.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- 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 -12
- 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/demos/config-schema.d.ts +20 -20
- 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/github-actions/runner.js +2 -2
- package/build/lib/github-actions/runner.js.map +1 -1
- package/build/lib/github-actions/schemas/context.d.ts +2 -2
- package/build/lib/kit-temp.d.ts +0 -103
- package/build/lib/kit-temp.d.ts.map +1 -1
- package/build/lib/kit-temp.js +3 -239
- 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/sandbox.js +2 -17
- package/build/sandbox.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} +9 -17
- 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 -66
- 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 +1 -1
- package/src/api/vite/plugins/branding/index.ts +4 -4
- package/src/api/vite/plugins/build.ts +89 -97
- package/src/api/vite/plugins/core.ts +16 -18
- 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/deployment/$$.ts +1 -1
- package/src/lib/deployment/$.test.ts +3 -3
- package/src/lib/deployment/$.ts +1 -1
- 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/kit-temp.test.ts +7 -19
- package/src/lib/kit-temp.ts +5 -307
- package/src/lib/task/$.test.ts +3 -3
- 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/version-history/index.test.ts +4 -12
- package/src/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.ts +58 -52
- package/src/package-paths.ts +3 -3
- package/src/sandbox.ts +1 -20
- 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 +14 -22
- 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/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/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/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/exports/components.ts +0 -4
- 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/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
@@ -0,0 +1,110 @@
|
|
1
|
+
import { Tree } from '#lib/tree/index'
|
2
|
+
import { Str } from '@wollybeard/kit'
|
3
|
+
import * as FileRouter from '../file-router.ts'
|
4
|
+
import type { RouteTreeNode } from '../scan-tree.ts'
|
5
|
+
import type { ItemLink, ItemSection, Sidebar } from './types.ts'
|
6
|
+
|
7
|
+
export * from './types.ts'
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Build sidebar from tree structure
|
11
|
+
*/
|
12
|
+
export const buildFromTree = (routeTree: RouteTreeNode, basePath: FileRouter.Path): Sidebar => {
|
13
|
+
const links: ItemLink[] = []
|
14
|
+
const sections: ItemSection[] = []
|
15
|
+
|
16
|
+
// Process only the children of the root node
|
17
|
+
for (const child of routeTree.children) {
|
18
|
+
processNode(child, basePath, [], links, sections)
|
19
|
+
}
|
20
|
+
|
21
|
+
const items = [...links, ...sections]
|
22
|
+
|
23
|
+
return {
|
24
|
+
items,
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
const processNode = (
|
29
|
+
node: RouteTreeNode,
|
30
|
+
basePath: FileRouter.Path,
|
31
|
+
parentPath: string[],
|
32
|
+
links: ItemLink[],
|
33
|
+
sections: ItemSection[],
|
34
|
+
): void => {
|
35
|
+
const currentPath = [...parentPath, node.value.name]
|
36
|
+
|
37
|
+
if (node.value.type === 'directory') {
|
38
|
+
// This is a directory - create a section
|
39
|
+
const sectionPath = [...basePath, ...currentPath]
|
40
|
+
const sectionPathExp = FileRouter.pathToExpression(sectionPath)
|
41
|
+
const sectionTitle = Str.titlizeSlug(node.value.name)
|
42
|
+
|
43
|
+
const section: ItemSection = {
|
44
|
+
type: `ItemSection`,
|
45
|
+
title: sectionTitle,
|
46
|
+
pathExp: sectionPathExp.startsWith('/') ? sectionPathExp.slice(1) : sectionPathExp,
|
47
|
+
isLinkToo: false,
|
48
|
+
links: [],
|
49
|
+
}
|
50
|
+
|
51
|
+
// Check if this directory has an index file
|
52
|
+
const indexChild = node.children.find(child => child.value.type === 'file' && child.value.name === 'index')
|
53
|
+
if (indexChild) {
|
54
|
+
section.isLinkToo = true
|
55
|
+
}
|
56
|
+
|
57
|
+
// Process all non-index children as links for this section
|
58
|
+
for (const child of node.children) {
|
59
|
+
if (child.value.type === 'file' && child.value.name !== 'index' && child.value.route) {
|
60
|
+
// Pass the parent path of the route, not the section path
|
61
|
+
const routeParentPath = child.value.route.logical.path.slice(0, -1)
|
62
|
+
section.links.push(routeToItemLink(child.value.route, routeParentPath))
|
63
|
+
} else if (child.value.type === 'directory') {
|
64
|
+
// Recursively process subdirectories
|
65
|
+
// Note: This creates nested sections which the original implementation doesn't support
|
66
|
+
// For now, we'll just add the files from subdirectories to the parent section
|
67
|
+
collectFilesFromDirectory(child, child.value.route?.logical.path || [], section.links)
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
sections.push(section)
|
72
|
+
} else if (node.value.type === 'file' && node.value.route) {
|
73
|
+
// This is a top-level file - add as nav
|
74
|
+
if (node.value.name !== 'index') {
|
75
|
+
links.push(routeToItemLink(node.value.route, basePath))
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
const collectFilesFromDirectory = (
|
81
|
+
node: RouteTreeNode,
|
82
|
+
basePath: FileRouter.Path,
|
83
|
+
links: ItemLink[],
|
84
|
+
): void => {
|
85
|
+
Tree.visit(node, (n) => {
|
86
|
+
if (n.value.type === 'file' && n.value.route && n.value.name !== 'index') {
|
87
|
+
// Use the route's parent path for relative title generation
|
88
|
+
const routeParentPath = n.value.route.logical.path.slice(0, -1)
|
89
|
+
links.push(routeToItemLink(n.value.route, routeParentPath))
|
90
|
+
}
|
91
|
+
})
|
92
|
+
}
|
93
|
+
|
94
|
+
const routeToItemLink = (route: FileRouter.Route, basePath: FileRouter.Path): ItemLink => {
|
95
|
+
const pagePathExp = FileRouter.routeToPathExpression(route)
|
96
|
+
const pageRelative = FileRouter.makeRelativeUnsafe(route, basePath)
|
97
|
+
const pageRelativePathExp = FileRouter.routeToPathExpression(pageRelative)
|
98
|
+
|
99
|
+
// Remove leading slash for title generation
|
100
|
+
const titlePath = pageRelativePathExp.startsWith('/') ? pageRelativePathExp.slice(1) : pageRelativePathExp
|
101
|
+
|
102
|
+
// Use only the last segment for the title
|
103
|
+
const titleSegment = pageRelative.logical.path[pageRelative.logical.path.length - 1] || titlePath
|
104
|
+
|
105
|
+
return {
|
106
|
+
type: `ItemLink`,
|
107
|
+
pathExp: pagePathExp.startsWith('/') ? pagePathExp.slice(1) : pagePathExp,
|
108
|
+
title: Str.titlizeSlug(titleSegment),
|
109
|
+
}
|
110
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
export interface Sidebar {
|
2
|
+
items: Item[]
|
3
|
+
}
|
4
|
+
|
5
|
+
export type Item = ItemLink | ItemSection
|
6
|
+
|
7
|
+
export interface ItemLink {
|
8
|
+
type: `ItemLink`
|
9
|
+
title: string
|
10
|
+
pathExp: string
|
11
|
+
}
|
12
|
+
|
13
|
+
export interface ItemSection {
|
14
|
+
type: `ItemSection`
|
15
|
+
title: string
|
16
|
+
pathExp: string
|
17
|
+
isLinkToo: boolean
|
18
|
+
links: ItemLink[]
|
19
|
+
}
|
package/src/lib/kit-temp.test.ts
CHANGED
@@ -61,7 +61,7 @@ describe('property-based tests', () => {
|
|
61
61
|
test('objPolicyFilter allow/deny are complementary', () => {
|
62
62
|
fc.assert(
|
63
63
|
fc.property(
|
64
|
-
fc.
|
64
|
+
fc.dictionary(fc.string(), fc.anything()),
|
65
65
|
fc.array(fc.string()),
|
66
66
|
(obj, keys) => {
|
67
67
|
const allowed = objPolicyFilter('allow', obj, keys)
|
@@ -74,13 +74,8 @@ describe('property-based tests', () => {
|
|
74
74
|
expect(inAllowed).toBe(!inDenied)
|
75
75
|
})
|
76
76
|
|
77
|
-
// Combined they reconstruct the original object
|
78
|
-
|
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)
|
77
|
+
// Combined they reconstruct the original object
|
78
|
+
expect({ ...allowed, ...denied }).toEqual(obj)
|
84
79
|
},
|
85
80
|
),
|
86
81
|
)
|
@@ -89,17 +84,10 @@ describe('property-based tests', () => {
|
|
89
84
|
test('objFilter preserves values unchanged', () => {
|
90
85
|
fc.assert(
|
91
86
|
fc.property(
|
92
|
-
fc.
|
87
|
+
fc.dictionary(fc.string(), fc.anything()),
|
93
88
|
(obj) => {
|
94
89
|
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)
|
90
|
+
expect(filtered).toEqual(obj)
|
103
91
|
|
104
92
|
// Values are the same reference
|
105
93
|
Object.keys(filtered).forEach(key => {
|
@@ -113,7 +101,7 @@ describe('property-based tests', () => {
|
|
113
101
|
test('objPolicyFilter is immutable', () => {
|
114
102
|
fc.assert(
|
115
103
|
fc.property(
|
116
|
-
fc.
|
104
|
+
fc.dictionary(fc.string(), fc.anything()),
|
117
105
|
fc.array(fc.string()),
|
118
106
|
fc.oneof(fc.constant('allow' as const), fc.constant('deny' as const)),
|
119
107
|
(obj, keys, mode) => {
|
@@ -128,7 +116,7 @@ describe('property-based tests', () => {
|
|
128
116
|
test('empty keys behavior', () => {
|
129
117
|
fc.assert(
|
130
118
|
fc.property(
|
131
|
-
fc.
|
119
|
+
fc.dictionary(fc.string(), fc.anything()),
|
132
120
|
(obj) => {
|
133
121
|
expect(objPolicyFilter('allow', obj, [])).toEqual({})
|
134
122
|
expect(objPolicyFilter('deny', obj, [])).toEqual(obj)
|
package/src/lib/kit-temp.ts
CHANGED
@@ -12,8 +12,10 @@
|
|
12
12
|
//
|
13
13
|
//
|
14
14
|
|
15
|
-
import { Arr, Err, Fs, Http, Path, Undefined } from '@wollybeard/kit'
|
15
|
+
import { Arr, Err, Fs, Http, Path, type Ts, Undefined } from '@wollybeard/kit'
|
16
|
+
import { never } from '@wollybeard/kit/language'
|
16
17
|
import type { ResolveHookContext } from 'node:module'
|
18
|
+
import type { IsNever } from 'type-fest'
|
17
19
|
|
18
20
|
export const arrayEquals = (a: any[], b: any[]) => {
|
19
21
|
if (a.length !== b.length) return false
|
@@ -107,7 +109,7 @@ export const objPolicyFilter = <
|
|
107
109
|
if (mode === 'allow') {
|
108
110
|
// For allow mode, only add specified keys
|
109
111
|
for (const key of keys) {
|
110
|
-
if (
|
112
|
+
if (key in obj) {
|
111
113
|
// @ts-expect-error
|
112
114
|
result[key] = obj[key]
|
113
115
|
}
|
@@ -141,9 +143,7 @@ export const objFilter = <T extends object>(
|
|
141
143
|
predicate: (key: keyof T, value: T[keyof T], obj: T) => boolean,
|
142
144
|
): Partial<T> => {
|
143
145
|
const result = {} as Partial<T>
|
144
|
-
|
145
|
-
// This matches the behavior of for...in but only for own properties
|
146
|
-
for (const key of Object.keys(obj) as (keyof T)[]) {
|
146
|
+
for (const key in obj) {
|
147
147
|
if (predicate(key, obj[key], obj)) {
|
148
148
|
result[key] = obj[key]
|
149
149
|
}
|
@@ -218,305 +218,3 @@ export type ExtendsExact<$Input, $Constraint> =
|
|
218
218
|
? $Input
|
219
219
|
: never
|
220
220
|
: never
|
221
|
-
|
222
|
-
/**
|
223
|
-
* Split an array into chunks of specified size
|
224
|
-
*
|
225
|
-
* @param array - The array to chunk
|
226
|
-
* @param size - The size of each chunk
|
227
|
-
* @returns Array of chunks
|
228
|
-
*
|
229
|
-
* @example
|
230
|
-
* ```ts
|
231
|
-
* chunk([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
|
232
|
-
* chunk(['a', 'b', 'c'], 3) // [['a', 'b', 'c']]
|
233
|
-
* ```
|
234
|
-
*/
|
235
|
-
export const chunk = <T>(array: readonly T[], size: number): T[][] => {
|
236
|
-
if (size <= 0) throw new Error('Chunk size must be greater than 0')
|
237
|
-
if (array.length === 0) return []
|
238
|
-
|
239
|
-
const chunks: T[][] = []
|
240
|
-
for (let i = 0; i < array.length; i += size) {
|
241
|
-
chunks.push(array.slice(i, i + size))
|
242
|
-
}
|
243
|
-
return chunks
|
244
|
-
}
|
245
|
-
|
246
|
-
export interface AsyncParallelOptions {
|
247
|
-
/**
|
248
|
-
* Maximum number of items to process concurrently
|
249
|
-
* @default 10
|
250
|
-
*/
|
251
|
-
concurrency?: number
|
252
|
-
|
253
|
-
/**
|
254
|
-
* If true, stops processing on first error
|
255
|
-
* If false, continues processing all items even if some fail
|
256
|
-
* @default false
|
257
|
-
*/
|
258
|
-
failFast?: boolean
|
259
|
-
|
260
|
-
/**
|
261
|
-
* Size of batches to process items in
|
262
|
-
* If not specified, all items are processed with the specified concurrency
|
263
|
-
*/
|
264
|
-
batchSize?: number
|
265
|
-
}
|
266
|
-
|
267
|
-
export interface AsyncParallelResult<T, R> {
|
268
|
-
/** Successfully processed results */
|
269
|
-
results: R[]
|
270
|
-
/** Errors that occurred during processing */
|
271
|
-
errors: (Error & { item: T })[]
|
272
|
-
/** Whether all items were processed successfully */
|
273
|
-
success: boolean
|
274
|
-
}
|
275
|
-
|
276
|
-
/**
|
277
|
-
* Process items in parallel with configurable options
|
278
|
-
*
|
279
|
-
* @param items - Items to process
|
280
|
-
* @param operation - Async function to apply to each item (with optional index)
|
281
|
-
* @param options - Configuration options
|
282
|
-
* @returns Results and errors from processing
|
283
|
-
*
|
284
|
-
* @example
|
285
|
-
* ```ts
|
286
|
-
* const items = [1, 2, 3, 4, 5]
|
287
|
-
* const result = await asyncParallel(items, async (n, index) => n * 2, {
|
288
|
-
* concurrency: 2,
|
289
|
-
* batchSize: 3,
|
290
|
-
* failFast: false
|
291
|
-
* })
|
292
|
-
* // result.results: [2, 4, 6, 8, 10]
|
293
|
-
* // result.errors: []
|
294
|
-
* // result.success: true
|
295
|
-
* ```
|
296
|
-
*/
|
297
|
-
export const asyncParallel = async <T, R>(
|
298
|
-
items: readonly T[],
|
299
|
-
operation: (item: T, index: number) => Promise<R>,
|
300
|
-
options: AsyncParallelOptions = {},
|
301
|
-
): Promise<AsyncParallelResult<T, R>> => {
|
302
|
-
const { concurrency = 10, failFast = false, batchSize } = options
|
303
|
-
|
304
|
-
if (items.length === 0) {
|
305
|
-
return { results: [], errors: [], success: true }
|
306
|
-
}
|
307
|
-
|
308
|
-
const allResults: R[] = []
|
309
|
-
const allErrors: (Error & { item: T })[] = []
|
310
|
-
|
311
|
-
// If batchSize is specified, process in batches
|
312
|
-
if (batchSize !== undefined) {
|
313
|
-
const batches = chunk(items, batchSize)
|
314
|
-
let globalIndex = 0
|
315
|
-
|
316
|
-
for (const batch of batches) {
|
317
|
-
const batchResult = await processBatch(batch, operation, concurrency, failFast, globalIndex)
|
318
|
-
allResults.push(...batchResult.results)
|
319
|
-
allErrors.push(...batchResult.errors)
|
320
|
-
globalIndex += batch.length
|
321
|
-
|
322
|
-
if (failFast && batchResult.errors.length > 0) {
|
323
|
-
break
|
324
|
-
}
|
325
|
-
}
|
326
|
-
} else {
|
327
|
-
// Process all items with specified concurrency
|
328
|
-
const result = await processBatch(items, operation, concurrency, failFast, 0)
|
329
|
-
allResults.push(...result.results)
|
330
|
-
allErrors.push(...result.errors)
|
331
|
-
}
|
332
|
-
|
333
|
-
return {
|
334
|
-
results: allResults,
|
335
|
-
errors: allErrors,
|
336
|
-
success: allErrors.length === 0,
|
337
|
-
}
|
338
|
-
}
|
339
|
-
|
340
|
-
/**
|
341
|
-
* Process a batch of items with limited concurrency
|
342
|
-
*/
|
343
|
-
const processBatch = async <T, R>(
|
344
|
-
items: readonly T[],
|
345
|
-
operation: (item: T, index: number) => Promise<R>,
|
346
|
-
concurrency: number,
|
347
|
-
failFast: boolean,
|
348
|
-
startIndex: number = 0,
|
349
|
-
): Promise<AsyncParallelResult<T, R>> => {
|
350
|
-
const results: R[] = []
|
351
|
-
const errors: (Error & { item: T })[] = []
|
352
|
-
|
353
|
-
// Process items in chunks based on concurrency limit
|
354
|
-
const chunks = chunk(items, concurrency)
|
355
|
-
let currentIndex = startIndex
|
356
|
-
|
357
|
-
for (const chunkItems of chunks) {
|
358
|
-
const promises = chunkItems.map(async (item, chunkIndex) => {
|
359
|
-
const globalIndex = currentIndex + chunkIndex
|
360
|
-
try {
|
361
|
-
const result = await operation(item, globalIndex)
|
362
|
-
return { success: true, result, item }
|
363
|
-
} catch (error) {
|
364
|
-
const enhancedError = error instanceof Error ? error : new Error(String(error))
|
365
|
-
Object.assign(enhancedError, { item })
|
366
|
-
return { success: false, error: enhancedError as Error & { item: T }, item }
|
367
|
-
}
|
368
|
-
})
|
369
|
-
|
370
|
-
currentIndex += chunkItems.length
|
371
|
-
|
372
|
-
const chunkResults = await Promise.allSettled(promises)
|
373
|
-
|
374
|
-
for (const promiseResult of chunkResults) {
|
375
|
-
if (promiseResult.status === 'fulfilled') {
|
376
|
-
const { success, result, error, item } = promiseResult.value
|
377
|
-
if (success) {
|
378
|
-
results.push(result!)
|
379
|
-
} else {
|
380
|
-
errors.push(error!)
|
381
|
-
if (failFast) {
|
382
|
-
return { results, errors, success: false }
|
383
|
-
}
|
384
|
-
}
|
385
|
-
} else {
|
386
|
-
// This shouldn't happen since we're catching errors above
|
387
|
-
// But handle it just in case
|
388
|
-
const error = new Error('Unexpected promise rejection') as Error & { item: any }
|
389
|
-
errors.push(error)
|
390
|
-
if (failFast) {
|
391
|
-
return { results, errors, success: false }
|
392
|
-
}
|
393
|
-
}
|
394
|
-
}
|
395
|
-
}
|
396
|
-
|
397
|
-
return { results, errors, success: errors.length === 0 }
|
398
|
-
}
|
399
|
-
|
400
|
-
// /**
|
401
|
-
// * Reduce an array asynchronously, processing each item in sequence
|
402
|
-
// *
|
403
|
-
// * @param items - Array of items to process
|
404
|
-
// * @param reducer - Async function that takes accumulator and current item
|
405
|
-
// * @param initial - Initial value for the accumulator
|
406
|
-
// * @returns Final accumulated value
|
407
|
-
// *
|
408
|
-
// * @example
|
409
|
-
// * ```ts
|
410
|
-
// * const numbers = [1, 2, 3, 4]
|
411
|
-
// * const sum = await asyncReduce(numbers, async (acc, n) => acc + n, 0)
|
412
|
-
// * // sum: 10
|
413
|
-
// *
|
414
|
-
// * const transforms = [addHeader, addFooter, minify]
|
415
|
-
// * const html = await asyncReduce(transforms, async (html, transform) => transform(html), initialHtml)
|
416
|
-
// * ```
|
417
|
-
// */
|
418
|
-
// export const asyncReduce = async <T, R>(
|
419
|
-
// items: readonly T[],
|
420
|
-
// reducer: (accumulator: R, current: T, index: number) => Promise<R> | R,
|
421
|
-
// initial: R,
|
422
|
-
// ): Promise<R> => {
|
423
|
-
// let result = initial
|
424
|
-
// for (let i = 0; i < items.length; i++) {
|
425
|
-
// const item = items[i]!
|
426
|
-
// result = await reducer(result, item, i)
|
427
|
-
// }
|
428
|
-
// return result
|
429
|
-
// }
|
430
|
-
|
431
|
-
// /**
|
432
|
-
// * Curried version of asyncReduce for functions that transform a value
|
433
|
-
// *
|
434
|
-
// * @param transformers - Array of transformer functions
|
435
|
-
// * @returns A function that takes an initial value and applies all transformers
|
436
|
-
// *
|
437
|
-
// * @example
|
438
|
-
// * ```ts
|
439
|
-
// * const transformers = [addHeader, addFooter, minify]
|
440
|
-
// * const applyTransforms = asyncReduceWith(transformers)
|
441
|
-
// * const finalHtml = await applyTransforms(initialHtml)
|
442
|
-
// *
|
443
|
-
// * // For simple pipelines where each function transforms the same type
|
444
|
-
// * const htmlPipeline = asyncReduceWith([
|
445
|
-
// * (html) => html.replace('foo', 'bar'),
|
446
|
-
// * async (html) => await prettify(html),
|
447
|
-
// * (html) => html.trim()
|
448
|
-
// * ])
|
449
|
-
// * ```
|
450
|
-
// */
|
451
|
-
// export const asyncReduceWith = <T>(
|
452
|
-
// transformers: readonly ((value: T) => Promise<T> | T)[],
|
453
|
-
// ) => {
|
454
|
-
// return async (initial: T): Promise<T> => {
|
455
|
-
// return asyncReduce(transformers, (value, transform) => transform(value), initial)
|
456
|
-
// }
|
457
|
-
// }
|
458
|
-
|
459
|
-
/**
|
460
|
-
* Reduce an array asynchronously with context, processing each item in sequence
|
461
|
-
*
|
462
|
-
* @param items - Array of items to process
|
463
|
-
* @param reducer - Async function that takes accumulator, current item, and context
|
464
|
-
* @param initial - Initial value for the accumulator
|
465
|
-
* @param context - Context object passed to each reducer call
|
466
|
-
* @returns Final accumulated value
|
467
|
-
*
|
468
|
-
* @example
|
469
|
-
* ```ts
|
470
|
-
* const transformers = [transformer1, transformer2]
|
471
|
-
* const ctx = { request: req, response: res }
|
472
|
-
* const result = await asyncReduceWithContext(
|
473
|
-
* transformers,
|
474
|
-
* async (html, transformer) => transformer(html, ctx),
|
475
|
-
* initialHtml,
|
476
|
-
* ctx
|
477
|
-
* )
|
478
|
-
* ```
|
479
|
-
*/
|
480
|
-
export const asyncReduce = async <T, R, C>(
|
481
|
-
items: readonly T[],
|
482
|
-
reducer: (accumulator: R, current: T, context: C, index: number) => Promise<R> | R,
|
483
|
-
initial: R,
|
484
|
-
context: C,
|
485
|
-
): Promise<R> => {
|
486
|
-
let result = initial
|
487
|
-
for (let i = 0; i < items.length; i++) {
|
488
|
-
const item = items[i]!
|
489
|
-
result = await reducer(result, item, context, i)
|
490
|
-
}
|
491
|
-
return result
|
492
|
-
}
|
493
|
-
|
494
|
-
/**
|
495
|
-
* Curried version of asyncReduceWithContext for functions that transform a value with context
|
496
|
-
*
|
497
|
-
* @param transformers - Array of transformer functions that take value and context
|
498
|
-
* @returns A function that takes an initial value and context, and applies all transformers
|
499
|
-
*
|
500
|
-
* @example
|
501
|
-
* ```ts
|
502
|
-
* const transformers = [
|
503
|
-
* (html, ctx) => html.replace('{{url}}', ctx.req.url),
|
504
|
-
* async (html, ctx) => await ctx.minify(html),
|
505
|
-
* ]
|
506
|
-
* const applyTransforms = asyncReduceWithContextWith(transformers)
|
507
|
-
* const finalHtml = await applyTransforms(initialHtml, ctx)
|
508
|
-
* ```
|
509
|
-
*/
|
510
|
-
export const asyncReduceWith = <T, C>(
|
511
|
-
transformers: readonly ((value: T, context: C) => Promise<T> | T)[],
|
512
|
-
context: C,
|
513
|
-
) => {
|
514
|
-
return async (initial: T): Promise<T> => {
|
515
|
-
return asyncReduce(
|
516
|
-
transformers,
|
517
|
-
(value, transform, ctx) => transform(value, ctx),
|
518
|
-
initial,
|
519
|
-
context,
|
520
|
-
)
|
521
|
-
}
|
522
|
-
}
|
package/src/lib/task/$.test.ts
CHANGED
@@ -137,10 +137,10 @@ describe('runAndExit', () => {
|
|
137
137
|
const double = async (x: number) => x * 2
|
138
138
|
|
139
139
|
await expect(() => Task.runAndExit(double, 5, { name: 'double' })).rejects.toThrow('process.exit called')
|
140
|
-
|
140
|
+
|
141
141
|
expect(mockExit).toHaveBeenCalledWith(0)
|
142
142
|
expect(mockLog).toHaveBeenCalled()
|
143
|
-
|
143
|
+
|
144
144
|
// Verify the logged output contains expected content
|
145
145
|
const loggedOutput = mockLog.mock.calls[0]?.[0]
|
146
146
|
expect(loggedOutput).toContain('double')
|
@@ -161,7 +161,7 @@ describe('runAndExit', () => {
|
|
161
161
|
}
|
162
162
|
|
163
163
|
await expect(() => Task.runAndExit(failing, null, { name: 'failing' })).rejects.toThrow('process.exit called')
|
164
|
-
|
164
|
+
|
165
165
|
expect(mockExit).toHaveBeenCalledWith(1)
|
166
166
|
expect(mockLog).toHaveBeenCalled()
|
167
167
|
|
@@ -0,0 +1,117 @@
|
|
1
|
+
import { describe, expect, test } from 'vitest'
|
2
|
+
import * as Tree from './tree.ts'
|
3
|
+
|
4
|
+
describe('Tree', () => {
|
5
|
+
const sampleTree = Tree.node('root', [
|
6
|
+
Tree.node('a', [
|
7
|
+
Tree.node('a1'),
|
8
|
+
Tree.node('a2'),
|
9
|
+
]),
|
10
|
+
Tree.node('b', [
|
11
|
+
Tree.node('b1'),
|
12
|
+
]),
|
13
|
+
Tree.node('c'),
|
14
|
+
])
|
15
|
+
|
16
|
+
test('node creates a tree node', () => {
|
17
|
+
const leaf = Tree.node('leaf')
|
18
|
+
expect(leaf).toEqual({ value: 'leaf', children: [] })
|
19
|
+
|
20
|
+
const parent = Tree.node('parent', [leaf])
|
21
|
+
expect(parent).toEqual({ value: 'parent', children: [leaf] })
|
22
|
+
})
|
23
|
+
|
24
|
+
test('map transforms node values', () => {
|
25
|
+
const upperTree = Tree.map(sampleTree, value => value.toUpperCase())
|
26
|
+
|
27
|
+
expect(upperTree.value).toBe('ROOT')
|
28
|
+
expect(upperTree.children[0]!.value).toBe('A')
|
29
|
+
expect(upperTree.children[0]!.children[0]!.value).toBe('A1')
|
30
|
+
})
|
31
|
+
|
32
|
+
test('map provides depth and path', () => {
|
33
|
+
const depths: number[] = []
|
34
|
+
const paths: string[][] = []
|
35
|
+
|
36
|
+
Tree.map(sampleTree, (value, depth, path) => {
|
37
|
+
depths.push(depth)
|
38
|
+
paths.push(path)
|
39
|
+
return value
|
40
|
+
})
|
41
|
+
|
42
|
+
expect(depths).toEqual([0, 1, 2, 2, 1, 2, 1])
|
43
|
+
expect(paths[0]).toEqual([])
|
44
|
+
expect(paths[1]).toEqual(['root'])
|
45
|
+
expect(paths[2]).toEqual(['root', 'a'])
|
46
|
+
})
|
47
|
+
|
48
|
+
test('visit traverses all nodes', () => {
|
49
|
+
const visited: string[] = []
|
50
|
+
Tree.visit(sampleTree, node => visited.push(node.value))
|
51
|
+
|
52
|
+
expect(visited).toEqual(['root', 'a', 'a1', 'a2', 'b', 'b1', 'c'])
|
53
|
+
})
|
54
|
+
|
55
|
+
test('find locates node', () => {
|
56
|
+
const found = Tree.find(sampleTree, value => value === 'b1')
|
57
|
+
expect(found?.value).toBe('b1')
|
58
|
+
|
59
|
+
const notFound = Tree.find(sampleTree, value => value === 'x')
|
60
|
+
expect(notFound).toBeUndefined()
|
61
|
+
})
|
62
|
+
|
63
|
+
test('filter removes non-matching nodes', () => {
|
64
|
+
const filtered = Tree.filter(sampleTree, value => !value.includes('2'))
|
65
|
+
|
66
|
+
expect(filtered).toBeDefined()
|
67
|
+
expect(Tree.flatten(filtered!)).toEqual(['root', 'a', 'a1', 'b', 'b1', 'c'])
|
68
|
+
})
|
69
|
+
|
70
|
+
test('sort orders children', () => {
|
71
|
+
const sorted = Tree.sort(sampleTree, (a, b) => b.localeCompare(a))
|
72
|
+
|
73
|
+
expect(sorted.children.map(c => c.value)).toEqual(['c', 'b', 'a'])
|
74
|
+
expect(sorted.children[2]!.children.map(c => c.value)).toEqual(['a2', 'a1'])
|
75
|
+
})
|
76
|
+
|
77
|
+
test('flatten returns all values', () => {
|
78
|
+
const flat = Tree.flatten(sampleTree)
|
79
|
+
expect(flat).toEqual(['root', 'a', 'a1', 'a2', 'b', 'b1', 'c'])
|
80
|
+
})
|
81
|
+
|
82
|
+
test('depth calculates tree depth', () => {
|
83
|
+
expect(Tree.depth(Tree.node('single'))).toBe(0)
|
84
|
+
expect(Tree.depth(sampleTree)).toBe(2)
|
85
|
+
})
|
86
|
+
|
87
|
+
test('count counts all nodes', () => {
|
88
|
+
expect(Tree.count(Tree.node('single'))).toBe(1)
|
89
|
+
expect(Tree.count(sampleTree)).toBe(7)
|
90
|
+
})
|
91
|
+
|
92
|
+
test('isLeaf identifies leaf nodes', () => {
|
93
|
+
expect(Tree.isLeaf(sampleTree)).toBe(false)
|
94
|
+
expect(Tree.isLeaf(sampleTree.children[0]!)).toBe(false)
|
95
|
+
expect(Tree.isLeaf(sampleTree.children[0]!.children[0]!)).toBe(true)
|
96
|
+
})
|
97
|
+
|
98
|
+
test('leaves gets all leaf nodes', () => {
|
99
|
+
const leafNodes = Tree.leaves(sampleTree)
|
100
|
+
expect(leafNodes.map(n => n.value)).toEqual(['a1', 'a2', 'b1', 'c'])
|
101
|
+
})
|
102
|
+
|
103
|
+
test('fromList builds tree from flat list', () => {
|
104
|
+
const items = [
|
105
|
+
{ id: '1', name: 'root' },
|
106
|
+
{ id: '2', parentId: '1', name: 'child1' },
|
107
|
+
{ id: '3', parentId: '1', name: 'child2' },
|
108
|
+
{ id: '4', parentId: '2', name: 'grandchild' },
|
109
|
+
]
|
110
|
+
|
111
|
+
const trees = Tree.fromList(items, undefined)
|
112
|
+
expect(trees).toHaveLength(1)
|
113
|
+
expect(trees[0]!.value.name).toBe('root')
|
114
|
+
expect(trees[0]!.children).toHaveLength(2)
|
115
|
+
expect(trees[0]!.children[0]!.children[0]!.value.name).toBe('grandchild')
|
116
|
+
})
|
117
|
+
})
|