MCPcopy Index your code
hub / github.com/tinyplex/tinybase / setIndexDefinition

Function setIndexDefinition

src/indexes/index.ts:83–217  ·  view source on GitHub ↗
(
    indexId: Id,
    tableId: Id,
    getSliceIdOrIds?: Id | ((getCell: GetCell, rowId: Id) => Id | Ids),
    getSortKey?: Id | ((getCell: GetCell, rowId: Id) => SortKey),
    sliceIdSorter?: (sliceId1: Id, sliceId2: Id) => number,
    rowIdSorter: (
      sortKey1: SortKey,
      sortKey2: SortKey,
      sliceId: Id,
    ) => number = defaultSorter,
  )

Source from the content-addressed store, hash-verified

81 collHas(getIndex(indexId), sliceId);
82
83 const setIndexDefinition = (
84 indexId: Id,
85 tableId: Id,
86 getSliceIdOrIds?: Id | ((getCell: GetCell, rowId: Id) => Id | Ids),
87 getSortKey?: Id | ((getCell: GetCell, rowId: Id) => SortKey),
88 sliceIdSorter?: (sliceId1: Id, sliceId2: Id) => number,
89 rowIdSorter: (
90 sortKey1: SortKey,
91 sortKey2: SortKey,
92 sliceId: Id,
93 ) => number = defaultSorter,
94 ): Indexes => {
95 const sliceIdArraySorter = isUndefined(sliceIdSorter)
96 ? undefined
97 : ([id1]: [Id, IdSet], [id2]: [Id, IdSet]): number =>
98 (sliceIdSorter as (sliceId1: Id, sliceId2: Id) => number)(id1, id2);
99
100 setDefinitionAndListen(
101 indexId,
102 tableId,
103 (
104 change: () => void,
105 changedSliceIds: IdMap<[Id | Ids | undefined, Id | Ids | undefined]>,
106 changedSortKeys: IdMap<SortKey>,
107 sliceIdOrIdsByRowId?: IdMap<Id | Ids>,
108 sortKeys?: IdMap<SortKey>,
109 force?: boolean,
110 ) => {
111 let sliceIdsChanged = 0;
112 const changedSlices: IdSet = setNew();
113 const unsortedSlices: IdSet = setNew();
114 const index = getIndex(indexId);
115 collForEach(
116 changedSliceIds,
117 ([oldSliceIdOrIds, newSliceIdOrIds], rowId) => {
118 const oldSliceIds = setNew(oldSliceIdOrIds);
119 const newSliceIds = setNew(newSliceIdOrIds);
120 collForEach(oldSliceIds, (oldSliceId) =>
121 collDel(newSliceIds, oldSliceId)
122 ? collDel(oldSliceIds, oldSliceId)
123 : 0,
124 );
125
126 collForEach(oldSliceIds, (oldSliceId) => {
127 setAdd(changedSlices, oldSliceId);
128 ifNotUndefined(mapGet(index, oldSliceId), (oldSlice) => {
129 collDel(oldSlice, rowId);
130 if (collIsEmpty(oldSlice)) {
131 mapSet(index, oldSliceId);
132 sliceIdsChanged = 1;
133 }
134 });
135 });
136
137 collForEach(newSliceIds, (newSliceId) => {
138 setAdd(changedSlices, newSliceId);
139 if (!collHas(index, newSliceId)) {
140 mapSet(index, newSliceId, setNew());

Callers

nothing calls this directly

Calls 15

isUndefinedFunction · 0.90
setNewFunction · 0.90
collForEachFunction · 0.90
collDelFunction · 0.90
setAddFunction · 0.90
mapGetFunction · 0.90
collIsEmptyFunction · 0.90
mapSetFunction · 0.90
collHasFunction · 0.90
mapForEachFunction · 0.90
arrayForEachFunction · 0.90
isArrayFunction · 0.90

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…