@malloy-publisher/server 0.0.382-dev → 0.2.0
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/README.docker.md +145 -20
- package/README.md +65 -12
- package/dist/app/api-doc.html +5 -0
- package/dist/app/api-doc.yaml +3903 -583
- package/dist/app/assets/EnvironmentPage-DiUgLuCH.js +1 -0
- package/dist/app/assets/HomePage-MhhjhnFj.js +1 -0
- package/dist/app/assets/LightMode-BEyvNUzT.js +1 -0
- package/dist/app/assets/MainPage-D4Cfee9o.js +2 -0
- package/dist/app/assets/MaterializationsPage-nGgGqwSN.js +1 -0
- package/dist/app/assets/ModelPage-DLAcEw-F.js +1 -0
- package/dist/app/assets/PackagePage-Df0ikH7w.js +1 -0
- package/dist/app/assets/RouteError-BFQwtroH.js +1 -0
- package/dist/app/assets/ThemeEditorPage-OoskoQYN.js +1 -0
- package/dist/app/assets/WorkbookPage-CpFgvUDC.js +1 -0
- package/dist/app/assets/{core-CjeTkq8O.es-BqRc6yhC.js → core-lb28vQkR.es-BoVSOc75.js} +1 -1
- package/dist/app/assets/github-dark-DenFmJkN.es-DHJKELXO.js +1 -0
- package/dist/app/assets/index-5eLCcNmP.css +1 -0
- package/dist/app/assets/index-6ypuFH6g.js +1774 -0
- package/dist/app/assets/index-B8pnU_V_.js +615 -0
- package/dist/app/assets/index-BImcHmVP.js +1 -0
- package/dist/app/assets/index-DSoCUF-f.js +2725 -0
- package/dist/app/assets/index-DfqzSItA.js +2 -0
- package/dist/app/assets/index-w_0OQJgZ.js +23 -0
- package/dist/app/index.html +8 -4
- package/dist/cpufeatures-1yrn0vtw.node +0 -0
- package/dist/default-publisher.config.json +23 -0
- package/dist/{instrumentation.js → instrumentation.mjs} +10631 -10573
- package/dist/package_load_worker.mjs +15219 -0
- package/dist/runtime/publisher.js +331 -0
- package/dist/{server.js → server.mjs} +115548 -49590
- package/dist/sshcrypto-vd2k5hq9.node +0 -0
- package/package.json +41 -28
- package/publisher.config.example.bigquery.json +33 -0
- package/publisher.config.example.duckdb.json +23 -0
- package/.eslintrc.json +0 -44
- package/.prettierignore +0 -1
- package/.prettierrc +0 -4
- package/build.ts +0 -38
- package/dist/app/assets/HomePage-Dn3E4CuB.js +0 -1
- package/dist/app/assets/MainPage-BzB3yoqi.js +0 -2
- package/dist/app/assets/ModelPage-C9O_sAXT.js +0 -1
- package/dist/app/assets/PackagePage-DcxKEjBX.js +0 -1
- package/dist/app/assets/ProjectPage-BDj307rF.js +0 -1
- package/dist/app/assets/RouteError-DAShbVCG.js +0 -1
- package/dist/app/assets/WorkbookPage-Cs_XYEaB.js +0 -1
- package/dist/app/assets/index-15BOvhp0.js +0 -456
- package/dist/app/assets/index-Bb2jqquW.js +0 -676
- package/dist/app/assets/index-CMlGQMcl.css +0 -1
- package/dist/app/assets/index-D68X76-7.js +0 -1276
- package/dist/app/assets/index.umd-DGBekgSu.js +0 -1145
- package/dxt/malloy_bridge.py +0 -354
- package/dxt/manifest.json +0 -22
- package/eslint.config.mjs +0 -76
- package/k6-tests/README.md +0 -144
- package/k6-tests/bun.lock +0 -797
- package/k6-tests/load-test/load-test-crud-connections.ts +0 -263
- package/k6-tests/load-test/load-test-crud-packages.ts +0 -461
- package/k6-tests/load-test/load-test-crud-projects.ts +0 -160
- package/k6-tests/load-test/load-test-crud.ts +0 -142
- package/k6-tests/load-test/load-test.ts +0 -784
- package/k6-tests/package.json +0 -27
- package/k6-tests/scripts/run-with-otel.sh +0 -50
- package/k6-tests/smoke-test/smoke-test.ts +0 -158
- package/k6-tests/tsconfig.json +0 -29
- package/k6-tests/utils/client_factory.ts +0 -128
- package/k6-tests/utils/common.ts +0 -489
- package/k6-tests/utils/logger.ts +0 -62
- package/k6-tests/utils/types.d.ts +0 -35
- package/malloy_mcp.dxt +0 -0
- package/publisher.config.json +0 -33
- package/src/config.spec.ts +0 -850
- package/src/config.ts +0 -305
- package/src/constants.ts +0 -10
- package/src/controller/compile.controller.ts +0 -35
- package/src/controller/connection.controller.ts +0 -515
- package/src/controller/database.controller.ts +0 -21
- package/src/controller/manifest.controller.ts +0 -29
- package/src/controller/materialization.controller.ts +0 -125
- package/src/controller/model.controller.ts +0 -107
- package/src/controller/package.controller.ts +0 -182
- package/src/controller/query.controller.ts +0 -60
- package/src/controller/watch-mode.controller.ts +0 -98
- package/src/data_styles.ts +0 -71
- package/src/dto/connection.dto.spec.ts +0 -131
- package/src/dto/connection.dto.ts +0 -174
- package/src/dto/index.ts +0 -2
- package/src/dto/package.dto.spec.ts +0 -42
- package/src/dto/package.dto.ts +0 -12
- package/src/dto/validate.spec.ts +0 -76
- package/src/dto/validate.ts +0 -31
- package/src/errors.ts +0 -116
- package/src/health.ts +0 -189
- package/src/instrumentation.ts +0 -148
- package/src/logger.ts +0 -154
- package/src/mcp/error_messages.ts +0 -199
- package/src/mcp/handler_utils.ts +0 -239
- package/src/mcp/mcp_constants.ts +0 -22
- package/src/mcp/prompts/handlers.ts +0 -84
- package/src/mcp/prompts/index.ts +0 -11
- package/src/mcp/prompts/prompt_definitions.ts +0 -160
- package/src/mcp/prompts/prompt_service.ts +0 -67
- package/src/mcp/prompts/utils.ts +0 -62
- package/src/mcp/resource_metadata.ts +0 -47
- package/src/mcp/resources/model_resource.ts +0 -153
- package/src/mcp/resources/notebook_resource.ts +0 -137
- package/src/mcp/resources/package_resource.ts +0 -370
- package/src/mcp/resources/project_resource.ts +0 -184
- package/src/mcp/resources/query_resource.ts +0 -117
- package/src/mcp/resources/source_resource.ts +0 -141
- package/src/mcp/resources/view_resource.ts +0 -136
- package/src/mcp/server.ts +0 -62
- package/src/mcp/tools/discovery_tools.ts +0 -258
- package/src/mcp/tools/execute_query_tool.ts +0 -265
- package/src/server.ts +0 -1195
- package/src/service/connection.spec.ts +0 -1331
- package/src/service/connection.ts +0 -1511
- package/src/service/connection_service.spec.ts +0 -641
- package/src/service/connection_service.ts +0 -181
- package/src/service/db_utils.spec.ts +0 -714
- package/src/service/db_utils.ts +0 -1227
- package/src/service/filter.spec.ts +0 -447
- package/src/service/filter.ts +0 -337
- package/src/service/filter_integration.spec.ts +0 -825
- package/src/service/gcs_s3_utils.ts +0 -427
- package/src/service/manifest_service.spec.ts +0 -201
- package/src/service/manifest_service.ts +0 -106
- package/src/service/materialization_service.spec.ts +0 -648
- package/src/service/materialization_service.ts +0 -929
- package/src/service/materialized_table_gc.spec.ts +0 -383
- package/src/service/materialized_table_gc.ts +0 -279
- package/src/service/model.spec.ts +0 -257
- package/src/service/model.ts +0 -1069
- package/src/service/package.spec.ts +0 -236
- package/src/service/package.ts +0 -463
- package/src/service/project.ts +0 -681
- package/src/service/project_compile.spec.ts +0 -197
- package/src/service/project_store.spec.ts +0 -859
- package/src/service/project_store.ts +0 -1531
- package/src/service/quoting.ts +0 -41
- package/src/service/resolve_project.ts +0 -13
- package/src/storage/BaseRepository.ts +0 -31
- package/src/storage/DatabaseInterface.ts +0 -180
- package/src/storage/StorageManager.mock.ts +0 -59
- package/src/storage/StorageManager.ts +0 -210
- package/src/storage/duckdb/ConnectionRepository.ts +0 -141
- package/src/storage/duckdb/DuckDBConnection.ts +0 -177
- package/src/storage/duckdb/DuckDBManifestStore.ts +0 -70
- package/src/storage/duckdb/DuckDBRepository.ts +0 -224
- package/src/storage/duckdb/ManifestRepository.ts +0 -119
- package/src/storage/duckdb/MaterializationRepository.ts +0 -249
- package/src/storage/duckdb/PackageRepository.ts +0 -135
- package/src/storage/duckdb/ProjectRepository.ts +0 -148
- package/src/storage/duckdb/manifest_store.spec.ts +0 -133
- package/src/storage/duckdb/schema.ts +0 -147
- package/src/storage/ducklake/DuckLakeManifestStore.ts +0 -146
- package/src/utils.ts +0 -13
- package/tests/fixtures/persist-test/data/orders.csv +0 -5
- package/tests/fixtures/persist-test/persist_test.malloy +0 -11
- package/tests/fixtures/persist-test/publisher.json +0 -5
- package/tests/fixtures/publisher.config.json +0 -15
- package/tests/harness/e2e.ts +0 -96
- package/tests/harness/mcp_test_setup.ts +0 -344
- package/tests/harness/mocks.ts +0 -37
- package/tests/harness/rest_e2e.ts +0 -68
- package/tests/harness/uris.ts +0 -31
- package/tests/integration/materialization/materialization_lifecycle.integration.spec.ts +0 -470
- package/tests/integration/mcp/mcp_execute_query_tool.integration.spec.ts +0 -434
- package/tests/integration/mcp/mcp_resource.integration.spec.ts +0 -663
- package/tests/integration/mcp/mcp_transport.integration.spec.ts +0 -122
- package/tests/integration/mcp/setup.spec.ts +0 -5
- package/tests/unit/duckdb/attached_databases.test.ts +0 -1132
- package/tests/unit/ducklake/ducklake.test.ts +0 -950
- package/tests/unit/mcp/prompt_definitions.test.ts +0 -102
- package/tests/unit/mcp/prompt_happy.test.ts +0 -51
- package/tsconfig.json +0 -32
package/src/config.ts
DELETED
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
import { components } from "./api";
|
|
4
|
-
import { API_PREFIX, PUBLISHER_CONFIG_NAME } from "./constants";
|
|
5
|
-
import { logger } from "./logger";
|
|
6
|
-
|
|
7
|
-
type FilesystemPath = `./${string}` | `../${string}` | `/${string}`;
|
|
8
|
-
type GcsPath = `gs://${string}`;
|
|
9
|
-
type ApiConnection = components["schemas"]["Connection"];
|
|
10
|
-
|
|
11
|
-
export type Package = {
|
|
12
|
-
name: string;
|
|
13
|
-
location: FilesystemPath | GcsPath;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export type Connection = {
|
|
17
|
-
name: string;
|
|
18
|
-
type: string;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export type Project = {
|
|
22
|
-
name: string;
|
|
23
|
-
packages: Package[];
|
|
24
|
-
connections?: Connection[];
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export type PublisherConfig = {
|
|
28
|
-
frozenConfig: boolean;
|
|
29
|
-
projects: Project[];
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export type ProcessedProject = {
|
|
33
|
-
name: string;
|
|
34
|
-
packages: Package[];
|
|
35
|
-
connections: ApiConnection[];
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export type ProcessedPublisherConfig = {
|
|
39
|
-
frozenConfig: boolean;
|
|
40
|
-
projects: ProcessedProject[];
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
function substituteEnvVars(value: string): string {
|
|
44
|
-
const envVarPattern = /\$\{([A-Z_][A-Z0-9_]*)\}/g;
|
|
45
|
-
|
|
46
|
-
return value.replace(envVarPattern, (_match, varName) => {
|
|
47
|
-
const envValue = process.env[varName];
|
|
48
|
-
|
|
49
|
-
if (envValue !== undefined) {
|
|
50
|
-
return envValue;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
throw new Error(
|
|
54
|
-
`Environment variable '\${${varName}}' is not set in configuration file`,
|
|
55
|
-
);
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function processConfigValue(value: unknown): unknown {
|
|
60
|
-
if (typeof value === "string") {
|
|
61
|
-
return substituteEnvVars(value);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (Array.isArray(value)) {
|
|
65
|
-
return value.map((item) => processConfigValue(item));
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (value !== null && typeof value === "object") {
|
|
69
|
-
const result: Record<string, unknown> = {};
|
|
70
|
-
for (const [key, val] of Object.entries(value)) {
|
|
71
|
-
result[key] = processConfigValue(val);
|
|
72
|
-
}
|
|
73
|
-
return result;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return value;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export const getPublisherConfig = (serverRoot: string): PublisherConfig => {
|
|
80
|
-
const publisherConfigPath = path.join(serverRoot, PUBLISHER_CONFIG_NAME);
|
|
81
|
-
if (!fs.existsSync(publisherConfigPath)) {
|
|
82
|
-
return {
|
|
83
|
-
frozenConfig: false,
|
|
84
|
-
projects: [],
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
let rawConfig: unknown;
|
|
89
|
-
try {
|
|
90
|
-
const fileContent = fs.readFileSync(publisherConfigPath, "utf8");
|
|
91
|
-
rawConfig = JSON.parse(fileContent);
|
|
92
|
-
} catch (error) {
|
|
93
|
-
logger.error(
|
|
94
|
-
`Failed to parse ${PUBLISHER_CONFIG_NAME}. Using default empty config.`,
|
|
95
|
-
{ error },
|
|
96
|
-
);
|
|
97
|
-
return {
|
|
98
|
-
frozenConfig: false,
|
|
99
|
-
projects: [],
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Process environment variables in config values
|
|
104
|
-
const processedConfig = processConfigValue(rawConfig);
|
|
105
|
-
|
|
106
|
-
if (
|
|
107
|
-
processedConfig &&
|
|
108
|
-
typeof processedConfig === "object" &&
|
|
109
|
-
"projects" in processedConfig &&
|
|
110
|
-
processedConfig.projects &&
|
|
111
|
-
typeof processedConfig.projects === "object" &&
|
|
112
|
-
!Array.isArray(processedConfig.projects)
|
|
113
|
-
) {
|
|
114
|
-
logger.error(
|
|
115
|
-
`Invalid ${PUBLISHER_CONFIG_NAME}: projects must be an array. Using default empty config.`,
|
|
116
|
-
);
|
|
117
|
-
return {
|
|
118
|
-
frozenConfig: false,
|
|
119
|
-
projects: [],
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Ensure projects is an array
|
|
124
|
-
let projects: unknown[] = [];
|
|
125
|
-
if (
|
|
126
|
-
processedConfig &&
|
|
127
|
-
typeof processedConfig === "object" &&
|
|
128
|
-
"projects" in processedConfig &&
|
|
129
|
-
Array.isArray((processedConfig as { projects: unknown }).projects)
|
|
130
|
-
) {
|
|
131
|
-
projects = (processedConfig as { projects: unknown[] }).projects;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
let frozenConfig = false;
|
|
135
|
-
if (
|
|
136
|
-
processedConfig &&
|
|
137
|
-
typeof processedConfig === "object" &&
|
|
138
|
-
"frozenConfig" in processedConfig
|
|
139
|
-
) {
|
|
140
|
-
frozenConfig = Boolean(
|
|
141
|
-
(processedConfig as { frozenConfig: unknown }).frozenConfig,
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
return {
|
|
146
|
-
frozenConfig,
|
|
147
|
-
projects,
|
|
148
|
-
} as PublisherConfig;
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
export const isPublisherConfigFrozen = (serverRoot: string) => {
|
|
152
|
-
try {
|
|
153
|
-
const publisherConfig = getPublisherConfig(serverRoot);
|
|
154
|
-
return Boolean(publisherConfig.frozenConfig);
|
|
155
|
-
} catch (error) {
|
|
156
|
-
logger.error(
|
|
157
|
-
`Error checking if ${PUBLISHER_CONFIG_NAME} is frozen. Defaulting to false.`,
|
|
158
|
-
{ error },
|
|
159
|
-
);
|
|
160
|
-
return false;
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
export const getConnectionsFromPublisherConfig = (
|
|
165
|
-
serverRoot: string,
|
|
166
|
-
projectName: string,
|
|
167
|
-
): Connection[] => {
|
|
168
|
-
try {
|
|
169
|
-
const publisherConfig = getPublisherConfig(serverRoot);
|
|
170
|
-
if (!Array.isArray(publisherConfig.projects)) {
|
|
171
|
-
return [];
|
|
172
|
-
}
|
|
173
|
-
const project = publisherConfig.projects.find(
|
|
174
|
-
(p) => p && p.name === projectName,
|
|
175
|
-
);
|
|
176
|
-
return Array.isArray(project?.connections) ? project.connections : [];
|
|
177
|
-
} catch (error) {
|
|
178
|
-
logger.error(
|
|
179
|
-
`Error getting connections for project "${projectName}" from ${PUBLISHER_CONFIG_NAME}`,
|
|
180
|
-
{ error },
|
|
181
|
-
);
|
|
182
|
-
return [];
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
export const convertConnectionsToApiConnections = (
|
|
187
|
-
connections: Connection[],
|
|
188
|
-
): ApiConnection[] => {
|
|
189
|
-
if (!Array.isArray(connections)) {
|
|
190
|
-
return [];
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
return connections
|
|
194
|
-
.filter((conn) => {
|
|
195
|
-
if (!conn || typeof conn !== "object") {
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
if (!conn.name || typeof conn.name !== "string") {
|
|
199
|
-
logger.warn(
|
|
200
|
-
`Invalid connection: missing or invalid "name" field. Skipping.`,
|
|
201
|
-
{ connection: conn },
|
|
202
|
-
);
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
if (!conn.type || typeof conn.type !== "string") {
|
|
206
|
-
logger.warn(
|
|
207
|
-
`Invalid connection "${conn.name}": missing or invalid "type" field. Skipping.`,
|
|
208
|
-
);
|
|
209
|
-
return false;
|
|
210
|
-
}
|
|
211
|
-
return true;
|
|
212
|
-
})
|
|
213
|
-
.map((conn) => ({
|
|
214
|
-
...conn,
|
|
215
|
-
name: conn.name,
|
|
216
|
-
type: conn.type as ApiConnection["type"],
|
|
217
|
-
resource: `${API_PREFIX}/connections/${conn.name}`,
|
|
218
|
-
}));
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
export const getProcessedPublisherConfig = (
|
|
222
|
-
serverRoot: string,
|
|
223
|
-
): ProcessedPublisherConfig => {
|
|
224
|
-
const rawConfig = getPublisherConfig(serverRoot);
|
|
225
|
-
|
|
226
|
-
// Ensure projects is an array
|
|
227
|
-
if (!Array.isArray(rawConfig.projects)) {
|
|
228
|
-
logger.warn(
|
|
229
|
-
`Invalid ${PUBLISHER_CONFIG_NAME}: projects must be an array. Using empty array.`,
|
|
230
|
-
);
|
|
231
|
-
return {
|
|
232
|
-
frozenConfig: rawConfig.frozenConfig ?? false,
|
|
233
|
-
projects: [],
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// Filter and validate projects, skipping invalid ones
|
|
238
|
-
const validProjects: ProcessedProject[] = [];
|
|
239
|
-
for (const project of rawConfig.projects) {
|
|
240
|
-
if (!project || typeof project !== "object") {
|
|
241
|
-
logger.warn(
|
|
242
|
-
`Invalid project in ${PUBLISHER_CONFIG_NAME}: project must be an object. Skipping.`,
|
|
243
|
-
);
|
|
244
|
-
continue;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
if (!project.name || typeof project.name !== "string") {
|
|
248
|
-
logger.warn(
|
|
249
|
-
`Invalid project in ${PUBLISHER_CONFIG_NAME}: missing or invalid "name" field. Skipping project.`,
|
|
250
|
-
{ project },
|
|
251
|
-
);
|
|
252
|
-
continue;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
if (!Array.isArray(project.packages)) {
|
|
256
|
-
logger.warn(
|
|
257
|
-
`Invalid project "${project.name}" in ${PUBLISHER_CONFIG_NAME}: missing or invalid "packages" field (must be an array). Skipping project.`,
|
|
258
|
-
);
|
|
259
|
-
continue;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
// Validate packages have required fields
|
|
263
|
-
const validPackages = project.packages.filter((pkg) => {
|
|
264
|
-
if (!pkg || typeof pkg !== "object") {
|
|
265
|
-
logger.warn(
|
|
266
|
-
`Invalid package in project "${project.name}": package must be an object. Skipping.`,
|
|
267
|
-
);
|
|
268
|
-
return false;
|
|
269
|
-
}
|
|
270
|
-
if (!pkg.name || typeof pkg.name !== "string") {
|
|
271
|
-
logger.warn(
|
|
272
|
-
`Invalid package in project "${project.name}": missing or invalid "name" field. Skipping.`,
|
|
273
|
-
);
|
|
274
|
-
return false;
|
|
275
|
-
}
|
|
276
|
-
if (!pkg.location || typeof pkg.location !== "string") {
|
|
277
|
-
logger.warn(
|
|
278
|
-
`Invalid package "${pkg.name}" in project "${project.name}": missing or invalid "location" field. Skipping.`,
|
|
279
|
-
);
|
|
280
|
-
return false;
|
|
281
|
-
}
|
|
282
|
-
return true;
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
if (validPackages.length === 0) {
|
|
286
|
-
logger.warn(
|
|
287
|
-
`Project "${project.name}" has no valid packages. Skipping project.`,
|
|
288
|
-
);
|
|
289
|
-
continue;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
validProjects.push({
|
|
293
|
-
name: project.name,
|
|
294
|
-
packages: validPackages,
|
|
295
|
-
connections: convertConnectionsToApiConnections(
|
|
296
|
-
project.connections || [],
|
|
297
|
-
),
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
return {
|
|
302
|
-
frozenConfig: rawConfig.frozenConfig ?? false,
|
|
303
|
-
projects: validProjects,
|
|
304
|
-
};
|
|
305
|
-
};
|
package/src/constants.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import os from "os";
|
|
2
|
-
export const API_PREFIX = "/api/v0";
|
|
3
|
-
export const README_NAME = "README.md";
|
|
4
|
-
export const PUBLISHER_CONFIG_NAME = "publisher.config.json";
|
|
5
|
-
export const PACKAGE_MANIFEST_NAME = "publisher.json";
|
|
6
|
-
export const MODEL_FILE_SUFFIX = ".malloy";
|
|
7
|
-
export const NOTEBOOK_FILE_SUFFIX = ".malloynb";
|
|
8
|
-
export const ROW_LIMIT = 1000;
|
|
9
|
-
export const TEMP_DIR_PATH = os.tmpdir();
|
|
10
|
-
export const PUBLISHER_DATA_DIR = "publisher_data";
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { LogMessage } from "@malloydata/malloy";
|
|
2
|
-
import { ProjectStore } from "../service/project_store";
|
|
3
|
-
|
|
4
|
-
export class CompileController {
|
|
5
|
-
private projectStore: ProjectStore;
|
|
6
|
-
|
|
7
|
-
constructor(projectStore: ProjectStore) {
|
|
8
|
-
this.projectStore = projectStore;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
public async compile(
|
|
12
|
-
projectName: string,
|
|
13
|
-
packageName: string,
|
|
14
|
-
modelName: string,
|
|
15
|
-
source: string,
|
|
16
|
-
includeSql: boolean = false,
|
|
17
|
-
): Promise<{ status: string; problems: LogMessage[]; sql?: string }> {
|
|
18
|
-
const project = await this.projectStore.getProject(projectName, false);
|
|
19
|
-
const { problems, sql } = await project.compileSource(
|
|
20
|
-
packageName,
|
|
21
|
-
modelName,
|
|
22
|
-
source,
|
|
23
|
-
includeSql,
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
// Determine overall status based on presence of errors
|
|
27
|
-
const hasErrors = problems.some((p) => p.severity === "error");
|
|
28
|
-
|
|
29
|
-
return {
|
|
30
|
-
status: hasErrors ? "error" : "success",
|
|
31
|
-
problems: problems,
|
|
32
|
-
...(sql !== undefined && { sql }),
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
}
|