@xnoxs/flux-lang 3.2.2 → 3.3.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/dist/flux-cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /*!
3
- * flux-lang v3.2.2
3
+ * flux-lang v3.3.0
4
4
  * Flux — A modern language that transpiles to JavaScript. Python-clean syntax, TypeScript-level safety, Rust-inspired pattern matching.
5
5
  * (c) 2026 Flux Lang Contributors
6
6
  * Released under the MIT License
@@ -15,6 +15,63 @@ var __commonJS = (cb, mod) => function __require() {
15
15
  }
16
16
  };
17
17
 
18
+ // src/config.js
19
+ var require_config = __commonJS({
20
+ "src/config.js"(exports2, module2) {
21
+ "use strict";
22
+ var fs2 = require("fs");
23
+ var path2 = require("path");
24
+ var CONFIG_NAMES = [
25
+ "flux.config.js",
26
+ "flux.config.cjs",
27
+ ".fluxrc.js"
28
+ ];
29
+ function loadConfig2(cwd) {
30
+ const dir = cwd || process.cwd();
31
+ for (const name of CONFIG_NAMES) {
32
+ const configPath = path2.join(dir, name);
33
+ if (!fs2.existsSync(configPath)) continue;
34
+ delete require.cache[require.resolve(configPath)];
35
+ try {
36
+ const raw = require(configPath);
37
+ const cfg = raw && raw.default ? raw.default : raw;
38
+ if (typeof cfg !== "object" || cfg === null) {
39
+ process.stderr.write(
40
+ `[flux] warning: ${name} must export a plain object \u2014 ignoring
41
+ `
42
+ );
43
+ return {};
44
+ }
45
+ return cfg;
46
+ } catch (e) {
47
+ process.stderr.write(
48
+ `[flux] error loading ${name}: ${e.message}
49
+ `
50
+ );
51
+ return {};
52
+ }
53
+ }
54
+ return {};
55
+ }
56
+ function mergeConfig2(fileConfig, cliOpts) {
57
+ const cfg = fileConfig || {};
58
+ const cli = cliOpts || {};
59
+ return {
60
+ jsxTarget: cli.jsxTarget !== void 0 ? cli.jsxTarget : cfg.jsxTarget || "browser",
61
+ outDir: cli.outDir !== void 0 ? cli.outDir : cfg.outDir || null,
62
+ sourcemap: cli.sourcemap !== void 0 ? cli.sourcemap : cfg.sourcemap || false,
63
+ mangle: cli.mangle !== void 0 ? cli.mangle : cfg.mangle !== void 0 ? cfg.mangle : true,
64
+ ignore: cli.ignore !== void 0 ? cli.ignore : cfg.ignore || [],
65
+ entry: cli.entry !== void 0 ? cli.entry : cfg.entry || null
66
+ };
67
+ }
68
+ function defineConfig(config) {
69
+ return config;
70
+ }
71
+ module2.exports = { loadConfig: loadConfig2, mergeConfig: mergeConfig2, defineConfig };
72
+ }
73
+ });
74
+
18
75
  // src/lexer.js
19
76
  var require_lexer = __commonJS({
20
77
  "src/lexer.js"(exports2, module2) {
@@ -7106,7 +7163,7 @@ var require_package = __commonJS({
7106
7163
  "package.json"(exports2, module2) {
7107
7164
  module2.exports = {
7108
7165
  name: "@xnoxs/flux-lang",
7109
- version: "3.2.2",
7166
+ version: "3.3.0",
7110
7167
  description: "Flux \u2014 A modern language that transpiles to JavaScript. Python-clean syntax, TypeScript-level safety, Rust-inspired pattern matching.",
7111
7168
  main: "dist/flux.cjs.js",
7112
7169
  module: "dist/flux.esm.js",
@@ -7131,6 +7188,7 @@ var require_package = __commonJS({
7131
7188
  require: "./dist/flux.cjs.js",
7132
7189
  default: "./dist/flux.cjs.js"
7133
7190
  },
7191
+ "./config": "./src/config.js",
7134
7192
  "./dist/cjs": "./dist/flux.cjs.js",
7135
7193
  "./dist/esm": "./dist/flux.esm.js",
7136
7194
  "./dist/min": "./dist/flux.min.js",
@@ -7142,6 +7200,7 @@ var require_package = __commonJS({
7142
7200
  "dist/",
7143
7201
  "src/stdlib.js",
7144
7202
  "src/formatter.js",
7203
+ "src/config.js",
7145
7204
  "src/self/",
7146
7205
  "scripts/build.js",
7147
7206
  "index.js",
@@ -8117,6 +8176,9 @@ var require_test_runner = __commonJS({
8117
8176
  var fs2 = require("fs");
8118
8177
  var path2 = require("path");
8119
8178
  var os = require("os");
8179
+ var CONFIG_PATH = JSON.stringify(path2.join(__dirname, "config.js"));
8180
+ var TRANSPILER_PATH = JSON.stringify(path2.join(__dirname, "transpiler.js"));
8181
+ var TEST_RUNNER_PATH = JSON.stringify(__filename);
8120
8182
  var C2 = {
8121
8183
  reset: "\x1B[0m",
8122
8184
  bold: "\x1B[1m",
@@ -8228,8 +8290,19 @@ function __runAll(mod) {
8228
8290
  while ((match = fnRe.exec(result.output)) !== null) {
8229
8291
  fnNames.push(match[1]);
8230
8292
  }
8293
+ const shimPreamble = [
8294
+ `// \u2500\u2500 shim globals for flux.config.js tests \u2500\u2500`,
8295
+ `const __configMod = require(${CONFIG_PATH});`,
8296
+ `const __transpilerMod= require(${TRANSPILER_PATH});`,
8297
+ `const __runnerMod = require(${TEST_RUNNER_PATH});`,
8298
+ `const mergeConfigShim = __configMod.mergeConfig;`,
8299
+ `const defineConfigShim = __configMod.defineConfig;`,
8300
+ `const transpileShim = __transpilerMod.transpile;`,
8301
+ `const matchIgnoreShim = __runnerMod.matchIgnore;`
8302
+ ].join("\n");
8231
8303
  const runner = [
8232
8304
  TEST_HELPERS,
8305
+ shimPreamble,
8233
8306
  result.output,
8234
8307
  "",
8235
8308
  "// \u2500\u2500 auto-generated test runner \u2500\u2500",
@@ -8261,7 +8334,21 @@ function __runAll(mod) {
8261
8334
  }
8262
8335
  }
8263
8336
  }
8264
- function runTests(target, transpile2) {
8337
+ function matchIgnore(filePath, patterns) {
8338
+ if (!patterns || patterns.length === 0) return false;
8339
+ const normalize = (p) => p.replace(/\\/g, "/");
8340
+ const fp = normalize(filePath);
8341
+ for (const pattern of patterns) {
8342
+ let re = normalize(pattern).replace(/\*\*/g, "\0DSTAR\0");
8343
+ re = re.replace(/[.+^${}()|[\]\\]/g, "\\$&");
8344
+ re = re.replace(/\*/g, "[^/]*");
8345
+ re = re.replace(/\x00DSTAR\x00\//g, "(.+/)?").replace(/\x00DSTAR\x00/g, ".*");
8346
+ if (new RegExp(`(^|/)${re}$`).test(fp)) return true;
8347
+ }
8348
+ return false;
8349
+ }
8350
+ function runTests(target, transpile2, opts) {
8351
+ const ignorePatterns = opts && opts.ignore || [];
8265
8352
  let files;
8266
8353
  try {
8267
8354
  files = discoverTestFiles(target);
@@ -8269,6 +8356,13 @@ function __runAll(mod) {
8269
8356
  console.error(clr2(C2.red, `\u2717 ${e.message}`));
8270
8357
  process.exit(1);
8271
8358
  }
8359
+ if (ignorePatterns.length > 0) {
8360
+ const before = files.length;
8361
+ files = files.filter((f) => !matchIgnore(f, ignorePatterns));
8362
+ const skipped = before - files.length;
8363
+ if (skipped > 0)
8364
+ console.log(clr2(C2.gray, ` (skipped ${skipped} file${skipped === 1 ? "" : "s"} via ignore patterns)`));
8365
+ }
8272
8366
  if (files.length === 0) {
8273
8367
  console.log(clr2(C2.yellow, `No *.test.flux files found in: ${target}`));
8274
8368
  return;
@@ -8315,13 +8409,14 @@ function __runAll(mod) {
8315
8409
  console.log();
8316
8410
  if (totalFail > 0) process.exitCode = 1;
8317
8411
  }
8318
- module2.exports = { runTests, runTestFile, discoverTestFiles };
8412
+ module2.exports = { runTests, runTestFile, discoverTestFiles, matchIgnore };
8319
8413
  }
8320
8414
  });
