@malloy-publisher/server 0.0.235 → 0.0.236
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/dist/app/api-doc.yaml +47 -17
- package/dist/package_load_worker.mjs +8 -1
- package/dist/server.mjs +471 -54
- package/package.json +5 -2
- package/.eslintrc.json +0 -44
- package/.prettierignore +0 -1
- package/.prettierrc +0 -4
- package/build.ts +0 -97
- 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.example.bigquery.json +0 -33
- package/publisher.config.example.duckdb.json +0 -23
- package/publisher.config.json +0 -23
- package/scripts/bake-duckdb-extensions.js +0 -110
- package/src/config.spec.ts +0 -1535
- package/src/config.theme.spec.ts +0 -178
- package/src/config.ts +0 -1142
- package/src/constants.ts +0 -105
- package/src/controller/compile.controller.ts +0 -40
- package/src/controller/connection.controller.spec.ts +0 -849
- package/src/controller/connection.controller.ts +0 -901
- package/src/controller/database.controller.ts +0 -24
- package/src/controller/materialization.controller.spec.ts +0 -293
- package/src/controller/materialization.controller.ts +0 -319
- package/src/controller/model.controller.ts +0 -164
- package/src/controller/package.controller.spec.ts +0 -273
- package/src/controller/package.controller.ts +0 -306
- package/src/controller/query.controller.ts +0 -152
- package/src/controller/theme.controller.ts +0 -83
- package/src/controller/watch-mode.controller.ts +0 -243
- package/src/data_styles.ts +0 -71
- package/src/default-publisher.config.json +0 -23
- package/src/ducklake_version.spec.ts +0 -163
- package/src/ducklake_version.ts +0 -153
- package/src/errors.spec.ts +0 -119
- package/src/errors.ts +0 -237
- package/src/filter_deprecation.spec.ts +0 -64
- package/src/filter_deprecation.ts +0 -42
- package/src/health.spec.ts +0 -123
- package/src/health.ts +0 -233
- package/src/heap_check.spec.ts +0 -144
- package/src/heap_check.ts +0 -144
- package/src/instrumentation.ts +0 -214
- package/src/json_utils.spec.ts +0 -51
- package/src/json_utils.ts +0 -33
- package/src/logger.spec.ts +0 -210
- package/src/logger.ts +0 -251
- package/src/malloy_pin_prereqs.spec.ts +0 -25
- package/src/materialization_metrics.spec.ts +0 -169
- package/src/materialization_metrics.ts +0 -346
- package/src/mcp/error_messages.spec.ts +0 -35
- package/src/mcp/error_messages.ts +0 -183
- package/src/mcp/handler_utils.spec.ts +0 -108
- package/src/mcp/handler_utils.ts +0 -251
- package/src/mcp/mcp_constants.ts +0 -6
- package/src/mcp/query_envelope.spec.ts +0 -229
- package/src/mcp/query_envelope.ts +0 -240
- package/src/mcp/server.protocol.spec.ts +0 -250
- package/src/mcp/server.ts +0 -87
- package/src/mcp/skills/build_skills_bundle.spec.ts +0 -51
- package/src/mcp/skills/build_skills_bundle.ts +0 -176
- package/src/mcp/skills/skills_bundle.json +0 -1
- package/src/mcp/skills/skills_bundle.spec.ts +0 -171
- package/src/mcp/tool_response.spec.ts +0 -108
- package/src/mcp/tool_response.ts +0 -138
- package/src/mcp/tools/compile_tool.spec.ts +0 -315
- package/src/mcp/tools/compile_tool.ts +0 -208
- package/src/mcp/tools/docs_search/build_docs_index.ts +0 -132
- package/src/mcp/tools/docs_search/malloy_docs_index.json +0 -1
- package/src/mcp/tools/docs_search_tool.spec.ts +0 -32
- package/src/mcp/tools/docs_search_tool.ts +0 -128
- package/src/mcp/tools/embedding_index.spec.ts +0 -1236
- package/src/mcp/tools/embedding_index.ts +0 -808
- package/src/mcp/tools/execute_query_tool.spec.ts +0 -294
- package/src/mcp/tools/execute_query_tool.ts +0 -316
- package/src/mcp/tools/get_context_eval.ts +0 -275
- package/src/mcp/tools/get_context_tool.spec.ts +0 -592
- package/src/mcp/tools/get_context_tool.ts +0 -585
- package/src/mcp/tools/reload_package_tool.spec.ts +0 -232
- package/src/mcp/tools/reload_package_tool.ts +0 -132
- package/src/mcp_config.spec.ts +0 -919
- package/src/mcp_config.ts +0 -425
- package/src/oom_guards.integration.spec.ts +0 -269
- package/src/package_load/package_load_pool.spec.ts +0 -252
- package/src/package_load/package_load_pool.ts +0 -931
- package/src/package_load/package_load_worker.ts +0 -1034
- package/src/package_load/protocol.ts +0 -364
- package/src/package_load/rpc_wait_accountant.spec.ts +0 -109
- package/src/package_load/rpc_wait_accountant.ts +0 -76
- package/src/package_load_metrics.spec.ts +0 -114
- package/src/package_load_metrics.ts +0 -127
- package/src/path_safety.spec.ts +0 -158
- package/src/path_safety.ts +0 -146
- package/src/pg_helpers.spec.ts +0 -223
- package/src/pg_helpers.ts +0 -52
- package/src/query_cap_metrics.spec.ts +0 -89
- package/src/query_cap_metrics.ts +0 -116
- package/src/query_concurrency.spec.ts +0 -247
- package/src/query_concurrency.ts +0 -237
- package/src/query_metadata_metrics.ts +0 -49
- package/src/query_param_utils.ts +0 -29
- package/src/query_timeout.spec.ts +0 -224
- package/src/query_timeout.ts +0 -179
- package/src/runtime/publisher.js +0 -328
- package/src/server-old.ts +0 -988
- package/src/server.ts +0 -2059
- package/src/service/annotations.spec.ts +0 -118
- package/src/service/annotations.ts +0 -91
- package/src/service/authorize.spec.ts +0 -154
- package/src/service/authorize.ts +0 -498
- package/src/service/authorize_integration.spec.ts +0 -2041
- package/src/service/build_plan.spec.ts +0 -685
- package/src/service/build_plan.ts +0 -797
- package/src/service/compile_authorize.spec.ts +0 -85
- package/src/service/compile_fragment_techniques.spec.ts +0 -156
- package/src/service/connection.spec.ts +0 -2360
- package/src/service/connection.ts +0 -2187
- package/src/service/connection_config.spec.ts +0 -734
- package/src/service/connection_config.ts +0 -899
- package/src/service/connection_federation.spec.ts +0 -184
- package/src/service/connection_fingerprint.spec.ts +0 -102
- package/src/service/connection_service.spec.ts +0 -711
- package/src/service/connection_service.ts +0 -291
- package/src/service/cron_evaluator.spec.ts +0 -79
- package/src/service/cron_evaluator.ts +0 -105
- package/src/service/db_utils.spec.ts +0 -1085
- package/src/service/db_utils.ts +0 -1502
- package/src/service/duckdb_instance_isolation.spec.ts +0 -137
- package/src/service/ducklake_lazy_attach.spec.ts +0 -110
- package/src/service/embedding_provider.spec.ts +0 -329
- package/src/service/embedding_provider.ts +0 -236
- package/src/service/environment.ts +0 -2191
- package/src/service/environment_admission.spec.ts +0 -344
- package/src/service/environment_compile.spec.ts +0 -197
- package/src/service/environment_store.spec.ts +0 -2274
- package/src/service/environment_store.ts +0 -2434
- package/src/service/environment_store_anchoring.spec.ts +0 -107
- package/src/service/environment_store_clone.spec.ts +0 -350
- package/src/service/explore_visibility.spec.ts +0 -434
- package/src/service/exports_probe.spec.ts +0 -107
- package/src/service/extension_fetch_policy.spec.ts +0 -256
- package/src/service/filter.spec.ts +0 -458
- package/src/service/filter.ts +0 -341
- package/src/service/filter_bypass.spec.ts +0 -418
- package/src/service/filter_integration.spec.ts +0 -1004
- package/src/service/freshness.spec.ts +0 -183
- package/src/service/freshness.ts +0 -112
- package/src/service/gcs_s3_utils.ts +0 -427
- package/src/service/given.ts +0 -105
- package/src/service/givens_integration.spec.ts +0 -219
- package/src/service/manifest_loader.spec.ts +0 -189
- package/src/service/manifest_loader.ts +0 -156
- package/src/service/materialization_build_session.spec.ts +0 -435
- package/src/service/materialization_build_session.ts +0 -681
- package/src/service/materialization_config_validation.spec.ts +0 -99
- package/src/service/materialization_config_validation.ts +0 -120
- package/src/service/materialization_eligibility.spec.ts +0 -158
- package/src/service/materialization_eligibility.ts +0 -305
- package/src/service/materialization_schedule_surface.spec.ts +0 -256
- package/src/service/materialization_scheduler.spec.ts +0 -289
- package/src/service/materialization_scheduler.ts +0 -304
- package/src/service/materialization_serve_transform.spec.ts +0 -1003
- package/src/service/materialization_serve_transform.ts +0 -779
- package/src/service/materialization_service.spec.ts +0 -2373
- package/src/service/materialization_service.ts +0 -2342
- package/src/service/materialization_test_fixtures.ts +0 -249
- package/src/service/model.spec.ts +0 -1157
- package/src/service/model.ts +0 -3370
- package/src/service/model_limits.spec.ts +0 -209
- package/src/service/model_limits.ts +0 -131
- package/src/service/model_storage_serve.spec.ts +0 -193
- package/src/service/model_storage_serve_joins.spec.ts +0 -193
- package/src/service/package.spec.ts +0 -612
- package/src/service/package.ts +0 -1799
- package/src/service/package_manifest.spec.ts +0 -230
- package/src/service/package_manifest.ts +0 -241
- package/src/service/package_memory_governor.spec.ts +0 -173
- package/src/service/package_memory_governor.ts +0 -233
- package/src/service/package_quote_bound_tables.spec.ts +0 -171
- package/src/service/package_race.spec.ts +0 -208
- package/src/service/package_reload_safety.spec.ts +0 -193
- package/src/service/package_rollback.spec.ts +0 -190
- package/src/service/package_worker_path.spec.ts +0 -645
- package/src/service/path_injection.spec.ts +0 -39
- package/src/service/persist_annotation_validation.spec.ts +0 -89
- package/src/service/persist_annotation_validation.ts +0 -59
- package/src/service/persistence_policy.spec.ts +0 -374
- package/src/service/proxy.spec.ts +0 -414
- package/src/service/proxy.ts +0 -248
- package/src/service/query_boundary.spec.ts +0 -470
- package/src/service/query_metadata.spec.ts +0 -408
- package/src/service/query_metadata.ts +0 -492
- package/src/service/query_metadata_identity.spec.ts +0 -149
- package/src/service/query_text.spec.ts +0 -79
- package/src/service/query_text.ts +0 -43
- package/src/service/quoting.spec.ts +0 -135
- package/src/service/quoting.ts +0 -78
- package/src/service/resolve_environment.ts +0 -15
- package/src/service/restricted_mode.spec.ts +0 -299
- package/src/service/source_extraction.ts +0 -225
- package/src/service/theme_store.ts +0 -199
- package/src/storage/DatabaseInterface.ts +0 -198
- package/src/storage/StorageManager.ts +0 -113
- package/src/storage/duckdb/ConnectionRepository.ts +0 -143
- package/src/storage/duckdb/DuckDBConnection.ts +0 -123
- package/src/storage/duckdb/DuckDBRepository.ts +0 -208
- package/src/storage/duckdb/EnvironmentRepository.ts +0 -148
- package/src/storage/duckdb/MaterializationRepository.spec.ts +0 -191
- package/src/storage/duckdb/MaterializationRepository.ts +0 -336
- package/src/storage/duckdb/PackageRepository.ts +0 -135
- package/src/storage/duckdb/schema.ts +0 -229
- package/src/stream_helpers.spec.ts +0 -280
- package/src/stream_helpers.ts +0 -162
- package/src/telemetry.ts +0 -20
- package/src/test_helpers/metrics_harness.ts +0 -166
- package/src/theme_key_parity.spec.ts +0 -57
- package/src/utils.ts +0 -29
- package/tests/fixtures/authorize-compile/model.malloy +0 -9
- package/tests/fixtures/authorize-compile/publisher.json +0 -4
- package/tests/fixtures/html-pages-nopublic/model.malloy +0 -1
- package/tests/fixtures/html-pages-nopublic/publisher.json +0 -5
- package/tests/fixtures/html-pages-test/data.csv +0 -3
- package/tests/fixtures/html-pages-test/public/assets/app.css +0 -3
- package/tests/fixtures/html-pages-test/public/barehtml.html +0 -4
- package/tests/fixtures/html-pages-test/public/bodymeta.html +0 -8
- package/tests/fixtures/html-pages-test/public/data.json +0 -1
- package/tests/fixtures/html-pages-test/public/fitcomment.html +0 -11
- package/tests/fixtures/html-pages-test/public/index.html +0 -9
- package/tests/fixtures/html-pages-test/public/nohead.html +0 -8
- package/tests/fixtures/html-pages-test/public/notfit.html +0 -13
- package/tests/fixtures/html-pages-test/public/slides.html +0 -12
- package/tests/fixtures/html-pages-test/public/sub/page2.html +0 -9
- package/tests/fixtures/html-pages-test/public/unterminated.html +0 -10
- package/tests/fixtures/html-pages-test/publisher.json +0 -5
- package/tests/fixtures/html-pages-test/report.malloy +0 -1
- package/tests/fixtures/persist-multi-level/data/orders.csv +0 -5
- package/tests/fixtures/persist-multi-level/multi_level.malloy +0 -18
- package/tests/fixtures/persist-multi-level/publisher.json +0 -5
- package/tests/fixtures/persist-schedule-test/data/orders.csv +0 -5
- package/tests/fixtures/persist-schedule-test/persist_schedule_test.malloy +0 -11
- package/tests/fixtures/persist-schedule-test/publisher.json +0 -7
- package/tests/fixtures/persist-schedule-warn-test/data/orders.csv +0 -5
- package/tests/fixtures/persist-schedule-warn-test/persist_warn_test.malloy +0 -11
- package/tests/fixtures/persist-schedule-warn-test/publisher.json +0 -6
- 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/fixtures/query-givens/data/orders.csv +0 -7
- package/tests/fixtures/query-givens/model.malloy +0 -34
- package/tests/fixtures/query-givens/publisher.json +0 -5
- package/tests/fixtures/xlsx/database.xlsx +0 -0
- package/tests/harness/mcp_test_setup.ts +0 -332
- package/tests/harness/rest_e2e.ts +0 -68
- package/tests/integration/authorize/compile_authorize_http.integration.spec.ts +0 -92
- package/tests/integration/concurrent_package/concurrent_package.integration.spec.ts +0 -280
- package/tests/integration/duckdb_storage/duckdb_storage.integration.spec.ts +0 -138
- package/tests/integration/first_boot/readiness_line.integration.spec.ts +0 -177
- package/tests/integration/html_pages/html_pages.integration.spec.ts +0 -440
- package/tests/integration/legacy_routes/legacy_routes.integration.spec.ts +0 -259
- package/tests/integration/materialization/environment_list.integration.spec.ts +0 -133
- package/tests/integration/materialization/freshness_gate.integration.spec.ts +0 -292
- package/tests/integration/materialization/manifest_binding.integration.spec.ts +0 -430
- package/tests/integration/materialization/materialization_lifecycle.integration.spec.ts +0 -441
- package/tests/integration/materialization/orchestrated_rebind.integration.spec.ts +0 -150
- package/tests/integration/materialization/reference_manifest.integration.spec.ts +0 -251
- package/tests/integration/materialization/schedule_edit.integration.spec.ts +0 -126
- package/tests/integration/materialization/scheduler.integration.spec.ts +0 -200
- package/tests/integration/materialization/scheduler_recovery.integration.spec.ts +0 -172
- package/tests/integration/materialization/scheduler_transitions.integration.spec.ts +0 -256
- package/tests/integration/materialization/scheduler_wiring.integration.spec.ts +0 -143
- package/tests/integration/mcp/mcp_execute_query_tool.integration.spec.ts +0 -438
- package/tests/integration/mcp/mcp_get_context_semantic.integration.spec.ts +0 -235
- package/tests/integration/mcp/mcp_transport.integration.spec.ts +0 -98
- package/tests/integration/query_givens/query_givens.integration.spec.ts +0 -146
- package/tests/integration/query_givens/query_givens_authorize.integration.spec.ts +0 -121
- package/tests/integration/sdk_givens/sdk_givens.integration.spec.ts +0 -110
- package/tests/integration/watch-mode/watch_mode.integration.spec.ts +0 -421
- package/tests/unit/controller/theme.controller.spec.ts +0 -141
- package/tests/unit/duckdb/attached_databases.test.ts +0 -1243
- package/tests/unit/duckdb/duckdb_connection.test.ts +0 -181
- package/tests/unit/duckdb/legacy_schema_migration.test.ts +0 -197
- package/tests/unit/duckdb/repositories.test.ts +0 -208
- package/tests/unit/ducklake/ducklake.test.ts +0 -952
- package/tests/unit/service/theme_store.spec.ts +0 -139
- package/tsconfig.json +0 -32
package/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@malloy-publisher/server",
|
|
3
3
|
"description": "Malloy Publisher Server",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.236",
|
|
5
5
|
"main": "dist/server.mjs",
|
|
6
6
|
"bin": {
|
|
7
7
|
"malloy-publisher": "dist/server.mjs"
|
|
8
8
|
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
9
12
|
"repository": {
|
|
10
13
|
"type": "git",
|
|
11
14
|
"url": "https://github.com/malloydata/publisher.git"
|
|
@@ -35,6 +38,7 @@
|
|
|
35
38
|
"@azure/identity": "^4.13.0",
|
|
36
39
|
"@azure/storage-blob": "^12.26.0",
|
|
37
40
|
"@duckdb/node-api": "1.5.3-r.2",
|
|
41
|
+
"@google-cloud/bigquery": "^7.9.4",
|
|
38
42
|
"@google-cloud/storage": "^7.16.0",
|
|
39
43
|
"@malloydata/db-bigquery": "^0.0.427",
|
|
40
44
|
"@malloydata/db-databricks": "^0.0.427",
|
|
@@ -55,7 +59,6 @@
|
|
|
55
59
|
"@opentelemetry/sdk-node": "^0.200.0",
|
|
56
60
|
"@opentelemetry/sdk-trace-node": "^2.0.0",
|
|
57
61
|
"async-mutex": "^0.5.0",
|
|
58
|
-
"aws-sdk": "^2.1692.0",
|
|
59
62
|
"body-parser": "^1.20.2",
|
|
60
63
|
"chokidar": "^4.0.3",
|
|
61
64
|
"cors": "^2.8.5",
|
package/.eslintrc.json
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
// Specify the environments where the code will run
|
|
3
|
-
"env": {
|
|
4
|
-
"jest": true, // Enable Jest for testing
|
|
5
|
-
"browser": true // Enable browser environment
|
|
6
|
-
},
|
|
7
|
-
|
|
8
|
-
// Stop ESLint from searching for configuration in parent folders
|
|
9
|
-
"root": true,
|
|
10
|
-
|
|
11
|
-
// Specify the parser for TypeScript (using @typescript-eslint/parser)
|
|
12
|
-
"parser": "@typescript-eslint/parser", // Leverages TS ESTree to lint TypeScript
|
|
13
|
-
|
|
14
|
-
// Add additional rules and configuration options
|
|
15
|
-
"plugins": ["@typescript-eslint"],
|
|
16
|
-
|
|
17
|
-
// Extend various ESLint configurations and plugins
|
|
18
|
-
"extends": [
|
|
19
|
-
"eslint:recommended", // ESLint recommended rules
|
|
20
|
-
"plugin:react/recommended", // React recommended rules
|
|
21
|
-
"plugin:@typescript-eslint/recommended", // TypeScript recommended rules
|
|
22
|
-
"plugin:@typescript-eslint/eslint-recommended", // ESLint overrides for TypeScript
|
|
23
|
-
"prettier", // Prettier rules
|
|
24
|
-
"plugin:prettier/recommended", // Prettier plugin integration
|
|
25
|
-
"plugin:react-hooks/recommended", // Recommended rules for React hooks
|
|
26
|
-
"plugin:storybook/recommended" // Recommended rules for Storybook
|
|
27
|
-
],
|
|
28
|
-
"settings": {
|
|
29
|
-
"react": {
|
|
30
|
-
"version": "detect"
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"rules": {
|
|
34
|
-
"react/react-in-jsx-scope": "off",
|
|
35
|
-
"@typescript-eslint/no-unused-vars": [
|
|
36
|
-
"error",
|
|
37
|
-
{
|
|
38
|
-
"argsIgnorePattern": "^_",
|
|
39
|
-
"varsIgnorePattern": "^_",
|
|
40
|
-
"caughtErrorsIgnorePattern": "^_"
|
|
41
|
-
}
|
|
42
|
-
]
|
|
43
|
-
}
|
|
44
|
-
}
|
package/.prettierignore
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
src/api.ts
|
package/.prettierrc
DELETED
package/build.ts
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { build } from "bun";
|
|
2
|
-
import fs from "fs";
|
|
3
|
-
|
|
4
|
-
fs.rmSync("./dist", { recursive: true, force: true });
|
|
5
|
-
fs.mkdirSync("./dist");
|
|
6
|
-
|
|
7
|
-
await build({
|
|
8
|
-
// package_load_worker.ts is bundled as a SEPARATE entrypoint so it
|
|
9
|
-
// can be loaded by `new Worker(...)` at runtime. It must NOT be
|
|
10
|
-
// inlined into server.mjs (workers can't share module state with
|
|
11
|
-
// the parent process — they get their own JS realm).
|
|
12
|
-
entrypoints: [
|
|
13
|
-
"./src/server.ts",
|
|
14
|
-
"./src/instrumentation.ts",
|
|
15
|
-
"./src/package_load/package_load_worker.ts",
|
|
16
|
-
],
|
|
17
|
-
outdir: "./dist",
|
|
18
|
-
target: "node",
|
|
19
|
-
format: "esm",
|
|
20
|
-
external: [
|
|
21
|
-
"@malloydata/db-duckdb",
|
|
22
|
-
// The DuckDB engine binding (used by the storage layer). Externalized,
|
|
23
|
-
// not bundled, because its loader require()s platform-specific native
|
|
24
|
-
// .node files for every OS via a runtime switch; the bundler can't
|
|
25
|
-
// statically resolve the ones absent on the build host. Left as a
|
|
26
|
-
// runtime require resolved from node_modules, like the Malloy drivers.
|
|
27
|
-
"@duckdb/node-api",
|
|
28
|
-
"@duckdb/node-bindings",
|
|
29
|
-
"@malloydata/malloy",
|
|
30
|
-
"@malloydata/malloy-sql",
|
|
31
|
-
"@malloydata/render",
|
|
32
|
-
"@malloydata/db-bigquery",
|
|
33
|
-
"@malloydata/db-mysql",
|
|
34
|
-
"@malloydata/db-postgres",
|
|
35
|
-
"@malloydata/db-snowflake",
|
|
36
|
-
"@malloydata/db-trino",
|
|
37
|
-
"@malloydata/db-databricks",
|
|
38
|
-
"@google-cloud/storage",
|
|
39
|
-
"@azure/identity",
|
|
40
|
-
"@azure/storage-blob",
|
|
41
|
-
],
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
fs.cpSync("../app/dist", "./dist/app", { recursive: true });
|
|
45
|
-
|
|
46
|
-
// Copy hand-authored vanilla-JS runtime served at /sdk/publisher.js.
|
|
47
|
-
fs.cpSync("./src/runtime", "./dist/runtime", { recursive: true });
|
|
48
|
-
|
|
49
|
-
// Ship a default publisher.config.json inside the bundle so that
|
|
50
|
-
// `npx @malloy-publisher/server` works with zero args (uses
|
|
51
|
-
// DuckDB-only samples). config.ts looks for this file next to
|
|
52
|
-
// server.mjs.
|
|
53
|
-
//
|
|
54
|
-
// IMPORTANT: keep `packages/server/src/default-publisher.config.json`
|
|
55
|
-
// in sync with `packages/server/publisher.config.json`. The two files
|
|
56
|
-
// have intentionally identical content — the committed one drives the
|
|
57
|
-
// dev workflow (`bun run start`, integration tests), the bundled one
|
|
58
|
-
// is the fallback for npx users with no config of their own. A drift
|
|
59
|
-
// here surfaces as "npx users see different samples than dev users."
|
|
60
|
-
fs.copyFileSync(
|
|
61
|
-
"./src/default-publisher.config.json",
|
|
62
|
-
"./dist/default-publisher.config.json",
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
// Rename ESM outputs to .mjs so both Node and Bun can execute them
|
|
66
|
-
fs.renameSync("./dist/server.js", "./dist/server.mjs");
|
|
67
|
-
fs.renameSync("./dist/instrumentation.js", "./dist/instrumentation.mjs");
|
|
68
|
-
// Bun emits package_load_worker into its source-relative subdir;
|
|
69
|
-
// flatten so package_load_pool.ts's `resolveWorkerScript()` finds it
|
|
70
|
-
// as a sibling of server.mjs. The path layout match is intentional —
|
|
71
|
-
// keep these two in sync or the worker pool throws at boot (the
|
|
72
|
-
// in-process fallback was removed; missing worker = no service).
|
|
73
|
-
if (fs.existsSync("./dist/package_load/package_load_worker.js")) {
|
|
74
|
-
fs.renameSync(
|
|
75
|
-
"./dist/package_load/package_load_worker.js",
|
|
76
|
-
"./dist/package_load_worker.mjs",
|
|
77
|
-
);
|
|
78
|
-
try {
|
|
79
|
-
fs.rmdirSync("./dist/package_load");
|
|
80
|
-
} catch {
|
|
81
|
-
/* directory may be non-empty if Bun produced sourcemaps; leave it */
|
|
82
|
-
}
|
|
83
|
-
} else if (fs.existsSync("./dist/package_load_worker.js")) {
|
|
84
|
-
fs.renameSync(
|
|
85
|
-
"./dist/package_load_worker.js",
|
|
86
|
-
"./dist/package_load_worker.mjs",
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Add shebang to server.mjs for npx/bunx compatibility
|
|
91
|
-
const serverJsPath = "./dist/server.mjs";
|
|
92
|
-
const serverJsContent = fs.readFileSync(serverJsPath, "utf8");
|
|
93
|
-
const shebangContent = "#!/usr/bin/env node\n" + serverJsContent;
|
|
94
|
-
fs.writeFileSync(serverJsPath, shebangContent);
|
|
95
|
-
|
|
96
|
-
// Make the file executable
|
|
97
|
-
fs.chmodSync(serverJsPath, "755");
|
package/eslint.config.mjs
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { fixupConfigRules, fixupPluginRules } from "@eslint/compat";
|
|
2
|
-
import { FlatCompat } from "@eslint/eslintrc";
|
|
3
|
-
import js from "@eslint/js";
|
|
4
|
-
import typescriptEslint from "@typescript-eslint/eslint-plugin";
|
|
5
|
-
import tsParser from "@typescript-eslint/parser";
|
|
6
|
-
import globals from "globals";
|
|
7
|
-
import path from "node:path";
|
|
8
|
-
import { fileURLToPath } from "node:url";
|
|
9
|
-
|
|
10
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
-
const __dirname = path.dirname(__filename);
|
|
12
|
-
const compat = new FlatCompat({
|
|
13
|
-
baseDirectory: __dirname,
|
|
14
|
-
recommendedConfig: js.configs.recommended,
|
|
15
|
-
allConfig: js.configs.all,
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
export default [
|
|
19
|
-
{
|
|
20
|
-
ignores: [
|
|
21
|
-
"**/node_modules/**",
|
|
22
|
-
"**/dist/**",
|
|
23
|
-
"**/build/**",
|
|
24
|
-
"**/.DS_Store",
|
|
25
|
-
"**/__pycache__/**",
|
|
26
|
-
"**/*.py[cod]",
|
|
27
|
-
"**/*.egg-info/**",
|
|
28
|
-
"**/.env",
|
|
29
|
-
"**/*.log",
|
|
30
|
-
],
|
|
31
|
-
},
|
|
32
|
-
...fixupConfigRules(
|
|
33
|
-
compat.extends(
|
|
34
|
-
"eslint:recommended",
|
|
35
|
-
"plugin:react/recommended",
|
|
36
|
-
"plugin:@typescript-eslint/recommended",
|
|
37
|
-
"plugin:@typescript-eslint/eslint-recommended",
|
|
38
|
-
"prettier",
|
|
39
|
-
"plugin:prettier/recommended",
|
|
40
|
-
"plugin:react-hooks/recommended",
|
|
41
|
-
"plugin:storybook/recommended",
|
|
42
|
-
),
|
|
43
|
-
),
|
|
44
|
-
{
|
|
45
|
-
plugins: {
|
|
46
|
-
"@typescript-eslint": fixupPluginRules(typescriptEslint),
|
|
47
|
-
},
|
|
48
|
-
|
|
49
|
-
languageOptions: {
|
|
50
|
-
globals: {
|
|
51
|
-
...globals.jest,
|
|
52
|
-
...globals.browser,
|
|
53
|
-
},
|
|
54
|
-
|
|
55
|
-
parser: tsParser,
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
settings: {
|
|
59
|
-
react: {
|
|
60
|
-
version: "detect",
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
rules: {
|
|
65
|
-
"react/react-in-jsx-scope": "off",
|
|
66
|
-
"@typescript-eslint/no-unused-vars": [
|
|
67
|
-
"error",
|
|
68
|
-
{
|
|
69
|
-
argsIgnorePattern: "^_",
|
|
70
|
-
varsIgnorePattern: "^_",
|
|
71
|
-
caughtErrorsIgnorePattern: "^_",
|
|
72
|
-
},
|
|
73
|
-
],
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
];
|
package/k6-tests/README.md
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
# k6-tests
|
|
2
|
-
|
|
3
|
-
Performance and load testing suite for the Malloy Publisher API using k6.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
To install dependencies:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
bun install
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Prerequisites
|
|
14
|
-
|
|
15
|
-
**Important:** Before running tests, ensure the publisher server is running with the following environment variables to limit log output:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
DISABLE_RESPONSE_LOGGING=true
|
|
19
|
-
LOG_LEVEL=info # or LOG_LEVEL=warn
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Start the server before running any k6 tests.
|
|
23
|
-
|
|
24
|
-
## Available Tests
|
|
25
|
-
|
|
26
|
-
### Smoke Test
|
|
27
|
-
|
|
28
|
-
Basic functionality verification under minimal load:
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
bun run smoke-test # Standard test
|
|
32
|
-
./scripts/run-with-otel.sh smoke-test/smoke-test.ts # With OpenTelemetry export
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Load Tests
|
|
36
|
-
|
|
37
|
-
#### CRUD Load Tests
|
|
38
|
-
|
|
39
|
-
Specific tests for CRUD (Create, Read, Update, Delete) operations on individual resource types:
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
bun run load-test-crud-projects # Projects CRUD load test
|
|
43
|
-
bun run load-test-crud-connections # Connections CRUD load test
|
|
44
|
-
bun run load-test-crud-packages # Packages CRUD load test
|
|
45
|
-
bun run load-test-crud # Run all three CRUD tests sequentially
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Run CRUD tests with OpenTelemetry export:
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
./scripts/run-with-otel.sh load-test/load-test-crud-projects.ts
|
|
52
|
-
./scripts/run-with-otel.sh load-test/load-test-crud-connections.ts
|
|
53
|
-
./scripts/run-with-otel.sh load-test/load-test-crud-packages.ts
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
#### Comprehensive Load Test
|
|
57
|
-
|
|
58
|
-
Focused on comprehensive API read operations and query execution. Tests listing, getting, and querying various resources (projects, packages, models, notebooks, connections, databases, queries, SQL sources) under normal load:
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
bun run load-test # Standard test
|
|
62
|
-
./scripts/run-with-otel.sh load-test/load-test.ts # With OTEL export
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## OpenTelemetry & Prometheus Integration
|
|
66
|
-
|
|
67
|
-
Export k6 metrics to Prometheus via OpenTelemetry for visualization in Grafana.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
**Usage:**
|
|
71
|
-
Use the `run-with-otel.sh` script to run any test with OpenTelemetry export:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
./scripts/run-with-otel.sh <test-file> [additional-k6-args...]
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Examples:
|
|
78
|
-
```bash
|
|
79
|
-
./scripts/run-with-otel.sh smoke-test/smoke-test.ts
|
|
80
|
-
./scripts/run-with-otel.sh load-test/load-test.ts --duration 5m
|
|
81
|
-
./scripts/run-with-otel.sh load-test/load-test-crud-projects.ts
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Environment Variables
|
|
85
|
-
|
|
86
|
-
### Test Configuration
|
|
87
|
-
|
|
88
|
-
- `K6_PUBLISHER_URL` - Base URL of the publisher service (default: `http://localhost:4000`)
|
|
89
|
-
- `K6_PROJECT_NAME` - Project name for tests (default: `malloy-samples`)
|
|
90
|
-
- `K6_AUTH_TOKEN` - Authorization token for API requests
|
|
91
|
-
- `GOOGLE_APPLICATION_CREDENTIALS` - BigQuery service account JSON (for BigQuery tests)
|
|
92
|
-
- `K6_USE_VERSION_ID` - Set to `"true"` to use version IDs in API calls - uses "latest" as versionId when set to true
|
|
93
|
-
- `K6_MAX_VIEWS_PER_MODEL` - Maximum views to test per model (default: `5`)
|
|
94
|
-
- `K6_DEBUG` - Set to `"true"` for verbose logging
|
|
95
|
-
- `K6_WHITELISTED_PACKAGES` - JSON array of package names to test
|
|
96
|
-
- `K6_AVAILABLE_PACKAGES` - JSON array of available package names
|
|
97
|
-
|
|
98
|
-
### OpenTelemetry Export (when using `run-with-otel.sh`)
|
|
99
|
-
|
|
100
|
-
These environment variables are automatically set by `run-with-otel.sh` but can be overridden:
|
|
101
|
-
|
|
102
|
-
- `K6_OTEL_GRPC_EXPORTER_ENDPOINT` - OTEL collector gRPC endpoint (default: `localhost:4317`)
|
|
103
|
-
- `K6_OTEL_GRPC_EXPORTER_INSECURE` - Disable TLS for plain gRPC (default: `true` - set automatically by script)
|
|
104
|
-
- `K6_OTEL_SERVICE_NAME` - Service name for metrics (default: `k6-load-test`)
|
|
105
|
-
- `K6_OTEL_EXPORTER_PROTOCOL` - Exporter protocol: `grpc` or `http/protobuf` (default: `grpc`)
|
|
106
|
-
- `K6_OTEL_HTTP_EXPORTER_ENDPOINT` - OTEL collector HTTP endpoint (default: `localhost:4318`)
|
|
107
|
-
- `K6_OTEL_FLUSH_INTERVAL` - How often k6 flushes internal metrics (default: `1s`)
|
|
108
|
-
- `K6_OTEL_EXPORT_INTERVAL` - How often k6 exports to OTEL collector (default: `2s` in script, `10s` otherwise)
|
|
109
|
-
|
|
110
|
-
## Setup & Build
|
|
111
|
-
|
|
112
|
-
### Clone Malloy Samples
|
|
113
|
-
|
|
114
|
-
Clone the malloy-samples repository (required for tests):
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
bun run clone-malloy-samples
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
This clones the [malloy-samples](https://github.com/credibledata/malloy-samples) repository into `./packages` directory.
|
|
121
|
-
|
|
122
|
-
### Client Generation
|
|
123
|
-
|
|
124
|
-
To regenerate API clients from OpenAPI spec:
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
bun run generate-clients
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Build
|
|
131
|
-
|
|
132
|
-
Run the full build process (cleanup, clone samples, and generate clients):
|
|
133
|
-
|
|
134
|
-
```bash
|
|
135
|
-
bun run build
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
## Cleanup
|
|
139
|
-
|
|
140
|
-
Remove generated files and dependencies:
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
bun run clean
|
|
144
|
-
```
|