promise-logic 1.1.0 → 1.2.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.
@@ -15,7 +15,9 @@ function createLogicError(type, fulfilledCount, total, results) {
15
15
  XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,
16
16
  NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,
17
17
  NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,
18
- MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`
18
+ MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`,
19
+ ALL_SUCCESSFUL_ERROR: `All successful condition failed: ${fulfilledCount}/${total} promises fulfilled (expected all to succeed).`,
20
+ ALL_FAILED_ERROR: `All failed condition failed: ${total - fulfilledCount}/${total} promises rejected (expected all to fail).`
19
21
  };
20
22
 
21
23
  return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);
@@ -119,6 +121,21 @@ class PromiseLogic {
119
121
  });
120
122
  }
121
123
 
124
+ // 返回所有成功的Promise结果
125
+ static allFulfilled(iterable) {
126
+ return Promise.allSettled(iterable).then((results) => {
127
+ const fulfilled = results.filter(result => result.status === 'fulfilled');
128
+ return fulfilled.map(result => result.value);
129
+ });
130
+ }
131
+
132
+ // 返回所有失败的Promise结果
133
+ static allRejected(iterable) {
134
+ return Promise.allSettled(iterable).then((results) => {
135
+ const rejected = results.filter(result => result.status === 'rejected');
136
+ return rejected.map(result => result.reason);
137
+ });
138
+ }
122
139
  static createFlipFlop(initialState = false) {
123
140
  let state = initialState;
124
141
  let resolveCurrent = null;
@@ -1 +1 @@
1
- {"version":3,"file":"factory.cjs.js","sources":["../src/utils/errors.js","../src/PromiseLogic.js","../src/factory.js"],"sourcesContent":["export class PromiseLogicError extends Error {\r\n constructor(type, message, results) {\r\n super(message);\r\n this.name = 'PromiseLogicError';\r\n this.type = type; // 'XOR_ERROR', 'NAND_ERROR', etc.\r\n this.results = results; // settlement results of all Promises\r\n }\r\n}\r\n\r\n// Error factory function\r\nexport function createLogicError(type, fulfilledCount, total, results) {\r\n const messages = {\r\n XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,\r\n NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,\r\n NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,\r\n MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`\r\n };\r\n \r\n return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);\r\n}","import { createLogicError } from './utils/errors.js';\r\n\r\nexport class PromiseLogic {\r\n static and(iterable) {\r\n return Promise.all(iterable);\r\n }\r\n\r\n static or(iterable) {\r\n return Promise.any(iterable);\r\n }\r\n\r\n static race(iterable) {\r\n return Promise.race(iterable);\r\n }\r\n\r\n static allSettled(iterable) {\r\n return Promise.allSettled(iterable);\r\n }\r\n\r\n static xor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 1) {\r\n // 恰好一个成功,返回成功的值\r\n return fulfilled[0].value;\r\n } else {\r\n // 0个或多个(>1)成功,抛出XOR_ERROR\r\n throw createLogicError('XOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static nand(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === total) {\r\n // 全部成功,抛出NAND_ERROR\r\n throw createLogicError('NAND_ERROR', fulfilledCount, total, results);\r\n } else {\r\n // 不是所有都成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n }\r\n });\r\n }\r\n\r\n static nor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0) {\r\n // 全部失败,返回空数组表示成功\r\n return [];\r\n } else {\r\n // 任意成功,抛出NOR_ERROR\r\n throw createLogicError('NOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static xnor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0 || fulfilledCount === total) {\r\n // 全部成功或全部失败,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 部分成功部分失败,抛出XNOR_ERROR\r\n throw createLogicError('XNOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static majority(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n // 多数逻辑:成功数 > 失败数\r\n if (fulfilledCount > total - fulfilledCount) {\r\n // 超过半数成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 未达到多数,抛出MAJORITY_ERROR\r\n throw createLogicError('MAJORITY_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static createFlipFlop(initialState = false) {\r\n let state = initialState;\r\n let resolveCurrent = null;\r\n let currentPromise = Promise.resolve(state);\r\n \r\n return {\r\n // 获取当前状态\r\n getState() {\r\n return state;\r\n },\r\n \r\n // 异步设置状态\r\n set(newState) {\r\n state = newState;\r\n if (resolveCurrent) {\r\n resolveCurrent(state);\r\n resolveCurrent = null;\r\n }\r\n currentPromise = Promise.resolve(state);\r\n return this;\r\n },\r\n \r\n // 切换状态\r\n toggle() {\r\n return this.set(!state);\r\n },\r\n \r\n // 等待状态变化\r\n waitForChange() {\r\n if (!resolveCurrent) {\r\n currentPromise = new Promise((resolve) => {\r\n resolveCurrent = resolve;\r\n });\r\n }\r\n return currentPromise;\r\n },\r\n \r\n // 等待特定状态\r\n waitFor(targetState) {\r\n if (state === targetState) {\r\n return Promise.resolve(state);\r\n }\r\n return new Promise((resolve) => {\r\n const checkState = () => {\r\n if (state === targetState) {\r\n resolve(state);\r\n } else {\r\n this.waitForChange().then(checkState);\r\n }\r\n };\r\n checkState();\r\n });\r\n }\r\n };\r\n }\r\n}","import { PromiseLogic } from './PromiseLogic.js';\n\nexport function createPromiseLogic(options = {}) {\n const { prefix = '', suffix = '', rename = {} } = options;\n \n // 基础方法映射\n const methods = {\n and: PromiseLogic.and,\n or: PromiseLogic.or,\n race: PromiseLogic.race,\n allSettled: PromiseLogic.allSettled,\n xor: PromiseLogic.xor,\n nand: PromiseLogic.nand,\n nor: PromiseLogic.nor,\n xnor: PromiseLogic.xnor,\n majority: PromiseLogic.majority\n };\n \n // 应用命名转换\n const result = {};\n Object.entries(methods).forEach(([key, fn]) => {\n // 优先使用rename映射,然后应用prefix和suffix\n const baseName = rename[key] || key;\n const finalName = `${prefix}${baseName}${suffix}`;\n result[finalName] = fn;\n });\n \n return result;\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.cjs.js","sources":["../src/utils/errors.js","../src/PromiseLogic.js","../src/factory.js"],"sourcesContent":["export class PromiseLogicError extends Error {\r\n constructor(type, message, results) {\r\n super(message);\r\n this.name = 'PromiseLogicError';\r\n this.type = type; // 'XOR_ERROR', 'NAND_ERROR', etc.\r\n this.results = results; // settlement results of all Promises\r\n }\r\n}\r\n\r\n// Error factory function\r\nexport function createLogicError(type, fulfilledCount, total, results) {\r\n const messages = {\r\n XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,\r\n NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,\r\n NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,\r\n MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`,\r\n ALL_SUCCESSFUL_ERROR: `All successful condition failed: ${fulfilledCount}/${total} promises fulfilled (expected all to succeed).`,\r\n ALL_FAILED_ERROR: `All failed condition failed: ${total - fulfilledCount}/${total} promises rejected (expected all to fail).`\r\n };\r\n \r\n return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);\r\n}","import { createLogicError } from './utils/errors.js';\r\n\r\nexport class PromiseLogic {\r\n static and(iterable) {\r\n return Promise.all(iterable);\r\n }\r\n\r\n static or(iterable) {\r\n return Promise.any(iterable);\r\n }\r\n\r\n static race(iterable) {\r\n return Promise.race(iterable);\r\n }\r\n\r\n static allSettled(iterable) {\r\n return Promise.allSettled(iterable);\r\n }\r\n\r\n static xor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 1) {\r\n // 恰好一个成功,返回成功的值\r\n return fulfilled[0].value;\r\n } else {\r\n // 0个或多个(>1)成功,抛出XOR_ERROR\r\n throw createLogicError('XOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static nand(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === total) {\r\n // 全部成功,抛出NAND_ERROR\r\n throw createLogicError('NAND_ERROR', fulfilledCount, total, results);\r\n } else {\r\n // 不是所有都成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n }\r\n });\r\n }\r\n\r\n static nor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0) {\r\n // 全部失败,返回空数组表示成功\r\n return [];\r\n } else {\r\n // 任意成功,抛出NOR_ERROR\r\n throw createLogicError('NOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static xnor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0 || fulfilledCount === total) {\r\n // 全部成功或全部失败,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 部分成功部分失败,抛出XNOR_ERROR\r\n throw createLogicError('XNOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static majority(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n // 多数逻辑:成功数 > 失败数\r\n if (fulfilledCount > total - fulfilledCount) {\r\n // 超过半数成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 未达到多数,抛出MAJORITY_ERROR\r\n throw createLogicError('MAJORITY_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n // 返回所有成功的Promise结果\r\n static allFulfilled(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n return fulfilled.map(result => result.value);\r\n });\r\n }\r\n\r\n // 返回所有失败的Promise结果\r\n static allRejected(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const rejected = results.filter(result => result.status === 'rejected');\r\n return rejected.map(result => result.reason);\r\n });\r\n }\r\n static createFlipFlop(initialState = false) {\r\n let state = initialState;\r\n let resolveCurrent = null;\r\n let currentPromise = Promise.resolve(state);\r\n \r\n return {\r\n // 获取当前状态\r\n getState() {\r\n return state;\r\n },\r\n \r\n // 异步设置状态\r\n set(newState) {\r\n state = newState;\r\n if (resolveCurrent) {\r\n resolveCurrent(state);\r\n resolveCurrent = null;\r\n }\r\n currentPromise = Promise.resolve(state);\r\n return this;\r\n },\r\n \r\n // 切换状态\r\n toggle() {\r\n return this.set(!state);\r\n },\r\n \r\n // 等待状态变化\r\n waitForChange() {\r\n if (!resolveCurrent) {\r\n currentPromise = new Promise((resolve) => {\r\n resolveCurrent = resolve;\r\n });\r\n }\r\n return currentPromise;\r\n },\r\n \r\n // 等待特定状态\r\n waitFor(targetState) {\r\n if (state === targetState) {\r\n return Promise.resolve(state);\r\n }\r\n return new Promise((resolve) => {\r\n const checkState = () => {\r\n if (state === targetState) {\r\n resolve(state);\r\n } else {\r\n this.waitForChange().then(checkState);\r\n }\r\n };\r\n checkState();\r\n });\r\n }\r\n };\r\n }\r\n}","import { PromiseLogic } from './PromiseLogic.js';\n\nexport function createPromiseLogic(options = {}) {\n const { prefix = '', suffix = '', rename = {} } = options;\n \n // 基础方法映射\n const methods = {\n and: PromiseLogic.and,\n or: PromiseLogic.or,\n race: PromiseLogic.race,\n allSettled: PromiseLogic.allSettled,\n xor: PromiseLogic.xor,\n nand: PromiseLogic.nand,\n nor: PromiseLogic.nor,\n xnor: PromiseLogic.xnor,\n majority: PromiseLogic.majority\n };\n \n // 应用命名转换\n const result = {};\n Object.entries(methods).forEach(([key, fn]) => {\n // 优先使用rename映射,然后应用prefix和suffix\n const baseName = rename[key] || key;\n const finalName = `${prefix}${baseName}${suffix}`;\n result[finalName] = fn;\n });\n \n return result;\n}"],"names":[],"mappings":"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"}
@@ -13,7 +13,9 @@ function createLogicError(type, fulfilledCount, total, results) {
13
13
  XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,
14
14
  NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,
15
15
  NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,
16
- MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`
16
+ MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`,
17
+ ALL_SUCCESSFUL_ERROR: `All successful condition failed: ${fulfilledCount}/${total} promises fulfilled (expected all to succeed).`,
18
+ ALL_FAILED_ERROR: `All failed condition failed: ${total - fulfilledCount}/${total} promises rejected (expected all to fail).`
17
19
  };
18
20
 
19
21
  return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);
@@ -117,6 +119,21 @@ class PromiseLogic {
117
119
  });
