@barefootjs/vite 0.31.9 → 0.31.10

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.
Files changed (2) hide show
  1. package/dist/index.js +99 -9
  2. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -7280,15 +7280,28 @@ function collectKeysFromMembers(members, ctx) {
7280
7280
  }
7281
7281
  return keys;
7282
7282
  }
7283
+ function isResolvableMemberType(info) {
7284
+ switch (info.kind) {
7285
+ case "primitive":
7286
+ return info.primitive === "string" || info.primitive === "number" || info.primitive === "boolean";
7287
+ case "interface":
7288
+ return CATALOGUED_RICH_TYPE_NAMES.has(baseTypeName(info.raw));
7289
+ case "array":
7290
+ return !!info.elementType && isResolvableMemberType(info.elementType);
7291
+ case "object":
7292
+ return info.properties !== undefined && info.properties.every((prop) => isResolvableMemberType(prop.type));
7293
+ default:
7294
+ return false;
7295
+ }
7296
+ }
7283
7297
  function collectMemberTypes(typeNode, ctx) {
7284
- const isResolvablePrimitive = (info) => info.kind === "primitive" && (info.primitive === "string" || info.primitive === "number" || info.primitive === "boolean") || info.kind === "interface" && CATALOGUED_RICH_TYPE_NAMES.has(baseTypeName(info.raw));
7285
7298
  const fromMembers = (members) => {
7286
7299
  const map = new Map;
7287
7300
  for (const member of members) {
7288
7301
  if (ts9.isPropertySignature(member) && member.name) {
7289
7302
  const info = member.type ? typeNodeToTypeInfo(member.type, ctx.sourceFile) : null;
7290
7303
  map.set(member.name.getText(ctx.sourceFile), {
7291
- type: info && isResolvablePrimitive(info) ? info : null,
7304
+ type: info && isResolvableMemberType(info) ? info : null,
7292
7305
  optional: !!member.questionToken
7293
7306
  });
7294
7307
  }
@@ -22547,6 +22560,7 @@ function extractSsrDefaults(metadata) {
22547
22560
  out[metadata.restPropsName] = { isRestProps: true, value: {} };
22548
22561
  }
22549
22562
  const bindings = {};
22563
+ const localConsts = localConstValuesByName(metadata);
22550
22564
  for (const c of metadata.localConstants ?? []) {
22551
22565
  if (!c.isModule || c.value === undefined)
22552
22566
  continue;
@@ -22562,14 +22576,26 @@ function extractSsrDefaults(metadata) {
22562
22576
  if (sig.envReader)
22563
22577
  continue;
22564
22578
  const value = tryStaticEval(sig.initialValue, { bindings, propsLike });
22565
- out[sig.getter] = { value: resultToJsonable(value) };
22579
+ if (metadata.propsObjectName !== null && referencesOwnProp(sig.initialValue, metadata.propsObjectName, sig.getter, localConsts)) {
22580
+ if (!(sig.getter in out)) {
22581
+ out[sig.getter] = { propName: sig.getter, value: null };
22582
+ }
22583
+ } else {
22584
+ out[sig.getter] = { value: resultToJsonable(value) };
22585
+ }
22566
22586
  bindings[sig.getter] = value;
22567
22587
  }
22568
22588
  for (const memo of metadata.memos) {
22569
22589
  if (memo.isModule)
22570
22590
  continue;
22571
22591
  const value = tryStaticEval(memo.computation, { bindings, propsLike });
22572
- out[memo.name] = { value: resultToJsonable(value) };
22592
+ if (metadata.propsObjectName !== null && referencesOwnProp(memo.computation, metadata.propsObjectName, memo.name, localConsts)) {
22593
+ if (!(memo.name in out)) {
22594
+ out[memo.name] = { propName: memo.name, value: null };
22595
+ }
22596
+ } else {
22597
+ out[memo.name] = { value: resultToJsonable(value) };
22598
+ }
22573
22599
  bindings[memo.name] = value;
22574
22600
  }
22575
22601
  if (metadata.propsObjectName !== null) {
@@ -22577,12 +22603,12 @@ function extractSsrDefaults(metadata) {
22577
22603
  for (const sig of metadata.signals) {
22578
22604
  if (!sig.getter || sig.isModule || sig.envReader)
22579
22605
  continue;
22580
- collectPropRefs(sig.initialValue, metadata.propsObjectName, referenced);
22606
+ collectPropRefsTransitive(sig.initialValue, metadata.propsObjectName, localConsts, referenced);
22581
22607
  }
22582
22608
  for (const memo of metadata.memos) {
22583
22609
  if (memo.isModule)
22584
22610
  continue;
22585
- collectPropRefs(memo.computation, metadata.propsObjectName, referenced);
22611
+ collectPropRefsTransitive(memo.computation, metadata.propsObjectName, localConsts, referenced);
22586
22612
  }
22587
22613
  for (const name of referenced) {
22588
22614
  if (name in out)
@@ -22592,6 +22618,20 @@ function extractSsrDefaults(metadata) {
22592
22618
  }
22593
22619
  return Object.keys(out).length === 0 ? undefined : out;
22594
22620
  }
22621
+ function localConstValuesByName(metadata) {
22622
+ const out = new Map;
22623
+ for (const c of metadata.localConstants ?? []) {
22624
+ if (c.isModule || c.value === undefined)
22625
+ continue;
22626
+ out.set(c.name, c.value);
22627
+ }
22628
+ return out;
22629
+ }
22630
+ function referencesOwnProp(expr, propsObjectName, name, localConsts) {
22631
+ const referenced = new Set;
22632
+ collectPropRefsTransitive(expr, propsObjectName, localConsts, referenced);
22633
+ return referenced.has(name);
22634
+ }
22595
22635
  function collectPropRefs(expr, propsObjectName, out) {
22596
22636
  if (!expr || !expr.trim())
22597
22637
  return;
@@ -22607,6 +22647,23 @@ function collectPropRefs(expr, propsObjectName, out) {
22607
22647
  };
22608
22648
  visit3(node);
22609
22649
  }
22650
+ function collectPropRefsTransitive(expr, propsObjectName, localConsts, out, visited = new Set) {
22651
+ if (!expr || !expr.trim())
22652
+ return;
22653
+ collectPropRefs(expr, propsObjectName, out);
22654
+ const node = parseExpression2(expr);
22655
+ if (!node)
22656
+ return;
22657
+ for (const id of extractFreeIdentifiersFromNode(node)) {
22658
+ if (visited.has(id))
22659
+ continue;
22660
+ const constValue = localConsts.get(id);
22661
+ if (constValue === undefined)
22662
+ continue;
22663
+ visited.add(id);
22664
+ collectPropRefsTransitive(constValue, propsObjectName, localConsts, out, visited);
22665
+ }
22666
+ }
22610
22667
  function resultToJsonable(v) {
22611
22668
  if (v === UNRESOLVED)
22612
22669
  return null;
@@ -22651,7 +22708,7 @@ function evalStatementsForReturn(statements, ctx) {
22651
22708
  return NO_RETURN;
22652
22709
  }
22653
22710
  function parseExpression2(expr) {
22654
- const sf = ts22.createSourceFile("__ssr_default__.ts", `(${expr})`, ts22.ScriptTarget.Latest, false, ts22.ScriptKind.TS);
22711
+ const sf = ts22.createSourceFile("__ssr_default__.ts", `(${expr})`, ts22.ScriptTarget.Latest, true, ts22.ScriptKind.TS);
22655
22712
  const stmt = sf.statements[0];
22656
22713
  if (!stmt || !ts22.isExpressionStatement(stmt))
22657
22714
  return null;
@@ -22965,6 +23022,38 @@ function classify2(name, origin, expr, parsed, available) {
22965
23022
  }
22966
23023
  return { kind: "derived", name, origin, expr, parsed, frees: [...frees] };
22967
23024
  }
23025
+ function localConstExprsByName(metadata) {
23026
+ const out = new Map;
23027
+ for (const c of metadata.localConstants ?? []) {
23028
+ if (c.isModule || c.declarationKind !== "const" || c.value === undefined)
23029
+ continue;
23030
+ out.set(c.name, c.parsed ?? parseExpression(c.value.trim()));
23031
+ }
23032
+ return out;
23033
+ }
23034
+ function resolveThroughLocalConsts(parsed, localConsts) {
23035
+ let current = parsed;
23036
+ const maxIter = localConsts.size + 1;
23037
+ for (let i = 0;i < maxIter; i++) {
23038
+ const frees = freeIdentifiers(current);
23039
+ if (frees === null)
23040
+ break;
23041
+ let changed = false;
23042
+ for (const name of frees) {
23043
+ const value = localConsts.get(name);
23044
+ if (!value)
23045
+ continue;
23046
+ const inlined = inlineBinding(current, name, value);
23047
+ if (inlined === null)
23048
+ continue;
23049
+ current = inlined;
23050
+ changed = true;
23051
+ }
23052
+ if (!changed)
23053
+ break;
23054
+ }
23055
+ return current;
23056
+ }
22968
23057
  function computeSsrSeedPlan(metadata) {
22969
23058
  const baseScope = metadata.propsParams.map((p) => p.name);
22970
23059
  if (metadata.propsObjectName)
@@ -22973,6 +23062,7 @@ function computeSsrSeedPlan(metadata) {
22973
23062
  baseScope.push(name);
22974
23063
  }
22975
23064
  const available = new Set(baseScope);
23065
+ const localConsts = localConstExprsByName(metadata);
22976
23066
  const steps = [];
22977
23067
  for (const signal of metadata.signals) {
22978
23068
  if (signal.envReader) {
@@ -22984,13 +23074,13 @@ function computeSsrSeedPlan(metadata) {
22984
23074
  }
22985
23075
  }
22986
23076
  const expr = signal.initialValue.trim();
22987
- steps.push(expr === "" ? { kind: "opaque", name: signal.getter, origin: "signal" } : classify2(signal.getter, "signal", expr, parseExpression(expr), available));
23077
+ steps.push(expr === "" ? { kind: "opaque", name: signal.getter, origin: "signal" } : classify2(signal.getter, "signal", expr, resolveThroughLocalConsts(parseExpression(expr), localConsts), available));
22988
23078
  available.add(signal.getter);
22989
23079
  }
22990
23080
  for (const memo of metadata.memos) {
22991
23081
  const body = extractArrowBodyExpression(memo.computation);
22992
23082
  const expr = body?.trim() ?? "";
22993
- steps.push(expr === "" ? { kind: "opaque", name: memo.name, origin: "memo" } : classify2(memo.name, "memo", expr, memo.parsed ?? parseExpression(expr), available));
23083
+ steps.push(expr === "" ? { kind: "opaque", name: memo.name, origin: "memo" } : classify2(memo.name, "memo", expr, resolveThroughLocalConsts(memo.parsed ?? parseExpression(expr), localConsts), available));
22994
23084
  available.add(memo.name);
22995
23085
  }
22996
23086
  return { baseScope, steps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@barefootjs/vite",
3
- "version": "0.31.9",
3
+ "version": "0.31.10",
4
4
  "description": "Vite plugin for BarefootJS: Vite/Rollup owns bundling, hashing, chunking, tree-shaking and minification of client assets, BarefootJS keeps only the JSX to (template, client JS) compile",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -38,17 +38,17 @@
38
38
  "directory": "packages/vite"
39
39
  },
40
40
  "dependencies": {
41
- "@barefootjs/shared": "0.31.9"
41
+ "@barefootjs/shared": "0.31.10"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "@barefootjs/jsx": ">=0.2.0",
45
45
  "vite": "^6.0.0"
46
46
  },
47
47
  "devDependencies": {
48
- "@barefootjs/client": "0.31.9",
49
- "@barefootjs/go-template": "0.31.9",
50
- "@barefootjs/hono": "0.31.9",
51
- "@barefootjs/jsx": "0.31.9",
48
+ "@barefootjs/client": "0.31.10",
49
+ "@barefootjs/go-template": "0.31.10",
50
+ "@barefootjs/hono": "0.31.10",
51
+ "@barefootjs/jsx": "0.31.10",
52
52
  "typescript": "^5.0.0",
53
53
  "vite": "^6.0.0"
54
54
  }