@seedprotocol/sdk 0.1.40 → 0.1.42

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.
Files changed (35) hide show
  1. package/dist/{index-B6e21b8Z.js → index-CQMUGXEO.js} +105 -50
  2. package/dist/index-CQMUGXEO.js.map +1 -0
  3. package/dist/{index-BbMR37dq.js → index-CRxO3Kq1.js} +2 -2
  4. package/dist/index-CRxO3Kq1.js.map +1 -0
  5. package/dist/main.js +1 -1
  6. package/dist/{seed-C8LDZtnw.js → seed-CZTfFPC0.js} +3 -3
  7. package/dist/{seed-C8LDZtnw.js.map → seed-CZTfFPC0.js.map} +1 -1
  8. package/dist/{seed-E3XylWTI.js → seed-Du6tH8GQ.js} +2 -2
  9. package/dist/{seed-E3XylWTI.js.map → seed-Du6tH8GQ.js.map} +1 -1
  10. package/dist/{seed-Dm6nbxxo.js → seed-X5AZrDlF.js} +3 -3
  11. package/dist/{seed-Dm6nbxxo.js.map → seed-X5AZrDlF.js.map} +1 -1
  12. package/dist/{seed.schema.config-cLeX7Oyb.js → seed.schema.config-C1msLpdD.js} +3 -3
  13. package/dist/{seed.schema.config-cLeX7Oyb.js.map → seed.schema.config-C1msLpdD.js.map} +1 -1
  14. package/dist/types/src/browser/db/read/getItems.d.ts +7 -1
  15. package/dist/types/src/browser/db/read/getItems.d.ts.map +1 -1
  16. package/dist/types/src/browser/db/write/deleteItem.d.ts +8 -0
  17. package/dist/types/src/browser/db/write/deleteItem.d.ts.map +1 -0
  18. package/dist/types/src/browser/db/write/recoverDeletedItem.d.ts +5 -0
  19. package/dist/types/src/browser/db/write/recoverDeletedItem.d.ts.map +1 -0
  20. package/dist/types/src/browser/db/write.d.ts +0 -3
  21. package/dist/types/src/browser/db/write.d.ts.map +1 -1
  22. package/dist/types/src/browser/item/class.d.ts +1 -1
  23. package/dist/types/src/browser/item/class.d.ts.map +1 -1
  24. package/dist/types/src/browser/property/class.d.ts +0 -1
  25. package/dist/types/src/browser/property/class.d.ts.map +1 -1
  26. package/dist/types/src/browser/react/index.d.ts +1 -0
  27. package/dist/types/src/browser/react/index.d.ts.map +1 -1
  28. package/dist/types/src/browser/react/item.d.ts +9 -10
  29. package/dist/types/src/browser/react/item.d.ts.map +1 -1
  30. package/dist/types/src/browser/react/property.d.ts.map +1 -1
  31. package/dist/types/src/browser/react/trash.d.ts +6 -0
  32. package/dist/types/src/browser/react/trash.d.ts.map +1 -0
  33. package/package.json +1 -1
  34. package/dist/index-B6e21b8Z.js.map +0 -1
  35. package/dist/index-BbMR37dq.js.map +0 -1
@@ -3,7 +3,7 @@ import path, { basename } from 'path';
3
3
  import 'reflect-metadata';
4
4
  import { Type } from '@sinclair/typebox';
5
5
  import { fromCallback, setup, assign, createActor, waitFor, emit, raise } from 'xstate';
6
- import { sql, relations, and, eq, max, or, count, isNull, like } from 'drizzle-orm';
6
+ import { sql, relations, and, eq, max, or, count, isNotNull, isNull, like } from 'drizzle-orm';
7
7
  import { fs, configureSingle } from '@zenfs/core';
8
8
  import 'dayjs';
9
9
  import { customAlphabet } from 'nanoid';
@@ -984,7 +984,7 @@ const hydrateFromDb = fromCallback(({ sendBack, input: { context } }) => {
984
984
  renderValue: refResolvedDisplayValue,
985
985
  });