118
120
  }
119
121
 
122
+ // 返回所有成功的Promise结果
123
+ static allFulfilled(iterable) {
124
+ return Promise.allSettled(iterable).then((results) => {
125
+ const fulfilled = results.filter(result => result.status === 'fulfilled');
126
+ return fulfilled.map(result => result.value);
127
+ });
128
+ }
129
+
130
+ // 返回所有失败的Promise结果
131
+ static allRejected(iterable) {
132
+ return Promise.allSettled(iterable).then((results) => {
133
+ const rejected = results.filter(result => result.status === 'rejected');
134
+ return rejected.map(result => result.reason);
135
+ });
136
+ }
120
137
  static createFlipFlop(initialState = false) {
121
138
  let state = initialState;
122
139
  let resolveCurrent = null;
@@ -1 +1 @@
1
- {"version":3,"file":"factory.esm.js","sources":["../src/utils/errors.js","../src/PromiseLogic.js","../src/factory.js"],"sourcesContent":["export class PromiseLogicError extends Error {\r\n constructor(type, message, results) {\r\n super(message);\r\n this.name = 'PromiseLogicError';\r\n this.type = type; // 'XOR_ERROR', 'NAND_ERROR', etc.\r\n this.results = results; // settlement results of all Promises\r\n }\r\n}\r\n\r\n// Error factory function\r\nexport function createLogicError(type, fulfilledCount, total, results) {\r\n const messages = {\r\n XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,\r\n NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,\r\n NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,\r\n MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`\r\n };\r\n \r\n return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);\r\n}","import { createLogicError } from './utils/errors.js';\r\n\r\nexport class PromiseLogic {\r\n static and(iterable) {\r\n return Promise.all(iterable);\r\n }\r\n\r\n static or(iterable) {\r\n return Promise.any(iterable);\r\n }\r\n\r\n static race(iterable) {\r\n return Promise.race(iterable);\r\n }\r\n\r\n static allSettled(iterable) {\r\n return Promise.allSettled(iterable);\r\n }\r\n\r\n static xor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 1) {\r\n // 恰好一个成功,返回成功的值\r\n return fulfilled[0].value;\r\n } else {\r\n // 0个或多个(>1)成功,抛出XOR_ERROR\r\n throw createLogicError('XOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static nand(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === total) {\r\n // 全部成功,抛出NAND_ERROR\r\n throw createLogicError('NAND_ERROR', fulfilledCount, total, results);\r\n } else {\r\n // 不是所有都成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n }\r\n });\r\n }\r\n\r\n static nor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0) {\r\n // 全部失败,返回空数组表示成功\r\n return [];\r\n } else {\r\n // 任意成功,抛出NOR_ERROR\r\n throw createLogicError('NOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static xnor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0 || fulfilledCount === total) {\r\n // 全部成功或全部失败,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 部分成功部分失败,抛出XNOR_ERROR\r\n throw createLogicError('XNOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static majority(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n // 多数逻辑:成功数 > 失败数\r\n if (fulfilledCount > total - fulfilledCount) {\r\n // 超过半数成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 未达到多数,抛出MAJORITY_ERROR\r\n throw createLogicError('MAJORITY_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static createFlipFlop(initialState = false) {\r\n let state = initialState;\r\n let resolveCurrent = null;\r\n let currentPromise = Promise.resolve(state);\r\n \r\n return {\r\n // 获取当前状态\r\n getState() {\r\n return state;\r\n },\r\n \r\n // 异步设置状态\r\n set(newState) {\r\n state = newState;\r\n if (resolveCurrent) {\r\n resolveCurrent(state);\r\n resolveCurrent = null;\r\n }\r\n currentPromise = Promise.resolve(state);\r\n return this;\r\n },\r\n \r\n // 切换状态\r\n toggle() {\r\n return this.set(!state);\r\n },\r\n \r\n // 等待状态变化\r\n waitForChange() {\r\n if (!resolveCurrent) {\r\n currentPromise = new Promise((resolve) => {\r\n resolveCurrent = resolve;\r\n });\r\n }\r\n return currentPromise;\r\n },\r\n \r\n // 等待特定状态\r\n waitFor(targetState) {\r\n if (state === targetState) {\r\n return Promise.resolve(state);\r\n }\r\n return new Promise((resolve) => {\r\n const checkState = () => {\r\n if (state === targetState) {\r\n resolve(state);\r\n } else {\r\n this.waitForChange().then(checkState);\r\n }\r\n };\r\n checkState();\r\n });\r\n }\r\n };\r\n }\r\n}","import { PromiseLogic } from './PromiseLogic.js';\n\nexport function createPromiseLogic(options = {}) {\n const { prefix = '', suffix = '', rename = {} } = options;\n \n // 基础方法映射\n const methods = {\n and: PromiseLogic.and,\n or: PromiseLogic.or,\n race: PromiseLogic.race,\n allSettled: PromiseLogic.allSettled,\n xor: PromiseLogic.xor,\n nand: PromiseLogic.nand,\n nor: PromiseLogic.nor,\n xnor: PromiseLogic.xnor,\n majority: PromiseLogic.majority\n };\n \n // 应用命名转换\n const result = {};\n Object.entries(methods).forEach(([key, fn]) => {\n // 优先使用rename映射,然后应用prefix和suffix\n const baseName = rename[key] || key;\n const finalName = `${prefix}${baseName}${suffix}`;\n result[finalName] = fn;\n });\n \n return result;\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.esm.js","sources":["../src/utils/errors.js","../src/PromiseLogic.js","../src/factory.js"],"sourcesContent":["export class PromiseLogicError extends Error {\r\n constructor(type, message, results) {\r\n super(message);\r\n this.name = 'PromiseLogicError';\r\n this.type = type; // 'XOR_ERROR', 'NAND_ERROR', etc.\r\n this.results = results; // settlement results of all Promises\r\n }\r\n}\r\n\r\n// Error factory function\r\nexport function createLogicError(type, fulfilledCount, total, results) {\r\n const messages = {\r\n XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,\r\n NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,\r\n NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,\r\n MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`,\r\n ALL_SUCCESSFUL_ERROR: `All successful condition failed: ${fulfilledCount}/${total} promises fulfilled (expected all to succeed).`,\r\n ALL_FAILED_ERROR: `All failed condition failed: ${total - fulfilledCount}/${total} promises rejected (expected all to fail).`\r\n };\r\n \r\n return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);\r\n}","import { createLogicError } from './utils/errors.js';\r\n\r\nexport class PromiseLogic {\r\n static and(iterable) {\r\n return Promise.all(iterable);\r\n }\r\n\r\n static or(iterable) {\r\n return Promise.any(iterable);\r\n }\r\n\r\n static race(iterable) {\r\n return Promise.race(iterable);\r\n }\r\n\r\n static allSettled(iterable) {\r\n return Promise.allSettled(iterable);\r\n }\r\n\r\n static xor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 1) {\r\n // 恰好一个成功,返回成功的值\r\n return fulfilled[0].value;\r\n } else {\r\n // 0个或多个(>1)成功,抛出XOR_ERROR\r\n throw createLogicError('XOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static nand(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === total) {\r\n // 全部成功,抛出NAND_ERROR\r\n throw createLogicError('NAND_ERROR', fulfilledCount, total, results);\r\n } else {\r\n // 不是所有都成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n }\r\n });\r\n }\r\n\r\n static nor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0) {\r\n // 全部失败,返回空数组表示成功\r\n return [];\r\n } else {\r\n // 任意成功,抛出NOR_ERROR\r\n throw createLogicError('NOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static xnor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0 || fulfilledCount === total) {\r\n // 全部成功或全部失败,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 部分成功部分失败,抛出XNOR_ERROR\r\n throw createLogicError('XNOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static majority(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n // 多数逻辑:成功数 > 失败数\r\n if (fulfilledCount > total - fulfilledCount) {\r\n // 超过半数成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 未达到多数,抛出MAJORITY_ERROR\r\n throw createLogicError('MAJORITY_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n // 返回所有成功的Promise结果\r\n static allFulfilled(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n return fulfilled.map(result => result.value);\r\n });\r\n }\r\n\r\n // 返回所有失败的Promise结果\r\n static allRejected(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const rejected = results.filter(result => result.status === 'rejected');\r\n return rejected.map(result => result.reason);\r\n });\r\n }\r\n static createFlipFlop(initialState = false) {\r\n let state = initialState;\r\n let resolveCurrent = null;\r\n let currentPromise = Promise.resolve(state);\r\n \r\n return {\r\n // 获取当前状态\r\n getState() {\r\n return state;\r\n },\r\n \r\n // 异步设置状态\r\n set(newState) {\r\n state = newState;\r\n if (resolveCurrent) {\r\n resolveCurrent(state);\r\n resolveCurrent = null;\r\n }\r\n currentPromise = Promise.resolve(state);\r\n return this;\r\n },\r\n \r\n // 切换状态\r\n toggle() {\r\n return this.set(!state);\r\n },\r\n \r\n // 等待状态变化\r\n waitForChange() {\r\n if (!resolveCurrent) {\r\n currentPromise = new Promise((resolve) => {\r\n resolveCurrent = resolve;\r\n });\r\n }\r\n return currentPromise;\r\n },\r\n \r\n // 等待特定状态\r\n waitFor(targetState) {\r\n if (state === targetState) {\r\n return Promise.resolve(state);\r\n }\r\n return new Promise((resolve) => {\r\n const checkState = () => {\r\n if (state === targetState) {\r\n resolve(state);\r\n } else {\r\n this.waitForChange().then(checkState);\r\n }\r\n };\r\n checkState();\r\n });\r\n }\r\n };\r\n }\r\n}","import { PromiseLogic } from './PromiseLogic.js';\n\nexport function createPromiseLogic(options = {}) {\n const { prefix = '', suffix = '', rename = {} } = options;\n \n // 基础方法映射\n const methods = {\n and: PromiseLogic.and,\n or: PromiseLogic.or,\n race: PromiseLogic.race,\n allSettled: PromiseLogic.allSettled,\n xor: PromiseLogic.xor,\n nand: PromiseLogic.nand,\n nor: PromiseLogic.nor,\n xnor: PromiseLogic.xnor,\n majority: PromiseLogic.majority\n };\n \n // 应用命名转换\n const result = {};\n Object.entries(methods).forEach(([key, fn]) => {\n // 优先使用rename映射,然后应用prefix和suffix\n const baseName = rename[key] || key;\n const finalName = `${prefix}${baseName}${suffix}`;\n result[finalName] = fn;\n });\n \n return result;\n}"],"names":[],"mappings":"AAAO,MAAM,iBAAiB,SAAS,KAAK,CAAC;AAC7C,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;AACtC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,IAAI,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;AACpC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,EAAE,CAAC;AACH,CAAC;AACD;AACA;AACO,SAAS,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;AACvE,EAAE,MAAM,QAAQ,GAAG;AACnB,IAAI,SAAS,EAAE,CAAC,iEAAiE,EAAE,cAAc,CAAC,WAAW,CAAC;AAC9G,IAAI,UAAU,EAAE,CAAC,2BAA2B,EAAE,KAAK,CAAC,sDAAsD,CAAC;AAC3G,IAAI,SAAS,EAAE,CAAC,sBAAsB,EAAE,cAAc,CAAC,4CAA4C,CAAC;AACpG,IAAI,cAAc,EAAE,CAAC,2BAA2B,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,2BAA2B,CAAC;AACtG,IAAI,oBAAoB,EAAE,CAAC,iCAAiC,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,8CAA8C,CAAC;AACrI,IAAI,gBAAgB,EAAE,CAAC,6BAA6B,EAAE,KAAK,GAAG,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,0CAA0C,CAAC;AACjI,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,wBAAwB,EAAE,OAAO,CAAC,CAAC;AAC1F;;ACnBO,MAAM,YAAY,CAAC;AAC1B,EAAE,OAAO,GAAG,CAAC,QAAQ,EAAE;AACvB,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACjC,EAAE,CAAC;AACH;AACA,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE;AACtB,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACjC,EAAE,CAAC;AACH;AACA,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE;AACxB,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClC,EAAE,CAAC;AACH;AACA,EAAE,OAAO,UAAU,CAAC,QAAQ,EAAE;AAC9B,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACxC,EAAE,CAAC;AACH;AACA,EAAE,OAAO,GAAG,CAAC,QAAQ,EAAE;AACvB,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK;AAC1D,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;AAChF,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;AAC9C,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC;AACA,MAAM,IAAI,cAAc,KAAK,CAAC,EAAE;AAChC;AACA,QAAQ,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAClC,MAAM,CAAC,MAAM;AACb;AACA,QAAQ,MAAM,gBAAgB,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC5E,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE;AACxB,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK;AAC1D,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;AAChF,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;AAC9C,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC;AACA,MAAM,IAAI,cAAc,KAAK,KAAK,EAAE;AACpC;AACA,QAAQ,MAAM,gBAAgB,CAAC,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM;AACb;AACA,QAAQ,OAAO,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AACrD,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA,EAAE,OAAO,GAAG,CAAC,QAAQ,EAAE;AACvB,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK;AAC1D,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;AAChF,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;AAC9C,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC;AACA,MAAM,IAAI,cAAc,KAAK,CAAC,EAAE;AAChC;AACA,QAAQ,OAAO,EAAE,CAAC;AAClB,MAAM,CAAC,MAAM;AACb;AACA,QAAQ,MAAM,gBAAgB,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC5E,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE;AACxB,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK;AAC1D,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;AAChF,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;AAC9C,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC;AACA,MAAM,IAAI,cAAc,KAAK,CAAC,IAAI,cAAc,KAAK,KAAK,EAAE;AAC5D;AACA,QAAQ,OAAO,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM;AACb;AACA,QAAQ,MAAM,gBAAgB,CAAC,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7E,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA,EAAE,OAAO,QAAQ,CAAC,QAAQ,EAAE;AAC5B,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK;AAC1D,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;AAChF,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;AAC9C,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC;AACA;AACA,MAAM,IAAI,cAAc,GAAG,KAAK,GAAG,cAAc,EAAE;AACnD;AACA,QAAQ,OAAO,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM;AACb;AACA,QAAQ,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACjF,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA,EAAE,OAAO,YAAY,CAAC,QAAQ,EAAE;AAChC,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK;AAC1D,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;AAChF,MAAM,OAAO,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AACnD,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA,EAAE,OAAO,WAAW,CAAC,QAAQ,EAAE;AAC/B,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK;AAC1D,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;AAC9E,MAAM,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;AACnD,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH,EAAE,OAAO,cAAc,CAAC,YAAY,GAAG,KAAK,EAAE;AAC9C,IAAI,IAAI,KAAK,GAAG,YAAY,CAAC;AAC7B,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC;AAC9B,IAAI,IAAI,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChD;AACA,IAAI,OAAO;AACX;AACA,MAAM,QAAQ,GAAG;AACjB,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP;AACA;AACA,MAAM,GAAG,CAAC,QAAQ,EAAE;AACpB,QAAQ,KAAK,GAAG,QAAQ,CAAC;AACzB,QAAQ,IAAI,cAAc,EAAE;AAC5B,UAAU,cAAc,CAAC,KAAK,CAAC,CAAC;AAChC,UAAU,cAAc,GAAG,IAAI,CAAC;AAChC,QAAQ,CAAC;AACT,QAAQ,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChD,QAAQ,OAAO,IAAI,CAAC;AACpB,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAChC,MAAM,CAAC;AACP;AACA;AACA,MAAM,aAAa,GAAG;AACtB,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,UAAU,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACpD,YAAY,cAAc,GAAG,OAAO,CAAC;AACrC,UAAU,CAAC,CAAC,CAAC;AACb,QAAQ,CAAC;AACT,QAAQ,OAAO,cAAc,CAAC;AAC9B,MAAM,CAAC;AACP;AACA;AACA,MAAM,OAAO,CAAC,WAAW,EAAE;AAC3B,QAAQ,IAAI,KAAK,KAAK,WAAW,EAAE;AACnC,UAAU,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxC,QAAQ,CAAC;AACT,QAAQ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACxC,UAAU,MAAM,UAAU,GAAG,MAAM;AACnC,YAAY,IAAI,KAAK,KAAK,WAAW,EAAE;AACvC,cAAc,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7B,YAAY,CAAC,MAAM;AACnB,cAAc,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACpD,YAAY,CAAC;AACb,UAAU,CAAC,CAAC;AACZ,UAAU,UAAU,EAAE,CAAC;AACvB,QAAQ,CAAC,CAAC,CAAC;AACX,MAAM,CAAC;AACP,KAAK,CAAC;AACN,EAAE,CAAC;AACH;;ACxKO,SAAS,kBAAkB,CAAC,OAAO,GAAG,EAAE,EAAE;AACjD,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,OAAO;AAC3D;AACA;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,GAAG,EAAE,YAAY,CAAC,GAAG;AACzB,IAAI,EAAE,EAAE,YAAY,CAAC,EAAE;AACvB,IAAI,IAAI,EAAE,YAAY,CAAC,IAAI;AAC3B,IAAI,UAAU,EAAE,YAAY,CAAC,UAAU;AACvC,IAAI,GAAG,EAAE,YAAY,CAAC,GAAG;AACzB,IAAI,IAAI,EAAE,YAAY,CAAC,IAAI;AAC3B,IAAI,GAAG,EAAE,YAAY,CAAC,GAAG;AACzB,IAAI,IAAI,EAAE,YAAY,CAAC,IAAI;AAC3B,IAAI,QAAQ,EAAE,YAAY,CAAC;AAC3B,GAAG;AACH;AACA;AACA,EAAE,MAAM,MAAM,GAAG,EAAE;AACnB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK;AACjD;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG;AACvC,IAAI,MAAM,SAAS,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AACrD,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;AAC1B,EAAE,CAAC,CAAC;AACJ;AACA,EAAE,OAAO,MAAM;AACf;;;;"}
package/dist/index.cjs.js CHANGED
@@ -15,7 +15,9 @@ function createLogicError(type, fulfilledCount, total, results) {
15
15
  XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,
16
16
  NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,
17
17
  NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,
18
- MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`
18
+ MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`,
19
+ ALL_SUCCESSFUL_ERROR: `All successful condition failed: ${fulfilledCount}/${total} promises fulfilled (expected all to succeed).`,
20
+ ALL_FAILED_ERROR: `All failed condition failed: ${total - fulfilledCount}/${total} promises rejected (expected all to fail).`
19
21
  };
20
22
 
21
23
  return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);
@@ -119,6 +121,21 @@ class PromiseLogic {
119
121
  });
