yanki 1.2.2 → 1.2.3

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.
@@ -274,6 +274,23 @@ Matches any primitive, `void`, `Date`, or `RegExp` value.
274
274
  */
275
275
  type BuiltIns = Primitive | void | Date | RegExp;
276
276
 
277
+ /**
278
+ Test if the given function has multiple call signatures.
279
+
280
+ Needed to handle the case of a single call signature with properties.
281
+
282
+ Multiple call signatures cannot currently be supported due to a TypeScript limitation.
283
+ @see https://github.com/microsoft/TypeScript/issues/29732
284
+ */
285
+ type HasMultipleCallSignatures<T extends (...arguments_: any[]) => unknown> =
286
+ T extends {(...arguments_: infer A): unknown; (...arguments_: infer B): unknown}
287
+ ? B extends A
288
+ ? A extends B
289
+ ? false
290
+ : true
291
+ : true
292
+ : false;
293
+
277
294
  /**
278
295
  Useful to flatten the type output to improve type hints shown in editors. And also to transform an interface into a type to aide with assignability.
279
296
 
@@ -688,16 +705,20 @@ type PartialDeep<T, Options extends PartialDeepOptions = {}> =
688
705
 
689
706
  type _PartialDeep<T, Options extends Required<PartialDeepOptions>> = T extends BuiltIns | ((new (...arguments_: any[]) => unknown))
690
707
  ? T
691
- : IsNever<keyof T> extends true // For functions with no properties
692
- ? T
693
- : T extends Map<infer KeyType, infer ValueType>
694
- ? PartialMapDeep<KeyType, ValueType, Options>
695
- : T extends Set<infer ItemType>
696
- ? PartialSetDeep<ItemType, Options>
697
- : T extends ReadonlyMap<infer KeyType, infer ValueType>
698
- ? PartialReadonlyMapDeep<KeyType, ValueType, Options>
699
- : T extends ReadonlySet<infer ItemType>
700
- ? PartialReadonlySetDeep<ItemType, Options>
708
+ : T extends Map<infer KeyType, infer ValueType>
709
+ ? PartialMapDeep<KeyType, ValueType, Options>
710
+ : T extends Set<infer ItemType>
711
+ ? PartialSetDeep<ItemType, Options>
712
+ : T extends ReadonlyMap<infer KeyType, infer ValueType>
713
+ ? PartialReadonlyMapDeep<KeyType, ValueType, Options>
714
+ : T extends ReadonlySet<infer ItemType>
715
+ ? PartialReadonlySetDeep<ItemType, Options>
716
+ : T extends (...arguments_: any[]) => unknown
717
+ ? IsNever<keyof T> extends true
718
+ ? T // For functions with no properties
719
+ : HasMultipleCallSignatures<T> extends true
720
+ ? T
721
+ : ((...arguments_: Parameters<T>) => ReturnType<T>) & PartialObjectDeep<T, Options>
701
722
  : T extends object
702
723
  ? T extends ReadonlyArray<infer ItemType> // Test for arrays/tuples, per https://github.com/microsoft/TypeScript/issues/35156
703
724
  ? Options['recurseIntoArrays'] extends true
@@ -733,618 +754,616 @@ type PartialReadonlySetDeep<T, Options extends Required<PartialDeepOptions>> = {
733
754
  /**
734
755
  Same as `PartialDeep`, but accepts only `object`s as inputs. Internal helper for `PartialDeep`.
735
756
  */
