@akanjs/store 0.9.60-canary.0 → 0.9.60-canary.11

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/README.md CHANGED
@@ -1,11 +1 @@
1
- # akan
2
-
3
- This library was generated with [Nx](https://nx.dev).
4
-
5
- ## Building
6
-
7
- Run `nx build akan` to build the library.
8
-
9
- ## Running unit tests
10
-
11
- Run `nx test akan` to execute the unit tests via [Jest](https://jestjs.io).
1
+ 패키지는 akanjs의 서브 라이브러리입니다. 더 자세한 내용은 [@akanjs/cli](https://www.npmjs.com/package/@akanjs/cli)와 [Akan.js Github](https://github.com/akan-team/akanjs)를 참고하세요.
@@ -556,18 +556,23 @@ const makeActions = (refName, slices) => {
556
556
  const model = await fetch[names.model](id, { onError });
557
557
  this.set({ [names.model]: model, [names.modelViewAt]: /* @__PURE__ */ new Date(), [names.modelLoading]: false });
558
558
  },
559
- [names.setModel]: function(fullOrLightModel) {
559
+ [names.setModel]: function(...fullOrLightModels) {
560
560
  const currentState = this.get();
561
+ if (fullOrLightModels.length === 0)
562
+ return;
563
+ const firstModel = fullOrLightModels[0];
561
564
  const model = currentState[names.model];
562
- const isFull = fullOrLightModel instanceof modelRef;
565
+ const isFull = firstModel instanceof modelRef;
563
566
  if (isFull) {
564
- const crystalizedModel = cnst.crystalize(fullOrLightModel);
567
+ const crystalizedModel = cnst.crystalize(firstModel);
565
568
  this.set({ [names.model]: crystalizedModel });
566
- } else if (model?.id === fullOrLightModel.id) {
567
- const crystalizedModel = cnst.crystalize({ ...model, ...fullOrLightModel });
569
+ } else if (model?.id === firstModel.id) {
570
+ const crystalizedModel = cnst.crystalize({ ...model, ...firstModel });
568
571
  this.set({ [names.model]: crystalizedModel });
569
572
  }
570
- const lightModel = cnst.lightCrystalize(fullOrLightModel);
573
+ const lightModels = fullOrLightModels.map(
574
+ (fullOrLightModel) => cnst.lightCrystalize(fullOrLightModel)
575
+ );
571
576
  slices.forEach(({ sliceName }) => {
572
577
  const namesOfSlice = {
573
578
  modelList: sliceName.replace(names.model, names.modelList),
@@ -575,9 +580,14 @@ const makeActions = (refName, slices) => {
575
580
  };
576
581
  const modelList = currentState[namesOfSlice.modelList];
577
582
  const modelListLoading = currentState[namesOfSlice.modelListLoading];
578
- if (modelListLoading || !modelList.has(lightModel.id))
583
+ if (modelListLoading)
579
584
  return;
580
- this.set({ [namesOfSlice.modelList]: modelList.set(lightModel).save() });
585
+ lightModels.forEach((lightModel) => {
586
+ if (!modelList.has(lightModel.id))
587
+ return;
588
+ modelList.set(lightModel);
589
+ });
590
+ this.set({ [namesOfSlice.modelList]: modelList.save() });
581
591
  });
582
592
  },
583
593
  [names.resetModel]: function(model) {
@@ -623,11 +633,10 @@ const makeActions = (refName, slices) => {
623
633
  const queryArgs = new Array(initArgLength).fill(null).map((_, i) => args[i]);
624
634
  const defaultModel = (0, import_signal.immerify)(modelRef, { ...cnst.getDefault(), ...initForm.default ?? {} });
625
635
  this.set({ [names.defaultModel]: defaultModel });
626
- await this[namesOfSlice.refreshModel](
627
- ...initArgLength === argLength ? [...queryArgs, initForm] : queryArgs
628
- );
636
+ await this[namesOfSlice.refreshModel]({ ...initForm, queryArgs });
629
637
  },
630
- [namesOfSlice.refreshModel]: async function(...args) {
638
+ [namesOfSlice.refreshModel]: async function(initForm = {}) {
639
+ const args = initForm.queryArgs ?? [];
631
640
  const refreshArgLength = Math.min(args.length, argLength);
632
641
  const currentState = this.get();
633
642
  const existingQueryArgs = currentState[namesOfSlice.queryArgsOfModel];
@@ -635,7 +644,6 @@ const makeActions = (refName, slices) => {
635
644
  ...new Array(refreshArgLength).fill(null).map((_, i) => args[i]),
636
645
  ...existingQueryArgs.slice(refreshArgLength, argLength)
637
646
  ];
638
- const initForm = args[argLength] ?? {};
639
647
  const {
640
648
  page = currentState[namesOfSlice.pageOfModel],
641
649
  limit = currentState[namesOfSlice.limitOfModel],
@@ -543,18 +543,23 @@ const makeActions = (refName, slices) => {
543
543
  const model = await fetch[names.model](id, { onError });
544
544
  this.set({ [names.model]: model, [names.modelViewAt]: /* @__PURE__ */ new Date(), [names.modelLoading]: false });
545
545
  },
546
- [names.setModel]: function(fullOrLightModel) {
546
+ [names.setModel]: function(...fullOrLightModels) {
547
547
  const currentState = this.get();
548
+ if (fullOrLightModels.length === 0)
549
+ return;
550
+ const firstModel = fullOrLightModels[0];
548
551
  const model = currentState[names.model];
549
- const isFull = fullOrLightModel instanceof modelRef;
552
+ const isFull = firstModel instanceof modelRef;
550
553
  if (isFull) {
551
- const crystalizedModel = cnst.crystalize(fullOrLightModel);
554
+ const crystalizedModel = cnst.crystalize(firstModel);
552
555
  this.set({ [names.model]: crystalizedModel });
553
- } else if (model?.id === fullOrLightModel.id) {
554
- const crystalizedModel = cnst.crystalize({ ...model, ...fullOrLightModel });
556
+ } else if (model?.id === firstModel.id) {
557
+ const crystalizedModel = cnst.crystalize({ ...model, ...firstModel });
555
558
  this.set({ [names.model]: crystalizedModel });
556
559
  }
557
- const lightModel = cnst.lightCrystalize(fullOrLightModel);
560
+ const lightModels = fullOrLightModels.map(
561
+ (fullOrLightModel) => cnst.lightCrystalize(fullOrLightModel)
562
+ );
558
563
  slices.forEach(({ sliceName }) => {
559
564
  const namesOfSlice = {
560
565
  modelList: sliceName.replace(names.model, names.modelList),
@@ -562,9 +567,14 @@ const makeActions = (refName, slices) => {
562
567
  };
563
568
  const modelList = currentState[namesOfSlice.modelList];
564
569
  const modelListLoading = currentState[namesOfSlice.modelListLoading];
565
- if (modelListLoading || !modelList.has(lightModel.id))
570
+ if (modelListLoading)
566
571
  return;
567
- this.set({ [namesOfSlice.modelList]: modelList.set(lightModel).save() });
572
+ lightModels.forEach((lightModel) => {
573
+ if (!modelList.has(lightModel.id))
574
+ return;
575
+ modelList.set(lightModel);
576
+ });
577
+ this.set({ [namesOfSlice.modelList]: modelList.save() });
568
578
  });
569
579
  },
570
580
  [names.resetModel]: function(model) {
@@ -610,11 +620,10 @@ const makeActions = (refName, slices) => {
610
620
  const queryArgs = new Array(initArgLength).fill(null).map((_, i) => args[i]);
611
621
  const defaultModel = immerify(modelRef, { ...cnst.getDefault(), ...initForm.default ?? {} });
612
622
  this.set({ [names.defaultModel]: defaultModel });
613
- await this[namesOfSlice.refreshModel](
614
- ...initArgLength === argLength ? [...queryArgs, initForm] : queryArgs
615
- );
623
+ await this[namesOfSlice.refreshModel]({ ...initForm, queryArgs });
616
624
  },
617
- [namesOfSlice.refreshModel]: async function(...args) {
625
+ [namesOfSlice.refreshModel]: async function(initForm = {}) {
626
+ const args = initForm.queryArgs ?? [];
618
627
  const refreshArgLength = Math.min(args.length, argLength);
619
628
  const currentState = this.get();
620
629
  const existingQueryArgs = currentState[namesOfSlice.queryArgsOfModel];
@@ -622,7 +631,6 @@ const makeActions = (refName, slices) => {
622
631
  ...new Array(refreshArgLength).fill(null).map((_, i) => args[i]),
623
632
  ...existingQueryArgs.slice(refreshArgLength, argLength)
624
633
  ];
625
- const initForm = args[argLength] ?? {};
626
634
  const {
627
635
  page = currentState[namesOfSlice.pageOfModel],
628
636
  limit = currentState[namesOfSlice.limitOfModel],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/store",
3
- "version": "0.9.60-canary.0",
3
+ "version": "0.9.60-canary.11",
4
4
  "sourceType": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -15,7 +15,7 @@
15
15
  "node": ">=20"
16
16
  },
17
17
  "dependencies": {
18
- "react": "19.2.0",
18
+ "react": "19.2.1",
19
19
  "zustand": "^5.0.2"
20
20
  },
21
21
  "exports": {
@@ -105,7 +105,6 @@ export interface NewOption {
105
105
  type PartialOrNull<O> = {
106
106
  [K in keyof O]?: O[K] | null;
107
107
  };
108
- type OptionalArgs<T extends any[]> = T extends [infer Head, ...infer Tail] ? [arg?: Head | null, ...OptionalArgs<Tail>] : [];
109
108
  type BaseAction<T extends string, Input, Full extends {
110
109
  id: string;
111
110
  }, Light, _CapitalizedT extends string = Capitalize<T>, _CreateOption = CreateOption<Full>> = {
@@ -137,7 +136,7 @@ type BaseAction<T extends string, Input, Full extends {
137
136
  modal?: string | null;
138
137
  } & FetchPolicy) => Promise<void>;
139
138
  } & {
140
- [K in `set${_CapitalizedT}`]: (model: Full | Light) => void;
139
+ [K in `set${_CapitalizedT}`]: (...models: (Full | Light)[]) => void;
141
140
  } & {
142
141
  [K in `reset${_CapitalizedT}`]: (model?: Full) => void;
143
142
  };
@@ -146,7 +145,9 @@ type SliceAction<T extends string, Input, Full extends {
146
145
  }, Light, QueryArgs extends any[], Filter extends FilterInstance, _CapitalizedT extends string = Capitalize<T>, _Sort = ExtractSort<Filter>, _FetchInitFormWithFetchPolicy = FetchInitForm<Input, Full, Filter> & FetchPolicy> = {
147
146
  [K in `init${_CapitalizedT}`]: (...args: [...args: QueryArgs, initForm?: _FetchInitFormWithFetchPolicy]) => Promise<void>;
148
147
  } & {
149
- [K in `refresh${_CapitalizedT}`]: (...args: [...args: OptionalArgs<QueryArgs>, initForm?: _FetchInitFormWithFetchPolicy]) => Promise<void>;
148
+ [K in `refresh${_CapitalizedT}`]: (initForm?: _FetchInitFormWithFetchPolicy & {
149
+ queryArgs?: QueryArgs;
150
+ }) => Promise<void>;
150
151
  } & {
151
152
  [K in `select${_CapitalizedT}`]: (model: Light | Light[], options?: {
152
153
  refresh?: boolean;