120
122
  }
121
123
 
124
+ // 返回所有成功的Promise结果
125
+ static allFulfilled(iterable) {
126
+ return Promise.allSettled(iterable).then((results) => {
127
+ const fulfilled = results.filter(result => result.status === 'fulfilled');
128
+ return fulfilled.map(result => result.value);
129
+ });
130
+ }
131
+
132
+ // 返回所有失败的Promise结果
133
+ static allRejected(iterable) {
134
+ return Promise.allSettled(iterable).then((results) => {
135
+ const rejected = results.filter(result => result.status === 'rejected');
136
+ return rejected.map(result => result.reason);
137
+ });
138
+ }
122
139
  static createFlipFlop(initialState = false) {
123
140
  let state = initialState;
124
141
  let resolveCurrent = null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/utils/errors.js","../src/PromiseLogic.js","../src/factory.js"],"sourcesContent":["export class PromiseLogicError extends Error {\r\n constructor(type, message, results) {\r\n super(message);\r\n this.name = 'PromiseLogicError';\r\n this.type = type; // 'XOR_ERROR', 'NAND_ERROR', etc.\r\n this.results = results; // settlement results of all Promises\r\n }\r\n}\r\n\r\n// Error factory function\r\nexport function createLogicError(type, fulfilledCount, total, results) {\r\n const messages = {\r\n XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,\r\n NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,\r\n NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,\r\n MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`\r\n };\r\n \r\n return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);\r\n}","import { createLogicError } from './utils/errors.js';\r\n\r\nexport class PromiseLogic {\r\n static and(iterable) {\r\n return Promise.all(iterable);\r\n }\r\n\r\n static or(iterable) {\r\n return Promise.any(iterable);\r\n }\r\n\r\n static race(iterable) {\r\n return Promise.race(iterable);\r\n }\r\n\r\n static allSettled(iterable) {\r\n return Promise.allSettled(iterable);\r\n }\r\n\r\n static xor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 1) {\r\n // 恰好一个成功,返回成功的值\r\n return fulfilled[0].value;\r\n } else {\r\n // 0个或多个(>1)成功,抛出XOR_ERROR\r\n throw createLogicError('XOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static nand(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === total) {\r\n // 全部成功,抛出NAND_ERROR\r\n throw createLogicError('NAND_ERROR', fulfilledCount, total, results);\r\n } else {\r\n // 不是所有都成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n }\r\n });\r\n }\r\n\r\n static nor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0) {\r\n // 全部失败,返回空数组表示成功\r\n return [];\r\n } else {\r\n // 任意成功,抛出NOR_ERROR\r\n throw createLogicError('NOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static xnor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0 || fulfilledCount === total) {\r\n // 全部成功或全部失败,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 部分成功部分失败,抛出XNOR_ERROR\r\n throw createLogicError('XNOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static majority(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n // 多数逻辑:成功数 > 失败数\r\n if (fulfilledCount > total - fulfilledCount) {\r\n // 超过半数成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 未达到多数,抛出MAJORITY_ERROR\r\n throw createLogicError('MAJORITY_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static createFlipFlop(initialState = false) {\r\n let state = initialState;\r\n let resolveCurrent = null;\r\n let currentPromise = Promise.resolve(state);\r\n \r\n return {\r\n // 获取当前状态\r\n getState() {\r\n return state;\r\n },\r\n \r\n // 异步设置状态\r\n set(newState) {\r\n state = newState;\r\n if (resolveCurrent) {\r\n resolveCurrent(state);\r\n resolveCurrent = null;\r\n }\r\n currentPromise = Promise.resolve(state);\r\n return this;\r\n },\r\n \r\n // 切换状态\r\n toggle() {\r\n return this.set(!state);\r\n },\r\n \r\n // 等待状态变化\r\n waitForChange() {\r\n if (!resolveCurrent) {\r\n currentPromise = new Promise((resolve) => {\r\n resolveCurrent = resolve;\r\n });\r\n }\r\n return currentPromise;\r\n },\r\n \r\n // 等待特定状态\r\n waitFor(targetState) {\r\n if (state === targetState) {\r\n return Promise.resolve(state);\r\n }\r\n return new Promise((resolve) => {\r\n const checkState = () => {\r\n if (state === targetState) {\r\n resolve(state);\r\n } else {\r\n this.waitForChange().then(checkState);\r\n }\r\n };\r\n checkState();\r\n });\r\n }\r\n };\r\n }\r\n}","import { PromiseLogic } from './PromiseLogic.js';\n\nexport function createPromiseLogic(options = {}) {\n const { prefix = '', suffix = '', rename = {} } = options;\n \n // 基础方法映射\n const methods = {\n and: PromiseLogic.and,\n or: PromiseLogic.or,\n race: PromiseLogic.race,\n allSettled: PromiseLogic.allSettled,\n xor: PromiseLogic.xor,\n nand: PromiseLogic.nand,\n nor: PromiseLogic.nor,\n xnor: PromiseLogic.xnor,\n majority: PromiseLogic.majority\n };\n \n // 应用命名转换\n const result = {};\n Object.entries(methods).forEach(([key, fn]) => {\n // 优先使用rename映射,然后应用prefix和suffix\n const baseName = rename[key] || key;\n const finalName = `${prefix}${baseName}${suffix}`;\n result[finalName] = fn;\n });\n \n return result;\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/utils/errors.js","../src/PromiseLogic.js","../src/factory.js"],"sourcesContent":["export class PromiseLogicError extends Error {\r\n constructor(type, message, results) {\r\n super(message);\r\n this.name = 'PromiseLogicError';\r\n this.type = type; // 'XOR_ERROR', 'NAND_ERROR', etc.\r\n this.results = results; // settlement results of all Promises\r\n }\r\n}\r\n\r\n// Error factory function\r\nexport function createLogicError(type, fulfilledCount, total, results) {\r\n const messages = {\r\n XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,\r\n NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,\r\n NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,\r\n MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`,\r\n ALL_SUCCESSFUL_ERROR: `All successful condition failed: ${fulfilledCount}/${total} promises fulfilled (expected all to succeed).`,\r\n ALL_FAILED_ERROR: `All failed condition failed: ${total - fulfilledCount}/${total} promises rejected (expected all to fail).`\r\n };\r\n \r\n return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);\r\n}","import { createLogicError } from './utils/errors.js';\r\n\r\nexport class PromiseLogic {\r\n static and(iterable) {\r\n return Promise.all(iterable);\r\n }\r\n\r\n static or(iterable) {\r\n return Promise.any(iterable);\r\n }\r\n\r\n static race(iterable) {\r\n return Promise.race(iterable);\r\n }\r\n\r\n static allSettled(iterable) {\r\n return Promise.allSettled(iterable);\r\n }\r\n\r\n static xor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 1) {\r\n // 恰好一个成功,返回成功的值\r\n return fulfilled[0].value;\r\n } else {\r\n // 0个或多个(>1)成功,抛出XOR_ERROR\r\n throw createLogicError('XOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static nand(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === total) {\r\n // 全部成功,抛出NAND_ERROR\r\n throw createLogicError('NAND_ERROR', fulfilledCount, total, results);\r\n } else {\r\n // 不是所有都成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n }\r\n });\r\n }\r\n\r\n static nor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0) {\r\n // 全部失败,返回空数组表示成功\r\n return [];\r\n } else {\r\n // 任意成功,抛出NOR_ERROR\r\n throw createLogicError('NOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static xnor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0 || fulfilledCount === total) {\r\n // 全部成功或全部失败,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 部分成功部分失败,抛出XNOR_ERROR\r\n throw createLogicError('XNOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static majority(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n // 多数逻辑:成功数 > 失败数\r\n if (fulfilledCount > total - fulfilledCount) {\r\n // 超过半数成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 未达到多数,抛出MAJORITY_ERROR\r\n throw createLogicError('MAJORITY_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n // 返回所有成功的Promise结果\r\n static allFulfilled(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n return fulfilled.map(result => result.value);\r\n });\r\n }\r\n\r\n // 返回所有失败的Promise结果\r\n static allRejected(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const rejected = results.filter(result => result.status === 'rejected');\r\n return rejected.map(result => result.reason);\r\n });\r\n }\r\n static createFlipFlop(initialState = false) {\r\n let state = initialState;\r\n let resolveCurrent = null;\r\n let currentPromise = Promise.resolve(state);\r\n \r\n return {\r\n // 获取当前状态\r\n getState() {\r\n return state;\r\n },\r\n \r\n // 异步设置状态\r\n set(newState) {\r\n state = newState;\r\n if (resolveCurrent) {\r\n resolveCurrent(state);\r\n resolveCurrent = null;\r\n }\r\n currentPromise = Promise.resolve(state);\r\n return this;\r\n },\r\n \r\n // 切换状态\r\n toggle() {\r\n return this.set(!state);\r\n },\r\n \r\n // 等待状态变化\r\n waitForChange() {\r\n if (!resolveCurrent) {\r\n currentPromise = new Promise((resolve) => {\r\n resolveCurrent = resolve;\r\n });\r\n }\r\n return currentPromise;\r\n },\r\n \r\n // 等待特定状态\r\n waitFor(targetState) {\r\n if (state === targetState) {\r\n return Promise.resolve(state);\r\n }\r\n return new Promise((resolve) => {\r\n const checkState = () => {\r\n if (state === targetState) {\r\n resolve(state);\r\n } else {\r\n this.waitForChange().then(checkState);\r\n }\r\n };\r\n checkState();\r\n });\r\n }\r\n };\r\n }\r\n}","import { PromiseLogic } from './PromiseLogic.js';\n\nexport function createPromiseLogic(options = {}) {\n const { prefix = '', suffix = '', rename = {} } = options;\n \n // 基础方法映射\n const methods = {\n and: PromiseLogic.and,\n or: PromiseLogic.or,\n race: PromiseLogic.race,\n allSettled: PromiseLogic.allSettled,\n xor: PromiseLogic.xor,\n nand: PromiseLogic.nand,\n nor: PromiseLogic.nor,\n xnor: PromiseLogic.xnor,\n majority: PromiseLogic.majority\n };\n \n // 应用命名转换\n const result = {};\n Object.entries(methods).forEach(([key, fn]) => {\n // 优先使用rename映射,然后应用prefix和suffix\n const baseName = rename[key] || key;\n const finalName = `${prefix}${baseName}${suffix}`;\n result[finalName] = fn;\n });\n \n return result;\n}"],"names":[],"mappings":"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"}
package/dist/index.esm.js CHANGED
@@ -13,7 +13,9 @@ function createLogicError(type, fulfilledCount, total, results) {
13
13
  XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,
14
14
  NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,
15
15
  NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,
16
- MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`
16
+ MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`,
17
+ ALL_SUCCESSFUL_ERROR: `All successful condition failed: ${fulfilledCount}/${total} promises fulfilled (expected all to succeed).`,
18
+ ALL_FAILED_ERROR: `All failed condition failed: ${total - fulfilledCount}/${total} promises rejected (expected all to fail).`
17
19
  };
18
20
 
19
21
  return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);
@@ -117,6 +119,21 @@ class PromiseLogic {
117
119
  });
118
120
  }
