@usereactify/search 5.60.0 → 5.60.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/package.json +1 -1
- package/dist/src/search-request-builder/base-builders.js +2 -2
- package/dist/src/search-request-builder/base-builders.js.map +1 -1
- package/dist/src/types/firestore.d.ts +0 -1
- package/dist/src/types/firestore.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [5.60.1](///compare/release-v5.60.0...release-v5.60.1) (2026-02-25)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **firestore:** remove countryCode from Market interface cc7d272
|
|
11
|
+
* **search-request-builder:** add .keyword suffix to collection handle term queries 1282054
|
|
12
|
+
|
|
5
13
|
## [5.60.0](///compare/release-v5.58.0...release-v5.60.0) (2026-02-12)
|
|
6
14
|
|
|
7
15
|
|
package/dist/package.json
CHANGED
|
@@ -76,7 +76,7 @@ function generateCollectionBaseQuery(options) {
|
|
|
76
76
|
nested: {
|
|
77
77
|
path: "collections",
|
|
78
78
|
query: {
|
|
79
|
-
term: { ["collections.handle"]: options.collectionHandle },
|
|
79
|
+
term: { ["collections.handle.keyword"]: options.collectionHandle },
|
|
80
80
|
},
|
|
81
81
|
},
|
|
82
82
|
},
|
|
@@ -164,7 +164,7 @@ function generateWeightedCollectionQuery(options) {
|
|
|
164
164
|
nested: {
|
|
165
165
|
path: "collections",
|
|
166
166
|
query: {
|
|
167
|
-
term: { ["collections.handle"]: options.collectionHandle },
|
|
167
|
+
term: { ["collections.handle.keyword"]: options.collectionHandle },
|
|
168
168
|
},
|
|
169
169
|
},
|
|
170
170
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-builders.js","sourceRoot":"","sources":["../../../src/search-request-builder/base-builders.ts"],"names":[],"mappings":"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","sourcesContent":["import { Boosting, SearchableField } from \"../types/firestore\";\nimport {\n BaseSearchRequestMode,\n FunctionScoreContainer,\n FunctionScoreQuery,\n GenerateSearchRequestOptions,\n QueryContainer,\n SearchRequest,\n TermSearchRequestOptions,\n CollectionSearchRequestOptions,\n isSearchOptions,\n isCollectionOptions,\n} from \"./types\";\nimport {\n generateBoostingRules,\n generateMarketsClause,\n generateMarketsFilter,\n generateMultiMatchQueries,\n prepareRelevanceFields,\n validateSearchInputs,\n} from \"./utils\";\n\n// Base Search Request Generation\nexport function generateBaseSearchRequest(options: GenerateSearchRequestOptions): SearchRequest {\n if (isCollectionOptions(options)) {\n // Collection search mode\n const markets = options.curation?.markets ?? [];\n return generateCollectionSearchRequest({\n collectionHandle: options.collectionHandle,\n markets: markets,\n });\n }\n\n if (isSearchOptions(options)) {\n // Term search mode\n const markets = options.curation?.markets ?? [];\n return generateTermSearchRequest({\n searchTerm: options.searchTerm,\n baseSearchRequestMode: options.baseSearchRequestMode,\n relevanceFields: options.relevanceFields,\n searchableFields: options.searchableFields,\n markets: markets,\n });\n }\n\n throw new Error(\"Invalid options: must be either search or collection options\");\n}\n\n// Term Search Request Generation\nfunction generateTermSearchRequest(options: TermSearchRequestOptions): SearchRequest {\n validateSearchInputs(options);\n\n if (options.baseSearchRequestMode === BaseSearchRequestMode.Weighted) {\n return generateWeightedTermSearchRequest(options);\n }\n\n return generateRelevanceTermSearchRequest(options);\n}\n\nfunction generateWeightedTermSearchRequest(options: TermSearchRequestOptions): SearchRequest {\n if (!options.searchableFields) {\n throw new Error(\"SearchableFields required for weighted search\");\n }\n\n const functionScoreQuery = generateWeightedSearchQuery({\n searchTerm: options.searchTerm,\n searchableFields: options.searchableFields,\n boostingRules: [],\n markets: options.markets,\n });\n\n return { query: { function_score: functionScoreQuery } };\n}\n\nfunction generateRelevanceTermSearchRequest(options: TermSearchRequestOptions): SearchRequest {\n const fieldMappings = prepareRelevanceFields(options.relevanceFields);\n const multiMatchQueries = generateMultiMatchQueries(options.searchTerm, fieldMappings);\n const query = buildRelevanceQueryStructure(multiMatchQueries, options.markets);\n return { query };\n}\n\nfunction buildRelevanceQueryStructure(multiMatchQueries: QueryContainer[], markets: string[]): QueryContainer {\n return {\n bool: {\n must: [{ bool: { should: multiMatchQueries, minimum_should_match: \"1\" } }],\n filter: generateMarketsFilter(markets),\n },\n };\n}\n\n// Collection Search Request Generation\nexport function generateCollectionSearchRequest(options: CollectionSearchRequestOptions): SearchRequest {\n const query = generateCollectionBaseQuery(options);\n return { query };\n}\n\nexport function generateCollectionBaseQuery(options: CollectionSearchRequestOptions): QueryContainer {\n const mustClauses: QueryContainer[] = [\n {\n nested: {\n path: \"collections\",\n query: {\n term: { [\"collections.handle\"]: options.collectionHandle },\n },\n },\n },\n ];\n\n const marketClause = generateMarketsFilter(options.markets);\n if (marketClause.length > 0) {\n mustClauses.push(...marketClause);\n }\n\n return { bool: { must: mustClauses } };\n}\n\n// Weighted Search Implementation - using corrected property names\nexport function generateWeightedSearchQuery(options: {\n searchTerm: string;\n searchableFields: SearchableField[];\n boostingRules: Boosting[];\n markets: string[];\n market?: string;\n}): FunctionScoreQuery {\n const searchTerms = options.searchTerm?.split(\" \") ?? [];\n\n const searchQueries: QueryContainer[] = [];\n for (const searchableField of options.searchableFields) {\n const baseField = searchableField.field;\n const maxEdits = searchableField.maxEdits;\n for (const searchTerm of searchTerms) {\n searchQueries.push({\n match: { [baseField]: { query: searchTerm, fuzziness: maxEdits, analyzer: \"regular_analyzer\" } },\n });\n if (searchableField.synonymEnabled) {\n searchQueries.push({\n match: { [baseField]: { query: searchTerm, fuzziness: maxEdits, analyzer: \"synonym_analyzer\" } },\n });\n }\n }\n }\n\n const searchScores: FunctionScoreContainer[] = [];\n for (const field of options.searchableFields) {\n const baseField = field.field;\n const maxPoints = field.points;\n const maxEdits = field.maxEdits;\n\n for (let edits = 0; edits <= maxEdits; edits++) {\n const weightMaxEdits = Math.max(maxPoints - maxEdits * (maxPoints / (100 / field.mistakePenaltyPercent)), 0);\n const weightSomeEdits = maxPoints / (100 / field.mistakePenaltyPercent);\n const weightBase = edits === maxEdits ? weightMaxEdits : weightSomeEdits;\n\n for (const searchTerm of searchTerms) {\n searchScores.push({\n filter: {\n match: { [baseField]: { query: searchTerm, fuzziness: edits, analyzer: \"regular_analyzer\" } },\n },\n weight: weightBase,\n });\n\n if (field.synonymEnabled && field.synonymPenaltyPercent > 0) {\n const weightSynonyms = weightBase * (1 - field.synonymPenaltyPercent / 100);\n\n searchScores.push({\n filter: {\n bool: {\n must_not: {\n match: { [baseField]: { query: searchTerm, fuzziness: edits, analyzer: \"regular_analyzer\" } },\n },\n must: {\n match: { [baseField]: { query: searchTerm, fuzziness: edits, analyzer: \"synonym_analyzer\" } },\n },\n },\n },\n weight: weightSynonyms,\n });\n }\n }\n }\n }\n\n const marketClause = generateMarketsClause(options.markets);\n const boolQuery: any = { should: [...searchQueries] };\n\n if (marketClause) {\n boolQuery.filter = [marketClause];\n }\n\n return {\n query: {\n bool: boolQuery,\n },\n functions: [\n ...searchScores,\n ...generateBoostingRules({ boostingRules: options.boostingRules, market: options.market }),\n ],\n score_mode: \"sum\",\n boost_mode: \"replace\",\n };\n}\n\nexport function generateWeightedCollectionQuery(options: {\n collectionHandle: string;\n boostingRules: Boosting[];\n markets: string[];\n market?: string;\n}): FunctionScoreQuery {\n const mustClauses: QueryContainer[] = [\n {\n nested: {\n path: \"collections\",\n query: {\n term: { [\"collections.handle\"]: options.collectionHandle },\n },\n },\n },\n ];\n\n const marketClause = generateMarketsClause(options.markets);\n if (marketClause) mustClauses.push(marketClause);\n\n return {\n query: {\n bool: { must: mustClauses },\n },\n functions: generateBoostingRules({ boostingRules: options.boostingRules, market: options.market }),\n score_mode: \"sum\",\n boost_mode: \"replace\",\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"base-builders.js","sourceRoot":"","sources":["../../../src/search-request-builder/base-builders.ts"],"names":[],"mappings":"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","sourcesContent":["import { Boosting, SearchableField } from \"../types/firestore\";\nimport {\n BaseSearchRequestMode,\n FunctionScoreContainer,\n FunctionScoreQuery,\n GenerateSearchRequestOptions,\n QueryContainer,\n SearchRequest,\n TermSearchRequestOptions,\n CollectionSearchRequestOptions,\n isSearchOptions,\n isCollectionOptions,\n} from \"./types\";\nimport {\n generateBoostingRules,\n generateMarketsClause,\n generateMarketsFilter,\n generateMultiMatchQueries,\n prepareRelevanceFields,\n validateSearchInputs,\n} from \"./utils\";\n\n// Base Search Request Generation\nexport function generateBaseSearchRequest(options: GenerateSearchRequestOptions): SearchRequest {\n if (isCollectionOptions(options)) {\n // Collection search mode\n const markets = options.curation?.markets ?? [];\n return generateCollectionSearchRequest({\n collectionHandle: options.collectionHandle,\n markets: markets,\n });\n }\n\n if (isSearchOptions(options)) {\n // Term search mode\n const markets = options.curation?.markets ?? [];\n return generateTermSearchRequest({\n searchTerm: options.searchTerm,\n baseSearchRequestMode: options.baseSearchRequestMode,\n relevanceFields: options.relevanceFields,\n searchableFields: options.searchableFields,\n markets: markets,\n });\n }\n\n throw new Error(\"Invalid options: must be either search or collection options\");\n}\n\n// Term Search Request Generation\nfunction generateTermSearchRequest(options: TermSearchRequestOptions): SearchRequest {\n validateSearchInputs(options);\n\n if (options.baseSearchRequestMode === BaseSearchRequestMode.Weighted) {\n return generateWeightedTermSearchRequest(options);\n }\n\n return generateRelevanceTermSearchRequest(options);\n}\n\nfunction generateWeightedTermSearchRequest(options: TermSearchRequestOptions): SearchRequest {\n if (!options.searchableFields) {\n throw new Error(\"SearchableFields required for weighted search\");\n }\n\n const functionScoreQuery = generateWeightedSearchQuery({\n searchTerm: options.searchTerm,\n searchableFields: options.searchableFields,\n boostingRules: [],\n markets: options.markets,\n });\n\n return { query: { function_score: functionScoreQuery } };\n}\n\nfunction generateRelevanceTermSearchRequest(options: TermSearchRequestOptions): SearchRequest {\n const fieldMappings = prepareRelevanceFields(options.relevanceFields);\n const multiMatchQueries = generateMultiMatchQueries(options.searchTerm, fieldMappings);\n const query = buildRelevanceQueryStructure(multiMatchQueries, options.markets);\n return { query };\n}\n\nfunction buildRelevanceQueryStructure(multiMatchQueries: QueryContainer[], markets: string[]): QueryContainer {\n return {\n bool: {\n must: [{ bool: { should: multiMatchQueries, minimum_should_match: \"1\" } }],\n filter: generateMarketsFilter(markets),\n },\n };\n}\n\n// Collection Search Request Generation\nexport function generateCollectionSearchRequest(options: CollectionSearchRequestOptions): SearchRequest {\n const query = generateCollectionBaseQuery(options);\n return { query };\n}\n\nexport function generateCollectionBaseQuery(options: CollectionSearchRequestOptions): QueryContainer {\n const mustClauses: QueryContainer[] = [\n {\n nested: {\n path: \"collections\",\n query: {\n term: { [\"collections.handle.keyword\"]: options.collectionHandle },\n },\n },\n },\n ];\n\n const marketClause = generateMarketsFilter(options.markets);\n if (marketClause.length > 0) {\n mustClauses.push(...marketClause);\n }\n\n return { bool: { must: mustClauses } };\n}\n\n// Weighted Search Implementation - using corrected property names\nexport function generateWeightedSearchQuery(options: {\n searchTerm: string;\n searchableFields: SearchableField[];\n boostingRules: Boosting[];\n markets: string[];\n market?: string;\n}): FunctionScoreQuery {\n const searchTerms = options.searchTerm?.split(\" \") ?? [];\n\n const searchQueries: QueryContainer[] = [];\n for (const searchableField of options.searchableFields) {\n const baseField = searchableField.field;\n const maxEdits = searchableField.maxEdits;\n for (const searchTerm of searchTerms) {\n searchQueries.push({\n match: { [baseField]: { query: searchTerm, fuzziness: maxEdits, analyzer: \"regular_analyzer\" } },\n });\n if (searchableField.synonymEnabled) {\n searchQueries.push({\n match: { [baseField]: { query: searchTerm, fuzziness: maxEdits, analyzer: \"synonym_analyzer\" } },\n });\n }\n }\n }\n\n const searchScores: FunctionScoreContainer[] = [];\n for (const field of options.searchableFields) {\n const baseField = field.field;\n const maxPoints = field.points;\n const maxEdits = field.maxEdits;\n\n for (let edits = 0; edits <= maxEdits; edits++) {\n const weightMaxEdits = Math.max(maxPoints - maxEdits * (maxPoints / (100 / field.mistakePenaltyPercent)), 0);\n const weightSomeEdits = maxPoints / (100 / field.mistakePenaltyPercent);\n const weightBase = edits === maxEdits ? weightMaxEdits : weightSomeEdits;\n\n for (const searchTerm of searchTerms) {\n searchScores.push({\n filter: {\n match: { [baseField]: { query: searchTerm, fuzziness: edits, analyzer: \"regular_analyzer\" } },\n },\n weight: weightBase,\n });\n\n if (field.synonymEnabled && field.synonymPenaltyPercent > 0) {\n const weightSynonyms = weightBase * (1 - field.synonymPenaltyPercent / 100);\n\n searchScores.push({\n filter: {\n bool: {\n must_not: {\n match: { [baseField]: { query: searchTerm, fuzziness: edits, analyzer: \"regular_analyzer\" } },\n },\n must: {\n match: { [baseField]: { query: searchTerm, fuzziness: edits, analyzer: \"synonym_analyzer\" } },\n },\n },\n },\n weight: weightSynonyms,\n });\n }\n }\n }\n }\n\n const marketClause = generateMarketsClause(options.markets);\n const boolQuery: any = { should: [...searchQueries] };\n\n if (marketClause) {\n boolQuery.filter = [marketClause];\n }\n\n return {\n query: {\n bool: boolQuery,\n },\n functions: [\n ...searchScores,\n ...generateBoostingRules({ boostingRules: options.boostingRules, market: options.market }),\n ],\n score_mode: \"sum\",\n boost_mode: \"replace\",\n };\n}\n\nexport function generateWeightedCollectionQuery(options: {\n collectionHandle: string;\n boostingRules: Boosting[];\n markets: string[];\n market?: string;\n}): FunctionScoreQuery {\n const mustClauses: QueryContainer[] = [\n {\n nested: {\n path: \"collections\",\n query: {\n term: { [\"collections.handle.keyword\"]: options.collectionHandle },\n },\n },\n },\n ];\n\n const marketClause = generateMarketsClause(options.markets);\n if (marketClause) mustClauses.push(marketClause);\n\n return {\n query: {\n bool: { must: mustClauses },\n },\n functions: generateBoostingRules({ boostingRules: options.boostingRules, market: options.market }),\n score_mode: \"sum\",\n boost_mode: \"replace\",\n };\n}\n"]}
|
|
@@ -181,7 +181,6 @@ export interface Market {
|
|
|
181
181
|
publicationId: string;
|
|
182
182
|
locationId: string;
|
|
183
183
|
currencyCode?: string;
|
|
184
|
-
countryCode?: string;
|
|
185
184
|
}
|
|
186
185
|
/** @deprecated This entity will be removed once the curation is fully refactored into merchandisable entities */
|
|
187
186
|
export interface BoostGrouping {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../../src/types/firestore.ts"],"names":[],"mappings":"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","sourcesContent":["import { ShopifyProduct, ShopifyProductImage } from \"./shopify\";\n\nexport interface ResourceDocument {\n id: string;\n keywords: Array<string>;\n version?: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport enum ResourceType {\n ActivityLog = \"activity_log\",\n Product = \"product\",\n Collection = \"collection\",\n Curation = \"curation\",\n CurationPin = \"curation_pin\",\n CurationHiding = \"curation_hiding\",\n Callout = \"callout\",\n SettingsAccount = \"account_settings\",\n SettingsAutomation = \"automation_settings\",\n SettingsProduct = \"product_settings\",\n FilterGroup = \"filter_group\",\n FilterFacet = \"filter_facet\",\n MergedValue = \"merged_value\",\n Redirect = \"redirect\",\n Relevancy = \"relevancy\",\n Sort = \"sort\",\n Antonym = \"antonym\",\n Synonym = \"synonym\",\n Task = \"task\",\n SearchableField = \"searchable_field\",\n}\n\nexport enum MerchandisingCalloutAutofillBehaviour {\n Always = \"always\",\n MoreResults = \"more_results\",\n}\n\nexport const MerchandisingCalloutAutofillBehaviourLabel: Record<MerchandisingCalloutAutofillBehaviour, string> = {\n [MerchandisingCalloutAutofillBehaviour.Always]: \"Autofill always\",\n [MerchandisingCalloutAutofillBehaviour.MoreResults]: \"Autofill when there are more results\",\n};\n\nexport enum SharedStoreResource {\n Curation = \"curation\",\n Callout = \"callout\",\n FilterGroup = \"filter_group\",\n FilterFacet = \"filter_facet\",\n MergedValue = \"merged_value\",\n Redirect = \"redirect\",\n Relevancy = \"relevancy\",\n Sort = \"sort\",\n Synonym = \"synonym\",\n SettingsAccount = \"account_settings\",\n SettingsAutomation = \"automation_settings\",\n SettingsProduct = \"product_settings\",\n}\n\nexport const SharedStoreResourceLabels: Record<SharedStoreResource, string> = {\n [SharedStoreResource.Curation]: \"Curation\",\n [SharedStoreResource.Callout]: \"Callout\",\n [SharedStoreResource.FilterGroup]: \"Filter group\",\n [SharedStoreResource.FilterFacet]: \"Filter facet\",\n [SharedStoreResource.MergedValue]: \"Merged value\",\n [SharedStoreResource.Redirect]: \"Redirect\",\n [SharedStoreResource.Relevancy]: \"Relevancy\",\n [SharedStoreResource.Sort]: \"Sort\",\n [SharedStoreResource.Synonym]: \"Synonym\",\n [SharedStoreResource.SettingsAccount]: \"Settings account\",\n [SharedStoreResource.SettingsAutomation]: \"Settings automation\",\n [SharedStoreResource.SettingsProduct]: \"Settings product\",\n};\n\nexport interface Relevance extends ResourceDocument {\n field: string;\n enabled: boolean;\n importance: number;\n searchType: \"always_search\" | \"search_page\" | \"instant_search\";\n hidden?: boolean;\n}\n\nexport const DefinedFieldType = {\n Array: \"array\",\n Text: \"text\",\n Float: \"float\",\n Long: \"long\",\n Boolean: \"boolean\",\n} as const;\nexport type DefinedFieldType = typeof DefinedFieldType[keyof typeof DefinedFieldType] | (string & {});\n\nexport interface DefinedField {\n label: string;\n name: string;\n type: DefinedFieldType;\n}\n\nexport interface Sort extends ResourceDocument {\n name: string;\n handle: string;\n field: string;\n position: number;\n enabled: boolean;\n direction: \"desc\" | \"asc\";\n visibility: \"all\" | \"search\" | \"collection\";\n hidden?: boolean;\n}\n\nexport interface FilterGroup extends ResourceDocument {\n name: string;\n handle: string;\n enabled: boolean;\n pageSize: number;\n collections: Array<string>;\n type: \"search\" | \"collection\";\n paginationType: \"pagination\" | \"load_more\" | \"next_prev\" | \"infinite_scroll\";\n inventoryVisibility: \"show_all\" | \"hide_products\" | \"hide_variants\" | \"hide_all\";\n}\n\nexport interface FilterFacet extends ResourceDocument {\n name: string;\n field: string;\n handle: string;\n position: number;\n enabled: boolean;\n keywords: Array<string>;\n customSortOrder?: string;\n displayType: \"multi\" | \"single\" | \"slider\";\n displayView: \"list\" | \"check\" | \"swatch\" | \"range\" | \"box\";\n displaySize: string;\n displaySliderStep: string;\n displaySliderPrefix: string;\n displaySliderSuffix: string;\n displayRangeOptions: Array<string>;\n settingsShowMore: boolean;\n settingsUppercase: boolean;\n settingsShowSearch: boolean;\n settingsShowFilter: boolean;\n settingsShowEmptyValues: boolean;\n settingsHideUnavailable: boolean;\n settingsCollapsedMobile: boolean;\n settingsCollapsedDesktop: boolean;\n settingsFilterLogic: \"and\" | \"or\";\n valuesShow: \"all\" | \"manual\";\n valuesManual: Array<string>;\n valuesExclude: Array<string>;\n}\n\nexport interface Redirect extends ResourceDocument {\n url: string;\n query: string;\n enabled: boolean;\n hidden?: boolean;\n}\n\nexport interface Curation extends ResourceDocument {\n title: string;\n status: CurationStatus;\n published: boolean;\n searchTerm?: string;\n longRunningTask?: boolean;\n collectionHandle?: string;\n collectionId?: string;\n type: CurationType;\n /** @deprecated */\n boosting?: {\n groupings?: BoostGrouping[];\n sortings?: BoostSorting[];\n };\n sort?: CurationSort;\n schedule?: CurationSchedule;\n scheduleEnabled?: boolean;\n scheduleTimezone?: string;\n hidden?: boolean;\n\n markets: Array<string>;\n\n boostings?: Boosting[];\n sortings?: Sorting[];\n}\n\nexport enum CurationType {\n Search = \"search\",\n Collection = \"collection\",\n}\n\nexport interface CurationSort {\n sortTag?: string;\n sortOption: string;\n sortDirection: \"asc\" | \"desc\";\n sortVariantOption?: \"option1\" | \"option2\" | \"option3\";\n}\n\nexport interface CurationSchedule {\n schedulePublish: string;\n schedulePublishEnabled: boolean;\n scheduleUnpublish: string;\n scheduleUnpublishEnabled: boolean;\n}\n\nexport enum CurationStatus {\n Draft = \"draft\",\n Publishing = \"publishing\",\n Published = \"published\",\n Error = \"error\",\n Unpublishing = \"unpublishing\",\n Resetting = \"resetting\",\n Pinning = \"pinning\",\n Sorting = \"sorting\",\n}\n\nexport interface CurationHiding {\n productId: number;\n}\n\nexport interface Market {\n id: string;\n label: string;\n enabled: boolean;\n publicationId: string;\n locationId: string;\n currencyCode?: string;\n countryCode?: string;\n}\n\n/** @deprecated This entity will be removed once the curation is fully refactored into merchandisable entities */\nexport interface BoostGrouping {\n key: string;\n value: string;\n field: string;\n position: number;\n operation: string;\n}\n\n/** @deprecated This entity will be removed once the curation is fully refactored into merchandisable entities */\nexport interface BoostSorting {\n key: string;\n field: string;\n query?: string;\n position: number;\n direction: \"asc\" | \"desc\";\n}\n\nexport interface Link {\n content: string;\n url: string;\n key: string;\n}\n\nexport interface Callout extends ResourceDocument {\n type: CalloutType;\n link: string;\n links: Array<Link>;\n // name: string;\n title: string;\n content: string;\n enabled: boolean;\n textColor: string;\n mobileImage: string;\n mobileVideo: string;\n desktopVideo: string;\n desktopImage: string;\n backgroundColor: string;\n visibility: \"desktop\" | \"mobile\" | \"all\";\n displayColumns: string; // @todo this should be a number\n displayRows: string; // @todo this should be a number\n selectedDates?: {\n end: number;\n start: number;\n };\n hidden?: boolean;\n}\n\nexport enum CalloutType {\n Standard = \"standard\",\n Autofill = \"autofill\",\n}\n\nexport enum SynonymType {\n Group = \"group\",\n Oneway = \"oneway\",\n}\nexport interface Synonym extends ResourceDocument {\n name: string;\n enabled: boolean;\n synonyms: Array<string>;\n type: SynonymType;\n hidden?: boolean;\n}\nexport interface Antonym extends ResourceDocument {\n name: string;\n enabled: boolean;\n antonyms: Array<string>;\n hidden?: boolean;\n}\n\nexport interface MergedValue extends ResourceDocument {\n name: string;\n field: string;\n enabled: boolean;\n values: Array<string>;\n hidden?: boolean;\n}\n\nexport interface Collection extends ResourceDocument {\n title: string;\n handle: string;\n shopifyId: string;\n productIds: Array<string>;\n storefrontId: string;\n legacyResourceId: number;\n syncStatus?: \"error\" | \"complete\" | \"partiallyComplete\";\n syncAt?: string;\n}\n\n// product is the shopify product with edges and nodes normalised\nexport type Product = ResourceDocument &\n Omit<ShopifyProduct, \"variants\" | \"images\" | \"media\" | \"metafields\" | \"category\" | \"unpublishedPublications\"> & {\n category: string;\n variants: Array<\n Omit<ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"], \"presentmentPrices\"> & {\n productId?: string;\n images?: Array<ShopifyProductImage>; // from child product if this variant is from a child\n presentmentPrices: ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"][\"presentmentPrices\"][\"edges\"][0][\"node\"][];\n marketPrices: Array<{\n marketId: string;\n price: {\n amount: string;\n currencyCode: string;\n };\n compareAtPrice: {\n amount: string;\n currencyCode: string;\n } | null;\n }>;\n // inventoryItem: ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"][\"inventoryItem\"];\n }\n >;\n // unpublishedPublications: Array<ShopifyProduct[\"unpublishedPublications\"][\"edges\"][0][\"node\"]>\n // inventoryLevels: Array<{\n // variantId: string;\n // locationId: string;\n // locationName: string;\n // quantity: number;\n // }>;\n related?: Array<string>;\n images: Array<ShopifyProductImage>;\n media: ShopifyProduct[\"media\"][\"edges\"][0][\"node\"][];\n metafields: ShopifyProduct[\"metafields\"][\"edges\"][0][\"node\"][];\n keywords: Array<string>;\n syncStatus?: \"error\" | \"complete\" | \"partiallyComplete\";\n syncAt?: string;\n markets?: Array<string>;\n };\n\nexport interface SearchableField extends ResourceDocument {\n field: string;\n enabled: boolean;\n hidden?: boolean;\n points: number;\n maxEdits: number;\n mistakePenaltyPercent: number;\n synonymEnabled: boolean;\n synonymPenaltyPercent: number;\n}\n\nexport interface Boosting {\n key: string;\n fieldName: string;\n operation: Operation;\n value: string;\n points: number;\n}\n\nexport interface Sorting {\n field: string;\n position: number;\n direction: \"asc\" | \"desc\";\n}\n\nexport const Operation = {\n Equals: \"equals\",\n NotEquals: \"not equals\",\n Contains: \"contains\",\n NotContains: \"not contains\",\n LessThan: \"less than\",\n GreaterThan: \"greater than\",\n} as const;\nexport type Operation = typeof Operation[keyof typeof Operation];\n"]}
|
|
1
|
+
{"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../../src/types/firestore.ts"],"names":[],"mappings":"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","sourcesContent":["import { ShopifyProduct, ShopifyProductImage } from \"./shopify\";\n\nexport interface ResourceDocument {\n id: string;\n keywords: Array<string>;\n version?: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport enum ResourceType {\n ActivityLog = \"activity_log\",\n Product = \"product\",\n Collection = \"collection\",\n Curation = \"curation\",\n CurationPin = \"curation_pin\",\n CurationHiding = \"curation_hiding\",\n Callout = \"callout\",\n SettingsAccount = \"account_settings\",\n SettingsAutomation = \"automation_settings\",\n SettingsProduct = \"product_settings\",\n FilterGroup = \"filter_group\",\n FilterFacet = \"filter_facet\",\n MergedValue = \"merged_value\",\n Redirect = \"redirect\",\n Relevancy = \"relevancy\",\n Sort = \"sort\",\n Antonym = \"antonym\",\n Synonym = \"synonym\",\n Task = \"task\",\n SearchableField = \"searchable_field\",\n}\n\nexport enum MerchandisingCalloutAutofillBehaviour {\n Always = \"always\",\n MoreResults = \"more_results\",\n}\n\nexport const MerchandisingCalloutAutofillBehaviourLabel: Record<MerchandisingCalloutAutofillBehaviour, string> = {\n [MerchandisingCalloutAutofillBehaviour.Always]: \"Autofill always\",\n [MerchandisingCalloutAutofillBehaviour.MoreResults]: \"Autofill when there are more results\",\n};\n\nexport enum SharedStoreResource {\n Curation = \"curation\",\n Callout = \"callout\",\n FilterGroup = \"filter_group\",\n FilterFacet = \"filter_facet\",\n MergedValue = \"merged_value\",\n Redirect = \"redirect\",\n Relevancy = \"relevancy\",\n Sort = \"sort\",\n Synonym = \"synonym\",\n SettingsAccount = \"account_settings\",\n SettingsAutomation = \"automation_settings\",\n SettingsProduct = \"product_settings\",\n}\n\nexport const SharedStoreResourceLabels: Record<SharedStoreResource, string> = {\n [SharedStoreResource.Curation]: \"Curation\",\n [SharedStoreResource.Callout]: \"Callout\",\n [SharedStoreResource.FilterGroup]: \"Filter group\",\n [SharedStoreResource.FilterFacet]: \"Filter facet\",\n [SharedStoreResource.MergedValue]: \"Merged value\",\n [SharedStoreResource.Redirect]: \"Redirect\",\n [SharedStoreResource.Relevancy]: \"Relevancy\",\n [SharedStoreResource.Sort]: \"Sort\",\n [SharedStoreResource.Synonym]: \"Synonym\",\n [SharedStoreResource.SettingsAccount]: \"Settings account\",\n [SharedStoreResource.SettingsAutomation]: \"Settings automation\",\n [SharedStoreResource.SettingsProduct]: \"Settings product\",\n};\n\nexport interface Relevance extends ResourceDocument {\n field: string;\n enabled: boolean;\n importance: number;\n searchType: \"always_search\" | \"search_page\" | \"instant_search\";\n hidden?: boolean;\n}\n\nexport const DefinedFieldType = {\n Array: \"array\",\n Text: \"text\",\n Float: \"float\",\n Long: \"long\",\n Boolean: \"boolean\",\n} as const;\nexport type DefinedFieldType = typeof DefinedFieldType[keyof typeof DefinedFieldType] | (string & {});\n\nexport interface DefinedField {\n label: string;\n name: string;\n type: DefinedFieldType;\n}\n\nexport interface Sort extends ResourceDocument {\n name: string;\n handle: string;\n field: string;\n position: number;\n enabled: boolean;\n direction: \"desc\" | \"asc\";\n visibility: \"all\" | \"search\" | \"collection\";\n hidden?: boolean;\n}\n\nexport interface FilterGroup extends ResourceDocument {\n name: string;\n handle: string;\n enabled: boolean;\n pageSize: number;\n collections: Array<string>;\n type: \"search\" | \"collection\";\n paginationType: \"pagination\" | \"load_more\" | \"next_prev\" | \"infinite_scroll\";\n inventoryVisibility: \"show_all\" | \"hide_products\" | \"hide_variants\" | \"hide_all\";\n}\n\nexport interface FilterFacet extends ResourceDocument {\n name: string;\n field: string;\n handle: string;\n position: number;\n enabled: boolean;\n keywords: Array<string>;\n customSortOrder?: string;\n displayType: \"multi\" | \"single\" | \"slider\";\n displayView: \"list\" | \"check\" | \"swatch\" | \"range\" | \"box\";\n displaySize: string;\n displaySliderStep: string;\n displaySliderPrefix: string;\n displaySliderSuffix: string;\n displayRangeOptions: Array<string>;\n settingsShowMore: boolean;\n settingsUppercase: boolean;\n settingsShowSearch: boolean;\n settingsShowFilter: boolean;\n settingsShowEmptyValues: boolean;\n settingsHideUnavailable: boolean;\n settingsCollapsedMobile: boolean;\n settingsCollapsedDesktop: boolean;\n settingsFilterLogic: \"and\" | \"or\";\n valuesShow: \"all\" | \"manual\";\n valuesManual: Array<string>;\n valuesExclude: Array<string>;\n}\n\nexport interface Redirect extends ResourceDocument {\n url: string;\n query: string;\n enabled: boolean;\n hidden?: boolean;\n}\n\nexport interface Curation extends ResourceDocument {\n title: string;\n status: CurationStatus;\n published: boolean;\n searchTerm?: string;\n longRunningTask?: boolean;\n collectionHandle?: string;\n collectionId?: string;\n type: CurationType;\n /** @deprecated */\n boosting?: {\n groupings?: BoostGrouping[];\n sortings?: BoostSorting[];\n };\n sort?: CurationSort;\n schedule?: CurationSchedule;\n scheduleEnabled?: boolean;\n scheduleTimezone?: string;\n hidden?: boolean;\n\n markets: Array<string>;\n\n boostings?: Boosting[];\n sortings?: Sorting[];\n}\n\nexport enum CurationType {\n Search = \"search\",\n Collection = \"collection\",\n}\n\nexport interface CurationSort {\n sortTag?: string;\n sortOption: string;\n sortDirection: \"asc\" | \"desc\";\n sortVariantOption?: \"option1\" | \"option2\" | \"option3\";\n}\n\nexport interface CurationSchedule {\n schedulePublish: string;\n schedulePublishEnabled: boolean;\n scheduleUnpublish: string;\n scheduleUnpublishEnabled: boolean;\n}\n\nexport enum CurationStatus {\n Draft = \"draft\",\n Publishing = \"publishing\",\n Published = \"published\",\n Error = \"error\",\n Unpublishing = \"unpublishing\",\n Resetting = \"resetting\",\n Pinning = \"pinning\",\n Sorting = \"sorting\",\n}\n\nexport interface CurationHiding {\n productId: number;\n}\n\nexport interface Market {\n id: string;\n label: string;\n enabled: boolean;\n publicationId: string;\n locationId: string;\n currencyCode?: string;\n}\n\n/** @deprecated This entity will be removed once the curation is fully refactored into merchandisable entities */\nexport interface BoostGrouping {\n key: string;\n value: string;\n field: string;\n position: number;\n operation: string;\n}\n\n/** @deprecated This entity will be removed once the curation is fully refactored into merchandisable entities */\nexport interface BoostSorting {\n key: string;\n field: string;\n query?: string;\n position: number;\n direction: \"asc\" | \"desc\";\n}\n\nexport interface Link {\n content: string;\n url: string;\n key: string;\n}\n\nexport interface Callout extends ResourceDocument {\n type: CalloutType;\n link: string;\n links: Array<Link>;\n // name: string;\n title: string;\n content: string;\n enabled: boolean;\n textColor: string;\n mobileImage: string;\n mobileVideo: string;\n desktopVideo: string;\n desktopImage: string;\n backgroundColor: string;\n visibility: \"desktop\" | \"mobile\" | \"all\";\n displayColumns: string; // @todo this should be a number\n displayRows: string; // @todo this should be a number\n selectedDates?: {\n end: number;\n start: number;\n };\n hidden?: boolean;\n}\n\nexport enum CalloutType {\n Standard = \"standard\",\n Autofill = \"autofill\",\n}\n\nexport enum SynonymType {\n Group = \"group\",\n Oneway = \"oneway\",\n}\nexport interface Synonym extends ResourceDocument {\n name: string;\n enabled: boolean;\n synonyms: Array<string>;\n type: SynonymType;\n hidden?: boolean;\n}\nexport interface Antonym extends ResourceDocument {\n name: string;\n enabled: boolean;\n antonyms: Array<string>;\n hidden?: boolean;\n}\n\nexport interface MergedValue extends ResourceDocument {\n name: string;\n field: string;\n enabled: boolean;\n values: Array<string>;\n hidden?: boolean;\n}\n\nexport interface Collection extends ResourceDocument {\n title: string;\n handle: string;\n shopifyId: string;\n productIds: Array<string>;\n storefrontId: string;\n legacyResourceId: number;\n syncStatus?: \"error\" | \"complete\" | \"partiallyComplete\";\n syncAt?: string;\n}\n\n// product is the shopify product with edges and nodes normalised\nexport type Product = ResourceDocument &\n Omit<ShopifyProduct, \"variants\" | \"images\" | \"media\" | \"metafields\" | \"category\" | \"unpublishedPublications\"> & {\n category: string;\n variants: Array<\n Omit<ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"], \"presentmentPrices\"> & {\n productId?: string;\n images?: Array<ShopifyProductImage>; // from child product if this variant is from a child\n presentmentPrices: ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"][\"presentmentPrices\"][\"edges\"][0][\"node\"][];\n marketPrices: Array<{\n marketId: string;\n price: {\n amount: string;\n currencyCode: string;\n };\n compareAtPrice: {\n amount: string;\n currencyCode: string;\n } | null;\n }>;\n // inventoryItem: ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"][\"inventoryItem\"];\n }\n >;\n // unpublishedPublications: Array<ShopifyProduct[\"unpublishedPublications\"][\"edges\"][0][\"node\"]>\n // inventoryLevels: Array<{\n // variantId: string;\n // locationId: string;\n // locationName: string;\n // quantity: number;\n // }>;\n related?: Array<string>;\n images: Array<ShopifyProductImage>;\n media: ShopifyProduct[\"media\"][\"edges\"][0][\"node\"][];\n metafields: ShopifyProduct[\"metafields\"][\"edges\"][0][\"node\"][];\n keywords: Array<string>;\n syncStatus?: \"error\" | \"complete\" | \"partiallyComplete\";\n syncAt?: string;\n markets?: Array<string>;\n };\n\nexport interface SearchableField extends ResourceDocument {\n field: string;\n enabled: boolean;\n hidden?: boolean;\n points: number;\n maxEdits: number;\n mistakePenaltyPercent: number;\n synonymEnabled: boolean;\n synonymPenaltyPercent: number;\n}\n\nexport interface Boosting {\n key: string;\n fieldName: string;\n operation: Operation;\n value: string;\n points: number;\n}\n\nexport interface Sorting {\n field: string;\n position: number;\n direction: \"asc\" | \"desc\";\n}\n\nexport const Operation = {\n Equals: \"equals\",\n NotEquals: \"not equals\",\n Contains: \"contains\",\n NotContains: \"not contains\",\n LessThan: \"less than\",\n GreaterThan: \"greater than\",\n} as const;\nexport type Operation = typeof Operation[keyof typeof Operation];\n"]}
|