@plasmicapp/data-sources 0.1.119 → 0.1.121

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.
@@ -499,8 +499,85 @@ function makeCacheKey(dataOp, opts) {
499
499
  });
500
500
  return dataOp.cacheKey ? "" + dataOp.cacheKey + queryDependencies : queryDependencies;
501
501
  }
502
+ function usePlasmicInvalidate() {
503
+ var _usePlasmicDataConfig = query.usePlasmicDataConfig(),
504
+ cache = _usePlasmicDataConfig.cache,
505
+ fallback = _usePlasmicDataConfig.fallback,
506
+ mutate = _usePlasmicDataConfig.mutate;
507
+ return /*#__PURE__*/function () {
508
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(invalidatedKeys) {
509
+ var getKeysToInvalidate, keys, invalidateKey;
510
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
511
+ while (1) switch (_context2.prev = _context2.next) {
512
+ case 0:
513
+ getKeysToInvalidate = function getKeysToInvalidate() {
514
+ if (!invalidatedKeys) {
515
+ return [];
516
+ }
517
+ var allKeys = Array.from(new Set([].concat(cache.keys(), fallback ? Object.keys(fallback) : []))).filter(function (key) {
518
+ return typeof key === 'string';
519
+ });
520
+ if (invalidatedKeys.includes('plasmic_refresh_all')) {
521
+ return allKeys;
522
+ }
523
+ return allKeys.filter(function (key) {
524
+ return invalidatedKeys.some(function (k) {
525
+ return key.includes(".$." + k + ".$.");
526
+ });
527
+ });
528
+ };
529
+ keys = getKeysToInvalidate();
530
+ if (!(keys.length === 0)) {
531
+ _context2.next = 4;
532
+ break;
533
+ }
534
+ return _context2.abrupt("return");
535
+ case 4:
536
+ invalidateKey = /*#__PURE__*/function () {
537
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(key) {
538
+ var studioInvalidate;
539
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
540
+ while (1) switch (_context.prev = _context.next) {
541
+ case 0:
542
+ studioInvalidate = globalThis.__PLASMIC_MUTATE_DATA_OP;
543
+ if (!studioInvalidate) {
544
+ _context.next = 4;
545
+ break;
546
+ }
547
+ _context.next = 4;
548
+ return studioInvalidate(key);
549
+ case 4:
550
+ return _context.abrupt("return", mutate(key));
551
+ case 5:
552
+ case "end":
553
+ return _context.stop();
554
+ }
555
+ }, _callee);
556
+ }));
557
+ return function invalidateKey(_x2) {
558
+ return _ref2.apply(this, arguments);
559
+ };
560
+ }();
561
+ _context2.next = 7;
562
+ return Promise.all(keys.map(function (key) {
563
+ return invalidateKey(key);
564
+ }));
565
+ case 7:
566
+ return _context2.abrupt("return", _context2.sent);
567
+ case 8:
568
+ case "end":
569
+ return _context2.stop();
570
+ }
571
+ }, _callee2);
572
+ }));
573
+ return function (_x) {
574
+ return _ref.apply(this, arguments);
575
+ };
576
+ }();
577
+ }
502
578
  var enableLoadingBoundaryKey = 'plasmicInternalEnableLoadingBoundary';
503
579
  function mkUndefinedDataProxy(promiseRef, fetchAndUpdateCache) {
580
+ var fetchAndUpdatePromise = undefined;
504
581
  return new Proxy({}, {
505
582
  get: function get(_target, prop) {
506
583
  if (prop === 'isPlasmicUndefinedDataProxy') {
@@ -514,11 +591,28 @@ function mkUndefinedDataProxy(promiseRef, fetchAndUpdateCache) {
514
591
  // and trigger the usual fallback behavior
515
592
  return undefined;
516
593
  }
594
+ var doFetchAndUpdate = function doFetchAndUpdate() {
595
+ // We hold onto the promise last returned by fetchAndUpdateCache()
596
+ // and keep reusing it until it is resolved. The reason is that the
597
+ // Promise thrown here will be used as a dependency for memoized
598
+ // fetchAndUpdateCache, which is a dependency on the memoized returned value
599
+ // from usePlasmicDataOp(). If we have a fetch that's taking a long time,
600
+ // we want to make sure that our memoized returned value is stable,
601
+ // so that we don't keep calling setDollarQueries() (otherwise, for each
602
+ // render, we find an unstable result, and call setDollarQueries(),
603
+ // resulting in an infinite loop while fetch is happening).
604
+ if (!fetchAndUpdatePromise) {
605
+ fetchAndUpdatePromise = fetchAndUpdateCache()["finally"](function () {
606
+ fetchAndUpdatePromise = undefined;
607
+ });
608
+ }
609
+ return fetchAndUpdatePromise;
610
+ };
517
611
  var promise =
518
612
  // existing fetch
519
613
  promiseRef.fetchingPromise ||
520
614
  // No existing fetch, so kick off a fetch
521
- fetchAndUpdateCache();
615
+ doFetchAndUpdate();
522
616
  promise.plasmicType = 'PlasmicUndefinedDataError';
523
617
  promise.message = "Cannot read property " + String(prop) + " - data is still loading";
524
618
  throw promise;
@@ -727,85 +821,85 @@ function usePlasmicDataOp(dataOp, opts) {
727
821
  function usePlasmicDataMutationOp(dataOp) {
728
822
  var ctx = dataSourcesContext.usePlasmicDataSourceContext();
729
823
  var userToken = ctx == null ? void 0 : ctx.userAuthToken;
730
- var getRealDataOp = React.useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
824
+ var getRealDataOp = React.useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
731
825
  var tryGetRealDataOp;
732
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
733
- while (1) switch (_context3.prev = _context3.next) {
826
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
827
+ while (1) switch (_context4.prev = _context4.next) {
734
828
  case 0:
735
829
  tryGetRealDataOp = /*#__PURE__*/function () {
736
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
830
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
737
831
  var resolved;
738
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
739
- while (1) switch (_context2.prev = _context2.next) {
832
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
833
+ while (1) switch (_context3.prev = _context3.next) {
740
834
  case 0:
741
835
  resolved = resolveDataOp(dataOp);
742
836
  if (resolved) {
743
- _context2.next = 5;
837
+ _context3.next = 5;
744
838
  break;
745
839
  }
746
- return _context2.abrupt("return", null);
840
+ return _context3.abrupt("return", null);
747
841
  case 5:
748
842
  if (!isPlasmicUndefinedDataErrorPromise(resolved)) {
749
- _context2.next = 11;
843
+ _context3.next = 11;
750
844
  break;
751
845
  }
752
- _context2.next = 8;
846
+ _context3.next = 8;
753
847
  return resolved;
754
848
  case 8:
755
- return _context2.abrupt("return", tryGetRealDataOp());
849
+ return _context3.abrupt("return", tryGetRealDataOp());
756
850
  case 11:
757
- return _context2.abrupt("return", resolved);
851
+ return _context3.abrupt("return", resolved);
758
852
  case 12:
759
853
  case "end":
760
- return _context2.stop();
854
+ return _context3.stop();
761
855
  }
762
- }, _callee2);
856
+ }, _callee3);
763
857
  }));
764
858
  return function tryGetRealDataOp() {
765
- return _ref3.apply(this, arguments);
859
+ return _ref4.apply(this, arguments);
766
860
  };
767
861
  }();
768
- _context3.next = 3;
862
+ _context4.next = 3;
769
863
  return tryGetRealDataOp();
770
864
  case 3:
771
- return _context3.abrupt("return", _context3.sent);
865
+ return _context4.abrupt("return", _context4.sent);
772
866
  case 4:
773
867
  case "end":
774
- return _context3.stop();
868
+ return _context4.stop();
775
869
  }
776
- }, _callee3);
870
+ }, _callee4);
777
871
  })), [dataOp]);
778
- return React.useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
872
+ return React.useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
779
873
  var _yield$getRealDataOp;
780
- var _ref5, sourceId, opId, userArgs;
781
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
782
- while (1) switch (_context4.prev = _context4.next) {
874
+ var _ref6, sourceId, opId, userArgs;
875
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
876
+ while (1) switch (_context5.prev = _context5.next) {
783
877
  case 0:
784
- _context4.next = 2;
878
+ _context5.next = 2;
785
879
  return getRealDataOp();
786
880
  case 2:
787
- _context4.t0 = _yield$getRealDataOp = _context4.sent;
788
- if (!(_context4.t0 != null)) {
789
- _context4.next = 7;
881
+ _context5.t0 = _yield$getRealDataOp = _context5.sent;
882
+ if (!(_context5.t0 != null)) {
883
+ _context5.next = 7;
790
884
  break;
791
885
  }
792
- _context4.t1 = _yield$getRealDataOp;
793
- _context4.next = 8;
886
+ _context5.t1 = _yield$getRealDataOp;
887
+ _context5.next = 8;
794
888
  break;
795
889
  case 7:
796
- _context4.t1 = {};
890
+ _context5.t1 = {};
797
891
  case 8:
798
- _ref5 = _context4.t1;
799
- sourceId = _ref5.sourceId;
800
- opId = _ref5.opId;
801
- userArgs = _ref5.userArgs;
892
+ _ref6 = _context5.t1;
893
+ sourceId = _ref6.sourceId;
894
+ opId = _ref6.opId;
895
+ userArgs = _ref6.userArgs;
802
896
  if (!(!sourceId || !opId)) {
803
- _context4.next = 14;
897
+ _context5.next = 14;
804
898
  break;
805
899
  }
806
- return _context4.abrupt("return", undefined);
900
+ return _context5.abrupt("return", undefined);
807
901
  case 14:
808
- return _context4.abrupt("return", executePlasmicDataOp({
902
+ return _context5.abrupt("return", executePlasmicDataOp({
809
903
  sourceId: sourceId,
810
904
  opId: opId,
811
905
  userArgs: userArgs
@@ -815,9 +909,9 @@ function usePlasmicDataMutationOp(dataOp) {
815
909
  }));
816
910
  case 15:
817
911
  case "end":
818
- return _context4.stop();
912
+ return _context5.stop();
819
913
  }
820
- }, _callee4);
914
+ }, _callee5);
821
915
  })), [getRealDataOp, userToken]);
