veryfront 0.0.72 → 0.0.74

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/data.js CHANGED
@@ -413,19 +413,69 @@ function getEnvironmentVariable(name) {
413
413
  }
414
414
  return void 0;
415
415
  }
416
+ function isProductionEnvironment() {
417
+ return getEnvironmentVariable("NODE_ENV") === "production";
418
+ }
416
419
 
417
420
  // src/core/utils/logger/logger.ts
418
421
  var cachedLogLevel;
422
+ var cachedLogFormat;
419
423
  function resolveLogLevel(force = false) {
420
424
  if (force || cachedLogLevel === void 0) {
421
425
  cachedLogLevel = getDefaultLevel();
422
426
  }
423
427
  return cachedLogLevel;
424
428
  }
425
- var ConsoleLogger = class {
426
- constructor(prefix, level = resolveLogLevel()) {
429
+ function resolveLogFormat(force = false) {
430
+ if (force || cachedLogFormat === void 0) {
431
+ cachedLogFormat = getDefaultFormat();
432
+ }
433
+ return cachedLogFormat;
434
+ }
435
+ function getDefaultFormat() {
436
+ const envFormat = getEnvironmentVariable("LOG_FORMAT");
437
+ if (envFormat === "json" || envFormat === "text") {
438
+ return envFormat;
439
+ }
440
+ return isProductionEnvironment() ? "json" : "text";
441
+ }
442
+ function serializeError(err) {
443
+ if (err instanceof Error) {
444
+ return {
445
+ name: err.name,
446
+ message: err.message,
447
+ stack: err.stack
448
+ };
449
+ }
450
+ if (err !== void 0 && err !== null) {
451
+ return {
452
+ name: "UnknownError",
453
+ message: String(err)
454
+ };
455
+ }
456
+ return void 0;
457
+ }
458
+ function extractContext(args) {
459
+ let context;
460
+ let error;
461
+ for (const arg of args) {
462
+ if (arg instanceof Error) {
463
+ error = serializeError(arg);
464
+ } else if (typeof arg === "object" && arg !== null && !Array.isArray(arg)) {
465
+ context = { ...context, ...arg };
466
+ }
467
+ }
468
+ return { context, error };
469
+ }
470
+ var ConsoleLogger = class _ConsoleLogger {
471
+ constructor(prefix, level = resolveLogLevel(), format = resolveLogFormat(), boundContext) {
427
472
  this.prefix = prefix;
428
473
  this.level = level;
474
+ this.format = format;
475
+ this.boundContext = {};
476
+ if (boundContext) {
477
+ this.boundContext = boundContext;
478
+ }
429
479
  }
430
480
  setLevel(level) {
431
481
  this.level = level;
@@ -433,36 +483,88 @@ var ConsoleLogger = class {
433
483
  getLevel() {
434
484
  return this.level;
435
485
  }
436
- debug(message, ...args) {
437
- if (this.level <= 0 /* DEBUG */) {
438
- console.debug(`[${this.prefix}] DEBUG: ${message}`, ...args);
486
+ setFormat(format) {
487
+ this.format = format;
488
+ }
489
+ getFormat() {
490
+ return this.format;
491
+ }
492
+ /**
493
+ * Create a child logger with additional bound context.
494
+ */
495
+ child(context) {
496
+ return new _ConsoleLogger(this.prefix, this.level, this.format, {
497
+ ...this.boundContext,
498
+ ...context
499
+ });
500
+ }
501
+ formatJson(level, message, args) {
502
+ const { context, error } = extractContext(args);
503
+ const entry = {
504
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
505
+ level,
506
+ service: this.prefix.toLowerCase(),
507
+ message
508
+ };
509
+ const mergedContext = { ...this.boundContext, ...context };
510
+ if (Object.keys(mergedContext).length > 0) {
511
+ if ("requestId" in mergedContext) {
512
+ entry.requestId = String(mergedContext.requestId);
513
+ delete mergedContext.requestId;
514
+ }
515
+ if ("traceId" in mergedContext) {
516
+ entry.traceId = String(mergedContext.traceId);
517
+ delete mergedContext.traceId;
518
+ }
519
+ if ("projectSlug" in mergedContext) {
520
+ entry.projectSlug = String(mergedContext.projectSlug);
521
+ delete mergedContext.projectSlug;
522
+ }
523
+ if ("durationMs" in mergedContext) {
524
+ entry.durationMs = Number(mergedContext.durationMs);
525
+ delete mergedContext.durationMs;
526
+ }
527
+ if (Object.keys(mergedContext).length > 0) {
528
+ entry.context = mergedContext;
529
+ }
439
530
  }
531
+ if (error) {
532
+ entry.error = error;
533
+ }
534
+ return JSON.stringify(entry);
440
535
  }
441
- info(message, ...args) {
442
- if (this.level <= 1 /* INFO */) {
443
- console.log(`[${this.prefix}] ${message}`, ...args);
536
+ log(level, logLevel, consoleFn, message, args) {
537
+ if (this.level > logLevel)
538
+ return;
539
+ if (this.format === "json") {
540
+ consoleFn(this.formatJson(level, message, args));
541
+ } else {
542
+ const prefix = level === "info" ? "" : ` ${level.toUpperCase()}:`;
543
+ consoleFn(`[${this.prefix}]${prefix} ${message}`, ...args);
444
544
  }
445
545
  }
546
+ debug(message, ...args) {
547
+ this.log("debug", 0 /* DEBUG */, console.debug, message, args);
548
+ }
549
+ info(message, ...args) {
550
+ this.log("info", 1 /* INFO */, console.log, message, args);
551
+ }
446
552
  warn(message, ...args) {
447
- if (this.level <= 2 /* WARN */) {
448
- console.warn(`[${this.prefix}] WARN: ${message}`, ...args);
449
- }
553
+ this.log("warn", 2 /* WARN */, console.warn, message, args);
450
554
  }
451
555
  error(message, ...args) {
452
- if (this.level <= 3 /* ERROR */) {
453
- console.error(`[${this.prefix}] ERROR: ${message}`, ...args);
454
- }
556
+ this.log("error", 3 /* ERROR */, console.error, message, args);
455
557
  }
456
558
  async time(label, fn) {
457
559
  const start = performance.now();
458
560
  try {
459
561
  const result = await fn();
460
- const end = performance.now();
461
- this.debug(`${label} completed in ${(end - start).toFixed(2)}ms`);
562
+ const durationMs = performance.now() - start;
563
+ this.debug(`${label} completed`, { durationMs: Math.round(durationMs) });
462
564
  return result;
463
565
  } catch (error) {
464
- const end = performance.now();
465
- this.error(`${label} failed after ${(end - start).toFixed(2)}ms`, error);
566
+ const durationMs = performance.now() - start;
567
+ this.error(`${label} failed`, { durationMs: Math.round(durationMs) }, error);
466
568
  throw error;
467
569
  }
468
570
  }
@@ -505,6 +607,7 @@ var serverLogger = createLogger("SERVER");
505
607
  var rendererLogger = createLogger("RENDERER");
506
608
  var bundlerLogger = createLogger("BUNDLER");
507
609
  var agentLogger = createLogger("AGENT");
610
+ var proxyLogger = createLogger("PROXY");
508
611
  var logger = createLogger("VERYFRONT");
509
612
 
510
613
  // src/core/utils/constants/cache.ts
@@ -532,7 +635,7 @@ var LRU_DEFAULT_MAX_SIZE_BYTES = 50 * 1024 * 1024;
532
635
  // deno.json
533
636
  var deno_default = {
534
637
  name: "veryfront",
535
- version: "0.0.71",
638
+ version: "0.0.74",
536
639
  nodeModulesDir: "auto",
537
640
  exclude: [
538
641
  "npm/",
@@ -617,12 +720,12 @@ var deno_default = {
617
720
  csstype: "https://esm.sh/csstype@3.2.3",
618
721
  "@types/react": "https://esm.sh/@types/react@18.3.27?deps=csstype@3.2.3",
619
722
  "@types/react-dom": "https://esm.sh/@types/react-dom@18.3.7?deps=csstype@3.2.3",
620
- react: "https://esm.sh/react@18.3.1",
621
- "react-dom": "https://esm.sh/react-dom@18.3.1",
622
- "react-dom/server": "https://esm.sh/react-dom@18.3.1/server",
623
- "react-dom/client": "https://esm.sh/react-dom@18.3.1/client",
624
- "react/jsx-runtime": "https://esm.sh/react@18.3.1/jsx-runtime",
625
- "react/jsx-dev-runtime": "https://esm.sh/react@18.3.1/jsx-dev-runtime",
723
+ react: "npm:react@18.3.1",
724
+ "react-dom": "npm:react-dom@18.3.1",
725
+ "react-dom/server": "npm:react-dom@18.3.1/server.node",
726
+ "react-dom/client": "npm:react-dom@18.3.1/client",
727
+ "react/jsx-runtime": "npm:react@18.3.1/jsx-runtime",
728
+ "react/jsx-dev-runtime": "npm:react@18.3.1/jsx-dev-runtime",
626
729
  "@mdx-js/mdx": "npm:@mdx-js/mdx@3.0.0",
627
730
  "@mdx-js/react": "npm:@mdx-js/react@3.0.0",
628
731
  "unist-util-visit": "npm:unist-util-visit@5.0.0",
@@ -632,27 +735,36 @@ var deno_default = {
632
735
  "remark-frontmatter": "npm:remark-frontmatter@5.0.0",
633
736
  "rehype-highlight": "npm:rehype-highlight@7.0.2",
634
737
  "rehype-slug": "npm:rehype-slug@6.0.0",
635
- esbuild: "https://deno.land/x/esbuild@v0.20.1/wasm.js",
636
- "esbuild/mod.js": "https://deno.land/x/esbuild@v0.20.1/mod.js",
738
+ esbuild: "npm:esbuild@0.20.2",
739
+ "esbuild/mod.js": "npm:esbuild@0.20.2",
637
740
  "es-module-lexer": "npm:es-module-lexer@1.5.0",
638
- zod: "npm:zod@3.23.8",
741
+ zod: "npm:zod@3.25.76",
639
742
  "mime-types": "npm:mime-types@2.1.35",
640
743
  mdast: "npm:@types/mdast@4.0.3",
641
744
  hast: "npm:@types/hast@3.0.3",
642
745
  unist: "npm:@types/unist@3.0.2",
643
746
  unified: "npm:unified@11.0.5",
644
- ai: "https://esm.sh/ai@5.0.76?deps=react@18.3.1,react-dom@18.3.1",
645
- "ai/react": "https://esm.sh/@ai-sdk/react@2.0.1?deps=react@18.3.1,react-dom@18.3.1",
646
- "@ai-sdk/react": "https://esm.sh/@ai-sdk/react@2.0.1?deps=react@18.3.1,react-dom@18.3.1",
747
+ ai: "npm:ai@5.0.76",
748
+ "ai/react": "npm:@ai-sdk/react@2.0.1",
749
+ "@ai-sdk/react": "npm:@ai-sdk/react@2.0.1",
647
750
  "@ai-sdk/openai": "https://esm.sh/@ai-sdk/openai@2.0.1",
648
751
  "@ai-sdk/anthropic": "https://esm.sh/@ai-sdk/anthropic@2.0.1",
649
752
  unocss: "https://esm.sh/unocss@0.59.0",
650
753
  "@unocss/core": "https://esm.sh/@unocss/core@0.59.0",
651
754
  "@unocss/preset-wind": "https://esm.sh/@unocss/preset-wind@0.59.0",
755
+ "next-themes": "npm:next-themes@0.3.0",
652
756
  redis: "npm:redis",
653
757
  pg: "npm:pg",
654
758
  "@opentelemetry/api": "npm:@opentelemetry/api@1",
655
- "@opentelemetry/core": "npm:@opentelemetry/core@1"
759
+ "@opentelemetry/core": "npm:@opentelemetry/core@1",
760
+ "@opentelemetry/sdk-trace-base": "npm:@opentelemetry/sdk-trace-base@1",
761
+ "@opentelemetry/exporter-trace-otlp-http": "npm:@opentelemetry/exporter-trace-otlp-http@0.57",
762
+ "@opentelemetry/resources": "npm:@opentelemetry/resources@1",
763
+ "@opentelemetry/semantic-conventions": "npm:@opentelemetry/semantic-conventions@1",
764
+ "@babel/parser": "npm:@babel/parser@7.26.3",
765
+ "@babel/traverse": "npm:@babel/traverse@7.26.3",
766
+ "@babel/generator": "npm:@babel/generator@7.26.3",
767
+ "@babel/types": "npm:@babel/types@7.26.3"
656
768
  },
657
769
  compilerOptions: {
658
770
  jsx: "react-jsx",
@@ -660,7 +772,7 @@ var deno_default = {
660
772
  strict: true,
661
773
  noImplicitAny: true,
662
774
  noUncheckedIndexedAccess: true,
663
- types: [],
775
+ types: ["npm:@types/react@18"],
664
776
  lib: [
665
777
  "deno.window",
666
778
  "dom",
@@ -675,9 +787,9 @@ var deno_default = {
675
787
  build: "deno compile --allow-all --output ../../bin/veryfront src/cli/main.ts",
676
788
  "build:npm": "deno run -A scripts/build-npm.ts",
677
789
  release: "deno run -A scripts/release.ts",
678
- test: "DENO_JOBS=1 deno test --parallel --fail-fast --allow-all --unstable-worker-options --unstable-net",
679
- "test:unit": "DENO_JOBS=1 deno test --parallel --allow-all --v8-flags=--max-old-space-size=8192 --ignore=tests --unstable-worker-options --unstable-net",
680
- "test:integration": "DENO_JOBS=1 deno test --parallel --fail-fast --allow-all tests --unstable-worker-options --unstable-net",
790
+ test: "VF_DISABLE_LRU_INTERVAL=1 DENO_JOBS=1 deno test --parallel --fail-fast --allow-all --unstable-worker-options --unstable-net",
791
+ "test:unit": "VF_DISABLE_LRU_INTERVAL=1 DENO_JOBS=1 deno test --parallel --allow-all --v8-flags=--max-old-space-size=8192 --ignore=tests,src/ai/workflow/__tests__ --unstable-worker-options --unstable-net",
792
+ "test:integration": "VF_DISABLE_LRU_INTERVAL=1 DENO_JOBS=1 deno test --parallel --fail-fast --allow-all tests --unstable-worker-options --unstable-net",
681
793
  "test:coverage": "rm -rf coverage && DENO_JOBS=1 deno test --parallel --fail-fast --allow-all --coverage=coverage --unstable-worker-options --unstable-net || exit 1",
682
794
  "test:coverage:unit": "rm -rf coverage && DENO_JOBS=1 deno test --parallel --fail-fast --allow-all --coverage=coverage --ignore=tests --unstable-worker-options --unstable-net || exit 1",
683
795
  "test:coverage:integration": "rm -rf coverage && DENO_JOBS=1 deno test --parallel --fail-fast --allow-all --coverage=coverage tests --unstable-worker-options --unstable-net || exit 1",
@@ -738,7 +850,7 @@ var deno_default = {
738
850
  };
739
851
 
740
852
  // src/platform/compat/runtime.ts
741
- var isDeno = typeof Deno !== "undefined";
853
+ var isDeno = typeof Deno !== "undefined" && typeof Deno.version === "object";
742
854
  var isNode = typeof globalThis.process !== "undefined" && globalThis.process?.versions?.node !== void 0;
743
855
  var isBun = typeof globalThis.Bun !== "undefined";
744
856
  var isCloudflare = typeof globalThis !== "undefined" && "caches" in globalThis && "WebSocketPair" in globalThis;
@@ -758,6 +870,7 @@ function getEnv(key) {
758
870
 
759
871
  // src/core/utils/version.ts
760
872
  var VERSION = getEnv("VERYFRONT_VERSION") || (typeof deno_default.version === "string" ? deno_default.version : "0.0.0");
873
+ var SERVER_START_TIME = Date.now();
761
874
 
762
875
  // src/core/utils/constants/http.ts
763
876
  var KB_IN_BYTES = 1024;
@@ -957,6 +1070,9 @@ var InMemoryBundleManifestStore = class {
957
1070
  };
958
1071
  var manifestStore = new InMemoryBundleManifestStore();
959
1072
 
1073
+ // src/core/utils/perf-timer.ts
1074
+ var enabled = typeof process !== "undefined" ? process.env?.VERYFRONT_PERF === "1" : typeof Deno !== "undefined" ? Deno.env.get("VERYFRONT_PERF") === "1" : false;
1075
+
960
1076
  // src/core/utils/lru-wrapper.ts
961
1077
  var LRUCache = class {
962
1078
  adapter;
@@ -986,6 +1102,9 @@ var LRUCache = class {
986
1102
  this.adapter.cleanupExpired();
987
1103
  }, this.cleanupIntervalMs);
988
1104
  this.cleanupTimer = timer;
1105
+ if (typeof Deno !== "undefined" && "unrefTimer" in Deno) {
1106
+ Deno.unrefTimer(timer);
1107
+ }
989
1108
  }
990
1109
  toStringKey(key) {
991
1110
  if (typeof key === "string") {