@teleporthq/teleport-plugin-next-data-source 0.43.74 → 0.43.75
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/__tests__/_helpers/pagination-widget-fixture.ts +8 -1
- package/__tests__/blog-adjacent-arranged.test.ts +176 -0
- package/__tests__/blog-post-contents.test.ts +212 -0
- package/__tests__/blog-post-page-enrichment.test.ts +28 -5
- package/__tests__/blog-post-picture-stand-in.test.ts +48 -0
- package/__tests__/blog-post-reading-time.test.ts +55 -0
- package/__tests__/browser-row-policy.test.ts +5 -1
- package/__tests__/content-preset-wiring.test.ts +108 -0
- package/__tests__/fixed-list-sort.test.ts +183 -0
- package/__tests__/pagination-filter-groups.test.ts +186 -0
- package/__tests__/plain-list-sort.test.ts +215 -0
- package/__tests__/product-price-sort.ts +47 -19
- package/__tests__/rest-api-key-header.test.ts +18 -0
- package/__tests__/search-url-sync.test.ts +34 -15
- package/__tests__/shared-resource-prefetch.test.ts +65 -0
- package/dist/cjs/fetchers/postgresql.d.ts.map +1 -1
- package/dist/cjs/fetchers/postgresql.js +2 -1
- package/dist/cjs/fetchers/postgresql.js.map +1 -1
- package/dist/cjs/fetchers/rest-api.d.ts.map +1 -1
- package/dist/cjs/fetchers/rest-api.js +3 -1
- package/dist/cjs/fetchers/rest-api.js.map +1 -1
- package/dist/cjs/fetchers/teleport.d.ts.map +1 -1
- package/dist/cjs/fetchers/teleport.js +3 -2
- package/dist/cjs/fetchers/teleport.js.map +1 -1
- package/dist/cjs/fetchers/utils/browser-row-policy.d.ts +7 -6
- package/dist/cjs/fetchers/utils/browser-row-policy.d.ts.map +1 -1
- package/dist/cjs/fetchers/utils/browser-row-policy.js +7 -33
- package/dist/cjs/fetchers/utils/browser-row-policy.js.map +1 -1
- package/dist/cjs/filter-utils.d.ts +19 -7
- package/dist/cjs/filter-utils.d.ts.map +1 -1
- package/dist/cjs/filter-utils.js +49 -13
- package/dist/cjs/filter-utils.js.map +1 -1
- package/dist/cjs/pagination-plugin.d.ts.map +1 -1
- package/dist/cjs/pagination-plugin.js +137 -118
- package/dist/cjs/pagination-plugin.js.map +1 -1
- package/dist/cjs/product-price-sort.d.ts +0 -9
- package/dist/cjs/product-price-sort.d.ts.map +1 -1
- package/dist/cjs/product-price-sort.js +1 -13
- package/dist/cjs/product-price-sort.js.map +1 -1
- package/dist/cjs/row-order.d.ts +19 -0
- package/dist/cjs/row-order.d.ts.map +1 -0
- package/dist/cjs/row-order.js +45 -0
- package/dist/cjs/row-order.js.map +1 -0
- package/dist/cjs/sort-utils.d.ts +10 -0
- package/dist/cjs/sort-utils.d.ts.map +1 -1
- package/dist/cjs/sort-utils.js +22 -1
- package/dist/cjs/sort-utils.js.map +1 -1
- package/dist/cjs/transformations/blog-adjacent-posts.d.ts +11 -1
- package/dist/cjs/transformations/blog-adjacent-posts.d.ts.map +1 -1
- package/dist/cjs/transformations/blog-adjacent-posts.js +14 -1
- package/dist/cjs/transformations/blog-adjacent-posts.js.map +1 -1
- package/dist/cjs/transformations/blog-comments.d.ts +1 -1
- package/dist/cjs/transformations/blog-comments.d.ts.map +1 -1
- package/dist/cjs/transformations/blog-comments.js +1 -1
- package/dist/cjs/transformations/blog-comments.js.map +1 -1
- package/dist/cjs/transformations/blog-post.d.ts +14 -0
- package/dist/cjs/transformations/blog-post.d.ts.map +1 -1
- package/dist/cjs/transformations/blog-post.js +4 -1
- package/dist/cjs/transformations/blog-post.js.map +1 -1
- package/dist/cjs/transformations/heading-anchors.d.ts +32 -8
- package/dist/cjs/transformations/heading-anchors.d.ts.map +1 -1
- package/dist/cjs/transformations/heading-anchors.js +34 -10
- package/dist/cjs/transformations/heading-anchors.js.map +1 -1
- package/dist/cjs/transformations/index.d.ts +24 -12
- package/dist/cjs/transformations/index.d.ts.map +1 -1
- package/dist/cjs/transformations/index.js +59 -11
- package/dist/cjs/transformations/index.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/utils.d.ts.map +1 -1
- package/dist/cjs/utils.js +52 -3
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/fetchers/postgresql.d.ts.map +1 -1
- package/dist/esm/fetchers/postgresql.js +3 -2
- package/dist/esm/fetchers/postgresql.js.map +1 -1
- package/dist/esm/fetchers/rest-api.d.ts.map +1 -1
- package/dist/esm/fetchers/rest-api.js +3 -1
- package/dist/esm/fetchers/rest-api.js.map +1 -1
- package/dist/esm/fetchers/teleport.d.ts.map +1 -1
- package/dist/esm/fetchers/teleport.js +4 -3
- package/dist/esm/fetchers/teleport.js.map +1 -1
- package/dist/esm/fetchers/utils/browser-row-policy.d.ts +7 -6
- package/dist/esm/fetchers/utils/browser-row-policy.d.ts.map +1 -1
- package/dist/esm/fetchers/utils/browser-row-policy.js +5 -31
- package/dist/esm/fetchers/utils/browser-row-policy.js.map +1 -1
- package/dist/esm/filter-utils.d.ts +19 -7
- package/dist/esm/filter-utils.d.ts.map +1 -1
- package/dist/esm/filter-utils.js +46 -12
- package/dist/esm/filter-utils.js.map +1 -1
- package/dist/esm/pagination-plugin.d.ts.map +1 -1
- package/dist/esm/pagination-plugin.js +140 -121
- package/dist/esm/pagination-plugin.js.map +1 -1
- package/dist/esm/product-price-sort.d.ts +0 -9
- package/dist/esm/product-price-sort.d.ts.map +1 -1
- package/dist/esm/product-price-sort.js +0 -11
- package/dist/esm/product-price-sort.js.map +1 -1
- package/dist/esm/row-order.d.ts +19 -0
- package/dist/esm/row-order.d.ts.map +1 -0
- package/dist/esm/row-order.js +40 -0
- package/dist/esm/row-order.js.map +1 -0
- package/dist/esm/sort-utils.d.ts +10 -0
- package/dist/esm/sort-utils.d.ts.map +1 -1
- package/dist/esm/sort-utils.js +20 -0
- package/dist/esm/sort-utils.js.map +1 -1
- package/dist/esm/transformations/blog-adjacent-posts.d.ts +11 -1
- package/dist/esm/transformations/blog-adjacent-posts.d.ts.map +1 -1
- package/dist/esm/transformations/blog-adjacent-posts.js +14 -1
- package/dist/esm/transformations/blog-adjacent-posts.js.map +1 -1
- package/dist/esm/transformations/blog-comments.d.ts +1 -1
- package/dist/esm/transformations/blog-comments.d.ts.map +1 -1
- package/dist/esm/transformations/blog-comments.js +1 -1
- package/dist/esm/transformations/blog-comments.js.map +1 -1
- package/dist/esm/transformations/blog-post.d.ts +14 -0
- package/dist/esm/transformations/blog-post.d.ts.map +1 -1
- package/dist/esm/transformations/blog-post.js +4 -1
- package/dist/esm/transformations/blog-post.js.map +1 -1
- package/dist/esm/transformations/heading-anchors.d.ts +32 -8
- package/dist/esm/transformations/heading-anchors.d.ts.map +1 -1
- package/dist/esm/transformations/heading-anchors.js +33 -9
- package/dist/esm/transformations/heading-anchors.js.map +1 -1
- package/dist/esm/transformations/index.d.ts +24 -12
- package/dist/esm/transformations/index.d.ts.map +1 -1
- package/dist/esm/transformations/index.js +58 -11
- package/dist/esm/transformations/index.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/utils.d.ts.map +1 -1
- package/dist/esm/utils.js +52 -3
- package/dist/esm/utils.js.map +1 -1
- package/package.json +5 -5
- package/src/fetchers/postgresql.ts +11 -15
- package/src/fetchers/rest-api.ts +3 -1
- package/src/fetchers/teleport.ts +12 -16
- package/src/fetchers/utils/browser-row-policy.ts +10 -20
- package/src/filter-utils.ts +102 -28
- package/src/pagination-plugin.ts +211 -175
- package/src/product-price-sort.ts +0 -11
- package/src/row-order.ts +54 -0
- package/src/sort-utils.ts +25 -0
- package/src/transformations/blog-adjacent-posts.ts +89 -3
- package/src/transformations/blog-comments.ts +5 -5
- package/src/transformations/blog-post.ts +64 -13
- package/src/transformations/heading-anchors.ts +79 -16
- package/src/transformations/index.ts +80 -13
- package/src/utils.ts +74 -3
package/src/utils.ts
CHANGED
|
@@ -15,6 +15,7 @@ import { generateDataSourceFetcherWithCore } from './data-source-fetchers'
|
|
|
15
15
|
import type { EntityTransformOptions } from './transformations'
|
|
16
16
|
import { DATA_SOURCE_ISR_REVALIDATE_SECONDS } from './isr'
|
|
17
17
|
import { buildServerLocaleParam, hasLocaleParam, buildClientLocaleParam } from './request-locale'
|
|
18
|
+
import { readFixedSort } from './sort-utils'
|
|
18
19
|
|
|
19
20
|
const VALID_DATA_SOURCE_TYPES: DataSourceType[] = [
|
|
20
21
|
'rest-api',
|
|
@@ -1172,6 +1173,40 @@ const buildFilterObjectAST = (
|
|
|
1172
1173
|
}
|
|
1173
1174
|
|
|
1174
1175
|
// tslint:disable-next-line:no-any
|
|
1176
|
+
const isSortKeyed = (properties: types.ObjectProperty[]): boolean =>
|
|
1177
|
+
properties.some(
|
|
1178
|
+
(property) =>
|
|
1179
|
+
(property.key.type === 'StringLiteral' && property.key.value === 'sorts') ||
|
|
1180
|
+
(property.key.type === 'Identifier' && property.key.name === 'sorts')
|
|
1181
|
+
)
|
|
1182
|
+
|
|
1183
|
+
/** The fixed sort of the first list repeater inside a data-source node, if it has one. */
|
|
1184
|
+
// tslint:disable-next-line:no-any
|
|
1185
|
+
const findRepeaterFixedSort = (node: any): { field: string; order: 'asc' | 'desc' } | undefined => {
|
|
1186
|
+
// tslint:disable-next-line:no-any
|
|
1187
|
+
const visit = (current: any): { field: string; order: 'asc' | 'desc' } | null | undefined => {
|
|
1188
|
+
if (!current || typeof current !== 'object') {
|
|
1189
|
+
return undefined
|
|
1190
|
+
}
|
|
1191
|
+
if (current.type === 'cms-list-repeater') {
|
|
1192
|
+
return readFixedSort(current.content?.sort, current.content?.sortDirection) ?? null
|
|
1193
|
+
}
|
|
1194
|
+
const content = current.content
|
|
1195
|
+
const children = [
|
|
1196
|
+
...(Array.isArray(content?.children) ? content.children : []),
|
|
1197
|
+
...(content?.nodes && typeof content.nodes === 'object' ? Object.values(content.nodes) : []),
|
|
1198
|
+
]
|
|
1199
|
+
for (const child of children) {
|
|
1200
|
+
const found = visit(child)
|
|
1201
|
+
if (found !== undefined) {
|
|
1202
|
+
return found
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
return undefined
|
|
1206
|
+
}
|
|
1207
|
+
return visit(node) ?? undefined
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1175
1210
|
export const extractDataSourceIntoGetStaticProps = (
|
|
1176
1211
|
node: UIDLDataSourceItemNode | UIDLDataSourceListNode,
|
|
1177
1212
|
dataSources: Record<string, UIDLDataSource>,
|
|
@@ -1246,7 +1281,12 @@ export const extractDataSourceIntoGetStaticProps = (
|
|
|
1246
1281
|
}
|
|
1247
1282
|
// tslint:disable-next-line:no-any
|
|
1248
1283
|
const nodeResource = (node.content as any).resource
|
|
1249
|
-
const propKey = claimParamsPropKey(
|
|
1284
|
+
const propKey = claimParamsPropKey(
|
|
1285
|
+
componentChunk,
|
|
1286
|
+
resourcePropKey,
|
|
1287
|
+
nodeResource,
|
|
1288
|
+
findRepeaterFixedSort(node)
|
|
1289
|
+
)
|
|
1250
1290
|
|
|
1251
1291
|
// Find matching JSX nodes for this data source
|
|
1252
1292
|
// Strategy depends on whether we have a unique resource ID:
|
|
@@ -1692,6 +1732,35 @@ export const extractDataSourceIntoGetStaticProps = (
|
|
|
1692
1732
|
}
|
|
1693
1733
|
})
|
|
1694
1734
|
|
|
1735
|
+
// The sort the list's repeater fixed, when the resource names none — the
|
|
1736
|
+
// rows the page is pre-rendered with come in the order the list shows them
|
|
1737
|
+
// (the browser keeps them: the provider skips its first fetch).
|
|
1738
|
+
const repeaterSort = isSortKeyed(paramsProperties) ? undefined : findRepeaterFixedSort(node)
|
|
1739
|
+
if (repeaterSort) {
|
|
1740
|
+
paramsProperties.push(
|
|
1741
|
+
types.objectProperty(
|
|
1742
|
+
types.stringLiteral('sorts'),
|
|
1743
|
+
types.callExpression(
|
|
1744
|
+
types.memberExpression(types.identifier('JSON'), types.identifier('stringify')),
|
|
1745
|
+
[
|
|
1746
|
+
types.arrayExpression([
|
|
1747
|
+
types.objectExpression([
|
|
1748
|
+
types.objectProperty(
|
|
1749
|
+
types.identifier('field'),
|
|
1750
|
+
types.stringLiteral(repeaterSort.field)
|
|
1751
|
+
),
|
|
1752
|
+
types.objectProperty(
|
|
1753
|
+
types.identifier('order'),
|
|
1754
|
+
types.stringLiteral(repeaterSort.order)
|
|
1755
|
+
),
|
|
1756
|
+
]),
|
|
1757
|
+
]),
|
|
1758
|
+
]
|
|
1759
|
+
)
|
|
1760
|
+
)
|
|
1761
|
+
)
|
|
1762
|
+
}
|
|
1763
|
+
|
|
1695
1764
|
// getStaticProps runs once per language: the prefetch is for that language.
|
|
1696
1765
|
if (transformOptions.localization !== undefined) {
|
|
1697
1766
|
paramsProperties.push(buildServerLocaleParam())
|
|
@@ -1855,11 +1924,13 @@ interface ParallelFetchMeta {
|
|
|
1855
1924
|
const claimParamsPropKey = (
|
|
1856
1925
|
componentChunk: ChunkDefinition,
|
|
1857
1926
|
resourcePropKey: string,
|
|
1858
|
-
resource: { params?: Record<string, unknown> } | undefined
|
|
1927
|
+
resource: { params?: Record<string, unknown> } | undefined,
|
|
1928
|
+
// The list's own fixed sort rides on its prefetch too (see the params below).
|
|
1929
|
+
repeaterSort?: { field: string; order: string }
|
|
1859
1930
|
): string => {
|
|
1860
1931
|
const meta = componentChunk.meta as { dataSourcePropKeyParams?: Record<string, string> }
|
|
1861
1932
|
const claimed = meta.dataSourcePropKeyParams ?? (meta.dataSourcePropKeyParams = {})
|
|
1862
|
-
const signature = JSON.stringify(resource?.params ?? {})
|
|
1933
|
+
const signature = JSON.stringify([resource?.params ?? {}, repeaterSort ?? null])
|
|
1863
1934
|
|
|
1864
1935
|
let propKey = resourcePropKey
|
|
1865
1936
|
for (let suffix = 2; claimed[propKey] !== undefined && claimed[propKey] !== signature; suffix++) {
|