822
916
  }
823
917
 
@@ -875,46 +969,6 @@ var FetcherMeta = {
875
969
  styleSections: false
876
970
  };
877
971
 
878
- function usePrevious(value) {
879
- var prevValue = React.useRef(undefined);
880
- React.useEffect(function () {
881
- prevValue.current = value;
882
- return function () {
883
- prevValue.current = undefined;
884
- };
885
- });
886
- return prevValue.current;
887
- }
888
- /**
889
- * @deprecated Prefer using `usePlasmicDataOp` directly instead.
890
- */
891
- function useDependencyAwareQuery(_ref) {
892
- var $queries = _ref.$queries,
893
- getDataOp = _ref.getDataOp,
894
- setDollarQueries = _ref.setDollarQueries,
895
- name = _ref.name,
896
- pageIndex = _ref.pageIndex,
897
- pageSize = _ref.pageSize;
898
- var data = usePlasmicDataOp(swallow(getDataOp), _extends({}, !!pageIndex && !!pageSize && {
899
- paginate: {
900
- pageIndex: pageIndex,
901
- pageSize: pageSize
902
- }
903
- }));
904
- var finalName = name != null ? name : 'data';
905
- var prevName = usePrevious(finalName);
906
- React.useEffect(function () {
907
- if (!(finalName in $queries) || $queries[finalName] !== data) {
908
- var _extends2;
909
- var $queries2 = _extends({}, $queries, (_extends2 = {}, _extends2[finalName] = data, _extends2));
910
- if (prevName && finalName !== prevName && prevName in $queries) {
911
- delete $queries2[prevName];
912
- }
913
- setDollarQueries($queries2);
914
- }
915
- }, [finalName, prevName, data, $queries, setDollarQueries]);
916
- }
917
-
918
972
  function normalizeData(rawData) {
919
973
  var _rawData$schema;
920
974
  if (!rawData) {
@@ -1042,6 +1096,46 @@ function deriveFieldConfigs(specifiedFieldsPartial, schema, makeDefaultConfig) {
1042
1096
  };
1043
1097
  }
1044
1098
 
1099
+ function usePrevious(value) {
1100
+ var prevValue = React.useRef(undefined);
1101
+ React.useEffect(function () {
1102
+ prevValue.current = value;
1103
+ return function () {
1104
+ prevValue.current = undefined;
1105
+ };
1106
+ });
1107
+ return prevValue.current;
1108
+ }
1109
+ /**
1110
+ * @deprecated Prefer using `usePlasmicDataOp` directly instead.
1111
+ */
1112
+ function useDependencyAwareQuery(_ref) {
1113
+ var $queries = _ref.$queries,
1114
+ getDataOp = _ref.getDataOp,
1115
+ setDollarQueries = _ref.setDollarQueries,
1116
+ name = _ref.name,
1117
+ pageIndex = _ref.pageIndex,
1118
+ pageSize = _ref.pageSize;
1119
+ var data = usePlasmicDataOp(swallow(getDataOp), _extends({}, !!pageIndex && !!pageSize && {
1120
+ paginate: {
1121
+ pageIndex: pageIndex,
1122
+ pageSize: pageSize
1123
+ }
1124
+ }));
1125
+ var finalName = name != null ? name : 'data';
1126
+ var prevName = usePrevious(finalName);
1127
+ React.useEffect(function () {
1128
+ if (!(finalName in $queries) || $queries[finalName] !== data) {
1129
+ var _extends2;
1130
+ var $queries2 = _extends({}, $queries, (_extends2 = {}, _extends2[finalName] = data, _extends2));
1131
+ if (prevName && finalName !== prevName && prevName in $queries) {
1132
+ delete $queries2[prevName];
1133
+ }
1134
+ setDollarQueries($queries2);
1135
+ }
1136
+ }, [finalName, prevName, data, $queries, setDollarQueries]);
1137
+ }
1138
+
1045
1139
  Object.defineProperty(exports, 'usePlasmicDataConfig', {
1046
1140
  enumerable: true,
1047
1141
  get: function () {
@@ -1057,4 +1151,5 @@ exports.normalizeData = normalizeData;
1057
1151
  exports.useDependencyAwareQuery = useDependencyAwareQuery;
1058
1152
  exports.usePlasmicDataMutationOp = usePlasmicDataMutationOp;
1059
1153
  exports.usePlasmicDataOp = usePlasmicDataOp;
1154
+ exports.usePlasmicInvalidate = usePlasmicInvalidate;
1060
1155
  //# sourceMappingURL=data-sources.cjs.development.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-sources.cjs.development.js","sources":["../src/executor.tsx","../src/utils.ts","../src/hooks/usePlasmicDataOp.tsx","../src/components/Fetcher.tsx","../src/hooks/useDependencyAwareQuery.tsx","../src/helpers.ts"],"sourcesContent":["import { PlasmicDataSourceContextValue } from '@plasmicapp/data-sources-context';\nimport fetch from '@plasmicapp/isomorphic-unfetch';\nimport { wrapLoadingFetcher } from '@plasmicapp/query';\nimport stringify from 'fast-stringify';\nimport { ManyRowsResult, Pagination, SingleRowResult } from './types';\n\nconst DEFAULT_HOST = 'https://data.plasmic.app';\n\nexport interface DataOp {\n sourceId: string;\n opId: string;\n userArgs?: Record<string, any>;\n cacheKey?: string;\n invalidatedKeys?: string[] | null;\n roleId?: string | null;\n}\n\ninterface ExecuteOpts {\n userAuthToken?: string;\n user?: PlasmicDataSourceContextValue['user'];\n paginate?: Pagination;\n}\n\nconst UNAUTHORIZED_MESSAGE =\n 'You do not have permission to perform this operation. Login to get access or contact the app owner to get access.';\n\nexport async function executePlasmicDataOp<\n T extends SingleRowResult | ManyRowsResult\n>(op: DataOp, opts?: ExecuteOpts) {\n const func = getConfig(\n '__PLASMIC_EXECUTE_DATA_OP',\n _executePlasmicDataOp\n ) as typeof _executePlasmicDataOp;\n const res = await wrapLoadingFetcher(func)(op, opts);\n return res as T;\n}\n\nasync function _executePlasmicDataOp<\n T extends SingleRowResult | ManyRowsResult\n>(op: DataOp, opts?: ExecuteOpts) {\n if (op.roleId) {\n if (!opts?.user || !opts.user.roleIds.includes(op.roleId)) {\n console.error(UNAUTHORIZED_MESSAGE);\n throw new Error(UNAUTHORIZED_MESSAGE);\n }\n }\n\n const host = getConfig('__PLASMIC_DATA_HOST', DEFAULT_HOST);\n\n const url = `${host}/api/v1/server-data/sources/${op.sourceId}/execute`;\n const resp = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(opts?.userAuthToken && {\n 'x-plasmic-data-user-auth-token': opts.userAuthToken,\n }),\n },\n body: stringify({\n opId: op.opId,\n userArgs: op.userArgs ?? {},\n paginate: opts?.paginate,\n }),\n });\n if (resp.status !== 200) {\n const text = await resp.text();\n throw new Error(text);\n }\n return (await resp.json()) as T;\n}\n\nfunction getConfig<T>(key: string, defaultValue: T) {\n if (typeof globalThis === 'undefined') {\n return defaultValue;\n } else {\n return (globalThis as any)[key] ?? defaultValue;\n }\n}\n","export function swallow<T>(f: () => T): T | undefined {\n try {\n return f();\n } catch {\n return undefined;\n }\n}\n\nexport function pick<T extends object, K extends keyof T>(\n obj: T,\n ...keys: K[]\n): Pick<T, K> {\n const res: any = {};\n for (const key of keys) {\n if (key in obj) {\n res[key] = obj[key as keyof T];\n }\n }\n return res;\n}\n\ntype ReactElt = {\n children: ReactElt | ReactElt[];\n props: {\n children: ReactElt | ReactElt[];\n [prop: string]: any;\n } | null;\n type: React.ComponentType<any> | null;\n key: string | null;\n} | null;\n\nexport function traverseReactEltTree(\n children: React.ReactNode,\n callback: (elt: ReactElt) => void\n) {\n const rec = (elts: ReactElt | ReactElt[] | null) => {\n (Array.isArray(elts) ? elts : [elts]).forEach((elt) => {\n if (elt) {\n callback(elt);\n if (elt.children) {\n rec(elt.children);\n }\n if (elt.props?.children && elt.props.children !== elt.children) {\n rec(elt.props.children);\n }\n }\n });\n };\n rec(children as any);\n}\n\nexport function asArray<T>(x: T[] | T | undefined | null) {\n if (Array.isArray(x)) {\n return x;\n } else if (x == null) {\n return [];\n } else {\n return [x];\n }\n}\n\nexport function ensureNumber(x: number | string): number {\n return x as number;\n}\n\nexport function ensure<T>(x: T | null | undefined): T {\n if (x === null || x === undefined) {\n throw new Error('Expected non-null or non-undefined value');\n }\n return x;\n}\n\nexport function isOneOf<T, U extends T>(elem: T, arr: readonly U[]): elem is U {\n return arr.includes(elem as any);\n}\n\nexport function maybe<T, U>(\n x: T | undefined | null,\n f: (y: T) => U\n): U | undefined {\n if (x === undefined || x === null) return undefined;\n return f(x);\n}\n\nexport function isLikeImage(value: unknown) {\n return typeof value === 'string'\n ? value.match(/\\.(png|jpg|jpeg|gif|svg|webp|avif|ico|bmp|tiff)$/i)\n : false;\n}\n\nexport function ensureArray<T>(xs: T | T[]): T[] {\n return Array.isArray(xs) ? xs : [xs];\n}\n\nexport const tuple = <T extends any[]>(...args: T): T => args;\n\nexport interface HasId {\n id: string;\n}\n\nexport function mkIdMap<T extends HasId>(xs: ReadonlyArray<T>): Map<string, T> {\n return new Map(xs.map((x) => tuple(x.id, x) as [string, T]));\n}\n\nexport const mkShortId = () => `${Math.random()}`;\n\nexport function withoutNils<T>(xs: Array<T | undefined | null>): T[] {\n return xs.filter((x): x is T => x != null);\n}\n\nexport type Falsey = null | undefined | false | '' | 0 | 0n;\nexport type Truthy<T> = T extends Falsey ? never : T;\n\nexport function withoutFalsey<T>(xs: Array<T | Falsey>): T[] {\n return xs.filter((x): x is T => !!x);\n}\n","import { usePlasmicDataSourceContext } from '@plasmicapp/data-sources-context';\n// eslint-disable-next-line no-restricted-imports\nimport * as ph from '@plasmicapp/host';\nimport {\n useMutablePlasmicQueryData,\n usePlasmicDataConfig,\n} from '@plasmicapp/query';\nimport React from 'react';\nimport { DataOp, executePlasmicDataOp } from '../executor';\nimport { ManyRowsResult, Pagination, SingleRowResult } from '../types';\nimport { pick } from '../utils';\n\nexport function makeCacheKey(\n dataOp: DataOp,\n opts?: { paginate?: Pagination; userAuthToken?: string | null }\n) {\n const queryDependencies = JSON.stringify({\n sourceId: dataOp.sourceId,\n opId: dataOp.opId,\n args: dataOp.userArgs,\n userAuthToken: opts?.userAuthToken,\n paginate: opts?.paginate,\n });\n return dataOp.cacheKey\n ? `${dataOp.cacheKey}${queryDependencies}`\n : queryDependencies;\n}\n\nexport function usePlasmicInvalidate() {\n const { cache, fallback, mutate } = usePlasmicDataConfig();\n return async (invalidatedKeys: string[] | null | undefined) => {\n const getKeysToInvalidate = () => {\n if (!invalidatedKeys) {\n return [];\n }\n const allKeys = Array.from(\n new Set([\n ...(cache as any).keys(),\n ...(fallback ? Object.keys(fallback) : []),\n ])\n ).filter((key): key is string => typeof key === 'string');\n if (invalidatedKeys.includes('plasmic_refresh_all')) {\n return allKeys;\n }\n return allKeys.filter((key) =>\n invalidatedKeys.some((k) => key.includes(`.$.${k}.$.`))\n );\n };\n\n const keys = getKeysToInvalidate();\n if (keys.length === 0) {\n return;\n }\n\n return await Promise.all(keys.map((key) => mutate(key)));\n };\n}\n\nconst enableLoadingBoundaryKey = 'plasmicInternalEnableLoadingBoundary';\n\nfunction mkUndefinedDataProxy(\n promiseRef: { fetchingPromise: Promise<any> | undefined },\n fetchAndUpdateCache: (() => Promise<any>) | undefined\n) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n if (prop === 'isPlasmicUndefinedDataProxy') {\n return true;\n }\n\n if (!fetchAndUpdateCache) {\n // There's no key so no fetch to kick off yet; when computing key,\n // we encountered some thrown exception (that's not an undefined data promise),\n // and so we can't fetch yet. This might be dependent on a $state or $prop value\n // that's currently undefined, etc. We will act like an undefined data object,\n // and trigger the usual fallback behavior\n return undefined;\n }\n\n const promise =\n // existing fetch\n promiseRef.fetchingPromise ||\n // No existing fetch, so kick off a fetch\n fetchAndUpdateCache();\n (promise as any).plasmicType = 'PlasmicUndefinedDataError';\n (promise as any).message = `Cannot read property ${String(\n prop\n )} - data is still loading`;\n throw promise;\n },\n }\n ) as any;\n}\n\ninterface PlasmicUndefinedDataErrorPromise extends Promise<any> {\n plasmicType: 'PlasmicUndefinedDataError';\n message: string;\n}\n\nfunction isPlasmicUndefinedDataErrorPromise(\n x: any\n): x is PlasmicUndefinedDataErrorPromise {\n return (\n !!x &&\n typeof x === 'object' &&\n (x as any).plasmicType === 'PlasmicUndefinedDataError'\n );\n}\n\nconst reactMajorVersion = +React.version.split('.')[0];\n\ntype ResolvableDataOp =\n | DataOp\n | undefined\n | null\n | (() => DataOp | undefined | null);\n\n/**\n * This returns either:\n * * DataOp to perform\n * * undefined/null, if no data op can be performed\n * * PlasmicUndefinedDataErrorPromise, if when trying to evaluate the DataOp to perform,\n * we encounter a PlasmicUndefinedDataErrorPromise, so this operation cannot be\n * performed until that promise is resolved.\n */\nfunction resolveDataOp(dataOp: ResolvableDataOp) {\n if (typeof dataOp === 'function') {\n try {\n return dataOp();\n } catch (err) {\n if (isPlasmicUndefinedDataErrorPromise(err)) {\n return err;\n }\n return null;\n }\n } else {\n return dataOp;\n }\n}\n\n/**\n * Fetches can be kicked off two ways -- normally, by useSWR(), or by some\n * expression accessing the `$queries.*` proxy when not ready yet. We need\n * a global cache for proxy-invoked caches, so that different components\n * with the same key can share the same fetch.\n *\n * The life cycle for this cache is short -- only the duration of a\n * proxy-invoked fetch, and once the fetch is done. That's because we really\n * just want SWR to be managing the cache, not us! Once the data is in SWR,\n * we will use SWR for getting data.\n */\nconst PRE_FETCHES = new Map<string, Promise<any>>();\n\nexport function usePlasmicDataOp<\n T extends SingleRowResult | ManyRowsResult,\n E = any\n>(\n dataOp: ResolvableDataOp,\n opts?: {\n paginate?: Pagination;\n noUndefinedDataProxy?: boolean;\n }\n): Partial<T> & {\n error?: E;\n isLoading?: boolean;\n} {\n const resolvedDataOp = resolveDataOp(dataOp);\n const ctx = usePlasmicDataSourceContext();\n const enableLoadingBoundary = !!ph.useDataEnv?.()?.[enableLoadingBoundaryKey];\n const { mutate, cache } = usePlasmicDataConfig();\n // Cannot perform this operation\n const isNullDataOp = !resolvedDataOp;\n // This operation depends on another data query to resolve first\n const isWaitingOnDependentQuery =\n isPlasmicUndefinedDataErrorPromise(resolvedDataOp);\n const key =\n !resolvedDataOp || isPlasmicUndefinedDataErrorPromise(resolvedDataOp)\n ? null\n : makeCacheKey(resolvedDataOp, {\n paginate: opts?.paginate,\n userAuthToken: ctx?.userAuthToken,\n });\n const fetchingData = React.useMemo(\n () => ({\n fetchingPromise: undefined as Promise<T> | undefined,\n }),\n [key]\n );\n const fetcher = React.useMemo(\n () => () => {\n // If we are in this function, that means SWR cache missed.\n if (!key) {\n throw new Error(`Fetcher should never be called without a proper key`);\n }\n\n // dataOp is guaranteed to be a DataOp, and not an undefined promise or null\n\n if (fetchingData.fetchingPromise) {\n // Fetch is already underway from this hook\n return fetchingData.fetchingPromise;\n }\n\n if (key && PRE_FETCHES.has(key)) {\n // Some other usePlasmicDataOp() hook elsewhere has already\n // started this fetch as well; re-use it here.\n const existing = PRE_FETCHES.get(key) as Promise<T>;\n fetchingData.fetchingPromise = existing;\n return existing;\n }\n\n // Else we really need to kick off this fetch now...\n const fetcherFn = () =>\n executePlasmicDataOp<T>(resolvedDataOp as DataOp, {\n userAuthToken: ctx?.userAuthToken || undefined,\n user: ctx?.user,\n paginate: opts?.paginate,\n });\n const fetcherPromise = fetcherFn();\n fetchingData.fetchingPromise = fetcherPromise;\n if (key) {\n PRE_FETCHES.set(key, fetcherPromise);\n // Once we have a result, we rely on swr to perform the caching,\n // so remove from our cache as quickly as possible.\n fetcherPromise.then(\n () => {\n PRE_FETCHES.delete(key);\n },\n () => {\n PRE_FETCHES.delete(key);\n }\n );\n }\n return fetcherPromise;\n },\n [key, fetchingData]\n );\n\n const dependentKeyDataErrorPromise = isPlasmicUndefinedDataErrorPromise(\n resolvedDataOp\n )\n ? resolvedDataOp\n : undefined;\n const fetchAndUpdateCache = React.useMemo(() => {\n if (!key && !dependentKeyDataErrorPromise) {\n // If there's no key, and no data query we're waiting for, then there's\n // no way to perform a fetch\n return undefined;\n }\n return () => {\n // This function is called when the undefined data proxy is invoked.\n // USUALLY, this means the data is not available in SWR yet, and\n // we need to kick off a fetch.\n\n if (fetchingData.fetchingPromise) {\n // No need to update cache as the exist promise call site will do it\n return fetchingData.fetchingPromise;\n }\n\n if (dependentKeyDataErrorPromise) {\n // We can't actually fetch yet, because we couldn't even evaluate the dataOp\n // to fetch for, because we depend on unfetched data. Once _that_\n // dataOp we depend on is finished, then we can try again. So we\n // will throw and wait for _that_ promise to be resolved instead.\n return dependentKeyDataErrorPromise;\n }\n\n if (!key) {\n throw new Error(`Expected key to be non-null`);\n }\n\n // SOMETIMES, SWR actually _does_ have the cache, but we still end up\n // here. That's because of how we update $queries, which takes two\n // cycles; each time we render, we build a `new$Queries`, and\n // `set$Queries(new$Queries)`. So once the data is ready, at the\n // first render, we will have data in `new$Queries` but not `$queries`,\n // but we will still finish rendering that pass, which means any `$queries`\n // access will still end up here. So we look into the SWR cache and\n // return any data that's here.\n const cached = cache.get(key);\n if (cached) {\n return Promise.resolve(cached);\n }\n const cachedError = cache.get(`$swr$${key}`);\n if (cachedError) {\n return Promise.reject(cachedError.error);\n }\n\n // Now, upon this proxy.get() miss, we want to kick off the fetch. We can't\n // wait for useSWR() to kick off the fetch, because upon data miss we are\n // throwing a promise, and useSWR() won't kick off the fetch till the effect,\n // so it will never get a chance to fetch. Instead, we fetch, and then we\n // put the fetched data into the SWR cache, so that next time useSWR() is called,\n // it will just find it in the cache.\n //\n // However, we don't want to fetch SYNCHRONOUSLY RIGHT NOW, becase we are in\n // the rendering phase (presumably, we're here because some component is trying\n // to read fetched data while rendering). Doing a fetch right now would invoke\n // the fetcher, which is wrapped by @plasmicapp/query to tracking loading state,\n // and upon loading state toggled to true, it will fire loading event listeners,\n // and for example, our antd's <GlobalLoadingIndicator /> will listen to this\n // event and immediately ask antd to show the loading indicator, which mutates\n // antd component's state. It is NOT LEGAL to call setState() on some other\n // component's state during rendering phase!\n //\n // We therefore will delay kicking off the fetch by a tick, so that we will safely\n // start the fetch outside of React rendering phase.\n const fetcherPromise = new Promise((resolve, reject) => {\n setTimeout(() => {\n fetcher().then(resolve, reject);\n }, 1);\n });\n fetcherPromise\n .then((data) => {\n // Insert the fetched data into the SWR cache\n mutate(key, data);\n })\n .catch((err) => {\n // Cache the error here to avoid infinite loop\n const keyInfo = key ? '$swr$' + key : '';\n cache.set(keyInfo, { ...(cache.get(keyInfo) ?? {}), error: err });\n });\n return fetcherPromise;\n };\n }, [fetcher, fetchingData, cache, key, dependentKeyDataErrorPromise]);\n const res = useMutablePlasmicQueryData<T, E>(key, fetcher, {\n shouldRetryOnError: false,\n\n // If revalidateIfStale is true, then if there's a cache entry with a key,\n // but no mounted hook with that key yet, and when the hook mounts with the key,\n // swr will revalidate. This may be reasonable behavior, but for us, this\n // happens all the time -- we prepopulate the cache with proxy-invoked fetch,\n // sometimes before swr had a chance to run the effect. So we turn off\n // revalidateIfStale here, and just let the user manage invalidation.\n // TODO: even so, we don't do this for now, as fallback data\n // does not get inserted into the cache with\n // `revalidateIfStale: false`, so we cannot invalidate them.\n // Will fix with usePlasmicDataInvalidate()\n // revalidateIfStale: false,\n });\n const { data, error, isLoading } = res;\n if (fetchingData.fetchingPromise != null && data !== undefined) {\n // Clear the fetching promise as the actual data is now used (so\n // revalidation is possible)\n fetchingData.fetchingPromise = undefined;\n }\n return React.useMemo(() => {\n const result = {\n ...(data ?? ({} as Partial<T>)),\n ...pick(res, 'isLoading', 'error'),\n };\n if (\n !opts?.noUndefinedDataProxy &&\n reactMajorVersion >= 18 &&\n enableLoadingBoundary &&\n (isLoading || isNullDataOp || isWaitingOnDependentQuery) &&\n result.data === undefined &&\n result.schema === undefined &&\n result.error === undefined\n ) {\n result.data = mkUndefinedDataProxy(fetchingData, fetchAndUpdateCache);\n result.schema = mkUndefinedDataProxy(fetchingData, fetchAndUpdateCache);\n }\n return result;\n }, [\n isNullDataOp,\n isWaitingOnDependentQuery,\n data,\n error,\n isLoading,\n opts?.noUndefinedDataProxy,\n enableLoadingBoundary,\n fetchingData,\n fetchAndUpdateCache,\n ]);\n}\n\nexport function usePlasmicDataMutationOp<\n T extends SingleRowResult | ManyRowsResult\n>(dataOp: ResolvableDataOp) {\n const ctx = usePlasmicDataSourceContext();\n const userToken = ctx?.userAuthToken;\n\n const getRealDataOp = React.useCallback(async () => {\n const tryGetRealDataOp = async (): Promise<DataOp | null> => {\n const resolved = resolveDataOp(dataOp);\n if (!resolved) {\n return null;\n } else if (isPlasmicUndefinedDataErrorPromise(resolved)) {\n // If calling the dataOp function resulted in a data fetch,\n // then we wait for the data fetch to finish and try\n // again\n await resolved;\n return tryGetRealDataOp();\n } else {\n return resolved;\n }\n };\n return await tryGetRealDataOp();\n }, [dataOp]);\n\n return React.useCallback(async () => {\n const { sourceId, opId, userArgs } = (await getRealDataOp()) ?? {};\n\n if (!sourceId || !opId) {\n return undefined;\n }\n\n return executePlasmicDataOp<T>(\n { sourceId, opId, userArgs },\n {\n userAuthToken: userToken || undefined,\n user: ctx?.user,\n }\n );\n }, [getRealDataOp, userToken]);\n}\n","import { ComponentMeta } from '@plasmicapp/host';\nimport React from 'react';\nimport { DataOp } from '../executor';\nimport { usePlasmicDataOp } from '../hooks/usePlasmicDataOp';\n\nexport interface DataOpConfig {\n name?: string;\n pageIndex?: number;\n pageSize?: number;\n}\n\nexport interface FetcherProps extends DataOpConfig {\n dataOp?: DataOp;\n children?: ($queries: Record<string, any>) => React.ReactElement | null;\n queries?: Record<string, any>;\n}\n\nexport function Fetcher(props: FetcherProps): React.ReactElement | null {\n const { dataOp, children, name, pageIndex, pageSize } = props;\n const data = usePlasmicDataOp(dataOp, {\n ...(!!pageIndex &&\n !!pageSize && {\n paginate: { pageIndex, pageSize },\n }),\n });\n\n const $queries = React.useMemo(\n () => ({ ...props.queries, [name ?? 'data']: data }),\n [props.queries, name, data]\n );\n\n return children?.($queries) ?? null;\n}\n\nexport const FetcherMeta: ComponentMeta<FetcherProps> = {\n name: 'plasmic-data-source-fetcher',\n displayName: 'Data Fetcher',\n props: {\n dataOp: {\n type: 'dataSourceOp' as any,\n displayName: 'Data',\n },\n name: {\n type: 'string',\n displayName: 'Variable name',\n },\n children: {\n type: 'slot',\n renderPropParams: ['$queries'],\n },\n pageSize: {\n type: 'number',\n advanced: true,\n displayName: 'Page size',\n description: 'Only fetch in batches of this size; for pagination',\n },\n pageIndex: {\n type: 'number',\n advanced: true,\n displayName: 'Page index',\n description: '0-based index of the paginated page to fetch',\n },\n },\n importPath: '@plasmicapp/react-web/lib/data-sources',\n importName: 'Fetcher',\n alwaysAutoName: true,\n styleSections: false,\n};\n","import React from 'react';\nimport { DataOpConfig } from '../components/Fetcher';\nimport { DataOp } from '../executor';\nimport { swallow } from '../utils';\nimport { usePlasmicDataOp } from './usePlasmicDataOp';\n\nfunction usePrevious<T>(value: T | undefined): T | undefined {\n const prevValue = React.useRef<T | undefined>(undefined);\n\n React.useEffect(() => {\n prevValue.current = value;\n\n return () => {\n prevValue.current = undefined;\n };\n });\n\n return prevValue.current;\n}\n\nexport interface DependencyAwareQueryConfig extends DataOpConfig {\n $queries: Record<string, any>;\n setDollarQueries: ($queries: Record<string, any>) => void;\n getDataOp: () => DataOp;\n}\n\n/**\n * @deprecated Prefer using `usePlasmicDataOp` directly instead.\n */\nexport function useDependencyAwareQuery({\n $queries,\n getDataOp,\n setDollarQueries,\n name,\n pageIndex,\n pageSize,\n}: DependencyAwareQueryConfig) {\n const data = usePlasmicDataOp(swallow(getDataOp), {\n ...(!!pageIndex &&\n !!pageSize && {\n paginate: { pageIndex, pageSize },\n }),\n });\n const finalName = name ?? 'data';\n const prevName = usePrevious(finalName);\n React.useEffect(() => {\n if (!(finalName in $queries) || $queries[finalName] !== data) {\n const $queries2 = {\n ...$queries,\n [finalName]: data,\n };\n if (prevName && finalName !== prevName && prevName in $queries) {\n delete $queries2[prevName];\n }\n setDollarQueries($queries2);\n }\n }, [finalName, prevName, data, $queries, setDollarQueries]);\n}\n","import {\n ManyRowsResult,\n TableFieldSchema,\n TableFieldType,\n TableSchema,\n} from './types';\nimport { mkIdMap, withoutNils } from './utils';\n\nexport type QueryResult = Partial<ManyRowsResult<any>> & {\n error?: any;\n isLoading?: boolean;\n};\n\nexport interface NormalizedData {\n data: Record<string, unknown>[];\n schema?: TableSchema;\n}\n\nexport function normalizeData(rawData: unknown): NormalizedData | undefined {\n if (!rawData) {\n return undefined;\n }\n\n const dataArray = tryGetDataArray(rawData);\n if (!dataArray) {\n return undefined;\n }\n const schema = (rawData as any).schema ?? tryGetSchema(dataArray);\n if (!schema) {\n return undefined;\n }\n return { data: dataArray, schema };\n}\n\nfunction tryGetDataArray(rawData: unknown): any[] | undefined {\n if (rawData == null || typeof rawData !== 'object') {\n return undefined;\n }\n\n if (Array.isArray(rawData)) {\n if (isArrayOfObjects(rawData)) {\n return rawData;\n } else {\n // TODO: array of primitives? Maybe we can wrap this?\n return undefined;\n }\n }\n\n if (rawData == null) {\n return undefined;\n }\n\n if ('data' in rawData && typeof (rawData as any).data === 'object') {\n if (\n Array.isArray((rawData as any).data) &&\n isArrayOfObjects((rawData as any).data)\n ) {\n return (rawData as any).data;\n } else if ((rawData as any).data != null) {\n return [(rawData as any).data];\n } else {\n return undefined;\n }\n }\n if ('isLoading' in rawData || 'error' in rawData) {\n return undefined;\n }\n\n // Maybe a singleton record?\n return [rawData];\n}\n\nfunction isArrayOfObjects(arr: unknown[]) {\n return arr.every((x) => typeof x === 'object' && !Array.isArray(x));\n}\n\nfunction tryGetSchema(data: any[]): TableSchema | undefined {\n const fieldMap: Record<string, TableFieldType> = {};\n data.forEach((entry: any) => {\n if (entry && typeof entry === 'object') {\n Array.from(Object.entries(entry)).forEach(([k, v]) => {\n const inferredType: TableFieldType =\n typeof v === 'string'\n ? 'string'\n : typeof v === 'boolean'\n ? 'boolean'\n : typeof v === 'number'\n ? 'number'\n : 'unknown';\n if (fieldMap[k] && fieldMap[k] !== inferredType) {\n fieldMap[k] = 'unknown';\n } else {\n fieldMap[k] = inferredType;\n }\n });\n }\n });\n return {\n id: 'inferred',\n fields: Object.entries(fieldMap).map(([f, t]) => ({\n id: f,\n type: t,\n readOnly: false,\n })),\n };\n}\n\nexport type BaseFieldConfig = {\n key?: string;\n fieldId?: string;\n};\n\nconst mkShortId = () => `${Math.random()}`;\n\nexport function deriveFieldConfigs<T extends BaseFieldConfig>(\n specifiedFieldsPartial: Partial<T>[],\n schema: TableSchema | undefined,\n makeDefaultConfig: (field: TableFieldSchema | undefined) => T\n): {\n mergedFields: T[];\n minimalFullLengthFields: Partial<T>[];\n} {\n const schemaFields = schema?.fields ?? [];\n const fieldById = mkIdMap(schemaFields);\n const specifiedFieldIds = new Set(\n withoutNils(specifiedFieldsPartial.map((f) => f.fieldId))\n );\n const keptSpecifiedFields = specifiedFieldsPartial.flatMap((f): T[] => {\n if (!f.fieldId) {\n return [\n { key: mkShortId(), ...makeDefaultConfig(undefined), ...f },\n ] as T[];\n }\n const field = fieldById.get(f.fieldId as string);\n\n // Drop configs with fieldIds no longer in the data.\n if (!field) {\n return [];\n }\n\n return [\n {\n key: mkShortId(),\n ...makeDefaultConfig(field),\n ...f,\n },\n ] as T[];\n });\n const newVirtualFields = schemaFields\n .filter((f) => !specifiedFieldIds.has(f.id))\n .map(\n (f): T => ({\n key: mkShortId(),\n ...makeDefaultConfig(f),\n })\n );\n const mergedFields = [...keptSpecifiedFields, ...newVirtualFields];\n const minimalFullLengthFields: Partial<T>[] = [\n ...specifiedFieldsPartial,\n ...newVirtualFields.map((f) => ({ key: f.key, fieldId: f.fieldId })),\n ] as Partial<T>[];\n return { mergedFields, minimalFullLengthFields };\n}\n"],"names":["DEFAULT_HOST","UNAUTHORIZED_MESSAGE","executePlasmicDataOp","_x","_x2","_executePlasmicDataOp2","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","op","opts","func","res","wrap","_callee$","_context","prev","next","getConfig","_executePlasmicDataOp","wrapLoadingFetcher","sent","abrupt","stop","_x3","_x4","_executePlasmicDataOp3","_callee2","_op$userArgs","host","url","resp","text","_callee2$","_context2","roleId","user","roleIds","includes","console","error","Error","sourceId","fetch","method","headers","_extends","userAuthToken","body","stringify","opId","userArgs","paginate","status","json","key","defaultValue","globalThis","_globalThis$key","swallow","f","_unused","undefined","pick","obj","_len","length","keys","Array","_key","_i","_keys","tuple","_len2","args","_key2","mkIdMap","xs","Map","map","x","id","withoutNils","filter","makeCacheKey","dataOp","queryDependencies","JSON","cacheKey","enableLoadingBoundaryKey","mkUndefinedDataProxy","promiseRef","fetchAndUpdateCache","Proxy","get","_target","prop","promise","fetchingPromise","plasmicType","message","String","isPlasmicUndefinedDataErrorPromise","reactMajorVersion","React","version","split","resolveDataOp","err","PRE_FETCHES","usePlasmicDataOp","resolvedDataOp","ctx","usePlasmicDataSourceContext","enableLoadingBoundary","ph","_ph$useDataEnv","_usePlasmicDataConfig2","usePlasmicDataConfig","mutate","cache","isNullDataOp","isWaitingOnDependentQuery","fetchingData","useMemo","fetcher","has","existing","fetcherFn","fetcherPromise","set","then","dependentKeyDataErrorPromise","cached","Promise","resolve","cachedError","reject","setTimeout","data","keyInfo","_cache$get","useMutablePlasmicQueryData","shouldRetryOnError","isLoading","result","noUndefinedDataProxy","schema","usePlasmicDataMutationOp","userToken","getRealDataOp","useCallback","_callee3","tryGetRealDataOp","_callee3$","_context3","_ref3","resolved","_callee4","_yield$getRealDataOp","_ref5","_callee4$","_context4","t0","t1","Fetcher","props","children","name","pageIndex","pageSize","$queries","_extends2","queries","_children","FetcherMeta","displayName","type","renderPropParams","advanced","description","importPath","importName","alwaysAutoName","styleSections","usePrevious","value","prevValue","useRef","useEffect","current","useDependencyAwareQuery","_ref","getDataOp","setDollarQueries","finalName","prevName","$queries2","normalizeData","rawData","dataArray","tryGetDataArray","_rawData$schema","tryGetSchema","isArray","isArrayOfObjects","arr","every","fieldMap","forEach","entry","from","Object","entries","k","v","inferredType","fields","_ref2","t","readOnly","mkShortId","Math","random","deriveFieldConfigs","specifiedFieldsPartial","makeDefaultConfig","schemaFields","_schema$fields","fieldById","specifiedFieldIds","Set","fieldId","keptSpecifiedFields","flatMap","field","newVirtualFields","mergedFields","concat","minimalFullLengthFields"],"mappings":"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"}
1
+ {"version":3,"file":"data-sources.cjs.development.js","sources":["../src/executor.tsx","../src/utils.ts","../src/hooks/usePlasmicDataOp.tsx","../src/components/Fetcher.tsx","../src/helpers.ts","../src/hooks/useDependencyAwareQuery.tsx"],"sourcesContent":["import { PlasmicDataSourceContextValue } from '@plasmicapp/data-sources-context';\nimport fetch from '@plasmicapp/isomorphic-unfetch';\nimport { wrapLoadingFetcher } from '@plasmicapp/query';\nimport stringify from 'fast-stringify';\nimport { ManyRowsResult, Pagination, SingleRowResult } from './types';\n\nconst DEFAULT_HOST = 'https://data.plasmic.app';\n\nexport interface DataOp {\n sourceId: string;\n opId: string;\n userArgs?: Record<string, any>;\n cacheKey?: string;\n invalidatedKeys?: string[] | null;\n roleId?: string | null;\n}\n\ninterface ExecuteOpts {\n userAuthToken?: string;\n user?: PlasmicDataSourceContextValue['user'];\n paginate?: Pagination;\n}\n\nconst UNAUTHORIZED_MESSAGE =\n 'You do not have permission to perform this operation. Login to get access or contact the app owner to get access.';\n\nexport async function executePlasmicDataOp<\n T extends SingleRowResult | ManyRowsResult\n>(op: DataOp, opts?: ExecuteOpts) {\n const func = getConfig(\n '__PLASMIC_EXECUTE_DATA_OP',\n _executePlasmicDataOp\n ) as typeof _executePlasmicDataOp;\n const res = await wrapLoadingFetcher(func)(op, opts);\n return res as T;\n}\n\nasync function _executePlasmicDataOp<\n T extends SingleRowResult | ManyRowsResult\n>(op: DataOp, opts?: ExecuteOpts) {\n if (op.roleId) {\n if (!opts?.user || !opts.user.roleIds.includes(op.roleId)) {\n console.error(UNAUTHORIZED_MESSAGE);\n throw new Error(UNAUTHORIZED_MESSAGE);\n }\n }\n\n const host = getConfig('__PLASMIC_DATA_HOST', DEFAULT_HOST);\n\n const url = `${host}/api/v1/server-data/sources/${op.sourceId}/execute`;\n const resp = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(opts?.userAuthToken && {\n 'x-plasmic-data-user-auth-token': opts.userAuthToken,\n }),\n },\n body: stringify({\n opId: op.opId,\n userArgs: op.userArgs ?? {},\n paginate: opts?.paginate,\n }),\n });\n if (resp.status !== 200) {\n const text = await resp.text();\n throw new Error(text);\n }\n return (await resp.json()) as T;\n}\n\nfunction getConfig<T>(key: string, defaultValue: T) {\n if (typeof globalThis === 'undefined') {\n return defaultValue;\n } else {\n return (globalThis as any)[key] ?? defaultValue;\n }\n}\n","export function swallow<T>(f: () => T): T | undefined {\n try {\n return f();\n } catch {\n return undefined;\n }\n}\n\nexport function pick<T extends object, K extends keyof T>(\n obj: T,\n ...keys: K[]\n): Pick<T, K> {\n const res: any = {};\n for (const key of keys) {\n if (key in obj) {\n res[key] = obj[key as keyof T];\n }\n }\n return res;\n}\n\ntype ReactElt = {\n children: ReactElt | ReactElt[];\n props: {\n children: ReactElt | ReactElt[];\n [prop: string]: any;\n } | null;\n type: React.ComponentType<any> | null;\n key: string | null;\n} | null;\n\nexport function traverseReactEltTree(\n children: React.ReactNode,\n callback: (elt: ReactElt) => void\n) {\n const rec = (elts: ReactElt | ReactElt[] | null) => {\n (Array.isArray(elts) ? elts : [elts]).forEach((elt) => {\n if (elt) {\n callback(elt);\n if (elt.children) {\n rec(elt.children);\n }\n if (elt.props?.children && elt.props.children !== elt.children) {\n rec(elt.props.children);\n }\n }\n });\n };\n rec(children as any);\n}\n\nexport function asArray<T>(x: T[] | T | undefined | null) {\n if (Array.isArray(x)) {\n return x;\n } else if (x == null) {\n return [];\n } else {\n return [x];\n }\n}\n\nexport function ensureNumber(x: number | string): number {\n return x as number;\n}\n\nexport function ensure<T>(x: T | null | undefined): T {\n if (x === null || x === undefined) {\n throw new Error('Expected non-null or non-undefined value');\n }\n return x;\n}\n\nexport function isOneOf<T, U extends T>(elem: T, arr: readonly U[]): elem is U {\n return arr.includes(elem as any);\n}\n\nexport function maybe<T, U>(\n x: T | undefined | null,\n f: (y: T) => U\n): U | undefined {\n if (x === undefined || x === null) return undefined;\n return f(x);\n}\n\nexport function isLikeImage(value: unknown) {\n return typeof value === 'string'\n ? value.match(/\\.(png|jpg|jpeg|gif|svg|webp|avif|ico|bmp|tiff)$/i)\n : false;\n}\n\nexport function ensureArray<T>(xs: T | T[]): T[] {\n return Array.isArray(xs) ? xs : [xs];\n}\n\nexport const tuple = <T extends any[]>(...args: T): T => args;\n\nexport interface HasId {\n id: string;\n}\n\nexport function mkIdMap<T extends HasId>(xs: ReadonlyArray<T>): Map<string, T> {\n return new Map(xs.map((x) => tuple(x.id, x) as [string, T]));\n}\n\nexport const mkShortId = () => `${Math.random()}`;\n\nexport function withoutNils<T>(xs: Array<T | undefined | null>): T[] {\n return xs.filter((x): x is T => x != null);\n}\n\nexport type Falsey = null | undefined | false | '' | 0 | 0n;\nexport type Truthy<T> = T extends Falsey ? never : T;\n\nexport function withoutFalsey<T>(xs: Array<T | Falsey>): T[] {\n return xs.filter((x): x is T => !!x);\n}\n","import { usePlasmicDataSourceContext } from '@plasmicapp/data-sources-context';\n// eslint-disable-next-line no-restricted-imports\nimport * as ph from '@plasmicapp/host';\nimport {\n useMutablePlasmicQueryData,\n usePlasmicDataConfig,\n} from '@plasmicapp/query';\nimport React from 'react';\nimport { DataOp, executePlasmicDataOp } from '../executor';\nimport { ManyRowsResult, Pagination, SingleRowResult } from '../types';\nimport { pick } from '../utils';\n\nexport function makeCacheKey(\n dataOp: DataOp,\n opts?: { paginate?: Pagination; userAuthToken?: string | null }\n) {\n const queryDependencies = JSON.stringify({\n sourceId: dataOp.sourceId,\n opId: dataOp.opId,\n args: dataOp.userArgs,\n userAuthToken: opts?.userAuthToken,\n paginate: opts?.paginate,\n });\n return dataOp.cacheKey\n ? `${dataOp.cacheKey}${queryDependencies}`\n : queryDependencies;\n}\n\nexport function usePlasmicInvalidate() {\n const { cache, fallback, mutate } = usePlasmicDataConfig();\n return async (invalidatedKeys: string[] | null | undefined) => {\n const getKeysToInvalidate = () => {\n if (!invalidatedKeys) {\n return [];\n }\n const allKeys = Array.from(\n new Set([\n ...(cache as any).keys(),\n ...(fallback ? Object.keys(fallback) : []),\n ])\n ).filter((key): key is string => typeof key === 'string');\n if (invalidatedKeys.includes('plasmic_refresh_all')) {\n return allKeys;\n }\n return allKeys.filter((key) =>\n invalidatedKeys.some((k) => key.includes(`.$.${k}.$.`))\n );\n };\n\n const keys = getKeysToInvalidate();\n if (keys.length === 0) {\n return;\n }\n\n const invalidateKey = async (key: string) => {\n const studioInvalidate = (globalThis as any).__PLASMIC_MUTATE_DATA_OP;\n if (studioInvalidate) {\n await studioInvalidate(key);\n }\n return mutate(key);\n };\n\n return await Promise.all(keys.map((key) => invalidateKey(key)));\n };\n}\n\nconst enableLoadingBoundaryKey = 'plasmicInternalEnableLoadingBoundary';\n\nfunction mkUndefinedDataProxy(\n promiseRef: { fetchingPromise: Promise<any> | undefined },\n fetchAndUpdateCache: (() => Promise<any>) | undefined\n) {\n let fetchAndUpdatePromise: Promise<any> | undefined = undefined;\n\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n if (prop === 'isPlasmicUndefinedDataProxy') {\n return true;\n }\n\n if (!fetchAndUpdateCache) {\n // There's no key so no fetch to kick off yet; when computing key,\n // we encountered some thrown exception (that's not an undefined data promise),\n // and so we can't fetch yet. This might be dependent on a $state or $prop value\n // that's currently undefined, etc. We will act like an undefined data object,\n // and trigger the usual fallback behavior\n return undefined;\n }\n\n const doFetchAndUpdate = () => {\n // We hold onto the promise last returned by fetchAndUpdateCache()\n // and keep reusing it until it is resolved. The reason is that the\n // Promise thrown here will be used as a dependency for memoized\n // fetchAndUpdateCache, which is a dependency on the memoized returned value\n // from usePlasmicDataOp(). If we have a fetch that's taking a long time,\n // we want to make sure that our memoized returned value is stable,\n // so that we don't keep calling setDollarQueries() (otherwise, for each\n // render, we find an unstable result, and call setDollarQueries(),\n // resulting in an infinite loop while fetch is happening).\n if (!fetchAndUpdatePromise) {\n fetchAndUpdatePromise = fetchAndUpdateCache().finally(() => {\n fetchAndUpdatePromise = undefined;\n });\n }\n return fetchAndUpdatePromise;\n };\n\n const promise =\n // existing fetch\n promiseRef.fetchingPromise ||\n // No existing fetch, so kick off a fetch\n doFetchAndUpdate();\n (promise as any).plasmicType = 'PlasmicUndefinedDataError';\n (promise as any).message = `Cannot read property ${String(\n prop\n )} - data is still loading`;\n throw promise;\n },\n }\n ) as any;\n}\n\ninterface PlasmicUndefinedDataErrorPromise extends Promise<any> {\n plasmicType: 'PlasmicUndefinedDataError';\n message: string;\n}\n\nfunction isPlasmicUndefinedDataErrorPromise(\n x: any\n): x is PlasmicUndefinedDataErrorPromise {\n return (\n !!x &&\n typeof x === 'object' &&\n (x as any).plasmicType === 'PlasmicUndefinedDataError'\n );\n}\n\nconst reactMajorVersion = +React.version.split('.')[0];\n\ntype ResolvableDataOp =\n | DataOp\n | undefined\n | null\n | (() => DataOp | undefined | null);\n\n/**\n * This returns either:\n * * DataOp to perform\n * * undefined/null, if no data op can be performed\n * * PlasmicUndefinedDataErrorPromise, if when trying to evaluate the DataOp to perform,\n * we encounter a PlasmicUndefinedDataErrorPromise, so this operation cannot be\n * performed until that promise is resolved.\n */\nfunction resolveDataOp(dataOp: ResolvableDataOp) {\n if (typeof dataOp === 'function') {\n try {\n return dataOp();\n } catch (err) {\n if (isPlasmicUndefinedDataErrorPromise(err)) {\n return err;\n }\n return null;\n }\n } else {\n return dataOp;\n }\n}\n\n/**\n * Fetches can be kicked off two ways -- normally, by useSWR(), or by some\n * expression accessing the `$queries.*` proxy when not ready yet. We need\n * a global cache for proxy-invoked caches, so that different components\n * with the same key can share the same fetch.\n *\n * The life cycle for this cache is short -- only the duration of a\n * proxy-invoked fetch, and once the fetch is done. That's because we really\n * just want SWR to be managing the cache, not us! Once the data is in SWR,\n * we will use SWR for getting data.\n */\nconst PRE_FETCHES = new Map<string, Promise<any>>();\n\nexport function usePlasmicDataOp<\n T extends SingleRowResult | ManyRowsResult,\n E = any\n>(\n dataOp: ResolvableDataOp,\n opts?: {\n paginate?: Pagination;\n noUndefinedDataProxy?: boolean;\n }\n): Partial<T> & {\n error?: E;\n isLoading?: boolean;\n} {\n const resolvedDataOp = resolveDataOp(dataOp);\n const ctx = usePlasmicDataSourceContext();\n const enableLoadingBoundary = !!ph.useDataEnv?.()?.[enableLoadingBoundaryKey];\n const { mutate, cache } = usePlasmicDataConfig();\n // Cannot perform this operation\n const isNullDataOp = !resolvedDataOp;\n // This operation depends on another data query to resolve first\n const isWaitingOnDependentQuery =\n isPlasmicUndefinedDataErrorPromise(resolvedDataOp);\n const key =\n !resolvedDataOp || isPlasmicUndefinedDataErrorPromise(resolvedDataOp)\n ? null\n : makeCacheKey(resolvedDataOp, {\n paginate: opts?.paginate,\n userAuthToken: ctx?.userAuthToken,\n });\n const fetchingData = React.useMemo(\n () => ({\n fetchingPromise: undefined as Promise<T> | undefined,\n }),\n [key]\n );\n const fetcher = React.useMemo(\n () => () => {\n // If we are in this function, that means SWR cache missed.\n if (!key) {\n throw new Error(`Fetcher should never be called without a proper key`);\n }\n\n // dataOp is guaranteed to be a DataOp, and not an undefined promise or null\n\n if (fetchingData.fetchingPromise) {\n // Fetch is already underway from this hook\n return fetchingData.fetchingPromise;\n }\n\n if (key && PRE_FETCHES.has(key)) {\n // Some other usePlasmicDataOp() hook elsewhere has already\n // started this fetch as well; re-use it here.\n const existing = PRE_FETCHES.get(key) as Promise<T>;\n fetchingData.fetchingPromise = existing;\n return existing;\n }\n\n // Else we really need to kick off this fetch now...\n const fetcherFn = () =>\n executePlasmicDataOp<T>(resolvedDataOp as DataOp, {\n userAuthToken: ctx?.userAuthToken || undefined,\n user: ctx?.user,\n paginate: opts?.paginate,\n });\n const fetcherPromise = fetcherFn();\n fetchingData.fetchingPromise = fetcherPromise;\n if (key) {\n PRE_FETCHES.set(key, fetcherPromise);\n // Once we have a result, we rely on swr to perform the caching,\n // so remove from our cache as quickly as possible.\n fetcherPromise.then(\n () => {\n PRE_FETCHES.delete(key);\n },\n () => {\n PRE_FETCHES.delete(key);\n }\n );\n }\n return fetcherPromise;\n },\n [key, fetchingData]\n );\n\n const dependentKeyDataErrorPromise = isPlasmicUndefinedDataErrorPromise(\n resolvedDataOp\n )\n ? resolvedDataOp\n : undefined;\n const fetchAndUpdateCache = React.useMemo(() => {\n if (!key && !dependentKeyDataErrorPromise) {\n // If there's no key, and no data query we're waiting for, then there's\n // no way to perform a fetch\n return undefined;\n }\n return () => {\n // This function is called when the undefined data proxy is invoked.\n // USUALLY, this means the data is not available in SWR yet, and\n // we need to kick off a fetch.\n\n if (fetchingData.fetchingPromise) {\n // No need to update cache as the exist promise call site will do it\n return fetchingData.fetchingPromise;\n }\n\n if (dependentKeyDataErrorPromise) {\n // We can't actually fetch yet, because we couldn't even evaluate the dataOp\n // to fetch for, because we depend on unfetched data. Once _that_\n // dataOp we depend on is finished, then we can try again. So we\n // will throw and wait for _that_ promise to be resolved instead.\n return dependentKeyDataErrorPromise;\n }\n\n if (!key) {\n throw new Error(`Expected key to be non-null`);\n }\n\n // SOMETIMES, SWR actually _does_ have the cache, but we still end up\n // here. That's because of how we update $queries, which takes two\n // cycles; each time we render, we build a `new$Queries`, and\n // `set$Queries(new$Queries)`. So once the data is ready, at the\n // first render, we will have data in `new$Queries` but not `$queries`,\n // but we will still finish rendering that pass, which means any `$queries`\n // access will still end up here. So we look into the SWR cache and\n // return any data that's here.\n const cached = cache.get(key);\n if (cached) {\n return Promise.resolve(cached);\n }\n const cachedError = cache.get(`$swr$${key}`);\n if (cachedError) {\n return Promise.reject(cachedError.error);\n }\n\n // Now, upon this proxy.get() miss, we want to kick off the fetch. We can't\n // wait for useSWR() to kick off the fetch, because upon data miss we are\n // throwing a promise, and useSWR() won't kick off the fetch till the effect,\n // so it will never get a chance to fetch. Instead, we fetch, and then we\n // put the fetched data into the SWR cache, so that next time useSWR() is called,\n // it will just find it in the cache.\n //\n // However, we don't want to fetch SYNCHRONOUSLY RIGHT NOW, becase we are in\n // the rendering phase (presumably, we're here because some component is trying\n // to read fetched data while rendering). Doing a fetch right now would invoke\n // the fetcher, which is wrapped by @plasmicapp/query to tracking loading state,\n // and upon loading state toggled to true, it will fire loading event listeners,\n // and for example, our antd's <GlobalLoadingIndicator /> will listen to this\n // event and immediately ask antd to show the loading indicator, which mutates\n // antd component's state. It is NOT LEGAL to call setState() on some other\n // component's state during rendering phase!\n //\n // We therefore will delay kicking off the fetch by a tick, so that we will safely\n // start the fetch outside of React rendering phase.\n const fetcherPromise = new Promise((resolve, reject) => {\n setTimeout(() => {\n fetcher().then(resolve, reject);\n }, 1);\n });\n fetcherPromise\n .then((data) => {\n // Insert the fetched data into the SWR cache\n mutate(key, data);\n })\n .catch((err) => {\n // Cache the error here to avoid infinite loop\n const keyInfo = key ? '$swr$' + key : '';\n cache.set(keyInfo, { ...(cache.get(keyInfo) ?? {}), error: err });\n });\n return fetcherPromise;\n };\n }, [fetcher, fetchingData, cache, key, dependentKeyDataErrorPromise]);\n const res = useMutablePlasmicQueryData<T, E>(key, fetcher, {\n shouldRetryOnError: false,\n\n // If revalidateIfStale is true, then if there's a cache entry with a key,\n // but no mounted hook with that key yet, and when the hook mounts with the key,\n // swr will revalidate. This may be reasonable behavior, but for us, this\n // happens all the time -- we prepopulate the cache with proxy-invoked fetch,\n // sometimes before swr had a chance to run the effect. So we turn off\n // revalidateIfStale here, and just let the user manage invalidation.\n // TODO: even so, we don't do this for now, as fallback data\n // does not get inserted into the cache with\n // `revalidateIfStale: false`, so we cannot invalidate them.\n // Will fix with usePlasmicDataInvalidate()\n // revalidateIfStale: false,\n });\n const { data, error, isLoading } = res;\n if (fetchingData.fetchingPromise != null && data !== undefined) {\n // Clear the fetching promise as the actual data is now used (so\n // revalidation is possible)\n fetchingData.fetchingPromise = undefined;\n }\n return React.useMemo(() => {\n const result = {\n ...(data ?? ({} as Partial<T>)),\n ...pick(res, 'isLoading', 'error'),\n };\n if (\n !opts?.noUndefinedDataProxy &&\n reactMajorVersion >= 18 &&\n enableLoadingBoundary &&\n (isLoading || isNullDataOp || isWaitingOnDependentQuery) &&\n result.data === undefined &&\n result.schema === undefined &&\n result.error === undefined\n ) {\n result.data = mkUndefinedDataProxy(fetchingData, fetchAndUpdateCache);\n result.schema = mkUndefinedDataProxy(fetchingData, fetchAndUpdateCache);\n }\n return result;\n }, [\n isNullDataOp,\n isWaitingOnDependentQuery,\n data,\n error,\n isLoading,\n opts?.noUndefinedDataProxy,\n enableLoadingBoundary,\n fetchingData,\n fetchAndUpdateCache,\n ]);\n}\n\nexport function usePlasmicDataMutationOp<\n T extends SingleRowResult | ManyRowsResult\n>(dataOp: ResolvableDataOp) {\n const ctx = usePlasmicDataSourceContext();\n const userToken = ctx?.userAuthToken;\n\n const getRealDataOp = React.useCallback(async () => {\n const tryGetRealDataOp = async (): Promise<DataOp | null> => {\n const resolved = resolveDataOp(dataOp);\n if (!resolved) {\n return null;\n } else if (isPlasmicUndefinedDataErrorPromise(resolved)) {\n // If calling the dataOp function resulted in a data fetch,\n // then we wait for the data fetch to finish and try\n // again\n await resolved;\n return tryGetRealDataOp();\n } else {\n return resolved;\n }\n };\n return await tryGetRealDataOp();\n }, [dataOp]);\n\n return React.useCallback(async () => {\n const { sourceId, opId, userArgs } = (await getRealDataOp()) ?? {};\n\n if (!sourceId || !opId) {\n return undefined;\n }\n\n return executePlasmicDataOp<T>(\n { sourceId, opId, userArgs },\n {\n userAuthToken: userToken || undefined,\n user: ctx?.user,\n }\n );\n }, [getRealDataOp, userToken]);\n}\n","import { ComponentMeta } from '@plasmicapp/host';\nimport React from 'react';\nimport { DataOp } from '../executor';\nimport { usePlasmicDataOp } from '../hooks/usePlasmicDataOp';\n\nexport interface DataOpConfig {\n name?: string;\n pageIndex?: number;\n pageSize?: number;\n}\n\nexport interface FetcherProps extends DataOpConfig {\n dataOp?: DataOp;\n children?: ($queries: Record<string, any>) => React.ReactElement | null;\n queries?: Record<string, any>;\n}\n\nexport function Fetcher(props: FetcherProps): React.ReactElement | null {\n const { dataOp, children, name, pageIndex, pageSize } = props;\n const data = usePlasmicDataOp(dataOp, {\n ...(!!pageIndex &&\n !!pageSize && {\n paginate: { pageIndex, pageSize },\n }),\n });\n\n const $queries = React.useMemo(\n () => ({ ...props.queries, [name ?? 'data']: data }),\n [props.queries, name, data]\n );\n\n return children?.($queries) ?? null;\n}\n\nexport const FetcherMeta: ComponentMeta<FetcherProps> = {\n name: 'plasmic-data-source-fetcher',\n displayName: 'Data Fetcher',\n props: {\n dataOp: {\n type: 'dataSourceOp' as any,\n displayName: 'Data',\n },\n name: {\n type: 'string',\n displayName: 'Variable name',\n },\n children: {\n type: 'slot',\n renderPropParams: ['$queries'],\n },\n pageSize: {\n type: 'number',\n advanced: true,\n displayName: 'Page size',\n description: 'Only fetch in batches of this size; for pagination',\n },\n pageIndex: {\n type: 'number',\n advanced: true,\n displayName: 'Page index',\n description: '0-based index of the paginated page to fetch',\n },\n },\n importPath: '@plasmicapp/react-web/lib/data-sources',\n importName: 'Fetcher',\n alwaysAutoName: true,\n styleSections: false,\n};\n","import {\n ManyRowsResult,\n TableFieldSchema,\n TableFieldType,\n TableSchema,\n} from './types';\nimport { mkIdMap, withoutNils } from './utils';\n\nexport type QueryResult = Partial<ManyRowsResult<any>> & {\n error?: any;\n isLoading?: boolean;\n};\n\nexport interface NormalizedData {\n data: Record<string, unknown>[];\n schema?: TableSchema;\n}\n\nexport function normalizeData(rawData: unknown): NormalizedData | undefined {\n if (!rawData) {\n return undefined;\n }\n\n const dataArray = tryGetDataArray(rawData);\n if (!dataArray) {\n return undefined;\n }\n const schema = (rawData as any).schema ?? tryGetSchema(dataArray);\n if (!schema) {\n return undefined;\n }\n return { data: dataArray, schema };\n}\n\nfunction tryGetDataArray(rawData: unknown): any[] | undefined {\n if (rawData == null || typeof rawData !== 'object') {\n return undefined;\n }\n\n if (Array.isArray(rawData)) {\n if (isArrayOfObjects(rawData)) {\n return rawData;\n } else {\n // TODO: array of primitives? Maybe we can wrap this?\n return undefined;\n }\n }\n\n if (rawData == null) {\n return undefined;\n }\n\n if ('data' in rawData && typeof (rawData as any).data === 'object') {\n if (\n Array.isArray((rawData as any).data) &&\n isArrayOfObjects((rawData as any).data)\n ) {\n return (rawData as any).data;\n } else if ((rawData as any).data != null) {\n return [(rawData as any).data];\n } else {\n return undefined;\n }\n }\n if ('isLoading' in rawData || 'error' in rawData) {\n return undefined;\n }\n\n // Maybe a singleton record?\n return [rawData];\n}\n\nfunction isArrayOfObjects(arr: unknown[]) {\n return arr.every((x) => typeof x === 'object' && !Array.isArray(x));\n}\n\nfunction tryGetSchema(data: any[]): TableSchema | undefined {\n const fieldMap: Record<string, TableFieldType> = {};\n data.forEach((entry: any) => {\n if (entry && typeof entry === 'object') {\n Array.from(Object.entries(entry)).forEach(([k, v]) => {\n const inferredType: TableFieldType =\n typeof v === 'string'\n ? 'string'\n : typeof v === 'boolean'\n ? 'boolean'\n : typeof v === 'number'\n ? 'number'\n : 'unknown';\n if (fieldMap[k] && fieldMap[k] !== inferredType) {\n fieldMap[k] = 'unknown';\n } else {\n fieldMap[k] = inferredType;\n }\n });\n }\n });\n return {\n id: 'inferred',\n fields: Object.entries(fieldMap).map(([f, t]) => ({\n id: f,\n type: t,\n readOnly: false,\n })),\n };\n}\n\nexport type BaseFieldConfig = {\n key?: string;\n fieldId?: string;\n};\n\nconst mkShortId = () => `${Math.random()}`;\n\nexport function deriveFieldConfigs<T extends BaseFieldConfig>(\n specifiedFieldsPartial: Partial<T>[],\n schema: TableSchema | undefined,\n makeDefaultConfig: (field: TableFieldSchema | undefined) => T\n): {\n mergedFields: T[];\n minimalFullLengthFields: Partial<T>[];\n} {\n const schemaFields = schema?.fields ?? [];\n const fieldById = mkIdMap(schemaFields);\n const specifiedFieldIds = new Set(\n withoutNils(specifiedFieldsPartial.map((f) => f.fieldId))\n );\n const keptSpecifiedFields = specifiedFieldsPartial.flatMap((f): T[] => {\n if (!f.fieldId) {\n return [\n { key: mkShortId(), ...makeDefaultConfig(undefined), ...f },\n ] as T[];\n }\n const field = fieldById.get(f.fieldId as string);\n\n // Drop configs with fieldIds no longer in the data.\n if (!field) {\n return [];\n }\n\n return [\n {\n key: mkShortId(),\n ...makeDefaultConfig(field),\n ...f,\n },\n ] as T[];\n });\n const newVirtualFields = schemaFields\n .filter((f) => !specifiedFieldIds.has(f.id))\n .map(\n (f): T => ({\n key: mkShortId(),\n ...makeDefaultConfig(f),\n })\n );\n const mergedFields = [...keptSpecifiedFields, ...newVirtualFields];\n const minimalFullLengthFields: Partial<T>[] = [\n ...specifiedFieldsPartial,\n ...newVirtualFields.map((f) => ({ key: f.key, fieldId: f.fieldId })),\n ] as Partial<T>[];\n return { mergedFields, minimalFullLengthFields };\n}\n","import React from 'react';\nimport { DataOpConfig } from '../components/Fetcher';\nimport { DataOp } from '../executor';\nimport { swallow } from '../utils';\nimport { usePlasmicDataOp } from './usePlasmicDataOp';\n\nfunction usePrevious<T>(value: T | undefined): T | undefined {\n const prevValue = React.useRef<T | undefined>(undefined);\n\n React.useEffect(() => {\n prevValue.current = value;\n\n return () => {\n prevValue.current = undefined;\n };\n });\n\n return prevValue.current;\n}\n\nexport interface DependencyAwareQueryConfig extends DataOpConfig {\n $queries: Record<string, any>;\n setDollarQueries: ($queries: Record<string, any>) => void;\n getDataOp: () => DataOp;\n}\n\n/**\n * @deprecated Prefer using `usePlasmicDataOp` directly instead.\n */\nexport function useDependencyAwareQuery({\n $queries,\n getDataOp,\n setDollarQueries,\n name,\n pageIndex,\n pageSize,\n}: DependencyAwareQueryConfig) {\n const data = usePlasmicDataOp(swallow(getDataOp), {\n ...(!!pageIndex &&\n !!pageSize && {\n paginate: { pageIndex, pageSize },\n }),\n });\n const finalName = name ?? 'data';\n const prevName = usePrevious(finalName);\n React.useEffect(() => {\n if (!(finalName in $queries) || $queries[finalName] !== data) {\n const $queries2 = {\n ...$queries,\n [finalName]: data,\n };\n if (prevName && finalName !== prevName && prevName in $queries) {\n delete $queries2[prevName];\n }\n setDollarQueries($queries2);\n }\n }, [finalName, prevName, data, $queries, setDollarQueries]);\n}\n"],"names":["DEFAULT_HOST","UNAUTHORIZED_MESSAGE","executePlasmicDataOp","_x","_x2","_executePlasmicDataOp2","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","op","opts","func","res","wrap","_callee$","_context","prev","next","getConfig","_executePlasmicDataOp","wrapLoadingFetcher","sent","abrupt","stop","_x3","_x4","_executePlasmicDataOp3","_callee2","_op$userArgs","host","url","resp","text","_callee2$","_context2","roleId","user","roleIds","includes","console","error","Error","sourceId","fetch","method","headers","_extends","userAuthToken","body","stringify","opId","userArgs","paginate","status","json","key","defaultValue","globalThis","_globalThis$key","swallow","f","_unused","undefined","pick","obj","_len","length","keys","Array","_key","_i","_keys","tuple","_len2","args","_key2","mkIdMap","xs","Map","map","x","id","withoutNils","filter","makeCacheKey","dataOp","queryDependencies","JSON","cacheKey","usePlasmicInvalidate","_usePlasmicDataConfig","usePlasmicDataConfig","cache","fallback","mutate","_ref","invalidatedKeys","getKeysToInvalidate","invalidateKey","allKeys","from","Set","concat","Object","some","k","_ref2","studioInvalidate","__PLASMIC_MUTATE_DATA_OP","Promise","all","enableLoadingBoundaryKey","mkUndefinedDataProxy","promiseRef","fetchAndUpdateCache","fetchAndUpdatePromise","Proxy","get","_target","prop","doFetchAndUpdate","promise","fetchingPromise","plasmicType","message","String","isPlasmicUndefinedDataErrorPromise","reactMajorVersion","React","version","split","resolveDataOp","err","PRE_FETCHES","usePlasmicDataOp","resolvedDataOp","ctx","usePlasmicDataSourceContext","enableLoadingBoundary","ph","_ph$useDataEnv","_usePlasmicDataConfig2","isNullDataOp","isWaitingOnDependentQuery","fetchingData","useMemo","fetcher","has","existing","fetcherFn","fetcherPromise","set","then","dependentKeyDataErrorPromise","cached","resolve","cachedError","reject","setTimeout","data","keyInfo","_cache$get","useMutablePlasmicQueryData","shouldRetryOnError","isLoading","result","noUndefinedDataProxy","schema","usePlasmicDataMutationOp","userToken","getRealDataOp","useCallback","_callee4","tryGetRealDataOp","_callee4$","_context4","_ref4","_callee3","resolved","_callee3$","_context3","_callee5","_yield$getRealDataOp","_ref6","_callee5$","_context5","t0","t1","Fetcher","props","children","name","pageIndex","pageSize","$queries","_extends2","queries","_children","FetcherMeta","displayName","type","renderPropParams","advanced","description","importPath","importName","alwaysAutoName","styleSections","normalizeData","rawData","dataArray","tryGetDataArray","_rawData$schema","tryGetSchema","isArray","isArrayOfObjects","arr","every","fieldMap","forEach","entry","entries","v","inferredType","fields","t","readOnly","mkShortId","Math","random","deriveFieldConfigs","specifiedFieldsPartial","makeDefaultConfig","schemaFields","_schema$fields","fieldById","specifiedFieldIds","fieldId","keptSpecifiedFields","flatMap","field","newVirtualFields","mergedFields","minimalFullLengthFields","usePrevious","value","prevValue","useRef","useEffect","current","useDependencyAwareQuery","getDataOp","setDollarQueries","finalName","prevName","$queries2"],"mappings":"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"}