@uniformdev/cli 19.85.1-alpha.14 → 19.86.0

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 (2) hide show
  1. package/dist/index.mjs +41 -175
  2. package/package.json +8 -8
package/dist/index.mjs CHANGED
@@ -669,62 +669,30 @@ var AssetListModule = {
669
669
 
670
670
  // src/commands/canvas/commands/asset/pull.ts
671
671
  import { UncachedAssetClient as UncachedAssetClient3 } from "@uniformdev/assets";
672
- import { UncachedFileClient } from "@uniformdev/files";
673
672
 
674
673
  // src/files/index.ts
675
674
  import { preferredType } from "@thi.ng/mime";
676
675
  import { FILE_READY_STATE, getFileNameFromUrl } from "@uniformdev/files";
676
+ import { createHash } from "crypto";
677
677
  import fsj from "fs-jetpack";
678
678
  import sizeOf from "image-size";
679
679
  import PQueue from "p-queue";
680
680
  import { dirname as dirname2, join as join2 } from "path";
681
681
  var FILES_DIRECTORY_NAME = "files";
682
- var escapeRegExp = (string) => {
683
- return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
684
- };
685
682
  var urlToHash = (url) => {
686
- return Buffer.from(
687
- // We take only the first 64 characters of the pathname as
688
- // that's enough to guarantee uniqueness
689
- new URL(url).pathname.substring(0, 64)
690
- ).toString("base64");
691
- };
692
- var hashToPartialPathname = (hash) => {
693
- try {
694
- return Buffer.from(hash, "base64").toString("utf8");
695
- } catch {
696
- return null;
697
- }
698
- };
699
- var findUrlMatchingPartialPathname = (source, pathname) => {
700
- const escapedPathname = escapeRegExp(pathname);
701
- const regex = new RegExp(`"(https://([^"]*?)?img.uniform.(rocks|global)${escapedPathname}([^"]*?))"`);
702
- const match = source.match(regex);
703
- if (match && match[1]) {
704
- return match[1];
705
- }
706
- return null;
683
+ const hash = createHash("sha256");
684
+ hash.update(url);
685
+ return hash.digest("hex");
707
686
  };
708
- var urlToFileName = (url, hash) => {
709
- const fileName = hash ?? urlToHash(url);
687
+ var urlToFileName = (url) => {
688
+ const fileName = urlToHash(url);
710
689
  const fileNameChunks = url.split(".");
711
690
  const fileExtension = fileNameChunks.length > 1 ? fileNameChunks.at(-1) : "";
712
691
  return `${fileName}${fileExtension ? `.${fileExtension}` : ""}`;
713
692
  };
714
- var getFilesDirectory = (directory) => {
715
- const isPackage = isPathAPackageFile(directory);
716
- return isPackage ? dirname2(directory) : (
717
- // If we are syncing to a directory, we want to write all files into a
718
- // top-lvl folder. That way any entities that contain files will sync to the
719
- // same directory, so there is no duplication
720
- join2(directory, "..")
721
- );
722
- };
723
- var getUniformFileUrlMatches = (string) => {
724
- return string.matchAll(/"(https:\/\/([^"]*?)?img\.uniform\.(rocks|global)\/([^"]*?))"/g);
725
- };
726
693
  var deleteDownloadedFileByUrl = async (url, options) => {
727
- const writeDirectory = getFilesDirectory(options.directory);
694
+ const isPackage = isPathAPackageFile(options.directory);
695
+ const writeDirectory = isPackage ? dirname2(options.directory) : options.directory;
728
696
  const fileName = urlToFileName(url);
729
697
  const fileToDelete = join2(writeDirectory, FILES_DIRECTORY_NAME, fileName);
730
698
  try {
@@ -735,14 +703,18 @@ var deleteDownloadedFileByUrl = async (url, options) => {
735
703
  };
736
704
  var extractAndDownloadUniformFilesForObject = async (object, options) => {
737
705
  const objectAsString = JSON.stringify(object);
738
- const uniformFileUrlMatches = getUniformFileUrlMatches(objectAsString);
739
- const writeDirectory = getFilesDirectory(options.directory);
706
+ const uniformFileUrlMatches = objectAsString.matchAll(
707
+ /"(https:\/\/(.*)?img\.uniform\.(rocks|global)\/(.*?))"/g
708
+ );
709
+ const isPackage = isPathAPackageFile(options.directory);
710
+ const writeDirectory = isPackage ? dirname2(options.directory) : options.directory;
740
711
  if (uniformFileUrlMatches) {
741
712
  const fileDownloadQueue = new PQueue({ concurrency: 10 });
742
713
  for (const match of uniformFileUrlMatches) {
743
714
  const url = new URL(match[1]);
744
715
  fileDownloadQueue.add(async () => {
745
716
  try {
717
+ const fetchUrl = `${url.origin}${url.pathname}?format=original`;
746
718
  const fileName = urlToFileName(url.toString());
747
719
  const fileAlreadyExists = await fsj.existsAsync(
748
720
  join2(writeDirectory, FILES_DIRECTORY_NAME, fileName)
@@ -750,23 +722,6 @@ var extractAndDownloadUniformFilesForObject = async (object, options) => {
750
722
  if (fileAlreadyExists) {
751
723
  return;
752
724
  }
753
- const file = await options.fileClient.get({ url: url.toString() }).catch(() => null);
754
- if (!file) {
755
- console.warn(`Skipping file ${url} as it does not exist in the project anymore`);
756
- return;
757
- }
758
- if (file.sourceId) {
759
- try {
760
- const hashAlreadyExists = await fsj.findAsync(join2(writeDirectory, FILES_DIRECTORY_NAME), {
761
- matching: [file.sourceId, `${file.sourceId}.*`]
762
- });
763
- if (hashAlreadyExists.length > 0) {
764
- return;
765
- }
766
- } catch {
767
- }
768
- }
769
- const fetchUrl = `${url.origin}${url.pathname}?format=original`;
770
725
  const response = await fetch(fetchUrl);
771
726
  if (!response.ok) {
772
727
  return;
@@ -784,8 +739,11 @@ var extractAndDownloadUniformFilesForObject = async (object, options) => {
784
739
  };
785
740
  var extractAndUploadUniformFilesForObject = async (object, options) => {
786
741
  let objectAsString = JSON.stringify(object);
787
- const uniformFileUrlMatches = getUniformFileUrlMatches(objectAsString);
788
- const writeDirectory = getFilesDirectory(options.directory);
742
+ const uniformFileUrlMatches = objectAsString.matchAll(
743
+ /"(https:\/\/(.*)?img\.uniform\.(rocks|global)\/(.*?))"/g
744
+ );
745
+ const isPackage = isPathAPackageFile(options.directory);
746
+ const writeDirectory = isPackage ? dirname2(options.directory) : options.directory;
789
747
  if (uniformFileUrlMatches) {
790
748
  const fileUploadQueue = new PQueue({ concurrency: 3 });
791
749
  for (const match of uniformFileUrlMatches) {
@@ -873,7 +831,9 @@ var extractAndUploadUniformFilesForObject = async (object, options) => {
873
831
  };
874
832
  var swapOutUniformFileUrlsForTargetProject = async (object, options) => {
875
833
  let objectAsString = JSON.stringify(object);
876
- const uniformFileUrlMatches = getUniformFileUrlMatches(objectAsString);
834
+ const uniformFileUrlMatches = objectAsString.matchAll(
835
+ /"(https:\/\/(.*)?img\.uniform\.(rocks|global)\/(.*?))"/g
836
+ );
877
837
  if (uniformFileUrlMatches) {
878
838
  const fileUrlReplacementQueue = new PQueue({ concurrency: 3 });
879
839
  for (const match of uniformFileUrlMatches) {
@@ -898,45 +858,6 @@ var swapOutUniformFileUrlsForTargetProject = async (object, options) => {
898
858
  }
899
859
  return JSON.parse(objectAsString);
900
860
  };
901
- var replaceRemoteUrlsWithLocalReferences = async (sourceObject, targetObject, options) => {
902
- let sourceObjectAsString = JSON.stringify(sourceObject);
903
- const targetObjectAsString = JSON.stringify(targetObject);
904
- const uniformFileUrlMatches = getUniformFileUrlMatches(sourceObjectAsString);
905
- const writeDirectory = getFilesDirectory(options.directory);
906
- if (uniformFileUrlMatches) {
907
- const fileUrlReplacementQueue = new PQueue({ concurrency: 3 });
908
- for (const match of uniformFileUrlMatches) {
909
- const url = match[1];
910
- fileUrlReplacementQueue.add(async () => {
911
- try {
912
- const localFileName = urlToFileName(url);
913
- const fileExistsLocally = await fsj.existsAsync(
914
- join2(writeDirectory, FILES_DIRECTORY_NAME, localFileName)
915
- );
916
- if (fileExistsLocally) {
917
- return;
918
- }
919
- const file = await options.fileClient.get({ url }).catch(() => null);
920
- if (!file || !file.sourceId) {
921
- return;
922
- }
923
- const originalPartialPath = hashToPartialPathname(file.sourceId);
924
- if (!originalPartialPath) {
925
- return;
926
- }
927
- const originalUrl = findUrlMatchingPartialPathname(targetObjectAsString, originalPartialPath);
928
- if (!originalUrl) {
929
- return;
930
- }
931
- sourceObjectAsString = sourceObjectAsString.replaceAll(`"${url}"`, `"${originalUrl}"`);
932
- } catch {
933
- }
934
- });
935
- }
936
- await fileUrlReplacementQueue.onIdle();
937
- }
938
- return JSON.parse(sourceObjectAsString);
939
- };
940
861
  var updateAssetFileIdBasedOnUrl = async (asset, options) => {
941
862
  var _a, _b, _c;
942
863
  const fileUrl = (_b = (_a = asset.asset.fields) == null ? void 0 : _a.url) == null ? void 0 : _b.value;
@@ -1088,7 +1009,6 @@ var AssetPullModule = {
1088
1009
  fetch: fetch3,
1089
1010
  projectId
1090
1011
  });
1091
- const fileClient = new UncachedFileClient({ apiKey, apiHost, fetch: fetch3, projectId });
1092
1012
  const source = createAssetEngineDataSource({ client });
1093
1013
  let target;
1094
1014
  const isPackage = isPathAPackageFile(directory);
@@ -1130,27 +1050,14 @@ var AssetPullModule = {
1130
1050
  whatIf,
1131
1051
  allowEmptySource: true,
1132
1052
  log: createSyncEngineConsoleLogger({ diffMode }),
1133
- onBeforeCompareObjects: async (sourceObject, targetObject) => {
1134
- var _a, _b;
1053
+ onBeforeCompareObjects: async (sourceObject) => {
1135
1054
  delete sourceObject.object.asset._author;
1136
- const sourceObjectWithPotentiallySwappedUrl = await replaceRemoteUrlsWithLocalReferences(
1137
- sourceObject,
1138
- targetObject,
1139
- {
1140
- directory,
1141
- fileClient
1142
- }
1143
- );
1144
- if (((_a = sourceObjectWithPotentiallySwappedUrl.object.asset.fields) == null ? void 0 : _a.url) && ((_b = targetObject.object.asset.fields) == null ? void 0 : _b.url) && sourceObjectWithPotentiallySwappedUrl.object.asset.fields.url.value === targetObject.object.asset.fields.url.value) {
1145
- targetObject.object.asset.fields.file = sourceObjectWithPotentiallySwappedUrl.object.asset.fields.file;
1146
- }
1147
- return sourceObjectWithPotentiallySwappedUrl;
1055
+ return sourceObject;
1148
1056
  },
1149
1057
  onBeforeWriteObject: async (sourceObject) => {
1150
1058
  delete sourceObject.object.asset._author;
1151
1059
  return extractAndDownloadUniformFilesForObject(sourceObject, {
1152
- directory,
1153
- fileClient
1060
+ directory
1154
1061
  });
1155
1062
  }
1156
1063
  });
@@ -1159,7 +1066,7 @@ var AssetPullModule = {
1159
1066
 
1160
1067
  // src/commands/canvas/commands/asset/push.ts
1161
1068
  import { UncachedAssetClient as UncachedAssetClient4 } from "@uniformdev/assets";
1162
- import { UncachedFileClient as UncachedFileClient2 } from "@uniformdev/files";
1069
+ import { UncachedFileClient } from "@uniformdev/files";
1163
1070
  var AssetPushModule = {
1164
1071
  command: "push <directory>",
1165
1072
  describe: "Pushes all assets from files in a directory to Uniform",
@@ -1220,7 +1127,7 @@ var AssetPushModule = {
1220
1127
  });
1221
1128
  }
1222
1129
  const target = createAssetEngineDataSource({ client });
1223
- const fileClient = new UncachedFileClient2({ apiKey, apiHost, fetch: fetch3, projectId });
1130
+ const fileClient = new UncachedFileClient({ apiKey, apiHost, fetch: fetch3, projectId });
1224
1131
  await syncEngine({
1225
1132
  source,
1226
1133
  target,
@@ -1243,15 +1150,10 @@ var AssetPushModule = {
1243
1150
  return sourceObjectWithNewFileUrls;
1244
1151
  },
1245
1152
  onBeforeWriteObject: async (sourceObject) => {
1246
- const sourceObjectWithNewFileUrls = await swapOutUniformFileUrlsForTargetProject(
1247
- await extractAndUploadUniformFilesForObject(sourceObject, {
1248
- directory,
1249
- fileClient
1250
- }),
1251
- {
1252
- fileClient
1253
- }
1254
- );
1153
+ const sourceObjectWithNewFileUrls = await extractAndUploadUniformFilesForObject(sourceObject, {
1154
+ directory,
1155
+ fileClient
1156
+ });
1255
1157
  sourceObjectWithNewFileUrls.object = await updateAssetFileIdBasedOnUrl(
1256
1158
  sourceObjectWithNewFileUrls.object,
1257
1159
  {
@@ -2187,7 +2089,6 @@ var CompositionPublishModule = {
2187
2089
 
2188
2090
  // src/commands/canvas/commands/composition/pull.ts
2189
2091
  import { UncachedCanvasClient as UncachedCanvasClient10 } from "@uniformdev/canvas";
2190
- import { UncachedFileClient as UncachedFileClient3 } from "@uniformdev/files";
2191
2092
  var CompositionPullModule = {
2192
2093
  command: "pull <directory>",
2193
2094
  describe: "Pulls all compositions to local files in a directory",
@@ -2247,7 +2148,6 @@ var CompositionPullModule = {
2247
2148
  }) => {
2248
2149
  const fetch3 = nodeFetchProxy(proxy);
2249
2150
  const client = new UncachedCanvasClient10({ apiKey, apiHost, fetch: fetch3, projectId });
2250
- const fileClient = new UncachedFileClient3({ apiKey, apiHost, fetch: fetch3, projectId });
2251
2151
  const source = createComponentInstanceEngineDataSource({ client, state, onlyCompositions, onlyPatterns });
2252
2152
  const isPackage = isPathAPackageFile(directory);
2253
2153
  let target;
@@ -2277,16 +2177,9 @@ var CompositionPullModule = {
2277
2177
  whatIf,
2278
2178
  allowEmptySource: true,
2279
2179
  log: createSyncEngineConsoleLogger({ diffMode }),
2280
- onBeforeCompareObjects: async (sourceObject, targetObject) => {
2281
- return replaceRemoteUrlsWithLocalReferences(sourceObject, targetObject, {
2282
- directory,
2283
- fileClient
2284
- });
2285
- },
2286
2180
  onBeforeWriteObject: async (sourceObject) => {
2287
2181
  return extractAndDownloadUniformFilesForObject(sourceObject, {
2288
- directory,
2289
- fileClient
2182
+ directory
2290
2183
  });
2291
2184
  }
2292
2185
  });
@@ -2295,7 +2188,7 @@ var CompositionPullModule = {
2295
2188
 
2296
2189
  // src/commands/canvas/commands/composition/push.ts
2297
2190
  import { UncachedCanvasClient as UncachedCanvasClient11 } from "@uniformdev/canvas";
2298
- import { UncachedFileClient as UncachedFileClient4 } from "@uniformdev/files";
2191
+ import { UncachedFileClient as UncachedFileClient2 } from "@uniformdev/files";
2299
2192
  var CompositionPushModule = {
2300
2193
  command: "push <directory>",
2301
2194
  describe: "Pushes all compositions from files in a directory to Uniform Canvas",
@@ -2365,7 +2258,7 @@ var CompositionPushModule = {
2365
2258
  });
2366
2259
  }
2367
2260
  const target = createComponentInstanceEngineDataSource({ client, state, onlyCompositions, onlyPatterns });
2368
- const fileClient = new UncachedFileClient4({ apiKey, apiHost, fetch: fetch3, projectId });
2261
+ const fileClient = new UncachedFileClient2({ apiKey, apiHost, fetch: fetch3, projectId });
2369
2262
  await syncEngine({
2370
2263
  source,
2371
2264
  target,
@@ -3168,7 +3061,6 @@ var EntryListModule = {
3168
3061
 
3169
3062
  // src/commands/canvas/commands/entry/pull.ts
3170
3063
  import { ContentClient as ContentClient10 } from "@uniformdev/canvas";
3171
- import { UncachedFileClient as UncachedFileClient5 } from "@uniformdev/files";
3172
3064
 
3173
3065
  // src/commands/canvas/entryEngineDataSource.ts
3174
3066
  import { convertEntryToPutEntry } from "@uniformdev/canvas";
@@ -3268,7 +3160,6 @@ var EntryPullModule = {
3268
3160
  projectId,
3269
3161
  bypassCache: true
3270
3162
  });
3271
- const fileClient = new UncachedFileClient5({ apiKey, apiHost, fetch: fetch3, projectId });
3272
3163
  const source = createEntryEngineDataSource({ client, state });
3273
3164
  let target;
3274
3165
  const isPackage = isPathAPackageFile(directory);
@@ -3297,26 +3188,13 @@ var EntryPullModule = {
3297
3188
  mode,
3298
3189
  whatIf,
3299
3190
  allowEmptySource: true,
3300
- log: createSyncEngineConsoleLogger({ diffMode }),
3301
- onBeforeCompareObjects: async (sourceObject, targetObject) => {
3302
- return replaceRemoteUrlsWithLocalReferences(sourceObject, targetObject, {
3303
- directory,
3304
- fileClient
3305
- });
3306
- },
3307
- onBeforeWriteObject: async (sourceObject) => {
3308
- return extractAndDownloadUniformFilesForObject(sourceObject, {
3309
- directory,
3310
- fileClient
3311
- });
3312
- }
3191
+ log: createSyncEngineConsoleLogger({ diffMode })
3313
3192
  });
3314
3193
  }
3315
3194
  };
3316
3195
 
3317
3196
  // src/commands/canvas/commands/entry/push.ts
3318
3197
  import { ContentClient as ContentClient11 } from "@uniformdev/canvas";
3319
- import { UncachedFileClient as UncachedFileClient6 } from "@uniformdev/files";
3320
3198
  var EntryPushModule = {
3321
3199
  command: "push <directory>",
3322
3200
  describe: "Pushes all entries from files in a directory to Uniform",
@@ -3381,24 +3259,12 @@ var EntryPushModule = {
3381
3259
  });
3382
3260
  }
3383
3261
  const target = createEntryEngineDataSource({ client, state });
3384
- const fileClient = new UncachedFileClient6({ apiKey, apiHost, fetch: fetch3, projectId });
3385
3262
  await syncEngine({
3386
3263
  source,
3387
3264
  target,
3388
3265
  mode,
3389
3266
  whatIf,
3390
- log: createSyncEngineConsoleLogger({ diffMode }),
3391
- onBeforeCompareObjects: async (sourceObject) => {
3392
- return swapOutUniformFileUrlsForTargetProject(sourceObject, {
3393
- fileClient
3394
- });
3395
- },
3396
- onBeforeWriteObject: async (sourceObject) => {
3397
- return extractAndUploadUniformFilesForObject(sourceObject, {
3398
- directory,
3399
- fileClient
3400
- });
3401
- }
3267
+ log: createSyncEngineConsoleLogger({ diffMode })
3402
3268
  });
3403
3269
  }
3404
3270
  };
@@ -5589,7 +5455,7 @@ import { PostHog } from "posthog-node";
5589
5455
  // package.json
5590
5456
  var package_default = {
5591
5457
  name: "@uniformdev/cli",
5592
- version: "19.85.0",
5458
+ version: "19.86.0",
5593
5459
  description: "Uniform command line interface tool",
5594
5460
  license: "SEE LICENSE IN LICENSE.txt",
5595
5461
  main: "./cli.js",
@@ -7715,7 +7581,6 @@ var SyncPullModule = {
7715
7581
  handler: async ({ serialization, ...otherParams }) => {
7716
7582
  const config2 = serialization;
7717
7583
  const enabledEntities = Object.entries({
7718
- asset: AssetPullModule,
7719
7584
  category: CategoryPullModule,
7720
7585
  dataType: DataTypePullModule,
7721
7586
  prompt: PromptPullModule,
@@ -7731,7 +7596,8 @@ var SyncPullModule = {
7731
7596
  projectMapNode: ProjectMapNodePullModule,
7732
7597
  redirect: RedirectDefinitionPullModule,
7733
7598
  entry: EntryPullModule,
7734
- contentType: ContentTypePullModule
7599
+ contentType: ContentTypePullModule,
7600
+ asset: AssetPullModule
7735
7601
  }).filter(([entityType]) => {
7736
7602
  var _a, _b, _c, _d, _e, _f;
7737
7603
  return Boolean((_a = config2.entitiesConfig) == null ? void 0 : _a[entityType]) && ((_c = (_b = config2.entitiesConfig) == null ? void 0 : _b[entityType]) == null ? void 0 : _c.disabled) !== true && ((_f = (_e = (_d = config2.entitiesConfig) == null ? void 0 : _d[entityType]) == null ? void 0 : _e.pull) == null ? void 0 : _f.disabled) !== true;
@@ -7807,7 +7673,6 @@ var SyncPushModule = {
7807
7673
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
7808
7674
  const config2 = serialization;
7809
7675
  const enabledEntities = Object.entries({
7810
- asset: AssetPushModule,
7811
7676
  category: CategoryPushModule,
7812
7677
  dataType: DataTypePushModule,
7813
7678
  prompt: PromptPushModule,
@@ -7823,7 +7688,8 @@ var SyncPushModule = {
7823
7688
  projectMapNode: ProjectMapNodePushModule,
7824
7689
  redirect: RedirectDefinitionPushModule,
7825
7690
  contentType: ContentTypePushModule,
7826
- entry: EntryPushModule
7691
+ entry: EntryPushModule,
7692
+ asset: AssetPushModule
7827
7693
  }).filter(([entityType]) => {
7828
7694
  var _a2, _b2, _c2, _d2, _e2, _f2;
7829
7695
  return Boolean((_a2 = config2.entitiesConfig) == null ? void 0 : _a2[entityType]) && ((_c2 = (_b2 = config2.entitiesConfig) == null ? void 0 : _b2[entityType]) == null ? void 0 : _c2.disabled) !== true && ((_f2 = (_e2 = (_d2 = config2.entitiesConfig) == null ? void 0 : _d2[entityType]) == null ? void 0 : _e2.push) == null ? void 0 : _f2.disabled) !== true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/cli",
3
- "version": "19.85.1-alpha.14+148ddea5e",
3
+ "version": "19.86.0",
4
4
  "description": "Uniform command line interface tool",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "main": "./cli.js",
@@ -17,12 +17,12 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "@thi.ng/mime": "^2.2.23",
20
- "@uniformdev/assets": "19.85.1-alpha.14+148ddea5e",
21
- "@uniformdev/canvas": "19.85.1-alpha.14+148ddea5e",
22
- "@uniformdev/context": "19.85.1-alpha.14+148ddea5e",
23
- "@uniformdev/files": "19.85.1-alpha.14+148ddea5e",
24
- "@uniformdev/project-map": "19.85.1-alpha.14+148ddea5e",
25
- "@uniformdev/redirect": "19.85.1-alpha.14+148ddea5e",
20
+ "@uniformdev/assets": "19.86.0",
21
+ "@uniformdev/canvas": "19.86.0",
22
+ "@uniformdev/context": "19.86.0",
23
+ "@uniformdev/files": "19.86.0",
24
+ "@uniformdev/project-map": "19.86.0",
25
+ "@uniformdev/redirect": "19.86.0",
26
26
  "call-bind": "^1.0.2",
27
27
  "colorette": "2.0.20",
28
28
  "cosmiconfig": "8.3.6",
@@ -69,5 +69,5 @@
69
69
  "publishConfig": {
70
70
  "access": "public"
71
71
  },
72
- "gitHead": "148ddea5e71802b94cac8856b95f3ad285b5be25"
72
+ "gitHead": "33b5e38f48fe693bf6a4b195009222fd34b9e9f3"
73
73
  }