@singi-labs/sifa-sdk 0.19.43 → 0.19.45
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/atproto/index.js +9 -3
- package/dist/atproto/index.js.map +1 -1
- package/dist/badge/index.js +5 -141
- package/dist/badge/index.js.map +1 -1
- package/dist/cards/adult-content.js +14 -0
- package/dist/cards/adult-content.js.map +1 -0
- package/dist/cards/app-url-patterns.js +369 -0
- package/dist/cards/app-url-patterns.js.map +1 -0
- package/dist/cards/index.js +24 -0
- package/dist/cards/index.js.map +1 -0
- package/dist/cards/resolve-card-url.js +198 -0
- package/dist/cards/resolve-card-url.js.map +1 -0
- package/dist/cards/visibility.js +45 -0
- package/dist/cards/visibility.js.map +1 -0
- package/dist/flags/index.js +4 -3
- package/dist/flags/index.js.map +1 -1
- package/dist/format/collapse-contributors.js +19 -0
- package/dist/format/collapse-contributors.js.map +1 -0
- package/dist/format/company-name.js +61 -0
- package/dist/format/company-name.js.map +1 -0
- package/dist/format/compare-text.js +9 -0
- package/dist/format/compare-text.js.map +1 -0
- package/dist/format/doi.js +8 -0
- package/dist/format/doi.js.map +1 -0
- package/dist/format/embed.js +131 -0
- package/dist/format/embed.js.map +1 -0
- package/dist/format/endorsement-context.js +35 -0
- package/dist/format/endorsement-context.js.map +1 -0
- package/dist/format/format-display-url.js +42 -0
- package/dist/format/format-display-url.js.map +1 -0
- package/dist/format/format-duration.js +13 -0
- package/dist/format/format-duration.js.map +1 -0
- package/dist/format/format-time.js +30 -0
- package/dist/format/format-time.js.map +1 -0
- package/dist/format/handle-utils.js +19 -0
- package/dist/format/handle-utils.js.map +1 -0
- package/dist/format/index.js +100 -0
- package/dist/format/index.js.map +1 -0
- package/dist/format/location-segments.js +29 -0
- package/dist/format/location-segments.js.map +1 -0
- package/dist/format/location-utils.js +42 -0
- package/dist/format/location-utils.js.map +1 -0
- package/dist/format/meta-description.js +35 -0
- package/dist/format/meta-description.js.map +1 -0
- package/dist/format/normalize-company-key.js +12 -0
- package/dist/format/normalize-company-key.js.map +1 -0
- package/dist/format/normalize-legal-form.js +71 -0
- package/dist/format/normalize-legal-form.js.map +1 -0
- package/dist/format/pds-utils.js +73 -0
- package/dist/format/pds-utils.js.map +1 -0
- package/dist/format/sort-by-date.js +39 -0
- package/dist/format/sort-by-date.js.map +1 -0
- package/dist/format/summarize-deliveries.js +37 -0
- package/dist/format/summarize-deliveries.js.map +1 -0
- package/dist/format/talk-slug.js +21 -0
- package/dist/format/talk-slug.js.map +1 -0
- package/dist/format/text-sanitize.js +29 -0
- package/dist/format/text-sanitize.js.map +1 -0
- package/dist/format/text-truncate.js +14 -0
- package/dist/format/text-truncate.js.map +1 -0
- package/dist/format/time-utils.js +19 -0
- package/dist/format/time-utils.js.map +1 -0
- package/dist/format/timeline.js +29 -0
- package/dist/format/timeline.js.map +1 -0
- package/dist/format/wcag-contrast.js +34 -0
- package/dist/format/wcag-contrast.js.map +1 -0
- package/dist/import/index.js +22 -0
- package/dist/import/index.js.map +1 -0
- package/dist/import/presentation-csv.js +116 -0
- package/dist/import/presentation-csv.js.map +1 -0
- package/dist/index.cjs +8 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +675 -7080
- package/dist/index.js.map +1 -1
- package/dist/jev/index.js +18 -5
- package/dist/jev/index.js.map +1 -1
- package/dist/jsonld/index.cjs.map +1 -1
- package/dist/jsonld/index.js +30 -987
- package/dist/jsonld/index.js.map +1 -1
- package/dist/jsonld/profile.js +222 -0
- package/dist/jsonld/profile.js.map +1 -0
- package/dist/jsonld/terms.js +496 -0
- package/dist/jsonld/terms.js.map +1 -0
- package/dist/jsonld/url.js +17 -0
- package/dist/jsonld/url.js.map +1 -0
- package/dist/jsonld/works-graph.js +41 -0
- package/dist/jsonld/works-graph.js.map +1 -0
- package/dist/jsonld/works.js +178 -0
- package/dist/jsonld/works.js.map +1 -0
- package/dist/logic/actor-identity.js +8 -0
- package/dist/logic/actor-identity.js.map +1 -0
- package/dist/logic/agent-ref.js +24 -0
- package/dist/logic/agent-ref.js.map +1 -0
- package/dist/logic/company-page-indexable.js +23 -0
- package/dist/logic/company-page-indexable.js.map +1 -0
- package/dist/logic/date-lookahead.js +31 -0
- package/dist/logic/date-lookahead.js.map +1 -0
- package/dist/logic/domain-detect.js +43 -0
- package/dist/logic/domain-detect.js.map +1 -0
- package/dist/logic/entity-disambiguation.js +24 -0
- package/dist/logic/entity-disambiguation.js.map +1 -0
- package/dist/logic/entity-ref-anchor.js +33 -0
- package/dist/logic/entity-ref-anchor.js.map +1 -0
- package/dist/logic/index.js +91 -0
- package/dist/logic/index.js.map +1 -0
- package/dist/logic/org-floor.js +66 -0
- package/dist/logic/org-floor.js.map +1 -0
- package/dist/logic/primary-item.js +9 -0
- package/dist/logic/primary-item.js.map +1 -0
- package/dist/logic/primary-position.js +16 -0
- package/dist/logic/primary-position.js.map +1 -0
- package/dist/logic/profile-completeness.js +21 -0
- package/dist/logic/profile-completeness.js.map +1 -0
- package/dist/logic/profile-dimensions.js +50 -0
- package/dist/logic/profile-dimensions.js.map +1 -0
- package/dist/logic/profile-summary.js +23 -0
- package/dist/logic/profile-summary.js.map +1 -0
- package/dist/logic/pseudo-employer.js +34 -0
- package/dist/logic/pseudo-employer.js.map +1 -0
- package/dist/logic/recent-activity.js +10 -0
- package/dist/logic/recent-activity.js.map +1 -0
- package/dist/logic/self-app.js +10 -0
- package/dist/logic/self-app.js.map +1 -0
- package/dist/{org-BCrvebcf.d.ts → org-CxTEjjrm.d.ts} +1 -1
- package/dist/{org-settings-C73Sin5E.d.ts → org-settings-BShvhyFp.d.ts} +1 -1
- package/dist/profile/headline-role-dedupe.js +12 -0
- package/dist/profile/headline-role-dedupe.js.map +1 -0
- package/dist/profile/highlights.js +200 -0
- package/dist/profile/highlights.js.map +1 -0
- package/dist/profile/index.js +66 -0
- package/dist/profile/index.js.map +1 -0
- package/dist/profile/involvement-grouping.js +31 -0
- package/dist/profile/involvement-grouping.js.map +1 -0
- package/dist/profile/language-sort.js +24 -0
- package/dist/profile/language-sort.js.map +1 -0
- package/dist/profile/publication-versions.js +98 -0
- package/dist/profile/publication-versions.js.map +1 -0
- package/dist/profile/range-sort.js +14 -0
- package/dist/profile/range-sort.js.map +1 -0
- package/dist/profile/section-model.js +122 -0
- package/dist/profile/section-model.js.map +1 -0
- package/dist/profile/section-sorts.js +33 -0
- package/dist/profile/section-sorts.js.map +1 -0
- package/dist/publishers/index.js +16 -0
- package/dist/publishers/index.js.map +1 -0
- package/dist/publishers/registry.js +87 -0
- package/dist/publishers/registry.js.map +1 -0
- package/dist/publishing/index.js +46 -184
- package/dist/publishing/index.js.map +1 -1
- package/dist/publishing/linkblog.js +42 -0
- package/dist/publishing/linkblog.js.map +1 -0
- package/dist/publishing/registry.js +32 -0
- package/dist/publishing/registry.js.map +1 -0
- package/dist/publishing/schemas.js +74 -0
- package/dist/publishing/schemas.js.map +1 -0
- package/dist/publishing/types.js +32 -0
- package/dist/publishing/types.js.map +1 -0
- package/dist/query/client.js +119 -0
- package/dist/query/client.js.map +1 -0
- package/dist/query/config.js +23 -0
- package/dist/query/config.js.map +1 -0
- package/dist/query/fetchers/accounts.js +29 -0
- package/dist/query/fetchers/accounts.js.map +1 -0
- package/dist/query/fetchers/activity-items-hide.js +31 -0
- package/dist/query/fetchers/activity-items-hide.js.map +1 -0
- package/dist/query/fetchers/activity.js +61 -0
- package/dist/query/fetchers/activity.js.map +1 -0
- package/dist/query/fetchers/actor.js +30 -0
- package/dist/query/fetchers/actor.js.map +1 -0
- package/dist/query/fetchers/admin-feature-allowlists.js +41 -0
- package/dist/query/fetchers/admin-feature-allowlists.js.map +1 -0
- package/dist/query/fetchers/admin-review-queues.js +30 -0
- package/dist/query/fetchers/admin-review-queues.js.map +1 -0
- package/dist/query/fetchers/apps.js +31 -0
- package/dist/query/fetchers/apps.js.map +1 -0
- package/dist/query/fetchers/bsky-preferences.js +55 -0
- package/dist/query/fetchers/bsky-preferences.js.map +1 -0
- package/dist/query/fetchers/confirmations.js +55 -0
- package/dist/query/fetchers/confirmations.js.map +1 -0
- package/dist/query/fetchers/destructive.js +34 -0
- package/dist/query/fetchers/destructive.js.map +1 -0
- package/dist/query/fetchers/discovery.js +67 -0
- package/dist/query/fetchers/discovery.js.map +1 -0
- package/dist/query/fetchers/education.js +23 -0
- package/dist/query/fetchers/education.js.map +1 -0
- package/dist/query/fetchers/endorsement-inbox.js +36 -0
- package/dist/query/fetchers/endorsement-inbox.js.map +1 -0
- package/dist/query/fetchers/endorsement.js +23 -0
- package/dist/query/fetchers/endorsement.js.map +1 -0
- package/dist/query/fetchers/endorsements.js +20 -0
- package/dist/query/fetchers/endorsements.js.map +1 -0
- package/dist/query/fetchers/entities.js +65 -0
- package/dist/query/fetchers/entities.js.map +1 -0
- package/dist/query/fetchers/external-accounts.js +74 -0
- package/dist/query/fetchers/external-accounts.js.map +1 -0
- package/dist/query/fetchers/follow-extras.js +38 -0
- package/dist/query/fetchers/follow-extras.js.map +1 -0
- package/dist/query/fetchers/follow.js +105 -0
- package/dist/query/fetchers/follow.js.map +1 -0
- package/dist/query/fetchers/get-profile-view.js +21 -0
- package/dist/query/fetchers/get-profile-view.js.map +1 -0
- package/dist/query/fetchers/github-prs.js +45 -0
- package/dist/query/fetchers/github-prs.js.map +1 -0
- package/dist/query/fetchers/inbox.js +29 -0
- package/dist/query/fetchers/inbox.js.map +1 -0
- package/dist/query/fetchers/index.d.ts +2 -2
- package/dist/query/fetchers/index.js +360 -2045
- package/dist/query/fetchers/index.js.map +1 -1
- package/dist/query/fetchers/investments.js +18 -0
- package/dist/query/fetchers/investments.js.map +1 -0
- package/dist/query/fetchers/keytrace-claims.js +23 -0
- package/dist/query/fetchers/keytrace-claims.js.map +1 -0
- package/dist/query/fetchers/marque-domains.js +23 -0
- package/dist/query/fetchers/marque-domains.js.map +1 -0
- package/dist/query/fetchers/network-map.js +36 -0
- package/dist/query/fetchers/network-map.js.map +1 -0
- package/dist/query/fetchers/org.js +48 -0
- package/dist/query/fetchers/org.js.map +1 -0
- package/dist/query/fetchers/positions.js +77 -0
- package/dist/query/fetchers/positions.js.map +1 -0
- package/dist/query/fetchers/profile-completeness.js +45 -0
- package/dist/query/fetchers/profile-completeness.js.map +1 -0
- package/dist/query/fetchers/profile-items-hide.js +36 -0
- package/dist/query/fetchers/profile-items-hide.js.map +1 -0
- package/dist/query/fetchers/profile-locations.js +23 -0
- package/dist/query/fetchers/profile-locations.js.map +1 -0
- package/dist/query/fetchers/profile-mutations.js +82 -0
- package/dist/query/fetchers/profile-mutations.js.map +1 -0
- package/dist/query/fetchers/profile-summary.js +14 -0
- package/dist/query/fetchers/profile-summary.js.map +1 -0
- package/dist/query/fetchers/profile.js +31 -0
- package/dist/query/fetchers/profile.js.map +1 -0
- package/dist/query/fetchers/publications.js +66 -0
- package/dist/query/fetchers/publications.js.map +1 -0
- package/dist/query/fetchers/quoted-posts.js +40 -0
- package/dist/query/fetchers/quoted-posts.js.map +1 -0
- package/dist/query/fetchers/reactions.js +85 -0
- package/dist/query/fetchers/reactions.js.map +1 -0
- package/dist/query/fetchers/received-endorsements.js +20 -0
- package/dist/query/fetchers/received-endorsements.js.map +1 -0
- package/dist/query/fetchers/reciprocity.js +23 -0
- package/dist/query/fetchers/reciprocity.js.map +1 -0
- package/dist/query/fetchers/records.js +27 -0
- package/dist/query/fetchers/records.js.map +1 -0
- package/dist/query/fetchers/repo-inventory.js +23 -0
- package/dist/query/fetchers/repo-inventory.js.map +1 -0
- package/dist/query/fetchers/roadmap.js +73 -0
- package/dist/query/fetchers/roadmap.js.map +1 -0
- package/dist/query/fetchers/rpg.js +36 -0
- package/dist/query/fetchers/rpg.js.map +1 -0
- package/dist/query/fetchers/search.js +78 -0
- package/dist/query/fetchers/search.js.map +1 -0
- package/dist/query/fetchers/section-primary.js +23 -0
- package/dist/query/fetchers/section-primary.js.map +1 -0
- package/dist/query/fetchers/skills.js +30 -0
- package/dist/query/fetchers/skills.js.map +1 -0
- package/dist/query/fetchers/speakers.js +42 -0
- package/dist/query/fetchers/speakers.js.map +1 -0
- package/dist/query/fetchers/stats.js +16 -0
- package/dist/query/fetchers/stats.js.map +1 -0
- package/dist/query/fetchers/stream.js +30 -0
- package/dist/query/fetchers/stream.js.map +1 -0
- package/dist/query/fetchers/unlinked-positions.js +30 -0
- package/dist/query/fetchers/unlinked-positions.js.map +1 -0
- package/dist/query/hooks/index.d.ts +3 -3
- package/dist/query/hooks/index.js +283 -3555
- package/dist/query/hooks/index.js.map +1 -1
- package/dist/query/hooks/use-accounts.js +19 -0
- package/dist/query/hooks/use-accounts.js.map +1 -0
- package/dist/query/hooks/use-activity-items-hide.js +52 -0
- package/dist/query/hooks/use-activity-items-hide.js.map +1 -0
- package/dist/query/hooks/use-activity.js +44 -0
- package/dist/query/hooks/use-activity.js.map +1 -0
- package/dist/query/hooks/use-admin-review-queues.js +21 -0
- package/dist/query/hooks/use-admin-review-queues.js.map +1 -0
- package/dist/query/hooks/use-apps.js +31 -0
- package/dist/query/hooks/use-apps.js.map +1 -0
- package/dist/query/hooks/use-bsky-content-prefs.js +45 -0
- package/dist/query/hooks/use-bsky-content-prefs.js.map +1 -0
- package/dist/query/hooks/use-confirmations.js +121 -0
- package/dist/query/hooks/use-confirmations.js.map +1 -0
- package/dist/query/hooks/use-create-position.js +28 -0
- package/dist/query/hooks/use-create-position.js.map +1 -0
- package/dist/query/hooks/use-destructive.js +63 -0
- package/dist/query/hooks/use-destructive.js.map +1 -0
- package/dist/query/hooks/use-discovery.js +53 -0
- package/dist/query/hooks/use-discovery.js.map +1 -0
- package/dist/query/hooks/use-education-mutations.js +67 -0
- package/dist/query/hooks/use-education-mutations.js.map +1 -0
- package/dist/query/hooks/use-endorsement-inbox.js +80 -0
- package/dist/query/hooks/use-endorsement-inbox.js.map +1 -0
- package/dist/query/hooks/use-endorsement-mutations.js +33 -0
- package/dist/query/hooks/use-endorsement-mutations.js.map +1 -0
- package/dist/query/hooks/use-endorsement.js +20 -0
- package/dist/query/hooks/use-endorsement.js.map +1 -0
- package/dist/query/hooks/use-entity-search.js +73 -0
- package/dist/query/hooks/use-entity-search.js.map +1 -0
- package/dist/query/hooks/use-external-accounts.js +143 -0
- package/dist/query/hooks/use-external-accounts.js.map +1 -0
- package/dist/query/hooks/use-feature-allowlist.js +104 -0
- package/dist/query/hooks/use-feature-allowlist.js.map +1 -0
- package/dist/query/hooks/use-follow-extras.js +38 -0
- package/dist/query/hooks/use-follow-extras.js.map +1 -0
- package/dist/query/hooks/use-follow.js +113 -0
- package/dist/query/hooks/use-follow.js.map +1 -0
- package/dist/query/hooks/use-get-profile-view.js +20 -0
- package/dist/query/hooks/use-get-profile-view.js.map +1 -0
- package/dist/query/hooks/use-github-prs.js +21 -0
- package/dist/query/hooks/use-github-prs.js.map +1 -0
- package/dist/query/hooks/use-inbox.js +19 -0
- package/dist/query/hooks/use-inbox.js.map +1 -0
- package/dist/query/hooks/use-investment-mutations.js +65 -0
- package/dist/query/hooks/use-investment-mutations.js.map +1 -0
- package/dist/query/hooks/use-keytrace-claims.js +50 -0
- package/dist/query/hooks/use-keytrace-claims.js.map +1 -0
- package/dist/query/hooks/use-location-mutations.js +71 -0
- package/dist/query/hooks/use-location-mutations.js.map +1 -0
- package/dist/query/hooks/use-marque-domains.js +50 -0
- package/dist/query/hooks/use-marque-domains.js.map +1 -0
- package/dist/query/hooks/use-org-claim.js +29 -0
- package/dist/query/hooks/use-org-claim.js.map +1 -0
- package/dist/query/hooks/use-org-domains.js +28 -0
- package/dist/query/hooks/use-org-domains.js.map +1 -0
- package/dist/query/hooks/use-org-notification-emails.js +28 -0
- package/dist/query/hooks/use-org-notification-emails.js.map +1 -0
- package/dist/query/hooks/use-org-profile-settings.js +29 -0
- package/dist/query/hooks/use-org-profile-settings.js.map +1 -0
- package/dist/query/hooks/use-org-profile.js +21 -0
- package/dist/query/hooks/use-org-profile.js.map +1 -0
- package/dist/query/hooks/use-position-mutations.js +128 -0
- package/dist/query/hooks/use-position-mutations.js.map +1 -0
- package/dist/query/hooks/use-profile-completeness.js +21 -0
- package/dist/query/hooks/use-profile-completeness.js.map +1 -0
- package/dist/query/hooks/use-profile-items-hide.js +53 -0
- package/dist/query/hooks/use-profile-items-hide.js.map +1 -0
- package/dist/query/hooks/use-profile-mutations.js +143 -0
- package/dist/query/hooks/use-profile-mutations.js.map +1 -0
- package/dist/query/hooks/use-profile.js +30 -0
- package/dist/query/hooks/use-profile.js.map +1 -0
- package/dist/query/hooks/use-publication-mutations.js +90 -0
- package/dist/query/hooks/use-publication-mutations.js.map +1 -0
- package/dist/query/hooks/use-reaction-mutations.js +48 -0
- package/dist/query/hooks/use-reaction-mutations.js.map +1 -0
- package/dist/query/hooks/use-reactions.js +32 -0
- package/dist/query/hooks/use-reactions.js.map +1 -0
- package/dist/query/hooks/use-received-endorsements.js +23 -0
- package/dist/query/hooks/use-received-endorsements.js.map +1 -0
- package/dist/query/hooks/use-reciprocity.js +19 -0
- package/dist/query/hooks/use-reciprocity.js.map +1 -0
- package/dist/query/hooks/use-record-mutations.js +67 -0
- package/dist/query/hooks/use-record-mutations.js.map +1 -0
- package/dist/query/hooks/use-repo-inventory.js +43 -0
- package/dist/query/hooks/use-repo-inventory.js.map +1 -0
- package/dist/query/hooks/use-roadmap-mutations.js +51 -0
- package/dist/query/hooks/use-roadmap-mutations.js.map +1 -0
- package/dist/query/hooks/use-roadmap.js +31 -0
- package/dist/query/hooks/use-roadmap.js.map +1 -0
- package/dist/query/hooks/use-search.js +63 -0
- package/dist/query/hooks/use-search.js.map +1 -0
- package/dist/query/hooks/use-section-primary-mutations.js +53 -0
- package/dist/query/hooks/use-section-primary-mutations.js.map +1 -0
- package/dist/query/hooks/use-skill-mutations.js +91 -0
- package/dist/query/hooks/use-skill-mutations.js.map +1 -0
- package/dist/query/hooks/use-stats.js +19 -0
- package/dist/query/hooks/use-stats.js.map +1 -0
- package/dist/query/hooks/use-stream.js +20 -0
- package/dist/query/hooks/use-stream.js.map +1 -0
- package/dist/query/hooks/use-unlinked-positions.js +45 -0
- package/dist/query/hooks/use-unlinked-positions.js.map +1 -0
- package/dist/query/index.d.ts +4 -4
- package/dist/query/index.js +685 -3744
- package/dist/query/index.js.map +1 -1
- package/dist/query/keys.js +138 -0
- package/dist/query/keys.js.map +1 -0
- package/dist/repo/groups.js +81 -0
- package/dist/repo/groups.js.map +1 -0
- package/dist/repo/index.js +9 -0
- package/dist/repo/index.js.map +1 -0
- package/dist/repo/labels.js +121 -0
- package/dist/repo/labels.js.map +1 -0
- package/dist/repo/types.js +1 -0
- package/dist/repo/types.js.map +1 -0
- package/dist/resume/index.js +5 -179
- package/dist/resume/index.js.map +1 -1
- package/dist/resume/json-resume.js +153 -0
- package/dist/resume/json-resume.js.map +1 -0
- package/dist/roadmap/index.js +101 -0
- package/dist/roadmap/index.js.map +1 -0
- package/dist/rpg/catalog.js +101 -0
- package/dist/rpg/catalog.js.map +1 -0
- package/dist/rpg/index.js +13 -116
- package/dist/rpg/index.js.map +1 -1
- package/dist/rpg/unlocks.js +21 -0
- package/dist/rpg/unlocks.js.map +1 -0
- package/dist/schemas/blob-ref.js +12 -0
- package/dist/schemas/blob-ref.js.map +1 -0
- package/dist/schemas/confirmation.js +23 -0
- package/dist/schemas/confirmation.js.map +1 -0
- package/dist/schemas/endorsement-confirmation.js +18 -0
- package/dist/schemas/endorsement-confirmation.js.map +1 -0
- package/dist/schemas/endorsement.js +19 -0
- package/dist/schemas/endorsement.js.map +1 -0
- package/dist/schemas/entity.js +74 -0
- package/dist/schemas/entity.js.map +1 -0
- package/dist/schemas/feed.js +73 -0
- package/dist/schemas/feed.js.map +1 -0
- package/dist/schemas/follow-profile.js +32 -0
- package/dist/schemas/follow-profile.js.map +1 -0
- package/dist/schemas/graph-follow.js +19 -0
- package/dist/schemas/graph-follow.js.map +1 -0
- package/dist/schemas/index.js +164 -629
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/org-employment-attestation.js +28 -0
- package/dist/schemas/org-employment-attestation.js.map +1 -0
- package/dist/schemas/org-profile.js +64 -0
- package/dist/schemas/org-profile.js.map +1 -0
- package/dist/schemas/profile-certification.js +28 -0
- package/dist/schemas/profile-certification.js.map +1 -0
- package/dist/schemas/profile-course.js +32 -0
- package/dist/schemas/profile-course.js.map +1 -0
- package/dist/schemas/profile-education.js +33 -0
- package/dist/schemas/profile-education.js.map +1 -0
- package/dist/schemas/profile-external-account.js +15 -0
- package/dist/schemas/profile-external-account.js.map +1 -0
- package/dist/schemas/profile-honor.js +18 -0
- package/dist/schemas/profile-honor.js.map +1 -0
- package/dist/schemas/profile-investment.js +48 -0
- package/dist/schemas/profile-investment.js.map +1 -0
- package/dist/schemas/profile-involvement.js +47 -0
- package/dist/schemas/profile-involvement.js.map +1 -0
- package/dist/schemas/profile-language.js +12 -0
- package/dist/schemas/profile-language.js.map +1 -0
- package/dist/schemas/profile-position.js +42 -0
- package/dist/schemas/profile-position.js.map +1 -0
- package/dist/schemas/profile-presentation-delivery.js +38 -0
- package/dist/schemas/profile-presentation-delivery.js.map +1 -0
- package/dist/schemas/profile-presentation.js +36 -0
- package/dist/schemas/profile-presentation.js.map +1 -0
- package/dist/schemas/profile-project.js +48 -0
- package/dist/schemas/profile-project.js.map +1 -0
- package/dist/schemas/profile-publication.js +30 -0
- package/dist/schemas/profile-publication.js.map +1 -0
- package/dist/schemas/profile-self.js +22 -0
- package/dist/schemas/profile-self.js.map +1 -0
- package/dist/schemas/profile-skill.js +13 -0
- package/dist/schemas/profile-skill.js.map +1 -0
- package/dist/schemas/profile-volunteering.js +20 -0
- package/dist/schemas/profile-volunteering.js.map +1 -0
- package/dist/schemas/shared.js +56 -0
- package/dist/schemas/shared.js.map +1 -0
- package/dist/schemas/write/certification.js +16 -0
- package/dist/schemas/write/certification.js.map +1 -0
- package/dist/schemas/write/course.js +36 -0
- package/dist/schemas/write/course.js.map +1 -0
- package/dist/schemas/write/education.js +18 -0
- package/dist/schemas/write/education.js.map +1 -0
- package/dist/schemas/write/external-account.js +13 -0
- package/dist/schemas/write/external-account.js.map +1 -0
- package/dist/schemas/write/honor.js +14 -0
- package/dist/schemas/write/honor.js.map +1 -0
- package/dist/schemas/write/index.d.ts +1 -1
- package/dist/schemas/write/index.js +89 -593
- package/dist/schemas/write/index.js.map +1 -1
- package/dist/schemas/write/investment.js +32 -0
- package/dist/schemas/write/investment.js.map +1 -0
- package/dist/schemas/write/involvement.js +34 -0
- package/dist/schemas/write/involvement.js.map +1 -0
- package/dist/schemas/write/language.js +10 -0
- package/dist/schemas/write/language.js.map +1 -0
- package/dist/schemas/write/org-claim.js +56 -0
- package/dist/schemas/write/org-claim.js.map +1 -0
- package/dist/schemas/write/org-employment-attestation.js +19 -0
- package/dist/schemas/write/org-employment-attestation.js.map +1 -0
- package/dist/schemas/write/org-profile.js +54 -0
- package/dist/schemas/write/org-profile.js.map +1 -0
- package/dist/schemas/write/org-settings.js +81 -0
- package/dist/schemas/write/org-settings.js.map +1 -0
- package/dist/schemas/write/position.js +24 -0
- package/dist/schemas/write/position.js.map +1 -0
- package/dist/schemas/write/presentation-delivery.js +34 -0
- package/dist/schemas/write/presentation-delivery.js.map +1 -0
- package/dist/schemas/write/presentation.js +23 -0
- package/dist/schemas/write/presentation.js.map +1 -0
- package/dist/schemas/write/profile-location.js +21 -0
- package/dist/schemas/write/profile-location.js.map +1 -0
- package/dist/schemas/write/profile-self.js +27 -0
- package/dist/schemas/write/profile-self.js.map +1 -0
- package/dist/schemas/write/project.js +27 -0
- package/dist/schemas/write/project.js.map +1 -0
- package/dist/schemas/write/publication.js +41 -0
- package/dist/schemas/write/publication.js.map +1 -0
- package/dist/schemas/write/shared.js +96 -0
- package/dist/schemas/write/shared.js.map +1 -0
- package/dist/schemas/write/skill.js +18 -0
- package/dist/schemas/write/skill.js.map +1 -0
- package/dist/schemas/write/volunteering.js +16 -0
- package/dist/schemas/write/volunteering.js.map +1 -0
- package/dist/stream/activity-item.js +1 -0
- package/dist/stream/activity-item.js.map +1 -0
- package/dist/stream/index.js +49 -0
- package/dist/stream/index.js.map +1 -0
- package/dist/stream/stream-card-vm-schema.js +265 -0
- package/dist/stream/stream-card-vm-schema.js.map +1 -0
- package/dist/stream/stream-card-vm.js +1 -0
- package/dist/stream/stream-card-vm.js.map +1 -0
- package/dist/stream/to-stream-card-vm.js +793 -0
- package/dist/stream/to-stream-card-vm.js.map +1 -0
- package/dist/stream/two-tier.js +30 -0
- package/dist/stream/two-tier.js.map +1 -0
- package/dist/stream/verbs.js +120 -0
- package/dist/stream/verbs.js.map +1 -0
- package/dist/taxonomy/activity-tiers.js +956 -0
- package/dist/taxonomy/activity-tiers.js.map +1 -0
- package/dist/taxonomy/app-categories.js +42 -0
- package/dist/taxonomy/app-categories.js.map +1 -0
- package/dist/taxonomy/app-category-map.js +166 -0
- package/dist/taxonomy/app-category-map.js.map +1 -0
- package/dist/taxonomy/artifact-link-kind.js +29 -0
- package/dist/taxonomy/artifact-link-kind.js.map +1 -0
- package/dist/taxonomy/calendar-event.js +28 -0
- package/dist/taxonomy/calendar-event.js.map +1 -0
- package/dist/taxonomy/continents.js +215 -0
- package/dist/taxonomy/continents.js.map +1 -0
- package/dist/taxonomy/countries.js +203 -0
- package/dist/taxonomy/countries.js.map +1 -0
- package/dist/taxonomy/course-role.js +37 -0
- package/dist/taxonomy/course-role.js.map +1 -0
- package/dist/taxonomy/employment-type.js +82 -0
- package/dist/taxonomy/employment-type.js.map +1 -0
- package/dist/taxonomy/eqf-level.js +59 -0
- package/dist/taxonomy/eqf-level.js.map +1 -0
- package/dist/taxonomy/index.js +263 -0
- package/dist/taxonomy/index.js.map +1 -0
- package/dist/taxonomy/industry-taxonomy.js +281 -0
- package/dist/taxonomy/industry-taxonomy.js.map +1 -0
- package/dist/taxonomy/investment.js +54 -0
- package/dist/taxonomy/investment.js.map +1 -0
- package/dist/taxonomy/involvement-kind.js +30 -0
- package/dist/taxonomy/involvement-kind.js.map +1 -0
- package/dist/taxonomy/open-to.js +128 -0
- package/dist/taxonomy/open-to.js.map +1 -0
- package/dist/taxonomy/platforms.js +56 -0
- package/dist/taxonomy/platforms.js.map +1 -0
- package/dist/taxonomy/presentation-link-type.js +22 -0
- package/dist/taxonomy/presentation-link-type.js.map +1 -0
- package/dist/taxonomy/presentation-role.js +21 -0
- package/dist/taxonomy/presentation-role.js.map +1 -0
- package/dist/taxonomy/publication-type.js +54 -0
- package/dist/taxonomy/publication-type.js.map +1 -0
- package/dist/taxonomy/relational.js +25 -0
- package/dist/taxonomy/relational.js.map +1 -0
- package/dist/taxonomy/search-filter-defs.js +66 -0
- package/dist/taxonomy/search-filter-defs.js.map +1 -0
- package/dist/taxonomy/skill-categories.js +28 -0
- package/dist/taxonomy/skill-categories.js.map +1 -0
- package/dist/taxonomy/skill-display-groups.js +12 -0
- package/dist/taxonomy/skill-display-groups.js.map +1 -0
- package/dist/taxonomy/skill-grouping.js +90 -0
- package/dist/taxonomy/skill-grouping.js.map +1 -0
- package/dist/taxonomy/verification-providers.js +69 -0
- package/dist/taxonomy/verification-providers.js.map +1 -0
- package/dist/taxonomy/workplace-type.js +38 -0
- package/dist/taxonomy/workplace-type.js.map +1 -0
- package/dist/tokens/colors.js +11 -0
- package/dist/tokens/colors.js.map +1 -0
- package/dist/tokens/icons.js +15 -0
- package/dist/tokens/icons.js.map +1 -0
- package/dist/tokens/index.js +10 -39
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/typography.js +23 -0
- package/dist/tokens/typography.js.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/profile-view.js +1 -0
- package/dist/types/profile-view.js.map +1 -0
- package/dist/{use-org-notification-emails-0hjt-dEw.d.ts → use-org-notification-emails-CWWi1D8t.d.ts} +2 -2
- package/package.json +4 -3
package/dist/jsonld/index.js
CHANGED
|
@@ -1,989 +1,32 @@
|
|
|
1
|
-
// src/jsonld/
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
{
|
|
32
|
-
lexicon: "id.sifa.profile.certification",
|
|
33
|
-
field: "expiresAt",
|
|
34
|
-
match: "exactMatch",
|
|
35
|
-
terms: ["schema:validUntil"]
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
lexicon: "id.sifa.profile.course",
|
|
39
|
-
match: "exactMatch",
|
|
40
|
-
terms: ["schema:Course"]
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
lexicon: "id.sifa.profile.course",
|
|
44
|
-
field: "number",
|
|
45
|
-
match: "exactMatch",
|
|
46
|
-
terms: ["schema:courseCode"]
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
lexicon: "id.sifa.profile.education",
|
|
50
|
-
match: "closeMatch",
|
|
51
|
-
terms: ["schema:EducationalOccupationalCredential"],
|
|
52
|
-
note: "One record maps to two schema.org assertions: alumniOf for the institution and hasCredential for the degree."
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
lexicon: "id.sifa.profile.education",
|
|
56
|
-
field: "degree",
|
|
57
|
-
match: "closeMatch",
|
|
58
|
-
terms: ["schema:hasCredential", "bibo:degree"]
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
lexicon: "id.sifa.profile.education",
|
|
62
|
-
field: "eqfLevel",
|
|
63
|
-
match: "closeMatch",
|
|
64
|
-
terms: ["schema:educationalLevel"],
|
|
65
|
-
note: "EQF is the value anchor."
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
lexicon: "id.sifa.profile.education",
|
|
69
|
-
field: "fieldOfStudy",
|
|
70
|
-
match: "closeMatch",
|
|
71
|
-
terms: ["schema:educationalCredentialAwarded"],
|
|
72
|
-
note: "ISCED-F is the value anchor."
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
lexicon: "id.sifa.profile.education",
|
|
76
|
-
field: "institution",
|
|
77
|
-
match: "exactMatch",
|
|
78
|
-
terms: ["schema:alumniOf"]
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
lexicon: "id.sifa.profile.externalAccount",
|
|
82
|
-
match: "exactMatch",
|
|
83
|
-
terms: ["schema:sameAs", "foaf:account"]
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
lexicon: "id.sifa.profile.honor",
|
|
87
|
-
match: "broadMatch",
|
|
88
|
-
terms: ["schema:award"],
|
|
89
|
-
note: "schema:award is a bare string, so issuer and date are lost. No better term exists in BIBO either."
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
lexicon: "id.sifa.profile.involvement",
|
|
93
|
-
match: "broadMatch",
|
|
94
|
-
terms: ["org:Membership"],
|
|
95
|
-
note: "The kind known values have no external equivalent."
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
lexicon: "id.sifa.profile.language",
|
|
99
|
-
match: "exactMatch",
|
|
100
|
-
terms: ["schema:knowsLanguage"]
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
lexicon: "id.sifa.profile.position",
|
|
104
|
-
match: "closeMatch",
|
|
105
|
-
terms: ["org:Membership", "schema:OrganizationRole"]
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
lexicon: "id.sifa.profile.position",
|
|
109
|
-
field: "company",
|
|
110
|
-
match: "exactMatch",
|
|
111
|
-
terms: ["org:organization", "schema:worksFor"]
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
lexicon: "id.sifa.profile.position",
|
|
115
|
-
field: "description",
|
|
116
|
-
match: "exactMatch",
|
|
117
|
-
terms: ["dcterms:description"]
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
lexicon: "id.sifa.profile.position",
|
|
121
|
-
field: "employmentType",
|
|
122
|
-
match: "closeMatch",
|
|
123
|
-
terms: ["schema:employmentType"],
|
|
124
|
-
note: "schema:employmentType is free text. ESCO is the better value anchor."
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
lexicon: "id.sifa.profile.position",
|
|
128
|
-
field: "endedAt",
|
|
129
|
-
match: "exactMatch",
|
|
130
|
-
terms: ["schema:endDate"]
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
lexicon: "id.sifa.profile.position",
|
|
134
|
-
field: "entityRef",
|
|
135
|
-
match: "closeMatch",
|
|
136
|
-
terms: ["schema:sameAs"]
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
lexicon: "id.sifa.profile.position",
|
|
140
|
-
field: "location",
|
|
141
|
-
match: "exactMatch",
|
|
142
|
-
terms: ["schema:jobLocation"]
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
lexicon: "id.sifa.profile.position",
|
|
146
|
-
field: "startedAt",
|
|
147
|
-
match: "exactMatch",
|
|
148
|
-
terms: ["schema:startDate"]
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
lexicon: "id.sifa.profile.position",
|
|
152
|
-
field: "title",
|
|
153
|
-
match: "exactMatch",
|
|
154
|
-
terms: ["org:role", "schema:roleName"]
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
lexicon: "id.sifa.profile.position",
|
|
158
|
-
field: "workplaceType",
|
|
159
|
-
match: "narrowMatch",
|
|
160
|
-
terms: ["schema:jobLocationType"],
|
|
161
|
-
note: "schema.org models only a remote flag; Sifa distinguishes onSite, remote, and hybrid."
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
lexicon: "id.sifa.profile.presentation",
|
|
165
|
-
match: "closeMatch",
|
|
166
|
-
terms: ["bibo:Slideshow", "schema:PresentationDigitalDocument"],
|
|
167
|
-
note: 'Neither term carries the "reusable, deliverable more than once" semantics of the Sifa record.'
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
lexicon: "id.sifa.profile.presentation",
|
|
171
|
-
field: "coverImage",
|
|
172
|
-
match: "exactMatch",
|
|
173
|
-
terms: ["schema:image", "foaf:depiction"]
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
lexicon: "id.sifa.profile.presentation",
|
|
177
|
-
field: "description",
|
|
178
|
-
match: "exactMatch",
|
|
179
|
-
terms: ["bibo:abstract", "schema:abstract"]
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
lexicon: "id.sifa.profile.presentation",
|
|
183
|
-
field: "duration",
|
|
184
|
-
match: "narrowMatch",
|
|
185
|
-
terms: ["schema:timeRequired"],
|
|
186
|
-
note: "The lexicon models a range; schema:timeRequired is a single ISO 8601 duration."
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
lexicon: "id.sifa.profile.presentation",
|
|
190
|
-
field: "intendedAudiences",
|
|
191
|
-
match: "closeMatch",
|
|
192
|
-
terms: ["schema:audience"]
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
lexicon: "id.sifa.profile.presentation",
|
|
196
|
-
field: "title",
|
|
197
|
-
match: "exactMatch",
|
|
198
|
-
terms: ["dcterms:title", "schema:name"]
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
lexicon: "id.sifa.profile.presentation",
|
|
202
|
-
field: "writeupRef",
|
|
203
|
-
match: "closeMatch",
|
|
204
|
-
terms: ["dcterms:isReferencedBy", "schema:subjectOf"]
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
lexicon: "id.sifa.profile.presentationDelivery",
|
|
208
|
-
match: "closeMatch",
|
|
209
|
-
terms: ["schema:Event", "event:Event"],
|
|
210
|
-
note: "BIBO models this relation as bibo:Slideshow bibo:presentedAt event:Event."
|
|
211
|
-
},
|
|
212
|
-
{
|
|
213
|
-
lexicon: "id.sifa.profile.presentationDelivery",
|
|
214
|
-
field: "address",
|
|
215
|
-
match: "exactMatch",
|
|
216
|
-
terms: ["schema:location", "event:place"]
|
|
217
|
-
},
|
|
218
|
-
{
|
|
219
|
-
lexicon: "id.sifa.profile.presentationDelivery",
|
|
220
|
-
field: "coSpeakers",
|
|
221
|
-
match: "exactMatch",
|
|
222
|
-
terms: ["schema:performer"]
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
lexicon: "id.sifa.profile.presentationDelivery",
|
|
226
|
-
field: "date",
|
|
227
|
-
match: "exactMatch",
|
|
228
|
-
terms: ["schema:startDate", "event:time"]
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
lexicon: "id.sifa.profile.presentationDelivery",
|
|
232
|
-
field: "eventName",
|
|
233
|
-
match: "closeMatch",
|
|
234
|
-
terms: ["schema:superEvent", "bibo:Conference"]
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
lexicon: "id.sifa.profile.presentationDelivery",
|
|
238
|
-
field: "mode",
|
|
239
|
-
match: "exactMatch",
|
|
240
|
-
terms: ["schema:eventAttendanceMode"],
|
|
241
|
-
note: "The community.lexicon.calendar.event known values are already one-to-one with the schema.org enumeration."
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
lexicon: "id.sifa.profile.presentationDelivery",
|
|
245
|
-
field: "presentationRef",
|
|
246
|
-
match: "closeMatch",
|
|
247
|
-
terms: ["bibo:presentedAt", "schema:workPerformed"]
|
|
248
|
-
},
|
|
249
|
-
{
|
|
250
|
-
lexicon: "id.sifa.profile.presentationDelivery",
|
|
251
|
-
field: "role",
|
|
252
|
-
match: "closeMatch",
|
|
253
|
-
terms: ["bibo:performer", "schema:performer"],
|
|
254
|
-
note: "No external vocabulary distinguishes presenter, panelist, keynote, workshop and host at this granularity."
|
|
255
|
-
},
|
|
256
|
-
{
|
|
257
|
-
lexicon: "id.sifa.profile.presentationDelivery",
|
|
258
|
-
field: "status",
|
|
259
|
-
match: "exactMatch",
|
|
260
|
-
terms: ["schema:eventStatus"],
|
|
261
|
-
note: "As with mode, already one-to-one with the schema.org enumeration."
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
lexicon: "id.sifa.profile.presentationDelivery",
|
|
265
|
-
field: "title",
|
|
266
|
-
match: "exactMatch",
|
|
267
|
-
terms: ["dcterms:title", "schema:name"]
|
|
268
|
-
},
|
|
269
|
-
{
|
|
270
|
-
lexicon: "id.sifa.profile.project",
|
|
271
|
-
match: "exactMatch",
|
|
272
|
-
terms: ["schema:Project", "foaf:Project"]
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
lexicon: "id.sifa.profile.publication",
|
|
276
|
-
match: "broadMatch",
|
|
277
|
-
terms: ["bibo:Document", "schema:CreativeWork"],
|
|
278
|
-
note: "Refine to bibo:AcademicArticle, bibo:Book, bibo:Report or bibo:Thesis when a resource type is known. COAR is the value anchor."
|
|
279
|
-
},
|
|
280
|
-
{
|
|
281
|
-
lexicon: "id.sifa.profile.publication",
|
|
282
|
-
field: "authors",
|
|
283
|
-
match: "exactMatch",
|
|
284
|
-
terms: ["bibo:authorList", "schema:author"],
|
|
285
|
-
note: "bibo:authorList is an ordered rdf:List and preserves author order, which schema:author does not guarantee."
|
|
286
|
-
},
|
|
287
|
-
{
|
|
288
|
-
lexicon: "id.sifa.profile.publication",
|
|
289
|
-
field: "description",
|
|
290
|
-
match: "exactMatch",
|
|
291
|
-
terms: ["bibo:abstract", "schema:abstract"]
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
lexicon: "id.sifa.profile.publication",
|
|
295
|
-
field: "doi",
|
|
296
|
-
match: "exactMatch",
|
|
297
|
-
terms: ["bibo:doi", "prism:doi"],
|
|
298
|
-
note: "schema:identifier with a PropertyValue of propertyID 'doi' is the JSON-LD serialization; bibo:doi is the direct term."
|
|
299
|
-
},
|
|
300
|
-
{
|
|
301
|
-
lexicon: "id.sifa.profile.publication",
|
|
302
|
-
field: "publishedAt",
|
|
303
|
-
match: "exactMatch",
|
|
304
|
-
terms: ["dcterms:issued", "schema:datePublished"]
|
|
305
|
-
},
|
|
306
|
-
{
|
|
307
|
-
lexicon: "id.sifa.profile.publication",
|
|
308
|
-
field: "publisher",
|
|
309
|
-
match: "exactMatch",
|
|
310
|
-
terms: ["dcterms:publisher", "schema:publisher"]
|
|
311
|
-
},
|
|
312
|
-
{
|
|
313
|
-
lexicon: "id.sifa.profile.publication",
|
|
314
|
-
field: "relatedIdentifiers",
|
|
315
|
-
match: "closeMatch",
|
|
316
|
-
terms: ["dcterms:relation"]
|
|
317
|
-
},
|
|
318
|
-
{
|
|
319
|
-
lexicon: "id.sifa.profile.publication",
|
|
320
|
-
field: "subtitle",
|
|
321
|
-
match: "closeMatch",
|
|
322
|
-
terms: ["schema:alternativeHeadline"]
|
|
323
|
-
},
|
|
324
|
-
{
|
|
325
|
-
lexicon: "id.sifa.profile.publication",
|
|
326
|
-
field: "title",
|
|
327
|
-
match: "exactMatch",
|
|
328
|
-
terms: ["dcterms:title", "schema:name"]
|
|
329
|
-
},
|
|
330
|
-
{
|
|
331
|
-
lexicon: "id.sifa.profile.publication",
|
|
332
|
-
field: "type",
|
|
333
|
-
match: "closeMatch",
|
|
334
|
-
terms: ["dcterms:type", "schema:additionalType"],
|
|
335
|
-
note: "COAR Resource Types is the anchor a consumer should map to. The values here are ORCID's because that is the vocabulary the data arrives in; deviating from the id.sifa.defs token convention is deliberate, since the vocabulary is ORCID's rather than Sifa's."
|
|
336
|
-
},
|
|
337
|
-
{
|
|
338
|
-
lexicon: "id.sifa.profile.publication",
|
|
339
|
-
field: "url",
|
|
340
|
-
match: "exactMatch",
|
|
341
|
-
terms: ["bibo:uri", "schema:url"]
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
lexicon: "id.sifa.profile.self",
|
|
345
|
-
match: "exactMatch",
|
|
346
|
-
terms: ["schema:Person", "foaf:Person"]
|
|
347
|
-
},
|
|
348
|
-
{
|
|
349
|
-
lexicon: "id.sifa.profile.self",
|
|
350
|
-
field: "about",
|
|
351
|
-
match: "exactMatch",
|
|
352
|
-
terms: ["schema:description"]
|
|
353
|
-
},
|
|
354
|
-
{
|
|
355
|
-
lexicon: "id.sifa.profile.self",
|
|
356
|
-
field: "avatar",
|
|
357
|
-
match: "exactMatch",
|
|
358
|
-
terms: ["schema:image", "foaf:depiction"]
|
|
359
|
-
},
|
|
360
|
-
{
|
|
361
|
-
lexicon: "id.sifa.profile.self",
|
|
362
|
-
field: "displayName",
|
|
363
|
-
match: "exactMatch",
|
|
364
|
-
terms: ["schema:name", "foaf:name"]
|
|
365
|
-
},
|
|
366
|
-
{
|
|
367
|
-
lexicon: "id.sifa.profile.self",
|
|
368
|
-
field: "familyName",
|
|
369
|
-
match: "exactMatch",
|
|
370
|
-
terms: ["schema:familyName", "foaf:family_name"]
|
|
371
|
-
},
|
|
372
|
-
{
|
|
373
|
-
lexicon: "id.sifa.profile.self",
|
|
374
|
-
field: "givenName",
|
|
375
|
-
match: "exactMatch",
|
|
376
|
-
terms: ["schema:givenName", "foaf:givenname"]
|
|
377
|
-
},
|
|
378
|
-
{
|
|
379
|
-
lexicon: "id.sifa.profile.self",
|
|
380
|
-
field: "headline",
|
|
381
|
-
match: "closeMatch",
|
|
382
|
-
terms: ["schema:jobTitle"]
|
|
383
|
-
},
|
|
384
|
-
{
|
|
385
|
-
lexicon: "id.sifa.profile.self",
|
|
386
|
-
field: "location",
|
|
387
|
-
match: "closeMatch",
|
|
388
|
-
terms: ["schema:homeLocation"]
|
|
389
|
-
},
|
|
390
|
-
{
|
|
391
|
-
lexicon: "id.sifa.profile.skill",
|
|
392
|
-
match: "closeMatch",
|
|
393
|
-
terms: ["schema:knowsAbout", "schema:DefinedTerm"],
|
|
394
|
-
note: "ESCO is the value anchor."
|
|
395
|
-
},
|
|
396
|
-
{
|
|
397
|
-
lexicon: "id.sifa.profile.volunteering",
|
|
398
|
-
match: "closeMatch",
|
|
399
|
-
terms: ["org:Membership", "schema:OrganizationRole"]
|
|
400
|
-
}
|
|
401
|
-
],
|
|
402
|
-
unmapped: [
|
|
403
|
-
{
|
|
404
|
-
lexicon: "id.sifa.profile.self",
|
|
405
|
-
field: "pronouns",
|
|
406
|
-
reason: "No stable external term. schema.org has no pronouns property."
|
|
407
|
-
},
|
|
408
|
-
{
|
|
409
|
-
lexicon: "id.sifa.profile.self",
|
|
410
|
-
field: "discoverable",
|
|
411
|
-
reason: "Sifa indexing control, not a fact about the person."
|
|
412
|
-
},
|
|
413
|
-
{
|
|
414
|
-
lexicon: "id.sifa.profile.position",
|
|
415
|
-
field: "isPrimary",
|
|
416
|
-
reason: "Sifa display ordering concern."
|
|
417
|
-
},
|
|
418
|
-
{
|
|
419
|
-
lexicon: "id.sifa.profile.education",
|
|
420
|
-
field: "grade",
|
|
421
|
-
reason: "No comparable external term; grading scales are not portable."
|
|
422
|
-
},
|
|
423
|
-
{
|
|
424
|
-
lexicon: "id.sifa.profile.language",
|
|
425
|
-
field: "proficiency",
|
|
426
|
-
reason: "The known values are CEFR-shaped but not CEFR-named. Map only; renaming a published lexicon for a cosmetic gain is not worth the break."
|
|
427
|
-
},
|
|
428
|
-
{
|
|
429
|
-
lexicon: "id.sifa.confirmation",
|
|
430
|
-
reason: "A record affirming another record is reification. schema:Review and schema:ClaimReview both imply an evaluation that a confirmation does not make."
|
|
431
|
-
},
|
|
432
|
-
{
|
|
433
|
-
lexicon: "id.sifa.endorsement",
|
|
434
|
-
reason: "Same reification problem as confirmation. Any mapping that lets a consumer aggregate endorsements into a score works against the descriptive-only trust model."
|
|
435
|
-
},
|
|
436
|
-
{
|
|
437
|
-
lexicon: "id.sifa.graph.connection",
|
|
438
|
-
reason: "foaf:knows carries no consent semantics. A Sifa connection is bilateral and confirmed; flattening it to foaf:knows would misrepresent an unconfirmed acquaintance claim as mutual."
|
|
439
|
-
},
|
|
440
|
-
{
|
|
441
|
-
lexicon: "id.sifa.graph.follow",
|
|
442
|
-
reason: "See id.sifa.graph.connection."
|
|
443
|
-
},
|
|
444
|
-
{
|
|
445
|
-
lexicon: "id.sifa.meeting",
|
|
446
|
-
reason: "Attestation semantics; same reification problem as confirmation."
|
|
447
|
-
}
|
|
448
|
-
]
|
|
1
|
+
// src/jsonld/index.ts
|
|
2
|
+
import {
|
|
3
|
+
TERM_MAPPINGS,
|
|
4
|
+
VOCABULARIES,
|
|
5
|
+
expandCurie,
|
|
6
|
+
isDeliberatelyUnmapped,
|
|
7
|
+
mappingsForLexicon
|
|
8
|
+
} from "./terms.js";
|
|
9
|
+
import { buildBreadcrumbListJsonLd, buildPersonJsonLd, buildProfilePageJsonLd } from "./profile.js";
|
|
10
|
+
import {
|
|
11
|
+
buildCourseJsonLd,
|
|
12
|
+
buildPresentationJsonLd,
|
|
13
|
+
buildProjectJsonLd,
|
|
14
|
+
buildPublicationJsonLd
|
|
15
|
+
} from "./works.js";
|
|
16
|
+
import { buildProfileWorksJsonLd } from "./works-graph.js";
|
|
17
|
+
export {
|
|
18
|
+
TERM_MAPPINGS,
|
|
19
|
+
VOCABULARIES,
|
|
20
|
+
buildBreadcrumbListJsonLd,
|
|
21
|
+
buildCourseJsonLd,
|
|
22
|
+
buildPersonJsonLd,
|
|
23
|
+
buildPresentationJsonLd,
|
|
24
|
+
buildProfilePageJsonLd,
|
|
25
|
+
buildProfileWorksJsonLd,
|
|
26
|
+
buildProjectJsonLd,
|
|
27
|
+
buildPublicationJsonLd,
|
|
28
|
+
expandCurie,
|
|
29
|
+
isDeliberatelyUnmapped,
|
|
30
|
+
mappingsForLexicon
|
|
449
31
|
};
|
|
450
|
-
|
|
451
|
-
// src/jsonld/terms.ts
|
|
452
|
-
var VOCABULARIES = term_mappings_default.vocabularies;
|
|
453
|
-
var TERM_MAPPINGS = [
|
|
454
|
-
...term_mappings_default.mappings.map((m) => ({
|
|
455
|
-
lexicon: m.lexicon,
|
|
456
|
-
...m.field ? { field: m.field } : {},
|
|
457
|
-
terms: m.terms,
|
|
458
|
-
match: m.match,
|
|
459
|
-
...m.note ? { note: m.note } : {}
|
|
460
|
-
})),
|
|
461
|
-
...term_mappings_default.unmapped.map((u) => ({
|
|
462
|
-
lexicon: u.lexicon,
|
|
463
|
-
...u.field ? { field: u.field } : {},
|
|
464
|
-
terms: [],
|
|
465
|
-
match: "noMatch",
|
|
466
|
-
note: u.reason
|
|
467
|
-
}))
|
|
468
|
-
];
|
|
469
|
-
function expandCurie(curie) {
|
|
470
|
-
const separator = curie.indexOf(":");
|
|
471
|
-
if (separator <= 0) return null;
|
|
472
|
-
const prefix = curie.slice(0, separator);
|
|
473
|
-
const local = curie.slice(separator + 1);
|
|
474
|
-
if (!local) return null;
|
|
475
|
-
if (!Object.prototype.hasOwnProperty.call(VOCABULARIES, prefix)) return null;
|
|
476
|
-
return `${VOCABULARIES[prefix]}${local}`;
|
|
477
|
-
}
|
|
478
|
-
function mappingsForLexicon(nsid) {
|
|
479
|
-
return TERM_MAPPINGS.filter((m) => m.lexicon === nsid);
|
|
480
|
-
}
|
|
481
|
-
function isDeliberatelyUnmapped(nsid, field) {
|
|
482
|
-
return TERM_MAPPINGS.some(
|
|
483
|
-
(m) => m.lexicon === nsid && m.field === field && m.match === "noMatch"
|
|
484
|
-
);
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
// src/format/location-utils.ts
|
|
488
|
-
function formatLocation(loc) {
|
|
489
|
-
if (!loc) return "";
|
|
490
|
-
const locality = loc.locality ?? loc.city;
|
|
491
|
-
const parts = [locality, loc.region, loc.country].filter(Boolean);
|
|
492
|
-
if (loc.postalCode && !locality) {
|
|
493
|
-
return `${loc.postalCode}, ${loc.country}`;
|
|
494
|
-
}
|
|
495
|
-
return parts.join(", ");
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
// src/logic/date-lookahead.ts
|
|
499
|
-
function isBeyondLookahead(value, months, now = /* @__PURE__ */ new Date()) {
|
|
500
|
-
const match = /^(\d{4})(?:-(\d{2}))?/.exec(value);
|
|
501
|
-
if (!match) return false;
|
|
502
|
-
const index = Number(match[1]) * 12 + (match[2] ? Number(match[2]) : 1);
|
|
503
|
-
const limit = now.getFullYear() * 12 + now.getMonth() + 1 + months;
|
|
504
|
-
return index > limit;
|
|
505
|
-
}
|
|
506
|
-
function isUpcomingStart(startedAt, now = /* @__PURE__ */ new Date()) {
|
|
507
|
-
return !!startedAt && isBeyondLookahead(startedAt, 0, now);
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
// src/logic/primary-position.ts
|
|
511
|
-
function pickPrimaryPosition(positions, now = /* @__PURE__ */ new Date()) {
|
|
512
|
-
if (!positions || positions.length === 0) return void 0;
|
|
513
|
-
const active = positions.filter(
|
|
514
|
-
(p) => !p.endedAt && !p.hidden && !isUpcomingStart(p.startedAt, now)
|
|
515
|
-
);
|
|
516
|
-
if (active.length === 0) return void 0;
|
|
517
|
-
const flagged = active.find((p) => p.primary === true);
|
|
518
|
-
if (flagged) return flagged;
|
|
519
|
-
return [...active].sort((a, b) => (b.startedAt ?? "").localeCompare(a.startedAt ?? ""))[0];
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
// src/profile/section-model.ts
|
|
523
|
-
function filterHidden(items) {
|
|
524
|
-
return (items ?? []).filter((i) => !i.hidden);
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
// src/taxonomy/eqf-level.ts
|
|
528
|
-
var EQF_LEVEL_OPTIONS = [
|
|
529
|
-
{ value: 1, label: "Primary education" },
|
|
530
|
-
{ value: 2, label: "Lower secondary" },
|
|
531
|
-
{ value: 3, label: "Vocational or partial upper secondary" },
|
|
532
|
-
{ value: 4, label: "Upper secondary" },
|
|
533
|
-
{ value: 5, label: "Associate or short-cycle degree" },
|
|
534
|
-
{ value: 6, label: "Bachelor" },
|
|
535
|
-
{ value: 7, label: "Master" },
|
|
536
|
-
{ value: 8, label: "Doctorate" }
|
|
537
|
-
];
|
|
538
|
-
var EQF_LEVEL_LABELS = Object.fromEntries(
|
|
539
|
-
EQF_LEVEL_OPTIONS.map((o) => [o.value, o.label])
|
|
540
|
-
);
|
|
541
|
-
function readEqfLevel(value) {
|
|
542
|
-
return Number.isInteger(value) && value >= 1 && value <= 8 ? value : void 0;
|
|
543
|
-
}
|
|
544
|
-
function getEqfLevelLabel(level) {
|
|
545
|
-
const valid = readEqfLevel(level);
|
|
546
|
-
return valid === void 0 ? void 0 : EQF_LEVEL_LABELS[valid];
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
// src/jsonld/url.ts
|
|
550
|
-
var DEFAULT_BASE_URL = "https://sifa.id";
|
|
551
|
-
function normaliseBaseUrl(baseUrl) {
|
|
552
|
-
const value = baseUrl ?? DEFAULT_BASE_URL;
|
|
553
|
-
let end = value.length;
|
|
554
|
-
while (end > 0 && value.charCodeAt(end - 1) === 47) end -= 1;
|
|
555
|
-
return value.slice(0, end);
|
|
556
|
-
}
|
|
557
|
-
function profileUrl(baseUrl, handle) {
|
|
558
|
-
return `${baseUrl}/p/${handle}`;
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
// src/jsonld/profile.ts
|
|
562
|
-
var MAX_KNOWS_ABOUT = 20;
|
|
563
|
-
var MEANINGFUL_TEXT_RE = /[\p{L}\p{N}]/u;
|
|
564
|
-
var EQF_TERM_SET = "https://europass.europa.eu/en/europass-digital-tools/european-qualifications-framework";
|
|
565
|
-
function educationalLevel(eqfLevel) {
|
|
566
|
-
const level = readEqfLevel(eqfLevel);
|
|
567
|
-
if (level === void 0) return void 0;
|
|
568
|
-
return {
|
|
569
|
-
"@type": "DefinedTerm",
|
|
570
|
-
name: getEqfLevelLabel(level),
|
|
571
|
-
termCode: String(level),
|
|
572
|
-
inDefinedTermSet: EQF_TERM_SET
|
|
573
|
-
};
|
|
574
|
-
}
|
|
575
|
-
var identity = (input) => input;
|
|
576
|
-
function hasMeaningfulText(value) {
|
|
577
|
-
return typeof value === "string" && MEANINGFUL_TEXT_RE.test(value);
|
|
578
|
-
}
|
|
579
|
-
function visible(items) {
|
|
580
|
-
return filterHidden(items ? [...items] : void 0);
|
|
581
|
-
}
|
|
582
|
-
function rankKnowsAbout(skills, s) {
|
|
583
|
-
const ranked = visible(skills).filter((sk) => Boolean(sk.name)).sort((a, b) => (b.endorsementCount ?? 0) - (a.endorsementCount ?? 0)).slice(0, MAX_KNOWS_ABOUT).map((sk) => s(sk.name));
|
|
584
|
-
return ranked.length > 0 ? ranked : void 0;
|
|
585
|
-
}
|
|
586
|
-
function buildSameAs(profile) {
|
|
587
|
-
const sameAs = [];
|
|
588
|
-
const hasBluesky = profile.activeApps?.some((a) => a.id === "bluesky") ?? false;
|
|
589
|
-
if (hasBluesky) sameAs.push(`https://bsky.app/profile/${profile.handle}`);
|
|
590
|
-
if (profile.website) {
|
|
591
|
-
const url = profile.website.startsWith("http") ? profile.website : `https://${profile.website}`;
|
|
592
|
-
if (!sameAs.includes(url)) sameAs.push(url);
|
|
593
|
-
}
|
|
594
|
-
for (const account of profile.verifiedAccounts ?? []) {
|
|
595
|
-
if (account.url && !sameAs.includes(account.url)) sameAs.push(account.url);
|
|
596
|
-
}
|
|
597
|
-
return sameAs;
|
|
598
|
-
}
|
|
599
|
-
function buildHomeLocation(location, s) {
|
|
600
|
-
const addressLocality = location.locality ?? location.city;
|
|
601
|
-
const addressCountry = location.countryCode;
|
|
602
|
-
const hasAddress = Boolean(addressLocality) || Boolean(addressCountry);
|
|
603
|
-
return {
|
|
604
|
-
"@type": "Place",
|
|
605
|
-
name: s(formatLocation(location)),
|
|
606
|
-
...hasAddress && {
|
|
607
|
-
address: {
|
|
608
|
-
"@type": "PostalAddress",
|
|
609
|
-
...addressLocality && { addressLocality: s(addressLocality) },
|
|
610
|
-
...addressCountry && { addressCountry }
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
};
|
|
614
|
-
}
|
|
615
|
-
function buildPersonJsonLd(profile, options = {}) {
|
|
616
|
-
const s = options.sanitize ?? identity;
|
|
617
|
-
const baseUrl = normaliseBaseUrl(options.baseUrl);
|
|
618
|
-
const canonical = options.canonicalUrl ?? `${baseUrl}/p/${profile.handle}`;
|
|
619
|
-
const positions = visible(profile.positions);
|
|
620
|
-
const currentPosition = pickPrimaryPosition(positions);
|
|
621
|
-
const knowsAbout = rankKnowsAbout(profile.skills, s);
|
|
622
|
-
const sameAs = buildSameAs(profile);
|
|
623
|
-
const hasCredential = [
|
|
624
|
-
...visible(profile.education).map((e) => ({ e, level: educationalLevel(e.eqfLevel) })).filter(({ e, level }) => e.degree || level).map(({ e, level }) => ({
|
|
625
|
-
"@type": "EducationalOccupationalCredential",
|
|
626
|
-
credentialCategory: "degree",
|
|
627
|
-
name: e.degree ? [e.degree, e.fieldOfStudy].filter(Boolean).join(" ") : level.name,
|
|
628
|
-
...level && { educationalLevel: level },
|
|
629
|
-
...e.institution && {
|
|
630
|
-
recognizedBy: { "@type": "EducationalOrganization", name: s(e.institution) }
|
|
631
|
-
}
|
|
632
|
-
})),
|
|
633
|
-
...visible(profile.certifications).filter((c) => c.name).map((c) => ({
|
|
634
|
-
"@type": "EducationalOccupationalCredential",
|
|
635
|
-
name: s(c.name),
|
|
636
|
-
...(c.authority ?? c.issuingOrg) && {
|
|
637
|
-
recognizedBy: {
|
|
638
|
-
"@type": "Organization",
|
|
639
|
-
name: s(c.authority ?? c.issuingOrg)
|
|
640
|
-
}
|
|
641
|
-
},
|
|
642
|
-
...c.credentialUrl && { url: c.credentialUrl }
|
|
643
|
-
}))
|
|
644
|
-
];
|
|
645
|
-
const givenTrimmed = profile.givenName?.trim();
|
|
646
|
-
const familyTrimmed = profile.familyName?.trim();
|
|
647
|
-
const structuredName = givenTrimmed && familyTrimmed ? `${givenTrimmed} ${familyTrimmed}` : void 0;
|
|
648
|
-
const ownCompany = profile.org?.personalProfileVisible && profile.org.orgProfile ? {
|
|
649
|
-
"@type": "Organization",
|
|
650
|
-
"@id": `${baseUrl}/c/${profile.handle}`,
|
|
651
|
-
name: s(profile.org.orgProfile.name ?? profile.handle)
|
|
652
|
-
} : null;
|
|
653
|
-
const worksFor = [
|
|
654
|
-
...ownCompany ? [ownCompany] : [],
|
|
655
|
-
...positions.filter((p) => p.entityName ?? p.company).map((p) => ({
|
|
656
|
-
"@type": "Organization",
|
|
657
|
-
name: s(p.entityName ?? p.company),
|
|
658
|
-
...p.title && {
|
|
659
|
-
member: {
|
|
660
|
-
"@type": "OrganizationRole",
|
|
661
|
-
roleName: s(p.title),
|
|
662
|
-
...p.startedAt && { startDate: p.startedAt },
|
|
663
|
-
...p.endedAt && { endDate: p.endedAt }
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
}))
|
|
667
|
-
];
|
|
668
|
-
const awards = visible(profile.honors).filter((h) => h.title).map((h) => s(h.title));
|
|
669
|
-
const languages = visible(profile.languages).filter((l) => l.language).map((l) => l.language);
|
|
670
|
-
return {
|
|
671
|
-
"@context": "https://schema.org",
|
|
672
|
-
"@type": "Person",
|
|
673
|
-
// Stable identifier so a /c/ Organization's `founder` can point back here.
|
|
674
|
-
"@id": canonical,
|
|
675
|
-
name: s(structuredName ?? profile.displayName ?? profile.handle),
|
|
676
|
-
...givenTrimmed && { givenName: s(givenTrimmed) },
|
|
677
|
-
...familyTrimmed && { familyName: s(familyTrimmed) },
|
|
678
|
-
jobTitle: hasMeaningfulText(profile.headline) ? s(profile.headline) : currentPosition?.title ? s(currentPosition.title) : void 0,
|
|
679
|
-
description: hasMeaningfulText(profile.about) ? s(profile.about) : void 0,
|
|
680
|
-
alternateName: `@${profile.handle}`,
|
|
681
|
-
url: canonical,
|
|
682
|
-
image: profile.avatar ?? void 0,
|
|
683
|
-
...profile.location && { homeLocation: buildHomeLocation(profile.location, s) },
|
|
684
|
-
...worksFor.length > 0 && { worksFor },
|
|
685
|
-
...visible(profile.education).length > 0 && {
|
|
686
|
-
alumniOf: visible(profile.education).filter((e) => e.institution).map((e) => ({ "@type": "EducationalOrganization", name: s(e.institution) }))
|
|
687
|
-
},
|
|
688
|
-
...hasCredential.length > 0 && { hasCredential },
|
|
689
|
-
...visible(profile.volunteering).length > 0 && {
|
|
690
|
-
memberOf: visible(profile.volunteering).filter((v) => v.organization).map((v) => ({
|
|
691
|
-
"@type": "OrganizationRole",
|
|
692
|
-
memberOf: { "@type": "Organization", name: s(v.organization) },
|
|
693
|
-
...v.role && { roleName: s(v.role) },
|
|
694
|
-
...v.startDate && { startDate: v.startDate },
|
|
695
|
-
...v.endDate && { endDate: v.endDate }
|
|
696
|
-
}))
|
|
697
|
-
},
|
|
698
|
-
...awards.length > 0 && { award: awards },
|
|
699
|
-
...languages.length > 0 && { knowsLanguage: languages },
|
|
700
|
-
...knowsAbout && { knowsAbout },
|
|
701
|
-
...sameAs.length > 0 && { sameAs }
|
|
702
|
-
};
|
|
703
|
-
}
|
|
704
|
-
var PROFILE_SECTION_HAS_PART = [
|
|
705
|
-
{ id: "about", label: "About", populated: (p) => Boolean(p.about && p.headline) },
|
|
706
|
-
{ id: "career", label: "Career", populated: (p) => visible(p.positions).length > 0 },
|
|
707
|
-
{ id: "education", label: "Education", populated: (p) => visible(p.education).length > 0 },
|
|
708
|
-
{ id: "projects", label: "Projects", populated: (p) => (p.projects?.length ?? 0) > 0 },
|
|
709
|
-
{
|
|
710
|
-
id: "credentials",
|
|
711
|
-
label: "Credentials",
|
|
712
|
-
populated: (p) => visible(p.certifications).length > 0
|
|
713
|
-
},
|
|
714
|
-
{
|
|
715
|
-
id: "publications",
|
|
716
|
-
label: "Publications",
|
|
717
|
-
populated: (p) => (p.publications?.length ?? 0) > 0
|
|
718
|
-
},
|
|
719
|
-
{
|
|
720
|
-
id: "volunteering",
|
|
721
|
-
label: "Volunteering",
|
|
722
|
-
populated: (p) => visible(p.volunteering).length > 0
|
|
723
|
-
},
|
|
724
|
-
{ id: "awards", label: "Awards", populated: (p) => visible(p.honors).length > 0 },
|
|
725
|
-
{ id: "languages", label: "Languages", populated: (p) => visible(p.languages).length > 0 },
|
|
726
|
-
{ id: "skills", label: "Skills", populated: (p) => visible(p.skills).length > 0 },
|
|
727
|
-
{
|
|
728
|
-
id: "other-profiles",
|
|
729
|
-
label: "Other profiles",
|
|
730
|
-
populated: (p) => (p.externalAccounts?.length ?? 0) > 0
|
|
731
|
-
}
|
|
732
|
-
];
|
|
733
|
-
function buildProfilePageJsonLd(profile, options = {}) {
|
|
734
|
-
const person = buildPersonJsonLd(profile, options);
|
|
735
|
-
const { "@context": _context, ...personWithoutContext } = person;
|
|
736
|
-
const url = options.canonicalUrl ?? `${normaliseBaseUrl(options.baseUrl)}/p/${profile.handle}`;
|
|
737
|
-
const hasPart = PROFILE_SECTION_HAS_PART.filter((section) => section.populated(profile)).map(
|
|
738
|
-
(section) => ({
|
|
739
|
-
"@type": "WebPageElement",
|
|
740
|
-
name: section.label,
|
|
741
|
-
url: `${url}#${section.id}`
|
|
742
|
-
})
|
|
743
|
-
);
|
|
744
|
-
return {
|
|
745
|
-
"@context": "https://schema.org",
|
|
746
|
-
"@type": "ProfilePage",
|
|
747
|
-
url,
|
|
748
|
-
...profile.updatedAt && { dateModified: profile.updatedAt },
|
|
749
|
-
mainEntity: personWithoutContext,
|
|
750
|
-
...hasPart.length > 0 && { hasPart }
|
|
751
|
-
};
|
|
752
|
-
}
|
|
753
|
-
function buildBreadcrumbListJsonLd(profile, options = {}) {
|
|
754
|
-
const s = options.sanitize ?? identity;
|
|
755
|
-
const baseUrl = normaliseBaseUrl(options.baseUrl);
|
|
756
|
-
const name = s(profile.displayName ?? profile.handle);
|
|
757
|
-
return {
|
|
758
|
-
"@context": "https://schema.org",
|
|
759
|
-
"@type": "BreadcrumbList",
|
|
760
|
-
itemListElement: [
|
|
761
|
-
{ "@type": "ListItem", position: 1, name: "Sifa", item: `${baseUrl}/` },
|
|
762
|
-
{
|
|
763
|
-
"@type": "ListItem",
|
|
764
|
-
position: 2,
|
|
765
|
-
name,
|
|
766
|
-
item: `${baseUrl}/p/${profile.handle}`
|
|
767
|
-
}
|
|
768
|
-
]
|
|
769
|
-
};
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
// src/format/doi.ts
|
|
773
|
-
function normalizeDoi(value) {
|
|
774
|
-
return value.trim().replace(/^https?:\/\/(dx\.)?doi\.org\//i, "").replace(/^doi:\s*/i, "");
|
|
775
|
-
}
|
|
776
|
-
|
|
777
|
-
// src/format/talk-slug.ts
|
|
778
|
-
var MAX_SLUG_LENGTH = 60;
|
|
779
|
-
var COMBINING_MARKS = /[̀-ͯ]/g;
|
|
780
|
-
function slugifyTitle(title) {
|
|
781
|
-
const slug = title.normalize("NFKD").replace(COMBINING_MARKS, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
|
|
782
|
-
return slug.slice(0, MAX_SLUG_LENGTH).replace(/-+$/g, "");
|
|
783
|
-
}
|
|
784
|
-
function buildTalkSlug(title, rkey) {
|
|
785
|
-
const slug = slugifyTitle(title);
|
|
786
|
-
return slug ? `${slug}-${rkey}` : rkey;
|
|
787
|
-
}
|
|
788
|
-
|
|
789
|
-
// src/jsonld/works.ts
|
|
790
|
-
var DOI_RESOLVER = "https://doi.org/";
|
|
791
|
-
var ORCID_RESOLVER = "https://orcid.org/";
|
|
792
|
-
var identity2 = (input) => input;
|
|
793
|
-
function authorNode(author, baseUrl, s) {
|
|
794
|
-
return {
|
|
795
|
-
"@type": "Person",
|
|
796
|
-
name: s(author.displayName ?? author.handle),
|
|
797
|
-
url: profileUrl(baseUrl, author.handle)
|
|
798
|
-
};
|
|
799
|
-
}
|
|
800
|
-
function confirmedActorNodes(actors, baseUrl, s) {
|
|
801
|
-
return (actors ?? []).filter((a) => a.confirmed === true && Boolean(a.handle)).map((a) => ({
|
|
802
|
-
"@type": "Person",
|
|
803
|
-
name: s(a.displayName ?? a.handle),
|
|
804
|
-
url: profileUrl(baseUrl, a.handle)
|
|
805
|
-
}));
|
|
806
|
-
}
|
|
807
|
-
function visible2(items) {
|
|
808
|
-
return filterHidden(items ? [...items] : void 0);
|
|
809
|
-
}
|
|
810
|
-
var ATTENDANCE_MODE = {
|
|
811
|
-
"community.lexicon.calendar.event#inperson": "https://schema.org/OfflineEventAttendanceMode",
|
|
812
|
-
"community.lexicon.calendar.event#virtual": "https://schema.org/OnlineEventAttendanceMode",
|
|
813
|
-
"community.lexicon.calendar.event#hybrid": "https://schema.org/MixedEventAttendanceMode"
|
|
814
|
-
};
|
|
815
|
-
var EVENT_STATUS = {
|
|
816
|
-
"community.lexicon.calendar.event#scheduled": "https://schema.org/EventScheduled",
|
|
817
|
-
"community.lexicon.calendar.event#cancelled": "https://schema.org/EventCancelled",
|
|
818
|
-
"community.lexicon.calendar.event#postponed": "https://schema.org/EventPostponed",
|
|
819
|
-
"community.lexicon.calendar.event#rescheduled": "https://schema.org/EventRescheduled"
|
|
820
|
-
};
|
|
821
|
-
var LINK_SLIDES = "id.sifa.defs#linkSlides";
|
|
822
|
-
var LINK_RECORDING = "id.sifa.defs#linkRecording";
|
|
823
|
-
function lookup(table, key) {
|
|
824
|
-
if (!key) return void 0;
|
|
825
|
-
return Object.prototype.hasOwnProperty.call(table, key) ? table[key] : void 0;
|
|
826
|
-
}
|
|
827
|
-
var REGION_NAMES = new Intl.DisplayNames("en", { type: "region", fallback: "code" });
|
|
828
|
-
function countryName(code) {
|
|
829
|
-
if (code.length !== 2) return code;
|
|
830
|
-
try {
|
|
831
|
-
const name = REGION_NAMES.of(code.toUpperCase());
|
|
832
|
-
if (!name || name === "Unknown Region") return code;
|
|
833
|
-
return name;
|
|
834
|
-
} catch {
|
|
835
|
-
return code;
|
|
836
|
-
}
|
|
837
|
-
}
|
|
838
|
-
function deliveryPlace(delivery, s) {
|
|
839
|
-
const addressLocality = delivery.locationLocality ?? void 0;
|
|
840
|
-
const addressRegion = delivery.locationRegion ?? void 0;
|
|
841
|
-
const addressCountry = delivery.countryCode ?? void 0;
|
|
842
|
-
if (addressLocality || addressRegion || addressCountry) {
|
|
843
|
-
const name = [addressLocality, addressRegion, addressCountry && countryName(addressCountry)].filter(Boolean).join(", ");
|
|
844
|
-
return {
|
|
845
|
-
"@type": "Place",
|
|
846
|
-
...name && { name: s(name) },
|
|
847
|
-
address: {
|
|
848
|
-
"@type": "PostalAddress",
|
|
849
|
-
...addressLocality && { addressLocality: s(addressLocality) },
|
|
850
|
-
...addressRegion && { addressRegion: s(addressRegion) },
|
|
851
|
-
...addressCountry && { addressCountry }
|
|
852
|
-
}
|
|
853
|
-
};
|
|
854
|
-
}
|
|
855
|
-
if (delivery.location) {
|
|
856
|
-
return { "@type": "Place", name: s(delivery.location) };
|
|
857
|
-
}
|
|
858
|
-
return void 0;
|
|
859
|
-
}
|
|
860
|
-
function linkOfType(links, type) {
|
|
861
|
-
return links?.find((l) => l.type === type)?.uri;
|
|
862
|
-
}
|
|
863
|
-
function buildPresentationJsonLd(presentation, author, options = {}) {
|
|
864
|
-
const s = options.sanitize ?? identity2;
|
|
865
|
-
const baseUrl = normaliseBaseUrl(options.baseUrl);
|
|
866
|
-
const speaker = authorNode(author, baseUrl, s);
|
|
867
|
-
const events = visible2(presentation.deliveries).map((delivery) => {
|
|
868
|
-
const place = deliveryPlace(delivery, s);
|
|
869
|
-
const recording = linkOfType(delivery.links, LINK_RECORDING);
|
|
870
|
-
const slides = linkOfType(delivery.links, LINK_SLIDES) ?? linkOfType(presentation.links, LINK_SLIDES);
|
|
871
|
-
return {
|
|
872
|
-
"@type": "Event",
|
|
873
|
-
name: s(delivery.eventName ?? delivery.title ?? presentation.title),
|
|
874
|
-
...delivery.date && { startDate: delivery.date },
|
|
875
|
-
...place && { location: place },
|
|
876
|
-
...lookup(ATTENDANCE_MODE, delivery.mode) && {
|
|
877
|
-
eventAttendanceMode: lookup(ATTENDANCE_MODE, delivery.mode)
|
|
878
|
-
},
|
|
879
|
-
...lookup(EVENT_STATUS, delivery.status) && {
|
|
880
|
-
eventStatus: lookup(EVENT_STATUS, delivery.status)
|
|
881
|
-
},
|
|
882
|
-
performer: [speaker, ...confirmedActorNodes(delivery.coSpeakers, baseUrl, s)],
|
|
883
|
-
...recording && { recordedIn: { "@type": "VideoObject", url: recording } },
|
|
884
|
-
...slides && {
|
|
885
|
-
workFeatured: { "@type": "PresentationDigitalDocument", url: slides }
|
|
886
|
-
}
|
|
887
|
-
};
|
|
888
|
-
});
|
|
889
|
-
return {
|
|
890
|
-
"@context": "https://schema.org",
|
|
891
|
-
"@type": "PresentationDigitalDocument",
|
|
892
|
-
name: s(presentation.title),
|
|
893
|
-
...presentation.description && { abstract: s(presentation.description) },
|
|
894
|
-
...presentation.duration && { timeRequired: `PT${presentation.duration.minMinutes}M` },
|
|
895
|
-
...presentation.coverImageUrl && { image: presentation.coverImageUrl },
|
|
896
|
-
author: speaker,
|
|
897
|
-
url: `${baseUrl}/p/${author.handle}/talk/${buildTalkSlug(presentation.title, presentation.rkey)}`,
|
|
898
|
-
...events.length > 0 && { subjectOf: events }
|
|
899
|
-
};
|
|
900
|
-
}
|
|
901
|
-
function buildPublicationJsonLd(publication, author, options = {}) {
|
|
902
|
-
const s = options.sanitize ?? identity2;
|
|
903
|
-
const baseUrl = normaliseBaseUrl(options.baseUrl);
|
|
904
|
-
const authors = publication.contributors && publication.contributors.length > 0 ? publication.contributors.map((c) => ({
|
|
905
|
-
"@type": "Person",
|
|
906
|
-
name: s(c.name),
|
|
907
|
-
...c.handle && { url: profileUrl(baseUrl, c.handle) },
|
|
908
|
-
...c.orcidId && { sameAs: [`${ORCID_RESOLVER}${c.orcidId}`] }
|
|
909
|
-
})) : [authorNode(author, baseUrl, s)];
|
|
910
|
-
const doi = publication.doi ? normalizeDoi(publication.doi) : void 0;
|
|
911
|
-
return {
|
|
912
|
-
"@context": "https://schema.org",
|
|
913
|
-
"@type": "ScholarlyArticle",
|
|
914
|
-
name: s(publication.title),
|
|
915
|
-
...publication.subtitle && { alternativeHeadline: s(publication.subtitle) },
|
|
916
|
-
...publication.description && { abstract: s(publication.description) },
|
|
917
|
-
...publication.publisher && {
|
|
918
|
-
publisher: { "@type": "Organization", name: s(publication.publisher) }
|
|
919
|
-
},
|
|
920
|
-
...publication.date && { datePublished: publication.date },
|
|
921
|
-
...publication.url && { url: publication.url },
|
|
922
|
-
author: authors,
|
|
923
|
-
...doi && {
|
|
924
|
-
identifier: { "@type": "PropertyValue", propertyID: "DOI", value: doi },
|
|
925
|
-
sameAs: [`${DOI_RESOLVER}${doi}`]
|
|
926
|
-
}
|
|
927
|
-
};
|
|
928
|
-
}
|
|
929
|
-
function buildCourseJsonLd(course, options = {}) {
|
|
930
|
-
const s = options.sanitize ?? identity2;
|
|
931
|
-
return {
|
|
932
|
-
"@context": "https://schema.org",
|
|
933
|
-
"@type": "Course",
|
|
934
|
-
name: s(course.name),
|
|
935
|
-
...course.number && { courseCode: s(course.number) },
|
|
936
|
-
...course.institution && {
|
|
937
|
-
provider: { "@type": "EducationalOrganization", name: s(course.institution) }
|
|
938
|
-
}
|
|
939
|
-
};
|
|
940
|
-
}
|
|
941
|
-
function buildProjectJsonLd(project, author, options = {}) {
|
|
942
|
-
const s = options.sanitize ?? identity2;
|
|
943
|
-
const baseUrl = normaliseBaseUrl(options.baseUrl);
|
|
944
|
-
const members = confirmedActorNodes(project.members, baseUrl, s);
|
|
945
|
-
return {
|
|
946
|
-
"@context": "https://schema.org",
|
|
947
|
-
"@type": "Project",
|
|
948
|
-
name: s(project.name),
|
|
949
|
-
...project.description && { description: s(project.description) },
|
|
950
|
-
...project.url && { url: project.url },
|
|
951
|
-
...project.startDate && { startDate: project.startDate },
|
|
952
|
-
...project.endDate && { endDate: project.endDate },
|
|
953
|
-
member: [authorNode(author, baseUrl, s), ...members]
|
|
954
|
-
};
|
|
955
|
-
}
|
|
956
|
-
|
|
957
|
-
// src/jsonld/works-graph.ts
|
|
958
|
-
function visible3(items) {
|
|
959
|
-
return filterHidden(items ? [...items] : void 0);
|
|
960
|
-
}
|
|
961
|
-
function buildProfileWorksJsonLd(profile, author, options = {}) {
|
|
962
|
-
const personId = options.canonicalUrl ?? `${normaliseBaseUrl(options.baseUrl)}/p/${profile.handle}`;
|
|
963
|
-
const strip = (node) => {
|
|
964
|
-
const { "@context": _context, ...rest } = node;
|
|
965
|
-
return rest;
|
|
966
|
-
};
|
|
967
|
-
const authorRef = [{ "@id": personId }];
|
|
968
|
-
const graph = [
|
|
969
|
-
...visible3(profile.publications).map((p) => ({
|
|
970
|
-
...strip(buildPublicationJsonLd(p, author, options)),
|
|
971
|
-
author: authorRef
|
|
972
|
-
})),
|
|
973
|
-
...visible3(profile.presentations).map((p) => ({
|
|
974
|
-
...strip(buildPresentationJsonLd(p, author, options)),
|
|
975
|
-
author: authorRef
|
|
976
|
-
})),
|
|
977
|
-
...visible3(profile.courses).map((c) => strip(buildCourseJsonLd(c, options))),
|
|
978
|
-
...visible3(profile.projects).map((p) => ({
|
|
979
|
-
...strip(buildProjectJsonLd(p, author, options)),
|
|
980
|
-
member: authorRef
|
|
981
|
-
}))
|
|
982
|
-
];
|
|
983
|
-
if (graph.length === 0) return null;
|
|
984
|
-
return { "@context": "https://schema.org", "@graph": graph };
|
|
985
|
-
}
|
|
986
|
-
|
|
987
|
-
export { TERM_MAPPINGS, VOCABULARIES, buildBreadcrumbListJsonLd, buildCourseJsonLd, buildPersonJsonLd, buildPresentationJsonLd, buildProfilePageJsonLd, buildProfileWorksJsonLd, buildProjectJsonLd, buildPublicationJsonLd, expandCurie, isDeliberatelyUnmapped, mappingsForLexicon };
|
|
988
|
-
//# sourceMappingURL=index.js.map
|
|
989
32
|
//# sourceMappingURL=index.js.map
|