solid-alive 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{createComponent as e}from"solid-js/web";import{createStore as n,produce as o}from"solid-js/store";import{createContext as r,createComputed as i,on as t,useContext as l,createRoot as s,getOwner as d,onCleanup as f,runWithOwner as v}from"solid-js";var a=r({elements:{},symbolClose:Symbol("close"),info:{frozen:!1,cbOnOff:"off",currComponentId:"",first:!0},insertElement:()=>{},removeAliveElements:()=>{},setCb:()=>{}});function c(r){let[l,s]=n(),d=Symbol("close"),f={frozen:!1,cbOnOff:"on",currComponentId:d,aliveIds:null,first:!0};var v=e=>{var n,o,r;l[e]&&(null===(n=l[e].subIds)||void 0===n||n.forEach((n=>n!==e&&v(n))),null===(r=(o=l[e]).dispose)||void 0===r||r.call(o),s({[e]:void 0}))},c=e=>{if(Array.isArray(e))for(const n of e)v(n);else if(!e)for(const e of Object.keys(l))v(e)};return i((e=>{var n=Array.isArray(r.include),o=n?r.include:[];return f.aliveIds=n?r.include:null,e.length>o.length&&c(e.filter((e=>!o.includes(e)))),o}),Array.isArray(r.include)?r.include:[]),e(a.Provider,{value:{info:f,elements:l,symbolClose:d,setCb:(e,n)=>{var r=f.cbOnOff,i=f.currComponentId;"on"===r&&"string"==typeof i&&n&&(!l[i]&&s({[i]:{id:i}}),s(o((o=>{o[i][e]=[...o[i][e]||[],t([],n)]}))),"onActivated"===e&&Promise.resolve().then((()=>{f.cbOnOff="off",n(),f.cbOnOff="on"})))},insertElement:e=>{s([e.id],Object.assign(Object.assign({},l[e.id]),e))},removeAliveElements:c},get children(){return r.children}})}function u(e,n,o){return function(r){var i,{info:t,elements:c,symbolClose:u,insertElement:m}=l(a);return Array.isArray(t.aliveIds)&&!t.aliveIds.includes(n)?e(r):(c[n]?t.frozen?!(null===(i=c[n].subIds)||void 0===i?void 0:i.length)&&(t.frozen=!1):Promise.resolve().then((()=>{var e;return null===(e=c[n].onActivated)||void 0===e?void 0:e.forEach((e=>e()))})):(t.currComponentId=n,s((i=>{m({id:n,dispose:i,owner:d(),element:e(r),subIds:Array.isArray(o)?o:null})}))),f((()=>{var e,o,r;t.frozen||(t.first&&(t.currComponentId=u,t.first=!1),!(null===(e=c[n].subIds)||void 0===e?void 0:e.length)&&(t.first=!0),t.cbOnOff="off",null===(r=null===(o=c[n])||void 0===o?void 0:o.onDeactivated)||void 0===r||r.forEach((e=>e())),t.cbOnOff="on")})),c[n].owner&&v(c[n].owner,(()=>c[n].element)))}}function m(n){var o=u((()=>n.children),n.id,n.subIds);return e(o,{})}function b(){var{setCb:e,removeAliveElements:n,info:o}=l(a);return{onActivated:n=>e("onActivated",n),onDeactivated:n=>e("onDeactivated",n),removeAliveElements:n,info:o}}function A(e){var{onActivated:n}=b();n(e)}function y(e){var{onDeactivated:n}=b();n(e)}function O(){var{removeAliveElements:e,info:n,onActivated:o,onDeactivated:r}=b();return{onActivated:o,onDeactivated:r,removeAliveElements:e,aliveFrozen:()=>n.frozen=!0}}export{m as AliveComponent,c as AliveProvider,u as aliveTransfer,A as onActivated,y as onDeactivated,O as useAlive};
1
+ import{createComponent as e}from"solid-js/web";import{createContext as t,useContext as n,createRoot as r,getOwner as i,onCleanup as o,runWithOwner as l,createEffect as s,untrack as d}from"solid-js";import{produce as u,createStore as v}from"solid-js/store";const a=Symbol("currentId"),c=Symbol("setActiveCb");var m=t({elements:{},setElements:()=>{},setActiveCb:()=>{},aliveIds:()=>{}});const f=t({[a]:void 0,[c]:()=>{}});function A(t,s,d){return function(v){var A,y,h=n(m);return(null===(A=h.aliveIds())||void 0===A?void 0:A.includes(s))?(h.elements[s]?null===(y=h.elements[s].onActivated)||void 0===y||y.forEach((e=>e())):(h.setElements({[s]:{id:s,subsets:Array.isArray(d)?d:null}}),r((n=>{h.setElements(u((r=>{r[s].dispose=n,r[s].id=s,r[s].owner=i(),r[s].element=e(f.Provider,{get value(){return{[a]:s,[c]:h.setActiveCb}},get children(){return t(v)}})})))}))),o((()=>{var e;null===(e=h.elements[s].onDeactivated)||void 0===e||e.forEach((e=>e()))})),h.elements[s].owner&&l(h.elements[s].owner,(()=>h.elements[s].element))):t(v)}}function y(t){const[n,r]=v(),i=e=>{var t,o,l;if(Array.isArray(e))for(var s of e)i(null===(t=n[s])||void 0===t?void 0:t.subsets),null===(l=null===(o=n[s])||void 0===o?void 0:o.dispose)||void 0===l||l.call(o),r({[s]:void 0})};return s((e=>{var n=Array.isArray(t.include)?t.include:[];if(e.length>n.length){var r=new Set(n);i(e.filter((e=>!r.has(e))))}return n}),Array.isArray(t.include)?t.include:[]),e(m.Provider,{value:{elements:n,setElements:r,setActiveCb:(e,t,n,i)=>{r(u((r=>{r[e][t]?r[e][t][i](n):"add"===i&&(r[e][t]=new Set([n]))})))},aliveIds:()=>t.include},get children(){return t.children}})}function h(e,t){d((()=>{var r=n(f),i=r[a];i&&(r[c](i,e,t,"add"),"onActivated"===e&&s((()=>{!function(e){"undefined"!=typeof Promise&&"function"==typeof Promise.prototype.then?Promise.resolve().then(e):setTimeout(e)}(t)})),o((()=>{r[c](i,e,t,"delete"),t=null})))}))}function p(e){h("onActivated",e)}function b(e){h("onDeactivated",e)}export{y as AliveProvider,A as aliveTransfer,p as onActivated,b as onDeactivated};
@@ -1,7 +1,2 @@
1
- import { ProveiderProps } from "./default";
2
- /**
3
- * @description Alive
4
- * @param children jsx.element
5
- * @param {Arrya<string> | null} [include] 哪些路由要缓存, 不写默认缓存所有
6
- */
1
+ import { ProveiderProps } from "./types";
7
2
  export default function AliveProvider(props: ProveiderProps): import("solid-js").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export declare function onActivated(cb: () => void): void;
