@teleporthq/teleport-plugin-next-data-source 0.43.54 → 0.43.57
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__/array-mapper-cache-wiring.test.ts +425 -0
- package/__tests__/data-source-cache-wrapping.test.ts +152 -0
- package/__tests__/ecommerce-product-storefront-tax.test.ts +118 -0
- package/__tests__/ecommerce-product-variant-availability.test.ts +264 -0
- package/dist/cjs/cache/ast.d.ts +71 -0
- package/dist/cjs/cache/ast.d.ts.map +1 -0
- package/dist/cjs/cache/ast.js +229 -0
- package/dist/cjs/cache/ast.js.map +1 -0
- package/dist/cjs/cache/config.d.ts +22 -0
- package/dist/cjs/cache/config.d.ts.map +1 -0
- package/dist/cjs/cache/config.js +67 -0
- package/dist/cjs/cache/config.js.map +1 -0
- package/dist/cjs/cache/types.d.ts +31 -0
- package/dist/cjs/cache/types.d.ts.map +1 -0
- package/dist/cjs/cache/types.js +3 -0
- package/dist/cjs/cache/types.js.map +1 -0
- package/dist/cjs/data-source-fetchers.d.ts +5 -3
- package/dist/cjs/data-source-fetchers.d.ts.map +1 -1
- package/dist/cjs/data-source-fetchers.js +51 -8
- package/dist/cjs/data-source-fetchers.js.map +1 -1
- package/dist/cjs/fetchers/teleport.d.ts +2 -2
- 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/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +14 -9
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/loading-state.d.ts.map +1 -1
- package/dist/cjs/loading-state.js +74 -2
- package/dist/cjs/loading-state.js.map +1 -1
- package/dist/cjs/pagination-plugin.d.ts.map +1 -1
- package/dist/cjs/pagination-plugin.js +204 -64
- package/dist/cjs/pagination-plugin.js.map +1 -1
- package/dist/cjs/transformations/ecommerce-product.d.ts +15 -1
- package/dist/cjs/transformations/ecommerce-product.d.ts.map +1 -1
- package/dist/cjs/transformations/ecommerce-product.js +7 -3
- package/dist/cjs/transformations/ecommerce-product.js.map +1 -1
- package/dist/cjs/transformations/index.d.ts +13 -2
- package/dist/cjs/transformations/index.d.ts.map +1 -1
- package/dist/cjs/transformations/index.js +33 -5
- package/dist/cjs/transformations/index.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/utils.d.ts +4 -3
- package/dist/cjs/utils.d.ts.map +1 -1
- package/dist/cjs/utils.js +6 -4
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/cache/ast.d.ts +71 -0
- package/dist/esm/cache/ast.d.ts.map +1 -0
- package/dist/esm/cache/ast.js +196 -0
- package/dist/esm/cache/ast.js.map +1 -0
- package/dist/esm/cache/config.d.ts +22 -0
- package/dist/esm/cache/config.d.ts.map +1 -0
- package/dist/esm/cache/config.js +62 -0
- package/dist/esm/cache/config.js.map +1 -0
- package/dist/esm/cache/types.d.ts +31 -0
- package/dist/esm/cache/types.d.ts.map +1 -0
- package/dist/esm/cache/types.js +2 -0
- package/dist/esm/cache/types.js.map +1 -0
- package/dist/esm/data-source-fetchers.d.ts +5 -3
- package/dist/esm/data-source-fetchers.d.ts.map +1 -1
- package/dist/esm/data-source-fetchers.js +51 -8
- package/dist/esm/data-source-fetchers.js.map +1 -1
- package/dist/esm/fetchers/teleport.d.ts +2 -2
- package/dist/esm/fetchers/teleport.d.ts.map +1 -1
- package/dist/esm/fetchers/teleport.js +3 -2
- package/dist/esm/fetchers/teleport.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +12 -8
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loading-state.d.ts.map +1 -1
- package/dist/esm/loading-state.js +74 -2
- package/dist/esm/loading-state.js.map +1 -1
- package/dist/esm/pagination-plugin.d.ts.map +1 -1
- package/dist/esm/pagination-plugin.js +205 -65
- package/dist/esm/pagination-plugin.js.map +1 -1
- package/dist/esm/transformations/ecommerce-product.d.ts +15 -1
- package/dist/esm/transformations/ecommerce-product.d.ts.map +1 -1
- package/dist/esm/transformations/ecommerce-product.js +7 -3
- package/dist/esm/transformations/ecommerce-product.js.map +1 -1
- package/dist/esm/transformations/index.d.ts +13 -2
- package/dist/esm/transformations/index.d.ts.map +1 -1
- package/dist/esm/transformations/index.js +32 -5
- package/dist/esm/transformations/index.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/utils.d.ts +4 -3
- package/dist/esm/utils.d.ts.map +1 -1
- package/dist/esm/utils.js +6 -4
- package/dist/esm/utils.js.map +1 -1
- package/package.json +5 -5
- package/src/cache/ast.ts +265 -0
- package/src/cache/config.ts +79 -0
- package/src/cache/types.ts +31 -0
- package/src/data-source-fetchers.ts +66 -12
- package/src/fetchers/teleport.ts +3 -3
- package/src/index.ts +10 -4
- package/src/loading-state.ts +65 -2
- package/src/pagination-plugin.ts +315 -116
- package/src/transformations/ecommerce-product.ts +107 -11
- package/src/transformations/index.ts +48 -7
- package/src/utils.ts +10 -5
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeServerCacheOptions = exports.resolveCacheFromRepeaterContent = void 0;
|
|
4
|
+
var teleport_shared_1 = require("@teleporthq/teleport-shared");
|
|
5
|
+
/**
|
|
6
|
+
* Reads the `cache` block off a `cms-list-repeater`.
|
|
7
|
+
*
|
|
8
|
+
* Returns `undefined` — meaning "emit exactly what this generator emitted
|
|
9
|
+
* before caching existed" — for anything that is off, incomplete, or caches
|
|
10
|
+
* into neither layer.
|
|
11
|
+
*/
|
|
12
|
+
var resolveCacheFromRepeaterContent = function (cache, resourceDefinition) {
|
|
13
|
+
if (!cache || cache.enabled !== true) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
var client = cache.client === true;
|
|
17
|
+
var server = cache.server === true;
|
|
18
|
+
if (!client && !server) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
var scope = cache.versionScope ||
|
|
22
|
+
((resourceDefinition === null || resourceDefinition === void 0 ? void 0 : resourceDefinition.dataSourceId) && (resourceDefinition === null || resourceDefinition === void 0 ? void 0 : resourceDefinition.tableName)
|
|
23
|
+
? teleport_shared_1.DataCache.cacheScopeFor(resourceDefinition.dataSourceId, resourceDefinition.tableName)
|
|
24
|
+
: '');
|
|
25
|
+
if (!scope) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
var ttlSeconds = typeof cache.ttlSeconds === 'number' && cache.ttlSeconds > 0
|
|
29
|
+
? Math.trunc(cache.ttlSeconds)
|
|
30
|
+
: teleport_shared_1.DataCache.DEFAULT_CACHE_TTL_SECONDS;
|
|
31
|
+
return {
|
|
32
|
+
scope: scope,
|
|
33
|
+
ttlSeconds: ttlSeconds,
|
|
34
|
+
client: client,
|
|
35
|
+
server: server,
|
|
36
|
+
sMaxAge: typeof cache.cdnSMaxAge === 'number' && cache.cdnSMaxAge > 0 ? cache.cdnSMaxAge : 0,
|
|
37
|
+
staleWhileRevalidate: typeof cache.cdnStaleWhileRevalidate === 'number' && cache.cdnStaleWhileRevalidate > 0
|
|
38
|
+
? cache.cdnStaleWhileRevalidate
|
|
39
|
+
: undefined,
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
exports.resolveCacheFromRepeaterContent = resolveCacheFromRepeaterContent;
|
|
43
|
+
/**
|
|
44
|
+
* Folds several mappers' requests for the same generated file into one.
|
|
45
|
+
*
|
|
46
|
+
* Enabled if ANY mapper wants it, but with the SHORTEST requested TTL and the
|
|
47
|
+
* shortest shared-cache window — a mapper that asked for fresher data must
|
|
48
|
+
* never be made staler by a sibling that asked for less.
|
|
49
|
+
*/
|
|
50
|
+
var mergeServerCacheOptions = function (entries) {
|
|
51
|
+
var enabled = entries.filter(function (entry) { return entry.ttlSeconds > 0 || (entry.sMaxAge || 0) > 0; });
|
|
52
|
+
if (!enabled.length) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
var positive = function (values) { return values.filter(function (value) { return value > 0; }); };
|
|
56
|
+
var ttls = positive(enabled.map(function (entry) { return entry.ttlSeconds; }));
|
|
57
|
+
var sMaxAges = positive(enabled.map(function (entry) { return entry.sMaxAge || 0; }));
|
|
58
|
+
var swrs = positive(enabled.map(function (entry) { return entry.staleWhileRevalidate || 0; }));
|
|
59
|
+
return {
|
|
60
|
+
scope: enabled[0].scope,
|
|
61
|
+
ttlSeconds: ttls.length ? Math.min.apply(Math, ttls) : 0,
|
|
62
|
+
sMaxAge: sMaxAges.length ? Math.min.apply(Math, sMaxAges) : 0,
|
|
63
|
+
staleWhileRevalidate: swrs.length ? Math.min.apply(Math, swrs) : undefined,
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
exports.mergeServerCacheOptions = mergeServerCacheOptions;
|
|
67
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cache/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A mapper's caching setup once the UIDL has been read and the defaults filled
|
|
3
|
+
* in. `client` and `server` are independent — both layers may run at once.
|
|
4
|
+
*/
|
|
5
|
+
export interface ResolvedDataSourceCache {
|
|
6
|
+
scope: string;
|
|
7
|
+
ttlSeconds: number;
|
|
8
|
+
client: boolean;
|
|
9
|
+
server: boolean;
|
|
10
|
+
/** `Cache-Control: s-maxage`. Zero unless a shared window was granted. */
|
|
11
|
+
sMaxAge: number;
|
|
12
|
+
staleWhileRevalidate?: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Cache configuration as it reaches the emitters.
|
|
16
|
+
*
|
|
17
|
+
* Resolved per generated data-source FILE, not per array mapper: the
|
|
18
|
+
* `utils/data-sources/<file>.js` module is shared by every mapper reading the
|
|
19
|
+
* same `(type, table, dataSourceId)` triple, so two mappers on two pages must
|
|
20
|
+
* agree on one server-side setup. See `mergeServerCacheOptions`.
|
|
21
|
+
*/
|
|
22
|
+
export interface DataSourceServerCacheOptions {
|
|
23
|
+
/** `<dataSourceId>:<tableName>` — the unit of invalidation. */
|
|
24
|
+
scope: string;
|
|
25
|
+
/** In-process TTL, seconds. `0` disables the server cache. */
|
|
26
|
+
ttlSeconds: number;
|
|
27
|
+
/** `Cache-Control: s-maxage`, seconds. `0` keeps the response private. */
|
|
28
|
+
sMaxAge?: number;
|
|
29
|
+
staleWhileRevalidate?: number;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cache/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAA;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,4BAA4B;IAC3C,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAA;IACb,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAA;IAClB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cache/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { DataSourceType, UIDLDataSource
|
|
1
|
+
import { DataSourceType, UIDLDataSource } from '@teleporthq/teleport-types';
|
|
2
2
|
import { generateRawQueryFetcher, parseQueryTemplateVariables } from './fetchers';
|
|
3
|
+
import type { EcommerceProductTransformOptions } from './transformations';
|
|
4
|
+
import type { DataSourceServerCacheOptions } from './cache/types';
|
|
3
5
|
export { generateRawQueryFetcher, parseQueryTemplateVariables };
|
|
4
6
|
interface DataSourceFetcherDependencies {
|
|
5
7
|
packages: string[];
|
|
@@ -7,10 +9,10 @@ interface DataSourceFetcherDependencies {
|
|
|
7
9
|
}
|
|
8
10
|
export declare const isSupabaseConnectionStringFallback: (config: Record<string, unknown>) => boolean;
|
|
9
11
|
export declare const getDataSourceDependencies: (type: DataSourceType, config?: Record<string, unknown>) => DataSourceFetcherDependencies;
|
|
10
|
-
export declare function generateDataSourceFetcher(dataSource: UIDLDataSource, tableName: string,
|
|
12
|
+
export declare function generateDataSourceFetcher(dataSource: UIDLDataSource, tableName: string, transformOptions?: EcommerceProductTransformOptions): string;
|
|
11
13
|
/**
|
|
12
14
|
* Generates a fetcher with both a core fetchData function (for server-side use in getStaticProps)
|
|
13
15
|
* and an API handler (for client-side use)
|
|
14
16
|
*/
|
|
15
|
-
export declare function generateDataSourceFetcherWithCore(dataSource: UIDLDataSource, tableName: string, isApiRoute?: boolean,
|
|
17
|
+
export declare function generateDataSourceFetcherWithCore(dataSource: UIDLDataSource, tableName: string, isApiRoute?: boolean, transformOptions?: EcommerceProductTransformOptions, cacheOptions?: DataSourceServerCacheOptions): string;
|
|
16
18
|
//# sourceMappingURL=data-source-fetchers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-source-fetchers.d.ts","sourceRoot":"","sources":["../../src/data-source-fetchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"data-source-fetchers.d.ts","sourceRoot":"","sources":["../../src/data-source-fetchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EA6BL,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,YAAY,CAAA;AAGnB,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAA;AAEzE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAA;AAEjE,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,CAAA;AAE/D,UAAU,6BAA6B;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,eAAO,MAAM,kCAAkC,WAAY,OAAO,MAAM,EAAE,OAAO,CAAC,KAAG,OAEpF,CAAA;AAED,eAAO,MAAM,yBAAyB,SAC9B,cAAc,WACX,OAAO,MAAM,EAAE,OAAO,CAAC,KAC/B,6BA4BF,CAAA;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,MAAM,EACjB,gBAAgB,GAAE,gCAAqC,GACtD,MAAM,CAsKR;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,OAAe,EAC3B,gBAAgB,GAAE,gCAAqC,EACvD,YAAY,CAAC,EAAE,4BAA4B,GAC1C,MAAM,CAqJR"}
|
|
@@ -15,6 +15,7 @@ Object.defineProperty(exports, "generateRawQueryFetcher", { enumerable: true, ge
|
|
|
15
15
|
Object.defineProperty(exports, "parseQueryTemplateVariables", { enumerable: true, get: function () { return fetchers_1.parseQueryTemplateVariables; } });
|
|
16
16
|
var validation_1 = require("./validation");
|
|
17
17
|
var count_fetchers_1 = require("./count-fetchers");
|
|
18
|
+
var teleport_shared_1 = require("@teleporthq/teleport-shared");
|
|
18
19
|
var isSupabaseConnectionStringFallback = function (config) {
|
|
19
20
|
return !!(config === null || config === void 0 ? void 0 : config.connectionString) && !(config === null || config === void 0 ? void 0 : config.supabaseUrl);
|
|
20
21
|
};
|
|
@@ -47,7 +48,8 @@ var getDataSourceDependencies = function (type, config) {
|
|
|
47
48
|
return dependencyMap[type];
|
|
48
49
|
};
|
|
49
50
|
exports.getDataSourceDependencies = getDataSourceDependencies;
|
|
50
|
-
function generateDataSourceFetcher(dataSource, tableName,
|
|
51
|
+
function generateDataSourceFetcher(dataSource, tableName, transformOptions) {
|
|
52
|
+
if (transformOptions === void 0) { transformOptions = {}; }
|
|
51
53
|
if (!dataSource || typeof dataSource !== 'object') {
|
|
52
54
|
throw new Error('Invalid data source: data source must be a valid object');
|
|
53
55
|
}
|
|
@@ -180,7 +182,7 @@ function generateDataSourceFetcher(dataSource, tableName, categories) {
|
|
|
180
182
|
if (!validation.isValid) {
|
|
181
183
|
throw new Error("Teleport config validation failed: ".concat(validation.error));
|
|
182
184
|
}
|
|
183
|
-
return (0, fetchers_1.generateTeleportFetcher)(config, tableName,
|
|
185
|
+
return (0, fetchers_1.generateTeleportFetcher)(config, tableName, transformOptions);
|
|
184
186
|
}
|
|
185
187
|
default:
|
|
186
188
|
throw new Error("Unsupported data source type: ".concat(type));
|
|
@@ -197,9 +199,10 @@ exports.generateDataSourceFetcher = generateDataSourceFetcher;
|
|
|
197
199
|
* Generates a fetcher with both a core fetchData function (for server-side use in getStaticProps)
|
|
198
200
|
* and an API handler (for client-side use)
|
|
199
201
|
*/
|
|
200
|
-
function generateDataSourceFetcherWithCore(dataSource, tableName, isApiRoute,
|
|
202
|
+
function generateDataSourceFetcherWithCore(dataSource, tableName, isApiRoute, transformOptions, cacheOptions) {
|
|
201
203
|
if (isApiRoute === void 0) { isApiRoute = false; }
|
|
202
|
-
|
|
204
|
+
if (transformOptions === void 0) { transformOptions = {}; }
|
|
205
|
+
var apiHandler = generateDataSourceFetcher(dataSource, tableName, transformOptions);
|
|
203
206
|
// Extract the handler function body from the API route
|
|
204
207
|
// The API route is structured as: export default async function handler(req, res) { ... }
|
|
205
208
|
// We need to create a fetchData function that can be called directly
|
|
@@ -215,12 +218,52 @@ function generateDataSourceFetcherWithCore(dataSource, tableName, isApiRoute, ca
|
|
|
215
218
|
var countFetcherWithoutImports = countFetcherCode.replace(importRegex, '').trim();
|
|
216
219
|
// Combine and deduplicate imports
|
|
217
220
|
var allImports = Array.from(new Set(__spreadArray(__spreadArray([], imports, true), countImports, true)));
|
|
221
|
+
// Caching is applied HERE rather than in the API route because four separate
|
|
222
|
+
// places emit an `api/<file>` route and a fifth path (`getStaticProps` →
|
|
223
|
+
// `fetchData` → `handler`) never goes through a route at all. Wrapping the
|
|
224
|
+
// module's exports is the one point that covers all five, and leaves every
|
|
225
|
+
// route emitter untouched.
|
|
226
|
+
//
|
|
227
|
+
// The import depth differs by destination: this module is written to
|
|
228
|
+
// `utils/data-sources/` normally, but the `isApiRoute` variant is inlined
|
|
229
|
+
// straight into `pages/api/`.
|
|
230
|
+
var cachePreamble = cacheOptions
|
|
231
|
+
? "import { tqWithCache } from '".concat(isApiRoute ? '../../' : '../', "tq-cache/server'")
|
|
232
|
+
: '';
|
|
233
|
+
var cacheWiring = cacheOptions
|
|
234
|
+
? "\nconst __tqDataCache = ".concat(JSON.stringify({
|
|
235
|
+
scope: cacheOptions.scope,
|
|
236
|
+
ttl: cacheOptions.ttlSeconds,
|
|
237
|
+
sMaxAge: cacheOptions.sMaxAge || 0,
|
|
238
|
+
swr: cacheOptions.staleWhileRevalidate || 0,
|
|
239
|
+
}), "\nconst __tqCountCache = ").concat(JSON.stringify({
|
|
240
|
+
scope: teleport_shared_1.DataCache.countScopeFor(cacheOptions.scope),
|
|
241
|
+
// Its OWN keyspace, but the DATA scope's version row. A write bumps one
|
|
242
|
+
// row; if the count kept a separate version nothing would ever bump it,
|
|
243
|
+
// and the total would stay stale after every create and delete — the
|
|
244
|
+
// grid showing one more row than the pager counts.
|
|
245
|
+
versionScope: cacheOptions.scope,
|
|
246
|
+
ttl: cacheOptions.ttlSeconds,
|
|
247
|
+
sMaxAge: cacheOptions.sMaxAge || 0,
|
|
248
|
+
swr: cacheOptions.staleWhileRevalidate || 0,
|
|
249
|
+
}), "\n\nconst cachedHandler = tqWithCache(handler, __tqDataCache)\nconst cachedGetCount = tqWithCache(getCount, __tqCountCache)\n")
|
|
250
|
+
: '';
|
|
251
|
+
var handlerExport = cacheOptions ? 'cachedHandler' : 'handler';
|
|
252
|
+
var countExport = cacheOptions ? 'cachedGetCount' : 'getCount';
|
|
218
253
|
// For API routes, export just the handler function
|
|
219
254
|
// For utils files, export the full object with all functions
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
255
|
+
//
|
|
256
|
+
// The uncached branch is spelled out verbatim rather than interpolated, so an
|
|
257
|
+
// uncached project keeps generating byte-identical output — `handler as
|
|
258
|
+
// handler` would be harmless at runtime and still a diff in every snapshot.
|
|
259
|
+
var exports = !cacheOptions
|
|
260
|
+
? isApiRoute
|
|
261
|
+
? 'export default handler'
|
|
262
|
+
: "export { fetchData, fetchCount, handler, getCount }\nexport default { fetchData, fetchCount, handler, getCount }"
|
|
263
|
+
: isApiRoute
|
|
264
|
+
? "export default ".concat(handlerExport)
|
|
265
|
+
: "export { fetchData, fetchCount, ".concat(handlerExport, " as handler, ").concat(countExport, " as getCount }\nexport default { fetchData, fetchCount, handler: ").concat(handlerExport, ", getCount: ").concat(countExport, " }");
|
|
266
|
+
return "".concat(__spreadArray(__spreadArray([], allImports, true), [cachePreamble], false).filter(Boolean).join('\n'), "\n\nasync function fetchData(params = {}) {\n const req = {\n query: params,\n method: 'GET',\n }\n \n let result = null\n let statusCode = 200\n \n const res = {\n status: (code) => {\n statusCode = code\n return res\n },\n json: (data) => {\n result = data\n return res\n },\n }\n \n await ").concat(handlerExport, "(req, res)\n \n if (statusCode !== 200 || !result || !result.success) {\n throw new Error(result?.error || 'Failed to fetch data')\n }\n \n return result.data\n}\n\nasync function fetchCount(params = {}) {\n const req = {\n query: params,\n method: 'GET',\n }\n \n let result = null\n let statusCode = 200\n \n const res = {\n status: (code) => {\n statusCode = code\n return res\n },\n json: (data) => {\n result = data\n return res\n },\n }\n \n await ").concat(countExport, "(req, res)\n \n if (statusCode !== 200 || !result || !result.success) {\n throw new Error(result?.error || 'Failed to get count')\n }\n \n return result.count\n}\n\n").concat(countFetcherWithoutImports, "\n\n").concat(handlerWithoutImports, "\n").concat(cacheWiring, "\n").concat(exports, "\n");
|
|
224
267
|
}
|
|
225
268
|
exports.generateDataSourceFetcherWithCore = generateDataSourceFetcherWithCore;
|
|
226
269
|
//# sourceMappingURL=data-source-fetchers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-source-fetchers.js","sourceRoot":"","sources":["../../src/data-source-fetchers.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,uCA+BmB;
|
|
1
|
+
{"version":3,"file":"data-source-fetchers.js","sourceRoot":"","sources":["../../src/data-source-fetchers.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,uCA+BmB;AAOV,wGATP,kCAAuB,OASO;AAAE,4GARhC,sCAA2B,OAQgC;AAN7D,2CAAqD;AACrD,mDAAuD;AAEvD,+DAAuD;AAUhD,IAAM,kCAAkC,GAAG,UAAC,MAA+B;IAChF,OAAO,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAA,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,CAAA;AAC3D,CAAC,CAAA;AAFY,QAAA,kCAAkC,sCAE9C;AAEM,IAAM,yBAAyB,GAAG,UACvC,IAAoB,EACpB,MAAgC;IAEhC,yDAAyD;IACzD,IAAI,IAAI,KAAK,UAAU,IAAI,MAAM,IAAI,IAAA,0CAAkC,EAAC,MAAM,CAAC,EAAE;QAC/E,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAA;KACpD;IAED,IAAM,aAAa,GAA0D;QAC3E,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE;QAC/D,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QACxD,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QACvD,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QAC1D,iBAAiB,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QAC/D,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QAC1D,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QACzD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QACtD,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QACtD,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QACnE,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,oBAAoB,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QACxE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE;QAC7D,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,uBAAuB,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QACzE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;QAC/D,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE;QACpD,eAAe,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE;QACpE,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE;QACpD,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE;KACvD,CAAA;IAED,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC,CAAA;AA/BY,QAAA,yBAAyB,6BA+BrC;AAED,SAAgB,yBAAyB,CACvC,UAA0B,EAC1B,SAAiB,EACjB,gBAAuD;IAAvD,iCAAA,EAAA,qBAAuD;IAEvD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QACjD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;KAC3E;IAEO,IAAA,IAAI,GAAa,UAAU,KAAvB,EAAE,MAAM,GAAK,UAAU,OAAf,CAAe;IAEnC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACrC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;KAC9E;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QACzC,MAAM,IAAI,KAAK,CAAC,sDAA+C,IAAI,CAAE,CAAC,CAAA;KACvE;IAED,IAAI;QACF,QAAQ,IAAI,EAAE;YACZ,KAAK,YAAY,CAAC;YAClB,KAAK,aAAa,CAAC,CAAC;gBAClB,IAAM,UAAU,GAAG,IAAA,mCAAsB,EAAC,MAAM,CAAC,CAAA;gBACjD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,2DAAoD,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBACxF;gBACD,OAAO,IAAA,oCAAyB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;aACpD;YAED,KAAK,OAAO,CAAC;YACb,KAAK,MAAM,CAAC,CAAC;gBACX,IAAM,UAAU,GAAG,IAAA,mCAAsB,EAAC,MAAM,CAAC,CAAA;gBACjD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,+CAAwC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBAC5E;gBACD,OAAO,IAAA,+BAAoB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;aAC/C;YAED,KAAK,SAAS,CAAC,CAAC;gBACd,IAAM,UAAU,GAAG,IAAA,mCAAsB,EAAC,MAAM,CAAC,CAAA;gBACjD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,4CAAqC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBACzE;gBACD,OAAO,IAAA,iCAAsB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;aACjD;YAED,KAAK,iBAAiB,CAAC,CAAC;gBACtB,IAAM,UAAU,GAAG,IAAA,mCAAsB,EAAC,MAAM,CAAC,CAAA;gBACjD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,oDAA6C,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBACjF;gBACD,OAAO,IAAA,kCAAuB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;aAClD;YAED,KAAK,SAAS,CAAC,CAAC;gBACd,IAAM,UAAU,GAAG,IAAA,gCAAqB,EAAC,MAAM,CAAC,CAAA;gBAChD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,4CAAqC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBACzE;gBACD,OAAO,IAAA,iCAAsB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;aACjD;YAED,KAAK,OAAO,CAAC,CAAC;gBACZ,IAAM,UAAU,GAAG,IAAA,8BAAmB,EAAC,MAAM,CAAC,CAAA;gBAC9C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,0CAAmC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBACvE;gBACD,OAAO,IAAA,+BAAoB,EAAC,MAAM,CAAC,CAAA;aACpC;YAED,KAAK,WAAW,CAAC,CAAC;gBAChB,IAAM,UAAU,GAAG,IAAA,kCAAuB,EAAC,MAAM,CAAC,CAAA;gBAClD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,8CAAuC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBAC3E;gBACD,OAAO,IAAA,mCAAwB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;aACnD;YAED,KAAK,YAAY,CAAC,CAAC;gBACjB,IAAM,UAAU,GAAG,IAAA,mCAAwB,EAAC,MAAM,CAAC,CAAA;gBACnD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,+CAAwC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBAC5E;gBACD,OAAO,IAAA,oCAAyB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;aACpD;YAED,KAAK,UAAU,CAAC,CAAC;gBACf,IAAM,UAAU,GAAG,IAAA,iCAAsB,EAAC,MAAM,CAAC,CAAA;gBACjD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,6CAAsC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBAC1E;gBACD,OAAO,IAAA,kCAAuB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;aAClD;YAED,KAAK,UAAU,CAAC,CAAC;gBACf,uFAAuF;gBACvF,IAAI,IAAA,0CAAkC,EAAC,MAAM,CAAC,EAAE;oBAC9C,IAAM,YAAY,GAAG,IAAA,mCAAsB,EAAC,MAAM,CAAC,CAAA;oBACnD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;wBACzB,MAAM,IAAI,KAAK,CACb,mEAA4D,YAAY,CAAC,KAAK,CAAE,CACjF,CAAA;qBACF;oBACD,OAAO,IAAA,oCAAyB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;iBACpD;gBAED,IAAM,UAAU,GAAG,IAAA,iCAAsB,EAAC,MAAM,CAAC,CAAA;gBACjD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,6CAAsC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBAC1E;gBACD,OAAO,IAAA,kCAAuB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;aAClD;YAED,KAAK,OAAO,CAAC,CAAC;gBACZ,IAAM,UAAU,GAAG,IAAA,8BAAmB,EAAC,MAAM,CAAC,CAAA;gBAC9C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,0CAAmC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBACvE;gBACD,OAAO,IAAA,+BAAoB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;aAC/C;YAED,KAAK,UAAU,CAAC,CAAC;gBACf,IAAM,UAAU,GAAG,IAAA,gCAAqB,EAAC,MAAM,CAAC,CAAA;gBAChD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,6CAAsC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBAC1E;gBACD,OAAO,IAAA,iCAAsB,EAAC,MAAM,CAAC,CAAA;aACtC;YAED,KAAK,YAAY,CAAC,CAAC;gBACjB,IAAM,UAAU,GAAG,IAAA,mCAAwB,EAAC,MAAM,CAAC,CAAA;gBACnD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,+CAAwC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBAC5E;gBACD,OAAO,IAAA,oCAAyB,EAAC,MAAM,CAAC,CAAA;aACzC;YAED,KAAK,UAAU,CAAC,CAAC;gBACf,IAAM,UAAU,GAAG,IAAA,4BAAiB,EAAC,MAAM,CAAC,CAAA;gBAC5C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,wCAAiC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBACrE;gBACD,OAAO,IAAA,iCAAsB,EAAC,MAAM,CAAC,CAAA;aACtC;YAED,KAAK,eAAe,CAAC,CAAC;gBACpB,IAAM,UAAU,GAAG,IAAA,qCAA0B,EAAC,MAAM,CAAC,CAAA;gBACrD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,kDAA2C,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBAC/E;gBACD,OAAO,IAAA,sCAA2B,EAAC,MAAM,CAAC,CAAA;aAC3C;YAED,KAAK,UAAU,CAAC,CAAC;gBACf,IAAM,UAAU,GAAG,IAAA,iCAAsB,EAAC,MAAM,CAAC,CAAA;gBACjD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,6CAAsC,UAAU,CAAC,KAAK,CAAE,CAAC,CAAA;iBAC1E;gBACD,OAAO,IAAA,kCAAuB,EAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAA;aACpE;YAED;gBACE,MAAM,IAAI,KAAK,CAAC,wCAAiC,IAAI,CAAE,CAAC,CAAA;SAC3D;KACF;IAAC,OAAO,KAAK,EAAE;QACd,6BAA6B;QAC7B,IAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;QAC7E,MAAM,IAAI,KAAK,CAAC,yCAAkC,IAAI,eAAK,YAAY,CAAE,CAAC,CAAA;KAC3E;AACH,CAAC;AA1KD,8DA0KC;AAED;;;GAGG;AACH,SAAgB,iCAAiC,CAC/C,UAA0B,EAC1B,SAAiB,EACjB,UAA2B,EAC3B,gBAAuD,EACvD,YAA2C;IAF3C,2BAAA,EAAA,kBAA2B;IAC3B,iCAAA,EAAA,qBAAuD;IAGvD,IAAM,UAAU,GAAG,yBAAyB,CAAC,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAA;IAErF,uDAAuD;IACvD,0FAA0F;IAC1F,qEAAqE;IAErE,0EAA0E;IAC1E,IAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CACpC,uCAAuC,EACvC,wBAAwB,CACzB,CAAA;IAED,+DAA+D;IAC/D,IAAM,WAAW,GAAG,kBAAkB,CAAA;IACtC,IAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;IACpD,IAAM,qBAAqB,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAEzE,sDAAsD;IACtD,IAAM,gBAAgB,GAAG,IAAA,qCAAoB,EAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IACpE,IAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;IAC9D,IAAM,0BAA0B,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAEnF,kCAAkC;IAClC,IAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,iCAAK,OAAO,SAAK,YAAY,QAAE,CAAC,CAAA;IAErE,6EAA6E;IAC7E,yEAAyE;IACzE,2EAA2E;IAC3E,2EAA2E;IAC3E,2BAA2B;IAC3B,EAAE;IACF,qEAAqE;IACrE,0EAA0E;IAC1E,8BAA8B;IAC9B,IAAM,aAAa,GAAG,YAAY;QAChC,CAAC,CAAC,uCAAgC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,qBAAkB;QACjF,CAAC,CAAC,EAAE,CAAA;IAEN,IAAM,WAAW,GAAG,YAAY;QAC9B,CAAC,CAAC,kCACkB,IAAI,CAAC,SAAS,CAAC;YAC/B,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,GAAG,EAAE,YAAY,CAAC,UAAU;YAC5B,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,CAAC;YAClC,GAAG,EAAE,YAAY,CAAC,oBAAoB,IAAI,CAAC;SAC5C,CAAC,sCACiB,IAAI,CAAC,SAAS,CAAC;YAChC,KAAK,EAAE,2BAAS,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC;YAClD,wEAAwE;YACxE,wEAAwE;YACxE,qEAAqE;YACrE,mDAAmD;YACnD,YAAY,EAAE,YAAY,CAAC,KAAK;YAChC,GAAG,EAAE,YAAY,CAAC,UAAU;YAC5B,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,CAAC;YAClC,GAAG,EAAE,YAAY,CAAC,oBAAoB,IAAI,CAAC;SAC5C,CAAC,kIAIP;QACG,CAAC,CAAC,EAAE,CAAA;IAEN,IAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAA;IAChE,IAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAA;IAEhE,mDAAmD;IACnD,6DAA6D;IAC7D,EAAE;IACF,8EAA8E;IAC9E,wEAAwE;IACxE,4EAA4E;IAC5E,IAAM,OAAO,GAAG,CAAC,YAAY;QAC3B,CAAC,CAAC,UAAU;YACV,CAAC,CAAC,wBAAwB;YAC1B,CAAC,CAAC,kHACoD;QACxD,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,yBAAkB,aAAa,CAAE;YACnC,CAAC,CAAC,0CAAmC,aAAa,0BAAgB,WAAW,8EAC9B,aAAa,yBAAe,WAAW,OAAI,CAAA;IAE5F,OAAO,UAAG,gCAAI,UAAU,UAAE,aAAa,UAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iWAsB3D,aAAa,2gBA6Bb,WAAW,0LASnB,0BAA0B,iBAE1B,qBAAqB,eACrB,WAAW,eACX,OAAO,OACR,CAAA;AACD,CAAC;AA3JD,8EA2JC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type EcommerceProductTransformOptions } from '../transformations';
|
|
2
2
|
export declare const validateTeleportConfig: (config: Record<string, unknown>) => {
|
|
3
3
|
isValid: boolean;
|
|
4
4
|
error?: string;
|
|
5
5
|
};
|
|
6
|
-
export declare const generateTeleportFetcher: (config: Record<string, unknown>, tableName: string,
|
|
6
|
+
export declare const generateTeleportFetcher: (config: Record<string, unknown>, tableName: string, transformOptions?: EcommerceProductTransformOptions) => string;
|
|
7
7
|
export declare const generateTeleportCountFetcher: (config: Record<string, unknown>, tableName: string) => string;
|
|
8
8
|
//# sourceMappingURL=teleport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teleport.d.ts","sourceRoot":"","sources":["../../../src/fetchers/teleport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"teleport.d.ts","sourceRoot":"","sources":["../../../src/fetchers/teleport.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,gCAAgC,EACtC,MAAM,oBAAoB,CAAA;AA8B3B,eAAO,MAAM,sBAAsB,WACzB,OAAO,MAAM,EAAE,OAAO,CAAC,KAC9B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAMpC,CAAA;AAED,eAAO,MAAM,uBAAuB,WAC1B,OAAO,MAAM,EAAE,OAAO,CAAC,aACpB,MAAM,qBACC,gCAAgC,KACjD,MAiXF,CAAA;AAED,eAAO,MAAM,4BAA4B,WAC/B,OAAO,MAAM,EAAE,OAAO,CAAC,aACpB,MAAM,KAChB,MA0FF,CAAA"}
|
|
@@ -24,8 +24,9 @@ var validateTeleportConfig = function (config) {
|
|
|
24
24
|
return { isValid: true };
|
|
25
25
|
};
|
|
26
26
|
exports.validateTeleportConfig = validateTeleportConfig;
|
|
27
|
-
var generateTeleportFetcher = function (config, tableName,
|
|
27
|
+
var generateTeleportFetcher = function (config, tableName, transformOptions) {
|
|
28
28
|
var _a;
|
|
29
|
+
if (transformOptions === void 0) { transformOptions = {}; }
|
|
29
30
|
var dbConfig = config;
|
|
30
31
|
var schema = (_a = dbConfig.options) === null || _a === void 0 ? void 0 : _a.schema;
|
|
31
32
|
var hostRef = resolveEnvReference(dbConfig.host, DEFAULT_ENV_KEYS.host);
|
|
@@ -44,7 +45,7 @@ var generateTeleportFetcher = function (config, tableName, categories) {
|
|
|
44
45
|
? "key: ".concat(resolveEnvReference(dbConfig.sslConfig.key, 'TELEPORT_DB_SSL_KEY'), ",")
|
|
45
46
|
: '', "\n rejectUnauthorized: false\n }")
|
|
46
47
|
: "(process.env.".concat(DEFAULT_ENV_KEYS.ssl, " === 'false' ? false : process.env.").concat(DEFAULT_ENV_KEYS.ssl, " === 'true' ? { rejectUnauthorized: false } : undefined)");
|
|
47
|
-
return "import { Client } from 'pg'\n\nfunction normalizePostgresConnectionString(connectionString) {\n if (!connectionString || typeof connectionString !== 'string') return connectionString;\n if (/^postgresql:\\/(?!\\/)/i.test(connectionString)) {\n return connectionString.replace(/^postgresql:\\//i, 'postgresql://');\n }\n return connectionString;\n}\n\nfunction stripSslQueryParamsFromConnectionString(connectionString) {\n if (!connectionString || typeof connectionString !== 'string') return connectionString;\n try {\n var u = new URL(connectionString.replace(/^postgresql:/i, 'postgres:'));\n u.searchParams.delete('sslmode');\n u.searchParams.delete('ssl');\n u.searchParams.delete('sslrootcert');\n u.searchParams.delete('sslcert');\n u.searchParams.delete('sslkey');\n return u.toString().replace(/^postgres:/i, 'postgresql:');\n } catch (e) {\n return connectionString;\n }\n}\n\nconst getClient = () => {\n var ssl = ".concat(sslCode, ";\n var connStr = process.env.TELEPORT_DB_CONNECTION_STRING;\n if (connStr) {\n connStr = normalizePostgresConnectionString(connStr);\n }\n if (ssl === false && connStr) {\n connStr = stripSslQueryParamsFromConnectionString(connStr);\n }\n if (connStr) {\n return new Client(Object.assign(\n { connectionString: connStr },\n ssl !== undefined ? { ssl: ssl } : {}\n ));\n }\n return new Client(Object.assign(\n {\n host: ").concat(hostRef, ",\n port: parseInt(").concat(portRef, " || '5432', 10),\n user: ").concat(userRef, ",\n password: ").concat(passwordRef, ",\n database: ").concat(databaseRef, ",\n },\n ssl !== undefined ? { ssl: ssl } : {}\n ));\n}\n\n").concat((0, utils_1.generateSafeJSONParseCode)(), "\n\n").concat((0, utils_1.generateSearchEscapeHelpersCode)(), "\n").concat((0, transformations_1.getTransformationCode)(tableName,
|
|
48
|
+
return "import { Client } from 'pg'\n\nfunction normalizePostgresConnectionString(connectionString) {\n if (!connectionString || typeof connectionString !== 'string') return connectionString;\n if (/^postgresql:\\/(?!\\/)/i.test(connectionString)) {\n return connectionString.replace(/^postgresql:\\//i, 'postgresql://');\n }\n return connectionString;\n}\n\nfunction stripSslQueryParamsFromConnectionString(connectionString) {\n if (!connectionString || typeof connectionString !== 'string') return connectionString;\n try {\n var u = new URL(connectionString.replace(/^postgresql:/i, 'postgres:'));\n u.searchParams.delete('sslmode');\n u.searchParams.delete('ssl');\n u.searchParams.delete('sslrootcert');\n u.searchParams.delete('sslcert');\n u.searchParams.delete('sslkey');\n return u.toString().replace(/^postgres:/i, 'postgresql:');\n } catch (e) {\n return connectionString;\n }\n}\n\nconst getClient = () => {\n var ssl = ".concat(sslCode, ";\n var connStr = process.env.TELEPORT_DB_CONNECTION_STRING;\n if (connStr) {\n connStr = normalizePostgresConnectionString(connStr);\n }\n if (ssl === false && connStr) {\n connStr = stripSslQueryParamsFromConnectionString(connStr);\n }\n if (connStr) {\n return new Client(Object.assign(\n { connectionString: connStr },\n ssl !== undefined ? { ssl: ssl } : {}\n ));\n }\n return new Client(Object.assign(\n {\n host: ").concat(hostRef, ",\n port: parseInt(").concat(portRef, " || '5432', 10),\n user: ").concat(userRef, ",\n password: ").concat(passwordRef, ",\n database: ").concat(databaseRef, ",\n },\n ssl !== undefined ? { ssl: ssl } : {}\n ));\n}\n\n").concat((0, utils_1.generateSafeJSONParseCode)(), "\n\n").concat((0, utils_1.generateSearchEscapeHelpersCode)(), "\n").concat((0, transformations_1.getTransformationCode)(tableName, transformOptions), "\n").concat((0, transformations_1.getTransformWrapperCode)(tableName), "\nconst processFilters = (filters, conditions, queryParams, paramIndex) => {\n if (!filters) return paramIndex\n \n const parsedFilters = safeJSONParse(filters)\n \n if (Array.isArray(parsedFilters)) {\n parsedFilters.forEach((filter) => {\n if (!filter.source || filter.destination === undefined) return\n \n const field = filter.source\n const value = filter.destination\n const operand = filter.operand || '='\n \n if (Array.isArray(value)) {\n if (value.length === 0) return\n if (operand === 'array_overlap') {\n // Row column is a JSON array (e.g. category_ids). Match when it\n // shares any element with the destination set. jsonb ?| (function\n // form) avoids the '?' placeholder-token ambiguity some drivers hit.\n conditions.push(`jsonb_exists_any(NULLIF(${field}, '')::jsonb, $${paramIndex}::text[])`)\n queryParams.push(value.map((entry) => String(entry)))\n paramIndex++\n return\n }\n const placeholders = value.map(() => `$${paramIndex++}`)\n queryParams.push(...value)\n if (operand === '!=') {\n conditions.push(`${field} NOT IN (${placeholders.join(', ')})`)\n } else {\n conditions.push(`${field} IN (${placeholders.join(', ')})`)\n }\n } else {\n if (operand === 'array_overlap') {\n if (value === '' || value === null || value === undefined) return\n // A single comma-joined string (the multi-select Category Filter's\n // ?categoryFilter=a,b,c) expands to multiple ids; one id stays one.\n const overlapValues = String(value).split(',').map((entry) => entry.trim()).filter(Boolean)\n if (overlapValues.length === 0) return\n conditions.push(`jsonb_exists_any(NULLIF(${field}, '')::jsonb, $${paramIndex}::text[])`)\n queryParams.push(overlapValues)\n paramIndex++\n return\n }\n if (value === null) {\n if (operand === '=') {\n conditions.push(`${field} IS NULL`)\n } else if (operand === '!=') {\n conditions.push(`${field} IS NOT NULL`)\n }\n } else {\n const validOps = ['=', '!=', '>', '<', '>=', '<=']\n const sqlOperator = validOps.includes(operand) ? operand : '='\n conditions.push(`${field} ${sqlOperator} $${paramIndex}`)\n queryParams.push(value)\n paramIndex++\n }\n }\n })\n } else {\n Object.entries(parsedFilters).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n const placeholders = value.map(() => `$${paramIndex++}`)\n queryParams.push(...value)\n conditions.push(`${key} IN (${placeholders.join(', ')})`)\n } else {\n conditions.push(`${key} = $${paramIndex}`)\n queryParams.push(value)\n paramIndex++\n }\n })\n }\n \n return paramIndex\n}\n\n").concat((0, utils_1.generateDateFormatterCode)(), "\n\n// Matches DDL / dangerous statements the raw-query branch should refuse.\n// Keep this list conservative \u2014 anything destructive or schema-changing is\n// out of scope for a client-triggered fetch. SELECT and CTEs (WITH ...) are\n// the only shapes consumers legitimately need.\nconst BLOCKED_RAW_QUERY_PATTERNS = [\n /\\bcreate\\s+(?:temporary\\s+|temp\\s+|unlogged\\s+|global\\s+|local\\s+)?table\\b/i,\n /\\bcreate\\s+(?:unique\\s+)?index\\b/i,\n /\\bcreate\\s+(?:or\\s+replace\\s+)?(?:materialized\\s+)?view\\b/i,\n /\\bcreate\\s+(?:or\\s+replace\\s+)?trigger\\b/i,\n /\\bcreate\\s+(?:or\\s+replace\\s+)?(?:aggregate\\s+)?function\\b/i,\n /\\bcreate\\s+(?:or\\s+replace\\s+)?procedure\\b/i,\n /\\bcreate\\s+(?:database|schema|sequence|extension|type|role|user)\\b/i,\n /\\bdrop\\s+(?:table|view|index|schema|database|sequence|trigger|function|procedure|role|user|extension|type|materialized)\\b/i,\n /\\balter\\s+(?:table|view|index|schema|database|sequence|role|user|system)\\b/i,\n /\\btruncate\\b/i,\n /\\bgrant\\b/i,\n /\\brevoke\\b/i,\n /\\binsert\\b/i,\n /\\bupdate\\b/i,\n /\\bdelete\\b/i,\n /\\bcopy\\b/i,\n /\\bvacuum\\b/i,\n /\\breindex\\b/i,\n /\\bcluster\\b/i,\n]\n\nfunction assertRawQuerySafe(rawQuery) {\n if (typeof rawQuery !== 'string' || rawQuery.length === 0) {\n throw new Error('rawQuery must be a non-empty string')\n }\n // Reject multi-statement payloads \u2014 only single SELECT / WITH statements.\n // A trailing semicolon is tolerated but any content after it fails.\n var trimmed = rawQuery.trim().replace(/;\\s*$/, '')\n if (trimmed.indexOf(';') !== -1) {\n throw new Error('rawQuery must contain exactly one statement')\n }\n for (var i = 0; i < BLOCKED_RAW_QUERY_PATTERNS.length; i++) {\n if (BLOCKED_RAW_QUERY_PATTERNS[i].test(trimmed)) {\n throw new Error('rawQuery contains a blocked statement')\n }\n }\n}\n\nexport default async function handler(req, res) {\n const client = getClient()\n\n try {\n await client.connect()\n ").concat(schema ? "await client.query('SET search_path TO ".concat(schema, "')") : '', "\n\n // If the caller supplied a rawQuery, run it verbatim (after a safety\n // guard). The schema-driven branch below builds `SELECT * FROM ").concat(tableName, "`\n // with optional filters \u2014 it's the default read path and ignores\n // rawQuery. Page-load workflows and other consumers that need a JOIN\n // or a user-scoped filter pass their fully-rendered SQL here via\n // `fetchData({ rawQuery })` and expect it to execute verbatim.\n if (req.query && typeof req.query.rawQuery === 'string' && req.query.rawQuery.length > 0) {\n assertRawQuerySafe(req.query.rawQuery)\n const rawResult = await client.query(req.query.rawQuery)\n const rawRows = Array.isArray(rawResult?.rows) ? rawResult.rows : []\n const rawPlain = rawRows.map((row) =>\n row && typeof row.toJSON === 'function' ? row.toJSON() : row\n )\n const rawSafe = JSON.parse(JSON.stringify(rawPlain, dateReplacer))\n return res.status(200).json({\n success: true,\n data: rawSafe,\n timestamp: Date.now()\n })\n }\n\n const { query, queryColumns, limit, page, perPage, sortBy, sortOrder, filters, sorts, offset } = req.query\n \n const conditions = []\n const queryParams = []\n let paramIndex = 1\n \n if (query) {\n let columns = []\n \n if (queryColumns) {\n const parsed = safeJSONParse(queryColumns)\n columns = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : [])\n } else {\n try {\n const schemaQuery = `\n SELECT column_name \n FROM information_schema.columns \n WHERE table_name = $1\n ").concat(schema ? "AND table_schema = $2" : '', "\n ORDER BY ordinal_position\n `\n const schemaParams = ").concat(schema
|
|
48
49
|
? "[".concat(JSON.stringify(tableName), ", ").concat(JSON.stringify(schema), "]")
|
|
49
50
|
: "[".concat(JSON.stringify(tableName), "]"), "\n \n const schemaResult = await client.query(schemaQuery, schemaParams)\n columns = schemaResult.rows.map(row => row.column_name)\n } catch (schemaError) {\n console.warn('Failed to fetch column names from information_schema:', schemaError.message)\n }\n }\n \n if (columns.length > 0) {\n const pattern = '%' + escapeLikePattern(query) + '%'\n const placeholder = '$' + paramIndex\n paramIndex++\n queryParams.push(pattern)\n const searchConditions = columns.map(\n (col) => '\"' + sanitizeSearchIdentifier(col) + '\"::text ILIKE ' + placeholder + \" ESCAPE '|'\"\n )\n conditions.push('(' + searchConditions.join(' OR ') + ')')\n }\n }\n \n paramIndex = processFilters(filters, conditions, queryParams, paramIndex)\n \n let sql = `SELECT * FROM ").concat(tableName, "`\n \n if (conditions.length > 0) {\n sql += ` WHERE ${conditions.join(' AND ')}`\n }\n \n if (sorts) {\n const parsedSorts = safeJSONParse(sorts)\n if (Array.isArray(parsedSorts) && parsedSorts.length > 0) {\n const orderClauses = parsedSorts.map((sort) => {\n if (!sort.field) return null\n const order = (sort.order || '').toUpperCase().startsWith('DESC') ? 'DESC' : 'ASC'\n return `${sort.field} ${order}`\n }).filter(Boolean)\n\n if (orderClauses.length > 0) {\n sql += ` ORDER BY ${orderClauses.join(', ')}`\n }\n }\n } else if (sortBy) {\n sql += ` ORDER BY ${sortBy} ${(sortOrder || '').toUpperCase().startsWith('DESC') ? 'DESC' : 'ASC'}`\n }\n \n const limitValue = limit || perPage\n const offsetValue = offset !== undefined ? parseInt(offset) : (page && perPage ? (parseInt(page) - 1) * parseInt(perPage) : undefined)\n \n if (limitValue) {\n sql += ` LIMIT ${limitValue}`\n }\n \n if (offsetValue !== undefined) {\n sql += ` OFFSET ${offsetValue}`\n }\n \n const result = await client.query(sql, queryParams)\n const rows = Array.isArray(result?.rows) ? result.rows : []\n const plainRows = rows.map((row) =>\n row && typeof row.toJSON === 'function' ? row.toJSON() : row\n )\n const safeData = JSON.parse(JSON.stringify(plainRows, dateReplacer))\n ").concat((0, transformations_1.getTransformExpression)(tableName)
|
|
50
51
|
? "const transformedData = ".concat((0, transformations_1.getTransformExpression)(tableName))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teleport.js","sourceRoot":"","sources":["../../../src/fetchers/teleport.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"teleport.js","sourceRoot":"","sources":["../../../src/fetchers/teleport.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -6,4 +6,6 @@ export * from './utils';
|
|
|
6
6
|
export * from './array-mapper-pagination';
|
|
7
7
|
export * from './pagination-plugin';
|
|
8
8
|
export * from './count-fetchers';
|
|
9
|
+
export { buildProductTransformOptions } from './transformations';
|
|
10
|
+
export type { EcommerceProductTransformOptions } from './transformations';
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,EAKvB,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,EAKvB,MAAM,4BAA4B,CAAA;AA+anC,eAAO,MAAM,+BAA+B,EAAE,sBAAsB,CAAC,EAAE,CA8etE,CAAA;AAiOD,eAAO,MAAM,mCAAmC,EAAE,sBAAsB,CAAC,EAAE,CA6O1E,CAAA;AAED,cAAc,wBAAwB,CAAA;AACtC,cAAc,SAAS,CAAA;AACvB,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAIhC,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAChE,YAAY,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -62,11 +62,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
64
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
65
|
-
exports.createNextComponentDataSourcePlugin = exports.createNextPagesDataSourcePlugin = void 0;
|
|
65
|
+
exports.buildProductTransformOptions = exports.createNextComponentDataSourcePlugin = exports.createNextPagesDataSourcePlugin = void 0;
|
|
66
66
|
var teleport_types_1 = require("@teleporthq/teleport-types");
|
|
67
67
|
var teleport_shared_1 = require("@teleporthq/teleport-shared");
|
|
68
68
|
var utils_1 = require("./utils");
|
|
69
69
|
var pagination_plugin_1 = require("./pagination-plugin");
|
|
70
|
+
var transformations_1 = require("./transformations");
|
|
70
71
|
var isr_1 = require("./isr");
|
|
71
72
|
var types = __importStar(require("@babel/types"));
|
|
72
73
|
// Prefix used to clearly differentiate wrapped data source expression props
|
|
@@ -363,7 +364,7 @@ var createNextPagesDataSourcePlugin = function () {
|
|
|
363
364
|
// Data source nodes can be either:
|
|
364
365
|
// 1. Direct: node.type === 'data-source-item' or 'data-source-list'
|
|
365
366
|
// 2. Wrapped in element: node.type === 'element' && node.content.type === 'data-source-item' or 'data-source-list'
|
|
366
|
-
var _a, _b, _c
|
|
367
|
+
var _a, _b, _c;
|
|
367
368
|
var dataSourceNode = null;
|
|
368
369
|
if (node.type === 'data-source-item' || node.type === 'data-source-list') {
|
|
369
370
|
// Direct data source node
|
|
@@ -447,7 +448,7 @@ var createNextPagesDataSourcePlugin = function () {
|
|
|
447
448
|
// When multiple nodes share the same dataSourceKey (same resource ID), the function is
|
|
448
449
|
// idempotent for getStaticProps (skips duplicate fetches via existingInFetchMeta) but
|
|
449
450
|
// still updates the next uninitialized DataProvider JSX node on each call.
|
|
450
|
-
var result = (0, utils_1.extractDataSourceIntoGetStaticProps)(dataSourceNode, dataSources, componentChunk, getStaticPropsChunk, chunks, options.extractedResources, dependencies, dynamicRouteAttr, (_c = uidl.outputOptions) === null || _c === void 0 ? void 0 : _c.folderPath, (
|
|
451
|
+
var result = (0, utils_1.extractDataSourceIntoGetStaticProps)(dataSourceNode, dataSources, componentChunk, getStaticPropsChunk, chunks, options.extractedResources, dependencies, dynamicRouteAttr, (_c = uidl.outputOptions) === null || _c === void 0 ? void 0 : _c.folderPath, (0, transformations_1.buildProductTransformOptions)(options));
|
|
451
452
|
if (result.success && result.chunk) {
|
|
452
453
|
getStaticPropsChunk = result.chunk;
|
|
453
454
|
// Track the first data source info for wrapping dataSourceData expressions
|
|
@@ -470,7 +471,7 @@ var createNextPagesDataSourcePlugin = function () {
|
|
|
470
471
|
}
|
|
471
472
|
}
|
|
472
473
|
else {
|
|
473
|
-
(0, utils_1.extractDataSourceIntoNextAPIFolder)(dataSourceNode, dataSources, componentChunk, options.extractedResources, (
|
|
474
|
+
(0, utils_1.extractDataSourceIntoNextAPIFolder)(dataSourceNode, dataSources, componentChunk, options.extractedResources, (0, transformations_1.buildProductTransformOptions)(options));
|
|
474
475
|
}
|
|
475
476
|
});
|
|
476
477
|
// After processing all data source nodes, wrap any element props containing dataSourceData
|
|
@@ -802,8 +803,7 @@ function stringifyComplexParamsInDataProviders(componentChunk) {
|
|
|
802
803
|
var createNextComponentDataSourcePlugin = function () {
|
|
803
804
|
var nextComponentDataSourcePlugin = function (structure) { return __awaiter(void 0, void 0, void 0, function () {
|
|
804
805
|
var uidl, chunks, options, dependencies, dataSources, opts, componentConfig, componentChunk, firstDataSourceInfo, firstDataSourceId, dataSource, dsIdPrefix, dsType, existingFileName, existingTableName, _i, _a, key, parts, tableName, sanitizedDsName, sanitizedTableName, fileName, existingPropKeys, wrapContext, dataSource, fileName, generateDataSourceFetcherWithCore, fetcherCode, apiRouteCode, paginationPlugin;
|
|
805
|
-
|
|
806
|
-
return __generator(this, function (_c) {
|
|
806
|
+
return __generator(this, function (_b) {
|
|
807
807
|
uidl = structure.uidl, chunks = structure.chunks, options = structure.options, dependencies = structure.dependencies;
|
|
808
808
|
// Early return if no options or dataSources
|
|
809
809
|
if (!options || !options.dataSources) {
|
|
@@ -849,7 +849,7 @@ var createNextComponentDataSourcePlugin = function () {
|
|
|
849
849
|
// Data source nodes can be either:
|
|
850
850
|
// 1. Direct: node.type === 'data-source-item' or 'data-source-list'
|
|
851
851
|
// 2. Wrapped in element: node.type === 'element' && node.content.type === 'data-source-item' or 'data-source-list'
|
|
852
|
-
var _a
|
|
852
|
+
var _a;
|
|
853
853
|
var dataSourceNode = null;
|
|
854
854
|
if (node.type === 'data-source-item' || node.type === 'data-source-list') {
|
|
855
855
|
// Direct data source node
|
|
@@ -886,7 +886,7 @@ var createNextComponentDataSourcePlugin = function () {
|
|
|
886
886
|
}
|
|
887
887
|
}
|
|
888
888
|
}
|
|
889
|
-
(0, utils_1.extractDataSourceIntoNextAPIFolder)(dataSourceNode, dataSources, componentChunk, options.extractedResources, (
|
|
889
|
+
(0, utils_1.extractDataSourceIntoNextAPIFolder)(dataSourceNode, dataSources, componentChunk, options.extractedResources, (0, transformations_1.buildProductTransformOptions)(options));
|
|
890
890
|
});
|
|
891
891
|
// If no data source nodes were found but there are dataSources available,
|
|
892
892
|
// use the first available dataSource to create firstDataSourceInfo
|
|
@@ -947,7 +947,7 @@ var createNextComponentDataSourcePlugin = function () {
|
|
|
947
947
|
if (dataSource && !options.extractedResources["utils/".concat(fileName)]) {
|
|
948
948
|
generateDataSourceFetcherWithCore = require('./data-source-fetchers').generateDataSourceFetcherWithCore;
|
|
949
949
|
try {
|
|
950
|
-
fetcherCode = generateDataSourceFetcherWithCore(dataSource, firstDataSourceInfo.tableName, false, (
|
|
950
|
+
fetcherCode = generateDataSourceFetcherWithCore(dataSource, firstDataSourceInfo.tableName, false, (0, transformations_1.buildProductTransformOptions)(options));
|
|
951
951
|
options.extractedResources["utils/".concat(fileName)] = {
|
|
952
952
|
fileName: fileName,
|
|
953
953
|
fileType: teleport_types_1.FileType.JS,
|
|
@@ -985,4 +985,9 @@ __exportStar(require("./utils"), exports);
|
|
|
985
985
|
__exportStar(require("./array-mapper-pagination"), exports);
|
|
986
986
|
__exportStar(require("./pagination-plugin"), exports);
|
|
987
987
|
__exportStar(require("./count-fetchers"), exports);
|
|
988
|
+
// The product transform's build-time options (category taxonomy + storefront
|
|
989
|
+
// tax rate) — every package that emits a data-source fetcher has to derive
|
|
990
|
+
// them the same way.
|
|
991
|
+
var transformations_2 = require("./transformations");
|
|
992
|
+
Object.defineProperty(exports, "buildProductTransformOptions", { enumerable: true, get: function () { return transformations_2.buildProductTransformOptions; } });
|
|
988
993
|
//# sourceMappingURL=index.js.map
|