8321
8415
 
8322
8416
  // src/cli.js
8323
8417
  var fs = require("fs");
8324
8418
  var path = require("path");
8419
+ var { loadConfig, mergeConfig } = require_config();
8325
8420
  var USE_SELF_HOSTED = process.argv.includes("--self-hosted") || process.env.FLUX_SELF_HOSTED === "1";
8326
8421
  process.argv = process.argv.filter((a) => a !== "--self-hosted");
8327
8422
  function loadTranspiler() {
@@ -8583,6 +8678,18 @@ function cmdInit(name) {
8583
8678
  dependencies: {},
8584
8679
  devDependencies: { "flux-lang": `^${VERSION}` }
8585
8680
  }, null, 2), "utf8");
8681
+ fs.writeFileSync(path.join(dir, "flux.config.js"), [
8682
+ "// Flux Lang project configuration",
8683
+ "// All options are optional \u2014 CLI flags always override these values.",
8684
+ "module.exports = {",
8685
+ " // jsxTarget : 'browser', // 'browser' | 'server' | 'react'",
8686
+ " // outDir : './dist', // output directory for compiled files",
8687
+ " // sourcemap : false, // generate .js.map files",
8688
+ " // mangle : true, // obfuscate names in output",
8689
+ " // ignore : [], // glob patterns to skip in `flux test`",
8690
+ " // entry : 'src/main.flux', // default entry for `flux bundle`",
8691
+ "};"
8692
+ ].join("\n"), "utf8");
8586
8693
  fs.writeFileSync(path.join(dir, ".gitignore"), [
8587
8694
  "node_modules/",
8588
8695
  "dist/",
@@ -8616,6 +8723,7 @@ function cmdInit(name) {
8616
8723
  console.log();
8617
8724
  console.log(clr(C.gray, " Files created:"));
8618
8725
  console.log(" " + clr(C.cyan, `${projectName}/src/main.flux`));
8726
+ console.log(" " + clr(C.cyan, `${projectName}/flux.config.js`));
8619
8727
  console.log(" " + clr(C.cyan, `${projectName}/package.json`));
8620
8728
  console.log(" " + clr(C.cyan, `${projectName}/.gitignore`));
8621
8729
  console.log(" " + clr(C.cyan, `${projectName}/README.md`));
@@ -8628,12 +8736,22 @@ function cmdInit(name) {
8628
8736
  }
8629
8737
  function cmdCompile(filePath, opts) {
8630
8738
  const { source, abs } = readFluxFile(filePath);
8631
- const outPath = deriveOutPath(filePath, opts.out);
8739
+ let outPath;
8740
+ if (opts.out) {
8741
+ outPath = path.resolve(opts.out);
8742
+ } else if (opts.outDir) {
8743
+ const dir = path.resolve(opts.outDir);
8744
+ if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
8745
+ outPath = path.join(dir, path.basename(filePath, ".flux") + ".js");
8746
+ } else {
8747
+ outPath = deriveOutPath(filePath, null);
8748
+ }
8632
8749
  const mapPath = outPath + ".map";
8633
8750
  const t0 = Date.now();
8634
8751
  const result = transpile(source, {
8635
8752
  sourcemap: opts.sourcemap,
8636
8753
  mangle: opts.mangle,
8754
+ jsxTarget: opts.jsxTarget,
8637
8755
  sourceFile: path.relative(path.dirname(outPath), abs),
8638
8756
  outputFile: path.basename(outPath)
8639
8757
  });
@@ -8685,9 +8803,12 @@ function cmdBundle(entryPath, opts) {
8685
8803
  clr(C.green, `\u2713 Bundle done`) + clr(C.gray, ` (${elapsed}ms)`) + ` ${path.basename(abs)} + ${result.modules - 1} module(s) \u2192 ` + clr(C.cyan, path.relative(process.cwd(), outFile)) + clr(C.gray, ` [${kb} KB]`)
8686
8804
  );
8687
8805
  }
8688
- function cmdRun(filePath) {
8806
+ function cmdRun(filePath, opts) {
8689
8807
  const { source, abs } = readFluxFile(filePath);
8690
- const result = transpile(source);
8808
+ const result = transpile(source, {
8809
+ jsxTarget: opts && opts.jsxTarget,
8810
+ mangle: opts && opts.mangle
8811
+ });
8691
8812
  if (!result.success) {
8692
8813
  console.error(clr(C.red, `
8693
8814
  \u2717 Compile error`));
@@ -8885,10 +9006,10 @@ function cmdFmt(filePath, opts) {
8885
9006
  const diff = Math.abs(output.split("\n").length - source.split("\n").length);
8886
9007
  console.log(clr(C.green, `\u2713 ${path.basename(abs)} \u2014 formatted`) + (diff > 0 ? clr(C.gray, ` (${diff} line${diff === 1 ? "" : "s"} changed)`) : ""));
8887
9008
  }
8888
- function cmdTest(dirOrFile) {
9009
+ function cmdTest(dirOrFile, opts) {
8889
9010
  const { runTests } = require_test_runner();
8890
9011
  const target = dirOrFile || "tests";
8891
- runTests(target, transpile);
9012
+ runTests(target, transpile, { ignore: opts && opts.ignore || [] });
8892
9013
  }
8893
9014
  function cmdTokens(filePath) {
8894
9015
  const { source } = readFluxFile(filePath);
@@ -8925,13 +9046,26 @@ function cmdWatch(filePath, opts) {
8925
9046
  function doCompile() {
8926
9047
  try {
8927
9048
  const source = fs.readFileSync(abs, "utf8");
8928
- const result = transpile(source);
9049
+ const result = transpile(source, {
9050
+ jsxTarget: opts.jsxTarget,
9051
+ sourcemap: opts.sourcemap,
9052
+ mangle: opts.mangle
9053
+ });
8929
9054
  const ts = (/* @__PURE__ */ new Date()).toLocaleTimeString();
8930
9055
  if (!result.success) {
8931
9056
  console.error(clr(C.red, `[${ts}] \u2717 Error`));
8932
9057
  printErrors(result.errors, source, abs);
8933
9058
  } else {
8934
- const outPath = deriveOutPath(filePath, opts.out);
9059
+ let outPath;
9060
+ if (opts.out) {
9061
+ outPath = path.resolve(opts.out);
9062
+ } else if (opts.outDir) {
9063
+ const dir = path.resolve(opts.outDir);
9064
+ if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
9065
+ outPath = path.join(dir, path.basename(filePath, ".flux") + ".js");
9066
+ } else {
9067
+ outPath = deriveOutPath(filePath, null);
9068
+ }
8935
9069
  fs.writeFileSync(outPath, result.output, "utf8");
8936
9070
  console.log(clr(C.gray, `[${ts}]`) + clr(C.green, ` \u2713 Compiled \u2192 ${path.relative(process.cwd(), outPath)}`));
8937
9071
  }
@@ -9422,7 +9556,7 @@ function parseArgs(argv) {
9422
9556
  const args = argv.slice(2);
9423
9557
  const cmd = args[0];
9424
9558
  const file = args[1] && !args[1].startsWith("-") ? args[1] : null;
9425
- const opts = { stdout: false, out: null, sourcemap: false, mangle: true };
9559
+ const opts = { stdout: false, out: null, sourcemap: void 0, mangle: void 0, jsxTarget: void 0 };
9426
9560
  const publishOpts = {
9427
9561
  bump: "patch",
9428
9562
  ver: null,
@@ -9439,6 +9573,8 @@ function parseArgs(argv) {
9439
9573
  if (args[i] === "--no-mangle" || args[i] === "-nm") opts.mangle = false;
9440
9574
  if ((args[i] === "-o" || args[i] === "--out") && args[i + 1]) opts.out = args[++i];
9441
9575
  if (args[i] === "--no-color") process.env.NO_COLOR = "1";
9576
+ if ((args[i] === "--jsx-target" || args[i] === "--jsxTarget") && args[i + 1])
9577
+ opts.jsxTarget = args[++i];
9442
9578
  if (args[i] === "--patch") publishOpts.bump = "patch";
9443
9579
  if (args[i] === "--minor") publishOpts.bump = "minor";
9444
9580
  if (args[i] === "--major") publishOpts.bump = "major";
@@ -9454,6 +9590,9 @@ function parseArgs(argv) {
9454
9590
  }
9455
9591
  function main() {
9456
9592
  const { cmd, file, opts, publishOpts } = parseArgs(process.argv);
9593
+ const fileConfig = loadConfig();
9594
+ const merged = mergeConfig(fileConfig, opts);
9595
+ const finalOpts = { stdout: opts.stdout, out: opts.out, ...merged };
9457
9596
  switch (cmd) {
9458
9597
  case "init": {
9459
9598
  const name = process.argv[3] && !process.argv[3].startsWith("-") ? process.argv[3] : null;
@@ -9465,15 +9604,16 @@ function main() {
9465
9604
  console.error(clr(C.red, "Specify a file: flux compile <file.flux>"));
9466
9605
  process.exit(1);
9467
9606
  }
9468
- cmdCompile(file, opts);
9607
+ cmdCompile(file, finalOpts);
9469
9608
  break;
9470
9609
  }
9471
9610
  case "bundle": {
9472
- if (!file) {
9611
+ const entryFile = file || finalOpts.entry;
9612
+ if (!entryFile) {
9473
9613
  console.error(clr(C.red, "Specify a file: flux bundle <entry.flux>"));
9474
9614
  process.exit(1);
9475
9615
  }
9476
- cmdBundle(file, opts);
9616
+ cmdBundle(entryFile, finalOpts);
9477
9617
  break;
9478
9618
  }
9479
9619
  case "run": {
@@ -9481,7 +9621,7 @@ function main() {
9481
9621
  console.error(clr(C.red, "Specify a file: flux run <file.flux>"));
9482
9622
  process.exit(1);
9483
9623
  }
9484
- cmdRun(file);
9624
+ cmdRun(file, finalOpts);
9485
9625
  break;
9486
9626
  }
9487
9627
  case "check": {
@@ -9521,7 +9661,7 @@ function main() {
9521
9661
  console.error(clr(C.red, "Specify a file: flux watch <file.flux>"));
9522
9662
  process.exit(1);
9523
9663
  }
9524
- cmdWatch(file, opts);
9664
+ cmdWatch(file, finalOpts);
9525
9665
  break;
9526
9666
  }
9527
9667
  case "fmt": {
@@ -9533,7 +9673,7 @@ function main() {
9533
9673
  break;
9534
9674
  }
9535
9675
  case "test": {
9536
- cmdTest(file || process.argv[3]);
9676
+ cmdTest(file || process.argv[3], finalOpts);
9537
9677
  break;
9538
9678
  }
9539
9679
  case "publish": {
package/dist/flux.cjs.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * flux-lang v3.2.2
2
+ * flux-lang v3.3.0
3
3
  * Flux — A modern language that transpiles to JavaScript. Python-clean syntax, TypeScript-level safety, Rust-inspired pattern matching.
4
4
  * (c) 2026 Flux Lang Contributors
5
5
  * Released under the MIT License
@@ -7192,6 +7192,63 @@ var require_bundler = __commonJS({
7192
7192
  }
7193
7193
  });
7194
7194
 
7195
+ // src/config.js
7196
+ var require_config = __commonJS({
7197
+ "src/config.js"(exports2, module2) {
7198
+ "use strict";
7199
+ var fs = require("fs");
7200
+ var path = require("path");
7201
+ var CONFIG_NAMES = [
7202
+ "flux.config.js",
7203
+ "flux.config.cjs",
7204
+ ".fluxrc.js"
7205
+ ];
7206
+ function loadConfig2(cwd) {
7207
+ const dir = cwd || process.cwd();
7208
+ for (const name of CONFIG_NAMES) {
7209
+ const configPath = path.join(dir, name);
7210
+ if (!fs.existsSync(configPath)) continue;
7211
+ delete require.cache[require.resolve(configPath)];
7212
+ try {
7213
+ const raw = require(configPath);
7214
+ const cfg = raw && raw.default ? raw.default : raw;
7215
+ if (typeof cfg !== "object" || cfg === null) {
7216
+ process.stderr.write(
7217
+ `[flux] warning: ${name} must export a plain object \u2014 ignoring
7218
+ `
7219
+ );
7220
+ return {};
7221
+ }
7222
+ return cfg;
7223
+ } catch (e) {
7224
+ process.stderr.write(
7225
+ `[flux] error loading ${name}: ${e.message}
7226
+ `
7227
+ );
7228
+ return {};
7229
+ }
7230
+ }
7231
+ return {};
7232
+ }
7233
+ function mergeConfig2(fileConfig, cliOpts) {
7234
+ const cfg = fileConfig || {};
7235
+ const cli = cliOpts || {};
7236
+ return {
7237
+ jsxTarget: cli.jsxTarget !== void 0 ? cli.jsxTarget : cfg.jsxTarget || "browser",
7238
+ outDir: cli.outDir !== void 0 ? cli.outDir : cfg.outDir || null,
7239
+ sourcemap: cli.sourcemap !== void 0 ? cli.sourcemap : cfg.sourcemap || false,
7240
+ mangle: cli.mangle !== void 0 ? cli.mangle : cfg.mangle !== void 0 ? cfg.mangle : true,
7241
+ ignore: cli.ignore !== void 0 ? cli.ignore : cfg.ignore || [],
7242
+ entry: cli.entry !== void 0 ? cli.entry : cfg.entry || null
7243
+ };
7244
+ }
7245
+ function defineConfig2(config) {
7246
+ return config;
7247
+ }
7248
+ module2.exports = { loadConfig: loadConfig2, mergeConfig: mergeConfig2, defineConfig: defineConfig2 };
7249
+ }
7250
+ });
7251
+
7195
7252
  // index.js
7196
7253
  var { transpile } = require_transpiler();
7197
7254
  var { format } = require_formatter();
@@ -7199,6 +7256,7 @@ var { buildStdlib, detectUsedSymbols, STDLIB_SYMBOLS } = require_stdlib();
7199
7256
  var { Lexer } = require_lexer();
7200
7257
  var { Parser } = require_parser();
7201
7258
  var { bundle } = require_bundler();
7259
+ var { loadConfig, mergeConfig, defineConfig } = require_config();
7202
7260
  module.exports = {
7203
7261
  transpile,
7204
7262
  format,
@@ -7207,5 +7265,8 @@ module.exports = {
7207
7265
  STDLIB_SYMBOLS,
7208
7266
  Lexer,
7209
7267
  Parser,
7210
- bundle
7268
+ bundle,
7269
+ loadConfig,
7270
+ mergeConfig,
7271
+ defineConfig
7211
7272
  };
package/dist/flux.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * flux-lang v3.2.2
2
+ * flux-lang v3.3.0
3
3
  * Flux — A modern language that transpiles to JavaScript. Python-clean syntax, TypeScript-level safety, Rust-inspired pattern matching.
4
4
  * (c) 2026 Flux Lang Contributors
5
5
  * Released under the MIT License
@@ -7197,6 +7197,63 @@ var require_bundler = __commonJS({
7197
7197
  }
7198
7198
  });
7199
7199
 
7200
+ // src/config.js
7201
+ var require_config = __commonJS({
7202
+ "src/config.js"(exports, module) {
7203
+ "use strict";
7204
+ var fs = __require("fs");
7205
+ var path = __require("path");
7206
+ var CONFIG_NAMES = [
7207
+ "flux.config.js",
7208
+ "flux.config.cjs",
7209
+ ".fluxrc.js"
7210
+ ];
7211
+ function loadConfig(cwd) {
7212
+ const dir = cwd || process.cwd();
7213
+ for (const name of CONFIG_NAMES) {
7214
+ const configPath = path.join(dir, name);
7215
+ if (!fs.existsSync(configPath)) continue;
7216
+ delete __require.cache[__require.resolve(configPath)];
7217
+ try {
7218
+ const raw = __require(configPath);
7219
+ const cfg = raw && raw.default ? raw.default : raw;
7220
+ if (typeof cfg !== "object" || cfg === null) {
7221
+ process.stderr.write(
7222
+ `[flux] warning: ${name} must export a plain object \u2014 ignoring
7223
+ `
7224
+ );
7225
+ return {};
7226
+ }
7227
+ return cfg;
7228
+ } catch (e) {
7229
+ process.stderr.write(
7230
+ `[flux] error loading ${name}: ${e.message}
7231
+ `
7232
+ );
7233
+ return {};
7234
+ }
7235
+ }
7236
+ return {};
7237
+ }
7238
+ function mergeConfig(fileConfig, cliOpts) {
7239
+ const cfg = fileConfig || {};
7240
+ const cli = cliOpts || {};
7241
+ return {
7242
+ jsxTarget: cli.jsxTarget !== void 0 ? cli.jsxTarget : cfg.jsxTarget || "browser",
7243
+ outDir: cli.outDir !== void 0 ? cli.outDir : cfg.outDir || null,
7244
+ sourcemap: cli.sourcemap !== void 0 ? cli.sourcemap : cfg.sourcemap || false,
7245
+ mangle: cli.mangle !== void 0 ? cli.mangle : cfg.mangle !== void 0 ? cfg.mangle : true,
7246
+ ignore: cli.ignore !== void 0 ? cli.ignore : cfg.ignore || [],
7247
+ entry: cli.entry !== void 0 ? cli.entry : cfg.entry || null
7248
+ };
7249
+ }
7250
+ function defineConfig(config) {
7251
+ return config;
7252
+ }
7253
+ module.exports = { loadConfig, mergeConfig, defineConfig };
7254
+ }
7255
+ });
7256
+
7200
7257
  // index.js
7201
7258
  var require_index = __commonJS({
7202
7259
  "index.js"(exports, module) {
@@ -7206,6 +7263,7 @@ var require_index = __commonJS({
7206
7263
  var { Lexer } = require_lexer();
7207
7264
  var { Parser } = require_parser();
7208
7265
  var { bundle } = require_bundler();
7266
+ var { loadConfig, mergeConfig, defineConfig } = require_config();
7209
7267
  module.exports = {
7210
7268
  transpile,
7211
7269
  format,
@@ -7214,7 +7272,10 @@ var require_index = __commonJS({
7214
7272
  STDLIB_SYMBOLS,
7215
7273
  Lexer,
7216
7274
  Parser,
7217
- bundle
7275
+ bundle,
7276
+ loadConfig,
7277
+ mergeConfig,
7278
+ defineConfig
7218
7279
  };
7219
7280
  }
7220
7281
  });