@nudojs/core 1.9.1 → 1.9.2

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.
@@ -46,7 +46,7 @@ import {
46
46
  withEvalBudgetOverride,
47
47
  withExecPhi,
48
48
  withFnBudgetOverride
49
- } from "./chunk-733OATC3.js";
49
+ } from "./chunk-XR3TE4C2.js";
50
50
 
51
51
  // src/algebra/directive-scan.ts
52
52
  function cleanDirectiveLine(raw, kind) {
@@ -15421,25 +15421,75 @@ function $removeUndefined(a) {
15421
15421
  }
15422
15422
  function $removeMemberNullish(a, key) {
15423
15423
  if (!a || typeof a !== "object" || !("shape" in a)) return a;
15424
+ if (a.shape.k === "sum") {
15425
+ const members = a.shape.members;
15426
+ const kept = [];
15427
+ let changed = false;
15428
+ for (const m of members) {
15429
+ const r2 = memberSlotTruthyRefine(m, key);
15430
+ if (r2.kind === "prune") {
15431
+ changed = true;
15432
+ continue;
15433
+ }
15434
+ if (r2.kind === "keep") {
15435
+ kept.push(m);
15436
+ continue;
15437
+ }
15438
+ changed = true;
15439
+ const sh = m.shape;
15440
+ const next2 = { ...m, shape: { ...sh, slots: { ...sh.slots, [key]: r2.slot } } };
15441
+ migrateAccessors(m, next2);
15442
+ migrateInvariants(m, next2);
15443
+ migrateNullProto(m, next2);
15444
+ kept.push(next2);
15445
+ }
15446
+ if (!changed || kept.length === 0) return a;
15447
+ return kept.length === 1 ? kept[0] : { ...a, shape: { k: "sum", members: kept } };
15448
+ }
15424
15449
  if (a.shape.k !== "obj") return a;
15425
15450
  const slots = a.shape.slots;
15426
15451
  if (!Object.prototype.hasOwnProperty.call(slots, key)) return a;
15452
+ const r = memberSlotTruthyRefine(a, key);
15453
+ if (r.kind !== "refine") return a;
15454
+ const next = { ...a, shape: { ...a.shape, slots: { ...slots, [key]: r.slot } } };
15455
+ migrateAccessors(a, next);
15456
+ migrateInvariants(a, next);
15457
+ migrateNullProto(a, next);
15458
+ return next;
15459
+ }
15460
+ function definitelyNullishAbs(a) {
15461
+ if (isNullishLitAbs(a)) return true;
15462
+ if (a.shape.k === "sum") {
15463
+ const members = a.shape.members;
15464
+ return members.length > 0 && members.every((m) => isNullishLitAbs(m));
15465
+ }
15466
+ return false;
15467
+ }
15468
+ function memberSlotTruthyRefine(m, key) {
15469
+ if (m.shape.k !== "obj") return { kind: "keep" };
15470
+ const slots = m.shape.slots;
15471
+ if (!Object.prototype.hasOwnProperty.call(slots, key)) {
15472
+ const sh = m.shape;
15473
+ if (sh.open || sh.index) return { kind: "keep" };
15474
+ if (OBJECT_PROTO_METHOD_NAMES2.has(key) || key === "constructor") return { kind: "keep" };
15475
+ if (accessorTable.get(m)?.has(key)) return { kind: "keep" };
15476
+ return { kind: "prune" };
15477
+ }
15478
+ if (accessorTable.get(m)?.get(key)?.get) return { kind: "keep" };
15427
15479
  const slot = slots[key];
15480
+ if (definitelyNullishAbs(slot.value)) return { kind: "prune" };
15428
15481
  let value = slot.value;
15429
- let changed = false;
15430
15482
  if (!definitelyNotNullishShape(value.shape) && value.shape.k === "sum") {
15431
15483
  const members = value.shape.members;
15432
- const kept = members.filter((m) => !isNullishLitAbs(m));
15484
+ const kept = members.filter((x) => !isNullishLitAbs(x));
15433
15485
  if (kept.length > 0 && kept.length < members.length) {
15434
15486
  value = kept.length === 1 ? kept[0] : { ...value, shape: { k: "sum", members: kept } };
15435
- changed = true;
15436
15487
  }
15437
15488
  }
15438
- if (slot.optional) changed = true;
15439
- if (!changed) return a;
15489
+ if (value === slot.value && !slot.optional) return { kind: "keep" };
15440
15490
  const next = { ...slot, value };
15441
15491
  delete next.optional;
15442
- return { ...a, shape: { ...a.shape, slots: { ...slots, [key]: next } } };
15492
+ return { kind: "refine", slot: next };
15443
15493
  }
15444
15494
  function typeofOfMember(m) {
15445
15495
  const t = m.term;
package/dist/exec.d.ts CHANGED
@@ -468,13 +468,23 @@ declare function $removeNull(a: Abs): Abs;
468
468
  */
469
469
  declare function $removeUndefined(a: Abs): Abs;
470
470
  /**
471
- * 成员真值守卫臂剪影(issue #118):`if (o.p)` 真值臂 / `if (!o.p)` 假值臂 /
472
- * `o?.p` 真值守卫里,槽 p 的值必为真值 ⇒ 非 nullish 且槽必在场——重建 obj
473
- * slots:槽值过与 $removeNullish 同款成员剥离,并摘除 optional 标记
474
- * (真值 ⇒ 在场;$get 的 join(value, undef) 随之消失)。槽值剥空(纯
471
+ * 成员真值守卫臂剪影(issue #118 / #129):`if (o.p)` 真值臂 / `if (!o.p)`
472
+ * 假值臂 / `o?.p` 真值守卫里,槽 p 的值必为真值 ⇒ 非 nullish 且槽必在场——
473
+ * 重建 obj slots:槽值过与 $removeNullish 同款成员剥离,并摘除 optional
474
+ * 标记(真值 ⇒ 在场;$get 的 join(value, undef) 随之消失)。槽值剥空(纯
475
475
  * nullish)→ 保守原样(臂不可达近似,与 $removeNullish 空集口径一致);
476
476
  * 键缺席 / 非 obj / 裸宿主值 → 透传(同 $removeNullish 契约)。真值 ⇒ 非
477
477
  * nullish 是 sound 下界:0/''/false 等 falsy-but-not-nullish 成员保留。
478
+ *
479
+ * sum 容器(issue #129):判别窄化后参数常为多臂 union——守卫事实按成员
480
+ * 分发:key 槽确定 nullish 的成员(闭 shape 槽缺席且缺席读确定 undefined
481
+ * ——open/index/proto 方法名/getter 均不在场;或槽值整体 nullish)在真值
482
+ * 守卫下必走早退 → 剪除;其余成员按 obj 分支同款重建(重建迁移
483
+ * accessor/propFlags/nullProto 侧表)。open/index 缺席(读 unknown 不可
484
+ * 判)/ proto 方法名与 constructor 缺席(原型链读出函数)/ getter-only
485
+ * 缺席(读 getter 结果)/ any / unknown 槽值 / 非对象成员不可判保留(宁
486
+ * 缺毋假,与 $get 缺席读同口径)。全剪空 → 原样;单成员剪余塌缩(与
487
+ * $narrowMemberEq 同口径)。
478
488
  */
479
489
  declare function $removeMemberNullish(a: Abs, key: string): Abs;
480
490
  /**
package/dist/exec.js CHANGED
@@ -195,7 +195,7 @@ import {
195
195
  tryRunTranspiled,
196
196
  withEvalBudgetOverride,
197
197
  withExecPhi
198
- } from "./chunk-733OATC3.js";
198
+ } from "./chunk-XR3TE4C2.js";
199
199
  export {
200
200
  $absVal,
201
201
  $add,
package/dist/index.js CHANGED
@@ -63,7 +63,7 @@ import {
63
63
  takeInterfaceDiagsSince,
64
64
  takeRefineDiags,
65
65
  takeRefineDiagsSince
66
- } from "./chunk-3BRXCIVZ.js";
66
+ } from "./chunk-PNCDILAV.js";
67
67
  import {
68
68
  $add,
69
69
  $arguments,
@@ -519,7 +519,7 @@ import {
519
519
  v,
520
520
  withExecPhi,
521
521
  withVar
522
- } from "./chunk-733OATC3.js";
522
+ } from "./chunk-XR3TE4C2.js";
523
523
 
524
524
  // src/environment.ts
525
525
  function createEnvironment(parent, bindings = /* @__PURE__ */ new Map()) {
package/dist/internal.js CHANGED
@@ -21,7 +21,7 @@ import {
21
21
  stableAnalyzeKeySource,
22
22
  stablePathKey,
23
23
  stablePathKeyGraph
24
- } from "./chunk-3BRXCIVZ.js";
24
+ } from "./chunk-PNCDILAV.js";
25
25
  import {
26
26
  $tryDigestSoft,
27
27
  $tryMarkSoft,
@@ -169,7 +169,7 @@ import {
169
169
  withEvalBudgetOverride,
170
170
  withFnBudgetOverride,
171
171
  wrapPromise
172
- } from "./chunk-733OATC3.js";
172
+ } from "./chunk-XR3TE4C2.js";
173
173
 
174
174
  // src/algebra/inlay.ts
175
175
  function listFunctions(source) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nudojs/core",
3
- "version": "1.9.1",
3
+ "version": "1.9.2",
4
4
  "engines": {
5
5
  "node": ">=20"
6
6
  },