2
+ export declare function onDeactivated(cb: () => void): void;
@@ -1,8 +1,2 @@
1
1
  import { JSX } from "solid-js";
2
- /**
3
- * @description Alive 组件用的 转换函数; aliveTransfer(Comp, ‘/home’)
4
- * @param { ()=> JSX.Element } Component () => JSX.Element
5
- * @param { string } id string,自己的id 值,一定要唯一
6
- * @param { Array<string> } [subIds] [string,...], 子组件的 id值 可不传,这样默认销毁时不会去干掉子组件,
7
- */
8
- export default function aliveTransfer(Component: <T>(props: T) => JSX.Element, id: string, subIds?: Array<string>): <T>(props: T) => any;
2
+ export default function aliveTransfer(Component: <T>(props: T) => JSX.Element, id: string, subsets?: Array<string>): <T>(props: T) => any;
@@ -1,3 +1,9 @@
1
- import { ContextProps } from './default';
2
- declare var Context: import("solid-js").Context<ContextProps>;
3
- export default Context;
1
+ import { Context } from "./types";
2
+ export declare const CURRENTID: unique symbol;
3
+ export declare const SETACTIVECB: unique symbol;
4
+ declare const _default: import("solid-js").Context<Context>;
5
+ export default _default;
6
+ export declare const ChildContext: import("solid-js").Context<{
7
+ [CURRENTID]: string | undefined;
8
+ [SETACTIVECB]: Context["setActiveCb"];
9
+ }>;
@@ -1,5 +1,4 @@
1
- import AliveProvider from './AliveProvider';
2
- import aliveTransfer from './aliveTransfer';
3
- import { AliveComponent } from './AliveComponent';
4
- import { onActivated, onDeactivated, useAlive } from './useAlive';
5
- export { AliveComponent, AliveProvider, aliveTransfer, onActivated, onDeactivated, useAlive, };
1
+ import aliveTransfer from "./aliveTransfer";
2
+ import AliveProvider from "./AliveProvider";
3
+ import { onActivated, onDeactivated } from "./active";
4
+ export { aliveTransfer, AliveProvider, onActivated, onDeactivated };
@@ -0,0 +1 @@
1
+ export declare function nextTick(cb: () => void): void;
@@ -0,0 +1,34 @@
1
+ import { Owner, JSX } from "solid-js"
2
+ import { SetStoreFunction } from "solid-js/store"
3
+
4
+ export type EmitType = keyof Emit
5
+
6
+ export type EmitValue<T extends EmitType> = Emit[T]
7
+
8
+ export type Activate = "onActivated" | "onDeactivated"
9
+
10
+ export interface Emit {
11
+ onActivated: () => void
12
+ onDeactivated: () => void
13
+ }
14
+
15
+ export interface ProveiderProps {
16
+ children: JSX.Element
17
+ include?: Array<string>
18
+ }
19
+
20
+ export interface Element {
21
+ id: string
22
+ element: JSX.Element
23
+ dispose?: () => void
24
+ onActivated?: Set<() => void>
25
+ onDeactivated?: Set<() => void>
26
+ subsets?: Array<string>
27
+ owner?: Owner | null
28
+ }
29
+ export interface Context {
30
+ elements: Record<string, Element>
31
+ setElements: SetStoreFunction<{}>
32
+ aliveIds: ()=> Array<string> | undefined
33
+ setActiveCb: (id:string,t: Activate, cb: () => void, t1: 'add'| 'delete') => void
34
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-alive",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "author": "1iuxs",
5
5
  "description": "solid-alive",
6
6
  "type": "module",
@@ -1,6 +0,0 @@
1
- import { JSX } from 'solid-js';
2
- export declare function AliveComponent(props: {
3
- children: JSX.Element;
4
- id: string;
5
- subIds?: Array<string>;
6
- }): JSX.Element;
@@ -1,54 +0,0 @@
1
- import { JSX, Accessor } from 'solid-js'
2
-
3
- export interface ProveiderProps {
4
- children: JSX.Element
5
- include?: Array<string> | null
6
- }
7
-
8
- export type tActivated = 'onActivated' | 'onDeactivated'
9
-
10
- export interface NodeInfo {
11
- id: string
12
- owner?: any
13
- component?: ((props: any) => JSX.Element) | null
14
- element?: JSX.Element | null
15
- subIds?: Array<string> | null
16
- dispose?: (() => void) | null
17
- onActivated?: Array<() => void> | null
18
- onDeactivated?: Array<() => void> | null
19
- }
20
-
21
- export interface SetElement {
22
- (id: string, values: NodeInfo): void
23
- }
24
-
25
- export interface StoreProps {
26
- [key: string]: NodeInfo
27
- }
28
-
29
- export interface IInfo {
30
- frozen: boolean
31
- cbOnOff: 'on' | 'off'
32
- currComponentId: string | symbol,
33
- aliveIds?:Array<string> | null,
34
- first:boolean
35
- }
36
-
37
- export interface ContextProps{
38
- elements: StoreProps
39
- info: IInfo
40
- symbolClose: symbol
41
- insertElement: (d: NodeInfo) => void
42
- removeAliveElements: (ids?: Array<IAliveElementIds>) => void
43
- setCb: (t: tActivated, cb: () => void) => void
44
- }
45
-
46
- interface IActive {
47
- [key: string]: string
48
- }
49
- export interface IPrevCall {
50
- onActivated: IActive
51
- onDeactivated: IActive
52
- }
53
-
54
- export type IAliveElementIds = string
@@ -1,14 +0,0 @@
1
- export declare function onActivated(fn: () => void): void;
2
- export declare function onDeactivated(fn: () => void): void;
3
- /**
4
- * @returns removeAliveElement 删除缓存组件,
5
- * @returns aliveFrozen 让 alive 暂时失去响应, 一般在加新增路由数据时使用
6
- * @returns onActivated 进入
7
- * @returns onDeactivated 离开
8
- */
9
- export declare function useAlive(): {
10
- onActivated: (cb: () => void) => void;
11
- onDeactivated: (cb: () => void) => void;
12
- removeAliveElements: (ids?: Array<import("./default").IAliveElementIds>) => void;
13
- aliveFrozen: () => boolean;
14
- };