736
- type PartialObjectDeep<ObjectType extends object, Options extends Required<PartialDeepOptions>> =
737
- (ObjectType extends (...arguments_: any) => unknown
738
- ? (...arguments_: Parameters<ObjectType>) => ReturnType<ObjectType>
739
- : {}) & ({
740
- [KeyType in keyof ObjectType]?: _PartialDeep<ObjectType[KeyType], Options>
741
- });
742
-
743
- type CardBrowserColumns = 'answer' | 'cardDue' | 'cardEase' | 'cardIvl' | 'cardLapses' | 'cardMod' | 'cardReps' | 'deck' | 'note' | 'noteCrt' | 'noteFld' | 'noteMod' | 'noteTags' | 'question' | 'template' | (string & {});
744
- type CardValueKeys = 'data' | 'did' | 'due' | 'factor' | 'flags' | 'id' | 'ivl' | 'lapses' | 'left' | 'mod' | 'odid' | 'odue' | 'ord' | 'queue' | 'reps' | 'type' | 'usn';
745
- type CardInfo = {
746
- answer: string;
747
- buttons?: number[];
748
- cardId: number;
749
- css: string;
750
- deckName: string;
751
- due: number;
752
- fieldOrder: number;
753
- fields: Record<string, {
754
- order: number;
755
- value: string;
756
- }>;
757
- interval: number;
758
- lapses: number;
759
- left: number;
760
- mod: number;
761
- modelName: string;
762
- nextReviews: string[];
763
- note: number;
764
- ord: number;
765
- question: string;
766
- queue: number;
767
- reps: number;
768
- template: string;
769
- type: number;
757
+ type PartialObjectDeep<ObjectType extends object, Options extends Required<PartialDeepOptions>> = {
758
+ [KeyType in keyof ObjectType]?: _PartialDeep<ObjectType[KeyType], Options>
770
759
  };
771
- type CardRequests = Request<'answerCards', 6, {
772
- answers: Array<{
773
- cardId: number;
774
- ease: number;
775
- }>;
776
- }, boolean[]> | Request<'areDue', 6, {
777
- cards: number[];
778
- }, boolean[]> | Request<'areSuspended', 6, {
779
- cards: number[];
780
- }, Array<boolean | null>> | Request<'cardsInfo', 6, {
781
- cards: number[];
782
- }, CardInfo[]> | Request<'cardsModTime', 6, {
783
- cards: number[];
784
- }, {
785
- cardId: number;
786
- mod: number;
787
- }> | Request<'cardsToNotes', 6, {
788
- cards: number[];
789
- }, number[]> | Request<'findCards', 6, {
790
- query: string;
791
- }, number[]> | Request<'forgetCards', 6, {
792
- cards: number[];
793
- }> | Request<'getEaseFactors', 6, {
794
- cards: number[];
795
- }, number[]> | Request<'getIntervals', 6, {
796
- cards: number[];
797
- complete?: boolean;
798
- }, number[] | number[][]> | Request<'relearnCards', 6, {
799
- cards: number[];
800
- }> | Request<'setDueDate', 6, {
801
- cards: number[];
802
- days: string;
803
- }, boolean> | Request<'setEaseFactors', 6, {
804
- cards: number[];
805
- easeFactors: number[];
806
- }, boolean[]> | Request<'setSpecificValueOfCard', 6, {
807
- card: number;
808
- keys: CardValueKeys[];
809
- newValues: string[];
810
- }, boolean[]> | Request<'suspend', 6, {
811
- cards: number[];
812
- }, boolean> | Request<'suspended', 6, {
813
- card: number;
814
- }, boolean> | Request<'unsuspend', 6, {
815
- cards: number[];
816
- }, boolean>;
817
760
 
761
+ //#region src/types/deck.d.ts
818
762
  type DeckStats = {
819
- deck_id: number;
820
- learn_count: number;
821
- name: string;
822
- new_count: number;
823
- review_count: number;
824
- total_in_deck: number;
763
+ deck_id: number;
764
+ learn_count: number;
765
+ name: string;
766
+ new_count: number;
767
+ review_count: number;
768
+ total_in_deck: number;
825
769
  };
826
770
  type DeckConfig = {
827
- autoplay: boolean;
828
- dyn: 1 | false;
829
- id: number;
830
- lapse: {
831
- delays: number[];
832
- leechAction: number;
833
- leechFails: number;
834
- minInt: number;
835
- mult: number;
836
- };
837
- maxTaken: number;
838
- mod: number;
839
- name: string;
840
- new: {
841
- bury: boolean;
842
- delays: number[];
843
- initialFactor: number;
844
- ints: number[];
845
- order: number;
846
- perDay: number;
847
- separate: boolean;
848
- };
849
- replayq: boolean;
850
- rev: {
851
- bury: boolean;
852
- ease4: number;
853
- fuzz: number;
854
- ivlFct: number;
855
- maxIvl: number;
856
- minSpace: number;
857
- perDay: number;
858
- };
859
- timer: number;
860
- usn: number;
771
+ autoplay: boolean;
772
+ dyn: 1 | false;
773
+ id: number;
774
+ lapse: {
775
+ delays: number[];
776
+ leechAction: number;
777
+ leechFails: number;
778
+ minInt: number;
779
+ mult: number;
780
+ };
781
+ maxTaken: number;
782
+ mod: number;
783
+ name: string;
784
+ new: {
785
+ bury: boolean;
786
+ delays: number[];
787
+ initialFactor: number;
788
+ ints: number[];
789
+ order: number;
790
+ perDay: number;
791
+ separate: boolean;
792
+ };
793
+ replayq: boolean;
794
+ rev: {
795
+ bury: boolean;
796
+ ease4: number;
797
+ fuzz: number;
798
+ ivlFct: number;
799
+ maxIvl: number;
800
+ minSpace: number;
801
+ perDay: number;
802
+ };
803
+ timer: number;
804
+ usn: number;
861
805
  };
862
806
  type DeckRequests = Request<'changeDeck', 6, {
863
- cards: number[];
864
- deck: string;
807
+ cards: number[];
808
+ deck: string;
865
809
  }> | Request<'cloneDeckConfigId', 6, {
866
- cloneFrom: number;
867
- name: string;
810
+ cloneFrom: number;
811
+ name: string;
868
812
  }, false | number> | Request<'createDeck', 6, {
869
- deck: string;
813
+ deck: string;
870
814
  }, number> | Request<'deckNames', 6, never, string[]> | Request<'deckNamesAndIds', 6, never, Record<string, number>> | Request<'deleteDecks', 6, {
871
- cardsToo: true;
872
- decks: string[];
815
+ cardsToo: true;
816
+ decks: string[];
873
817
  }> | Request<'getDeckConfig', 6, {
874
- deck: string;
818
+ deck: string;
875
819
  }, DeckConfig> | Request<'getDecks', 6, Record<'cards', number[]>, Record<string, number[]>> | Request<'getDeckStats', 6, {
876
- decks: string[];
820
+ decks: string[];
877
821
  }, Record<string, DeckStats>> | Request<'removeDeckConfigId', 6, {
878
- configId: number;
822
+ configId: number;
879
823
  }, boolean> | Request<'saveDeckConfig', 6, {
880
- config: DeckConfig;
824
+ config: DeckConfig;
881
825
  }, boolean> | Request<'setDeckConfigId', 6, {
882
- configId: number;
883
- decks: string[];
826
+ configId: number;
827
+ decks: string[];
884
828
  }, boolean>;
885
-
829
+ //#endregion
830
+ //#region src/types/note.d.ts
886
831
  type NoteModel = 'Basic' | 'Basic (and reversed card)' | 'Basic (type in the answer)' | 'Cloze' | (string & {});
887
832
  type NoteMedia = {
888
- data?: string;
889
- fields: string[];
890
- filename: string;
891
- path?: string;
892
- skipHash?: string;
893
- url?: string;
833
+ data?: string;
834
+ fields: string[];
835
+ filename: string;
836
+ path?: string;
837
+ skipHash?: string;
838
+ url?: string;
894
839
  };
895
840
  type Note = {
896
- audio?: NoteMedia[];
897
- deckName: string;
898
- fields: Record<string, string>;
899
- modelName: NoteModel;
900
- picture?: NoteMedia[];
901
- tags?: string[];
902
- video?: NoteMedia[];
841
+ audio?: NoteMedia[];
842
+ deckName: string;
843
+ fields: Record<string, string>;
844
+ modelName: NoteModel;
845
+ picture?: NoteMedia[];
846
+ tags?: string[];
847
+ video?: NoteMedia[];
903
848
  };
904
849
  type NoteWithCreationOptions = Note & {
905
- options?: {
906
- allowDuplicate?: boolean;
907
- duplicateScope?: 'deck' | (string & {});
908
- duplicateScopeOptions?: {
909
- checkAllModels?: boolean;
910
- checkChildren?: boolean;
911
- deckName?: null | string;
912
- };
850
+ options?: {
851
+ allowDuplicate?: boolean;
852
+ duplicateScope?: 'deck' | (string & {});
853
+ duplicateScopeOptions?: {
854
+ checkAllModels?: boolean;
855
+ checkChildren?: boolean;
856
+ deckName?: null | string;
913
857
  };
858
+ };
914
859
  };
915
860
  type NoteRequests = Request<'addNote', 6, {
916
- note: NoteWithCreationOptions;
861
+ note: NoteWithCreationOptions;
917
862
  }, null | number> | Request<'addNotes', 6, {
918
- notes: NoteWithCreationOptions[];
863
+ notes: NoteWithCreationOptions[];
919
864
  }, Array<null | string> | null> | Request<'addTags', 6, {
920
- notes: number[];
921
- tags: string;
865
+ notes: number[];
866
+ tags: string;
922
867
  }> | Request<'canAddNotes', 6, {
923
- notes: NoteWithCreationOptions[];
868
+ notes: NoteWithCreationOptions[];
924
869
  }, boolean[]> | Request<'canAddNotesWithErrorDetail', 6, {
925
- notes: NoteWithCreationOptions[];
870
+ notes: NoteWithCreationOptions[];
926
871
  }, Array<{
927
- canAdd: false;
928
- error: string;
872
+ canAdd: false;
873
+ error: string;
929
874
  } | {
930
- canAdd: true;
875
+ canAdd: true;
931
876
  }>> | Request<'clearUnusedTags', 6, never, string[]> | Request<'deleteNotes', 6, {
932
- notes: number[];
877
+ notes: number[];
933
878
  }> | Request<'findNotes', 6, {
934
- query: string;
879
+ query: string;
935
880
  }, number[]> | Request<'getNoteTags', 6, {
936
- note: number;
881
+ note: number;
937
882
  }, string[]> | Request<'getTags', 6, never, string[]> | Request<'notesInfo', 6, {
938
- notes: number[];
883
+ notes: number[];
939
884
  }, Array<{
940
- cards: number[];
941
- fields: Record<string, {
942
- order: number;
943
- value: string;
944
- }>;
945
- mod: number;
946
- modelName: string;
947
- noteId: number;
948
- profile: string;
949
- tags: string[];
885
+ cards: number[];
886
+ fields: Record<string, {
887
+ order: number;
888
+ value: string;
889
+ }>;
890
+ mod: number;
891
+ modelName: string;
892
+ noteId: number;
893
+ profile: string;
894
+ tags: string[];
950
895
  }>> | Request<'notesModTime', 6, {
951
- notes: number[];
896
+ notes: number[];
952
897
  }, Array<{
953
- mod: number;
954
- noteId: number;
898
+ mod: number;
899
+ noteId: number;
955
900
  }>> | Request<'removeEmptyNotes', 6> | Request<'removeTags', 6, {
956
- notes: number[];
957
- tags: string;
901
+ notes: number[];
902
+ tags: string;
958
903
  }> | Request<'replaceTags', 6, {
959
- notes: number[];
960
- replace_with_tag: string;
961
- tag_to_replace: string;
904
+ notes: number[];
905
+ replace_with_tag: string;
906
+ tag_to_replace: string;
962
907
  }> | Request<'replaceTagsInAllNotes', 6, {
963
- replace_with_tag: string;
964
- tag_to_replace: string;
908
+ replace_with_tag: string;
909
+ tag_to_replace: string;
965
910
  }> | Request<'updateNote', 6, {
966
- note: {
967
- audio?: NoteMedia[];
968
- fields: Record<string, string>;
969
- id: number;
970
- picture?: NoteMedia[];
971
- tags?: string[];
972
- video?: NoteMedia[];
973
- } | {
974
- fields?: Record<string, string>;
975
- id: number;
976
- tags: string[];
977
- };
911
+ note: {
912
+ audio?: NoteMedia[];
913
+ fields: Record<string, string>;
914
+ id: number;
915
+ picture?: NoteMedia[];
916
+ tags?: string[];
917
+ video?: NoteMedia[];
918
+ } | {
919
+ fields?: Record<string, string>;
920
+ id: number;
921
+ tags: string[];
922
+ };
978
923
  }> | Request<'updateNoteFields', 6, {
979
- note: {
980
- audio?: NoteMedia[];
981
- fields: Record<string, string>;
982
- id: number;
983
- picture?: NoteMedia[];
984
- video?: NoteMedia[];
985
- };
924
+ note: {
925
+ audio?: NoteMedia[];
926
+ fields: Record<string, string>;
927
+ id: number;
928
+ picture?: NoteMedia[];
929
+ video?: NoteMedia[];
930
+ };
986
931
  }> | Request<'updateNoteModel', 6, {
987
- note: {
988
- fields: Record<string, string>;
989
- id: number;
990
- modelName: string;
991
- tags: string[];
992
- };
993
- }> | Request<'updateNoteTags', 6, {
994
- note: number;
932
+ note: {
933
+ fields: Record<string, string>;
934
+ id: number;
935
+ modelName: string;
995
936
  tags: string[];
937
+ };
938
+ }> | Request<'updateNoteTags', 6, {
939
+ note: number;
940
+ tags: string[];
996
941
  }>;
997
-
942
+ //#endregion
943
+ //#region src/types/graphical.d.ts
998
944
  type GraphicalRequests = Request<'guiAddCards', 6, {
999
- note: Note;
945
+ note: Note;
1000
946
  }, number> | Request<'guiAnswerCard', 6, {
1001
- ease: number;
947
+ ease: number;
1002
948
  }, boolean> | Request<'guiBrowse', 6, {
1003
- query: string;
1004
- reorderCards?: {
1005
- columnId: CardBrowserColumns;
1006
- order: 'ascending' | 'descending';
1007
- };
949
+ query: string;
950
+ reorderCards?: {
951
+ columnId: CardBrowserColumns;
952
+ order: 'ascending' | 'descending';
953
+ };
1008
954
  }, number[]> | Request<'guiCheckDatabase', 6, never, true> | Request<'guiCurrentCard', 6, never, CardInfo | null> | Request<'guiDeckBrowser', 6> | Request<'guiDeckOverview', 6, {
1009
- name: string;
955
+ name: string;
1010
956
  }, boolean> | Request<'guiDeckReview', 6, {
1011
- name: string;
957
+ name: string;
1012
958
  }, boolean> | Request<'guiEditNote', 6, {
1013
- note: number;
959
+ note: number;
1014
960
  }> | Request<'guiExitAnki', 6> | Request<'guiImportFile', 6, {
1015
- path: string;
961
+ path: string;
1016
962
  }> | Request<'guiSelectCard', 6, {
1017
- card: number;
963
+ card: number;
1018
964
  }, boolean> | Request<'guiSelectedNotes', 6, never, number[]> | Request<'guiSelectNote', 6, {
1019
- note: number;
965
+ note: number;
1020
966
  }, boolean> | Request<'guiShowAnswer', 6, never, boolean> | Request<'guiShowQuestion', 6, never, boolean> | Request<'guiStartCardTimer', 6, never, true> | Request<'guiUndo', 6, never, boolean>;
1021
-
967
+ //#endregion
968
+ //#region src/types/media.d.ts
1022
969
  type MediaRequests = Request<'deleteMediaFile', 6, {
1023
- filename: string;
970
+ filename: string;
1024
971
  }> | Request<'getMediaDirPath', 6, never, string> | Request<'getMediaFilesNames', 6, {
1025
- pattern: string;
972
+ pattern: string;
1026
973
  }, string[]> | Request<'retrieveMediaFile', 6, {
1027
- filename: string;
974
+ filename: string;
1028
975
  }, false | string> | Request<'storeMediaFile', 6, {
1029
- data?: string;
1030
- deleteExisting?: boolean;
1031
- filename: string;
1032
- path?: string;
1033
- url?: string;
976
+ data?: string;
977
+ deleteExisting?: boolean;
978
+ filename: string;
979
+ path?: string;
980
+ url?: string;
1034
981
  }, string>;
1035
-
982
+ //#endregion
983
+ //#region src/types/miscellaneous.d.ts
1036
984
  type MiscellaneousRequests = Request<'apiReflect', 6, {
1037
- actions: null | string[];
1038
- scopes: Array<'actions'>;
985
+ actions: null | string[];
986
+ scopes: Array<'actions'>;
1039
987
  }, {
1040
- actions: string[];
1041
- scopes: string[];
988
+ actions: string[];
989
+ scopes: string[];
1042
990
  }> | Request<'exportPackage', 6, {
1043
- deck: string;
1044
- includeSched?: boolean;
1045
- path: string;
991
+ deck: string;
992
+ includeSched?: boolean;
993
+ path: string;
1046
994
  }, boolean> | Request<'getActiveProfile', 6, never, string> | Request<'getProfiles', 6, never, string[]> | Request<'importPackage', 6, {
1047
- path: string;
995
+ path: string;
1048
996
  }, boolean> | Request<'loadProfile', 6, {
1049
- name: string;
1050
- }, true> | Request<'multi', 6, // Crazy, have to call this experimental
997
+ name: string;
998
+ }, true> | Request<'multi', 6,
999
+ // Crazy, have to call this experimental
1051
1000
  {
1052
- actions: Array<{
1053
- action: Requests['action'];
1054
- params?: Requests['params'];
1055
- version?: number;
1056
- }>;
1001
+ actions: Array<{
1002
+ action: Requests['action'];
1003
+ params?: Requests['params'];
1004
+ version?: number;
1005
+ }>;
1057
1006
  }, Array<Requests['response'] | {
1058
- error: null | string;
1059
- result: Requests['response'];
1007
+ error: null | string;
1008
+ result: Requests['response'];
1060
1009
  }>> | Request<'reloadCollection', 6> | Request<'requestPermission', 6, never, {
1061
- permission: 'denied';
1010
+ permission: 'denied';
1062
1011
  } | {
1063
- permission: 'granted';
1064
- requireApiKey: boolean;
1065
- version: boolean;
1012
+ permission: 'granted';
1013
+ requireApiKey: boolean;
1014
+ version: boolean;
1066
1015
  }> | Request<'sync', 6> | Request<'version', 6, never, number>;
1067
-
1016
+ //#endregion
1017
+ //#region src/types/model.d.ts
1068
1018
  type ModelField = {
1069
- collapsed: boolean;
1070
- description: string;
1071
- excludeFromSearch: boolean;
1072
- font: string;
1073
- id: number;
1074
- name: string;
1075
- ord: number;
1076
- plainText: boolean;
1077
- preventDeletion: boolean;
1078
- rtl: boolean;
1079
- size: number;
1080
- sticky: boolean;
1081
- tag: null;
1019
+ collapsed: boolean;
1020
+ description: string;
1021
+ excludeFromSearch: boolean;
1022
+ font: string;
1023
+ id: number;
1024
+ name: string;
1025
+ ord: number;
1026
+ plainText: boolean;
1027
+ preventDeletion: boolean;
1028
+ rtl: boolean;
1029
+ size: number;
1030
+ sticky: boolean;
1031
+ tag: null;
1082
1032
  };
1083
1033
  type ModelTemplate = {
1084
- afmt: string;
1085
- bafmt: string;
1086
- bfont: string;
1087
- bqfmt: string;
1088
- bsize: number;
1089
- did: null;
1090
- id: number;
1091
- name: string;
1092
- ord: number;
1093
- qfmt: string;
1034
+ afmt: string;
1035
+ bafmt: string;
1036
+ bfont: string;
1037
+ bqfmt: string;
1038
+ bsize: number;
1039
+ did: null;
1040
+ id: number;
1041
+ name: string;
1042
+ ord: number;
1043
+ qfmt: string;
1094
1044
  };
1095
1045
  type Model = {
1096
- css: string;
1097
- did: null;
1098
- flds: ModelField[];
1099
- id: number;
1100
- latexPost: string;
1101
- latexPre: string;
1102
- latexsvg: boolean;
1103
- mod: number;
1104
- name: string;
1105
- originalStockKind: number;
1106
- req: Array<[number, string, number[]]>;
1107
- sortf: number;
1108
- tmpls: ModelTemplate[];
1109
- type: number;
1110
- usn: number;
1046
+ css: string;
1047
+ did: null;
1048
+ flds: ModelField[];
1049
+ id: number;
1050
+ latexPost: string;
1051
+ latexPre: string;
1052
+ latexsvg: boolean;
1053
+ mod: number;
1054
+ name: string;
1055
+ originalStockKind: number;
1056
+ req: Array<[number, string, number[]]>;
1057
+ sortf: number;
1058
+ tmpls: ModelTemplate[];
1059
+ type: number;
1060
+ usn: number;
1111
1061
  };
1112
1062
  type ModelToCreate = {
1113
- cardTemplates: Array<{
1114
- [key: string]: string;
1115
- Back: string;
1116
- Front: string;
1117
- }>;
1118
- css?: string;
1119
- inOrderFields: string[];
1120
- isCloze?: boolean;
1121
- modelName: string;
1063
+ cardTemplates: Array<{
1064
+ [key: string]: string;
1065
+ Back: string;
1066
+ Front: string;
1067
+ }>;
1068
+ css?: string;
1069
+ inOrderFields: string[];
1070
+ isCloze?: boolean;
1071
+ modelName: string;
1122
1072
  };
1123
1073
  type ModelRequests = Request<'createModel', 6, ModelToCreate, Model> | Request<'findAndReplaceInModels', 6, {
1124
- model: {
1125
- back: boolean;
1126
- css: boolean;
1127
- fieldText: string;
1128
- front: boolean;
1129
- modelName: string;
1130
- replaceText: string;
1131
- };
1074
+ model: {
1075
+ back: boolean;
1076
+ css: boolean;
1077
+ fieldText: string;
1078
+ front: boolean;
1079
+ modelName: string;
1080
+ replaceText: string;
1081
+ };
1132
1082
  }, number> | Request<'findModelsById', 6, {
1133
- modelIds: number[];
1083
+ modelIds: number[];
1134
1084
  }, Model[]> | Request<'findModelsByName', 6, {
1135
- modelNames: string[];
1085
+ modelNames: string[];
1136
1086
  }, Model[]> | Request<'modelFieldAdd', 6, {
1137
- fieldName: string;
1138
- index: number;
1139
- modelName: string;
1087
+ fieldName: string;
1088
+ index: number;
1089
+ modelName: string;
1140
1090
  }> | Request<'modelFieldDescriptions', 6, {
1141
- description: string;
1142
- fieldName: string;
1143
- modelName: string;
1091
+ description: string;
1092
+ fieldName: string;
1093
+ modelName: string;
1144
1094
  }, boolean> | Request<'modelFieldFonts', 6, {
1145
- modelName: string;
1095
+ modelName: string;
1146
1096
  }, Record<string, {
1147
- font: string;
1148
- size: number;
1097
+ font: string;
1098
+ size: number;
1149
1099
  }>> | Request<'modelFieldNames', 6, {
1150
- modelName: string;
1100
+ modelName: string;
1151
1101
  }, string[]> | Request<'modelFieldRemove', 6, {
1152
- fieldName: string;
1153
- modelName: string;
1102
+ fieldName: string;
1103
+ modelName: string;
1154
1104
  }> | Request<'modelFieldRename', 6, {
1155
- modelName: string;
1156
- newFieldName: string;
1157
- oldFieldName: string;
1105
+ modelName: string;
1106
+ newFieldName: string;
1107
+ oldFieldName: string;
1158
1108
  }> | Request<'modelFieldReposition', 6, {
1159
- fieldName: string;
1160
- index: number;
1161
- modelName: string;
1109
+ fieldName: string;
1110
+ index: number;
1111
+ modelName: string;
1162
1112
  }> | Request<'modelFieldSetDescription', 6, {
1163
- fieldName: string;
1164
- index: number;
1165
- modelName: string;
1113
+ fieldName: string;
1114
+ index: number;
1115
+ modelName: string;
1166
1116
  }> | Request<'modelFieldSetFont', 6, {
1167
- fieldName: string;
1168
- font: string;
1169
- modelName: string;
1117
+ fieldName: string;
1118
+ font: string;
1119
+ modelName: string;
1170
1120
  }> | Request<'modelFieldSetFontSize', 6, {
1171
- fieldName: string;
1172
- fontSize: number;
1173
- modelName: string;
1121
+ fieldName: string;
1122
+ fontSize: number;
1123
+ modelName: string;
1174
1124
  }> | Request<'modelFieldsOnTemplates', 6, {
1175
- modelName: string;
1125
+ modelName: string;
1176
1126
  }, Record<string, [string[], string[]]>> | Request<'modelNames', 6, never, string[]> | Request<'modelNamesAndIds', 6, never, Record<string, number>> | Request<'modelStyling', 6, {
1177
- modelName: string;
1127
+ modelName: string;
1178
1128
  }, {
1179
- css: string;
1129
+ css: string;
1180
1130
  }> | Request<'modelTemplateAdd', 6, {
1181
- modelName: string;
1182
- template: {
1183
- [key: string]: string;
1184
- Back: string;
1185
- Front: string;
1186
- };
1131
+ modelName: string;
1132
+ template: {
1133
+ [key: string]: string;
1134
+ Back: string;
1135
+ Front: string;
1136
+ };
1187
1137
  }> | Request<'modelTemplateRemove', 6, {
1188
- modelName: string;
1189
- templateName: string;
1138
+ modelName: string;
1139
+ templateName: string;
1190
1140
  }> | Request<'modelTemplateRename', 6, {
1191
- modelName: string;
1192
- newTemplateName: string;
1193
- oldTemplateName: string;
1141
+ modelName: string;
1142
+ newTemplateName: string;
1143
+ oldTemplateName: string;
1194
1144
  }> | Request<'modelTemplateReposition', 6, {
1195
- index: number;
1196
- modelName: string;
1197
- templateName: string;
1145
+ index: number;
1146
+ modelName: string;
1147
+ templateName: string;
1198
1148
  }> | Request<'modelTemplates', 6, {
1199
- modelName: string;
1149
+ modelName: string;
1200
1150
  }, Record<string, {
1201
- [key: string]: string;
1202
- Back: string;
1203
- Front: string;
1151
+ [key: string]: string;
1152
+ Back: string;
1153
+ Front: string;
1204
1154
  }>> | Request<'updateModelStyling', 6, {
1205
- model: {
1206
- css: string;
1207
- name: string;
1208
- };
1155
+ model: {
1156
+ css: string;
1157
+ name: string;
1158
+ };
1209
1159
  }> | Request<'updateModelTemplates', 6, {
1210
- model: {
1211
- name: string;
1212
- templates: Record<string, {
1213
- Back?: string;
1214
- Front?: string;
1215
- }>;
1216
- };
1160
+ model: {
1161
+ name: string;
1162
+ templates: Record<string, {
1163
+ Back?: string;
1164
+ Front?: string;
1165
+ }>;
1166
+ };
1217
1167
  }>;
1218
-
1219
- type ReviewStatisticTuple = [
1220
- reviewTime: number,
1221
- cardID: number,
1222
- usn: number,
1223
- buttonPressed: number,
1224
- newInterval: number,
1225
- previousInterval: number,
1226
- newFactor: number,
1227
- reviewDuration: number,
1228
- reviewType: number
1229
- ];
1168
+ //#endregion
1169
+ //#region src/types/statistic.d.ts
1170
+ type ReviewStatisticTuple = [reviewTime: number, cardID: number, usn: number, buttonPressed: number, newInterval: number, previousInterval: number, newFactor: number, reviewDuration: number, reviewType: number];
1230
1171
  type StatisticRequests = Request<'cardReviews', 6, {
1231
- deck: string;
1232
- startID: number;
1172
+ deck: string;
1173
+ startID: number;
1233
1174
  }, ReviewStatisticTuple[]> | Request<'getCollectionStatsHTML', 6, {
1234
- wholeCollection: boolean;
1175
+ wholeCollection: boolean;
1235
1176
  }, string> | Request<'getLatestReviewID', 6, {
1236
- deck: string;
1177
+ deck: string;
1237
1178
  }, number> | Request<'getNumCardsReviewedByDay', 6, never, Array<[string, number]>> | Request<'getNumCardsReviewedToday', 6, never, number> | Request<'getReviewsOfCards', 6, {
1238
- cards: string[];
1179
+ cards: string[];
1239
1180
  }, Record<string, Array<{
1240
- /** ButtonPressed */
1241
- ease: number;
1242
- /** NewFactor */
1243
- factor: number;
1244
- /** ReviewTime */
1245
- id: number;
1246
- /** NewInterval */
1247
- ivl: number;
1248
- /** PreviousInterval */
1249
- lastIvl: number;
1250
- /** ReviewDuration */
1251
- time: number;
1252
- /** ReviewType */
1253
- type: number;
1254
- /** Usn */
1255
- usn: number;
1181
+ /** ButtonPressed */
1182
+ ease: number;
1183
+ /** NewFactor */
1184
+ factor: number;
1185
+ /** ReviewTime */
1186
+ id: number;
1187
+ /** NewInterval */
1188
+ ivl: number;
1189
+ /** PreviousInterval */
1190
+ lastIvl: number;
1191
+ /** ReviewDuration */
1192
+ time: number;
1193
+ /** ReviewType */
1194
+ type: number;
1195
+ /** Usn */
1196
+ usn: number;
1256
1197
  }>>> | Request<'insertReviews', 6, {
1257
- reviews: ReviewStatisticTuple[];
1198
+ reviews: ReviewStatisticTuple[];
1258
1199
  }>;
1259
-
1200
+ //#endregion
1201
+ //#region src/types/shared.d.ts
1260
1202
  /**
1261
1203
  * Abstract wrapper over an Anki Connect action / response
1262
1204
  */
1263
1205
  type Request<Action extends string, Version extends AnkiConnectVersion, Params = never, Result = null> = {
1264
- action: Action;
1265
- params: Params;
1266
- response: {
1267
- error: null | string;
1268
- result: Result;
1269
- };
1270
- version: Version;
1206
+ action: Action;
1207
+ params: Params;
1208
+ response: {
1209
+ error: null | string;
1210
+ result: Result;
1211
+ };
1212
+ version: Version;
1271
1213
  };
1272
1214
  /**
1273
1215
  * Requests
1274
1216
  */
1275
1217
  type Requests = CardRequests | DeckRequests | GraphicalRequests | MediaRequests | MiscellaneousRequests | ModelRequests | NoteRequests | StatisticRequests;
1276
1218
  type AnkiConnectVersion = 6;
1277
- type ParamsForAction<T extends Requests['action']> = Extract<Requests, {
1278
- action: T;
1219
+ type ParamsForAction<T$1 extends Requests['action']> = Extract<Requests, {
1220
+ action: T$1;
1279
1221
  }>['params'];
1280
-
1222
+ //#endregion
1223
+ //#region src/types/card.d.ts
1224
+ type CardBrowserColumns = 'answer' | 'cardDue' | 'cardEase' | 'cardIvl' | 'cardLapses' | 'cardMod' | 'cardReps' | 'deck' | 'note' | 'noteCrt' | 'noteFld' | 'noteMod' | 'noteTags' | 'question' | 'template' | (string & {});
1225
+ type CardValueKeys = 'data' | 'did' | 'due' | 'factor' | 'flags' | 'id' | 'ivl' | 'lapses' | 'left' | 'mod' | 'odid' | 'odue' | 'ord' | 'queue' | 'reps' | 'type' | 'usn';
1226
+ type CardInfo = {
1227
+ answer: string;
1228
+ buttons?: number[];
1229
+ cardId: number;
1230
+ css: string;
1231
+ deckName: string;
1232
+ due: number;
1233
+ fieldOrder: number;
1234
+ fields: Record<string, {
1235
+ order: number;
1236
+ value: string;
1237
+ }>;
1238
+ interval: number;
1239
+ lapses: number;
1240
+ left: number;
1241
+ mod: number;
1242
+ modelName: string;
1243
+ nextReviews: string[];
1244
+ note: number;
1245
+ ord: number;
1246
+ question: string;
1247
+ queue: number;
1248
+ reps: number;
1249
+ template: string;
1250
+ type: number;
1251
+ };
1252
+ type CardRequests = Request<'answerCards', 6, {
1253
+ answers: Array<{
1254
+ cardId: number;
1255
+ ease: number;
1256
+ }>;
1257
+ }, boolean[]> | Request<'areDue', 6, {
1258
+ cards: number[];
1259
+ }, boolean[]> | Request<'areSuspended', 6, {
1260
+ cards: number[];
1261
+ }, Array<boolean | null>> | Request<'cardsInfo', 6, {
1262
+ cards: number[];
1263
+ }, CardInfo[]> | Request<'cardsModTime', 6, {
1264
+ cards: number[];
1265
+ }, {
1266
+ cardId: number;
1267
+ mod: number;
1268
+ }> | Request<'cardsToNotes', 6, {
1269
+ cards: number[];
1270
+ }, number[]> | Request<'findCards', 6, {
1271
+ query: string;
1272
+ }, number[]> | Request<'forgetCards', 6, {
1273
+ cards: number[];
1274
+ }> | Request<'getEaseFactors', 6, {
1275
+ cards: number[];
1276
+ }, number[]> | Request<'getIntervals', 6, {
1277
+ cards: number[];
1278
+ complete?: boolean;
1279
+ }, number[] | number[][]> | Request<'relearnCards', 6, {
1280
+ cards: number[];
1281
+ }> | Request<'setDueDate', 6, {
1282
+ cards: number[];
1283
+ days: string;
1284
+ }, boolean> | Request<'setEaseFactors', 6, {
1285
+ cards: number[];
1286
+ easeFactors: number[];
1287
+ }, boolean[]> | Request<'setSpecificValueOfCard', 6, {
1288
+ card: number;
1289
+ keys: CardValueKeys[];
1290
+ newValues: string[];
1291
+ }, boolean[]> | Request<'suspend', 6, {
1292
+ cards: number[];
1293
+ }, boolean> | Request<'suspended', 6, {
1294
+ card: number;
1295
+ }, boolean> | Request<'unsuspend', 6, {
1296
+ cards: number[];
1297
+ }, boolean>;
1298
+ //#endregion
1299
+ //#region src/client.d.ts
1281
1300
  /**
1282
1301
  * Subset of built-in Fetch interface that's actually used by Anki, for ease of
1283
1302
  * external re-implementation when passing a custom fetch function to
1284
1303
  * YankiClient.
1285
1304
  */
1286
1305
  type YankiFetchAdapter = (input: string, init?: {
1287
- body?: string;
1288
- headers?: Record<string, string>;
1289
- method?: string;
1290
- mode?: RequestMode;
1306
+ body?: string;
1307
+ headers?: Record<string, string>;
1308
+ method?: string;
1309
+ mode?: RequestMode;
1291
1310
  }) => Promise<undefined | {
1292
- headers: Headers | Record<string, string>;
1293
- json(): Promise<any>;
1294
- status: number;
1311
+ headers: Headers | Record<string, string>;
1312
+ json(): Promise<any>;
1313
+ status: number;
1295
1314
  }>;
1296
1315
  /** Optional options to pass when instantiating a new YankiConnect instance. */
1297
1316
  type YankiConnectOptions = {
1298
- /**
1299
- * Attempt to open the desktop Anki.app if it's not already running.
1300
- *
1301
- * - `true` will always attempt to open Anki _when a request is made_. This
1302
- * might introduce significant latency on the first launch.
1303
- * - `false` will never attempt to open Anki. Requests will fail until
1304
- * something or someone else opens the Anki app.
1305
- * - `immediately` is a special option that will open Anki when the client is
1306
- * instantiated.
1307
- *
1308
- * The Anki desktop app must be running for the client and the underlying
1309
- * Anki-Connect service to work.
1310
- *
1311
- * Currently supported on macOS only.
1312
- *
1313
- * The client does not attempt to close the app.
1314
- * @default false
1315
- */
1316
- autoLaunch: 'immediately' | boolean;
1317
- /**
1318
- * Advanced option to customize the resource fetch implementation used to make requests to Anki-Connect.
1319
- *
1320
- * Note that the signature reflects the subset of the built-in Fetch interface that's actually used by yanki-connect.
1321
- *
1322
- * The exact signature of this option is subject to change in the future.
1323
- * @default fetch
1324
- */
1325
- fetchAdapter: undefined | YankiFetchAdapter;
1326
- /**
1327
- * Host where the Anki-Connect service is running.
1328
- * @default 'http://127.0.0.1'
1329
- */
1330
- host: string;
1331
- /**
1332
- * Anki-Connect security key (optional)
1333
- * @default undefined
1334
- */
1335
- key: string | undefined;
1336
- /**
1337
- * Port where the Anki-Connect service is running.
1338
- * @default 8765
1339
- */
1340
- port: number;
1341
- /**
1342
- * Anki-Connect API version.
1343
- *
1344
- * Only API version 6 is supported for now.
1345
- * @default 6
1346
- */
1347
- version: AnkiConnectVersion;
1317
+ /**
1318
+ * Attempt to open the desktop Anki.app if it's not already running.
1319
+ *
1320
+ * - `true` will always attempt to open Anki _when a request is made_. This
1321
+ * might introduce significant latency on the first launch.
1322
+ * - `false` will never attempt to open Anki. Requests will fail until
1323
+ * something or someone else opens the Anki app.
1324
+ * - `immediately` is a special option that will open Anki when the client is
1325
+ * instantiated.
1326
+ *
1327
+ * The Anki desktop app must be running for the client and the underlying
1328
+ * Anki-Connect service to work.
1329
+ *
1330
+ * Currently supported on macOS only.
1331
+ *
1332
+ * The client does not attempt to close the app.
1333
+ * @default false
1334
+ */
1335
+ autoLaunch: 'immediately' | boolean;
1336
+ /**
1337
+ * Advanced option to customize the resource fetch implementation used to make requests to Anki-Connect.
1338
+ *
1339
+ * Note that the signature reflects the subset of the built-in Fetch interface that's actually used by yanki-connect.
1340
+ *
1341
+ * The exact signature of this option is subject to change in the future.
1342
+ * @default fetch
1343
+ */
1344
+ fetchAdapter: undefined | YankiFetchAdapter;
1345
+ /**
1346
+ * Host where the Anki-Connect service is running.
1347
+ * @default 'http://127.0.0.1'
1348
+ */
1349
+ host: string;
1350
+ /**
1351
+ * Anki-Connect security key (optional)
1352
+ * @default undefined
1353
+ */
1354
+ key: string | undefined;
1355
+ /**
1356
+ * Port where the Anki-Connect service is running.
1357
+ * @default 8765
1358
+ */
1359
+ port: number;
1360
+ /**
1361
+ * Anki-Connect API version.
1362
+ *
1363
+ * Only API version 6 is supported for now.
1364
+ * @default 6
1365
+ */
1366
+ version: AnkiConnectVersion;
1348
1367
  };
1349
1368
 
1350
1369
  declare const yankiModels: [{
@@ -1546,7 +1565,8 @@ type SyncNotesResult = Simplify<Pick<GlobalOptions, 'ankiWeb' | 'dryRun' | 'name
1546
1565
  * Syncs local notes to Anki.
1547
1566
  * @param allLocalNotes All the YankiNotes to sync
1548
1567
  * @returns The synced notes (with new IDs where applicable), plus some stats
1549
- * about the sync @throws
1568
+ * about the sync
1569
+ * @throws {Error} For various reasons...
1550
1570
  */
1551
1571
  declare function syncNotes(allLocalNotes: YankiNote[], options?: PartialDeep<SyncNotesOptions>): Promise<SyncNotesResult>;
1552
1572