This repository has been archived by the owner on Sep 3, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(Course): add support for Course node
- Loading branch information
Showing
4 changed files
with
98 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
import { expect } from 'vitest' | ||
import { injectSchemaOrg, useSchemaOrg, useSetup } from '../../../.test' | ||
import { defineCourse, defineOrganization } from '#provider' | ||
|
||
describe('defineCourse', () => { | ||
it('can be registered', () => { | ||
useSetup(() => { | ||
useSchemaOrg([ | ||
defineCourse({ | ||
name: 'Introduction to Computer Science and Programming', | ||
description: 'Introductory CS course laying out the basics.', | ||
provider: defineOrganization({ | ||
name: 'University of Technology - Eureka', | ||
sameAs: 'http://www.ut-eureka.edu', | ||
}), | ||
}), | ||
]) | ||
|
||
const { graphNodes } = injectSchemaOrg() | ||
|
||
expect(graphNodes).toMatchInlineSnapshot(` | ||
[ | ||
{ | ||
"@type": "Course", | ||
"description": "Introductory CS course laying out the basics.", | ||
"name": "Introduction to Computer Science and Programming", | ||
"provider": { | ||
"@id": "https://example.com/#/schema/organization/CNZC84PK4Y", | ||
}, | ||
}, | ||
{ | ||
"@id": "https://example.com/#/schema/organization/CNZC84PK4Y", | ||
"@type": "Organization", | ||
"name": "University of Technology - Eureka", | ||
"sameAs": "http://www.ut-eureka.edu", | ||
"url": "https://example.com/", | ||
}, | ||
] | ||
`) | ||
}) | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import { hash } from 'ohash' | ||
import type {Identity, NodeRelation, Thing} from '../../types' | ||
import { | ||
IdentityId, | ||
idReference, setIfEmpty, | ||
} from '../../utils' | ||
import type { Organization } from '../Organization' | ||
import { defineSchemaOrgResolver, resolveRelation } from '../../core' | ||
import { organizationResolver } from '../Organization' | ||
|
||
/** | ||
* Any offered product or service. | ||
* For example: a pair of shoes; a concert ticket; the rental of a car; | ||
* a haircut; or an episode of a TV show streamed online. | ||
*/ | ||
export interface CourseLite extends Thing { | ||
/** | ||
* The title of the course. | ||
*/ | ||
name: string | ||
/** | ||
* A description of the course. Display limit of 60 characters. | ||
*/ | ||
description?: string | ||
/** | ||
* A reference to an Organization piece, representing brand associated with the Product. | ||
*/ | ||
provider?: NodeRelation<Organization> | ||
} | ||
|
||
export interface Course extends CourseLite {} | ||
|
||
export const courseResolver = defineSchemaOrgResolver<Course>({ | ||
defaults: { | ||
'@type': 'Course', | ||
}, | ||
resolve(node, ctx) { | ||
// provide a default sku | ||
node.provider = resolveRelation(node.provider, ctx, organizationResolver, { | ||
root: true, | ||
}) | ||
return node | ||
}, | ||
rootNodeResolve(node, { findNode }) { | ||
const identity = findNode<Identity>(IdentityId) | ||
|
||
if (identity) | ||
setIfEmpty(node, 'provider', idReference(identity)) | ||
|
||
return node | ||
}, | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters