@stackflow/core
Advanced tools
+1
-230
@@ -1,231 +0,2 @@ | ||
| var __create = Object.create; | ||
| var __defProp = Object.defineProperty; | ||
| var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
| var __getOwnPropNames = Object.getOwnPropertyNames; | ||
| var __getOwnPropSymbols = Object.getOwnPropertySymbols; | ||
| var __getProtoOf = Object.getPrototypeOf; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __propIsEnum = Object.prototype.propertyIsEnumerable; | ||
| var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; | ||
| var __spreadValues = (a, b) => { | ||
| for (var prop in b || (b = {})) | ||
| if (__hasOwnProp.call(b, prop)) | ||
| __defNormalProp(a, prop, b[prop]); | ||
| if (__getOwnPropSymbols) | ||
| for (var prop of __getOwnPropSymbols(b)) { | ||
| if (__propIsEnum.call(b, prop)) | ||
| __defNormalProp(a, prop, b[prop]); | ||
| } | ||
| return a; | ||
| }; | ||
| var __export = (target, all) => { | ||
| for (var name in all) | ||
| __defProp(target, name, { get: all[name], enumerable: true }); | ||
| }; | ||
| var __copyProps = (to, from, except, desc) => { | ||
| if (from && typeof from === "object" || typeof from === "function") { | ||
| for (let key of __getOwnPropNames(from)) | ||
| if (!__hasOwnProp.call(to, key) && key !== except) | ||
| __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
| } | ||
| return to; | ||
| }; | ||
| var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); | ||
| var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
| // src/index.ts | ||
| var src_exports = {}; | ||
| __export(src_exports, { | ||
| aggregate: () => aggregate, | ||
| id: () => id, | ||
| makeEvent: () => makeEvent, | ||
| produceEffects: () => produceEffects | ||
| }); | ||
| module.exports = __toCommonJS(src_exports); | ||
| // src/event-utils/filterEvents.ts | ||
| function filterEvents(events, eventName) { | ||
| return events.filter((e) => e.name === eventName); | ||
| } | ||
| // src/utils/compareBy.ts | ||
| function compareBy(a, b, selector) { | ||
| const $a = selector(a); | ||
| const $b = selector(b); | ||
| if ($a < $b) { | ||
| return -1; | ||
| } | ||
| if ($a === $b) { | ||
| return 0; | ||
| } | ||
| return 1; | ||
| } | ||
| // src/utils/id.ts | ||
| var counterMap = /* @__PURE__ */ new Map(); | ||
| function id() { | ||
| const t = new Date().getTime().toString(); | ||
| const prevCounter = counterMap.get(t); | ||
| const nextCounter = prevCounter !== void 0 ? prevCounter + 1 : 0; | ||
| if (nextCounter === 0) { | ||
| counterMap = /* @__PURE__ */ new Map(); | ||
| } | ||
| counterMap.set(t, nextCounter); | ||
| return Number(`${t}${nextCounter.toString().padStart(2, "0")}`).toString(16); | ||
| } | ||
| // src/utils/uniqBy.ts | ||
| function uniqBy(arr, by) { | ||
| const valueMap = /* @__PURE__ */ new Map(); | ||
| return [...arr].reverse().filter((item) => { | ||
| const key = by(item); | ||
| if (key === null) { | ||
| return true; | ||
| } | ||
| const exists = !!valueMap.get(key); | ||
| valueMap.set(key, true); | ||
| return !exists; | ||
| }).reverse(); | ||
| } | ||
| // src/event-utils/makeEvent.ts | ||
| function makeEvent(name, parameters) { | ||
| return __spreadValues({ | ||
| id: id(), | ||
| name, | ||
| eventDate: new Date().getTime() | ||
| }, parameters); | ||
| } | ||
| // src/event-utils/validateEvents.ts | ||
| function validateEvents(events) { | ||
| if (events.length === 0) { | ||
| throw new Error("events parameter is empty"); | ||
| } | ||
| const initEvents = filterEvents(events, "Initialized"); | ||
| const activityRegisteredEvents = filterEvents(events, "ActivityRegistered"); | ||
| const pushedEvents = filterEvents(events, "Pushed"); | ||
| if (initEvents.length > 1) { | ||
| throw new Error("InitializedEvent can only exist once"); | ||
| } | ||
| const registeredActivityNames = activityRegisteredEvents.map((e) => e.activityName); | ||
| pushedEvents.forEach((e) => { | ||
| if (!registeredActivityNames.includes(e.activityName)) { | ||
| throw new Error("the corresponding activity does not exist"); | ||
| } | ||
| }); | ||
| } | ||
| // src/aggregate.ts | ||
| function aggregate(events, now) { | ||
| const sortedEvents = uniqBy([...events].sort((a, b) => compareBy(a, b, (e) => e.id)), (e) => e.id); | ||
| validateEvents(sortedEvents); | ||
| const initEvent = filterEvents(sortedEvents, "Initialized")[0]; | ||
| const { transitionDuration } = initEvent; | ||
| const activities = []; | ||
| sortedEvents.forEach((event) => { | ||
| switch (event.name) { | ||
| case "Pushed": { | ||
| const transitionState = now - event.eventDate >= transitionDuration ? "enter-done" : "enter-active"; | ||
| activities.push({ | ||
| id: event.activityId, | ||
| name: event.activityName, | ||
| transitionState, | ||
| params: event.params, | ||
| pushedBy: event, | ||
| metadata: { | ||
| poppedBy: null | ||
| } | ||
| }); | ||
| break; | ||
| } | ||
| case "Replaced": { | ||
| const transitionState = now - event.eventDate >= transitionDuration ? "enter-done" : "enter-active"; | ||
| const targetActivity = activities.filter((activity) => activity.metadata.poppedBy === null).sort((a1, a2) => a2.pushedBy.eventDate - a1.pushedBy.eventDate)[0]; | ||
| activities.push({ | ||
| id: event.activityId, | ||
| name: event.activityName, | ||
| transitionState, | ||
| params: event.params, | ||
| pushedBy: event, | ||
| metadata: { | ||
| poppedBy: null | ||
| } | ||
| }); | ||
| if (targetActivity && transitionState === "enter-done") { | ||
| targetActivity.metadata.poppedBy = event; | ||
| targetActivity.transitionState = "exit-done"; | ||
| } | ||
| break; | ||
| } | ||
| case "Popped": { | ||
| const targetActivity = activities.filter((_, i) => i > 0).filter((activity) => activity.metadata.poppedBy === null).sort((a1, a2) => a2.pushedBy.eventDate - a1.pushedBy.eventDate)[0]; | ||
| const transitionState = now - event.eventDate >= transitionDuration ? "exit-done" : "exit-active"; | ||
| if (targetActivity) { | ||
| targetActivity.metadata.poppedBy = event; | ||
| targetActivity.transitionState = transitionState; | ||
| } | ||
| break; | ||
| } | ||
| default: { | ||
| break; | ||
| } | ||
| } | ||
| }); | ||
| const globalTransitionState = activities.find((activity) => activity.transitionState === "enter-active" || activity.transitionState === "exit-active") ? "loading" : "idle"; | ||
| const output = { | ||
| activities: uniqBy(activities.map((activity) => ({ | ||
| id: activity.id, | ||
| name: activity.name, | ||
| transitionState: activity.transitionState, | ||
| params: activity.params, | ||
| pushedBy: activity.pushedBy | ||
| })), (activity) => activity.id).sort((a, b) => compareBy(a, b, (activity) => activity.id)), | ||
| transitionDuration, | ||
| globalTransitionState | ||
| }; | ||
| return output; | ||
| } | ||
| // src/produceEffects.ts | ||
| var import_react_fast_compare = __toESM(require("react-fast-compare")); | ||
| function produceEffects(prevOutput, nextOutput) { | ||
| const output = []; | ||
| if (!(0, import_react_fast_compare.default)(prevOutput, nextOutput)) { | ||
| output.push({ | ||
| _TAG: "%SOMETHING_CHANGED%" | ||
| }); | ||
| } | ||
| for (let i = 0; i < Math.max(prevOutput.activities.length, nextOutput.activities.length); i += 1) { | ||
| const prevActivity = prevOutput.activities[i]; | ||
| const nextActivity = nextOutput.activities[i]; | ||
| if (!prevActivity && !!nextActivity) { | ||
| output.push({ | ||
| _TAG: nextActivity.pushedBy.name === "Pushed" ? "PUSHED" : "REPLACED", | ||
| activity: nextActivity | ||
| }); | ||
| } | ||
| const isPrevActivityPopped = (prevActivity == null ? void 0 : prevActivity.transitionState) === "exit-done" || (prevActivity == null ? void 0 : prevActivity.transitionState) === "exit-active"; | ||
| const isNextActivityPushed = (nextActivity == null ? void 0 : nextActivity.transitionState) === "enter-active" || (nextActivity == null ? void 0 : nextActivity.transitionState) === "enter-done"; | ||
| if (isPrevActivityPopped && isNextActivityPushed) { | ||
| output.push({ | ||
| _TAG: nextActivity.pushedBy.name === "Pushed" ? "PUSHED" : "REPLACED", | ||
| activity: nextActivity | ||
| }); | ||
| } | ||
| } | ||
| for (let j = Math.max(prevOutput.activities.length, nextOutput.activities.length) - 1; j >= 0; j -= 1) { | ||
| const prevActivity = prevOutput.activities[j]; | ||
| const nextActivity = nextOutput.activities[j]; | ||
| const isPrevActivityPushed = (prevActivity == null ? void 0 : prevActivity.transitionState) === "enter-done" || (prevActivity == null ? void 0 : prevActivity.transitionState) === "enter-active"; | ||
| const isNextActivityPopped = (nextActivity == null ? void 0 : nextActivity.transitionState) === "exit-active" || (nextActivity == null ? void 0 : nextActivity.transitionState) === "exit-done"; | ||
| if (isPrevActivityPushed && isNextActivityPopped) { | ||
| output.push({ | ||
| _TAG: "POPPED", | ||
| activity: nextActivity | ||
| }); | ||
| } | ||
| } | ||
| return output; | ||
| } | ||
| var M=Object.create;var u=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols,I=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable;var h=(t,e,i)=>e in t?u(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i,S=(t,e)=>{for(var i in e||(e={}))D.call(e,i)&&h(t,i,e[i]);if(y)for(var i of y(e))k.call(e,i)&&h(t,i,e[i]);return t};var G=(t,e)=>{for(var i in e)u(t,i,{get:e[i],enumerable:!0})},T=(t,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of b(e))!D.call(t,n)&&n!==i&&u(t,n,{get:()=>e[n],enumerable:!(o=N(e,n))||o.enumerable});return t};var _=(t,e,i)=>(i=t!=null?M(I(t)):{},T(e||!t||!t.__esModule?u(i,"default",{value:t,enumerable:!0}):i,t)),z=t=>T(u({},"__esModule",{value:!0}),t);var C={};G(C,{aggregate:()=>B,id:()=>E,makeEvent:()=>P,produceEffects:()=>w});module.exports=z(C);function c(t,e){return t.filter(i=>i.name===e)}function g(t,e,i){let o=i(t),n=i(e);return o<n?-1:o===n?0:1}var l=new Map;function E(){let t=new Date().getTime().toString(),e=l.get(t),i=e!==void 0?e+1:0;return i===0&&(l=new Map),l.set(t,i),Number(`${t}${i.toString().padStart(2,"0")}`).toString(16)}function x(t,e){let i=new Map;return[...t].reverse().filter(o=>{let n=e(o);if(n===null)return!0;let a=!!i.get(n);return i.set(n,!0),!a}).reverse()}function P(t,e){return S({id:E(),name:t,eventDate:new Date().getTime()},e)}function A(t){if(t.length===0)throw new Error("events parameter is empty");let e=c(t,"Initialized"),i=c(t,"ActivityRegistered"),o=c(t,"Pushed");if(e.length>1)throw new Error("InitializedEvent can only exist once");let n=i.map(a=>a.activityName);o.forEach(a=>{if(!n.includes(a.activityName))throw new Error("the corresponding activity does not exist")})}function B(t,e){let i=x([...t].sort((r,s)=>g(r,s,m=>m.id)),r=>r.id);A(i);let o=c(i,"Initialized")[0],{transitionDuration:n}=o,a=[];i.forEach(r=>{switch(r.name){case"Pushed":{let s=e-r.eventDate>=n?"enter-done":"enter-active";a.push({id:r.activityId,name:r.activityName,transitionState:s,params:r.params,pushedBy:r,metadata:{poppedBy:null}});break}case"Replaced":{let s=e-r.eventDate>=n?"enter-done":"enter-active",m=a.filter(p=>p.metadata.poppedBy===null).sort((p,f)=>f.pushedBy.eventDate-p.pushedBy.eventDate)[0];a.push({id:r.activityId,name:r.activityName,transitionState:s,params:r.params,pushedBy:r,metadata:{poppedBy:null}}),m&&s==="enter-done"&&(m.metadata.poppedBy=r,m.transitionState="exit-done");break}case"Popped":{let s=a.filter((p,f)=>f>0).filter(p=>p.metadata.poppedBy===null).sort((p,f)=>f.pushedBy.eventDate-p.pushedBy.eventDate)[0],m=e-r.eventDate>=n?"exit-done":"exit-active";s&&(s.metadata.poppedBy=r,s.transitionState=m);break}default:break}});let d=a.find(r=>r.transitionState==="enter-active"||r.transitionState==="exit-active")?"loading":"idle";return{activities:x(a.map(r=>({id:r.id,name:r.name,transitionState:r.transitionState,params:r.params,pushedBy:r.pushedBy})),r=>r.id).sort((r,s)=>g(r,s,m=>m.id)),transitionDuration:n,globalTransitionState:d}}var R=_(require("react-fast-compare"));function w(t,e){let i=[];(0,R.default)(t,e)||i.push({_TAG:"%SOMETHING_CHANGED%"});for(let o=0;o<Math.max(t.activities.length,e.activities.length);o+=1){let n=t.activities[o],a=e.activities[o];!n&&!!a&&i.push({_TAG:a.pushedBy.name==="Pushed"?"PUSHED":"REPLACED",activity:a});let d=(n==null?void 0:n.transitionState)==="exit-done"||(n==null?void 0:n.transitionState)==="exit-active",v=(a==null?void 0:a.transitionState)==="enter-active"||(a==null?void 0:a.transitionState)==="enter-done";d&&v&&i.push({_TAG:a.pushedBy.name==="Pushed"?"PUSHED":"REPLACED",activity:a})}for(let o=Math.max(t.activities.length,e.activities.length)-1;o>=0;o-=1){let n=t.activities[o],a=e.activities[o],d=(n==null?void 0:n.transitionState)==="enter-done"||(n==null?void 0:n.transitionState)==="enter-active",v=(a==null?void 0:a.transitionState)==="exit-active"||(a==null?void 0:a.transitionState)==="exit-done";d&&v&&i.push({_TAG:"POPPED",activity:a})}return i} | ||
| //# sourceMappingURL=index.js.map |
@@ -5,4 +5,4 @@ { | ||
| "sourcesContent": ["export { aggregate } from \"./aggregate\";\nexport {\n Activity,\n ActivityParams,\n ActivityTransitionState,\n AggregateOutput,\n} from \"./AggregateOutput\";\nexport { Effect } from \"./Effect\";\nexport { DomainEvent } from \"./event-types\";\nexport { DispatchEvent, makeEvent } from \"./event-utils\";\nexport * from \"./plugin-types\";\nexport { produceEffects } from \"./produceEffects\";\nexport { id } from \"./utils\";\n", "import { DomainEvent } from \"../event-types\";\n\nexport function filterEvents<T extends DomainEvent[\"name\"]>(\n events: DomainEvent[],\n eventName: T,\n) {\n return events.filter((e) => e.name === eventName) as Array<\n Extract<DomainEvent, { name: T }>\n >;\n}\n", "export function compareBy<T>(a: T, b: T, selector: (element: T) => string) {\n const $a = selector(a);\n const $b = selector(b);\n\n if ($a < $b) {\n return -1;\n }\n if ($a === $b) {\n return 0;\n }\n return 1;\n}\n", "let counterMap = new Map<string, number>();\n\nexport function id() {\n const t = new Date().getTime().toString();\n\n const prevCounter = counterMap.get(t);\n const nextCounter = prevCounter !== undefined ? prevCounter + 1 : 0;\n\n if (nextCounter === 0) {\n counterMap = new Map();\n }\n\n counterMap.set(t, nextCounter);\n\n return Number(`${t}${nextCounter.toString().padStart(2, \"0\")}`).toString(16);\n}\n", "export function uniqBy<T>(arr: T[], by: (item: T) => string | null): T[] {\n const valueMap = new Map<string, true>();\n\n return [...arr]\n .reverse()\n .filter((item) => {\n const key = by(item);\n\n if (key === null) {\n return true;\n }\n\n const exists = !!valueMap.get(key);\n valueMap.set(key, true);\n\n return !exists;\n })\n .reverse();\n}\n", "import { DomainEvent } from \"../event-types\";\nimport { BaseDomainEvent } from \"../event-types/_base\";\nimport { id } from \"../utils\";\n\nexport function makeEvent<T extends DomainEvent[\"name\"]>(\n name: T,\n parameters: Omit<\n Extract<DomainEvent, { name: T }>,\n \"id\" | \"name\" | \"eventDate\"\n > &\n Partial<BaseDomainEvent>,\n) {\n return {\n id: id(),\n name,\n eventDate: new Date().getTime(),\n ...parameters,\n } as Extract<DomainEvent, { name: T }>;\n}\n", "import { DomainEvent } from \"../event-types\";\nimport { filterEvents } from \"./filterEvents\";\n\nexport function validateEvents(events: DomainEvent[]) {\n if (events.length === 0) {\n throw new Error(\"events parameter is empty\");\n }\n\n const initEvents = filterEvents(events, \"Initialized\");\n const activityRegisteredEvents = filterEvents(events, \"ActivityRegistered\");\n const pushedEvents = filterEvents(events, \"Pushed\");\n\n if (initEvents.length > 1) {\n throw new Error(\"InitializedEvent can only exist once\");\n }\n\n const registeredActivityNames = activityRegisteredEvents.map(\n (e) => e.activityName,\n );\n\n pushedEvents.forEach((e) => {\n if (!registeredActivityNames.includes(e.activityName)) {\n throw new Error(\"the corresponding activity does not exist\");\n }\n });\n}\n", "import {\n Activity,\n ActivityTransitionState,\n AggregateOutput,\n} from \"./AggregateOutput\";\nimport { DomainEvent, PoppedEvent, ReplacedEvent } from \"./event-types\";\nimport { filterEvents, validateEvents } from \"./event-utils\";\nimport { compareBy, uniqBy } from \"./utils\";\n\nexport function aggregate(events: DomainEvent[], now: number): AggregateOutput {\n const sortedEvents = uniqBy(\n [...events].sort((a, b) => compareBy(a, b, (e) => e.id)),\n (e) => e.id,\n );\n\n validateEvents(sortedEvents);\n\n const initEvent = filterEvents(sortedEvents, \"Initialized\")[0];\n const { transitionDuration } = initEvent;\n\n type ActivityMetadata = {\n poppedBy: PoppedEvent | ReplacedEvent | null;\n };\n\n const activities: Array<\n Activity & {\n metadata: ActivityMetadata;\n }\n > = [];\n\n sortedEvents.forEach((event) => {\n switch (event.name) {\n case \"Pushed\": {\n const transitionState: ActivityTransitionState =\n now - event.eventDate >= transitionDuration\n ? \"enter-done\"\n : \"enter-active\";\n\n activities.push({\n id: event.activityId,\n name: event.activityName,\n transitionState,\n params: event.params,\n pushedBy: event,\n metadata: {\n poppedBy: null,\n },\n });\n\n break;\n }\n case \"Replaced\": {\n const transitionState: ActivityTransitionState =\n now - event.eventDate >= transitionDuration\n ? \"enter-done\"\n : \"enter-active\";\n\n const targetActivity = activities\n .filter((activity) => activity.metadata.poppedBy === null)\n .sort((a1, a2) => a2.pushedBy.eventDate - a1.pushedBy.eventDate)[0];\n\n activities.push({\n id: event.activityId,\n name: event.activityName,\n transitionState,\n params: event.params,\n pushedBy: event,\n metadata: {\n poppedBy: null,\n },\n });\n\n if (targetActivity && transitionState === \"enter-done\") {\n targetActivity.metadata.poppedBy = event;\n targetActivity.transitionState = \"exit-done\";\n }\n\n break;\n }\n case \"Popped\": {\n const targetActivity = activities\n .filter((_, i) => i > 0)\n .filter((activity) => activity.metadata.poppedBy === null)\n .sort((a1, a2) => a2.pushedBy.eventDate - a1.pushedBy.eventDate)[0];\n\n const transitionState: ActivityTransitionState =\n now - event.eventDate >= transitionDuration\n ? \"exit-done\"\n : \"exit-active\";\n\n if (targetActivity) {\n targetActivity.metadata.poppedBy = event;\n targetActivity.transitionState = transitionState;\n }\n\n break;\n }\n default: {\n break;\n }\n }\n });\n\n const globalTransitionState = activities.find(\n (activity) =>\n activity.transitionState === \"enter-active\" ||\n activity.transitionState === \"exit-active\",\n )\n ? \"loading\"\n : \"idle\";\n\n const output: AggregateOutput = {\n activities: uniqBy(\n activities.map((activity) => ({\n id: activity.id,\n name: activity.name,\n transitionState: activity.transitionState,\n params: activity.params,\n pushedBy: activity.pushedBy,\n })),\n (activity) => activity.id,\n ).sort((a, b) => compareBy(a, b, (activity) => activity.id)),\n transitionDuration,\n globalTransitionState,\n };\n\n return output;\n}\n", "import isEqual from \"react-fast-compare\";\n\nimport { AggregateOutput } from \"./AggregateOutput\";\nimport { Effect } from \"./Effect\";\n\nexport function produceEffects(\n prevOutput: AggregateOutput,\n nextOutput: AggregateOutput,\n): Effect[] {\n const output: Effect[] = [];\n\n if (!isEqual(prevOutput, nextOutput)) {\n output.push({\n _TAG: \"%SOMETHING_CHANGED%\",\n });\n }\n\n for (\n let i = 0;\n i < Math.max(prevOutput.activities.length, nextOutput.activities.length);\n i += 1\n ) {\n const prevActivity = prevOutput.activities[i];\n const nextActivity = nextOutput.activities[i];\n\n if (!prevActivity && !!nextActivity) {\n output.push({\n _TAG: nextActivity.pushedBy.name === \"Pushed\" ? \"PUSHED\" : \"REPLACED\",\n activity: nextActivity,\n });\n }\n\n const isPrevActivityPopped =\n prevActivity?.transitionState === \"exit-done\" ||\n prevActivity?.transitionState === \"exit-active\";\n const isNextActivityPushed =\n nextActivity?.transitionState === \"enter-active\" ||\n nextActivity?.transitionState === \"enter-done\";\n\n if (isPrevActivityPopped && isNextActivityPushed) {\n output.push({\n _TAG: nextActivity.pushedBy.name === \"Pushed\" ? \"PUSHED\" : \"REPLACED\",\n activity: nextActivity,\n });\n }\n }\n for (\n let j =\n Math.max(prevOutput.activities.length, nextOutput.activities.length) - 1;\n j >= 0;\n j -= 1\n ) {\n const prevActivity = prevOutput.activities[j];\n const nextActivity = nextOutput.activities[j];\n\n const isPrevActivityPushed =\n prevActivity?.transitionState === \"enter-done\" ||\n prevActivity?.transitionState === \"enter-active\";\n const isNextActivityPopped =\n nextActivity?.transitionState === \"exit-active\" ||\n nextActivity?.transitionState === \"exit-done\";\n\n if (isPrevActivityPushed && isNextActivityPopped) {\n output.push({\n _TAG: \"POPPED\",\n activity: nextActivity,\n });\n }\n }\n\n return output;\n}\n"], | ||
| "mappings": "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", | ||
| "mappings": "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", | ||
| "names": [] | ||
| } |
+1
-208
@@ -1,209 +0,2 @@ | ||
| var __defProp = Object.defineProperty; | ||
| var __getOwnPropSymbols = Object.getOwnPropertySymbols; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __propIsEnum = Object.prototype.propertyIsEnumerable; | ||
| var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; | ||
| var __spreadValues = (a, b) => { | ||
| for (var prop in b || (b = {})) | ||
| if (__hasOwnProp.call(b, prop)) | ||
| __defNormalProp(a, prop, b[prop]); | ||
| if (__getOwnPropSymbols) | ||
| for (var prop of __getOwnPropSymbols(b)) { | ||
| if (__propIsEnum.call(b, prop)) | ||
| __defNormalProp(a, prop, b[prop]); | ||
| } | ||
| return a; | ||
| }; | ||
| // src/event-utils/filterEvents.ts | ||
| function filterEvents(events, eventName) { | ||
| return events.filter((e) => e.name === eventName); | ||
| } | ||
| // src/utils/compareBy.ts | ||
| function compareBy(a, b, selector) { | ||
| const $a = selector(a); | ||
| const $b = selector(b); | ||
| if ($a < $b) { | ||
| return -1; | ||
| } | ||
| if ($a === $b) { | ||
| return 0; | ||
| } | ||
| return 1; | ||
| } | ||
| // src/utils/id.ts | ||
| var counterMap = /* @__PURE__ */ new Map(); | ||
| function id() { | ||
| const t = new Date().getTime().toString(); | ||
| const prevCounter = counterMap.get(t); | ||
| const nextCounter = prevCounter !== void 0 ? prevCounter + 1 : 0; | ||
| if (nextCounter === 0) { | ||
| counterMap = /* @__PURE__ */ new Map(); | ||
| } | ||
| counterMap.set(t, nextCounter); | ||
| return Number(`${t}${nextCounter.toString().padStart(2, "0")}`).toString(16); | ||
| } | ||
| // src/utils/uniqBy.ts | ||
| function uniqBy(arr, by) { | ||
| const valueMap = /* @__PURE__ */ new Map(); | ||
| return [...arr].reverse().filter((item) => { | ||
| const key = by(item); | ||
| if (key === null) { | ||
| return true; | ||
| } | ||
| const exists = !!valueMap.get(key); | ||
| valueMap.set(key, true); | ||
| return !exists; | ||
| }).reverse(); | ||
| } | ||
| // src/event-utils/makeEvent.ts | ||
| function makeEvent(name, parameters) { | ||
| return __spreadValues({ | ||
| id: id(), | ||
| name, | ||
| eventDate: new Date().getTime() | ||
| }, parameters); | ||
| } | ||
| // src/event-utils/validateEvents.ts | ||
| function validateEvents(events) { | ||
| if (events.length === 0) { | ||
| throw new Error("events parameter is empty"); | ||
| } | ||
| const initEvents = filterEvents(events, "Initialized"); | ||
| const activityRegisteredEvents = filterEvents(events, "ActivityRegistered"); | ||
| const pushedEvents = filterEvents(events, "Pushed"); | ||
| if (initEvents.length > 1) { | ||
| throw new Error("InitializedEvent can only exist once"); | ||
| } | ||
| const registeredActivityNames = activityRegisteredEvents.map((e) => e.activityName); | ||
| pushedEvents.forEach((e) => { | ||
| if (!registeredActivityNames.includes(e.activityName)) { | ||
| throw new Error("the corresponding activity does not exist"); | ||
| } | ||
| }); | ||
| } | ||
| // src/aggregate.ts | ||
| function aggregate(events, now) { | ||
| const sortedEvents = uniqBy([...events].sort((a, b) => compareBy(a, b, (e) => e.id)), (e) => e.id); | ||
| validateEvents(sortedEvents); | ||
| const initEvent = filterEvents(sortedEvents, "Initialized")[0]; | ||
| const { transitionDuration } = initEvent; | ||
| const activities = []; | ||
| sortedEvents.forEach((event) => { | ||
| switch (event.name) { | ||
| case "Pushed": { | ||
| const transitionState = now - event.eventDate >= transitionDuration ? "enter-done" : "enter-active"; | ||
| activities.push({ | ||
| id: event.activityId, | ||
| name: event.activityName, | ||
| transitionState, | ||
| params: event.params, | ||
| pushedBy: event, | ||
| metadata: { | ||
| poppedBy: null | ||
| } | ||
| }); | ||
| break; | ||
| } | ||
| case "Replaced": { | ||
| const transitionState = now - event.eventDate >= transitionDuration ? "enter-done" : "enter-active"; | ||
| const targetActivity = activities.filter((activity) => activity.metadata.poppedBy === null).sort((a1, a2) => a2.pushedBy.eventDate - a1.pushedBy.eventDate)[0]; | ||
| activities.push({ | ||
| id: event.activityId, | ||
| name: event.activityName, | ||
| transitionState, | ||
| params: event.params, | ||
| pushedBy: event, | ||
| metadata: { | ||
| poppedBy: null | ||
| } | ||
| }); | ||
| if (targetActivity && transitionState === "enter-done") { | ||
| targetActivity.metadata.poppedBy = event; | ||
| targetActivity.transitionState = "exit-done"; | ||
| } | ||
| break; | ||
| } | ||
| case "Popped": { | ||
| const targetActivity = activities.filter((_, i) => i > 0).filter((activity) => activity.metadata.poppedBy === null).sort((a1, a2) => a2.pushedBy.eventDate - a1.pushedBy.eventDate)[0]; | ||
| const transitionState = now - event.eventDate >= transitionDuration ? "exit-done" : "exit-active"; | ||
| if (targetActivity) { | ||
| targetActivity.metadata.poppedBy = event; | ||
| targetActivity.transitionState = transitionState; | ||
| } | ||
| break; | ||
| } | ||
| default: { | ||
| break; | ||
| } | ||
| } | ||
| }); | ||
| const globalTransitionState = activities.find((activity) => activity.transitionState === "enter-active" || activity.transitionState === "exit-active") ? "loading" : "idle"; | ||
| const output = { | ||
| activities: uniqBy(activities.map((activity) => ({ | ||
| id: activity.id, | ||
| name: activity.name, | ||
| transitionState: activity.transitionState, | ||
| params: activity.params, | ||
| pushedBy: activity.pushedBy | ||
| })), (activity) => activity.id).sort((a, b) => compareBy(a, b, (activity) => activity.id)), | ||
| transitionDuration, | ||
| globalTransitionState | ||
| }; | ||
| return output; | ||
| } | ||
| // src/produceEffects.ts | ||
| import isEqual from "react-fast-compare"; | ||
| function produceEffects(prevOutput, nextOutput) { | ||
| const output = []; | ||
| if (!isEqual(prevOutput, nextOutput)) { | ||
| output.push({ | ||
| _TAG: "%SOMETHING_CHANGED%" | ||
| }); | ||
| } | ||
| for (let i = 0; i < Math.max(prevOutput.activities.length, nextOutput.activities.length); i += 1) { | ||
| const prevActivity = prevOutput.activities[i]; | ||
| const nextActivity = nextOutput.activities[i]; | ||
| if (!prevActivity && !!nextActivity) { | ||
| output.push({ | ||
| _TAG: nextActivity.pushedBy.name === "Pushed" ? "PUSHED" : "REPLACED", | ||
| activity: nextActivity | ||
| }); | ||
| } | ||
| const isPrevActivityPopped = (prevActivity == null ? void 0 : prevActivity.transitionState) === "exit-done" || (prevActivity == null ? void 0 : prevActivity.transitionState) === "exit-active"; | ||
| const isNextActivityPushed = (nextActivity == null ? void 0 : nextActivity.transitionState) === "enter-active" || (nextActivity == null ? void 0 : nextActivity.transitionState) === "enter-done"; | ||
| if (isPrevActivityPopped && isNextActivityPushed) { | ||
| output.push({ | ||
| _TAG: nextActivity.pushedBy.name === "Pushed" ? "PUSHED" : "REPLACED", | ||
| activity: nextActivity | ||
| }); | ||
| } | ||
| } | ||
| for (let j = Math.max(prevOutput.activities.length, nextOutput.activities.length) - 1; j >= 0; j -= 1) { | ||
| const prevActivity = prevOutput.activities[j]; | ||
| const nextActivity = nextOutput.activities[j]; | ||
| const isPrevActivityPushed = (prevActivity == null ? void 0 : prevActivity.transitionState) === "enter-done" || (prevActivity == null ? void 0 : prevActivity.transitionState) === "enter-active"; | ||
| const isNextActivityPopped = (nextActivity == null ? void 0 : nextActivity.transitionState) === "exit-active" || (nextActivity == null ? void 0 : nextActivity.transitionState) === "exit-done"; | ||
| if (isPrevActivityPushed && isNextActivityPopped) { | ||
| output.push({ | ||
| _TAG: "POPPED", | ||
| activity: nextActivity | ||
| }); | ||
| } | ||
| } | ||
| return output; | ||
| } | ||
| export { | ||
| aggregate, | ||
| id, | ||
| makeEvent, | ||
| produceEffects | ||
| }; | ||
| var S=Object.defineProperty;var x=Object.getOwnPropertySymbols;var T=Object.prototype.hasOwnProperty,P=Object.prototype.propertyIsEnumerable;var y=(i,e,t)=>e in i?S(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,h=(i,e)=>{for(var t in e||(e={}))T.call(e,t)&&y(i,t,e[t]);if(x)for(var t of x(e))P.call(e,t)&&y(i,t,e[t]);return i};function c(i,e){return i.filter(t=>t.name===e)}function v(i,e,t){let o=t(i),r=t(e);return o<r?-1:o===r?0:1}var E=new Map;function g(){let i=new Date().getTime().toString(),e=E.get(i),t=e!==void 0?e+1:0;return t===0&&(E=new Map),E.set(i,t),Number(`${i}${t.toString().padStart(2,"0")}`).toString(16)}function l(i,e){let t=new Map;return[...i].reverse().filter(o=>{let r=e(o);if(r===null)return!0;let n=!!t.get(r);return t.set(r,!0),!n}).reverse()}function A(i,e){return h({id:g(),name:i,eventDate:new Date().getTime()},e)}function D(i){if(i.length===0)throw new Error("events parameter is empty");let e=c(i,"Initialized"),t=c(i,"ActivityRegistered"),o=c(i,"Pushed");if(e.length>1)throw new Error("InitializedEvent can only exist once");let r=t.map(n=>n.activityName);o.forEach(n=>{if(!r.includes(n.activityName))throw new Error("the corresponding activity does not exist")})}function B(i,e){let t=l([...i].sort((a,s)=>v(a,s,m=>m.id)),a=>a.id);D(t);let o=c(t,"Initialized")[0],{transitionDuration:r}=o,n=[];t.forEach(a=>{switch(a.name){case"Pushed":{let s=e-a.eventDate>=r?"enter-done":"enter-active";n.push({id:a.activityId,name:a.activityName,transitionState:s,params:a.params,pushedBy:a,metadata:{poppedBy:null}});break}case"Replaced":{let s=e-a.eventDate>=r?"enter-done":"enter-active",m=n.filter(p=>p.metadata.poppedBy===null).sort((p,f)=>f.pushedBy.eventDate-p.pushedBy.eventDate)[0];n.push({id:a.activityId,name:a.activityName,transitionState:s,params:a.params,pushedBy:a,metadata:{poppedBy:null}}),m&&s==="enter-done"&&(m.metadata.poppedBy=a,m.transitionState="exit-done");break}case"Popped":{let s=n.filter((p,f)=>f>0).filter(p=>p.metadata.poppedBy===null).sort((p,f)=>f.pushedBy.eventDate-p.pushedBy.eventDate)[0],m=e-a.eventDate>=r?"exit-done":"exit-active";s&&(s.metadata.poppedBy=a,s.transitionState=m);break}default:break}});let d=n.find(a=>a.transitionState==="enter-active"||a.transitionState==="exit-active")?"loading":"idle";return{activities:l(n.map(a=>({id:a.id,name:a.name,transitionState:a.transitionState,params:a.params,pushedBy:a.pushedBy})),a=>a.id).sort((a,s)=>v(a,s,m=>m.id)),transitionDuration:r,globalTransitionState:d}}import R from"react-fast-compare";function w(i,e){let t=[];R(i,e)||t.push({_TAG:"%SOMETHING_CHANGED%"});for(let o=0;o<Math.max(i.activities.length,e.activities.length);o+=1){let r=i.activities[o],n=e.activities[o];!r&&!!n&&t.push({_TAG:n.pushedBy.name==="Pushed"?"PUSHED":"REPLACED",activity:n});let d=(r==null?void 0:r.transitionState)==="exit-done"||(r==null?void 0:r.transitionState)==="exit-active",u=(n==null?void 0:n.transitionState)==="enter-active"||(n==null?void 0:n.transitionState)==="enter-done";d&&u&&t.push({_TAG:n.pushedBy.name==="Pushed"?"PUSHED":"REPLACED",activity:n})}for(let o=Math.max(i.activities.length,e.activities.length)-1;o>=0;o-=1){let r=i.activities[o],n=e.activities[o],d=(r==null?void 0:r.transitionState)==="enter-done"||(r==null?void 0:r.transitionState)==="enter-active",u=(n==null?void 0:n.transitionState)==="exit-active"||(n==null?void 0:n.transitionState)==="exit-done";d&&u&&t.push({_TAG:"POPPED",activity:n})}return t}export{B as aggregate,g as id,A as makeEvent,w as produceEffects}; | ||
| //# sourceMappingURL=index.mjs.map |
@@ -5,4 +5,4 @@ { | ||
| "sourcesContent": ["import { DomainEvent } from \"../event-types\";\n\nexport function filterEvents<T extends DomainEvent[\"name\"]>(\n events: DomainEvent[],\n eventName: T,\n) {\n return events.filter((e) => e.name === eventName) as Array<\n Extract<DomainEvent, { name: T }>\n >;\n}\n", "export function compareBy<T>(a: T, b: T, selector: (element: T) => string) {\n const $a = selector(a);\n const $b = selector(b);\n\n if ($a < $b) {\n return -1;\n }\n if ($a === $b) {\n return 0;\n }\n return 1;\n}\n", "let counterMap = new Map<string, number>();\n\nexport function id() {\n const t = new Date().getTime().toString();\n\n const prevCounter = counterMap.get(t);\n const nextCounter = prevCounter !== undefined ? prevCounter + 1 : 0;\n\n if (nextCounter === 0) {\n counterMap = new Map();\n }\n\n counterMap.set(t, nextCounter);\n\n return Number(`${t}${nextCounter.toString().padStart(2, \"0\")}`).toString(16);\n}\n", "export function uniqBy<T>(arr: T[], by: (item: T) => string | null): T[] {\n const valueMap = new Map<string, true>();\n\n return [...arr]\n .reverse()\n .filter((item) => {\n const key = by(item);\n\n if (key === null) {\n return true;\n }\n\n const exists = !!valueMap.get(key);\n valueMap.set(key, true);\n\n return !exists;\n })\n .reverse();\n}\n", "import { DomainEvent } from \"../event-types\";\nimport { BaseDomainEvent } from \"../event-types/_base\";\nimport { id } from \"../utils\";\n\nexport function makeEvent<T extends DomainEvent[\"name\"]>(\n name: T,\n parameters: Omit<\n Extract<DomainEvent, { name: T }>,\n \"id\" | \"name\" | \"eventDate\"\n > &\n Partial<BaseDomainEvent>,\n) {\n return {\n id: id(),\n name,\n eventDate: new Date().getTime(),\n ...parameters,\n } as Extract<DomainEvent, { name: T }>;\n}\n", "import { DomainEvent } from \"../event-types\";\nimport { filterEvents } from \"./filterEvents\";\n\nexport function validateEvents(events: DomainEvent[]) {\n if (events.length === 0) {\n throw new Error(\"events parameter is empty\");\n }\n\n const initEvents = filterEvents(events, \"Initialized\");\n const activityRegisteredEvents = filterEvents(events, \"ActivityRegistered\");\n const pushedEvents = filterEvents(events, \"Pushed\");\n\n if (initEvents.length > 1) {\n throw new Error(\"InitializedEvent can only exist once\");\n }\n\n const registeredActivityNames = activityRegisteredEvents.map(\n (e) => e.activityName,\n );\n\n pushedEvents.forEach((e) => {\n if (!registeredActivityNames.includes(e.activityName)) {\n throw new Error(\"the corresponding activity does not exist\");\n }\n });\n}\n", "import {\n Activity,\n ActivityTransitionState,\n AggregateOutput,\n} from \"./AggregateOutput\";\nimport { DomainEvent, PoppedEvent, ReplacedEvent } from \"./event-types\";\nimport { filterEvents, validateEvents } from \"./event-utils\";\nimport { compareBy, uniqBy } from \"./utils\";\n\nexport function aggregate(events: DomainEvent[], now: number): AggregateOutput {\n const sortedEvents = uniqBy(\n [...events].sort((a, b) => compareBy(a, b, (e) => e.id)),\n (e) => e.id,\n );\n\n validateEvents(sortedEvents);\n\n const initEvent = filterEvents(sortedEvents, \"Initialized\")[0];\n const { transitionDuration } = initEvent;\n\n type ActivityMetadata = {\n poppedBy: PoppedEvent | ReplacedEvent | null;\n };\n\n const activities: Array<\n Activity & {\n metadata: ActivityMetadata;\n }\n > = [];\n\n sortedEvents.forEach((event) => {\n switch (event.name) {\n case \"Pushed\": {\n const transitionState: ActivityTransitionState =\n now - event.eventDate >= transitionDuration\n ? \"enter-done\"\n : \"enter-active\";\n\n activities.push({\n id: event.activityId,\n name: event.activityName,\n transitionState,\n params: event.params,\n pushedBy: event,\n metadata: {\n poppedBy: null,\n },\n });\n\n break;\n }\n case \"Replaced\": {\n const transitionState: ActivityTransitionState =\n now - event.eventDate >= transitionDuration\n ? \"enter-done\"\n : \"enter-active\";\n\n const targetActivity = activities\n .filter((activity) => activity.metadata.poppedBy === null)\n .sort((a1, a2) => a2.pushedBy.eventDate - a1.pushedBy.eventDate)[0];\n\n activities.push({\n id: event.activityId,\n name: event.activityName,\n transitionState,\n params: event.params,\n pushedBy: event,\n metadata: {\n poppedBy: null,\n },\n });\n\n if (targetActivity && transitionState === \"enter-done\") {\n targetActivity.metadata.poppedBy = event;\n targetActivity.transitionState = \"exit-done\";\n }\n\n break;\n }\n case \"Popped\": {\n const targetActivity = activities\n .filter((_, i) => i > 0)\n .filter((activity) => activity.metadata.poppedBy === null)\n .sort((a1, a2) => a2.pushedBy.eventDate - a1.pushedBy.eventDate)[0];\n\n const transitionState: ActivityTransitionState =\n now - event.eventDate >= transitionDuration\n ? \"exit-done\"\n : \"exit-active\";\n\n if (targetActivity) {\n targetActivity.metadata.poppedBy = event;\n targetActivity.transitionState = transitionState;\n }\n\n break;\n }\n default: {\n break;\n }\n }\n });\n\n const globalTransitionState = activities.find(\n (activity) =>\n activity.transitionState === \"enter-active\" ||\n activity.transitionState === \"exit-active\",\n )\n ? \"loading\"\n : \"idle\";\n\n const output: AggregateOutput = {\n activities: uniqBy(\n activities.map((activity) => ({\n id: activity.id,\n name: activity.name,\n transitionState: activity.transitionState,\n params: activity.params,\n pushedBy: activity.pushedBy,\n })),\n (activity) => activity.id,\n ).sort((a, b) => compareBy(a, b, (activity) => activity.id)),\n transitionDuration,\n globalTransitionState,\n };\n\n return output;\n}\n", "import isEqual from \"react-fast-compare\";\n\nimport { AggregateOutput } from \"./AggregateOutput\";\nimport { Effect } from \"./Effect\";\n\nexport function produceEffects(\n prevOutput: AggregateOutput,\n nextOutput: AggregateOutput,\n): Effect[] {\n const output: Effect[] = [];\n\n if (!isEqual(prevOutput, nextOutput)) {\n output.push({\n _TAG: \"%SOMETHING_CHANGED%\",\n });\n }\n\n for (\n let i = 0;\n i < Math.max(prevOutput.activities.length, nextOutput.activities.length);\n i += 1\n ) {\n const prevActivity = prevOutput.activities[i];\n const nextActivity = nextOutput.activities[i];\n\n if (!prevActivity && !!nextActivity) {\n output.push({\n _TAG: nextActivity.pushedBy.name === \"Pushed\" ? \"PUSHED\" : \"REPLACED\",\n activity: nextActivity,\n });\n }\n\n const isPrevActivityPopped =\n prevActivity?.transitionState === \"exit-done\" ||\n prevActivity?.transitionState === \"exit-active\";\n const isNextActivityPushed =\n nextActivity?.transitionState === \"enter-active\" ||\n nextActivity?.transitionState === \"enter-done\";\n\n if (isPrevActivityPopped && isNextActivityPushed) {\n output.push({\n _TAG: nextActivity.pushedBy.name === \"Pushed\" ? \"PUSHED\" : \"REPLACED\",\n activity: nextActivity,\n });\n }\n }\n for (\n let j =\n Math.max(prevOutput.activities.length, nextOutput.activities.length) - 1;\n j >= 0;\n j -= 1\n ) {\n const prevActivity = prevOutput.activities[j];\n const nextActivity = nextOutput.activities[j];\n\n const isPrevActivityPushed =\n prevActivity?.transitionState === \"enter-done\" ||\n prevActivity?.transitionState === \"enter-active\";\n const isNextActivityPopped =\n nextActivity?.transitionState === \"exit-active\" ||\n nextActivity?.transitionState === \"exit-done\";\n\n if (isPrevActivityPushed && isNextActivityPopped) {\n output.push({\n _TAG: \"POPPED\",\n activity: nextActivity,\n });\n }\n }\n\n return output;\n}\n"], | ||
| "mappings": ";;;;;;;;;;;;;;;;;;AAEO,sBACL,QACA,WACA;AACA,SAAO,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,SAAS;AAGlD;;;ACTO,mBAAsB,GAAM,GAAM,UAAkC;AACzE,QAAM,KAAK,SAAS,CAAC;AACrB,QAAM,KAAK,SAAS,CAAC;AAErB,MAAI,KAAK,IAAI;AACX,WAAO;AAAA,EACT;AACA,MAAI,OAAO,IAAI;AACb,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACXA,IAAI,aAAa,oBAAI,IAAoB;AAElC,cAAc;AACnB,QAAM,IAAI,IAAI,KAAK,EAAE,QAAQ,EAAE,SAAS;AAExC,QAAM,cAAc,WAAW,IAAI,CAAC;AACpC,QAAM,cAAc,gBAAgB,SAAY,cAAc,IAAI;AAElE,MAAI,gBAAgB,GAAG;AACrB,iBAAa,oBAAI,IAAI;AAAA,EACvB;AAEA,aAAW,IAAI,GAAG,WAAW;AAE7B,SAAO,OAAO,GAAG,IAAI,YAAY,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,EAAE,SAAS,EAAE;AAC7E;;;ACfO,gBAAmB,KAAU,IAAqC;AACvE,QAAM,WAAW,oBAAI,IAAkB;AAEvC,SAAO,CAAC,GAAG,GAAG,EACX,QAAQ,EACR,OAAO,CAAC,SAAS;AAChB,UAAM,MAAM,GAAG,IAAI;AAEnB,QAAI,QAAQ,MAAM;AAChB,aAAO;AAAA,IACT;AAEA,UAAM,SAAS,CAAC,CAAC,SAAS,IAAI,GAAG;AACjC,aAAS,IAAI,KAAK,IAAI;AAEtB,WAAO,CAAC;AAAA,EACV,CAAC,EACA,QAAQ;AACb;;;ACdO,mBACL,MACA,YAKA;AACA,SAAO;AAAA,IACL,IAAI,GAAG;AAAA,IACP;AAAA,IACA,WAAW,IAAI,KAAK,EAAE,QAAQ;AAAA,KAC3B;AAEP;;;ACfO,wBAAwB,QAAuB;AACpD,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AAEA,QAAM,aAAa,aAAa,QAAQ,aAAa;AACrD,QAAM,2BAA2B,aAAa,QAAQ,oBAAoB;AAC1E,QAAM,eAAe,aAAa,QAAQ,QAAQ;AAElD,MAAI,WAAW,SAAS,GAAG;AACzB,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AAEA,QAAM,0BAA0B,yBAAyB,IACvD,CAAC,MAAM,EAAE,YACX;AAEA,eAAa,QAAQ,CAAC,MAAM;AAC1B,QAAI,CAAC,wBAAwB,SAAS,EAAE,YAAY,GAAG;AACrD,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC7D;AAAA,EACF,CAAC;AACH;;;AChBO,mBAAmB,QAAuB,KAA8B;AAC7E,QAAM,eAAe,OACnB,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,GACvD,CAAC,MAAM,EAAE,EACX;AAEA,iBAAe,YAAY;AAE3B,QAAM,YAAY,aAAa,cAAc,aAAa,EAAE;AAC5D,QAAM,EAAE,uBAAuB;AAM/B,QAAM,aAIF,CAAC;AAEL,eAAa,QAAQ,CAAC,UAAU;AAC9B,YAAQ,MAAM;AAAA,WACP,UAAU;AACb,cAAM,kBACJ,MAAM,MAAM,aAAa,qBACrB,eACA;AAEN,mBAAW,KAAK;AAAA,UACd,IAAI,MAAM;AAAA,UACV,MAAM,MAAM;AAAA,UACZ;AAAA,UACA,QAAQ,MAAM;AAAA,UACd,UAAU;AAAA,UACV,UAAU;AAAA,YACR,UAAU;AAAA,UACZ;AAAA,QACF,CAAC;AAED;AAAA,MACF;AAAA,WACK,YAAY;AACf,cAAM,kBACJ,MAAM,MAAM,aAAa,qBACrB,eACA;AAEN,cAAM,iBAAiB,WACpB,OAAO,CAAC,aAAa,SAAS,SAAS,aAAa,IAAI,EACxD,KAAK,CAAC,IAAI,OAAO,GAAG,SAAS,YAAY,GAAG,SAAS,SAAS,EAAE;AAEnE,mBAAW,KAAK;AAAA,UACd,IAAI,MAAM;AAAA,UACV,MAAM,MAAM;AAAA,UACZ;AAAA,UACA,QAAQ,MAAM;AAAA,UACd,UAAU;AAAA,UACV,UAAU;AAAA,YACR,UAAU;AAAA,UACZ;AAAA,QACF,CAAC;AAED,YAAI,kBAAkB,oBAAoB,cAAc;AACtD,yBAAe,SAAS,WAAW;AACnC,yBAAe,kBAAkB;AAAA,QACnC;AAEA;AAAA,MACF;AAAA,WACK,UAAU;AACb,cAAM,iBAAiB,WACpB,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,EACtB,OAAO,CAAC,aAAa,SAAS,SAAS,aAAa,IAAI,EACxD,KAAK,CAAC,IAAI,OAAO,GAAG,SAAS,YAAY,GAAG,SAAS,SAAS,EAAE;AAEnE,cAAM,kBACJ,MAAM,MAAM,aAAa,qBACrB,cACA;AAEN,YAAI,gBAAgB;AAClB,yBAAe,SAAS,WAAW;AACnC,yBAAe,kBAAkB;AAAA,QACnC;AAEA;AAAA,MACF;AAAA,eACS;AACP;AAAA,MACF;AAAA;AAAA,EAEJ,CAAC;AAED,QAAM,wBAAwB,WAAW,KACvC,CAAC,aACC,SAAS,oBAAoB,kBAC7B,SAAS,oBAAoB,aACjC,IACI,YACA;AAEJ,QAAM,SAA0B;AAAA,IAC9B,YAAY,OACV,WAAW,IAAI,CAAC,aAAc;AAAA,MAC5B,IAAI,SAAS;AAAA,MACb,MAAM,SAAS;AAAA,MACf,iBAAiB,SAAS;AAAA,MAC1B,QAAQ,SAAS;AAAA,MACjB,UAAU,SAAS;AAAA,IACrB,EAAE,GACF,CAAC,aAAa,SAAS,EACzB,EAAE,KAAK,CAAC,GAAG,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,SAAS,EAAE,CAAC;AAAA,IAC3D;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;;;AC/HA;AAKO,wBACL,YACA,YACU;AACV,QAAM,SAAmB,CAAC;AAE1B,MAAI,CAAC,QAAQ,YAAY,UAAU,GAAG;AACpC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,WACM,IAAI,GACR,IAAI,KAAK,IAAI,WAAW,WAAW,QAAQ,WAAW,WAAW,MAAM,GACvE,KAAK,GACL;AACA,UAAM,eAAe,WAAW,WAAW;AAC3C,UAAM,eAAe,WAAW,WAAW;AAE3C,QAAI,CAAC,gBAAgB,CAAC,CAAC,cAAc;AACnC,aAAO,KAAK;AAAA,QACV,MAAM,aAAa,SAAS,SAAS,WAAW,WAAW;AAAA,QAC3D,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,UAAM,uBACJ,8CAAc,qBAAoB,eAClC,8CAAc,qBAAoB;AACpC,UAAM,uBACJ,8CAAc,qBAAoB,kBAClC,8CAAc,qBAAoB;AAEpC,QAAI,wBAAwB,sBAAsB;AAChD,aAAO,KAAK;AAAA,QACV,MAAM,aAAa,SAAS,SAAS,WAAW,WAAW;AAAA,QAC3D,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AACA,WACM,IACF,KAAK,IAAI,WAAW,WAAW,QAAQ,WAAW,WAAW,MAAM,IAAI,GACzE,KAAK,GACL,KAAK,GACL;AACA,UAAM,eAAe,WAAW,WAAW;AAC3C,UAAM,eAAe,WAAW,WAAW;AAE3C,UAAM,uBACJ,8CAAc,qBAAoB,gBAClC,8CAAc,qBAAoB;AACpC,UAAM,uBACJ,8CAAc,qBAAoB,iBAClC,8CAAc,qBAAoB;AAEpC,QAAI,wBAAwB,sBAAsB;AAChD,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;", | ||
| "mappings": "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", | ||
| "names": [] | ||
| } |
@@ -6,12 +6,42 @@ import { PushedEvent } from "../event-types"; | ||
| }) => { | ||
| /** | ||
| * Unique string value to be given as a key value when the plugin is rendered in the React Tree in the form of an array | ||
| */ | ||
| key: string; | ||
| /** | ||
| * Called when the <Stack /> component is initialized for the first time | ||
| */ | ||
| onInit?: StackflowPluginHook; | ||
| /** | ||
| * Called before the `pop()` function of `useActions()` is called and the corresponding signal is delivered to the core | ||
| */ | ||
| onBeforePop?: StackflowPluginPreEffectHook; | ||
| /** | ||
| * Called before the `push()` function of `useActions()` is called and the corresponding signal is delivered to the core | ||
| */ | ||
| onBeforePush?: StackflowPluginPreEffectHook; | ||
| /** | ||
| * Called before the `replace()` function of `useActions()` is called and the corresponding signal is delivered to the core | ||
| */ | ||
| onBeforeReplace?: StackflowPluginPreEffectHook; | ||
| /** | ||
| * Called when the push procedure is complete and the actual rendering is finished | ||
| */ | ||
| onPushed?: StackflowPluginPostEffectHook<"PUSHED">; | ||
| /** | ||
| * Called when the pop procedure is complete and the actual rendering is finished | ||
| */ | ||
| onPopped?: StackflowPluginPostEffectHook<"POPPED">; | ||
| /** | ||
| * Called when the replace procedure is complete and the actual rendering is finished | ||
| */ | ||
| onReplaced?: StackflowPluginPostEffectHook<"REPLACED">; | ||
| /** | ||
| * Called after any changes to the stack state are reflected in the actual rendering | ||
| */ | ||
| onChanged?: StackflowPluginPostEffectHook<"%SOMETHING_CHANGED%">; | ||
| /** | ||
| * Specifies the first `PushedEvent` (Overrides the `initialActivity` option specified in the `stackflow()` function) | ||
| */ | ||
| initialPushedEvent?: () => PushedEvent | null; | ||
| }; |
| import { AggregateOutput } from "../AggregateOutput"; | ||
| import { DispatchEvent } from "../event-utils"; | ||
| export declare type StackflowPluginActions = { | ||
| /** | ||
| * Dispatch new event to the core | ||
| */ | ||
| dispatchEvent: DispatchEvent; | ||
| getState: () => AggregateOutput; | ||
| /** | ||
| * Get current stack state | ||
| */ | ||
| getStack: () => AggregateOutput; | ||
| }; |
+3
-3
| { | ||
| "name": "@stackflow/core", | ||
| "version": "0.1.1-alpha.172+f372be6", | ||
| "version": "0.2.0", | ||
| "license": "Apache-2.0", | ||
@@ -39,3 +39,3 @@ "exports": { | ||
| "devDependencies": { | ||
| "@stackflow/esbuild-config": "^0.1.1-alpha.172+f372be6", | ||
| "@stackflow/esbuild-config": "^0.2.0", | ||
| "@swc/core": "^1.2.182", | ||
@@ -60,3 +60,3 @@ "@swc/jest": "^0.2.21", | ||
| }, | ||
| "gitHead": "f372be6903b87738dabf3d0d50f85da26d5419b8" | ||
| "gitHead": "7fa3ce6d240d2cc8e959cba76f6b21b9fbef8ce9" | ||
| } |
@@ -9,12 +9,51 @@ import { PushedEvent } from "../event-types"; | ||
| export type StackflowPlugin = (args: { context: any }) => { | ||
| /** | ||
| * Unique string value to be given as a key value when the plugin is rendered in the React Tree in the form of an array | ||
| */ | ||
| key: string; | ||
| /** | ||
| * Called when the <Stack /> component is initialized for the first time | ||
| */ | ||
| onInit?: StackflowPluginHook; | ||
| /** | ||
| * Called before the `pop()` function of `useActions()` is called and the corresponding signal is delivered to the core | ||
| */ | ||
| onBeforePop?: StackflowPluginPreEffectHook; | ||
| /** | ||
| * Called before the `push()` function of `useActions()` is called and the corresponding signal is delivered to the core | ||
| */ | ||
| onBeforePush?: StackflowPluginPreEffectHook; | ||
| /** | ||
| * Called before the `replace()` function of `useActions()` is called and the corresponding signal is delivered to the core | ||
| */ | ||
| onBeforeReplace?: StackflowPluginPreEffectHook; | ||
| /** | ||
| * Called when the push procedure is complete and the actual rendering is finished | ||
| */ | ||
| onPushed?: StackflowPluginPostEffectHook<"PUSHED">; | ||
| /** | ||
| * Called when the pop procedure is complete and the actual rendering is finished | ||
| */ | ||
| onPopped?: StackflowPluginPostEffectHook<"POPPED">; | ||
| /** | ||
| * Called when the replace procedure is complete and the actual rendering is finished | ||
| */ | ||
| onReplaced?: StackflowPluginPostEffectHook<"REPLACED">; | ||
| /** | ||
| * Called after any changes to the stack state are reflected in the actual rendering | ||
| */ | ||
| onChanged?: StackflowPluginPostEffectHook<"%SOMETHING_CHANGED%">; | ||
| /** | ||
| * Specifies the first `PushedEvent` (Overrides the `initialActivity` option specified in the `stackflow()` function) | ||
| */ | ||
| initialPushedEvent?: () => PushedEvent | null; | ||
| }; |
@@ -5,4 +5,11 @@ import { AggregateOutput } from "../AggregateOutput"; | ||
| export type StackflowPluginActions = { | ||
| /** | ||
| * Dispatch new event to the core | ||
| */ | ||
| dispatchEvent: DispatchEvent; | ||
| getState: () => AggregateOutput; | ||
| /** | ||
| * Get current stack state | ||
| */ | ||
| getStack: () => AggregateOutput; | ||
| }; |
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
0
-100%104589
-6.65%2304
-12.16%4
100%