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
@@ -1,132 +0,0 @@
|
|
1
|
-
import { describe, expect, it } from 'vitest'
|
2
|
-
import { GraphQLDocument } from './$.ts'
|
3
|
-
|
4
|
-
describe('GraphQLDocument', () => {
|
5
|
-
describe('analyze', () => {
|
6
|
-
it('should parse a simple query and extract identifiers', () => {
|
7
|
-
const source = `
|
8
|
-
query GetUser($id: ID!) {
|
9
|
-
user(id: $id) {
|
10
|
-
name
|
11
|
-
email
|
12
|
-
}
|
13
|
-
}
|
14
|
-
`
|
15
|
-
|
16
|
-
const result = GraphQLDocument.analyze(source)
|
17
|
-
|
18
|
-
expect(result.isValid).toBe(true)
|
19
|
-
expect(result.identifiers.all.length).toBeGreaterThan(0)
|
20
|
-
|
21
|
-
// Should find variable
|
22
|
-
const variables = result.identifiers.byKind.get('Variable') || []
|
23
|
-
expect(variables).toHaveLength(1)
|
24
|
-
expect(variables[0]?.name).toBe('id')
|
25
|
-
|
26
|
-
// Should find fields
|
27
|
-
const fields = result.identifiers.byKind.get('Field') || []
|
28
|
-
expect(fields.length).toBeGreaterThan(0)
|
29
|
-
const fieldNames = fields.map(f => f.name)
|
30
|
-
expect(fieldNames).toContain('user')
|
31
|
-
expect(fieldNames).toContain('name')
|
32
|
-
expect(fieldNames).toContain('email')
|
33
|
-
|
34
|
-
// Should find types
|
35
|
-
const types = result.identifiers.byKind.get('Type') || []
|
36
|
-
expect(types.length).toBeGreaterThan(0)
|
37
|
-
const typeNames = types.map(t => t.name)
|
38
|
-
expect(typeNames).toContain('ID')
|
39
|
-
})
|
40
|
-
|
41
|
-
it('should handle parsing errors gracefully', () => {
|
42
|
-
const invalidSource = `
|
43
|
-
query {
|
44
|
-
user(id: $id {
|
45
|
-
name
|
46
|
-
}
|
47
|
-
}
|
48
|
-
`
|
49
|
-
|
50
|
-
const result = GraphQLDocument.analyze(invalidSource)
|
51
|
-
|
52
|
-
expect(result.isValid).toBe(false)
|
53
|
-
expect(result.identifiers.errors.length).toBeGreaterThan(0)
|
54
|
-
})
|
55
|
-
|
56
|
-
it('should extract context information', () => {
|
57
|
-
const source = `
|
58
|
-
query GetUserPosts($userId: ID!) {
|
59
|
-
user(id: $userId) {
|
60
|
-
posts {
|
61
|
-
title
|
62
|
-
content
|
63
|
-
}
|
64
|
-
}
|
65
|
-
}
|
66
|
-
`
|
67
|
-
|
68
|
-
const result = GraphQLDocument.analyze(source)
|
69
|
-
|
70
|
-
const fields = result.identifiers.byKind.get('Field') || []
|
71
|
-
const userField = fields.find(f => f.name === 'user')
|
72
|
-
|
73
|
-
expect(userField?.context.operationType).toBe('query')
|
74
|
-
expect(userField?.context.operationName).toBe('GetUserPosts')
|
75
|
-
expect(userField?.context.selectionPath).toEqual(['user'])
|
76
|
-
})
|
77
|
-
|
78
|
-
it('should track parent types in nested selections', () => {
|
79
|
-
const source = `
|
80
|
-
query {
|
81
|
-
user {
|
82
|
-
posts {
|
83
|
-
title
|
84
|
-
}
|
85
|
-
}
|
86
|
-
}
|
87
|
-
`
|
88
|
-
|
89
|
-
const result = GraphQLDocument.analyze(source)
|
90
|
-
|
91
|
-
const fields = result.identifiers.byKind.get('Field') || []
|
92
|
-
const titleField = fields.find(f => f.name === 'title')
|
93
|
-
|
94
|
-
expect(titleField?.schemaPath).toEqual(['Post', 'title'])
|
95
|
-
})
|
96
|
-
})
|
97
|
-
|
98
|
-
describe('extractIdentifiers', () => {
|
99
|
-
it('should extract identifiers with positions', () => {
|
100
|
-
const source = `query { user { name } }`
|
101
|
-
|
102
|
-
const identifiers = GraphQLDocument.extractIdentifiers(source)
|
103
|
-
|
104
|
-
expect(identifiers.all.length).toBeGreaterThan(0)
|
105
|
-
|
106
|
-
// Each identifier should have position information
|
107
|
-
for (const identifier of identifiers.all) {
|
108
|
-
expect(identifier.position.start).toBeTypeOf('number')
|
109
|
-
expect(identifier.position.end).toBeTypeOf('number')
|
110
|
-
expect(identifier.position.line).toBeGreaterThan(0)
|
111
|
-
expect(identifier.position.column).toBeGreaterThan(0)
|
112
|
-
}
|
113
|
-
})
|
114
|
-
|
115
|
-
it('should create proper index maps', () => {
|
116
|
-
const source = `query { user { name } }`
|
117
|
-
|
118
|
-
const identifiers = GraphQLDocument.extractIdentifiers(source)
|
119
|
-
|
120
|
-
// Should have position index
|
121
|
-
expect(identifiers.byPosition.size).toBeGreaterThan(0)
|
122
|
-
|
123
|
-
// Should have kind index
|
124
|
-
expect(identifiers.byKind.size).toBeGreaterThan(0)
|
125
|
-
|
126
|
-
// All identifiers should be indexed
|
127
|
-
for (const identifier of identifiers.all) {
|
128
|
-
expect(identifiers.byPosition.get(identifier.position.start)).toBe(identifier)
|
129
|
-
}
|
130
|
-
})
|
131
|
-
})
|
132
|
-
})
|
@@ -1 +0,0 @@
|
|
1
|
-
export * as GraphQLDocument from './graphql-document.ts'
|
@@ -1,102 +0,0 @@
|
|
1
|
-
# GraphQL Document Component
|
2
|
-
|
3
|
-
Transform static GraphQL code blocks into interactive documentation with hyperlinks, tooltips, and schema validation.
|
4
|
-
|
5
|
-
## Overview
|
6
|
-
|
7
|
-
The GraphQL Document component enhances markdown code blocks with:
|
8
|
-
|
9
|
-
- **Hyperlinked identifiers** - Click to navigate to reference documentation
|
10
|
-
- **Hover tooltips** - View type information and descriptions
|
11
|
-
- **Schema validation** - Highlight errors and deprecations
|
12
|
-
- **Build-time checking** - Catch GraphQL errors during build
|
13
|
-
|
14
|
-
## Architecture
|
15
|
-
|
16
|
-
The implementation follows a layered architecture:
|
17
|
-
|
18
|
-
1. **Analysis Layer** - Parses GraphQL and extracts identifiers
|
19
|
-
2. **Schema Integration** - Resolves identifiers against GraphQL schema
|
20
|
-
3. **Positioning Engine** - Maps source positions to DOM coordinates
|
21
|
-
4. **UI Components** - React components for interactivity
|
22
|
-
5. **Orchestration** - Main component tying everything together
|
23
|
-
6. **Polen Integration** - Virtual modules and Vite plugin
|
24
|
-
|
25
|
-
## Usage
|
26
|
-
|
27
|
-
### Basic Setup
|
28
|
-
|
29
|
-
1. Import the component in your MDX files:
|
30
|
-
|
31
|
-
```typescript
|
32
|
-
import { GraphQLDocumentWithSchema } from 'polen/components'
|
33
|
-
```
|
34
|
-
|
35
|
-
2. Use the component with GraphQL documents:
|
36
|
-
|
37
|
-
```mdx
|
38
|
-
<GraphQLDocumentWithSchema>
|
39
|
-
{`query GetUser($id: ID!) {
|
40
|
-
user(id: $id) {
|
41
|
-
name
|
42
|
-
email
|
43
|
-
}
|
44
|
-
}`}
|
45
|
-
</GraphQLDocumentWithSchema>
|
46
|
-
```
|
47
|
-
|
48
|
-
### Component Props
|
49
|
-
|
50
|
-
The `GraphQLDocumentWithSchema` component automatically loads the schema from Polen's virtual modules. You can pass options:
|
51
|
-
|
52
|
-
```mdx
|
53
|
-
<GraphQLDocumentWithSchema
|
54
|
-
options={{
|
55
|
-
debug: true,
|
56
|
-
onNavigate: (url) => console.log('Navigate to:', url)
|
57
|
-
}}
|
58
|
-
>
|
59
|
-
{`query { user { name } }`}
|
60
|
-
</GraphQLDocumentWithSchema>
|
61
|
-
```
|
62
|
-
|
63
|
-
### React Component
|
64
|
-
|
65
|
-
Use the component directly in React:
|
66
|
-
|
67
|
-
```tsx
|
68
|
-
import { GraphQLDocument } from 'polen/lib/graphql-document'
|
69
|
-
|
70
|
-
<GraphQLDocument schema={schema} options={{ debug: true }}>
|
71
|
-
{`query { user { name } }`}
|
72
|
-
</GraphQLDocument>
|
73
|
-
```
|
74
|
-
|
75
|
-
## Implementation Details
|
76
|
-
|
77
|
-
### Key Components
|
78
|
-
|
79
|
-
- `GraphQLDocument` - Main React component
|
80
|
-
- `IdentifierLink` - Interactive overlay for identifiers
|
81
|
-
- `HoverTooltip` - Tooltip showing type information
|
82
|
-
- `GraphQLDocumentWithSchema` - Wrapper that loads schema from Polen
|
83
|
-
- `PolenSchemaResolver` - Schema integration
|
84
|
-
|
85
|
-
### Testing
|
86
|
-
|
87
|
-
Run tests with:
|
88
|
-
|
89
|
-
```bash
|
90
|
-
pnpm test:unit src/lib/graphql-document
|
91
|
-
```
|
92
|
-
|
93
|
-
### Type Safety
|
94
|
-
|
95
|
-
Full TypeScript support with strict typing throughout.
|
96
|
-
|
97
|
-
## Future Enhancements
|
98
|
-
|
99
|
-
- Code folding for large queries
|
100
|
-
- Inline query execution
|
101
|
-
- Schema diff visualization
|
102
|
-
- Export to various formats
|
@@ -1,415 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
type ArgumentNode,
|
3
|
-
type ASTNode,
|
4
|
-
type DirectiveNode,
|
5
|
-
type DocumentNode,
|
6
|
-
type FieldNode,
|
7
|
-
type FragmentDefinitionNode,
|
8
|
-
type GraphQLError,
|
9
|
-
type GraphQLSchema,
|
10
|
-
type OperationDefinitionNode,
|
11
|
-
parse,
|
12
|
-
validate,
|
13
|
-
type VariableDefinitionNode,
|
14
|
-
visit,
|
15
|
-
} from 'graphql'
|
16
|
-
import type {
|
17
|
-
AnalysisConfig,
|
18
|
-
AnalysisError,
|
19
|
-
AnalysisResult,
|
20
|
-
GraphQLAnalyzer,
|
21
|
-
Identifier,
|
22
|
-
IdentifierContext,
|
23
|
-
IdentifierMap,
|
24
|
-
} from './types.ts'
|
25
|
-
|
26
|
-
/**
|
27
|
-
* Default GraphQL document analyzer implementation
|
28
|
-
*/
|
29
|
-
export class DefaultGraphQLAnalyzer implements GraphQLAnalyzer {
|
30
|
-
/**
|
31
|
-
* Parse a GraphQL document string into an AST
|
32
|
-
*/
|
33
|
-
parse(source: string): DocumentNode {
|
34
|
-
try {
|
35
|
-
return parse(source, {
|
36
|
-
noLocation: false, // We need location info for positioning
|
37
|
-
})
|
38
|
-
} catch (error) {
|
39
|
-
throw new Error(`Failed to parse GraphQL document: ${error instanceof Error ? error.message : 'Unknown error'}`)
|
40
|
-
}
|
41
|
-
}
|
42
|
-
|
43
|
-
/**
|
44
|
-
* Validate a GraphQL document against a schema
|
45
|
-
*/
|
46
|
-
validateAgainstSchema(ast: DocumentNode, schema: GraphQLSchema): GraphQLError[] {
|
47
|
-
return [...validate(schema, ast)]
|
48
|
-
}
|
49
|
-
|
50
|
-
/**
|
51
|
-
* Extract all identifiers from a GraphQL AST
|
52
|
-
*/
|
53
|
-
extractIdentifiers(ast: DocumentNode, config: AnalysisConfig = {}): IdentifierMap {
|
54
|
-
const identifiers: Identifier[] = []
|
55
|
-
const errors: AnalysisError[] = []
|
56
|
-
const schema = config.schema
|
57
|
-
|
58
|
-
// Context tracking during traversal
|
59
|
-
let currentOperationType: 'query' | 'mutation' | 'subscription' | undefined
|
60
|
-
let currentOperationName: string | undefined
|
61
|
-
let currentFragment: string | undefined
|
62
|
-
let selectionPath: string[] = []
|
63
|
-
let parentTypes: string[] = []
|
64
|
-
|
65
|
-
// Helper function to create context
|
66
|
-
const createContext = (): IdentifierContext => {
|
67
|
-
return {
|
68
|
-
operationType: currentOperationType,
|
69
|
-
operationName: currentOperationName,
|
70
|
-
inFragment: currentFragment,
|
71
|
-
selectionPath: [...selectionPath],
|
72
|
-
}
|
73
|
-
}
|
74
|
-
|
75
|
-
visit(ast, {
|
76
|
-
OperationDefinition: {
|
77
|
-
enter: (node: OperationDefinitionNode) => {
|
78
|
-
currentOperationType = node.operation
|
79
|
-
currentOperationName = node.name?.value
|
80
|
-
selectionPath = []
|
81
|
-
|
82
|
-
// Set the root type based on operation type
|
83
|
-
if (schema) {
|
84
|
-
if (node.operation === 'query' && schema.getQueryType()) {
|
85
|
-
parentTypes = [schema.getQueryType()!.name]
|
86
|
-
} else if (node.operation === 'mutation' && schema.getMutationType()) {
|
87
|
-
parentTypes = [schema.getMutationType()!.name]
|
88
|
-
} else if (node.operation === 'subscription' && schema.getSubscriptionType()) {
|
89
|
-
parentTypes = [schema.getSubscriptionType()!.name]
|
90
|
-
} else {
|
91
|
-
parentTypes = []
|
92
|
-
}
|
93
|
-
} else {
|
94
|
-
// Fallback to default root type names
|
95
|
-
if (node.operation === 'query') {
|
96
|
-
parentTypes = ['Query']
|
97
|
-
} else if (node.operation === 'mutation') {
|
98
|
-
parentTypes = ['Mutation']
|
99
|
-
} else if (node.operation === 'subscription') {
|
100
|
-
parentTypes = ['Subscription']
|
101
|
-
} else {
|
102
|
-
parentTypes = []
|
103
|
-
}
|
104
|
-
}
|
105
|
-
},
|
106
|
-
leave: () => {
|
107
|
-
currentOperationType = undefined
|
108
|
-
currentOperationName = undefined
|
109
|
-
parentTypes = []
|
110
|
-
},
|
111
|
-
},
|
112
|
-
|
113
|
-
FragmentDefinition: {
|
114
|
-
enter: (node: FragmentDefinitionNode) => {
|
115
|
-
currentFragment = node.name.value
|
116
|
-
selectionPath = []
|
117
|
-
parentTypes = [node.typeCondition.name.value]
|
118
|
-
|
119
|
-
// Add fragment name as identifier
|
120
|
-
this.addIdentifier(identifiers, {
|
121
|
-
name: node.name.value,
|
122
|
-
kind: 'Fragment',
|
123
|
-
position: this.getPosition(node.name),
|
124
|
-
schemaPath: [node.name.value],
|
125
|
-
context: createContext(),
|
126
|
-
})
|
127
|
-
|
128
|
-
// Add type condition as identifier
|
129
|
-
this.addIdentifier(identifiers, {
|
130
|
-
name: node.typeCondition.name.value,
|
131
|
-
kind: 'Type',
|
132
|
-
position: this.getPosition(node.typeCondition.name),
|
133
|
-
schemaPath: [node.typeCondition.name.value],
|
134
|
-
context: createContext(),
|
135
|
-
})
|
136
|
-
},
|
137
|
-
leave: () => {
|
138
|
-
currentFragment = undefined
|
139
|
-
parentTypes = []
|
140
|
-
},
|
141
|
-
},
|
142
|
-
|
143
|
-
Field: {
|
144
|
-
enter: (node: FieldNode) => {
|
145
|
-
const fieldName = node.name.value
|
146
|
-
const parentType = parentTypes[parentTypes.length - 1]
|
147
|
-
|
148
|
-
selectionPath.push(fieldName)
|
149
|
-
|
150
|
-
this.addIdentifier(identifiers, {
|
151
|
-
name: fieldName,
|
152
|
-
kind: 'Field',
|
153
|
-
position: this.getPosition(node.name),
|
154
|
-
parentType,
|
155
|
-
schemaPath: parentType ? [parentType, fieldName] : [fieldName],
|
156
|
-
context: createContext(),
|
157
|
-
})
|
158
|
-
|
159
|
-
// Track parent type for nested selections
|
160
|
-
// Resolve the field's return type from schema if available
|
161
|
-
let pushedType = false
|
162
|
-
if (schema && parentType) {
|
163
|
-
const type = schema.getType(parentType)
|
164
|
-
if (type && ('getFields' in type)) {
|
165
|
-
const fields = (type as any).getFields()
|
166
|
-
const field = fields[fieldName]
|
167
|
-
if (field) {
|
168
|
-
// Get the base type name (unwrap NonNull and List wrappers)
|
169
|
-
let fieldType = field.type
|
170
|
-
while (fieldType.ofType) {
|
171
|
-
fieldType = fieldType.ofType
|
172
|
-
}
|
173
|
-
if (fieldType.name) {
|
174
|
-
parentTypes.push(fieldType.name)
|
175
|
-
pushedType = true
|
176
|
-
}
|
177
|
-
}
|
178
|
-
}
|
179
|
-
} else if (this.isObjectField(fieldName)) {
|
180
|
-
// Fallback to inference if no schema
|
181
|
-
const inferredType = this.inferReturnType(parentType, fieldName)
|
182
|
-
parentTypes.push(inferredType)
|
183
|
-
pushedType = true
|
184
|
-
} // Store whether we pushed a type for this field
|
185
|
-
|
186
|
-
;(node as any)._pushedType = pushedType
|
187
|
-
},
|
188
|
-
leave: (node: FieldNode) => {
|
189
|
-
selectionPath.pop()
|
190
|
-
|
191
|
-
// Remove parent type if we added one in enter
|
192
|
-
if ((node as any)._pushedType) {
|
193
|
-
parentTypes.pop()
|
194
|
-
}
|
195
|
-
},
|
196
|
-
},
|
197
|
-
|
198
|
-
Argument: {
|
199
|
-
enter: (node: ArgumentNode) => {
|
200
|
-
const argName = node.name.value
|
201
|
-
const parentType = parentTypes[parentTypes.length - 1]
|
202
|
-
const fieldName = selectionPath[selectionPath.length - 1]
|
203
|
-
|
204
|
-
this.addIdentifier(identifiers, {
|
205
|
-
name: argName,
|
206
|
-
kind: 'Argument',
|
207
|
-
position: this.getPosition(node.name),
|
208
|
-
parentType,
|
209
|
-
schemaPath: parentType && fieldName
|
210
|
-
? [parentType, fieldName, argName]
|
211
|
-
: [argName],
|
212
|
-
context: createContext(),
|
213
|
-
})
|
214
|
-
},
|
215
|
-
},
|
216
|
-
|
217
|
-
VariableDefinition: {
|
218
|
-
enter: (node: VariableDefinitionNode) => {
|
219
|
-
this.addIdentifier(identifiers, {
|
220
|
-
name: node.variable.name.value,
|
221
|
-
kind: 'Variable',
|
222
|
-
position: this.getPosition(node.variable.name),
|
223
|
-
schemaPath: [node.variable.name.value],
|
224
|
-
context: createContext(),
|
225
|
-
})
|
226
|
-
|
227
|
-
// Also add the type reference
|
228
|
-
const typeName = this.extractTypeName(node.type)
|
229
|
-
if (typeName) {
|
230
|
-
this.addIdentifier(identifiers, {
|
231
|
-
name: typeName,
|
232
|
-
kind: 'Type',
|
233
|
-
position: this.getTypePosition(node.type),
|
234
|
-
schemaPath: [typeName],
|
235
|
-
context: createContext(),
|
236
|
-
})
|
237
|
-
}
|
238
|
-
},
|
239
|
-
},
|
240
|
-
|
241
|
-
Directive: {
|
242
|
-
enter: (node: DirectiveNode) => {
|
243
|
-
this.addIdentifier(identifiers, {
|
244
|
-
name: node.name.value,
|
245
|
-
kind: 'Directive',
|
246
|
-
position: this.getPosition(node.name),
|
247
|
-
schemaPath: [node.name.value],
|
248
|
-
context: createContext(),
|
249
|
-
})
|
250
|
-
},
|
251
|
-
},
|
252
|
-
})
|
253
|
-
|
254
|
-
return this.createIdentifierMap(identifiers, errors)
|
255
|
-
}
|
256
|
-
|
257
|
-
/**
|
258
|
-
* Perform complete analysis of a GraphQL document
|
259
|
-
*/
|
260
|
-
analyze(source: string, config: AnalysisConfig = {}): AnalysisResult {
|
261
|
-
try {
|
262
|
-
const ast = this.parse(source)
|
263
|
-
const identifiers = this.extractIdentifiers(ast, config)
|
264
|
-
|
265
|
-
let validationErrors: GraphQLError[] = []
|
266
|
-
if (config.validateAgainstSchema && config.schema) {
|
267
|
-
validationErrors = this.validateAgainstSchema(ast, config.schema)
|
268
|
-
}
|
269
|
-
|
270
|
-
return {
|
271
|
-
ast,
|
272
|
-
identifiers,
|
273
|
-
isValid: validationErrors.length === 0,
|
274
|
-
errors: validationErrors,
|
275
|
-
}
|
276
|
-
} catch (error) {
|
277
|
-
return {
|
278
|
-
ast: { kind: 'Document', definitions: [] } as DocumentNode,
|
279
|
-
identifiers: this.createIdentifierMap([], [{
|
280
|
-
message: error instanceof Error ? error.message : 'Unknown parsing error',
|
281
|
-
severity: 'error',
|
282
|
-
}]),
|
283
|
-
isValid: false,
|
284
|
-
errors: [],
|
285
|
-
}
|
286
|
-
}
|
287
|
-
}
|
288
|
-
|
289
|
-
// Private helper methods
|
290
|
-
|
291
|
-
private addIdentifier(identifiers: Identifier[], identifier: Identifier): void {
|
292
|
-
identifiers.push(identifier)
|
293
|
-
}
|
294
|
-
|
295
|
-
private getPosition(node: ASTNode): Identifier['position'] {
|
296
|
-
const loc = node.loc
|
297
|
-
if (!loc) {
|
298
|
-
return { start: 0, end: 0, line: 1, column: 1 }
|
299
|
-
}
|
300
|
-
|
301
|
-
return {
|
302
|
-
start: loc.start,
|
303
|
-
end: loc.end,
|
304
|
-
line: loc.startToken.line,
|
305
|
-
column: loc.startToken.column,
|
306
|
-
}
|
307
|
-
}
|
308
|
-
|
309
|
-
private getTypePosition(node: ASTNode): Identifier['position'] {
|
310
|
-
// For type nodes, we need to extract the base type name position
|
311
|
-
// This is a simplified implementation
|
312
|
-
return this.getPosition(node)
|
313
|
-
}
|
314
|
-
|
315
|
-
private extractTypeName(typeNode: any): string | null {
|
316
|
-
// Recursively extract the base type name from wrapped types (NonNull, List)
|
317
|
-
if (typeNode.kind === 'NamedType') {
|
318
|
-
return typeNode.name.value
|
319
|
-
}
|
320
|
-
if (typeNode.kind === 'NonNullType' || typeNode.kind === 'ListType') {
|
321
|
-
return this.extractTypeName(typeNode.type)
|
322
|
-
}
|
323
|
-
return null
|
324
|
-
}
|
325
|
-
|
326
|
-
private isObjectField(fieldName: string): boolean {
|
327
|
-
// This is only used as a fallback when no schema is available
|
328
|
-
// Common patterns for object-returning fields
|
329
|
-
const objectFieldPatterns = [
|
330
|
-
'user',
|
331
|
-
'users',
|
332
|
-
'post',
|
333
|
-
'posts',
|
334
|
-
'comment',
|
335
|
-
'comments',
|
336
|
-
'profile',
|
337
|
-
'settings',
|
338
|
-
'organization',
|
339
|
-
'project',
|
340
|
-
'target',
|
341
|
-
'member',
|
342
|
-
'members',
|
343
|
-
'node',
|
344
|
-
'nodes',
|
345
|
-
'edge',
|
346
|
-
'edges',
|
347
|
-
]
|
348
|
-
return objectFieldPatterns.some(pattern => fieldName.toLowerCase().includes(pattern))
|
349
|
-
}
|
350
|
-
|
351
|
-
private inferReturnType(parentType: string | undefined, fieldName: string): string {
|
352
|
-
// Simplified type inference - in real implementation would use schema
|
353
|
-
if (fieldName === 'user') return 'User'
|
354
|
-
if (fieldName === 'posts') return 'Post'
|
355
|
-
if (fieldName === 'comments') return 'Comment'
|
356
|
-
return fieldName.charAt(0).toUpperCase() + fieldName.slice(1)
|
357
|
-
}
|
358
|
-
|
359
|
-
private createContext(
|
360
|
-
operationType?: 'query' | 'mutation' | 'subscription',
|
361
|
-
operationName?: string,
|
362
|
-
inFragment?: string,
|
363
|
-
selectionPath: string[] = [],
|
364
|
-
): IdentifierContext {
|
365
|
-
return {
|
366
|
-
operationType,
|
367
|
-
operationName,
|
368
|
-
inFragment,
|
369
|
-
selectionPath: [...selectionPath],
|
370
|
-
}
|
371
|
-
}
|
372
|
-
|
373
|
-
private createIdentifierMap(identifiers: Identifier[], errors: AnalysisError[]): IdentifierMap {
|
374
|
-
const byPosition = new Map<number, Identifier>()
|
375
|
-
const byKind = new Map<Identifier['kind'], Identifier[]>()
|
376
|
-
|
377
|
-
for (const identifier of identifiers) {
|
378
|
-
// Index by position
|
379
|
-
byPosition.set(identifier.position.start, identifier)
|
380
|
-
|
381
|
-
// Group by kind
|
382
|
-
if (!byKind.has(identifier.kind)) {
|
383
|
-
byKind.set(identifier.kind, [])
|
384
|
-
}
|
385
|
-
byKind.get(identifier.kind)!.push(identifier)
|
386
|
-
}
|
387
|
-
|
388
|
-
return {
|
389
|
-
byPosition,
|
390
|
-
byKind,
|
391
|
-
errors,
|
392
|
-
all: identifiers,
|
393
|
-
}
|
394
|
-
}
|
395
|
-
}
|
396
|
-
|
397
|
-
/**
|
398
|
-
* Default analyzer instance
|
399
|
-
*/
|
400
|
-
export const analyzer = new DefaultGraphQLAnalyzer()
|
401
|
-
|
402
|
-
/**
|
403
|
-
* Convenience function to analyze a GraphQL document
|
404
|
-
*/
|
405
|
-
export const analyze = (source: string, config?: AnalysisConfig): AnalysisResult => {
|
406
|
-
return analyzer.analyze(source, config)
|
407
|
-
}
|
408
|
-
|
409
|
-
/**
|
410
|
-
* Convenience function to extract identifiers from a GraphQL document
|
411
|
-
*/
|
412
|
-
export const extractIdentifiers = (source: string, config?: AnalysisConfig): IdentifierMap => {
|
413
|
-
const ast = analyzer.parse(source)
|
414
|
-
return analyzer.extractIdentifiers(ast, config)
|
415
|
-
}
|