@unhead/schema-org 0.3.0 → 0.4.0

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
@@ -635,7 +635,8 @@ const placeResolver = defineSchemaOrgResolver({
635
635
  "@type": "Place"
636
636
  },
637
637
  resolve(node, ctx) {
638
- node.address = resolveRelation(node.address, ctx, addressResolver);
638
+ if (typeof node.address !== "string")
639
+ node.address = resolveRelation(node.address, ctx, addressResolver);
639
640
  return node;
640
641
  }
641
642
  });
@@ -783,6 +784,35 @@ const itemListResolver = defineSchemaOrgResolver({
783
784
  }
784
785
  });
785
786
 
787
+ const quantitativeValueResolver = defineSchemaOrgResolver({
788
+ defaults: {
789
+ "@type": "QuantitativeValue"
790
+ }
791
+ });
792
+ const monetaryAmountResolver = defineSchemaOrgResolver({
793
+ defaults: {
794
+ "@type": "MonetaryAmount"
795
+ },
796
+ resolve(node, ctx) {
797
+ node.value = resolveRelation(node.value, ctx, quantitativeValueResolver);
798
+ return node;
799
+ }
800
+ });
801
+
802
+ const jobPostingResolver = defineSchemaOrgResolver({
803
+ defaults: {
804
+ "@type": "JobPosting"
805
+ },
806
+ resolve(node, ctx) {
807
+ node.datePosted = resolvableDateToIso(node.datePosted);
808
+ node.hiringOrganization = resolveRelation(node.hiringOrganization, ctx, organizationResolver);
809
+ node.jobLocation = resolveRelation(node.jobLocation, ctx, placeResolver);
810
+ node.baseSalary = resolveRelation(node.baseSalary, ctx, monetaryAmountResolver);
811
+ node.validThrough = resolvableDateToIso(node.validThrough);
812
+ return node;
813
+ }
814
+ });
815
+
786
816
  const openingHoursResolver = defineSchemaOrgResolver({
787
817
  defaults: {
788
818
  "@type": "OpeningHoursSpecification",
@@ -1549,6 +1579,8 @@ function loadResolver(resolver) {
1549
1579
  return courseResolver;
1550
1580
  case "itemList":
1551
1581
  return itemListResolver;
1582
+ case "jobPosting":
1583
+ return jobPostingResolver;
1552
1584
  case "listItem":
1553
1585
  return listItemResolver;
1554
1586
  case "movie":
@@ -1830,6 +1862,7 @@ const definePlace = (input) => provideResolver(input, "place");
1830
1862
  const defineHowTo = (input) => provideResolver(input, "howTo");
1831
1863
  const defineHowToStep = (input) => provideResolver(input, "howToStep");
1832
1864
  const defineImage = (input) => provideResolver(input, "image");
1865
+ const defineJobPosting = (input) => provideResolver(input, "jobPosting");
1833
1866
  const defineLocalBusiness = (input) => provideResolver(input, "localBusiness");
1834
1867
  const defineOffer = (input) => provideResolver(input, "offer");
1835
1868
  const defineOpeningHours = (input) => provideResolver(input, "openingHours");
@@ -1898,6 +1931,7 @@ exports.defineHowTo = defineHowTo;
1898
1931
  exports.defineHowToStep = defineHowToStep;
1899
1932
  exports.defineImage = defineImage;
1900
1933
  exports.defineItemList = defineItemList;
1934
+ exports.defineJobPosting = defineJobPosting;
1901
1935
  exports.defineListItem = defineListItem;
1902
1936
  exports.defineLocalBusiness = defineLocalBusiness;
1903
1937
  exports.defineMovie = defineMovie;
@@ -1924,6 +1958,7 @@ exports.howToStepDirectionResolver = howToStepDirectionResolver;
1924
1958
  exports.howToStepResolver = howToStepResolver;
1925
1959
  exports.imageResolver = imageResolver;
1926
1960
  exports.itemListResolver = itemListResolver;
1961
+ exports.jobPostingResolver = jobPostingResolver;
1927
1962
  exports.listItemResolver = listItemResolver;
1928
1963
  exports.localBusinessResolver = localBusinessResolver;
1929
1964
  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,82 @@ 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?: 'FULL_TIME' | 'PART_TIME' | 'CONTRACTOR' | 'TEMPORARY' | 'INTERN' | 'VOLUNTEER' | 'PER_DIEM' | 'OTHER';
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
+
934
1012
  type DayOfWeek = 'Friday' | 'Monday' | 'PublicHolidays' | 'Saturday' | 'Sunday' | 'Thursday' | 'Tuesday' | 'Wednesday';
935
1013
  type Time = `${number}${number}:${number}${number}`;
936
1014
  interface OpeningHoursSimple extends Thing {
@@ -1484,6 +1562,7 @@ declare const definePlace: <T extends Record<string, any>>(input?: (Place & T) |
1484
1562
  declare const defineHowTo: <T extends Record<string, any>>(input?: (HowTo & T) | undefined) => HowTo & T;
1485
1563
  declare const defineHowToStep: <T extends Record<string, any>>(input?: (HowToStep & T) | undefined) => HowToStep & T;
1486
1564
  declare const defineImage: <T extends Record<string, any>>(input?: (ImageObject & T) | undefined) => ImageObject & T;
1565
+ declare const defineJobPosting: <T extends Record<string, any>>(input?: (JobPosting & T) | undefined) => JobPosting & T;
1487
1566
  declare const defineLocalBusiness: <T extends Record<string, any>>(input?: (LocalBusiness & T) | undefined) => LocalBusiness & T;
1488
1567
  declare const defineOffer: <T extends Record<string, any>>(input?: (Offer & T) | undefined) => Offer & T;
1489
1568
  declare const defineOpeningHours: <T extends Record<string, any>>(input?: (OpeningHoursSpecification & T) | undefined) => OpeningHoursSpecification & T;
@@ -1507,4 +1586,4 @@ declare const defineSoftwareApp: <T extends Record<string, any>>(input?: (Softwa
1507
1586
  declare const defineBookEdition: <T extends Record<string, any>>(input?: (BookEdition & T) | undefined) => BookEdition & T;
1508
1587
  declare function useSchemaOrg(input?: any): any;
1509
1588
 
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 };
1589
+ 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
@@ -633,7 +633,8 @@ const placeResolver = defineSchemaOrgResolver({
633
633
  "@type": "Place"
634
634
  },
635
635
  resolve(node, ctx) {
636
- node.address = resolveRelation(node.address, ctx, addressResolver);
636
+ if (typeof node.address !== "string")
637
+ node.address = resolveRelation(node.address, ctx, addressResolver);
637
638
  return node;
638
639
  }
639
640
  });
@@ -781,6 +782,35 @@ const itemListResolver = defineSchemaOrgResolver({
781
782
  }
782
783
  });
783
784
 
785
+ const quantitativeValueResolver = defineSchemaOrgResolver({
786
+ defaults: {
787
+ "@type": "QuantitativeValue"
788
+ }
789
+ });
790
+ const monetaryAmountResolver = defineSchemaOrgResolver({
791
+ defaults: {
792
+ "@type": "MonetaryAmount"
793
+ },
794
+ resolve(node, ctx) {
795
+ node.value = resolveRelation(node.value, ctx, quantitativeValueResolver);
796
+ return node;
797
+ }
798
+ });
799
+
800
+ const jobPostingResolver = defineSchemaOrgResolver({
801
+ defaults: {
802
+ "@type": "JobPosting"
803
+ },
804
+ resolve(node, ctx) {
805
+ node.datePosted = resolvableDateToIso(node.datePosted);
806
+ node.hiringOrganization = resolveRelation(node.hiringOrganization, ctx, organizationResolver);
807
+ node.jobLocation = resolveRelation(node.jobLocation, ctx, placeResolver);
808
+ node.baseSalary = resolveRelation(node.baseSalary, ctx, monetaryAmountResolver);
809
+ node.validThrough = resolvableDateToIso(node.validThrough);
810
+ return node;
811
+ }
812
+ });
813
+
784
814
  const openingHoursResolver = defineSchemaOrgResolver({
785
815
  defaults: {
786
816
  "@type": "OpeningHoursSpecification",
@@ -1547,6 +1577,8 @@ function loadResolver(resolver) {
1547
1577
  return courseResolver;
1548
1578
  case "itemList":
1549
1579
  return itemListResolver;
1580
+ case "jobPosting":
1581
+ return jobPostingResolver;
1550
1582
  case "listItem":
1551
1583
  return listItemResolver;
1552
1584
  case "movie":
@@ -1828,6 +1860,7 @@ const definePlace = (input) => provideResolver(input, "place");
1828
1860
  const defineHowTo = (input) => provideResolver(input, "howTo");
1829
1861
  const defineHowToStep = (input) => provideResolver(input, "howToStep");
1830
1862
  const defineImage = (input) => provideResolver(input, "image");
1863
+ const defineJobPosting = (input) => provideResolver(input, "jobPosting");
1831
1864
  const defineLocalBusiness = (input) => provideResolver(input, "localBusiness");
1832
1865
  const defineOffer = (input) => provideResolver(input, "offer");
1833
1866
  const defineOpeningHours = (input) => provideResolver(input, "openingHours");
@@ -1861,4 +1894,4 @@ function useSchemaOrg(input) {
1861
1894
  }, { mode: process.env.NODE_ENV === "development" ? "all" : "server" });
1862
1895
  }
1863
1896
 
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 };
1897
+ 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.0",
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>",