polen 0.8.0-next.8 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/build/api/api.d.ts +3 -3
- package/build/api/api.js +3 -3
- package/build/api/builder/builder.d.ts +1 -1
- package/build/api/builder/builder.d.ts.map +1 -1
- package/build/api/builder/builder.js +12 -4
- package/build/api/builder/builder.js.map +1 -1
- package/build/api/builder/index.d.ts +1 -1
- package/build/api/builder/index.js +1 -1
- package/build/api/config/config.d.ts +4 -4
- package/build/api/config/config.js +4 -4
- package/build/api/config/configurator.d.ts +21 -4
- package/build/api/config/configurator.d.ts.map +1 -1
- package/build/api/config/configurator.js +6 -2
- package/build/api/config/configurator.js.map +1 -1
- package/build/api/config/define.d.ts +1 -1
- package/build/api/config/index.d.ts +1 -1
- package/build/api/config/index.js +1 -1
- package/build/api/config/load.d.ts +1 -1
- package/build/api/config/load.d.ts.map +1 -1
- package/build/api/config/load.js +71 -19
- package/build/api/config/load.js.map +1 -1
- package/build/api/config/merge.d.ts +1 -1
- package/build/api/config/merge.js +1 -1
- package/build/api/config/merge.js.map +1 -1
- package/build/api/config-resolver/config-resolver.d.ts +2 -2
- package/build/api/config-resolver/config-resolver.js +2 -2
- package/build/api/config-resolver/index.d.ts +1 -1
- package/build/api/config-resolver/index.js +1 -1
- package/build/api/config-resolver/resolve.d.ts +3 -3
- package/build/api/config-resolver/resolve.d.ts.map +1 -1
- package/build/api/config-resolver/resolve.js +8 -5
- package/build/api/config-resolver/resolve.js.map +1 -1
- package/build/api/config-resolver/vite.d.ts +2 -2
- package/build/api/config-resolver/vite.d.ts.map +1 -1
- package/build/api/config-resolver/vite.js +2 -2
- package/build/api/config-resolver/vite.js.map +1 -1
- package/build/api/index.d.ts +1 -1
- package/build/api/index.js +1 -1
- package/build/api/schema/data-sources/data-sources.d.ts +3 -3
- package/build/api/schema/data-sources/data-sources.js +3 -3
- package/build/api/schema/data-sources/index.d.ts +1 -1
- package/build/api/schema/data-sources/index.js +1 -1
- package/build/api/schema/data-sources/memory/memory.d.ts +1 -1
- package/build/api/schema/data-sources/memory/memory.js +2 -2
- package/build/api/schema/data-sources/memory/memory.js.map +1 -1
- package/build/api/schema/data-sources/schema-directory/file-name-expression/index.d.ts +1 -1
- package/build/api/schema/data-sources/schema-directory/file-name-expression/index.js +1 -1
- package/build/api/schema/data-sources/schema-directory/schema-directory.d.ts +1 -1
- package/build/api/schema/data-sources/schema-directory/schema-directory.js +5 -5
- package/build/api/schema/data-sources/schema-directory/schema-directory.js.map +1 -1
- package/build/api/schema/data-sources/schema-file/schema-file.d.ts +1 -1
- package/build/api/schema/data-sources/schema-file/schema-file.js +2 -2
- package/build/api/schema/data-sources/schema-file/schema-file.js.map +1 -1
- package/build/api/schema/index.d.ts +1 -1
- package/build/api/schema/index.js +1 -1
- package/build/api/schema/read.d.ts +2 -2
- package/build/api/schema/read.js +1 -1
- package/build/api/schema/schema.d.ts +3 -3
- package/build/api/schema/schema.d.ts.map +1 -1
- package/build/api/schema/schema.js +2 -2
- package/build/api/schema-augmentation/augmentations/description.d.ts +2 -2
- package/build/api/schema-augmentation/augmentations/description.d.ts.map +1 -1
- package/build/api/schema-augmentation/augmentations/description.js +1 -1
- package/build/api/schema-augmentation/index.d.ts +1 -1
- package/build/api/schema-augmentation/index.js +1 -1
- package/build/api/schema-augmentation/schema-augmentation.d.ts +2 -2
- package/build/api/schema-augmentation/schema-augmentation.d.ts.map +1 -1
- package/build/api/schema-augmentation/schema-augmentation.js +1 -1
- package/build/api/schema-augmentation/target.d.ts +1 -1
- package/build/api/schema-augmentation/target.d.ts.map +1 -1
- package/build/api/schema-augmentation/target.js +1 -1
- package/build/api/schema-augmentation/target.js.map +1 -1
- package/build/api/singletons/markdown/index.d.ts +1 -1
- package/build/api/singletons/markdown/index.js +1 -1
- package/build/api/vite/log-filters.d.ts +1 -1
- package/build/api/vite/log-filters.d.ts.map +1 -1
- package/build/api/vite/log-filters.js +1 -1
- package/build/api/vite/log-filters.js.map +1 -1
- package/build/api/vite/logger.d.ts +1 -1
- package/build/api/vite/logger.d.ts.map +1 -1
- package/build/api/vite/logger.js +21 -7
- package/build/api/vite/logger.js.map +1 -1
- package/build/api/vite/plugins/build.d.ts +2 -2
- package/build/api/vite/plugins/build.d.ts.map +1 -1
- package/build/api/vite/plugins/build.js +14 -6
- package/build/api/vite/plugins/build.js.map +1 -1
- package/build/api/vite/plugins/core.d.ts +3 -3
- package/build/api/vite/plugins/core.d.ts.map +1 -1
- package/build/api/vite/plugins/core.js +155 -203
- package/build/api/vite/plugins/core.js.map +1 -1
- package/build/api/vite/plugins/main.d.ts +2 -2
- package/build/api/vite/plugins/main.d.ts.map +1 -1
- package/build/api/vite/plugins/main.js +22 -21
- package/build/api/vite/plugins/main.js.map +1 -1
- package/build/api/vite/plugins/pages-tree.d.ts +16 -0
- package/build/api/vite/plugins/pages-tree.d.ts.map +1 -0
- package/build/api/vite/plugins/pages-tree.js +152 -0
- package/build/api/vite/plugins/pages-tree.js.map +1 -0
- package/build/api/vite/plugins/serve.d.ts +2 -2
- package/build/api/vite/plugins/serve.d.ts.map +1 -1
- package/build/api/vite/plugins/serve.js +41 -26
- package/build/api/vite/plugins/serve.js.map +1 -1
- package/build/api/vite/vi.d.ts +2 -2
- package/build/api/vite/vi.d.ts.map +1 -1
- package/build/api/vite/vi.js +2 -2
- package/build/api/vite/vi.js.map +1 -1
- package/build/cli/_/self-contained-mode.d.ts +16 -0
- package/build/cli/_/self-contained-mode.d.ts.map +1 -0
- package/build/cli/_/self-contained-mode.js +58 -0
- package/build/cli/_/self-contained-mode.js.map +1 -0
- package/build/cli/commands/build.js +2 -2
- package/build/cli/commands/build.js.map +1 -1
- package/build/cli/commands/dev.js +3 -4
- package/build/cli/commands/dev.js.map +1 -1
- package/build/cli/commands/open.js +4 -4
- package/build/cli/commands/open.js.map +1 -1
- package/build/cli/index.js +1 -1
- package/build/dep/graphql-inspector/index.d.ts +1 -1
- package/build/dep/graphql-inspector/index.js +1 -1
- package/build/dep/hono/hono.d.ts +1 -1
- package/build/dep/hono/hono.js +1 -1
- package/build/dep/hono/index.d.ts +1 -1
- package/build/dep/hono/index.js +1 -1
- package/build/dep/superjson/index.d.ts +1 -1
- package/build/dep/superjson/index.js +1 -1
- package/build/dep/tiny-globby/index.d.ts +1 -1
- package/build/dep/tiny-globby/index.js +1 -1
- package/build/dep/vite/index.d.ts +1 -1
- package/build/dep/vite/index.js +1 -1
- package/build/exports/index.d.ts +1 -1
- package/build/exports/index.js +1 -1
- package/build/exports/polen.d.ts +3 -3
- package/build/exports/polen.d.ts.map +1 -1
- package/build/exports/polen.js +3 -3
- package/build/exports/polen.js.map +1 -1
- package/build/lib/apple-touch-icon/index.d.ts +1 -1
- package/build/lib/apple-touch-icon/index.js +1 -1
- package/build/lib/debug/debug.d.ts +3 -3
- package/build/lib/debug/debug.d.ts.map +1 -1
- package/build/lib/debug/debug.js +39 -10
- package/build/lib/debug/debug.js.map +1 -1
- package/build/lib/debug/environment-variable.d.ts +2 -1
- package/build/lib/debug/environment-variable.d.ts.map +1 -1
- package/build/lib/debug/environment-variable.js +27 -7
- package/build/lib/debug/environment-variable.js.map +1 -1
- package/build/lib/debug/index.d.ts +1 -1
- package/build/lib/debug/index.js +1 -1
- package/build/lib/errors/ContextualAggregateError.d.ts +1 -1
- package/build/lib/errors/ContextualAggregateError.js +1 -1
- package/build/lib/errors/ContextualError.d.ts +1 -1
- package/build/lib/errors/ErrorInternal.d.ts +2 -2
- package/build/lib/errors/ErrorInternal.js +1 -1
- package/build/lib/errors/errors.d.ts +4 -4
- package/build/lib/errors/errors.js +4 -4
- package/build/lib/errors/index.d.ts +1 -1
- package/build/lib/errors/index.js +1 -1
- package/build/lib/errors/types.d.ts +1 -1
- package/build/lib/favicon/index.d.ts +1 -1
- package/build/lib/favicon/index.js +1 -1
- package/build/lib/file-router/diagnostic-reporter.d.ts +3 -0
- package/build/lib/file-router/diagnostic-reporter.d.ts.map +1 -0
- package/build/lib/file-router/diagnostic-reporter.js +18 -0
- package/build/lib/file-router/diagnostic-reporter.js.map +1 -0
- package/build/lib/file-router/file-router.d.ts +5 -3
- package/build/lib/file-router/file-router.d.ts.map +1 -1
- package/build/lib/file-router/file-router.js +5 -3
- package/build/lib/file-router/file-router.js.map +1 -1
- package/build/lib/file-router/index.d.ts +1 -1
- package/build/lib/file-router/index.js +1 -1
- package/build/lib/file-router/linter.d.ts +25 -2
- package/build/lib/file-router/linter.d.ts.map +1 -1
- package/build/lib/file-router/linter.js +46 -5
- package/build/lib/file-router/linter.js.map +1 -1
- package/build/lib/file-router/route.d.ts +1 -0
- package/build/lib/file-router/route.d.ts.map +1 -1
- package/build/lib/file-router/route.js +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 +2 -2
- package/build/lib/file-router/scan.d.ts.map +1 -1
- package/build/lib/file-router/scan.js +26 -10
- 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 +2 -0
- package/build/lib/file-router/sidebar/types.js.map +1 -0
- package/build/lib/grafaid/_Nodes.d.ts +1 -1
- package/build/lib/grafaid/_Nodes.js +1 -1
- package/build/lib/grafaid/document/OperationTypeNode.d.ts +1 -1
- package/build/lib/grafaid/document/OperationTypeNode.js +1 -1
- package/build/lib/grafaid/document/kind.d.ts +1 -1
- package/build/lib/grafaid/document/kind.js +1 -1
- package/build/lib/grafaid/document.d.ts +4 -4
- package/build/lib/grafaid/document.js +6 -6
- package/build/lib/grafaid/grafaid.d.ts +4 -4
- package/build/lib/grafaid/grafaid.js +4 -4
- package/build/lib/grafaid/graphql.d.ts +2 -2
- package/build/lib/grafaid/graphql.js +2 -2
- package/build/lib/grafaid/http/__.d.ts +1 -1
- package/build/lib/grafaid/http/__.js +1 -1
- package/build/lib/grafaid/http/http.js +1 -1
- package/build/lib/grafaid/index.d.ts +1 -1
- package/build/lib/grafaid/index.js +1 -1
- package/build/lib/grafaid/schema/KindMap/_.d.ts +3 -3
- package/build/lib/grafaid/schema/KindMap/_.js +4 -4
- package/build/lib/grafaid/schema/KindMap/__.d.ts +2 -2
- package/build/lib/grafaid/schema/KindMap/__.js +1 -1
- package/build/lib/grafaid/schema/OperationType/__.d.ts +2 -2
- package/build/lib/grafaid/schema/OperationType/__.js +1 -1
- package/build/lib/grafaid/schema/RootDetails.d.ts +3 -3
- package/build/lib/grafaid/schema/RootDetails.js +2 -2
- package/build/lib/grafaid/schema/RootTypeMap.d.ts +2 -2
- package/build/lib/grafaid/schema/RootTypeMap.js +2 -2
- package/build/lib/grafaid/schema/nodes-like.d.ts +1 -1
- package/build/lib/grafaid/schema/nodes-like.js +1 -1
- package/build/lib/grafaid/schema/schema.d.ts +14 -14
- package/build/lib/grafaid/schema/schema.js +15 -15
- package/build/lib/grafaid/schema/type-kind-name.d.ts +1 -1
- package/build/lib/grafaid/schema/type-kind-name.js +1 -1
- package/build/lib/grafaid/schema/type.d.ts +1 -1
- package/build/lib/grafaid/schema/typeGuards.js +1 -1
- package/build/lib/grafaid-old/grafaid.d.ts +1 -1
- package/build/lib/grafaid-old/grafaid.js +1 -1
- package/build/lib/grafaid-old/index.d.ts +1 -1
- package/build/lib/grafaid-old/index.js +1 -1
- package/build/lib/graphql-change/graphql-change.d.ts +2 -2
- package/build/lib/graphql-change/graphql-change.d.ts.map +1 -1
- package/build/lib/graphql-change/graphql-change.js +1 -1
- package/build/lib/graphql-change/graphql-change.js.map +1 -1
- package/build/lib/graphql-change/index.d.ts +1 -1
- package/build/lib/graphql-change/index.js +1 -1
- package/build/lib/graphql-changeset/graphql-changeset.d.ts +2 -2
- package/build/lib/graphql-changeset/graphql-changeset.d.ts.map +1 -1
- package/build/lib/graphql-changeset/index.d.ts +1 -1
- package/build/lib/graphql-changeset/index.js +1 -1
- package/build/lib/graphql-schema-loader/graphql-schema-loader.d.ts +1 -1
- package/build/lib/graphql-schema-loader/graphql-schema-loader.d.ts.map +1 -1
- package/build/lib/graphql-schema-loader/graphql-schema-loader.js +1 -1
- package/build/lib/graphql-schema-loader/graphql-schema-loader.js.map +1 -1
- package/build/lib/graphql-schema-loader/index.d.ts +1 -1
- package/build/lib/graphql-schema-loader/index.js +1 -1
- package/build/lib/hono-aid/hono-aid.d.ts +1 -1
- package/build/lib/hono-aid/hono-aid.d.ts.map +1 -1
- package/build/lib/hono-aid/index.d.ts +1 -1
- package/build/lib/hono-aid/index.js +1 -1
- package/build/lib/kit-temp.d.ts +6 -0
- package/build/lib/kit-temp.d.ts.map +1 -1
- package/build/lib/kit-temp.js +3 -0
- package/build/lib/kit-temp.js.map +1 -1
- package/build/lib/react-router-aid/get-paths-patterns.d.ts +1 -1
- package/build/lib/react-router-aid/get-paths-patterns.d.ts.map +1 -1
- package/build/lib/react-router-aid/index.d.ts +1 -1
- package/build/lib/react-router-aid/index.js +1 -1
- package/build/lib/react-router-aid/react-router-aid.d.ts +2 -2
- package/build/lib/react-router-aid/react-router-aid.d.ts.map +1 -1
- package/build/lib/react-router-aid/react-router-aid.js +1 -1
- package/build/lib/react-router-loader/react-router-loader.js +1 -1
- package/build/lib/stack-processor/index.d.ts +1 -1
- package/build/lib/stack-processor/index.js +1 -1
- package/build/lib/superjson-codec/codec.d.ts +1 -1
- package/build/lib/superjson-codec/codec.d.ts.map +1 -1
- package/build/lib/superjson-codec/codecs/graphql-schema.d.ts +2 -2
- package/build/lib/superjson-codec/codecs/graphql-schema.d.ts.map +1 -1
- package/build/lib/superjson-codec/codecs/graphql-schema.js +2 -2
- package/build/lib/superjson-codec/codecs/graphql-schema.js.map +1 -1
- package/build/lib/superjson-codec/exports.d.ts +2 -2
- package/build/lib/superjson-codec/exports.js +2 -2
- package/build/lib/superjson-codec/index.d.ts +1 -1
- package/build/lib/superjson-codec/index.js +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-config/vite-plugin-config.d.ts +1 -1
- package/build/lib/vite-plugin-config/vite-plugin-config.d.ts.map +1 -1
- package/build/lib/vite-plugin-mdx/index.d.ts +2 -0
- package/build/lib/vite-plugin-mdx/index.d.ts.map +1 -0
- package/build/lib/vite-plugin-mdx/index.js +2 -0
- package/build/lib/vite-plugin-mdx/index.js.map +1 -0
- package/build/lib/vite-plugin-mdx/vite-plugin-mdx.d.ts +24 -0
- package/build/lib/vite-plugin-mdx/vite-plugin-mdx.d.ts.map +1 -0
- package/build/lib/vite-plugin-mdx/vite-plugin-mdx.js +58 -0
- package/build/lib/vite-plugin-mdx/vite-plugin-mdx.js.map +1 -0
- package/build/lib/vite-plugins/index.d.ts +1 -1
- package/build/lib/vite-plugins/index.js +1 -1
- package/build/lib/vite-plugins/vite-plugins.d.ts +1 -2
- package/build/lib/vite-plugins/vite-plugins.d.ts.map +1 -1
- package/build/lib/vite-plugins/vite-plugins.js +1 -2
- package/build/lib/vite-plugins/vite-plugins.js.map +1 -1
- package/build/lib/vite-virtual/debug.d.ts +3 -0
- package/build/lib/vite-virtual/debug.d.ts.map +1 -0
- package/build/lib/vite-virtual/debug.js +3 -0
- package/build/lib/vite-virtual/debug.js.map +1 -0
- package/build/lib/vite-virtual/hooks.d.ts +1 -1
- package/build/lib/vite-virtual/hooks.d.ts.map +1 -1
- package/build/lib/vite-virtual/identified-loader.d.ts +3 -3
- package/build/lib/vite-virtual/identified-loader.d.ts.map +1 -1
- package/build/lib/vite-virtual/identified-loader.js +6 -2
- package/build/lib/vite-virtual/identified-loader.js.map +1 -1
- package/build/lib/vite-virtual/identifier.js +1 -1
- package/build/lib/vite-virtual/index.d.ts +1 -1
- package/build/lib/vite-virtual/index.js +1 -1
- package/build/lib/vite-virtual/vite-virtual.d.ts +3 -3
- package/build/lib/vite-virtual/vite-virtual.js +3 -3
- package/build/package-paths.d.ts +7 -0
- package/build/package-paths.d.ts.map +1 -1
- package/build/package-paths.js +12 -1
- package/build/package-paths.js.map +1 -1
- package/build/project-data.d.ts +4 -20
- package/build/project-data.d.ts.map +1 -1
- package/build/singletons/debug.d.ts +3 -0
- package/build/singletons/debug.d.ts.map +1 -0
- package/build/singletons/debug.js +3 -0
- package/build/singletons/debug.js.map +1 -0
- package/build/singletons/superjson.d.ts +1 -1
- package/build/singletons/superjson.d.ts.map +1 -1
- package/build/singletons/superjson.js +2 -2
- package/build/singletons/superjson.js.map +1 -1
- package/build/template/components/ArgumentListAnnotation.jsx +1 -1
- package/build/template/components/ArgumentListAnnotation.jsx.map +1 -1
- package/build/template/components/Changelog.d.ts +1 -1
- package/build/template/components/Changelog.jsx +2 -2
- package/build/template/components/Changelog.jsx.map +1 -1
- package/build/template/components/DeprecationReason.d.ts +1 -1
- package/build/template/components/DeprecationReason.d.ts.map +1 -1
- package/build/template/components/Description.d.ts +1 -1
- package/build/template/components/Description.d.ts.map +1 -1
- package/build/template/components/Field.d.ts +1 -1
- package/build/template/components/Field.d.ts.map +1 -1
- package/build/template/components/Field.jsx +1 -1
- package/build/template/components/Field.jsx.map +1 -1
- package/build/template/components/FieldList.d.ts +1 -1
- package/build/template/components/FieldList.d.ts.map +1 -1
- package/build/template/components/FieldList.jsx +1 -1
- package/build/template/components/FieldList.jsx.map +1 -1
- package/build/template/components/FieldListSection.jsx +1 -1
- package/build/template/components/FieldListSection.jsx.map +1 -1
- package/build/template/components/Markdown.jsx +1 -1
- package/build/template/components/Markdown.jsx.map +1 -1
- package/build/template/components/Sidebar.d.ts +2 -2
- package/build/template/components/Sidebar.d.ts.map +1 -1
- package/build/template/components/Sidebar.jsx +2 -2
- package/build/template/components/Sidebar.jsx.map +1 -1
- package/build/template/components/TypeIndex.jsx +1 -1
- package/build/template/components/TypeIndex.jsx.map +1 -1
- package/build/template/components/graphql/type-kind-icon.d.ts +2 -2
- package/build/template/components/graphql/type-kind-icon.d.ts.map +1 -1
- package/build/template/components/graphql/type-kind-icon.jsx +1 -1
- package/build/template/components/graphql/type-link.d.ts +1 -1
- package/build/template/components/graphql/type-link.d.ts.map +1 -1
- package/build/template/components/graphql/type-link.jsx +2 -2
- package/build/template/components/graphql/type-link.jsx.map +1 -1
- package/build/template/entry.client.jsx +1 -1
- package/build/template/entry.client.jsx.map +1 -1
- package/build/template/routes/changelog.d.ts +1 -1
- package/build/template/routes/changelog.jsx +2 -2
- package/build/template/routes/changelog.jsx.map +1 -1
- package/build/template/routes/index.d.ts +1 -1
- package/build/template/routes/index.d.ts.map +1 -1
- package/build/template/routes/index.jsx +1 -1
- package/build/template/routes/index.jsx.map +1 -1
- package/build/template/routes/reference.$type.$field.jsx +3 -3
- package/build/template/routes/reference.$type.$field.jsx.map +1 -1
- package/build/template/routes/reference.$type.jsx +2 -2
- package/build/template/routes/reference.$type.jsx.map +1 -1
- package/build/template/routes/reference.jsx +2 -2
- package/build/template/routes/reference.jsx.map +1 -1
- package/build/template/routes/root.d.ts +1 -1
- package/build/template/routes/root.d.ts.map +1 -1
- package/build/template/routes/root.jsx +3 -3
- package/build/template/routes/root.jsx.map +1 -1
- package/build/template/server/app.d.ts +1 -1
- package/build/template/server/app.d.ts.map +1 -1
- package/build/template/server/app.js +5 -4
- package/build/template/server/app.js.map +1 -1
- package/build/template/server/main.js +3 -3
- package/build/template/server/manifest.d.ts +1 -1
- package/build/template/server/manifest.d.ts.map +1 -1
- package/build/template/server/render-page.d.ts +1 -1
- package/build/template/server/render-page.d.ts.map +1 -1
- package/build/template/server/render-page.jsx +3 -3
- package/build/template/server/render-page.jsx.map +1 -1
- package/build/template/server/ssg/generate.d.ts +1 -1
- package/build/template/server/ssg/generate.d.ts.map +1 -1
- package/build/template/server/ssg/generate.js +3 -3
- package/build/template/server/ssg/generate.js.map +1 -1
- package/build/template/server/ssg/get-route-paths.js +2 -2
- package/build/template/server/ssg/get-route-paths.js.map +1 -1
- package/package.json +77 -56
- package/src/api/api.ts +3 -3
- package/src/api/builder/builder.ts +3 -3
- package/src/api/builder/index.ts +1 -1
- package/src/api/config/config.ts +4 -4
- package/src/api/config/configurator.ts +27 -5
- package/src/api/config/define.ts +1 -1
- package/src/api/config/index.ts +1 -1
- package/src/api/config/load.ts +74 -23
- package/src/api/config/merge.ts +2 -2
- package/src/api/config-resolver/config-resolver.ts +2 -2
- package/src/api/config-resolver/index.ts +1 -1
- package/src/api/config-resolver/resolve.ts +8 -5
- package/src/api/config-resolver/vite.ts +3 -3
- package/src/api/index.ts +1 -1
- package/src/api/schema/data-sources/data-sources.ts +3 -3
- package/src/api/schema/data-sources/index.ts +1 -1
- package/src/api/schema/data-sources/memory/memory.ts +4 -4
- package/src/api/schema/data-sources/schema-directory/file-name-expression/index.ts +1 -1
- package/src/api/schema/data-sources/schema-directory/schema-directory.ts +7 -7
- package/src/api/schema/data-sources/schema-file/schema-file.ts +4 -4
- package/src/api/schema/index.ts +1 -1
- package/src/api/schema/read.ts +2 -2
- package/src/api/schema/schema.ts +3 -3
- package/src/api/schema-augmentation/augmentations/description.ts +3 -3
- package/src/api/schema-augmentation/index.ts +1 -1
- package/src/api/schema-augmentation/schema-augmentation.ts +2 -2
- package/src/api/schema-augmentation/target.ts +1 -1
- package/src/api/singletons/markdown/index.ts +1 -1
- package/src/api/vite/log-filters.ts +1 -1
- package/src/api/vite/logger.ts +23 -7
- package/src/api/vite/plugins/build.ts +6 -6
- package/src/api/vite/plugins/core.ts +172 -240
- package/src/api/vite/plugins/main.ts +24 -23
- package/src/api/vite/plugins/pages-tree.ts +186 -0
- package/src/api/vite/plugins/serve.ts +52 -29
- package/src/api/vite/vi.ts +2 -2
- package/src/cli/_/self-contained-mode.ts +85 -0
- package/src/cli/commands/build.ts +2 -2
- package/src/cli/commands/dev.ts +3 -4
- package/src/cli/commands/open.ts +4 -4
- package/src/cli/index.ts +1 -1
- package/src/dep/graphql-inspector/index.ts +1 -1
- package/src/dep/hono/hono.ts +1 -1
- package/src/dep/hono/index.ts +1 -1
- package/src/dep/superjson/index.ts +1 -1
- package/src/dep/tiny-globby/index.ts +1 -1
- package/src/dep/vite/index.ts +1 -1
- package/src/exports/index.ts +1 -1
- package/src/exports/polen.ts +3 -3
- package/src/lib/apple-touch-icon/index.ts +1 -1
- package/src/lib/debug/debug.ts +45 -18
- package/src/lib/debug/environment-variable.ts +28 -7
- package/src/lib/debug/index.ts +1 -1
- package/src/lib/errors/ContextualAggregateError.ts +1 -1
- package/src/lib/errors/ContextualError.ts +1 -1
- package/src/lib/errors/ErrorInternal.ts +2 -2
- package/src/lib/errors/errors.ts +4 -4
- package/src/lib/errors/index.ts +1 -1
- package/src/lib/errors/types.ts +1 -1
- package/src/lib/favicon/index.ts +1 -1
- package/src/lib/file-router/diagnostic-reporter.ts +22 -0
- package/src/lib/file-router/file-router.ts +5 -3
- package/src/lib/file-router/index.test.ts +2 -2
- package/src/lib/file-router/index.ts +1 -1
- package/src/lib/file-router/linter.test.ts +115 -0
- package/src/lib/file-router/linter.ts +80 -6
- package/src/lib/file-router/route.ts +2 -1
- 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 +27 -12
- 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/grafaid/_Nodes.ts +1 -1
- package/src/lib/grafaid/document/OperationTypeNode.ts +1 -1
- package/src/lib/grafaid/document/kind.ts +1 -1
- package/src/lib/grafaid/document.ts +6 -6
- package/src/lib/grafaid/grafaid.ts +4 -4
- package/src/lib/grafaid/graphql.ts +3 -3
- package/src/lib/grafaid/http/__.ts +1 -1
- package/src/lib/grafaid/http/http.ts +1 -1
- package/src/lib/grafaid/index.ts +1 -1
- package/src/lib/grafaid/schema/KindMap/_.ts +6 -6
- package/src/lib/grafaid/schema/KindMap/__.ts +2 -2
- package/src/lib/grafaid/schema/OperationType/__.ts +2 -2
- package/src/lib/grafaid/schema/RootDetails.ts +3 -3
- package/src/lib/grafaid/schema/RootTypeMap.ts +2 -2
- package/src/lib/grafaid/schema/nodes-like.ts +2 -2
- package/src/lib/grafaid/schema/schema.ts +15 -15
- package/src/lib/grafaid/schema/type-kind-name.ts +1 -1
- package/src/lib/grafaid/schema/type.ts +1 -1
- package/src/lib/grafaid/schema/typeGuards.ts +1 -1
- package/src/lib/grafaid-old/grafaid.ts +1 -1
- package/src/lib/grafaid-old/index.ts +1 -1
- package/src/lib/graphql-change/graphql-change.ts +2 -2
- package/src/lib/graphql-change/index.ts +1 -1
- package/src/lib/graphql-changeset/graphql-changeset.ts +2 -2
- package/src/lib/graphql-changeset/index.ts +1 -1
- package/src/lib/graphql-schema-loader/graphql-schema-loader.ts +1 -1
- package/src/lib/graphql-schema-loader/index.ts +1 -1
- package/src/lib/hono-aid/hono-aid.ts +1 -1
- package/src/lib/hono-aid/index.ts +1 -1
- package/src/lib/kit-temp.ts +10 -0
- package/src/lib/react-router-aid/get-paths-patterns.ts +1 -1
- package/src/lib/react-router-aid/index.ts +1 -1
- package/src/lib/react-router-aid/react-router-aid.ts +2 -2
- package/src/lib/react-router-loader/react-router-loader.ts +1 -1
- package/src/lib/stack-processor/index.ts +1 -1
- package/src/lib/superjson-codec/codec.ts +1 -1
- package/src/lib/superjson-codec/codecs/graphql-schema.ts +2 -2
- package/src/lib/superjson-codec/exports.ts +2 -2
- package/src/lib/superjson-codec/index.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-config/vite-plugin-config.ts +1 -1
- package/src/lib/vite-plugin-mdx/index.ts +1 -0
- package/src/lib/vite-plugin-mdx/vite-plugin-mdx.ts +91 -0
- package/src/lib/vite-plugins/index.ts +1 -1
- package/src/lib/vite-plugins/vite-plugins.ts +1 -2
- package/src/lib/vite-virtual/debug.ts +3 -0
- package/src/lib/vite-virtual/hooks.ts +1 -1
- package/src/lib/vite-virtual/identified-loader.ts +9 -5
- package/src/lib/vite-virtual/identifier.ts +1 -1
- package/src/lib/vite-virtual/index.ts +1 -1
- package/src/lib/vite-virtual/vite-virtual.ts +3 -3
- package/src/package-paths.ts +22 -1
- package/src/project-data.ts +4 -24
- package/src/singletons/debug.ts +3 -0
- package/src/singletons/superjson.ts +2 -2
- package/src/template/components/ArgumentListAnnotation.tsx +1 -1
- package/src/template/components/Changelog.tsx +6 -6
- package/src/template/components/DeprecationReason.tsx +1 -1
- package/src/template/components/Description.tsx +1 -1
- package/src/template/components/Field.tsx +1 -1
- package/src/template/components/FieldList.tsx +1 -1
- package/src/template/components/FieldListSection.tsx +1 -1
- package/src/template/components/Markdown.tsx +1 -1
- package/src/template/components/Sidebar.tsx +7 -6
- package/src/template/components/TypeIndex.tsx +1 -1
- package/src/template/components/graphql/type-kind-icon.tsx +3 -3
- package/src/template/components/graphql/type-kind-tokens.ts +1 -1
- package/src/template/components/graphql/type-link.tsx +2 -2
- package/src/template/entry.client.tsx +1 -1
- package/src/template/routes/changelog.tsx +2 -2
- package/src/template/routes/index.tsx +1 -1
- package/src/template/routes/reference.$type.$field.tsx +3 -3
- package/src/template/routes/reference.$type.tsx +2 -2
- package/src/template/routes/reference.tsx +2 -2
- package/src/template/routes/root.tsx +4 -5
- package/src/template/server/app.ts +6 -4
- package/src/template/server/main.ts +3 -3
- package/src/template/server/manifest.ts +1 -1
- package/src/template/server/render-page.tsx +5 -5
- package/src/template/server/ssg/generate.ts +4 -4
- package/src/template/server/ssg/get-route-paths.ts +2 -2
- package/build/lib/file-router/sidebar.d.ts +0 -2
- package/build/lib/file-router/sidebar.d.ts.map +0 -1
- package/build/lib/file-router/sidebar.js +0 -2
- package/build/lib/file-router/sidebar.js.map +0 -1
- package/build/lib/vite-plugins/output-logger.d.ts +0 -3
- package/build/lib/vite-plugins/output-logger.d.ts.map +0 -1
- package/build/lib/vite-plugins/output-logger.js +0 -13
- package/build/lib/vite-plugins/output-logger.js.map +0 -1
- package/src/lib/file-router/sidebar.ts +0 -0
- package/src/lib/vite-plugins/output-logger.ts +0 -14
package/src/lib/errors/index.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export * as Errors from './errors.
|
1
|
+
export * as Errors from './errors.ts'
|
package/src/lib/errors/types.ts
CHANGED
package/src/lib/favicon/index.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export * as Favicon from './favicon.
|
1
|
+
export * as Favicon from './favicon.ts'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import type { Diagnostic } from './linter.ts'
|
2
|
+
|
3
|
+
export const reportDiagnostics = (diagnostics: Diagnostic[]) => {
|
4
|
+
if (diagnostics.length === 0) return
|
5
|
+
|
6
|
+
const errors = diagnostics.filter(d => d.severity === 'error')
|
7
|
+
const warnings = diagnostics.filter(d => d.severity === 'warning')
|
8
|
+
const infos = diagnostics.filter(d => d.severity === 'info')
|
9
|
+
|
10
|
+
const summary = [
|
11
|
+
errors.length > 0 && `${errors.length} error${errors.length === 1 ? '' : 's'}`,
|
12
|
+
warnings.length > 0 && `${warnings.length} warning${warnings.length === 1 ? '' : 's'}`,
|
13
|
+
infos.length > 0 && `${infos.length} info${infos.length === 1 ? '' : 's'}`,
|
14
|
+
].filter(Boolean).join(', ')
|
15
|
+
|
16
|
+
console.warn(`\n🔍 Polen found ${summary}:\n`)
|
17
|
+
|
18
|
+
diagnostics.forEach((diagnostic, index) => {
|
19
|
+
const icon = diagnostic.severity === 'error' ? '❌' : diagnostic.severity === 'warning' ? '⚠️ ' : 'ℹ️ '
|
20
|
+
console.warn(`${icon} ${index + 1}. ${diagnostic.message}\n`)
|
21
|
+
})
|
22
|
+
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Fn } from '@wollybeard/kit'
|
2
2
|
import { describe, expect } from 'vitest'
|
3
|
-
import { test } from '../../../tests/unit/helpers/test.
|
4
|
-
import { FileRouter } from './index.
|
3
|
+
import { test } from '../../../tests/unit/helpers/test.ts'
|
4
|
+
import { FileRouter } from './index.ts'
|
5
5
|
|
6
6
|
/* Note
|
7
7
|
|
@@ -1 +1 @@
|
|
1
|
-
export * as FileRouter from './file-router.
|
1
|
+
export * as FileRouter from './file-router.ts'
|
@@ -0,0 +1,115 @@
|
|
1
|
+
import { describe, expect, test } from 'vitest'
|
2
|
+
import { lint } from './linter.js'
|
3
|
+
import type { Route } from './route.js'
|
4
|
+
|
5
|
+
const createRoute = (path: string[], order?: number, isIndex = false): Route => {
|
6
|
+
const name = isIndex ? 'index' : path[path.length - 1]!
|
7
|
+
|
8
|
+
return {
|
9
|
+
logical: {
|
10
|
+
path,
|
11
|
+
order,
|
12
|
+
},
|
13
|
+
file: {
|
14
|
+
path: {
|
15
|
+
relative: {
|
16
|
+
root: '',
|
17
|
+
dir: path.slice(0, -1).join('/'),
|
18
|
+
base: `${name}.md`,
|
19
|
+
ext: '.md',
|
20
|
+
name: name, // Always use the base name, not the prefixed name
|
21
|
+
},
|
22
|
+
absolute: {
|
23
|
+
root: '/',
|
24
|
+
dir: `/project/pages/${path.slice(0, -1).join('/')}`,
|
25
|
+
base: `${name}.md`,
|
26
|
+
ext: '.md',
|
27
|
+
name: name,
|
28
|
+
},
|
29
|
+
},
|
30
|
+
},
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
describe('linter', () => {
|
35
|
+
test('warns about numbered prefix on index files', () => {
|
36
|
+
const routes: Route[] = [
|
37
|
+
createRoute(['docs'], 10, true), // 10_index.md
|
38
|
+
createRoute(['docs', 'getting-started']),
|
39
|
+
]
|
40
|
+
|
41
|
+
const result = lint(routes)
|
42
|
+
|
43
|
+
expect(result.diagnostics).toHaveLength(1)
|
44
|
+
expect(result.diagnostics[0]).toMatchObject({
|
45
|
+
message: expect.stringContaining('Numbered prefix on index file has no effect'),
|
46
|
+
file: expect.objectContaining({
|
47
|
+
path: expect.objectContaining({
|
48
|
+
relative: expect.objectContaining({
|
49
|
+
name: 'index',
|
50
|
+
}),
|
51
|
+
}),
|
52
|
+
}),
|
53
|
+
order: 10,
|
54
|
+
})
|
55
|
+
})
|
56
|
+
|
57
|
+
test('no warning for index files without numbered prefix', () => {
|
58
|
+
const routes: Route[] = [
|
59
|
+
createRoute(['docs'], undefined, true), // index.md
|
60
|
+
createRoute(['docs', 'getting-started']),
|
61
|
+
]
|
62
|
+
|
63
|
+
const result = lint(routes)
|
64
|
+
|
65
|
+
expect(result.diagnostics).toHaveLength(0)
|
66
|
+
})
|
67
|
+
|
68
|
+
test('warns about numbered prefix conflicts', () => {
|
69
|
+
const routes: Route[] = [
|
70
|
+
createRoute(['about'], 10), // 10_about.md
|
71
|
+
createRoute(['about'], 20), // 20_about.md
|
72
|
+
]
|
73
|
+
|
74
|
+
const result = lint(routes)
|
75
|
+
|
76
|
+
expect(result.diagnostics).toHaveLength(1)
|
77
|
+
expect(result.diagnostics[0]).toMatchObject({
|
78
|
+
message: expect.stringContaining('conflicting routes due to numbered prefixes'),
|
79
|
+
kept: expect.objectContaining({ order: 20 }),
|
80
|
+
dropped: expect.objectContaining({ order: 10 }),
|
81
|
+
})
|
82
|
+
})
|
83
|
+
|
84
|
+
test('warns about index/literal conflicts', () => {
|
85
|
+
const routes: Route[] = [
|
86
|
+
createRoute(['docs'], undefined, true), // docs/index.md
|
87
|
+
createRoute(['docs']), // docs.md
|
88
|
+
]
|
89
|
+
|
90
|
+
const result = lint(routes)
|
91
|
+
|
92
|
+
expect(result.diagnostics).toHaveLength(1)
|
93
|
+
expect(result.diagnostics[0]).toMatchObject({
|
94
|
+
message: expect.stringContaining('conflicting routes'),
|
95
|
+
literal: expect.any(Object),
|
96
|
+
index: expect.any(Object),
|
97
|
+
})
|
98
|
+
})
|
99
|
+
|
100
|
+
test('warns about numbered prefix conflicts with same order number', () => {
|
101
|
+
const routes: Route[] = [
|
102
|
+
createRoute(['about'], 10), // 10_about.md
|
103
|
+
createRoute(['about'], 10), // 10-about.md (same order)
|
104
|
+
]
|
105
|
+
|
106
|
+
const result = lint(routes)
|
107
|
+
|
108
|
+
expect(result.diagnostics).toHaveLength(1)
|
109
|
+
expect(result.diagnostics[0]).toMatchObject({
|
110
|
+
message: expect.stringContaining('Both files have the same order number (10)'),
|
111
|
+
kept: expect.objectContaining({ order: 10 }),
|
112
|
+
dropped: expect.objectContaining({ order: 10 }),
|
113
|
+
})
|
114
|
+
})
|
115
|
+
})
|
@@ -1,9 +1,13 @@
|
|
1
1
|
import { Idx, Path } from '@wollybeard/kit'
|
2
|
-
import { type Route, type RouteFile, routeIsFromIndexFile, routeToPathExpression } from './route.
|
2
|
+
import { type Route, type RouteFile, routeIsFromIndexFile, routeToPathExpression } from './route.ts'
|
3
3
|
|
4
|
-
export type
|
4
|
+
export type DiagnosticSeverity = 'error' | 'warning' | 'info'
|
5
|
+
|
6
|
+
export type Diagnostic = DiagnosticIndexConflict | DiagnosticNumberedPrefixConflict | DiagnosticNumberedPrefixOnIndex
|
5
7
|
|
6
8
|
export interface DiagnosticIndexConflict {
|
9
|
+
type: 'index-conflict'
|
10
|
+
severity: DiagnosticSeverity
|
7
11
|
message: string
|
8
12
|
literal: {
|
9
13
|
file: RouteFile
|
@@ -13,6 +17,28 @@ export interface DiagnosticIndexConflict {
|
|
13
17
|
}
|
14
18
|
}
|
15
19
|
|
20
|
+
export interface DiagnosticNumberedPrefixConflict {
|
21
|
+
type: 'numbered-prefix-conflict'
|
22
|
+
severity: DiagnosticSeverity
|
23
|
+
message: string
|
24
|
+
kept: {
|
25
|
+
file: RouteFile
|
26
|
+
order: number
|
27
|
+
}
|
28
|
+
dropped: {
|
29
|
+
file: RouteFile
|
30
|
+
order: number
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
export interface DiagnosticNumberedPrefixOnIndex {
|
35
|
+
type: 'numbered-prefix-on-index'
|
36
|
+
severity: DiagnosticSeverity
|
37
|
+
message: string
|
38
|
+
file: RouteFile
|
39
|
+
order: number
|
40
|
+
}
|
41
|
+
|
16
42
|
export interface LintResult {
|
17
43
|
diagnostics: Diagnostic[]
|
18
44
|
routes: Route[]
|
@@ -21,15 +47,61 @@ export interface LintResult {
|
|
21
47
|
export const lint = (routes: Route[]): LintResult => {
|
22
48
|
const diagnostics: Diagnostic[] = []
|
23
49
|
|
24
|
-
const seen = Idx.create({
|
50
|
+
const seen = Idx.create({ key: routeToPathExpression })
|
25
51
|
|
26
|
-
// ━ Check for
|
27
|
-
|
52
|
+
// ━ Check for numbered prefix on index files
|
53
|
+
for (const route of routes) {
|
54
|
+
if (routeIsFromIndexFile(route) && route.logical.order !== undefined) {
|
55
|
+
const diagnostic: DiagnosticNumberedPrefixOnIndex = {
|
56
|
+
type: 'numbered-prefix-on-index',
|
57
|
+
severity: 'warning',
|
58
|
+
message: `Numbered prefix on index file has no effect. The file:\n ${
|
59
|
+
Path.format(route.file.path.relative)
|
60
|
+
}\n\nhas a numbered prefix (${route.logical.order}_) which doesn't affect ordering since index files represent their parent directory.`,
|
61
|
+
file: route.file,
|
62
|
+
order: route.logical.order,
|
63
|
+
}
|
64
|
+
diagnostics.push(diagnostic)
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
// ━ Check for conflicts
|
28
69
|
for (const route of routes) {
|
29
70
|
// Detect
|
30
71
|
const seenRoute = seen.get(route)
|
31
72
|
|
32
73
|
if (seenRoute) {
|
74
|
+
// Check if it's a numbered prefix conflict
|
75
|
+
if (seenRoute.logical.order !== undefined && route.logical.order !== undefined) {
|
76
|
+
// Handle numbered prefix conflict - keep the one with higher order
|
77
|
+
const [kept, dropped] = seenRoute.logical.order > route.logical.order ? [seenRoute, route] : [route, seenRoute]
|
78
|
+
|
79
|
+
if (dropped === seenRoute) {
|
80
|
+
seen.set(kept)
|
81
|
+
}
|
82
|
+
|
83
|
+
const orderMessage = kept.logical.order === dropped.logical.order
|
84
|
+
? `Both files have the same order number (${kept.logical.order}). The file processed later is being kept based on processing order.`
|
85
|
+
: `The file with lower order number (${dropped.logical.order}) is being dropped in favor of the one with higher order (${kept.logical.order}).`
|
86
|
+
|
87
|
+
const diagnostic: DiagnosticNumberedPrefixConflict = {
|
88
|
+
type: 'numbered-prefix-conflict',
|
89
|
+
severity: 'error',
|
90
|
+
// dprint-ignore
|
91
|
+
message: `Your files represent conflicting routes due to numbered prefixes. This file:\n ${Path.format(kept.file.path.relative)}\n\nconflicts with this file:\n\n ${Path.format(dropped.file.path.relative)}.\n\n${orderMessage}`,
|
92
|
+
kept: {
|
93
|
+
file: kept.file,
|
94
|
+
order: kept.logical.order!,
|
95
|
+
},
|
96
|
+
dropped: {
|
97
|
+
file: dropped.file,
|
98
|
+
order: dropped.logical.order!,
|
99
|
+
},
|
100
|
+
}
|
101
|
+
diagnostics.push(diagnostic)
|
102
|
+
continue
|
103
|
+
}
|
104
|
+
|
33
105
|
// Fix - ignore the index
|
34
106
|
const [index, literal] = routeIsFromIndexFile(route) ? [route, seenRoute] : [seenRoute, route]
|
35
107
|
if (seenRoute === index) {
|
@@ -38,6 +110,8 @@ export const lint = (routes: Route[]): LintResult => {
|
|
38
110
|
|
39
111
|
// Report
|
40
112
|
const diagnostic: DiagnosticIndexConflict = {
|
113
|
+
type: 'index-conflict',
|
114
|
+
severity: 'error',
|
41
115
|
// dprint-ignore
|
42
116
|
message: `Your files represent conflicting routes. This index file route:\n ${Path.format(index.file.path.relative)}\n\nconflicts with this literal file route:\n\n ${Path.format(literal.file.path.relative)}.\n\nYour index route is being ignored.`,
|
43
117
|
literal: {
|
@@ -58,6 +132,6 @@ export const lint = (routes: Route[]): LintResult => {
|
|
58
132
|
|
59
133
|
return {
|
60
134
|
diagnostics,
|
61
|
-
routes: seen.
|
135
|
+
routes: seen.toArray(),
|
62
136
|
}
|
63
137
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { arrayEquals } from '#lib/kit-temp
|
1
|
+
import { arrayEquals } from '#lib/kit-temp'
|
2
2
|
import { type Path } from '@wollybeard/kit'
|
3
3
|
|
4
4
|
//
|
@@ -40,6 +40,7 @@ export interface Route {
|
|
40
40
|
|
41
41
|
export interface RouteLogical {
|
42
42
|
path: Path
|
43
|
+
order?: number
|
43
44
|
}
|
44
45
|
|
45
46
|
export interface RouteFile {
|
@@ -0,0 +1,189 @@
|
|
1
|
+
import { Tree } from '#lib/tree/index'
|
2
|
+
import { describe, expect, test } from 'vitest'
|
3
|
+
import type { RouteTreeNode } from './scan-tree.js'
|
4
|
+
|
5
|
+
// Helper to create a mock route tree structure for testing
|
6
|
+
const mockRouteTree = (structure: Record<string, any>): RouteTreeNode => {
|
7
|
+
const sortNodes = (nodes: RouteTreeNode[]): RouteTreeNode[] => {
|
8
|
+
return nodes.sort((a, b) => {
|
9
|
+
// If both have orders, sort by order
|
10
|
+
if (a.value.order !== undefined && b.value.order !== undefined) {
|
11
|
+
return a.value.order - b.value.order
|
12
|
+
}
|
13
|
+
// If only one has order, it comes first
|
14
|
+
if (a.value.order !== undefined) return -1
|
15
|
+
if (b.value.order !== undefined) return 1
|
16
|
+
// Otherwise sort alphabetically
|
17
|
+
return a.value.name.localeCompare(b.value.name)
|
18
|
+
})
|
19
|
+
}
|
20
|
+
|
21
|
+
const buildNode = (name: string, value: any): RouteTreeNode => {
|
22
|
+
const parsed = name.match(/^(?<order>\d+)[_-](?<name>.+)$/)
|
23
|
+
const nodeName = parsed?.groups?.[`name`] ?? name
|
24
|
+
const order = parsed?.groups?.[`order`] ? parseInt(parsed.groups[`order`], 10) : undefined
|
25
|
+
|
26
|
+
if (typeof value === 'object' && !value.isFile) {
|
27
|
+
// Directory node
|
28
|
+
const children = Object.entries(value).map(([childName, childValue]) => buildNode(childName, childValue))
|
29
|
+
return Tree.node(
|
30
|
+
{ name: nodeName, order, type: 'directory' },
|
31
|
+
sortNodes(children),
|
32
|
+
)
|
33
|
+
} else {
|
34
|
+
// File node - strip extension (but keep 'index' as is)
|
35
|
+
const nameWithoutExtension = nodeName.replace(/\.(md|mdx)$/, '')
|
36
|
+
return Tree.node({ name: nameWithoutExtension, order, type: 'file', route: value })
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
const children = Object.entries(structure).map(([name, value]) => buildNode(name, value))
|
41
|
+
return Tree.node(
|
42
|
+
{ name: 'root', type: 'directory' },
|
43
|
+
sortNodes(children),
|
44
|
+
)
|
45
|
+
}
|
46
|
+
|
47
|
+
describe('scan-tree structure', () => {
|
48
|
+
test('builds tree from flat file structure', () => {
|
49
|
+
const tree = mockRouteTree({
|
50
|
+
'getting-started.md': { isFile: true },
|
51
|
+
'guide': {
|
52
|
+
'introduction.md': { isFile: true },
|
53
|
+
'basics.md': { isFile: true },
|
54
|
+
},
|
55
|
+
'api': {
|
56
|
+
'reference.md': { isFile: true },
|
57
|
+
},
|
58
|
+
})
|
59
|
+
|
60
|
+
expect(tree.value.name).toBe('root')
|
61
|
+
expect(tree.children).toHaveLength(3)
|
62
|
+
|
63
|
+
const guide = tree.children.find(c => c.value.name === 'guide')
|
64
|
+
expect(guide).toBeDefined()
|
65
|
+
expect(guide!.children).toHaveLength(2)
|
66
|
+
})
|
67
|
+
|
68
|
+
test('handles numbered prefixes on files', () => {
|
69
|
+
const tree = mockRouteTree({
|
70
|
+
'10_getting-started.md': { isFile: true },
|
71
|
+
'20_configuration.md': { isFile: true },
|
72
|
+
'30_advanced.md': { isFile: true },
|
73
|
+
})
|
74
|
+
|
75
|
+
const children = tree.children
|
76
|
+
expect(children[0]!.value).toMatchObject({ name: 'getting-started', order: 10 })
|
77
|
+
expect(children[1]!.value).toMatchObject({ name: 'configuration', order: 20 })
|
78
|
+
expect(children[2]!.value).toMatchObject({ name: 'advanced', order: 30 })
|
79
|
+
})
|
80
|
+
|
81
|
+
test('handles numbered prefixes on directories', () => {
|
82
|
+
const tree = mockRouteTree({
|
83
|
+
'10_guide': {
|
84
|
+
'intro.md': { isFile: true },
|
85
|
+
},
|
86
|
+
'20_api': {
|
87
|
+
'reference.md': { isFile: true },
|
88
|
+
},
|
89
|
+
'05_quickstart': {
|
90
|
+
'index.md': { isFile: true },
|
91
|
+
},
|
92
|
+
})
|
93
|
+
|
94
|
+
const children = tree.children
|
95
|
+
expect(children[0]!.value).toMatchObject({ name: 'quickstart', order: 5 })
|
96
|
+
expect(children[1]!.value).toMatchObject({ name: 'guide', order: 10 })
|
97
|
+
expect(children[2]!.value).toMatchObject({ name: 'api', order: 20 })
|
98
|
+
})
|
99
|
+
|
100
|
+
test('handles mixed numbered and non-numbered items', () => {
|
101
|
+
const tree = mockRouteTree({
|
102
|
+
'10_guide': {
|
103
|
+
'intro.md': { isFile: true },
|
104
|
+
},
|
105
|
+
'troubleshooting': {
|
106
|
+
'common.md': { isFile: true },
|
107
|
+
},
|
108
|
+
'05_quickstart': {
|
109
|
+
'index.md': { isFile: true },
|
110
|
+
},
|
111
|
+
'api': {
|
112
|
+
'reference.md': { isFile: true },
|
113
|
+
},
|
114
|
+
})
|
115
|
+
|
116
|
+
// After sorting: numbered items first (5, 10), then alphabetical (api, troubleshooting)
|
117
|
+
const childNames = tree.children.map(c => c.value.name)
|
118
|
+
expect(childNames).toEqual(['quickstart', 'guide', 'api', 'troubleshooting'])
|
119
|
+
})
|
120
|
+
|
121
|
+
test('handles nested numbered prefixes', () => {
|
122
|
+
const tree = mockRouteTree({
|
123
|
+
'10_guide': {
|
124
|
+
'10_getting-started.md': { isFile: true },
|
125
|
+
'20_basics.md': { isFile: true },
|
126
|
+
'troubleshooting.md': { isFile: true },
|
127
|
+
'05_prerequisites.md': { isFile: true },
|
128
|
+
},
|
129
|
+
})
|
130
|
+
|
131
|
+
const guide = tree.children[0]!
|
132
|
+
expect(guide.value.name).toBe('guide')
|
133
|
+
|
134
|
+
const guideChildNames = guide.children.map(c => c.value.name)
|
135
|
+
expect(guideChildNames).toEqual(['prerequisites', 'getting-started', 'basics', 'troubleshooting'])
|
136
|
+
})
|
137
|
+
|
138
|
+
test('handles index files', () => {
|
139
|
+
const tree = mockRouteTree({
|
140
|
+
'guide': {
|
141
|
+
'index.md': { isFile: true },
|
142
|
+
'intro.md': { isFile: true },
|
143
|
+
},
|
144
|
+
})
|
145
|
+
|
146
|
+
const guide = tree.children[0]!
|
147
|
+
expect(guide.children).toHaveLength(2)
|
148
|
+
expect(guide.children.map(c => c.value.name)).toContain('index')
|
149
|
+
expect(guide.children.map(c => c.value.name)).toContain('intro')
|
150
|
+
})
|
151
|
+
|
152
|
+
test('creates directory nodes with correct type', () => {
|
153
|
+
const tree = mockRouteTree({
|
154
|
+
'10_guide': {
|
155
|
+
'intro.md': { isFile: true },
|
156
|
+
},
|
157
|
+
'api-reference.md': { isFile: true },
|
158
|
+
})
|
159
|
+
|
160
|
+
expect(tree.value.type).toBe('directory')
|
161
|
+
|
162
|
+
const guide = tree.children.find(c => c.value.name === 'guide')
|
163
|
+
expect(guide?.value.type).toBe('directory')
|
164
|
+
expect(guide?.value.order).toBe(10)
|
165
|
+
|
166
|
+
const apiRef = tree.children.find(c => c.value.name === 'api-reference')
|
167
|
+
expect(apiRef?.value.type).toBe('file')
|
168
|
+
})
|
169
|
+
|
170
|
+
test('handles file collisions with same order number - last wins', () => {
|
171
|
+
// This test simulates what would happen if the scanner processes files in order
|
172
|
+
// The mock doesn't actually test the scanner logic but documents expected behavior
|
173
|
+
const tree = mockRouteTree({
|
174
|
+
'10_about.md': { isFile: true, processedFirst: true },
|
175
|
+
'10-about.md': { isFile: true, processedLast: true }, // Same order, same logical name
|
176
|
+
})
|
177
|
+
|
178
|
+
// In the real scanner, only one 'about' node would exist
|
179
|
+
// The test structure above would result in duplicate nodes in our mock
|
180
|
+
// Document the expected behavior: last processed file should win
|
181
|
+
const aboutNodes = tree.children.filter(c => c.value.name === 'about')
|
182
|
+
|
183
|
+
// Note: This mock creates duplicates; real scanner would replace
|
184
|
+
expect(aboutNodes.length).toBeGreaterThan(0)
|
185
|
+
|
186
|
+
// Document that when orders are equal, last file processed wins
|
187
|
+
// This aligns with the linter message about "file processed later is being kept"
|
188
|
+
})
|
189
|
+
})
|