{"id":16178136,"url":"https://github.com/charlypoly/algolia-graphql-schema","last_synced_at":"2025-08-17T15:31:38.589Z","repository":{"id":42872007,"uuid":"391092381","full_name":"charlypoly/algolia-graphql-schema","owner":"charlypoly","description":"Generate a GraphQL Schema from an Algolia index","archived":false,"fork":false,"pushed_at":"2024-12-08T22:35:25.000Z","size":22,"stargazers_count":8,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-08T23:25:45.967Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/charlypoly.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-30T14:27:21.000Z","updated_at":"2023-11-21T09:37:24.000Z","dependencies_parsed_at":"2023-12-18T02:29:26.715Z","dependency_job_id":"79bb42a3-4d9a-4640-babe-1393130fb5ad","html_url":"https://github.com/charlypoly/algolia-graphql-schema","commit_stats":{"total_commits":19,"total_committers":2,"mean_commits":9.5,"dds":0.1578947368421053,"last_synced_commit":"711eef7c2a7d1727a6133af798b7daee54ae784a"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlypoly%2Falgolia-graphql-schema","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlypoly%2Falgolia-graphql-schema/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlypoly%2Falgolia-graphql-schema/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlypoly%2Falgolia-graphql-schema/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/charlypoly","download_url":"https://codeload.github.com/charlypoly/algolia-graphql-schema/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229754834,"owners_count":18119131,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T05:12:28.314Z","updated_at":"2024-12-17T15:21:58.521Z","avatar_url":"https://github.com/charlypoly.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Algolia GraphQL Schema\n\nGiven an Algolia index, generates valid GraphQL types for exposing a GraphQL backend search Query\n\n## Install\n\n```bash\nnpm install -D algolia-graphql-schema\n```\n\n## Configuration\n\n`algolia_graphql_config.json` example file:\n\n```js\n{\n  \"algoliaIndex\": \"products\",\n  \"algoliaAppId\": \"\",\n  \"algoliaAdminApiKey\": \"\",\n  \"outputDir\": \"typedefs/\", // default: \".\"\n  \"outputFileName\": \"algolia\", // default: uses `algoliaIndex` property\n  \"searchQueryName\": \"search_products\", // default: \"search\"\n  // provide type mapping for unsupported GraphQL types (ex: scalar unions, objects)\n  \"fallbackTypes\": {\n    \"collections[]\": \"string\"\n  },\n  // array like values are nullable by default\n  \"arraysNullable\": false\n}\n```\n\n## Example\n\nFor an Algolia index with the following objects:\n\n```js\n[\n  {\n    \"id\": \"e2866573-7591-4742-b2bc-891b78d679bd\",\n    \"title\": \"Handcrafted Concrete Pants\",\n    // empty arrays will resolves to null[] which is not supported by GQL\n    //  fortunately, we provide a fallback type for `collections[]`\n    \"collections\": [],\n    \"shipping\": \"Free shipping\",\n    \"salePrice\": 781\n  },\n  {\n    \"id\": \"a07d4dd8-7fc8-40b6-9879-cf6e0dd9efb7\",\n    \"title\": \"Refined Soft Chicken\",\n    \"collections\": [],\n    \"salePrice\": 657\n  }\n]\n```\n\nby adding the following script to the `package.json`:\n\n```json\n// ...\n\"scripts\": {\n  \"generate:graphql\": \"algolia-graphql-schema\"\n},\n// ...\n```\n\nAnd running the script:\n\n```bash\n$ npm link\n$ npm run generate:graphql\n\n\u003e algolia-graphql-demo-server@1.0.0 generate:graphql\n\u003e algolia-graphql-schema\n\nAnalyzing products index (that might take a few seconds...)\nproducts.graphql created!\n```\n\nthe following `products.graphql` is generated:\n\n```graphql\ntype AlgoliaResultObject {\n  id: String!\n  title: String!\n  collections: [String!]!\n  salePrice: Int!\n  shipping: String\n}\n\ntype SearchResultsEdge {\n  cursor: Int!\n  node: AlgoliaResultObject\n}\n\ntype SearchResults {\n  edges: [SearchResultsEdge!]!\n  totalCount: Int!\n}\n\ninput SearchInput {\n  query: String\n\n  similarQuery: String\n\n  # ...\n}\n\ntype Query {\n  # ...\n  search_products($input: SearchInput!, $after: String): [SearchResults!]!\n}\n```\n\n## Algolia search params support\n\n### Disclaimer\n\nGraphQL does not support union on scalar types.\n\nFor this reason, the following Algolia search params have the following breaking GraphQL type definition changes:\n\n- `facetFilters?: string | readonly string[] | ReadonlyArray\u003creadonly string[]\u003e;` ➡️ `facetFilters: [String]`\n- `optionalFilters?: string | readonly string[] | ReadonlyArray\u003creadonly string[] | string\u003e;` ➡️ `optionalFilters: [String]`\n- `numericFilters?: string | readonly string[] | ReadonlyArray\u003creadonly string[]\u003e;` ➡️ `numericFilters: [String]`\n- `tagFilters?: string | readonly string[] | ReadonlyArray\u003creadonly string[]\u003e;` ➡️ `tagFilters: [String]`\n- `aroundRadius?: number | 'all';` ➡️ `aroundRadius: Int`\n- `aroundPrecision?: number | ReadonlyArray\u003c{ from: number; value: number; }\u003e;` ➡️ `aroundPrecision: Int`\n- `ignorePlurals?: boolean | readonly string[];` ➡️ `ignorePlurals: Boolean`\n- `removeStopWords?: boolean | readonly string[];` ➡️ `removeStopWords: Boolean`\n- `distinct?: boolean | number;` ➡️ `distinct: Boolean`\n- `optionalWords?: string | readonly string[];` ➡️ `optionalWords: [String]`\n\n### `SearchInput` type\n\nThe generated search query `SearchInput` type is the following:\n\n```graphql\ninput SearchInput {\n  query: String\n\n  similarQuery: String\n\n  facetFilters: [String]\n\n  optionalFilters: [String]\n\n  numericFilters: [String]\n\n  tagFilters: [String]\n\n  sumOrFiltersScores: Boolean\n\n  filters: String\n\n  page: Int\n\n  hitsPerPage: Int\n\n  offset: Int\n\n  length: Int\n\n  attributesToHighlight: [String]\n\n  attributesToSnippet: [String]\n\n  attributesToRetrieve: [String]\n\n  highlightPreTag: String\n\n  highlightPostTag: String\n\n  snippetEllipsisText: String\n\n  restrictHighlightAndSnippetArrays: Boolean\n\n  facets: [String]\n\n  maxValuesPerFacet: Int\n\n  facetingAfterDistinct: Boolean\n\n  minWordSizefor1Typo: Int\n\n  minWordSizefor2Typos: Int\n\n  allowTyposOnNumericTokens: Boolean\n\n  disableTypoToleranceOnAttributes: [String]\n\n  queryType: String\n\n  removeWordsIfNoResults: String\n\n  advancedSyntax: Boolean\n\n  advancedSyntaxFeatures: [String]\n\n  optionalWords: [String]\n\n  disableExactOnAttributes: [String]\n\n  exactOnSingleWordQuery: String\n\n  alternativesAsExact: [String]\n\n  enableRules: Boolean\n\n  ruleContexts: [String]\n\n  distinct?: boolean | number;\n\n  analytics: Boolean\n\n  analyticsTags: [String]\n\n  synonyms: Boolean\n\n  replaceSynonymsInHighlight: Boolean\n\n  minProximity: Int\n\n  responseFields: [String]\n\n  maxFacetHits: Int\n\n  percentileComputation: Boolean\n\n  clickAnalytics: Boolean\n\n  personalizationImpact: Int\n\n  enablePersonalization: Boolean\n\n  restrictSearchableAttributes: [String]\n\n  sortFacetValuesBy: String\n\n  typoTolerance: String\n\n  aroundLatLng: String\n\n  aroundLatLngViaIP: Boolean\n\n  aroundRadius: Int\n\n  aroundPrecision: Int\n\n  minimumAroundRadius: Int\n\n  insideBoundingBox: [Int]\n\n  insidePolygon: [Int]\n\n  ignorePlurals: Boolean\n\n  removeStopWords: Boolean\n\n  naturalLanguages: [String]\n\n  getRankingInfo: Boolean\n\n  userToken: String\n\n  enableABTest: Boolean\n\n  decompoundQuery: Boolean\n\n  relevancyStrictness: Int\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharlypoly%2Falgolia-graphql-schema","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcharlypoly%2Falgolia-graphql-schema","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharlypoly%2Falgolia-graphql-schema/lists"}