Skip to content

Commit

Permalink
feat(nodes): add new nodes, Book, Course, ItemList, Movie, etc
Browse files Browse the repository at this point in the history
  • Loading branch information
harlan-zw committed Aug 22, 2022
1 parent 2a914e2 commit 8bca3ea
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 11 deletions.
31 changes: 29 additions & 2 deletions packages/schema-org/providers/simple.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,18 @@ import type {
AggregateOffer,
AggregateRating,
Article,
Book,
BookEdition,
BreadcrumbList,
Comment,
Course,
Event,
HowTo,
HowToStep,
ImageObject,
ItemList,
LocalBusiness,
Movie,
Offer,
OpeningHoursSpecification,
Organization,
Expand All @@ -17,8 +22,12 @@ import type {
PostalAddress,
Product,
Question,
ReadAction,
Recipe,
Review,
SearchAction,
SoftwareApp,
Thing,
VideoObject,
VirtualLocation,
WebPage,
Expand All @@ -29,22 +38,30 @@ import {
aggregateOfferResolver,
aggregateRatingResolver,
articleResolver,
bookEditionResolver,
bookResolver,
breadcrumbResolver,
commentResolver,
courseResolver,
eventResolver,
howToResolver,
howToStepResolver,
imageResolver,
itemListResolver,
localBusinessResolver,
movieResolver,
offerResolver,
organizationResolver,
personResolver,
placeResolver,
productResolver,
questionResolver,
readActionResolver,
recipeResolver,
resolveOpeningHours,
reviewResolver,
searchActionResolver,
softwareAppResolver,
videoResolver,
virtualLocationResolver,
webPageResolver,
Expand All @@ -56,12 +73,12 @@ type MaybeRef<T> = {
[P in keyof T]?: T[P] | Ref<T[P]>;
}

export type WithResolver<T> = T & {
type WithResolver<T> = T & {
_resolver?: any
_uid?: number
}

export const provideResolver = <T>(input?: T, resolver?: any) => {
const provideResolver = <T>(input?: T, resolver?: any) => {
return <WithResolver<T>> {
...(input || {}),
_resolver: resolver,
Expand Down Expand Up @@ -92,3 +109,13 @@ export const defineReview = <T extends MaybeRef<Review>>(input?: T) => provideRe
export const defineVideo = <T extends MaybeRef<VideoObject>>(input?: T) => provideResolver(input, videoResolver)
export const defineWebPage = <T extends MaybeRef<WebPage>>(input?: T) => provideResolver(input, webPageResolver)
export const defineWebSite = <T extends MaybeRef<WebSite>>(input?: T) => provideResolver(input, webSiteResolver)
export const defineBook = <T extends MaybeRef<Book>>(input?: T) => provideResolver(input, bookResolver)
export const defineBookEdition = <T extends MaybeRef<BookEdition>>(input?: T) => provideResolver(input, bookEditionResolver)
export const defineCourse = <T extends MaybeRef<Course>>(input?: T) => provideResolver(input, courseResolver)
export const defineItemList = <T extends MaybeRef<ItemList>>(input?: T) => provideResolver(input, itemListResolver)
export const defineMovie = <T extends MaybeRef<Movie>>(input?: T) => provideResolver(input, movieResolver)
export const defineSoftwareApp = <T extends MaybeRef<SoftwareApp>>(input?: T) => provideResolver(input, softwareAppResolver)
export const defineSearchAction = <T extends MaybeRef<SearchAction>>(input?: T) => provideResolver(input, searchActionResolver)
export const defineReadAction = <T extends MaybeRef<ReadAction>>(input?: T) => provideResolver(input, readActionResolver)

export { Thing }
32 changes: 26 additions & 6 deletions packages/schema-org/runtime/components/nodes.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,22 @@
import { computed, defineComponent, h, ref, unref } from 'vue'
// @ts-expect-error untyped
import { defineArticle, defineBreadcrumb, defineComment, defineEvent, defineHowTo, defineImage, defineLocalBusiness, defineOrganization, definePerson, defineProduct, defineQuestion, defineRecipe, defineReview, defineVideo, defineWebPage, defineWebSite } from '#vueuse/schema-org/provider'
// @ts-expect-error untyped
import {
defineArticle, defineBook,
defineBreadcrumb,
defineComment, defineCourse,
defineEvent,
defineHowTo,
defineImage, defineItemList,
defineLocalBusiness, defineMovie,
defineOrganization,
definePerson,
defineProduct,
defineQuestion,
defineRecipe,
defineReview, defineSoftwareApp,
defineVideo,
defineWebPage,
defineWebSite,
} from '#vueuse/schema-org/provider'
import { useSchemaOrg } from '#vueuse/schema-org/runtime'

const shallowVNodesToText = (nodes: any) => {
Expand Down Expand Up @@ -85,14 +100,19 @@ export const SchemaOrgBreadcrumb = defineSchemaOrgComponent('SchemaOrgBreadcrumb
export const SchemaOrgComment = defineSchemaOrgComponent('SchemaOrgComment', defineComment)
export const SchemaOrgEvent = defineSchemaOrgComponent('SchemaOrgEvent', defineEvent)
export const SchemaOrgHowTo = defineSchemaOrgComponent('SchemaOrgHowTo', defineHowTo)
export const SchemaOrgOrganization = defineSchemaOrgComponent('SchemaOrgOrganization', defineOrganization)
export const SchemaOrgPerson = defineSchemaOrgComponent('SchemaOrgPerson', definePerson)
export const SchemaOrgImage = defineSchemaOrgComponent('SchemaOrgImage', defineImage)
export const SchemaOrgLocalBusiness = defineSchemaOrgComponent('SchemaOrgLocalBusiness', defineLocalBusiness)
export const SchemaOrgOrganization = defineSchemaOrgComponent('SchemaOrgOrganization', defineOrganization)
export const SchemaOrgPerson = defineSchemaOrgComponent('SchemaOrgPerson', definePerson)
export const SchemaOrgProduct = defineSchemaOrgComponent('SchemaOrgProduct', defineProduct)
export const SchemaOrgQuestion = defineSchemaOrgComponent('SchemaOrgQuestion', defineQuestion)
export const SchemaOrgReview = defineSchemaOrgComponent('SchemaOrgReview', defineReview)
export const SchemaOrgRecipe = defineSchemaOrgComponent('SchemaOrgRecipe', defineRecipe)
export const SchemaOrgReview = defineSchemaOrgComponent('SchemaOrgReview', defineReview)
export const SchemaOrgVideo = defineSchemaOrgComponent('SchemaOrgVideo', defineVideo)
export const SchemaOrgWebPage = defineSchemaOrgComponent('SchemaOrgWebPage', defineWebPage)
export const SchemaOrgWebSite = defineSchemaOrgComponent('SchemaOrgWebSite', defineWebSite)
export const SchemaOrgMovie = defineSchemaOrgComponent('SchemaOrgMovie', defineMovie)
export const SchemaOrgCourse = defineSchemaOrgComponent('SchemaOrgCourse', defineCourse)
export const SchemaOrgItemList = defineSchemaOrgComponent('SchemaOrgItemList', defineItemList)
export const SchemaOrgBook = defineSchemaOrgComponent('SchemaOrgBook', defineBook)
export const SchemaOrgSoftwareApp = defineSchemaOrgComponent('SchemaOrgSoftwareApp', defineSoftwareApp)
7 changes: 5 additions & 2 deletions packages/schema-org/runtime/composables/useSchemaOrg.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import { getCurrentInstance, nextTick, onBeforeUnmount, onMounted, watch } from 'vue'
import type { SchemaOrgVuePlugin } from '@vueuse/schema-org'
import { injectSchemaOrg } from '#vueuse/schema-org/runtime'

type Arrayable<T> = T | Array<T>

let vmGlobalUid = -1

export function useSchemaOrg(input: any) {
export function useSchemaOrg(input: Arrayable<any>) {
// make sure we can get client
const client = injectSchemaOrg()
const client = injectSchemaOrg() as SchemaOrgVuePlugin
if (!client)
return

Expand Down
2 changes: 1 addition & 1 deletion packages/schema-org/src/composables/createSchemaOrg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export interface SchemaOrgVuePlugin {
/**
* Given a Vue component context, deleted any nodes associated with it.
*/
removeContext: (uid: Number) => void
removeContext: (uid: number) => void
/**
* Sets up the initial placeholder for the meta tag using useHead.
*/
Expand Down

0 comments on commit 8bca3ea

Please sign in to comment.