@unhead/schema-org 0.3.0 → 0.4.1

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/dist/index.cjs CHANGED
@@ -321,6 +321,7 @@ const imageResolver = defineSchemaOrgResolver({
321
321
  "@type": "ImageObject"
322
322
  },
323
323
  inheritMeta: [
324
+ // @todo possibly only do if there's a caption
324
325
  "inLanguage"
325
326
  ],
326
327
  idPrefix: "host",
@@ -635,7 +636,8 @@ const placeResolver = defineSchemaOrgResolver({
635
636
  "@type": "Place"
636
637
  },
637
638
  resolve(node, ctx) {
638
- node.address = resolveRelation(node.address, ctx, addressResolver);
639
+ if (typeof node.address !== "string")
640
+ node.address = resolveRelation(node.address, ctx, addressResolver);
639
641
  return node;
640
642
  }
641
643
  });
@@ -783,6 +785,35 @@ const itemListResolver = defineSchemaOrgResolver({
783
785
  }
784
786
  });
785
787
 
788
+ const quantitativeValueResolver = defineSchemaOrgResolver({
789
+ defaults: {
790
+ "@type": "QuantitativeValue"
791
+ }
792
+ });
793
+ const monetaryAmountResolver = defineSchemaOrgResolver({
794
+ defaults: {
795
+ "@type": "MonetaryAmount"
796
+ },
797
+ resolve(node, ctx) {
798
+ node.value = resolveRelation(node.value, ctx, quantitativeValueResolver);
799
+ return node;
800
+ }
801
+ });
802
+
803
+ const jobPostingResolver = defineSchemaOrgResolver({
804
+ defaults: {
805
+ "@type": "JobPosting"
806
+ },
807
+ resolve(node, ctx) {
808
+ node.datePosted = resolvableDateToIso(node.datePosted);
809
+ node.hiringOrganization = resolveRelation(node.hiringOrganization, ctx, organizationResolver);
810
+ node.jobLocation = resolveRelation(node.jobLocation, ctx, placeResolver);
811
+ node.baseSalary = resolveRelation(node.baseSalary, ctx, monetaryAmountResolver);
812
+ node.validThrough = resolvableDateToIso(node.validThrough);
813
+ return node;
814
+ }
815
+ });
816
+
786
817
  const openingHoursResolver = defineSchemaOrgResolver({
787
818
  defaults: {
788
819
  "@type": "OpeningHoursSpecification",
@@ -1549,6 +1580,8 @@ function loadResolver(resolver) {
1549
1580
  return courseResolver;
1550
1581
  case "itemList":
1551
1582
  return itemListResolver;
1583
+ case "jobPosting":
1584
+ return jobPostingResolver;
1552
1585
  case "listItem":
1553
1586
  return listItemResolver;
1554
1587
  case "movie":
@@ -1830,6 +1863,7 @@ const definePlace = (input) => provideResolver(input, "place");
1830
1863
  const defineHowTo = (input) => provideResolver(input, "howTo");
1831
1864
  const defineHowToStep = (input) => provideResolver(input, "howToStep");
1832
1865
  const defineImage = (input) => provideResolver(input, "image");
1866
+ const defineJobPosting = (input) => provideResolver(input, "jobPosting");
1833
1867
  const defineLocalBusiness = (input) => provideResolver(input, "localBusiness");
1834
1868
  const defineOffer = (input) => provideResolver(input, "offer");
1835
1869
  const defineOpeningHours = (input) => provideResolver(input, "openingHours");
@@ -1898,6 +1932,7 @@ exports.defineHowTo = defineHowTo;
1898
1932
  exports.defineHowToStep = defineHowToStep;
1899
1933
  exports.defineImage = defineImage;
1900
1934
  exports.defineItemList = defineItemList;
1935
+ exports.defineJobPosting = defineJobPosting;
1901
1936
  exports.defineListItem = defineListItem;
1902
1937
  exports.defineLocalBusiness = defineLocalBusiness;
1903
1938
  exports.defineMovie = defineMovie;
@@ -1924,6 +1959,7 @@ exports.howToStepDirectionResolver = howToStepDirectionResolver;
1924
1959
  exports.howToStepResolver = howToStepResolver;
1925
1960
  exports.imageResolver = imageResolver;
1926
1961
  exports.itemListResolver = itemListResolver;
1962
+ exports.jobPostingResolver = jobPostingResolver;
1927
1963
  exports.listItemResolver = listItemResolver;
1928
1964
  exports.localBusinessResolver = localBusinessResolver;
1929
1965
  exports.movieResolver = movieResolver;
package/dist/index.d.ts CHANGED
@@ -739,7 +739,9 @@ declare const courseResolver: SchemaOrgNodeDefinition<Course>;
739
739
  interface PlaceSimple extends Thing {
740
740
  '@type'?: 'Place';
741
741
  name: string;
742
- address: NodeRelation<PostalAddress>;
742
+ address: NodeRelation<PostalAddress | string>;
743
+ latitude?: number | string;
744
+ longitude?: number | string;
743
745
  }
744
746
  interface Place extends PlaceSimple {
745
747
  }
@@ -931,6 +933,83 @@ declare const HowToId = "#howto";
931
933
  */
932
934
  declare const howToResolver: SchemaOrgNodeDefinition<HowTo>;
933
935
 
936
+ interface MonetaryAmountSimple extends Thing {
937
+ /**
938
+ * The currency in which the monetary amount is expressed.
939
+ */
940
+ currency: string;
941
+ /**
942
+ * The value of the quantitative value or property value node.
943
+ */
944
+ value: QuantitativeValue;
945
+ }
946
+ interface MonetaryAmount extends MonetaryAmountSimple {
947
+ }
948
+ interface QuantitativeSimple extends Thing {
949
+ value?: number;
950
+ minValue?: number;
951
+ maxValue?: number;
952
+ unitText: 'HOUR' | 'DAY' | 'WEEK' | 'MONTH' | 'YEAR';
953
+ }
954
+ interface QuantitativeValue extends QuantitativeSimple {
955
+ }
956
+
957
+ interface JobPostingSimple extends Thing {
958
+ /**
959
+ * The original date that employer posted the job in ISO 8601 format.
960
+ * For example, "2017-01-24" or "2017-01-24T19:33:17+00:00".
961
+ */
962
+ datePosted: ResolvableDate;
963
+ /**
964
+ * The full description of the job in HTML format.
965
+ *
966
+ * The description must be a complete representation of the job, including job responsibilities, qualifications,
967
+ * skills, working hours, education requirements, and experience requirements. The description can't be the same as
968
+ * the title
969
+ */
970
+ description: string;
971
+ /**
972
+ * The organization offering the job position. This must be the name of the company (for example, "Starbucks, Inc"),
973
+ * and not the specific location that is hiring (for example, "Starbucks on Main Street").
974
+ */
975
+ hiringOrganization: NodeRelation<Organization>;
976
+ /**
977
+ * The physical location(s) of the business where the employee will report to work (such as an office or worksite),
978
+ * not the location where the job was posted. Include as many properties as possible. The more properties you provide,
979
+ * the higher quality the job posting is to our users. Note that you must include the addressCountry property.
980
+ */
981
+ jobLocation: NodeRelation<Place>;
982
+ /**
983
+ * The title of the job (not the title of the posting). For example, "Software Engineer" or "Barista"
984
+ */
985
+ title: string;
986
+ /**
987
+ * The actual base salary for the job, as provided by the employer (not an estimate).
988
+ */
989
+ baseSalary?: MonetaryAmount;
990
+ /**
991
+ * Type of employment
992
+ */
993
+ employmentType?: EmploymentType | EmploymentType[];
994
+ /**
995
+ * The date when the job posting will expire in ISO 8601 format. For example, "2017-02-24"
996
+ * or "2017-02-24T19:33:17+00:00".
997
+ */
998
+ validThrough?: ResolvableDate;
999
+ /**
1000
+ * A description of the job location (e.g. TELECOMMUTE for telecommute jobs).
1001
+ */
1002
+ jobLocationType?: 'TELECOMMUTE';
1003
+ /**
1004
+ * Indicates whether the URL that's associated with this job posting enables direct application for the job.
1005
+ */
1006
+ directApply?: boolean;
1007
+ }
1008
+ interface JobPosting extends JobPostingSimple {
1009
+ }
1010
+ declare const jobPostingResolver: SchemaOrgNodeDefinition<JobPosting>;
1011
+ type EmploymentType = 'FULL_TIME' | 'PART_TIME' | 'CONTRACTOR' | 'TEMPORARY' | 'INTERN' | 'VOLUNTEER' | 'PER_DIEM' | 'OTHER';
1012
+
934
1013
  type DayOfWeek = 'Friday' | 'Monday' | 'PublicHolidays' | 'Saturday' | 'Sunday' | 'Thursday' | 'Tuesday' | 'Wednesday';
935
1014
  type Time = `${number}${number}:${number}${number}`;
936
1015
  interface OpeningHoursSimple extends Thing {
@@ -1484,6 +1563,7 @@ declare const definePlace: <T extends Record<string, any>>(input?: (Place & T) |
1484
1563
  declare const defineHowTo: <T extends Record<string, any>>(input?: (HowTo & T) | undefined) => HowTo & T;
1485
1564
  declare const defineHowToStep: <T extends Record<string, any>>(input?: (HowToStep & T) | undefined) => HowToStep & T;
1486
1565
  declare const defineImage: <T extends Record<string, any>>(input?: (ImageObject & T) | undefined) => ImageObject & T;
1566
+ declare const defineJobPosting: <T extends Record<string, any>>(input?: (JobPosting & T) | undefined) => JobPosting & T;
1487
1567
  declare const defineLocalBusiness: <T extends Record<string, any>>(input?: (LocalBusiness & T) | undefined) => LocalBusiness & T;
1488
1568
  declare const defineOffer: <T extends Record<string, any>>(input?: (Offer & T) | undefined) => Offer & T;
1489
1569
  declare const defineOpeningHours: <T extends Record<string, any>>(input?: (OpeningHoursSpecification & T) | undefined) => OpeningHoursSpecification & T;
@@ -1507,4 +1587,4 @@ declare const defineSoftwareApp: <T extends Record<string, any>>(input?: (Softwa
1507
1587
  declare const defineBookEdition: <T extends Record<string, any>>(input?: (BookEdition & T) | undefined) => BookEdition & T;
1508
1588
  declare function useSchemaOrg(input?: any): any;
1509
1589
 
1510
- export { AggregateOffer, AggregateOfferSimple, AggregateRating, AggregateRatingSimple, Arrayable, Article, ArticleSimple, Book, BookEdition, BookEditionSimple, BookSimple, BreadcrumbList, BreadcrumbSimple, Comment$1 as Comment, CommentSimple, Course, CourseSimple, Event, EventSimple, HowTo, HowToDirection, HowToId, HowToSimple, HowToStep, HowToStepSimple, Id, IdReference, Identity, ImageObject, ImageSimple, ItemList, ItemListSimple, ListItem, ListItemSimple, LocalBusiness, LocalBusinessSimple, MetaInput, Movie, MovieSimple, NodeRelation, NodeRelations, NutritionInformation, Offer, OfferSimple, OpeningHoursSimple, OpeningHoursSpecification, OptionalSchemaOrgPrefix, Organization, OrganizationSimple, Person, PersonSimple, Place, PlaceSimple, PostalAddress, PostalAddressSimple, PrimaryArticleId, PrimaryBookId, PrimaryBreadcrumbId, PrimaryEventId, PrimaryWebPageId, PrimaryWebSiteId, Product, ProductId, ProductSimple, Question, QuestionSimple, Rating, RatingSimple, ReadAction, ReadActionInput, Recipe, RecipeId, RecipeSimple, ResolvableDate, ResolvedMeta, Review, ReviewSimple, SchemaOrgGraph, SchemaOrgNode, SchemaOrgNodeDefinition, SchemaOrgUnheadPlugin, SearchAction, SearchActionInput, SoftwareApp, SoftwareAppSimple, Thing, UserConfig, VideoObject, VideoSimple, VirtualLocation, VirtualLocationSimple, WebPage, WebPageSimple, WebSite, WebSiteSimple, WithResolver, addressResolver, aggregateOfferResolver, aggregateRatingResolver, articleResolver, bookEditionResolver, bookResolver, breadcrumbResolver, commentResolver, courseResolver, createSchemaOrgGraph, dedupeNodes, defineAddress, defineAggregateOffer, defineAggregateRating, defineArticle, defineBook, defineBookEdition, defineBreadcrumb, defineComment, defineCourse, defineEvent, defineHowTo, defineHowToStep, defineImage, defineItemList, defineListItem, defineLocalBusiness, defineMovie, defineOffer, defineOpeningHours, defineOrganization, definePerson, definePlace, defineProduct, defineQuestion, defineReadAction, defineRecipe, defineReview, defineSchemaOrgResolver, defineSearchAction, defineSoftwareApp, defineVideo, defineVirtualLocation, defineWebPage, defineWebSite, eventResolver, howToResolver, howToStepDirectionResolver, howToStepResolver, imageResolver, itemListResolver, listItemResolver, localBusinessResolver, movieResolver, offerResolver, openingHoursResolver, organizationResolver, personResolver, placeResolver, productResolver, questionResolver, ratingResolver, readActionResolver, recipeResolver, resolveMeta, resolveNode, resolveNodeId, resolveRelation, reviewResolver, searchActionResolver, softwareAppResolver, useSchemaOrg, videoResolver, virtualLocationResolver, webPageResolver, webSiteResolver };
1590
+ export { AggregateOffer, AggregateOfferSimple, AggregateRating, AggregateRatingSimple, Arrayable, Article, ArticleSimple, Book, BookEdition, BookEditionSimple, BookSimple, BreadcrumbList, BreadcrumbSimple, Comment$1 as Comment, CommentSimple, Course, CourseSimple, Event, EventSimple, HowTo, HowToDirection, HowToId, HowToSimple, HowToStep, HowToStepSimple, Id, IdReference, Identity, ImageObject, ImageSimple, ItemList, ItemListSimple, JobPosting, JobPostingSimple, ListItem, ListItemSimple, LocalBusiness, LocalBusinessSimple, MetaInput, Movie, MovieSimple, NodeRelation, NodeRelations, NutritionInformation, Offer, OfferSimple, OpeningHoursSimple, OpeningHoursSpecification, OptionalSchemaOrgPrefix, Organization, OrganizationSimple, Person, PersonSimple, Place, PlaceSimple, PostalAddress, PostalAddressSimple, PrimaryArticleId, PrimaryBookId, PrimaryBreadcrumbId, PrimaryEventId, PrimaryWebPageId, PrimaryWebSiteId, Product, ProductId, ProductSimple, Question, QuestionSimple, Rating, RatingSimple, ReadAction, ReadActionInput, Recipe, RecipeId, RecipeSimple, ResolvableDate, ResolvedMeta, Review, ReviewSimple, SchemaOrgGraph, SchemaOrgNode, SchemaOrgNodeDefinition, SchemaOrgUnheadPlugin, SearchAction, SearchActionInput, SoftwareApp, SoftwareAppSimple, Thing, UserConfig, VideoObject, VideoSimple, VirtualLocation, VirtualLocationSimple, WebPage, WebPageSimple, WebSite, WebSiteSimple, WithResolver, addressResolver, aggregateOfferResolver, aggregateRatingResolver, articleResolver, bookEditionResolver, bookResolver, breadcrumbResolver, commentResolver, courseResolver, createSchemaOrgGraph, dedupeNodes, defineAddress, defineAggregateOffer, defineAggregateRating, defineArticle, defineBook, defineBookEdition, defineBreadcrumb, defineComment, defineCourse, defineEvent, defineHowTo, defineHowToStep, defineImage, defineItemList, defineJobPosting, defineListItem, defineLocalBusiness, defineMovie, defineOffer, defineOpeningHours, defineOrganization, definePerson, definePlace, defineProduct, defineQuestion, defineReadAction, defineRecipe, defineReview, defineSchemaOrgResolver, defineSearchAction, defineSoftwareApp, defineVideo, defineVirtualLocation, defineWebPage, defineWebSite, eventResolver, howToResolver, howToStepDirectionResolver, howToStepResolver, imageResolver, itemListResolver, jobPostingResolver, listItemResolver, localBusinessResolver, movieResolver, offerResolver, openingHoursResolver, organizationResolver, personResolver, placeResolver, productResolver, questionResolver, ratingResolver, readActionResolver, recipeResolver, resolveMeta, resolveNode, resolveNodeId, resolveRelation, reviewResolver, searchActionResolver, softwareAppResolver, useSchemaOrg, videoResolver, virtualLocationResolver, webPageResolver, webSiteResolver };
package/dist/index.mjs CHANGED
@@ -319,6 +319,7 @@ const imageResolver = defineSchemaOrgResolver({
319
319
  "@type": "ImageObject"
320
320
  },
321
321
  inheritMeta: [
322
+ // @todo possibly only do if there's a caption
322
323
  "inLanguage"
323
324
  ],
324
325
  idPrefix: "host",
@@ -633,7 +634,8 @@ const placeResolver = defineSchemaOrgResolver({
633
634
  "@type": "Place"
634
635
  },
635
636
  resolve(node, ctx) {
636
- node.address = resolveRelation(node.address, ctx, addressResolver);
637
+ if (typeof node.address !== "string")
638
+ node.address = resolveRelation(node.address, ctx, addressResolver);
637
639
  return node;
638
640
  }
639
641
  });
@@ -781,6 +783,35 @@ const itemListResolver = defineSchemaOrgResolver({
781
783
  }
782
784
  });
783
785
 
786
+ const quantitativeValueResolver = defineSchemaOrgResolver({
787
+ defaults: {
788
+ "@type": "QuantitativeValue"
789
+ }
790
+ });
791
+ const monetaryAmountResolver = defineSchemaOrgResolver({
792
+ defaults: {
793
+ "@type": "MonetaryAmount"
794
+ },
795
+ resolve(node, ctx) {
796
+ node.value = resolveRelation(node.value, ctx, quantitativeValueResolver);
797
+ return node;
798
+ }
799
+ });
800
+
801
+ const jobPostingResolver = defineSchemaOrgResolver({
802
+ defaults: {
803
+ "@type": "JobPosting"
804
+ },
805
+ resolve(node, ctx) {
806
+ node.datePosted = resolvableDateToIso(node.datePosted);
807
+ node.hiringOrganization = resolveRelation(node.hiringOrganization, ctx, organizationResolver);
808
+ node.jobLocation = resolveRelation(node.jobLocation, ctx, placeResolver);
809
+ node.baseSalary = resolveRelation(node.baseSalary, ctx, monetaryAmountResolver);
810
+ node.validThrough = resolvableDateToIso(node.validThrough);
811
+ return node;
812
+ }
813
+ });
814
+
784
815
  const openingHoursResolver = defineSchemaOrgResolver({
785
816
  defaults: {
786
817
  "@type": "OpeningHoursSpecification",
@@ -1547,6 +1578,8 @@ function loadResolver(resolver) {
1547
1578
  return courseResolver;
1548
1579
  case "itemList":
1549
1580
  return itemListResolver;
1581
+ case "jobPosting":
1582
+ return jobPostingResolver;
1550
1583
  case "listItem":
1551
1584
  return listItemResolver;
1552
1585
  case "movie":
@@ -1828,6 +1861,7 @@ const definePlace = (input) => provideResolver(input, "place");
1828
1861
  const defineHowTo = (input) => provideResolver(input, "howTo");
1829
1862
  const defineHowToStep = (input) => provideResolver(input, "howToStep");
1830
1863
  const defineImage = (input) => provideResolver(input, "image");
1864
+ const defineJobPosting = (input) => provideResolver(input, "jobPosting");
1831
1865
  const defineLocalBusiness = (input) => provideResolver(input, "localBusiness");
1832
1866
  const defineOffer = (input) => provideResolver(input, "offer");
1833
1867
  const defineOpeningHours = (input) => provideResolver(input, "openingHours");
@@ -1861,4 +1895,4 @@ function useSchemaOrg(input) {
1861
1895
  }, { mode: process.env.NODE_ENV === "development" ? "all" : "server" });
1862
1896
  }
1863
1897
 
1864
- export { HowToId, PrimaryArticleId, PrimaryBookId, PrimaryBreadcrumbId, PrimaryEventId, PrimaryWebPageId, PrimaryWebSiteId, ProductId, RecipeId, SchemaOrgUnheadPlugin, addressResolver, aggregateOfferResolver, aggregateRatingResolver, articleResolver, bookEditionResolver, bookResolver, breadcrumbResolver, commentResolver, courseResolver, createSchemaOrgGraph, dedupeNodes, defineAddress, defineAggregateOffer, defineAggregateRating, defineArticle, defineBook, defineBookEdition, defineBreadcrumb, defineComment, defineCourse, defineEvent, defineHowTo, defineHowToStep, defineImage, defineItemList, defineListItem, defineLocalBusiness, defineMovie, defineOffer, defineOpeningHours, defineOrganization, definePerson, definePlace, defineProduct, defineQuestion, defineReadAction, defineRecipe, defineReview, defineSchemaOrgResolver, defineSearchAction, defineSoftwareApp, defineVideo, defineVirtualLocation, defineWebPage, defineWebSite, eventResolver, howToResolver, howToStepDirectionResolver, howToStepResolver, imageResolver, itemListResolver, listItemResolver, localBusinessResolver, movieResolver, offerResolver, openingHoursResolver, organizationResolver, personResolver, placeResolver, productResolver, questionResolver, ratingResolver, readActionResolver, recipeResolver, resolveMeta, resolveNode, resolveNodeId, resolveRelation, reviewResolver, searchActionResolver, softwareAppResolver, useSchemaOrg, videoResolver, virtualLocationResolver, webPageResolver, webSiteResolver };
1898
+ export { HowToId, PrimaryArticleId, PrimaryBookId, PrimaryBreadcrumbId, PrimaryEventId, PrimaryWebPageId, PrimaryWebSiteId, ProductId, RecipeId, SchemaOrgUnheadPlugin, addressResolver, aggregateOfferResolver, aggregateRatingResolver, articleResolver, bookEditionResolver, bookResolver, breadcrumbResolver, commentResolver, courseResolver, createSchemaOrgGraph, dedupeNodes, defineAddress, defineAggregateOffer, defineAggregateRating, defineArticle, defineBook, defineBookEdition, defineBreadcrumb, defineComment, defineCourse, defineEvent, defineHowTo, defineHowToStep, defineImage, defineItemList, defineJobPosting, defineListItem, defineLocalBusiness, defineMovie, defineOffer, defineOpeningHours, defineOrganization, definePerson, definePlace, defineProduct, defineQuestion, defineReadAction, defineRecipe, defineReview, defineSchemaOrgResolver, defineSearchAction, defineSoftwareApp, defineVideo, defineVirtualLocation, defineWebPage, defineWebSite, eventResolver, howToResolver, howToStepDirectionResolver, howToStepResolver, imageResolver, itemListResolver, jobPostingResolver, listItemResolver, localBusinessResolver, movieResolver, offerResolver, openingHoursResolver, organizationResolver, personResolver, placeResolver, productResolver, questionResolver, ratingResolver, readActionResolver, recipeResolver, resolveMeta, resolveNode, resolveNodeId, resolveRelation, reviewResolver, searchActionResolver, softwareAppResolver, useSchemaOrg, videoResolver, virtualLocationResolver, webPageResolver, webSiteResolver };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unhead/schema-org",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "packageManager": "pnpm@7.8.0",
5
5
  "description": "Node Schema.org for Simple and Automated Google Rich Results",
6
6
  "author": "Harlan Wilton <harlan@harlanzw.com>",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "devDependencies": {
40
40
  "ufo": "^1.0.1",
41
- "unhead": "^1.0.14"
41
+ "unhead": "^1.0.20"
42
42
  },
43
43
  "scripts": {
44
44
  "build": "unbuild .",