@teleporthq/teleport-plugin-next-data-source 0.40.15
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/ARRAY_MAPPER_PAGINATION.md +1128 -0
- package/LICENSE +21 -0
- package/README.md +40 -0
- package/SEARCH_IMPLEMENTATION_SUMMARY.md +983 -0
- package/__tests__/fetchers.test.ts +545 -0
- package/__tests__/integration.test.ts +561 -0
- package/__tests__/mocks.ts +241 -0
- package/__tests__/pagination.test.ts +31 -0
- package/__tests__/plugin.test.ts +577 -0
- package/__tests__/utils.test.ts +430 -0
- package/__tests__/validation.test.ts +348 -0
- package/dist/cjs/array-mapper-pagination.d.ts +32 -0
- package/dist/cjs/array-mapper-pagination.d.ts.map +1 -0
- package/dist/cjs/array-mapper-pagination.js +77 -0
- package/dist/cjs/array-mapper-pagination.js.map +1 -0
- package/dist/cjs/count-fetchers.d.ts +12 -0
- package/dist/cjs/count-fetchers.d.ts.map +1 -0
- package/dist/cjs/count-fetchers.js +46 -0
- package/dist/cjs/count-fetchers.js.map +1 -0
- package/dist/cjs/data-source-fetchers.d.ts +14 -0
- package/dist/cjs/data-source-fetchers.d.ts.map +1 -0
- package/dist/cjs/data-source-fetchers.js +185 -0
- package/dist/cjs/data-source-fetchers.js.map +1 -0
- package/dist/cjs/fetchers/airtable.d.ts +6 -0
- package/dist/cjs/fetchers/airtable.d.ts.map +1 -0
- package/dist/cjs/fetchers/airtable.js +27 -0
- package/dist/cjs/fetchers/airtable.js.map +1 -0
- package/dist/cjs/fetchers/clickhouse.d.ts +6 -0
- package/dist/cjs/fetchers/clickhouse.d.ts.map +1 -0
- package/dist/cjs/fetchers/clickhouse.js +29 -0
- package/dist/cjs/fetchers/clickhouse.js.map +1 -0
- package/dist/cjs/fetchers/csv-file.d.ts +7 -0
- package/dist/cjs/fetchers/csv-file.d.ts.map +1 -0
- package/dist/cjs/fetchers/csv-file.js +36 -0
- package/dist/cjs/fetchers/csv-file.js.map +1 -0
- package/dist/cjs/fetchers/firestore.d.ts +6 -0
- package/dist/cjs/fetchers/firestore.d.ts.map +1 -0
- package/dist/cjs/fetchers/firestore.js +35 -0
- package/dist/cjs/fetchers/firestore.js.map +1 -0
- package/dist/cjs/fetchers/google-sheets.d.ts +6 -0
- package/dist/cjs/fetchers/google-sheets.d.ts.map +1 -0
- package/dist/cjs/fetchers/google-sheets.js +30 -0
- package/dist/cjs/fetchers/google-sheets.js.map +1 -0
- package/dist/cjs/fetchers/index.d.ts +17 -0
- package/dist/cjs/fetchers/index.d.ts.map +1 -0
- package/dist/cjs/fetchers/index.js +56 -0
- package/dist/cjs/fetchers/index.js.map +1 -0
- package/dist/cjs/fetchers/javascript.d.ts +7 -0
- package/dist/cjs/fetchers/javascript.d.ts.map +1 -0
- package/dist/cjs/fetchers/javascript.js +40 -0
- package/dist/cjs/fetchers/javascript.js.map +1 -0
- package/dist/cjs/fetchers/mariadb.d.ts +3 -0
- package/dist/cjs/fetchers/mariadb.d.ts.map +1 -0
- package/dist/cjs/fetchers/mariadb.js +23 -0
- package/dist/cjs/fetchers/mariadb.js.map +1 -0
- package/dist/cjs/fetchers/mongodb.d.ts +7 -0
- package/dist/cjs/fetchers/mongodb.d.ts.map +1 -0
- package/dist/cjs/fetchers/mongodb.js +52 -0
- package/dist/cjs/fetchers/mongodb.js.map +1 -0
- package/dist/cjs/fetchers/mysql.d.ts +3 -0
- package/dist/cjs/fetchers/mysql.d.ts.map +1 -0
- package/dist/cjs/fetchers/mysql.js +30 -0
- package/dist/cjs/fetchers/mysql.js.map +1 -0
- package/dist/cjs/fetchers/postgresql.d.ts +3 -0
- package/dist/cjs/fetchers/postgresql.d.ts.map +1 -0
- package/dist/cjs/fetchers/postgresql.js +25 -0
- package/dist/cjs/fetchers/postgresql.js.map +1 -0
- package/dist/cjs/fetchers/redis.d.ts +6 -0
- package/dist/cjs/fetchers/redis.d.ts.map +1 -0
- package/dist/cjs/fetchers/redis.js +46 -0
- package/dist/cjs/fetchers/redis.js.map +1 -0
- package/dist/cjs/fetchers/redshift.d.ts +2 -0
- package/dist/cjs/fetchers/redshift.d.ts.map +1 -0
- package/dist/cjs/fetchers/redshift.js +24 -0
- package/dist/cjs/fetchers/redshift.js.map +1 -0
- package/dist/cjs/fetchers/rest-api.d.ts +6 -0
- package/dist/cjs/fetchers/rest-api.d.ts.map +1 -0
- package/dist/cjs/fetchers/rest-api.js +58 -0
- package/dist/cjs/fetchers/rest-api.js.map +1 -0
- package/dist/cjs/fetchers/static-collection.d.ts +7 -0
- package/dist/cjs/fetchers/static-collection.d.ts.map +1 -0
- package/dist/cjs/fetchers/static-collection.js +24 -0
- package/dist/cjs/fetchers/static-collection.js.map +1 -0
- package/dist/cjs/fetchers/supabase.d.ts +7 -0
- package/dist/cjs/fetchers/supabase.d.ts.map +1 -0
- package/dist/cjs/fetchers/supabase.js +42 -0
- package/dist/cjs/fetchers/supabase.js.map +1 -0
- package/dist/cjs/fetchers/turso.d.ts +6 -0
- package/dist/cjs/fetchers/turso.d.ts.map +1 -0
- package/dist/cjs/fetchers/turso.js +25 -0
- package/dist/cjs/fetchers/turso.js.map +1 -0
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +325 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/pagination-plugin.d.ts +5 -0
- package/dist/cjs/pagination-plugin.d.ts.map +1 -0
- package/dist/cjs/pagination-plugin.js +1484 -0
- package/dist/cjs/pagination-plugin.js.map +1 -0
- package/dist/cjs/pagination-with-count.d.ts +6 -0
- package/dist/cjs/pagination-with-count.d.ts.map +1 -0
- package/dist/cjs/pagination-with-count.js +63 -0
- package/dist/cjs/pagination-with-count.js.map +1 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/cjs/utils.d.ts +31 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +763 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/cjs/validation.d.ts +5 -0
- package/dist/cjs/validation.d.ts.map +1 -0
- package/dist/cjs/validation.js +29 -0
- package/dist/cjs/validation.js.map +1 -0
- package/dist/esm/array-mapper-pagination.d.ts +32 -0
- package/dist/esm/array-mapper-pagination.d.ts.map +1 -0
- package/dist/esm/array-mapper-pagination.js +72 -0
- package/dist/esm/array-mapper-pagination.js.map +1 -0
- package/dist/esm/count-fetchers.d.ts +12 -0
- package/dist/esm/count-fetchers.d.ts.map +1 -0
- package/dist/esm/count-fetchers.js +35 -0
- package/dist/esm/count-fetchers.js.map +1 -0
- package/dist/esm/data-source-fetchers.d.ts +14 -0
- package/dist/esm/data-source-fetchers.d.ts.map +1 -0
- package/dist/esm/data-source-fetchers.js +179 -0
- package/dist/esm/data-source-fetchers.js.map +1 -0
- package/dist/esm/fetchers/airtable.d.ts +6 -0
- package/dist/esm/fetchers/airtable.d.ts.map +1 -0
- package/dist/esm/fetchers/airtable.js +22 -0
- package/dist/esm/fetchers/airtable.js.map +1 -0
- package/dist/esm/fetchers/clickhouse.d.ts +6 -0
- package/dist/esm/fetchers/clickhouse.d.ts.map +1 -0
- package/dist/esm/fetchers/clickhouse.js +24 -0
- package/dist/esm/fetchers/clickhouse.js.map +1 -0
- package/dist/esm/fetchers/csv-file.d.ts +7 -0
- package/dist/esm/fetchers/csv-file.d.ts.map +1 -0
- package/dist/esm/fetchers/csv-file.js +30 -0
- package/dist/esm/fetchers/csv-file.js.map +1 -0
- package/dist/esm/fetchers/firestore.d.ts +6 -0
- package/dist/esm/fetchers/firestore.d.ts.map +1 -0
- package/dist/esm/fetchers/firestore.js +30 -0
- package/dist/esm/fetchers/firestore.js.map +1 -0
- package/dist/esm/fetchers/google-sheets.d.ts +6 -0
- package/dist/esm/fetchers/google-sheets.d.ts.map +1 -0
- package/dist/esm/fetchers/google-sheets.js +25 -0
- package/dist/esm/fetchers/google-sheets.js.map +1 -0
- package/dist/esm/fetchers/index.d.ts +17 -0
- package/dist/esm/fetchers/index.d.ts.map +1 -0
- package/dist/esm/fetchers/index.js +17 -0
- package/dist/esm/fetchers/index.js.map +1 -0
- package/dist/esm/fetchers/javascript.d.ts +7 -0
- package/dist/esm/fetchers/javascript.d.ts.map +1 -0
- package/dist/esm/fetchers/javascript.js +34 -0
- package/dist/esm/fetchers/javascript.js.map +1 -0
- package/dist/esm/fetchers/mariadb.d.ts +3 -0
- package/dist/esm/fetchers/mariadb.d.ts.map +1 -0
- package/dist/esm/fetchers/mariadb.js +18 -0
- package/dist/esm/fetchers/mariadb.js.map +1 -0
- package/dist/esm/fetchers/mongodb.d.ts +7 -0
- package/dist/esm/fetchers/mongodb.d.ts.map +1 -0
- package/dist/esm/fetchers/mongodb.js +46 -0
- package/dist/esm/fetchers/mongodb.js.map +1 -0
- package/dist/esm/fetchers/mysql.d.ts +3 -0
- package/dist/esm/fetchers/mysql.d.ts.map +1 -0
- package/dist/esm/fetchers/mysql.js +25 -0
- package/dist/esm/fetchers/mysql.js.map +1 -0
- package/dist/esm/fetchers/postgresql.d.ts +3 -0
- package/dist/esm/fetchers/postgresql.d.ts.map +1 -0
- package/dist/esm/fetchers/postgresql.js +20 -0
- package/dist/esm/fetchers/postgresql.js.map +1 -0
- package/dist/esm/fetchers/redis.d.ts +6 -0
- package/dist/esm/fetchers/redis.d.ts.map +1 -0
- package/dist/esm/fetchers/redis.js +41 -0
- package/dist/esm/fetchers/redis.js.map +1 -0
- package/dist/esm/fetchers/redshift.d.ts +2 -0
- package/dist/esm/fetchers/redshift.d.ts.map +1 -0
- package/dist/esm/fetchers/redshift.js +20 -0
- package/dist/esm/fetchers/redshift.js.map +1 -0
- package/dist/esm/fetchers/rest-api.d.ts +6 -0
- package/dist/esm/fetchers/rest-api.d.ts.map +1 -0
- package/dist/esm/fetchers/rest-api.js +53 -0
- package/dist/esm/fetchers/rest-api.js.map +1 -0
- package/dist/esm/fetchers/static-collection.d.ts +7 -0
- package/dist/esm/fetchers/static-collection.d.ts.map +1 -0
- package/dist/esm/fetchers/static-collection.js +18 -0
- package/dist/esm/fetchers/static-collection.js.map +1 -0
- package/dist/esm/fetchers/supabase.d.ts +7 -0
- package/dist/esm/fetchers/supabase.d.ts.map +1 -0
- package/dist/esm/fetchers/supabase.js +36 -0
- package/dist/esm/fetchers/supabase.js.map +1 -0
- package/dist/esm/fetchers/turso.d.ts +6 -0
- package/dist/esm/fetchers/turso.d.ts.map +1 -0
- package/dist/esm/fetchers/turso.js +20 -0
- package/dist/esm/fetchers/turso.js.map +1 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +306 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/pagination-plugin.d.ts +5 -0
- package/dist/esm/pagination-plugin.d.ts.map +1 -0
- package/dist/esm/pagination-plugin.js +1457 -0
- package/dist/esm/pagination-plugin.js.map +1 -0
- package/dist/esm/pagination-with-count.d.ts +6 -0
- package/dist/esm/pagination-with-count.d.ts.map +1 -0
- package/dist/esm/pagination-with-count.js +34 -0
- package/dist/esm/pagination-with-count.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/utils.d.ts +31 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +722 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/validation.d.ts +5 -0
- package/dist/esm/validation.d.ts.map +1 -0
- package/dist/esm/validation.js +25 -0
- package/dist/esm/validation.js.map +1 -0
- package/package.json +33 -0
- package/src/array-mapper-pagination.ts +113 -0
- package/src/count-fetchers.ts +99 -0
- package/src/data-source-fetchers.ts +313 -0
- package/src/fetchers/airtable.ts +153 -0
- package/src/fetchers/clickhouse.ts +127 -0
- package/src/fetchers/csv-file.ts +163 -0
- package/src/fetchers/firestore.ts +138 -0
- package/src/fetchers/google-sheets.ts +189 -0
- package/src/fetchers/index.ts +32 -0
- package/src/fetchers/javascript.ts +150 -0
- package/src/fetchers/mariadb.ts +230 -0
- package/src/fetchers/mongodb.ts +239 -0
- package/src/fetchers/mysql.ts +237 -0
- package/src/fetchers/postgresql.ts +247 -0
- package/src/fetchers/redis.ts +152 -0
- package/src/fetchers/redshift.ts +138 -0
- package/src/fetchers/rest-api.ts +148 -0
- package/src/fetchers/static-collection.ts +149 -0
- package/src/fetchers/supabase.ts +246 -0
- package/src/fetchers/turso.ts +131 -0
- package/src/index.ts +352 -0
- package/src/pagination-plugin.ts +2335 -0
- package/src/pagination-with-count.ts +89 -0
- package/src/utils.ts +1013 -0
- package/src/validation.ts +32 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateDataSourceFetcherWithCore = exports.generateDataSourceFetcher = exports.getDataSourceDependencies = void 0;
|
|
4
|
+
var fetchers_1 = require("./fetchers");
|
|
5
|
+
var validation_1 = require("./validation");
|
|
6
|
+
var count_fetchers_1 = require("./count-fetchers");
|
|
7
|
+
var getDataSourceDependencies = function (type) {
|
|
8
|
+
var dependencyMap = {
|
|
9
|
+
'rest-api': { packages: ['node-fetch'], isDefaultImport: true },
|
|
10
|
+
postgresql: { packages: ['pg'], isDefaultImport: false },
|
|
11
|
+
mysql: { packages: ['mysql2'], isDefaultImport: false },
|
|
12
|
+
mariadb: { packages: ['mariadb'], isDefaultImport: false },
|
|
13
|
+
'amazon-redshift': { packages: ['pg'], isDefaultImport: false },
|
|
14
|
+
mongodb: { packages: ['mongodb'], isDefaultImport: false },
|
|
15
|
+
cockroachdb: { packages: ['pg'], isDefaultImport: false },
|
|
16
|
+
tidb: { packages: ['mysql2'], isDefaultImport: false },
|
|
17
|
+
redis: { packages: ['redis'], isDefaultImport: false },
|
|
18
|
+
firestore: { packages: ['firebase-admin'], isDefaultImport: false },
|
|
19
|
+
clickhouse: { packages: ['@clickhouse/client'], isDefaultImport: false },
|
|
20
|
+
airtable: { packages: ['node-fetch'], isDefaultImport: true },
|
|
21
|
+
supabase: { packages: ['@supabase/supabase-js'], isDefaultImport: false },
|
|
22
|
+
turso: { packages: ['@libsql/client'], isDefaultImport: false },
|
|
23
|
+
javascript: { packages: [], isDefaultImport: false },
|
|
24
|
+
'google-sheets': { packages: ['node-fetch'], isDefaultImport: true },
|
|
25
|
+
'csv-file': { packages: [], isDefaultImport: false },
|
|
26
|
+
'static-collection': { packages: [], isDefaultImport: false },
|
|
27
|
+
};
|
|
28
|
+
return dependencyMap[type];
|
|
29
|
+
};
|
|
30
|
+
exports.getDataSourceDependencies = getDataSourceDependencies;
|
|
31
|
+
var generateDataSourceFetcher = function (dataSource, tableName) {
|
|
32
|
+
if (!dataSource || typeof dataSource !== 'object') {
|
|
33
|
+
throw new Error('Invalid data source: data source must be a valid object');
|
|
34
|
+
}
|
|
35
|
+
var type = dataSource.type, config = dataSource.config;
|
|
36
|
+
if (!type || typeof type !== 'string') {
|
|
37
|
+
throw new Error('Invalid data source: type is required and must be a string');
|
|
38
|
+
}
|
|
39
|
+
if (!config || typeof config !== 'object') {
|
|
40
|
+
throw new Error("Invalid data source: config is required for ".concat(type));
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
switch (type) {
|
|
44
|
+
case 'postgresql':
|
|
45
|
+
case 'cockroachdb': {
|
|
46
|
+
var validation = (0, validation_1.validateDatabaseConfig)(config);
|
|
47
|
+
if (!validation.isValid) {
|
|
48
|
+
throw new Error("PostgreSQL/CockroachDB config validation failed: ".concat(validation.error));
|
|
49
|
+
}
|
|
50
|
+
return (0, fetchers_1.generatePostgreSQLFetcher)(config, tableName);
|
|
51
|
+
}
|
|
52
|
+
case 'mysql':
|
|
53
|
+
case 'tidb': {
|
|
54
|
+
var validation = (0, validation_1.validateDatabaseConfig)(config);
|
|
55
|
+
if (!validation.isValid) {
|
|
56
|
+
throw new Error("MySQL/TiDB config validation failed: ".concat(validation.error));
|
|
57
|
+
}
|
|
58
|
+
return (0, fetchers_1.generateMySQLFetcher)(config, tableName);
|
|
59
|
+
}
|
|
60
|
+
case 'mariadb': {
|
|
61
|
+
var validation = (0, validation_1.validateDatabaseConfig)(config);
|
|
62
|
+
if (!validation.isValid) {
|
|
63
|
+
throw new Error("MariaDB config validation failed: ".concat(validation.error));
|
|
64
|
+
}
|
|
65
|
+
return (0, fetchers_1.generateMariaDBFetcher)(config, tableName);
|
|
66
|
+
}
|
|
67
|
+
case 'amazon-redshift': {
|
|
68
|
+
var validation = (0, validation_1.validateDatabaseConfig)(config);
|
|
69
|
+
if (!validation.isValid) {
|
|
70
|
+
throw new Error("Amazon Redshift config validation failed: ".concat(validation.error));
|
|
71
|
+
}
|
|
72
|
+
return (0, fetchers_1.generateRedshiftFetcher)(config, tableName);
|
|
73
|
+
}
|
|
74
|
+
case 'mongodb': {
|
|
75
|
+
var validation = (0, fetchers_1.validateMongoDBConfig)(config);
|
|
76
|
+
if (!validation.isValid) {
|
|
77
|
+
throw new Error("MongoDB config validation failed: ".concat(validation.error));
|
|
78
|
+
}
|
|
79
|
+
return (0, fetchers_1.generateMongoDBFetcher)(config, tableName);
|
|
80
|
+
}
|
|
81
|
+
case 'redis': {
|
|
82
|
+
var validation = (0, fetchers_1.validateRedisConfig)(config);
|
|
83
|
+
if (!validation.isValid) {
|
|
84
|
+
throw new Error("Redis config validation failed: ".concat(validation.error));
|
|
85
|
+
}
|
|
86
|
+
return (0, fetchers_1.generateRedisFetcher)(config);
|
|
87
|
+
}
|
|
88
|
+
case 'firestore': {
|
|
89
|
+
var validation = (0, fetchers_1.validateFirestoreConfig)(config);
|
|
90
|
+
if (!validation.isValid) {
|
|
91
|
+
throw new Error("Firestore config validation failed: ".concat(validation.error));
|
|
92
|
+
}
|
|
93
|
+
return (0, fetchers_1.generateFirestoreFetcher)(config, tableName);
|
|
94
|
+
}
|
|
95
|
+
case 'clickhouse': {
|
|
96
|
+
var validation = (0, fetchers_1.validateClickHouseConfig)(config);
|
|
97
|
+
if (!validation.isValid) {
|
|
98
|
+
throw new Error("ClickHouse config validation failed: ".concat(validation.error));
|
|
99
|
+
}
|
|
100
|
+
return (0, fetchers_1.generateClickHouseFetcher)(config, tableName);
|
|
101
|
+
}
|
|
102
|
+
case 'airtable': {
|
|
103
|
+
var validation = (0, fetchers_1.validateAirtableConfig)(config);
|
|
104
|
+
if (!validation.isValid) {
|
|
105
|
+
throw new Error("Airtable config validation failed: ".concat(validation.error));
|
|
106
|
+
}
|
|
107
|
+
return (0, fetchers_1.generateAirtableFetcher)(config, tableName);
|
|
108
|
+
}
|
|
109
|
+
case 'supabase': {
|
|
110
|
+
var validation = (0, fetchers_1.validateSupabaseConfig)(config);
|
|
111
|
+
if (!validation.isValid) {
|
|
112
|
+
throw new Error("Supabase config validation failed: ".concat(validation.error));
|
|
113
|
+
}
|
|
114
|
+
return (0, fetchers_1.generateSupabaseFetcher)(config, tableName);
|
|
115
|
+
}
|
|
116
|
+
case 'turso': {
|
|
117
|
+
var validation = (0, fetchers_1.validateTursoConfig)(config);
|
|
118
|
+
if (!validation.isValid) {
|
|
119
|
+
throw new Error("Turso config validation failed: ".concat(validation.error));
|
|
120
|
+
}
|
|
121
|
+
return (0, fetchers_1.generateTursoFetcher)(config, tableName);
|
|
122
|
+
}
|
|
123
|
+
case 'rest-api': {
|
|
124
|
+
var validation = (0, fetchers_1.validateRESTAPIConfig)(config);
|
|
125
|
+
if (!validation.isValid) {
|
|
126
|
+
throw new Error("REST API config validation failed: ".concat(validation.error));
|
|
127
|
+
}
|
|
128
|
+
return (0, fetchers_1.generateRESTAPIFetcher)(config);
|
|
129
|
+
}
|
|
130
|
+
case 'javascript': {
|
|
131
|
+
var validation = (0, fetchers_1.validateJavaScriptConfig)(config);
|
|
132
|
+
if (!validation.isValid) {
|
|
133
|
+
throw new Error("JavaScript config validation failed: ".concat(validation.error));
|
|
134
|
+
}
|
|
135
|
+
return (0, fetchers_1.generateJavaScriptFetcher)(config);
|
|
136
|
+
}
|
|
137
|
+
case 'csv-file': {
|
|
138
|
+
var validation = (0, fetchers_1.validateCSVConfig)(config);
|
|
139
|
+
if (!validation.isValid) {
|
|
140
|
+
throw new Error("CSV config validation failed: ".concat(validation.error));
|
|
141
|
+
}
|
|
142
|
+
return (0, fetchers_1.generateCSVFileFetcher)(config);
|
|
143
|
+
}
|
|
144
|
+
case 'static-collection': {
|
|
145
|
+
var validation = (0, fetchers_1.validateStaticCollectionConfig)(config);
|
|
146
|
+
if (!validation.isValid) {
|
|
147
|
+
throw new Error("Static collection config validation failed: ".concat(validation.error));
|
|
148
|
+
}
|
|
149
|
+
return (0, fetchers_1.generateStaticCollectionFetcher)(config);
|
|
150
|
+
}
|
|
151
|
+
case 'google-sheets': {
|
|
152
|
+
var validation = (0, fetchers_1.validateGoogleSheetsConfig)(config);
|
|
153
|
+
if (!validation.isValid) {
|
|
154
|
+
throw new Error("Google Sheets config validation failed: ".concat(validation.error));
|
|
155
|
+
}
|
|
156
|
+
return (0, fetchers_1.generateGoogleSheetsFetcher)(config);
|
|
157
|
+
}
|
|
158
|
+
default:
|
|
159
|
+
throw new Error("Unsupported data source type: ".concat(type));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
// Re-throw with more context
|
|
164
|
+
var errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
165
|
+
throw new Error("Failed to generate fetcher for ".concat(type, ": ").concat(errorMessage));
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
exports.generateDataSourceFetcher = generateDataSourceFetcher;
|
|
169
|
+
/**
|
|
170
|
+
* Generates a fetcher with both a core fetchData function (for server-side use in getStaticProps)
|
|
171
|
+
* and an API handler (for client-side use)
|
|
172
|
+
*/
|
|
173
|
+
var generateDataSourceFetcherWithCore = function (dataSource, tableName) {
|
|
174
|
+
var apiHandler = (0, exports.generateDataSourceFetcher)(dataSource, tableName);
|
|
175
|
+
// Extract the handler function body from the API route
|
|
176
|
+
// The API route is structured as: export default async function handler(req, res) { ... }
|
|
177
|
+
// We need to create a fetchData function that can be called directly
|
|
178
|
+
// Remove "export default" from the handler and make it a regular function
|
|
179
|
+
var handlerCode = apiHandler.replace('export default async function handler', 'async function handler');
|
|
180
|
+
// Generate count fetcher code
|
|
181
|
+
var countFetcherCode = (0, count_fetchers_1.generateCountFetcher)(dataSource, tableName);
|
|
182
|
+
return "async 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 handler(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 getCount(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(countFetcherCode, "\n\n").concat(handlerCode, "\n\nexport { fetchData, fetchCount, handler, getCount }\nexport default { fetchData, fetchCount, handler, getCount }\n");
|
|
183
|
+
};
|
|
184
|
+
exports.generateDataSourceFetcherWithCore = generateDataSourceFetcherWithCore;
|
|
185
|
+
//# sourceMappingURL=data-source-fetchers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source-fetchers.js","sourceRoot":"","sources":["../../src/data-source-fetchers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const validateAirtableConfig: (config: Record<string, unknown>) => {
|
|
2
|
+
isValid: boolean;
|
|
3
|
+
error?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const generateAirtableFetcher: (config: Record<string, unknown>, tableName: string) => string;
|
|
6
|
+
//# sourceMappingURL=airtable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"airtable.d.ts","sourceRoot":"","sources":["../../../src/fetchers/airtable.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,WACzB,OAAO,MAAM,EAAE,OAAO,CAAC,KAC9B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAcpC,CAAA;AAQD,eAAO,MAAM,uBAAuB,WAC1B,OAAO,MAAM,EAAE,OAAO,CAAC,aACpB,MAAM,KAChB,MA2HF,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateAirtableFetcher = exports.validateAirtableConfig = void 0;
|
|
4
|
+
var utils_1 = require("../utils");
|
|
5
|
+
var validateAirtableConfig = function (config) {
|
|
6
|
+
if (!config || typeof config !== 'object') {
|
|
7
|
+
return { isValid: false, error: 'Config must be a valid object' };
|
|
8
|
+
}
|
|
9
|
+
if (!config.baseId || typeof config.baseId !== 'string' || config.baseId.trim() === '') {
|
|
10
|
+
return { isValid: false, error: 'Airtable base ID is required' };
|
|
11
|
+
}
|
|
12
|
+
if (!config.personalAccessToken || typeof config.personalAccessToken !== 'string') {
|
|
13
|
+
return { isValid: false, error: 'Airtable personal access token is required' };
|
|
14
|
+
}
|
|
15
|
+
return { isValid: true };
|
|
16
|
+
};
|
|
17
|
+
exports.validateAirtableConfig = validateAirtableConfig;
|
|
18
|
+
var generateAirtableFetcher = function (config, tableName) {
|
|
19
|
+
var airtableConfig = config;
|
|
20
|
+
var baseId = airtableConfig.baseId;
|
|
21
|
+
var personalAccessToken = airtableConfig.personalAccessToken;
|
|
22
|
+
return "import fetch from 'node-fetch'\n\nexport default async function handler(req, res) {\n try {\n const { query, view, limit, page, perPage, sortBy, sortOrder, filters, offset: offsetParam } = req.query\n \n const queryParams = new URLSearchParams()\n \n if (view) {\n queryParams.append('view', view)\n }\n \n if (sortBy) {\n queryParams.append('sort[0][field]', sortBy)\n queryParams.append('sort[0][direction]', sortOrder || 'asc')\n }\n \n const perPageValue = limit || perPage || 100\n queryParams.append('pageSize', Math.min(parseInt(perPageValue), 100).toString())\n \n if (filters) {\n const parsedFilters = JSON.parse(filters)\n const conditions = Object.entries(parsedFilters).map(([field, value]) => {\n if (Array.isArray(value)) {\n const arrayConditions = value.map((v) => {\n if (typeof v === 'string') {\n return `{${field}}='${v.replace(/'/g, \"\\\\'\")}'`\n } else if (typeof v === 'number') {\n return `{${field}}=${v}`\n } else if (typeof v === 'boolean') {\n return `{${field}}=${v ? 'TRUE()' : 'FALSE()'}`\n }\n return `{${field}}='${String(v)}'`\n })\n return arrayConditions.length > 1\n ? `OR(${arrayConditions.join(',')})`\n : arrayConditions[0]\n } else if (typeof value === 'string') {\n return `{${field}}='${value.replace(/'/g, \"\\\\'\")}'`\n } else if (typeof value === 'number') {\n return `{${field}}=${value}`\n } else if (typeof value === 'boolean') {\n return `{${field}}=${value ? 'TRUE()' : 'FALSE()'}`\n }\n return `{${field}}='${String(value)}'`\n })\n \n const filterFormula = conditions.length > 1 ? `AND(${conditions.join(',')})` : conditions[0]\n if (filterFormula) {\n queryParams.append('filterByFormula', filterFormula)\n }\n }\n \n let url = `https://api.airtable.com/v0/".concat(baseId, "/${encodeURIComponent('").concat(tableName, "')}`\n if (queryParams.toString()) {\n url += `?${queryParams.toString()}`\n }\n \n const allRecords = []\n let airtableOffset\n const skipValue = offsetParam !== undefined ? parseInt(offsetParam) : (page ? (parseInt(page) - 1) * parseInt(perPageValue) : 0)\n const totalRecordsNeeded = skipValue + parseInt(perPageValue)\n \n do {\n const fetchUrl = airtableOffset ? `${url}&offset=${airtableOffset}` : url\n const response = await fetch(fetchUrl, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ").concat((0, utils_1.replaceSecretReference)(personalAccessToken, {
|
|
23
|
+
templateLiteral: true,
|
|
24
|
+
}), "`,\n 'Content-Type': 'application/json'\n }\n })\n \n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n return res.status(response.status).json({\n success: false,\n error: errorData.error?.message || `HTTP ${response.status}: ${response.statusText}`,\n timestamp: Date.now()\n })\n }\n \n const data = await response.json()\n allRecords.push(...data.records)\n airtableOffset = data.offset\n \n if (allRecords.length >= totalRecordsNeeded || !airtableOffset) {\n break\n }\n } while (airtableOffset)\n \n const paginatedRecords = allRecords.slice(skipValue, skipValue + parseInt(perPageValue))\n \n const formattedRecords = paginatedRecords.map((record) => ({\n id: record.id,\n ...record.fields,\n createdTime: record.createdTime\n }))\n \n const safeData = JSON.parse(JSON.stringify(formattedRecords))\n \n return res.status(200).json({\n success: true,\n data: safeData,\n timestamp: Date.now()\n })\n } catch (error) {\n console.error('Airtable fetch error:', error)\n return res.status(500).json({\n success: false,\n error: error.message || 'Failed to fetch data',\n timestamp: Date.now()\n })\n }\n}\n");
|
|
25
|
+
};
|
|
26
|
+
exports.generateAirtableFetcher = generateAirtableFetcher;
|
|
27
|
+
//# sourceMappingURL=airtable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"airtable.js","sourceRoot":"","sources":["../../../src/fetchers/airtable.ts"],"names":[],"mappings":";;;AAAA,kCAAiD;AAE1C,IAAM,sBAAsB,GAAG,UACpC,MAA+B;IAE/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QACzC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAA;KAClE;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACtF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAA;KACjE;IAED,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,OAAO,MAAM,CAAC,mBAAmB,KAAK,QAAQ,EAAE;QACjF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAA;KAC/E;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC1B,CAAC,CAAA;AAhBY,QAAA,sBAAsB,0BAgBlC;AAQM,IAAM,uBAAuB,GAAG,UACrC,MAA+B,EAC/B,SAAiB;IAEjB,IAAM,cAAc,GAAG,MAAwB,CAAA;IAC/C,IAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAA;IACpC,IAAM,mBAAmB,GAAG,cAAc,CAAC,mBAAmB,CAAA;IAE9D,OAAO,8/DAqDqC,MAAM,oCAA2B,SAAS,wkBAepD,IAAA,8BAAsB,EAAC,mBAAmB,EAAE;QACpE,eAAe,EAAE,IAAI;KACtB,CAAC,i1CA+CX,CAAA;AACD,CAAC,CAAA;AA9HY,QAAA,uBAAuB,2BA8HnC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const validateClickHouseConfig: (config: Record<string, unknown>) => {
|
|
2
|
+
isValid: boolean;
|
|
3
|
+
error?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const generateClickHouseFetcher: (config: Record<string, unknown>, tableName: string) => string;
|
|
6
|
+
//# sourceMappingURL=clickhouse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../../src/fetchers/clickhouse.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,WAC3B,OAAO,MAAM,EAAE,OAAO,CAAC,KAC9B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAkBpC,CAAA;AAQD,eAAO,MAAM,yBAAyB,WAC5B,OAAO,MAAM,EAAE,OAAO,CAAC,aACpB,MAAM,KAChB,MA6FF,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateClickHouseFetcher = exports.validateClickHouseConfig = void 0;
|
|
4
|
+
var utils_1 = require("../utils");
|
|
5
|
+
var validateClickHouseConfig = function (config) {
|
|
6
|
+
if (!config || typeof config !== 'object') {
|
|
7
|
+
return { isValid: false, error: 'Config must be a valid object' };
|
|
8
|
+
}
|
|
9
|
+
if (!config.url || typeof config.url !== 'string') {
|
|
10
|
+
return { isValid: false, error: 'ClickHouse URL is required' };
|
|
11
|
+
}
|
|
12
|
+
if (!config.username || typeof config.username !== 'string') {
|
|
13
|
+
return { isValid: false, error: 'ClickHouse username is required' };
|
|
14
|
+
}
|
|
15
|
+
if (!config.password || typeof config.password !== 'string') {
|
|
16
|
+
return { isValid: false, error: 'ClickHouse password is required' };
|
|
17
|
+
}
|
|
18
|
+
return { isValid: true };
|
|
19
|
+
};
|
|
20
|
+
exports.validateClickHouseConfig = validateClickHouseConfig;
|
|
21
|
+
var generateClickHouseFetcher = function (config, tableName) {
|
|
22
|
+
var clickConfig = config;
|
|
23
|
+
var url = clickConfig.url;
|
|
24
|
+
var username = clickConfig.username;
|
|
25
|
+
var password = clickConfig.password;
|
|
26
|
+
return "import { createClient } from '@clickhouse/client'\n\nlet client = null\n\nconst getClient = () => {\n if (client) return client\n \n client = createClient({\n url: ".concat(JSON.stringify(url), ",\n username: ").concat(JSON.stringify(username), ",\n password: ").concat((0, utils_1.replaceSecretReference)(password), "\n })\n \n return client\n}\n\nexport default async function handler(req, res) {\n try {\n const client = getClient()\n const { query, queryColumns, limit, page, perPage, sortBy, sortOrder, filters, offset } = req.query\n \n const conditions = []\n \n if (query && queryColumns) {\n const columns = JSON.parse(queryColumns)\n const searchConditions = columns.map(\n (col) => `positionCaseInsensitive(toString(${col}), '${query}') > 0`\n )\n conditions.push(`(${searchConditions.join(' OR ')})`)\n }\n \n if (filters) {\n const parsedFilters = JSON.parse(filters)\n Object.entries(parsedFilters).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n const formattedValues = value\n .map((v) => (typeof v === 'string' ? `'${v}'` : v))\n .join(', ')\n conditions.push(`${key} IN (${formattedValues})`)\n } else if (typeof value === 'string') {\n conditions.push(`${key} = '${value}'`)\n } else {\n conditions.push(`${key} = ${value}`)\n }\n })\n }\n \n let sql = `SELECT * FROM ").concat(tableName, "`\n \n if (conditions.length > 0) {\n sql += ` WHERE ${conditions.join(' AND ')}`\n }\n \n if (sortBy) {\n sql += ` ORDER BY ${sortBy} ${sortOrder?.toUpperCase() || '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({ query: sql })\n const resultResponse = await result.json()\n const safeData = JSON.parse(JSON.stringify(resultResponse.data))\n\n return res.status(200).json({\n success: true,\n data: safeData,\n timestamp: Date.now()\n })\n } catch (error) {\n console.error('ClickHouse fetch error:', error)\n return res.status(500).json({\n success: false,\n error: error.message || 'Failed to fetch data',\n timestamp: Date.now()\n })\n }\n}\n");
|
|
27
|
+
};
|
|
28
|
+
exports.generateClickHouseFetcher = generateClickHouseFetcher;
|
|
29
|
+
//# sourceMappingURL=clickhouse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clickhouse.js","sourceRoot":"","sources":["../../../src/fetchers/clickhouse.ts"],"names":[],"mappings":";;;AAAA,kCAAiD;AAE1C,IAAM,wBAAwB,GAAG,UACtC,MAA+B;IAE/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QACzC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAA;KAClE;IAED,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE;QACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAA;KAC/D;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;QAC3D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAA;KACpE;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;QAC3D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAA;KACpE;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC1B,CAAC,CAAA;AApBY,QAAA,wBAAwB,4BAoBpC;AAQM,IAAM,yBAAyB,GAAG,UACvC,MAA+B,EAC/B,SAAiB;IAEjB,IAAM,WAAW,GAAG,MAA0B,CAAA;IAC9C,IAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAA;IAC3B,IAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAA;IACrC,IAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAA;IAErC,OAAO,oLAQE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,8BACd,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,8BACxB,IAAA,8BAAsB,EAAC,QAAQ,CAAC,0oCAqChB,SAAS,mkCAuCxC,CAAA;AACD,CAAC,CAAA;AAhGY,QAAA,yBAAyB,6BAgGrC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const validateCSVConfig: (config: Record<string, unknown>) => {
|
|
2
|
+
isValid: boolean;
|
|
3
|
+
error?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const generateCSVFileFetcher: (config: Record<string, unknown>) => string;
|
|
6
|
+
export declare const generateCSVCountFetcher: (_config: any) => string;
|
|
7
|
+
//# sourceMappingURL=csv-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv-file.d.ts","sourceRoot":"","sources":["../../../src/fetchers/csv-file.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,WACpB,OAAO,MAAM,EAAE,OAAO,CAAC,KAC9B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAuBpC,CAAA;AAOD,eAAO,MAAM,sBAAsB,WAAY,OAAO,MAAM,EAAE,OAAO,CAAC,KAAG,MAgFxE,CAAA;AAGD,eAAO,MAAM,uBAAuB,YAAa,GAAG,KAAG,MA+CtD,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateCSVCountFetcher = exports.generateCSVFileFetcher = exports.validateCSVConfig = void 0;
|
|
4
|
+
var validateCSVConfig = function (config) {
|
|
5
|
+
if (!config || typeof config !== 'object') {
|
|
6
|
+
return { isValid: false, error: 'Config must be a valid object' };
|
|
7
|
+
}
|
|
8
|
+
if (!config.parsedData || !Array.isArray(config.parsedData)) {
|
|
9
|
+
return { isValid: false, error: 'Parsed data must be an array' };
|
|
10
|
+
}
|
|
11
|
+
// Columns are optional - if not provided, we'll infer them from parsedData
|
|
12
|
+
if (config.columns !== undefined) {
|
|
13
|
+
if (!Array.isArray(config.columns)) {
|
|
14
|
+
return { isValid: false, error: 'Columns definition must be an array' };
|
|
15
|
+
}
|
|
16
|
+
for (var _i = 0, _a = config.columns; _i < _a.length; _i++) {
|
|
17
|
+
var column = _a[_i];
|
|
18
|
+
if (!column || typeof column !== 'object' || !column.id || typeof column.id !== 'string') {
|
|
19
|
+
return { isValid: false, error: 'Each column must have a valid id' };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return { isValid: true };
|
|
24
|
+
};
|
|
25
|
+
exports.validateCSVConfig = validateCSVConfig;
|
|
26
|
+
var generateCSVFileFetcher = function (config) {
|
|
27
|
+
var csvConfig = config;
|
|
28
|
+
return "const data = ".concat(JSON.stringify(csvConfig.parsedData || []), "\n\nexport default async function handler(req, res) {\n try {\n const { query, queryColumns, limit, page, perPage, sortBy, sortOrder, filters, offset: offsetParam } = req.query\n \n let filteredData = [...data]\n \n if (query) {\n const searchQuery = query.toLowerCase()\n \n if (queryColumns) {\n const columns = JSON.parse(queryColumns)\n filteredData = filteredData.filter((item) => {\n return columns.some((col) => {\n const value = item[col]\n return value && String(value).toLowerCase().includes(searchQuery)\n })\n })\n } else {\n filteredData = filteredData.filter((item) => {\n try {\n const stringified = JSON.stringify(item).toLowerCase()\n return stringified.includes(searchQuery)\n } catch {\n return false\n }\n })\n }\n }\n \n if (filters) {\n const parsedFilters = JSON.parse(filters)\n filteredData = filteredData.filter((item) => {\n return Object.entries(parsedFilters).every(([key, value]) => {\n if (Array.isArray(value)) {\n return value.includes(item[key])\n }\n return item[key] === value\n })\n })\n }\n \n if (sortBy) {\n filteredData.sort((a, b) => {\n const aVal = a[sortBy]\n const bVal = b[sortBy]\n const sortOrderValue = sortOrder?.toLowerCase() === 'desc' ? -1 : 1\n if (aVal < bVal) return -sortOrderValue\n if (aVal > bVal) return sortOrderValue\n return 0\n })\n }\n \n const limitValue = limit || perPage\n const offsetValue = offsetParam !== undefined ? parseInt(offsetParam) : (page && perPage ? (parseInt(page) - 1) * parseInt(perPage) : 0)\n \n if (limitValue) {\n filteredData = filteredData.slice(offsetValue, offsetValue + parseInt(limitValue))\n }\n \n const safeData = JSON.parse(JSON.stringify(filteredData))\n \n return res.status(200).json({\n success: true,\n data: safeData,\n timestamp: Date.now()\n })\n } catch (error) {\n console.error('CSV fetch error:', error)\n return res.status(500).json({\n success: false,\n error: error.message || 'Failed to fetch data',\n timestamp: Date.now()\n })\n }\n}\n");
|
|
29
|
+
};
|
|
30
|
+
exports.generateCSVFileFetcher = generateCSVFileFetcher;
|
|
31
|
+
// tslint:disable-next-line:variable-name
|
|
32
|
+
var generateCSVCountFetcher = function (_config) {
|
|
33
|
+
return "\nasync function getCount(req, res) {\n try {\n const { query, queryColumns, filters } = req.query\n const fakeReq = { query: { query, queryColumns, filters }, method: 'GET' }\n let result = null\n let statusCode = 200\n \n const fakeRes = {\n status: (code) => {\n statusCode = code\n return fakeRes\n },\n json: (data) => {\n result = data\n return fakeRes\n },\n }\n \n await handler(fakeReq, fakeRes)\n \n if (statusCode !== 200 || !result || !result.success) {\n return res.status(500).json({\n success: false,\n error: 'Failed to get data for counting',\n timestamp: Date.now()\n })\n }\n \n const count = Array.isArray(result.data) ? result.data.length : 0\n \n return res.status(200).json({\n success: true,\n count: count,\n timestamp: Date.now()\n })\n } catch (error) {\n console.error('Error getting count:', error)\n return res.status(500).json({\n success: false,\n error: error.message || 'Failed to get count',\n timestamp: Date.now()\n })\n }\n}\n";
|
|
34
|
+
};
|
|
35
|
+
exports.generateCSVCountFetcher = generateCSVCountFetcher;
|
|
36
|
+
//# sourceMappingURL=csv-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv-file.js","sourceRoot":"","sources":["../../../src/fetchers/csv-file.ts"],"names":[],"mappings":";;;AAAO,IAAM,iBAAiB,GAAG,UAC/B,MAA+B;IAE/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QACzC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAA;KAClE;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;QAC3D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAA;KACjE;IAED,2EAA2E;IAC3E,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;YAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAA;SACxE;QAED,KAAqB,UAAc,EAAd,KAAA,MAAM,CAAC,OAAO,EAAd,cAAc,EAAd,IAAc,EAAE;YAAhC,IAAM,MAAM,SAAA;YACf,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE;gBACxF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAA;aACrE;SACF;KACF;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC1B,CAAC,CAAA;AAzBY,QAAA,iBAAiB,qBAyB7B;AAOM,IAAM,sBAAsB,GAAG,UAAC,MAA+B;IACpE,IAAM,SAAS,GAAG,MAAuB,CAAA;IACzC,OAAO,uBAAgB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,mzEA6ElE,CAAA;AACD,CAAC,CAAA;AAhFY,QAAA,sBAAsB,0BAgFlC;AAED,yCAAyC;AAClC,IAAM,uBAAuB,GAAG,UAAC,OAAY;IAClD,OAAO,knCA6CR,CAAA;AACD,CAAC,CAAA;AA/CY,QAAA,uBAAuB,2BA+CnC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const validateFirestoreConfig: (config: Record<string, unknown>) => {
|
|
2
|
+
isValid: boolean;
|
|
3
|
+
error?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const generateFirestoreFetcher: (config: Record<string, unknown>, tableName: string) => string;
|
|
6
|
+
//# sourceMappingURL=firestore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestore.d.ts","sourceRoot":"","sources":["../../../src/fetchers/firestore.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uBAAuB,WAC1B,OAAO,MAAM,EAAE,OAAO,CAAC,KAC9B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAyBpC,CAAA;AAOD,eAAO,MAAM,wBAAwB,WAC3B,OAAO,MAAM,EAAE,OAAO,CAAC,aACpB,MAAM,KAChB,MAkGF,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateFirestoreFetcher = exports.validateFirestoreConfig = void 0;
|
|
4
|
+
var utils_1 = require("../utils");
|
|
5
|
+
var validateFirestoreConfig = function (config) {
|
|
6
|
+
if (!config || typeof config !== 'object') {
|
|
7
|
+
return { isValid: false, error: 'Config must be a valid object' };
|
|
8
|
+
}
|
|
9
|
+
if (!config.serviceAccount || typeof config.serviceAccount !== 'string') {
|
|
10
|
+
return { isValid: false, error: 'Firestore service account JSON is required' };
|
|
11
|
+
}
|
|
12
|
+
var serviceAccount = config.serviceAccount;
|
|
13
|
+
// If serviceAccount is a secret reference, we assume the runtime env var will contain valid JSON
|
|
14
|
+
// Example: "teleporthq.secrets.DATA_SOURCE_FIRESTORE_SERVICE_ACCOUNT"
|
|
15
|
+
if (!serviceAccount.startsWith('teleporthq.secrets.')) {
|
|
16
|
+
try {
|
|
17
|
+
var parsed = JSON.parse(serviceAccount);
|
|
18
|
+
if (!parsed.project_id || !parsed.private_key || !parsed.client_email) {
|
|
19
|
+
return { isValid: false, error: 'Invalid Firestore service account JSON structure' };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (_a) {
|
|
23
|
+
return { isValid: false, error: 'Service account must be valid JSON' };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return { isValid: true };
|
|
27
|
+
};
|
|
28
|
+
exports.validateFirestoreConfig = validateFirestoreConfig;
|
|
29
|
+
var generateFirestoreFetcher = function (config, tableName) {
|
|
30
|
+
var firestoreConfig = config;
|
|
31
|
+
var serviceAccount = firestoreConfig.serviceAccount;
|
|
32
|
+
return "import * as admin from 'firebase-admin'\n\nlet firestore = null\n\nconst getFirestore = () => {\n if (firestore) return firestore\n \n const rawServiceAccount = ".concat((0, utils_1.replaceSecretReference)(serviceAccount), "\n let serviceAccount\n\n try {\n serviceAccount = JSON.parse(rawServiceAccount)\n } catch (error) {\n throw new Error('Invalid Firestore service account JSON: ' + error.message)\n }\n \n if (!admin.apps.length) {\n admin.initializeApp({\n credential: admin.credential.cert(serviceAccount)\n })\n }\n \n firestore = admin.firestore()\n return firestore\n}\n\nexport default async function handler(req, res) {\n try {\n const firestore = getFirestore()\n const { query, queryColumns, limit, page, perPage, sortBy, sortOrder, filters, offset } = req.query\n \n let queryRef = firestore.collection('").concat(tableName, "')\n \n if (filters) {\n const parsedFilters = JSON.parse(filters)\n Object.entries(parsedFilters).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n queryRef = queryRef.where(key, 'in', value)\n } else {\n queryRef = queryRef.where(key, '==', value)\n }\n })\n }\n \n if (query && queryColumns) {\n const columns = JSON.parse(queryColumns)\n for (const column of columns) {\n queryRef = queryRef\n .where(column, '>=', query)\n .where(column, '<=', query + '\\uf8ff')\n }\n }\n \n if (sortBy) {\n const sortOrderValue = sortOrder?.toLowerCase() === 'desc' ? 'desc' : 'asc'\n queryRef = queryRef.orderBy(sortBy, sortOrderValue)\n }\n \n const limitValue = limit || perPage\n if (limitValue) {\n queryRef = queryRef.limit(parseInt(limitValue))\n }\n \n const offsetValue = offset !== undefined ? parseInt(offset) : (page && perPage && parseInt(page) > 1 ? (parseInt(page) - 1) * parseInt(perPage) : undefined)\n if (offsetValue !== undefined) {\n queryRef = queryRef.offset(offsetValue)\n }\n \n const snapshot = await queryRef.get()\n const documents = []\n snapshot.forEach((doc) => {\n documents.push({\n id: doc.id,\n ...doc.data()\n })\n })\n \n const safeData = JSON.parse(JSON.stringify(documents))\n \n return res.status(200).json({\n success: true,\n data: safeData,\n timestamp: Date.now()\n })\n } catch (error) {\n console.error('Firestore fetch error:', error)\n return res.status(500).json({\n success: false,\n error: error.message || 'Failed to fetch data',\n timestamp: Date.now()\n })\n }\n}\n");
|
|
33
|
+
};
|
|
34
|
+
exports.generateFirestoreFetcher = generateFirestoreFetcher;
|
|
35
|
+
//# sourceMappingURL=firestore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../../src/fetchers/firestore.ts"],"names":[],"mappings":";;;AAAA,kCAAiD;AAE1C,IAAM,uBAAuB,GAAG,UACrC,MAA+B;IAE/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QACzC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAA;KAClE;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,EAAE;QACvE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAA;KAC/E;IAED,IAAM,cAAc,GAAG,MAAM,CAAC,cAAwB,CAAA;IAEtD,iGAAiG;IACjG,sEAAsE;IACtE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE;QACrD,IAAI;YACF,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;YACzC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;gBACrE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kDAAkD,EAAE,CAAA;aACrF;SACF;QAAC,WAAM;YACN,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAA;SACvE;KACF;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC1B,CAAC,CAAA;AA3BY,QAAA,uBAAuB,2BA2BnC;AAOM,IAAM,wBAAwB,GAAG,UACtC,MAA+B,EAC/B,SAAiB;IAEjB,IAAM,eAAe,GAAG,MAAyB,CAAA;IACjD,IAAM,cAAc,GAAG,eAAe,CAAC,cAAc,CAAA;IAErD,OAAO,8KAOqB,IAAA,8BAAsB,EAAC,cAAc,CAAC,yoBAwBzB,SAAS,wvDA8DnD,CAAA;AACD,CAAC,CAAA;AArGY,QAAA,wBAAwB,4BAqGpC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const validateGoogleSheetsConfig: (config: Record<string, unknown>) => {
|
|
2
|
+
isValid: boolean;
|
|
3
|
+
error?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const generateGoogleSheetsFetcher: (config: Record<string, unknown>) => string;
|
|
6
|
+
//# sourceMappingURL=google-sheets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-sheets.d.ts","sourceRoot":"","sources":["../../../src/fetchers/google-sheets.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,WAC7B,OAAO,MAAM,EAAE,OAAO,CAAC,KAC9B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAwBpC,CAAA;AAWD,eAAO,MAAM,2BAA2B,WAAY,OAAO,MAAM,EAAE,OAAO,CAAC,KAAG,MAuJ7E,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateGoogleSheetsFetcher = exports.validateGoogleSheetsConfig = void 0;
|
|
4
|
+
var validateGoogleSheetsConfig = function (config) {
|
|
5
|
+
if (!config || typeof config !== 'object') {
|
|
6
|
+
return { isValid: false, error: 'Config must be a valid object' };
|
|
7
|
+
}
|
|
8
|
+
if (!config.sheetId && !config.sheetUrl) {
|
|
9
|
+
return { isValid: false, error: 'Google Sheets ID or URL is required' };
|
|
10
|
+
}
|
|
11
|
+
if (config.sheetId && typeof config.sheetId !== 'string') {
|
|
12
|
+
return { isValid: false, error: 'Sheet ID must be a string' };
|
|
13
|
+
}
|
|
14
|
+
if (config.sheetUrl) {
|
|
15
|
+
if (typeof config.sheetUrl !== 'string') {
|
|
16
|
+
return { isValid: false, error: 'Sheet URL must be a string' };
|
|
17
|
+
}
|
|
18
|
+
if (!config.sheetUrl.includes('docs.google.com/spreadsheets')) {
|
|
19
|
+
return { isValid: false, error: 'Invalid Google Sheets URL format' };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return { isValid: true };
|
|
23
|
+
};
|
|
24
|
+
exports.validateGoogleSheetsConfig = validateGoogleSheetsConfig;
|
|
25
|
+
var generateGoogleSheetsFetcher = function (config) {
|
|
26
|
+
var sheetsConfig = config;
|
|
27
|
+
return "import fetch from 'node-fetch'\n\nexport default async function handler(req, res) {\n try {\n const sheetUrl = ".concat(JSON.stringify(sheetsConfig.sheetUrl), "\n let sheetId = ").concat(JSON.stringify(sheetsConfig.sheetId), "\n const range = ").concat(JSON.stringify(sheetsConfig.range || 'A1:Z1000'), "\n const maxRows = ").concat(sheetsConfig.maxRows || 0, "\n \n if (!sheetId && sheetUrl) {\n const match = sheetUrl.match(/\\/d\\/([a-zA-Z0-9-_]+)/)\n sheetId = match ? match[1] : undefined\n }\n \n if (!sheetId) {\n return res.status(400).json({\n success: false,\n error: 'Invalid Google Sheets URL or Sheet ID',\n timestamp: Date.now()\n })\n }\n \n let url = `https://docs.google.com/spreadsheets/d/${sheetId}/gviz/tq?tqx=out:json&range=${range}`\n \n if (maxRows && maxRows > 0) {\n url += `&tq=limit ${maxRows}`\n }\n \n const response = await fetch(url)\n \n if (!response.ok) {\n return res.status(response.status).json({\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`,\n timestamp: Date.now()\n })\n }\n \n const text = await response.text()\n const jsonMatch = text.match(/google\\.visualization\\.Query\\.setResponse\\((.*)\\);/)\n \n if (!jsonMatch) {\n return res.status(500).json({\n success: false,\n error: 'Unable to parse Google Sheets response',\n timestamp: Date.now()\n })\n }\n \n const data = JSON.parse(jsonMatch[1])\n \n if (data.status === 'error') {\n return res.status(500).json({\n success: false,\n error: data.errors?.[0]?.detailed_message || 'Failed to fetch Google Sheets data',\n timestamp: Date.now()\n })\n }\n \n const table = data.table\n const columns = table.cols.map((col, index) => ({\n id: col.id || `col_${index}`,\n label: col.label || `Column ${index + 1}`,\n type: col.type || 'string'\n }))\n \n const rows = table.rows.map((row) => {\n const rowData = {}\n row.c.forEach((cell, index) => {\n const columnId = columns[index].id\n rowData[columnId] = cell?.v ?? null\n })\n return rowData\n })\n \n const { query, queryColumns, limit, page, perPage, sortBy, sortOrder, filters, offset: offsetParam } = req.query\n \n let filteredData = [...rows]\n \n if (query) {\n const searchQuery = query.toLowerCase()\n \n if (queryColumns) {\n const searchColumns = JSON.parse(queryColumns)\n filteredData = filteredData.filter((item) => {\n return searchColumns.some((col) => {\n const value = item[col]\n return value && String(value).toLowerCase().includes(searchQuery)\n })\n })\n } else {\n filteredData = filteredData.filter((item) => {\n try {\n const stringified = JSON.stringify(item).toLowerCase()\n return stringified.includes(searchQuery)\n } catch {\n return false\n }\n })\n }\n }\n \n if (filters) {\n const parsedFilters = JSON.parse(filters)\n filteredData = filteredData.filter((item) => {\n return Object.entries(parsedFilters).every(([key, value]) => {\n if (Array.isArray(value)) {\n return value.includes(item[key])\n }\n return item[key] === value\n })\n })\n }\n \n if (sortBy) {\n filteredData.sort((a, b) => {\n const aVal = a[sortBy]\n const bVal = b[sortBy]\n const sortOrderValue = sortOrder?.toLowerCase() === 'desc' ? -1 : 1\n if (aVal < bVal) return -sortOrderValue\n if (aVal > bVal) return sortOrderValue\n return 0\n })\n }\n \n const limitValue = limit || perPage\n const offsetValue = offsetParam !== undefined ? parseInt(offsetParam) : (page && perPage ? (parseInt(page) - 1) * parseInt(perPage) : 0)\n \n if (limitValue) {\n filteredData = filteredData.slice(offsetValue, offsetValue + parseInt(limitValue))\n }\n \n const safeData = JSON.parse(JSON.stringify(filteredData))\n \n return res.status(200).json({\n success: true,\n data: safeData,\n timestamp: Date.now()\n })\n } catch (error) {\n console.error('Google Sheets fetch error:', error)\n return res.status(500).json({\n success: false,\n error: error.message || 'Failed to fetch data',\n timestamp: Date.now()\n })\n }\n}\n");
|
|
28
|
+
};
|
|
29
|
+
exports.generateGoogleSheetsFetcher = generateGoogleSheetsFetcher;
|
|
30
|
+
//# sourceMappingURL=google-sheets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-sheets.js","sourceRoot":"","sources":["../../../src/fetchers/google-sheets.ts"],"names":[],"mappings":";;;AAAO,IAAM,0BAA0B,GAAG,UACxC,MAA+B;IAE/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QACzC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAA;KAClE;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;QACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAA;KACxE;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;QACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAA;KAC9D;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE;QACnB,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAA;SAC/D;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE;YAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAA;SACrE;KACF;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC1B,CAAC,CAAA;AA1BY,QAAA,0BAA0B,8BA0BtC;AAWM,IAAM,2BAA2B,GAAG,UAAC,MAA+B;IACzE,IAAM,YAAY,GAAG,MAA4B,CAAA;IACjD,OAAO,6HAIc,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,iCACxC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,iCACpC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,UAAU,CAAC,mCAC9C,YAAY,CAAC,OAAO,IAAI,CAAC,goIA6I9C,CAAA;AACD,CAAC,CAAA;AAvJY,QAAA,2BAA2B,+BAuJvC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { generatePostgreSQLFetcher, generatePostgreSQLCountFetcher } from './postgresql';
|
|
2
|
+
export { generateMySQLFetcher, generateMySQLCountFetcher } from './mysql';
|
|
3
|
+
export { generateMariaDBFetcher, generateMariaDBCountFetcher } from './mariadb';
|
|
4
|
+
export { generateRedshiftFetcher } from './redshift';
|
|
5
|
+
export { generateMongoDBFetcher, generateMongoDBCountFetcher, validateMongoDBConfig, } from './mongodb';
|
|
6
|
+
export { generateRedisFetcher, validateRedisConfig } from './redis';
|
|
7
|
+
export { generateFirestoreFetcher, validateFirestoreConfig } from './firestore';
|
|
8
|
+
export { generateClickHouseFetcher, validateClickHouseConfig } from './clickhouse';
|
|
9
|
+
export { generateAirtableFetcher, validateAirtableConfig } from './airtable';
|
|
10
|
+
export { generateSupabaseFetcher, generateSupabaseCountFetcher, validateSupabaseConfig, } from './supabase';
|
|
11
|
+
export { generateTursoFetcher, validateTursoConfig } from './turso';
|
|
12
|
+
export { generateRESTAPIFetcher, validateRESTAPIConfig } from './rest-api';
|
|
13
|
+
export { generateJavaScriptFetcher, generateJavaScriptCountFetcher, validateJavaScriptConfig, } from './javascript';
|
|
14
|
+
export { generateCSVFileFetcher, generateCSVCountFetcher, validateCSVConfig } from './csv-file';
|
|
15
|
+
export { generateStaticCollectionFetcher, generateStaticCollectionCountFetcher, validateStaticCollectionConfig, } from './static-collection';
|
|
16
|
+
export { generateGoogleSheetsFetcher, validateGoogleSheetsConfig } from './google-sheets';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fetchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAA;AACxF,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AACzE,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAClF,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAC5E,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAC1E,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC/F,OAAO,EACL,+BAA+B,EAC/B,oCAAoC,EACpC,8BAA8B,GAC/B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateGoogleSheetsConfig = exports.generateGoogleSheetsFetcher = exports.validateStaticCollectionConfig = exports.generateStaticCollectionCountFetcher = exports.generateStaticCollectionFetcher = exports.validateCSVConfig = exports.generateCSVCountFetcher = exports.generateCSVFileFetcher = exports.validateJavaScriptConfig = exports.generateJavaScriptCountFetcher = exports.generateJavaScriptFetcher = exports.validateRESTAPIConfig = exports.generateRESTAPIFetcher = exports.validateTursoConfig = exports.generateTursoFetcher = exports.validateSupabaseConfig = exports.generateSupabaseCountFetcher = exports.generateSupabaseFetcher = exports.validateAirtableConfig = exports.generateAirtableFetcher = exports.validateClickHouseConfig = exports.generateClickHouseFetcher = exports.validateFirestoreConfig = exports.generateFirestoreFetcher = exports.validateRedisConfig = exports.generateRedisFetcher = exports.validateMongoDBConfig = exports.generateMongoDBCountFetcher = exports.generateMongoDBFetcher = exports.generateRedshiftFetcher = exports.generateMariaDBCountFetcher = exports.generateMariaDBFetcher = exports.generateMySQLCountFetcher = exports.generateMySQLFetcher = exports.generatePostgreSQLCountFetcher = exports.generatePostgreSQLFetcher = void 0;
|
|
4
|
+
var postgresql_1 = require("./postgresql");
|
|
5
|
+
Object.defineProperty(exports, "generatePostgreSQLFetcher", { enumerable: true, get: function () { return postgresql_1.generatePostgreSQLFetcher; } });
|
|
6
|
+
Object.defineProperty(exports, "generatePostgreSQLCountFetcher", { enumerable: true, get: function () { return postgresql_1.generatePostgreSQLCountFetcher; } });
|
|
7
|
+
var mysql_1 = require("./mysql");
|
|
8
|
+
Object.defineProperty(exports, "generateMySQLFetcher", { enumerable: true, get: function () { return mysql_1.generateMySQLFetcher; } });
|
|
9
|
+
Object.defineProperty(exports, "generateMySQLCountFetcher", { enumerable: true, get: function () { return mysql_1.generateMySQLCountFetcher; } });
|
|
10
|
+
var mariadb_1 = require("./mariadb");
|
|
11
|
+
Object.defineProperty(exports, "generateMariaDBFetcher", { enumerable: true, get: function () { return mariadb_1.generateMariaDBFetcher; } });
|
|
12
|
+
Object.defineProperty(exports, "generateMariaDBCountFetcher", { enumerable: true, get: function () { return mariadb_1.generateMariaDBCountFetcher; } });
|
|
13
|
+
var redshift_1 = require("./redshift");
|
|
14
|
+
Object.defineProperty(exports, "generateRedshiftFetcher", { enumerable: true, get: function () { return redshift_1.generateRedshiftFetcher; } });
|
|
15
|
+
var mongodb_1 = require("./mongodb");
|
|
16
|
+
Object.defineProperty(exports, "generateMongoDBFetcher", { enumerable: true, get: function () { return mongodb_1.generateMongoDBFetcher; } });
|
|
17
|
+
Object.defineProperty(exports, "generateMongoDBCountFetcher", { enumerable: true, get: function () { return mongodb_1.generateMongoDBCountFetcher; } });
|
|
18
|
+
Object.defineProperty(exports, "validateMongoDBConfig", { enumerable: true, get: function () { return mongodb_1.validateMongoDBConfig; } });
|
|
19
|
+
var redis_1 = require("./redis");
|
|
20
|
+
Object.defineProperty(exports, "generateRedisFetcher", { enumerable: true, get: function () { return redis_1.generateRedisFetcher; } });
|
|
21
|
+
Object.defineProperty(exports, "validateRedisConfig", { enumerable: true, get: function () { return redis_1.validateRedisConfig; } });
|
|
22
|
+
var firestore_1 = require("./firestore");
|
|
23
|
+
Object.defineProperty(exports, "generateFirestoreFetcher", { enumerable: true, get: function () { return firestore_1.generateFirestoreFetcher; } });
|
|
24
|
+
Object.defineProperty(exports, "validateFirestoreConfig", { enumerable: true, get: function () { return firestore_1.validateFirestoreConfig; } });
|
|
25
|
+
var clickhouse_1 = require("./clickhouse");
|
|
26
|
+
Object.defineProperty(exports, "generateClickHouseFetcher", { enumerable: true, get: function () { return clickhouse_1.generateClickHouseFetcher; } });
|
|
27
|
+
Object.defineProperty(exports, "validateClickHouseConfig", { enumerable: true, get: function () { return clickhouse_1.validateClickHouseConfig; } });
|
|
28
|
+
var airtable_1 = require("./airtable");
|
|
29
|
+
Object.defineProperty(exports, "generateAirtableFetcher", { enumerable: true, get: function () { return airtable_1.generateAirtableFetcher; } });
|
|
30
|
+
Object.defineProperty(exports, "validateAirtableConfig", { enumerable: true, get: function () { return airtable_1.validateAirtableConfig; } });
|
|
31
|
+
var supabase_1 = require("./supabase");
|
|
32
|
+
Object.defineProperty(exports, "generateSupabaseFetcher", { enumerable: true, get: function () { return supabase_1.generateSupabaseFetcher; } });
|
|
33
|
+
Object.defineProperty(exports, "generateSupabaseCountFetcher", { enumerable: true, get: function () { return supabase_1.generateSupabaseCountFetcher; } });
|
|
34
|
+
Object.defineProperty(exports, "validateSupabaseConfig", { enumerable: true, get: function () { return supabase_1.validateSupabaseConfig; } });
|
|
35
|
+
var turso_1 = require("./turso");
|
|
36
|
+
Object.defineProperty(exports, "generateTursoFetcher", { enumerable: true, get: function () { return turso_1.generateTursoFetcher; } });
|
|
37
|
+
Object.defineProperty(exports, "validateTursoConfig", { enumerable: true, get: function () { return turso_1.validateTursoConfig; } });
|
|
38
|
+
var rest_api_1 = require("./rest-api");
|
|
39
|
+
Object.defineProperty(exports, "generateRESTAPIFetcher", { enumerable: true, get: function () { return rest_api_1.generateRESTAPIFetcher; } });
|
|
40
|
+
Object.defineProperty(exports, "validateRESTAPIConfig", { enumerable: true, get: function () { return rest_api_1.validateRESTAPIConfig; } });
|
|
41
|
+
var javascript_1 = require("./javascript");
|
|
42
|
+
Object.defineProperty(exports, "generateJavaScriptFetcher", { enumerable: true, get: function () { return javascript_1.generateJavaScriptFetcher; } });
|
|
43
|
+
Object.defineProperty(exports, "generateJavaScriptCountFetcher", { enumerable: true, get: function () { return javascript_1.generateJavaScriptCountFetcher; } });
|
|
44
|
+
Object.defineProperty(exports, "validateJavaScriptConfig", { enumerable: true, get: function () { return javascript_1.validateJavaScriptConfig; } });
|
|
45
|
+
var csv_file_1 = require("./csv-file");
|
|
46
|
+
Object.defineProperty(exports, "generateCSVFileFetcher", { enumerable: true, get: function () { return csv_file_1.generateCSVFileFetcher; } });
|
|
47
|
+
Object.defineProperty(exports, "generateCSVCountFetcher", { enumerable: true, get: function () { return csv_file_1.generateCSVCountFetcher; } });
|
|
48
|
+
Object.defineProperty(exports, "validateCSVConfig", { enumerable: true, get: function () { return csv_file_1.validateCSVConfig; } });
|
|
49
|
+
var static_collection_1 = require("./static-collection");
|
|
50
|
+
Object.defineProperty(exports, "generateStaticCollectionFetcher", { enumerable: true, get: function () { return static_collection_1.generateStaticCollectionFetcher; } });
|
|
51
|
+
Object.defineProperty(exports, "generateStaticCollectionCountFetcher", { enumerable: true, get: function () { return static_collection_1.generateStaticCollectionCountFetcher; } });
|
|
52
|
+
Object.defineProperty(exports, "validateStaticCollectionConfig", { enumerable: true, get: function () { return static_collection_1.validateStaticCollectionConfig; } });
|
|
53
|
+
var google_sheets_1 = require("./google-sheets");
|
|
54
|
+
Object.defineProperty(exports, "generateGoogleSheetsFetcher", { enumerable: true, get: function () { return google_sheets_1.generateGoogleSheetsFetcher; } });
|
|
55
|
+
Object.defineProperty(exports, "validateGoogleSheetsConfig", { enumerable: true, get: function () { return google_sheets_1.validateGoogleSheetsConfig; } });
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/fetchers/index.ts"],"names":[],"mappings":";;;AAAA,2CAAwF;AAA/E,uHAAA,yBAAyB,OAAA;AAAE,4HAAA,8BAA8B,OAAA;AAClE,iCAAyE;AAAhE,6GAAA,oBAAoB,OAAA;AAAE,kHAAA,yBAAyB,OAAA;AACxD,qCAA+E;AAAtE,iHAAA,sBAAsB,OAAA;AAAE,sHAAA,2BAA2B,OAAA;AAC5D,uCAAoD;AAA3C,mHAAA,uBAAuB,OAAA;AAChC,qCAIkB;AAHhB,iHAAA,sBAAsB,OAAA;AACtB,sHAAA,2BAA2B,OAAA;AAC3B,gHAAA,qBAAqB,OAAA;AAEvB,iCAAmE;AAA1D,6GAAA,oBAAoB,OAAA;AAAE,4GAAA,mBAAmB,OAAA;AAClD,yCAA+E;AAAtE,qHAAA,wBAAwB,OAAA;AAAE,oHAAA,uBAAuB,OAAA;AAC1D,2CAAkF;AAAzE,uHAAA,yBAAyB,OAAA;AAAE,sHAAA,wBAAwB,OAAA;AAC5D,uCAA4E;AAAnE,mHAAA,uBAAuB,OAAA;AAAE,kHAAA,sBAAsB,OAAA;AACxD,uCAImB;AAHjB,mHAAA,uBAAuB,OAAA;AACvB,wHAAA,4BAA4B,OAAA;AAC5B,kHAAA,sBAAsB,OAAA;AAExB,iCAAmE;AAA1D,6GAAA,oBAAoB,OAAA;AAAE,4GAAA,mBAAmB,OAAA;AAClD,uCAA0E;AAAjE,kHAAA,sBAAsB,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AACtD,2CAIqB;AAHnB,uHAAA,yBAAyB,OAAA;AACzB,4HAAA,8BAA8B,OAAA;AAC9B,sHAAA,wBAAwB,OAAA;AAE1B,uCAA+F;AAAtF,kHAAA,sBAAsB,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAC3E,yDAI4B;AAH1B,oIAAA,+BAA+B,OAAA;AAC/B,yIAAA,oCAAoC,OAAA;AACpC,mIAAA,8BAA8B,OAAA;AAEhC,iDAAyF;AAAhF,4HAAA,2BAA2B,OAAA;AAAE,2HAAA,0BAA0B,OAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const validateJavaScriptConfig: (config: Record<string, unknown>) => {
|
|
2
|
+
isValid: boolean;
|
|
3
|
+
error?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const generateJavaScriptFetcher: (config: Record<string, unknown>) => string;
|
|
6
|
+
export declare const generateJavaScriptCountFetcher: (_config: any) => string;
|
|
7
|
+
//# sourceMappingURL=javascript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"javascript.d.ts","sourceRoot":"","sources":["../../../src/fetchers/javascript.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,WAC3B,OAAO,MAAM,EAAE,OAAO,CAAC,KAC9B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CA2BpC,CAAA;AAMD,eAAO,MAAM,yBAAyB,WAAY,OAAO,MAAM,EAAE,OAAO,CAAC,KAAG,MAgE3E,CAAA;AAGD,eAAO,MAAM,8BAA8B,YAAa,GAAG,KAAG,MA+C7D,CAAA"}
|