Skip to content

Commit

Permalink
feat: support schemda-dts with /full export
Browse files Browse the repository at this point in the history
  • Loading branch information
harlan-zw committed Aug 15, 2022
1 parent ea962d5 commit 154dbc0
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 64 deletions.
13 changes: 12 additions & 1 deletion packages/schema-org/build.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { defineBuildConfig } from 'unbuild'
import { readFile, rename, writeFile } from 'fs-extra'

export default defineBuildConfig({
clean: true,
Expand All @@ -11,10 +12,20 @@ export default defineBuildConfig({
},
entries: [
{ input: 'src/index' },
{ input: 'providers/lite' },
{ input: 'providers/', outDir: 'dist/providers', builder: 'mkdist' },
{ input: 'runtime/', outDir: 'dist/runtime', builder: 'mkdist' },
{ input: 'runtime-mock/', outDir: 'dist/runtime-mock', builder: 'mkdist' },
],
hooks: {
'mkdist:done': async function (ctx) {
const simpleDtsFile = `${ctx.options.outDir}/providers/base.d.ts`
const simpleDts = await readFile(simpleDtsFile, { encoding: 'utf-8' })
const fullDts = simpleDts
.replace('from \'schema-org-graph-js\';', 'from \'schema-dts\';')
await writeFile(`${ctx.options.outDir}/providers/full.d.ts`, fullDts, { encoding: 'utf-8' })
await rename(simpleDtsFile, `${ctx.options.outDir}/providers/simple.d.ts`)
},
},
externals: [
'#vueuse/schema-org',
'consola',
Expand Down
2 changes: 1 addition & 1 deletion packages/schema-org/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
useHarlansHamburgers,
useSetup,
} from '../../../.test'
import { defineOrganization, defineWebPage, defineWebSite } from '../../lite'
import { defineOrganization, defineWebPage, defineWebSite } from '../../simple'
import { injectSchemaOrg, useSchemaOrg } from './index'

describe('useSchemaOrg', () => {
Expand Down
17 changes: 11 additions & 6 deletions packages/schema-org/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,13 @@
"types": "./dist/runtime/components/index.d.ts",
"import": "./dist/runtime/components/index.mjs"
},
"./lite": {
"types": "./dist/lite.d.ts",
"import": "./dist/lite.mjs"
"./simple": {
"types": "./dist/providers/simple.d.ts",
"import": "./dist/providers/base.mjs"
},
"./full": {
"types": "./dist/providers/full.d.ts",
"import": "./dist/providers/base.mjs"
},
"./runtime": {
"types": "./dist/runtime/index.d.ts",
Expand All @@ -65,13 +69,14 @@
"vue-router": "^4"
},
"dependencies": {
"defu": "^6.0.0",
"schema-org-graph-js": "0.1.2",
"ufo": "^0.8.5",
"schema-org-graph-js": "0.3.3",
"vue-demi": "^0.13.7"
},
"devDependencies": {
"@types/fs-extra": "^9.0.13",
"@vueuse/head": "^0.7.9",
"fs-extra": "^10.1.0",
"schema-dts": "^1.1.0",
"utility-types": "^3.10.0",
"vue": "^3.2.37",
"vue-router": "^4.1.3"
Expand Down
94 changes: 94 additions & 0 deletions packages/schema-org/providers/base.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import type {
AggregateOffer,
AggregateRating,
Article,
BreadcrumbList,
Comment,
Event,
HowTo,
HowToStep,
ImageObject,
LocalBusiness,
Offer,
OpeningHoursSpecification,
Organization,
Person,
Place,
PostalAddress,
Product,
Question,
Recipe,
Review,
VideoObject,
VirtualLocation,
WebPage,
WebSite,
} from 'schema-org-graph-js'
import {
addressResolver,
aggregateOfferResolver,
aggregateRatingResolver,
articleResolver,
breadcrumbResolver,
commentResolver,
eventResolver,
howToResolver,
howToStepResolver,
imageResolver,
localBusinessResolver,
offerResolver,
organizationResolver,
personResolver,
placeResolver,
productResolver,
questionResolver,
recipeResolver,
resolveOpeningHours,
reviewResolver,
videoResolver,
virtualLocationResolver,
webPageResolver,
webSiteResolver,
} from 'schema-org-graph-js'
import type { Ref } from 'vue-demi'

type MaybeRef<T> = {
[P in keyof T]?: T[P] | Ref<T[P]>;
}

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

export const provideResolver = <T>(input?: T, resolver?: any) => {
return <WithResolver<T>> {
...(input || {}),
_resolver: resolver,
}
}

export const defineAddress = <T extends MaybeRef<PostalAddress>>(input?: T) => provideResolver(input, addressResolver)
export const defineAggregateOffer = <T extends MaybeRef<AggregateOffer>>(input?: T) => provideResolver(input, aggregateOfferResolver)
export const defineAggregateRating = <T extends MaybeRef<AggregateRating>>(input?: T) => provideResolver(input, aggregateRatingResolver)
export const defineArticle = <T extends MaybeRef<Article>>(input?: T) => provideResolver(input, articleResolver)
export const defineBreadcrumb = <T extends MaybeRef<BreadcrumbList>>(input?: T) => provideResolver(input, breadcrumbResolver)
export const defineComment = <T extends MaybeRef<Comment>>(input?: T) => provideResolver(input, commentResolver)
export const defineEvent = <T extends MaybeRef<Event>>(input?: T) => provideResolver(input, eventResolver)
export const defineVirtualLocation = <T extends MaybeRef<VirtualLocation>>(input?: T) => provideResolver(input, virtualLocationResolver)
export const definePlace = <T extends MaybeRef<Place>>(input?: T) => provideResolver(input, placeResolver)
export const defineHowTo = <T extends MaybeRef<HowTo>>(input?: T) => provideResolver(input, howToResolver)
export const defineHowToStep = <T extends MaybeRef<HowToStep>>(input?: T) => provideResolver(input, howToStepResolver)
export const defineImage = <T extends MaybeRef<ImageObject>>(input?: T) => provideResolver(input, imageResolver)
export const defineLocalBusiness = <T extends MaybeRef<LocalBusiness>>(input?: T) => provideResolver(input, localBusinessResolver)
export const defineOffer = <T extends MaybeRef<Offer>>(input?: T) => provideResolver(input, offerResolver)
export const defineOpeningHours = <T extends MaybeRef<OpeningHoursSpecification>>(input?: T) => provideResolver(input, resolveOpeningHours)
export const defineOrganization = <T extends MaybeRef<Organization>>(input?: T) => provideResolver(input, organizationResolver)
export const definePerson = <T extends MaybeRef<Person>>(input?: T) => provideResolver(input, personResolver)
export const defineProduct = <T extends MaybeRef<Product>>(input?: T) => provideResolver(input, productResolver)
export const defineQuestion = <T extends MaybeRef<Question>>(input?: T) => provideResolver(input, questionResolver)
export const defineRecipe = <T extends MaybeRef<Recipe>>(input?: T) => provideResolver(input, recipeResolver)
export const defineReview = <T extends MaybeRef<Review>>(input?: T) => provideResolver(input, reviewResolver)
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)
56 changes: 0 additions & 56 deletions packages/schema-org/providers/lite.ts

This file was deleted.

0 comments on commit 154dbc0

Please sign in to comment.