119
121
 
122
+ // 返回所有成功的Promise结果
123
+ static allFulfilled(iterable) {
124
+ return Promise.allSettled(iterable).then((results) => {
125
+ const fulfilled = results.filter(result => result.status === 'fulfilled');
126
+ return fulfilled.map(result => result.value);
127
+ });
128
+ }
129
+
130
+ // 返回所有失败的Promise结果
131
+ static allRejected(iterable) {
132
+ return Promise.allSettled(iterable).then((results) => {
133
+ const rejected = results.filter(result => result.status === 'rejected');
134
+ return rejected.map(result => result.reason);
135
+ });
136
+ }
120
137
  static createFlipFlop(initialState = false) {
121
138
  let state = initialState;
122
139
  let resolveCurrent = null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/utils/errors.js","../src/PromiseLogic.js","../src/factory.js"],"sourcesContent":["export class PromiseLogicError extends Error {\r\n constructor(type, message, results) {\r\n super(message);\r\n this.name = 'PromiseLogicError';\r\n this.type = type; // 'XOR_ERROR', 'NAND_ERROR', etc.\r\n this.results = results; // settlement results of all Promises\r\n }\r\n}\r\n\r\n// Error factory function\r\nexport function createLogicError(type, fulfilledCount, total, results) {\r\n const messages = {\r\n XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,\r\n NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,\r\n NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,\r\n MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`\r\n };\r\n \r\n return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);\r\n}","import { createLogicError } from './utils/errors.js';\r\n\r\nexport class PromiseLogic {\r\n static and(iterable) {\r\n return Promise.all(iterable);\r\n }\r\n\r\n static or(iterable) {\r\n return Promise.any(iterable);\r\n }\r\n\r\n static race(iterable) {\r\n return Promise.race(iterable);\r\n }\r\n\r\n static allSettled(iterable) {\r\n return Promise.allSettled(iterable);\r\n }\r\n\r\n static xor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 1) {\r\n // 恰好一个成功,返回成功的值\r\n return fulfilled[0].value;\r\n } else {\r\n // 0个或多个(>1)成功,抛出XOR_ERROR\r\n throw createLogicError('XOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static nand(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === total) {\r\n // 全部成功,抛出NAND_ERROR\r\n throw createLogicError('NAND_ERROR', fulfilledCount, total, results);\r\n } else {\r\n // 不是所有都成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n }\r\n });\r\n }\r\n\r\n static nor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0) {\r\n // 全部失败,返回空数组表示成功\r\n return [];\r\n } else {\r\n // 任意成功,抛出NOR_ERROR\r\n throw createLogicError('NOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static xnor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0 || fulfilledCount === total) {\r\n // 全部成功或全部失败,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 部分成功部分失败,抛出XNOR_ERROR\r\n throw createLogicError('XNOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static majority(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n // 多数逻辑:成功数 > 失败数\r\n if (fulfilledCount > total - fulfilledCount) {\r\n // 超过半数成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 未达到多数,抛出MAJORITY_ERROR\r\n throw createLogicError('MAJORITY_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static createFlipFlop(initialState = false) {\r\n let state = initialState;\r\n let resolveCurrent = null;\r\n let currentPromise = Promise.resolve(state);\r\n \r\n return {\r\n // 获取当前状态\r\n getState() {\r\n return state;\r\n },\r\n \r\n // 异步设置状态\r\n set(newState) {\r\n state = newState;\r\n if (resolveCurrent) {\r\n resolveCurrent(state);\r\n resolveCurrent = null;\r\n }\r\n currentPromise = Promise.resolve(state);\r\n return this;\r\n },\r\n \r\n // 切换状态\r\n toggle() {\r\n return this.set(!state);\r\n },\r\n \r\n // 等待状态变化\r\n waitForChange() {\r\n if (!resolveCurrent) {\r\n currentPromise = new Promise((resolve) => {\r\n resolveCurrent = resolve;\r\n });\r\n }\r\n return currentPromise;\r\n },\r\n \r\n // 等待特定状态\r\n waitFor(targetState) {\r\n if (state === targetState) {\r\n return Promise.resolve(state);\r\n }\r\n return new Promise((resolve) => {\r\n const checkState = () => {\r\n if (state === targetState) {\r\n resolve(state);\r\n } else {\r\n this.waitForChange().then(checkState);\r\n }\r\n };\r\n checkState();\r\n });\r\n }\r\n };\r\n }\r\n}","import { PromiseLogic } from './PromiseLogic.js';\n\nexport function createPromiseLogic(options = {}) {\n const { prefix = '', suffix = '', rename = {} } = options;\n \n // 基础方法映射\n const methods = {\n and: PromiseLogic.and,\n or: PromiseLogic.or,\n race: PromiseLogic.race,\n allSettled: PromiseLogic.allSettled,\n xor: PromiseLogic.xor,\n nand: PromiseLogic.nand,\n nor: PromiseLogic.nor,\n xnor: PromiseLogic.xnor,\n majority: PromiseLogic.majority\n };\n \n // 应用命名转换\n const result = {};\n Object.entries(methods).forEach(([key, fn]) => {\n // 优先使用rename映射,然后应用prefix和suffix\n const baseName = rename[key] || key;\n const finalName = `${prefix}${baseName}${suffix}`;\n result[finalName] = fn;\n });\n \n return result;\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/utils/errors.js","../src/PromiseLogic.js","../src/factory.js"],"sourcesContent":["export class PromiseLogicError extends Error {\r\n constructor(type, message, results) {\r\n super(message);\r\n this.name = 'PromiseLogicError';\r\n this.type = type; // 'XOR_ERROR', 'NAND_ERROR', etc.\r\n this.results = results; // settlement results of all Promises\r\n }\r\n}\r\n\r\n// Error factory function\r\nexport function createLogicError(type, fulfilledCount, total, results) {\r\n const messages = {\r\n XOR_ERROR: `XOR condition failed: expected exactly 1 promise to fulfill, but ${fulfilledCount} fulfilled.`,\r\n NAND_ERROR: `NAND condition failed: all ${total} promises fulfilled (expected at least one rejection).`,\r\n NOR_ERROR: `NOR condition failed: ${fulfilledCount} promises fulfilled (expected all rejected).`,\r\n MAJORITY_ERROR: `Majority condition failed: ${fulfilledCount}/${total} fulfilled (need majority).`,\r\n ALL_SUCCESSFUL_ERROR: `All successful condition failed: ${fulfilledCount}/${total} promises fulfilled (expected all to succeed).`,\r\n ALL_FAILED_ERROR: `All failed condition failed: ${total - fulfilledCount}/${total} promises rejected (expected all to fail).`\r\n };\r\n \r\n return new PromiseLogicError(type, messages[type] || 'Logic condition failed', results);\r\n}","import { createLogicError } from './utils/errors.js';\r\n\r\nexport class PromiseLogic {\r\n static and(iterable) {\r\n return Promise.all(iterable);\r\n }\r\n\r\n static or(iterable) {\r\n return Promise.any(iterable);\r\n }\r\n\r\n static race(iterable) {\r\n return Promise.race(iterable);\r\n }\r\n\r\n static allSettled(iterable) {\r\n return Promise.allSettled(iterable);\r\n }\r\n\r\n static xor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 1) {\r\n // 恰好一个成功,返回成功的值\r\n return fulfilled[0].value;\r\n } else {\r\n // 0个或多个(>1)成功,抛出XOR_ERROR\r\n throw createLogicError('XOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static nand(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === total) {\r\n // 全部成功,抛出NAND_ERROR\r\n throw createLogicError('NAND_ERROR', fulfilledCount, total, results);\r\n } else {\r\n // 不是所有都成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n }\r\n });\r\n }\r\n\r\n static nor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0) {\r\n // 全部失败,返回空数组表示成功\r\n return [];\r\n } else {\r\n // 任意成功,抛出NOR_ERROR\r\n throw createLogicError('NOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static xnor(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n if (fulfilledCount === 0 || fulfilledCount === total) {\r\n // 全部成功或全部失败,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 部分成功部分失败,抛出XNOR_ERROR\r\n throw createLogicError('XNOR_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n static majority(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n const fulfilledCount = fulfilled.length;\r\n const total = results.length;\r\n \r\n // 多数逻辑:成功数 > 失败数\r\n if (fulfilledCount > total - fulfilledCount) {\r\n // 超过半数成功,返回成功的值数组\r\n return fulfilled.map(result => result.value);\r\n } else {\r\n // 未达到多数,抛出MAJORITY_ERROR\r\n throw createLogicError('MAJORITY_ERROR', fulfilledCount, total, results);\r\n }\r\n });\r\n }\r\n\r\n // 返回所有成功的Promise结果\r\n static allFulfilled(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const fulfilled = results.filter(result => result.status === 'fulfilled');\r\n return fulfilled.map(result => result.value);\r\n });\r\n }\r\n\r\n // 返回所有失败的Promise结果\r\n static allRejected(iterable) {\r\n return Promise.allSettled(iterable).then((results) => {\r\n const rejected = results.filter(result => result.status === 'rejected');\r\n return rejected.map(result => result.reason);\r\n });\r\n }\r\n static createFlipFlop(initialState = false) {\r\n let state = initialState;\r\n let resolveCurrent = null;\r\n let currentPromise = Promise.resolve(state);\r\n \r\n return {\r\n // 获取当前状态\r\n getState() {\r\n return state;\r\n },\r\n \r\n // 异步设置状态\r\n set(newState) {\r\n state = newState;\r\n if (resolveCurrent) {\r\n resolveCurrent(state);\r\n resolveCurrent = null;\r\n }\r\n currentPromise = Promise.resolve(state);\r\n return this;\r\n },\r\n \r\n // 切换状态\r\n toggle() {\r\n return this.set(!state);\r\n },\r\n \r\n // 等待状态变化\r\n waitForChange() {\r\n if (!resolveCurrent) {\r\n currentPromise = new Promise((resolve) => {\r\n resolveCurrent = resolve;\r\n });\r\n }\r\n return currentPromise;\r\n },\r\n \r\n // 等待特定状态\r\n waitFor(targetState) {\r\n if (state === targetState) {\r\n return Promise.resolve(state);\r\n }\r\n return new Promise((resolve) => {\r\n const checkState = () => {\r\n if (state === targetState) {\r\n resolve(state);\r\n } else {\r\n this.waitForChange().then(checkState);\r\n }\r\n };\r\n checkState();\r\n });\r\n }\r\n };\r\n }\r\n}","import { PromiseLogic } from './PromiseLogic.js';\n\nexport function createPromiseLogic(options = {}) {\n const { prefix = '', suffix = '', rename = {} } = options;\n \n // 基础方法映射\n const methods = {\n and: PromiseLogic.and,\n or: PromiseLogic.or,\n race: PromiseLogic.race,\n allSettled: PromiseLogic.allSettled,\n xor: PromiseLogic.xor,\n nand: PromiseLogic.nand,\n nor: PromiseLogic.nor,\n xnor: PromiseLogic.xnor,\n majority: PromiseLogic.majority\n };\n \n // 应用命名转换\n const result = {};\n Object.entries(methods).forEach(([key, fn]) => {\n // 优先使用rename映射,然后应用prefix和suffix\n const baseName = rename[key] || key;\n const finalName = `${prefix}${baseName}${suffix}`;\n result[finalName] = fn;\n });\n \n return result;\n}"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  declare class PromiseLogicError extends Error {
2
- type: 'XOR_ERROR' | 'NAND_ERROR' | 'NOR_ERROR' | 'XNOR_ERROR' | 'MAJORITY_ERROR';
2
+ type: 'XOR_ERROR' | 'NAND_ERROR' | 'NOR_ERROR' | 'XNOR_ERROR' | 'MAJORITY_ERROR' | 'ALL_SUCCESSFUL_ERROR' | 'ALL_FAILED_ERROR';
3
3
  results: PromiseSettledResult<unknown>[];
4
4
  constructor(type: string, message: string, results: PromiseSettledResult<unknown>[]);
5
5
  }
@@ -22,6 +22,10 @@ declare class PromiseLogic {
22
22
  static xnor<T>(iterable: Iterable<T | PromiseLike<T>>): Promise<T[]>;
23
23
  static majority<T>(iterable: Iterable<T | PromiseLike<T>>): Promise<T[]>;
24
24
 
25
+ // 返回所有成功或失败结果的方法
26
+ static allFulfilled<T>(iterable: Iterable<T | PromiseLike<T>>): Promise<T[]>;
27
+ static allRejected<T>(iterable: Iterable<T | PromiseLike<T>>): Promise<any[]>;
28
+
25
29
  static createFlipFlop(initialState?: boolean): FlipFlop;
26
30
  }
27
31
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "promise-logic",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Compose promises with logic gate semantics (AND, OR, XOR, NAND, NOR, XNOR, Majority). Forget APIs, remember logic.",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",