New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

@stackflow/core

Package Overview
Dependencies
Maintainers
1
Versions
60
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@stackflow/core - npm Package Compare versions

Comparing version
0.1.1-alpha.172
to
0.2.0
+1
-230
dist/index.js

@@ -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
+1
-1

@@ -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,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": "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",
"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;
};
{
"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;
};