986
986
  if (propertyNameFromDb === 'storageTransactionId') {
987
- const { Item } = yield import('./index-BbMR37dq.js');
987
+ const { Item } = yield import('./index-CRxO3Kq1.js');
988
988
  const item = yield Item.find({
989
989
  seedLocalId,
990
990
  modelName: itemModelName,
@@ -1139,12 +1139,6 @@ const createNewItem = (_a) => __awaiter(void 0, void 0, void 0, function* () {
1139
1139
  versionLocalId: newVersionId,
1140
1140
  };
1141
1141
  });
1142
- const deleteItem = (_a) => __awaiter(void 0, [_a], void 0, function* ({ seedLocalId }) {
1143
- const appDb = getAppDb();
1144
- yield appDb.run(sql.raw(`UPDATE seeds
1145
- SET _marked_for_deletion = 1
1146
- WHERE local_id = '${seedLocalId}';`));
1147
- });
1148
1142
  const updateItemPropertyValue = (_a) => __awaiter(void 0, [_a], void 0, function* ({ propertyLocalId, propertyName, newValue, seedUid, seedLocalId, modelName, refSeedType, refResolvedValue, refResolvedDisplayValue, versionLocalId, versionUid, schemaUid, }) {
1149
1143
  if (!propertyLocalId && !seedLocalId) {
1150
1144
  logger$k(`[db/write] [updateItemPropertyValue] no propertyLocalId or seedLocalId for property: ${propertyName}`);
@@ -1660,6 +1654,7 @@ class ItemProperty {
1660
1654
  if (!propertyName) {
1661
1655
  throw new Error(`Property name not provided`);
1662
1656
  }
1657
+ this._lastRenderedValue = propertyValue;
1663
1658
  const serviceInput = {
1664
1659
  propertyValue,
1665
1660
  seedUid,
@@ -1746,7 +1741,12 @@ class ItemProperty {
1746
1741
  }
1747
1742
  if (skipTransform && !this._alias) ;
1748
1743
  this._subject.next(renderValue);
1749
- // this._lastRenderedValue = renderValue
1744
+ if (context.seedLocalId) {
1745
+ eventEmitter.emit(`item.${itemModelName}.${context.seedLocalId}.update`);
1746
+ }
1747
+ if (context.seedUid) {
1748
+ eventEmitter.emit(`item.${itemModelName}.${context.seedUid}.update`);
1749
+ }
1750
1750
  });
1751
1751
  this._service.start();
1752
1752
  }
@@ -3097,9 +3097,9 @@ const itemMachineSingle = setup({
3097
3097
  },
3098
3098
  });
3099
3099
 
3100
- const getItemsData = (modelName) => __awaiter(void 0, void 0, void 0, function* () {
3100
+ const getItemsData = (_a) => __awaiter(void 0, [_a], void 0, function* ({ modelName, deleted, }) {
3101
3101
  const appDb = getAppDb();
3102
- const itemsData = (yield appDb
3102
+ let query = appDb
3103
3103
  .select({
3104
3104
  seedLocalId: seeds.localId,
3105
3105
  seedUid: seeds.uid,
@@ -3112,8 +3112,17 @@ const getItemsData = (modelName) => __awaiter(void 0, void 0, void 0, function*
3112
3112
  })
3113
3113
  .from(seeds)
3114
3114
  .leftJoin(versions, eq(seeds.localId, versions.seedLocalId))
3115
- .where(and(eq(seeds.type, modelName.toLowerCase()), or(isNull(seeds._markedForDeletion), eq(seeds._markedForDeletion, 0))))
3116
- .groupBy(seeds.localId));
3115
+ .$dynamic();
3116
+ if (modelName) {
3117
+ query = query.where(eq(seeds.type, modelName.toLowerCase()));
3118
+ }
3119
+ if (deleted) {
3120
+ query = query.where(or(isNotNull(seeds._markedForDeletion), eq(seeds._markedForDeletion, 1)));
3121
+ }
3122
+ if (!deleted) {
3123
+ query = query.where(or(isNull(seeds._markedForDeletion), eq(seeds._markedForDeletion, 0)));
3124
+ }
3125
+ const itemsData = (yield query.groupBy(seeds.localId));
3117
3126
  return itemsData;
3118
3127
  });
3119
3128
 
@@ -3400,9 +3409,9 @@ class Item {
3400
3409
  return Item.create(Object.assign(Object.assign({}, itemData), { modelName }));
3401
3410
  });
3402
3411
  }
3403
- static all(modelName) {
3412
+ static all(modelName, deleted) {
3404
3413
  return __awaiter(this, void 0, void 0, function* () {
3405
- const itemsData = yield getItemsData(modelName);
3414
+ const itemsData = yield getItemsData({ modelName, deleted });
3406
3415
  const itemInstances = [];
3407
3416
  for (const itemData of itemsData) {
3408
3417
  itemInstances.push(yield Item.create(Object.assign(Object.assign({}, itemData), { modelName })));
@@ -4362,7 +4371,7 @@ const addModelsToDb = fromCallback(({ sendBack, input: { context } }) => {
4362
4371
  if (!models$1) {
4363
4372
  return;
4364
4373
  }
4365
- const { models: SeedModels } = yield import('./seed.schema.config-cLeX7Oyb.js');
4374
+ const { models: SeedModels } = yield import('./seed.schema.config-C1msLpdD.js');
4366
4375
  const allModels = Object.assign(Object.assign({}, SeedModels), models$1);
4367
4376
  let hasModelsInDb = false;
4368
4377
  const schemaDefsByModelName = new Map();
@@ -5838,11 +5847,11 @@ const globalMachine = setup({
5838
5847
  (_a) => __awaiter(void 0, [_a], void 0, function* ({ context }) {
5839
5848
  let SeedClass;
5840
5849
  if (context.environment === 'node') {
5841
- const { SeedNode } = yield import('./seed-C8LDZtnw.js');
5850
+ const { SeedNode } = yield import('./seed-CZTfFPC0.js');
5842
5851
  SeedClass = SeedNode;
5843
5852
  }
5844
5853
  else {
5845
- const { SeedBrowser } = yield import('./seed-Dm6nbxxo.js');
5854
+ const { SeedBrowser } = yield import('./seed-X5AZrDlF.js');
5846
5855
  SeedClass = SeedBrowser;
5847
5856
  }
5848
5857
  return SeedClass;
@@ -6099,13 +6108,19 @@ const useGlobalServiceStatus = () => {
6099
6108
 
6100
6109
  const logger$2 = debug('app:react:item');
6101
6110
  const useItem = ({ modelName, seedLocalId, seedUid }) => {
6102
- const [item, setItem] = useImmer(undefined);
6111
+ const [itemData, setItemData] = useImmer({});
6112
+ const [item, setItem] = useState();
6103
6113
  const [itemSubscription, setItemSubscription] = useState();
6104
6114
  const { status, internalStatus } = useGlobalServiceStatus();
6105
6115
  const isReadingDb = useRef(false);
6106
6116
  const itemStatus = useSelector(item === null || item === void 0 ? void 0 : item.getService(), (snapshot) => snapshot === null || snapshot === void 0 ? void 0 : snapshot.value);
6107
6117
  const updateItem = useCallback((newItem) => {
6108
- setItem(() => newItem);
6118
+ setItemData((draft) => {
6119
+ Object.keys(newItem.properties).forEach((propertyName) => {
6120
+ const value = newItem[propertyName];
6121
+ draft[propertyName] = value;
6122
+ });
6123
+ });
6109
6124
  }, []);
6110
6125
  const readFromDb = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
6111
6126
  if (isReadingDb.current ||
@@ -6123,12 +6138,17 @@ const useItem = ({ modelName, seedLocalId, seedUid }) => {
6123
6138
  logger$2('[useItem] [getItemFromDb] no item found', modelName, seedLocalId);
6124
6139
  return;
6125
6140
  }
6141
+ setItem(foundItem);
6126
6142
  updateItem(foundItem);
6127
6143
  isReadingDb.current = false;
6128
6144
  }), [internalStatus]);
6145
+ const listenerRef = useRef(readFromDb);
6146
+ useEffect(() => {
6147
+ listenerRef.current = readFromDb;
6148
+ }, [readFromDb]);
6129
6149
  useEffect(() => {
6130
6150
  if (internalStatus === 'ready') {
6131
- readFromDb();
6151
+ listenerRef.current();
6132
6152
  }
6133
6153
  }, [internalStatus, status]);
6134
6154
  useEffect(() => {
@@ -6139,7 +6159,8 @@ const useItem = ({ modelName, seedLocalId, seedUid }) => {
6139
6159
  logger$2('[useItem] [itemSubscription] no item found', modelName, seedLocalId);
6140
6160
  return;
6141
6161
  }
6142
- setItem(() => newItem);
6162
+ updateItem(newItem);
6163
+ setItem(newItem);
6143
6164
  }));
6144
6165
  setItemSubscription(subscription);
6145
6166
  }
@@ -6149,17 +6170,20 @@ const useItem = ({ modelName, seedLocalId, seedUid }) => {
6149
6170
  }, [item, itemSubscription]);
6150
6171
  useEffect(() => {
6151
6172
  const seedId = seedUid || seedLocalId;
6152
- eventEmitter.addListener(`item.${modelName}.${seedId}.update`, readFromDb);
6173
+ eventEmitter.addListener(`item.${modelName}.${seedId}.update`, () => {
6174
+ listenerRef.current();
6175
+ });
6153
6176
  return () => {
6154
6177
  eventEmitter.removeListener(`item.${modelName}.${seedId}.update`, readFromDb);
6155
6178
  };
6156
6179
  }, []);
6157
6180
  return {
6158
6181
  item,
6182
+ itemData,
6159
6183
  itemStatus,
6160
6184
  };
6161
6185
  };
6162
- const useItems = ({ modelName, options }) => {
6186
+ const useItems = ({ modelName, deleted }) => {
6163
6187
  const [items, setItems] = useImmer([]);
6164
6188
  const [isReadingDb, setIsReadingDb] = useState(false);
6165
6189
  const [isInitialized, setIsInitialized] = useState(false);
@@ -6173,7 +6197,7 @@ const useItems = ({ modelName, options }) => {
6173
6197
  return;
6174
6198
  }
6175
6199
  setIsReadingDb(true);
6176
- const allItems = yield Item.all(modelNameRef.current);
6200
+ const allItems = yield Item.all(modelNameRef.current, deleted);
6177
6201
  setItems(() => allItems);
6178
6202
  setIsReadingDb(false);
6179
6203
  }), [modelName, isReadingDb]);
@@ -6245,30 +6269,13 @@ const useCreateItem = (modelName) => {
6245
6269
  isCreatingItem,
6246
6270
  };
6247
6271
  };
6248
- const useDeleteItem = () => {
6249
- const [isDeletingItem, setIsDeletingItem] = useState(false);
6250
- const destroy = useCallback((item) => __awaiter(void 0, void 0, void 0, function* () {
6251
- if (!item) {
6252
- return;
6253
- }
6254
- setIsDeletingItem(true);
6255
- const { modelName } = item.getService().getSnapshot().context;
6256
- yield deleteItem({ seedLocalId: item.seedLocalId });
6257
- eventEmitter.emit('item.requestAll', { modelName });
6258
- setIsDeletingItem(false);
6259
- }), [isDeletingItem]);
6260
- useEffect(() => { }, []);
6261
- return {
6262
- deleteItem: destroy,
6263
- isDeletingItem,
6264
- };
6265
- };
6266
6272
 
6267
6273
  const logger$1 = debug('app:react:property');
6268
6274
  const useItemProperty = ({ propertyName, seedLocalId, seedUid, }) => {
6269
- const [property, setProperty] = useImmer(undefined);
6275
+ const [property, setProperty] = useState();
6270
6276
  const [isReadingFromDb, setIsReadingFromDb] = useState(false);
6271
6277
  const [isInitialized, setIsInitialized] = useState(false);
6278
+ // const isDbReady = useMemo(() => useIsDbReady(), [])
6272
6279
  const { internalStatus } = useGlobalServiceStatus();
6273
6280
  const value = useSelector(property === null || property === void 0 ? void 0 : property.getService(), (snapshot) => {
6274
6281
  if (!snapshot || !snapshot.context) {
@@ -6283,8 +6290,7 @@ const useItemProperty = ({ propertyName, seedLocalId, seedUid, }) => {
6283
6290
  // }
6284
6291
  // }, [property, value])
6285
6292
  const readFromDb = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
6286
- if (!isAppDbReady() ||
6287
- internalStatus !== 'ready' ||
6293
+ if (internalStatus !== 'ready' ||
6288
6294
  isReadingFromDb ||
6289
6295
  (!seedLocalId && !seedUid)) {
6290
6296
  return;
@@ -6295,6 +6301,7 @@ const useItemProperty = ({ propertyName, seedLocalId, seedUid, }) => {
6295
6301
  seedLocalId,
6296
6302
  seedUid,
6297
6303
  });
6304
+ console.log(`[useItemPropertyTest] [readFromDb] ${propertyName} foundProperty`, foundProperty);
6298
6305
  setIsReadingFromDb(false);
6299
6306
  if (!foundProperty) {
6300
6307
  logger$1(`[useItemPropertyTest] [readFromDb] no property found for Item.${seedLocalId}.${propertyName}`);
@@ -6303,15 +6310,34 @@ const useItemProperty = ({ propertyName, seedLocalId, seedUid, }) => {
6303
6310
  if (foundProperty.status === 'waitingForDb') {
6304
6311
  foundProperty.getService().send({ type: 'waitForDbSuccess' });
6305
6312
  }
6306
- setProperty(() => foundProperty);
6313
+ setProperty(foundProperty);
6307
6314
  setIsInitialized(true);
6308
6315
  }), [internalStatus, isReadingFromDb]);
6316
+ // let count = 0
6317
+ //
6318
+ // const refresh = useCallback(() => {
6319
+ // count++
6320
+ // console.log('[useItemPropertyTest] [refresh] property', property)
6321
+ // }, [property])
6309
6322
  useEffect(() => {
6310
6323
  if (internalStatus === 'ready') {
6311
- console.log('[useItemPropertyTest] [useEffect] internalStatus is ready');
6312
6324
  readFromDb();
6313
6325
  }
6314
6326
  }, [internalStatus]);
6327
+ // useEffect(() => {
6328
+ // eventEmitter.addListener(
6329
+ // `property.${seedUid || seedLocalId}.${propertyName}.update`,
6330
+ // (event) => {
6331
+ // refresh()
6332
+ // },
6333
+ // )
6334
+ //
6335
+ // return () => {
6336
+ // eventEmitter.removeListener(
6337
+ // `property.${seedUid || seedLocalId}.${propertyName}.update`,
6338
+ // )
6339
+ // }
6340
+ // }, [])
6315
6341
  return {
6316
6342
  property,
6317
6343
  isInitialized,
@@ -6353,6 +6379,35 @@ const useItemProperties = (item) => {
6353
6379
 
6354
6380
  debug('app:react:db');
6355
6381
 
6382
+ const deleteItem = (_a) => __awaiter(void 0, [_a], void 0, function* ({ seedLocalId, seedUid }) {
6383
+ const appDb = getAppDb();
6384
+ yield appDb
6385
+ .update(seeds)
6386
+ .set({
6387
+ _markedForDeletion: 1,
6388
+ })
6389
+ .where(or(eq(seeds.localId, seedLocalId), eq(seeds.uid, seedUid)));
6390
+ });
6391
+
6392
+ const useDeleteItem = () => {
6393
+ const [isDeletingItem, setIsDeletingItem] = useState(false);
6394
+ const destroy = useCallback((item) => __awaiter(void 0, void 0, void 0, function* () {
6395
+ if (!item) {
6396
+ return;
6397
+ }
6398
+ setIsDeletingItem(true);
6399
+ const { modelName } = item.getService().getSnapshot().context;
6400
+ yield deleteItem({ seedLocalId: item.seedLocalId });
6401
+ eventEmitter.emit('item.requestAll', { modelName });
6402
+ setIsDeletingItem(false);
6403
+ }), [isDeletingItem]);
6404
+ useEffect(() => { }, []);
6405
+ return {
6406
+ deleteItem: destroy,
6407
+ isDeletingItem,
6408
+ };
6409
+ };
6410
+
6356
6411
  const logger = debug('app:services:events');
6357
6412
  const handleServiceSaveState = (event) => {
6358
6413
  const { state, serviceId } = event;
@@ -6643,7 +6698,7 @@ const client = {
6643
6698
  console.error('fs listeners not ready during init');
6644
6699
  }
6645
6700
  globalService.send({ type: 'init', endpoints, models, addresses });
6646
- import('./seed.schema.config-cLeX7Oyb.js').then(({ models }) => {
6701
+ import('./seed.schema.config-C1msLpdD.js').then(({ models }) => {
6647
6702
  for (const [key, value] of Object.entries(models)) {
6648
6703
  setModel(key, value);
6649
6704
  }
@@ -6700,4 +6755,4 @@ if (isNode()) {
6700
6755
  }
6701
6756
 
6702
6757
  export { CHILD_SNAPSHOT as C, GET_SCHEMAS as G, Item as I, Json as J, List as L, Model as M, Property as P, Relation as R, Text as T, GET_SEEDS as a, GET_SEED_IDS as b, GET_STORAGE_TRANSACTION_ID as c, GET_VERSIONS as d, GET_PROPERTIES as e, GET_ALL_PROPERTIES_FOR_ALL_VERSIONS as f, itemMachineAll as g, internalMachine as h, itemMachineSingle as i, isNode as j, isBrowser as k, isReactNative as l, ImageSrc as m, ItemProperty as n, useItem as o, useItemProperties as p, useCreateItem as q, useItemProperty as r, useDeleteItem as s, useGlobalServiceStatus as t, useItems as u, useServices as v, withSeed as w, getGlobalService as x, client as y, getCorrectId as z };
6703
- //# sourceMappingURL=index-B6e21b8Z.js.map
6758
+ //# sourceMappingURL=index-CQMUGXEO.js.map