From 9c2f3bec6dd0b0d652695e01a8a9d1ef097751ca Mon Sep 17 00:00:00 2001 From: Farnabaz Date: Thu, 3 Aug 2023 19:08:27 +0330 Subject: [PATCH] feat: advanced query schema (#2213) --- docs/components/content/ChangeLog.vue | 2 +- package.json | 1 + playground/shared/components/NavItem.vue | 4 +- .../components/content/MarkdownBetween.vue | 6 +- pnpm-lock.yaml | 76 ++-- src/module.ts | 19 +- src/runtime/components/ContentDoc.vue | 14 +- src/runtime/components/ContentList.vue | 14 +- src/runtime/components/ContentNavigation.vue | 15 +- src/runtime/components/ContentQuery.vue | 47 ++- src/runtime/composables/client-db.ts | 16 +- src/runtime/composables/head.ts | 4 +- src/runtime/composables/navigation.ts | 7 +- src/runtime/composables/query.ts | 21 +- src/runtime/legacy/composables/client-db.ts | 139 +++++++ src/runtime/legacy/composables/query.ts | 107 ++++++ src/runtime/legacy/plugins/documentDriven.ts | 320 ++++++++++++++++ src/runtime/legacy/types.d.ts | 6 + src/runtime/plugins/documentDriven.ts | 75 ++-- src/runtime/query/match/pipeline-legacy.ts | 27 ++ src/runtime/query/match/pipeline.ts | 109 ++++-- src/runtime/query/query.ts | 84 +++-- src/runtime/server/api/navigation.ts | 8 +- src/runtime/server/api/query.ts | 34 +- src/runtime/server/content-index.ts | 7 +- src/runtime/server/storage.ts | 20 +- src/runtime/transformers/csv/parser.ts | 61 +-- src/runtime/transformers/json.ts | 4 +- src/runtime/transformers/markdown.ts | 2 +- src/runtime/types/api.ts | 24 ++ src/runtime/{types.d.ts => types/index.d.ts} | 2 +- src/runtime/types/query.d.ts | 351 ++++++++++++++++++ src/runtime/utils/query.ts | 12 +- test/__snapshots__/basic-aq.test.ts.snap | 86 +++++ test/basic-aq.test.ts | 99 +++++ test/document-driven-aq.test.ts | 77 ++++ test/document-driven.test.ts | 2 +- test/features/content-query.ts | 14 +- test/features/locales.ts | 14 +- test/features/query/query.test.ts | 74 ++-- test/features/regex.ts | 13 +- test/fixtures/basic-aq/.nuxtrc | 1 + test/fixtures/basic-aq/addons/nitro-plugin.ts | 19 + .../basic-aq/components/PropLogger.vue | 30 ++ .../basic-aq/components/content/Alert.vue | 5 + .../components/content/CustomProseP.vue | 5 + .../components/content/TestMarkdown.vue | 14 + test/fixtures/basic-aq/content-fa/hello.md | 1 + .../basic-aq/content-fa/translated.md | 1 + .../basic-aq/content/-dash-ignored.md | 1 + .../fixtures/basic-aq/content/.dot-ignored.md | 1 + test/fixtures/basic-aq/content/LoremIpsum.vue | 5 + .../basic-aq/content/_partial-content.md | 1 + .../basic-aq/content/_partial/content (v2).md | 1 + .../content/_partial/custom-paragraph.md | 6 + .../basic-aq/content/_partial/markdown.md | 3 + .../content/_partial/mdc-props-inline.md | 9 + .../basic-aq/content/_partial/mdc-props.md | 10 + .../content/_partial/prefix/foo/bar.md | 0 .../content/_partial/prefix/foo/baz.md | 0 .../content/_partial/prefix/foobarbaz.md | 0 .../content/_partial/simple-json.json | 3 + .../fixtures/basic-aq/content/_partial/xss.md | 1 + test/fixtures/basic-aq/content/cats/_dir.yml | 1 + test/fixtures/basic-aq/content/cats/bombay.md | 6 + test/fixtures/basic-aq/content/cats/index.md | 4 + .../fixtures/basic-aq/content/cats/persian.md | 6 + .../fixtures/basic-aq/content/cats/ragdoll.md | 6 + .../content/components/from-content.md | 4 + .../basic-aq/content/dogs/German Shepherd.md | 6 + test/fixtures/basic-aq/content/dogs/_dir.yml | 2 + .../fixtures/basic-aq/content/dogs/bulldog.md | 6 + test/fixtures/basic-aq/content/head.md | 9 + test/fixtures/basic-aq/content/index.md | 4 + .../basic-aq/content/navigation-disabled.md | 7 + .../basic-aq/content/numbers/1.one.md | 1 + .../basic-aq/content/numbers/13.thirteen.md | 1 + .../basic-aq/content/numbers/2.two.md | 1 + .../basic-aq/content/numbers/21.twenty-one.md | 1 + .../basic-aq/content/numbers/3.three.md | 1 + .../basic-aq/content/numbers/5.five.md | 1 + .../basic-aq/content/numbers/8.eight.md | 1 + .../content/test-navigation/1.index.md | 4 + .../content/test-navigation/2.page.md | 4 + .../99.not-hidden-dir/index.md | 1 + .../test-navigation/99.not-hidden-dir/page.md | 1 + .../basic-aq/content/test-navigation/_dir.yml | 3 + .../test-navigation/hidden-dir/_dir.yml | 2 + .../test-navigation/hidden-dir/index.md | 1 + .../test-navigation/hidden-dir/page.md | 1 + .../hidden-dir/sub-hidden-dir/page.md | 1 + test/fixtures/basic-aq/content/translated.md | 1 + .../basic-aq/content/with-'invalid'-char.md | 1 + ...23\343\201\253\343\201\241\343\201\257.md" | 5 + test/fixtures/basic-aq/nuxt.config.ts | 68 ++++ test/fixtures/basic-aq/pages/[...slug].vue | 3 + test/fixtures/basic-aq/pages/bypass-head.vue | 3 + test/fixtures/basic-aq/pages/dogs-list.vue | 20 + .../pages/features/custom-paragraph.vue | 3 + .../basic-aq/pages/features/empty-slot.vue | 45 +++ .../pages/features/multi-part-path.vue | 3 + .../basic-aq/pages/features/query-content.vue | 28 ++ .../features/slotted-content-renderer.vue | 20 + .../basic-aq/pages/locale-[locale].vue | 11 + .../basic-aq/pages/nav-with-query.vue | 62 ++++ test/fixtures/basic-aq/pages/parse.vue | 21 ++ test/fixtures/basic-aq/server/api/parse.ts | 11 + test/fixtures/basic-aq/tsconfig.json | 3 + .../components/content/Debug.vue | 36 ++ .../composables/useTheme.ts | 9 + .../document-driven-aq/content/0.index.md | 3 + .../document-driven-aq/content/1.debug.md | 6 + .../document-driven-aq/content/2.layout.md | 9 + .../document-driven-aq/content/3.fm-data.md | 6 + .../content/4.no-surround.md | 1 + .../document-driven-aq/content/5.og-image.md | 7 + .../document-driven-aq/content/_theme.yml | 1 + .../content/redirect/_dir.yml | 1 + .../document-driven-aq/layouts/reversed.vue | 18 + .../document-driven-aq/nuxt.config.ts | 20 + .../pages/custom-search.vue | 36 ++ .../document-driven-aq/pages/disabled.vue | 17 + .../document-driven-aq/pages/home.vue | 33 ++ .../document-driven-aq/pages/no-surround.vue | 19 + 124 files changed, 2439 insertions(+), 311 deletions(-) create mode 100644 src/runtime/legacy/composables/client-db.ts create mode 100644 src/runtime/legacy/composables/query.ts create mode 100644 src/runtime/legacy/plugins/documentDriven.ts create mode 100644 src/runtime/legacy/types.d.ts create mode 100644 src/runtime/query/match/pipeline-legacy.ts create mode 100644 src/runtime/types/api.ts rename src/runtime/{types.d.ts => types/index.d.ts} (99%) create mode 100644 src/runtime/types/query.d.ts create mode 100644 test/__snapshots__/basic-aq.test.ts.snap create mode 100644 test/basic-aq.test.ts create mode 100644 test/document-driven-aq.test.ts create mode 100644 test/fixtures/basic-aq/.nuxtrc create mode 100644 test/fixtures/basic-aq/addons/nitro-plugin.ts create mode 100644 test/fixtures/basic-aq/components/PropLogger.vue create mode 100644 test/fixtures/basic-aq/components/content/Alert.vue create mode 100644 test/fixtures/basic-aq/components/content/CustomProseP.vue create mode 100644 test/fixtures/basic-aq/components/content/TestMarkdown.vue create mode 100644 test/fixtures/basic-aq/content-fa/hello.md create mode 100644 test/fixtures/basic-aq/content-fa/translated.md create mode 100644 test/fixtures/basic-aq/content/-dash-ignored.md create mode 100644 test/fixtures/basic-aq/content/.dot-ignored.md create mode 100644 test/fixtures/basic-aq/content/LoremIpsum.vue create mode 100644 test/fixtures/basic-aq/content/_partial-content.md create mode 100644 test/fixtures/basic-aq/content/_partial/content (v2).md create mode 100644 test/fixtures/basic-aq/content/_partial/custom-paragraph.md create mode 100644 test/fixtures/basic-aq/content/_partial/markdown.md create mode 100644 test/fixtures/basic-aq/content/_partial/mdc-props-inline.md create mode 100644 test/fixtures/basic-aq/content/_partial/mdc-props.md create mode 100644 test/fixtures/basic-aq/content/_partial/prefix/foo/bar.md create mode 100644 test/fixtures/basic-aq/content/_partial/prefix/foo/baz.md create mode 100644 test/fixtures/basic-aq/content/_partial/prefix/foobarbaz.md create mode 100644 test/fixtures/basic-aq/content/_partial/simple-json.json create mode 100644 test/fixtures/basic-aq/content/_partial/xss.md create mode 100644 test/fixtures/basic-aq/content/cats/_dir.yml create mode 100644 test/fixtures/basic-aq/content/cats/bombay.md create mode 100644 test/fixtures/basic-aq/content/cats/index.md create mode 100644 test/fixtures/basic-aq/content/cats/persian.md create mode 100644 test/fixtures/basic-aq/content/cats/ragdoll.md create mode 100644 test/fixtures/basic-aq/content/components/from-content.md create mode 100644 test/fixtures/basic-aq/content/dogs/German Shepherd.md create mode 100644 test/fixtures/basic-aq/content/dogs/_dir.yml create mode 100644 test/fixtures/basic-aq/content/dogs/bulldog.md create mode 100644 test/fixtures/basic-aq/content/head.md create mode 100644 test/fixtures/basic-aq/content/index.md create mode 100644 test/fixtures/basic-aq/content/navigation-disabled.md create mode 100644 test/fixtures/basic-aq/content/numbers/1.one.md create mode 100644 test/fixtures/basic-aq/content/numbers/13.thirteen.md create mode 100644 test/fixtures/basic-aq/content/numbers/2.two.md create mode 100644 test/fixtures/basic-aq/content/numbers/21.twenty-one.md create mode 100644 test/fixtures/basic-aq/content/numbers/3.three.md create mode 100644 test/fixtures/basic-aq/content/numbers/5.five.md create mode 100644 test/fixtures/basic-aq/content/numbers/8.eight.md create mode 100644 test/fixtures/basic-aq/content/test-navigation/1.index.md create mode 100644 test/fixtures/basic-aq/content/test-navigation/2.page.md create mode 100644 test/fixtures/basic-aq/content/test-navigation/99.not-hidden-dir/index.md create mode 100644 test/fixtures/basic-aq/content/test-navigation/99.not-hidden-dir/page.md create mode 100644 test/fixtures/basic-aq/content/test-navigation/_dir.yml create mode 100644 test/fixtures/basic-aq/content/test-navigation/hidden-dir/_dir.yml create mode 100644 test/fixtures/basic-aq/content/test-navigation/hidden-dir/index.md create mode 100644 test/fixtures/basic-aq/content/test-navigation/hidden-dir/page.md create mode 100644 test/fixtures/basic-aq/content/test-navigation/hidden-dir/sub-hidden-dir/page.md create mode 100644 test/fixtures/basic-aq/content/translated.md create mode 100644 test/fixtures/basic-aq/content/with-'invalid'-char.md create mode 100644 "test/fixtures/basic-aq/content/\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257.md" create mode 100644 test/fixtures/basic-aq/nuxt.config.ts create mode 100644 test/fixtures/basic-aq/pages/[...slug].vue create mode 100644 test/fixtures/basic-aq/pages/bypass-head.vue create mode 100644 test/fixtures/basic-aq/pages/dogs-list.vue create mode 100644 test/fixtures/basic-aq/pages/features/custom-paragraph.vue create mode 100644 test/fixtures/basic-aq/pages/features/empty-slot.vue create mode 100644 test/fixtures/basic-aq/pages/features/multi-part-path.vue create mode 100644 test/fixtures/basic-aq/pages/features/query-content.vue create mode 100644 test/fixtures/basic-aq/pages/features/slotted-content-renderer.vue create mode 100644 test/fixtures/basic-aq/pages/locale-[locale].vue create mode 100644 test/fixtures/basic-aq/pages/nav-with-query.vue create mode 100644 test/fixtures/basic-aq/pages/parse.vue create mode 100644 test/fixtures/basic-aq/server/api/parse.ts create mode 100644 test/fixtures/basic-aq/tsconfig.json create mode 100644 test/fixtures/document-driven-aq/components/content/Debug.vue create mode 100644 test/fixtures/document-driven-aq/composables/useTheme.ts create mode 100644 test/fixtures/document-driven-aq/content/0.index.md create mode 100644 test/fixtures/document-driven-aq/content/1.debug.md create mode 100644 test/fixtures/document-driven-aq/content/2.layout.md create mode 100644 test/fixtures/document-driven-aq/content/3.fm-data.md create mode 100644 test/fixtures/document-driven-aq/content/4.no-surround.md create mode 100644 test/fixtures/document-driven-aq/content/5.og-image.md create mode 100644 test/fixtures/document-driven-aq/content/_theme.yml create mode 100644 test/fixtures/document-driven-aq/content/redirect/_dir.yml create mode 100644 test/fixtures/document-driven-aq/layouts/reversed.vue create mode 100644 test/fixtures/document-driven-aq/nuxt.config.ts create mode 100644 test/fixtures/document-driven-aq/pages/custom-search.vue create mode 100644 test/fixtures/document-driven-aq/pages/disabled.vue create mode 100644 test/fixtures/document-driven-aq/pages/home.vue create mode 100644 test/fixtures/document-driven-aq/pages/no-surround.vue diff --git a/docs/components/content/ChangeLog.vue b/docs/components/content/ChangeLog.vue index 3cb114658..df4be9462 100644 --- a/docs/components/content/ChangeLog.vue +++ b/docs/components/content/ChangeLog.vue @@ -1,6 +1,6 @@