@soda-gql/core 0.11.9 → 0.11.10
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.
- package/dist/index-Bj60NxMb.d.cts.map +1 -1
- package/dist/index-DPtgl2f4.d.ts.map +1 -1
- package/dist/index-DbANHktR.d.ts.map +1 -1
- package/dist/index-IMOOkvQf.d.cts.map +1 -1
- package/dist/index.cjs +35 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +35 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -726,6 +726,38 @@ const createFieldFactoriesInner = (schema, typeName) => {
|
|
|
726
726
|
return Object.fromEntries(entries);
|
|
727
727
|
};
|
|
728
728
|
|
|
729
|
+
//#endregion
|
|
730
|
+
//#region packages/core/src/utils/promise.ts
|
|
731
|
+
/**
|
|
732
|
+
* Promise detection utilities for cross-realm compatibility.
|
|
733
|
+
* @module
|
|
734
|
+
*/
|
|
735
|
+
/**
|
|
736
|
+
* Check if a value is Promise-like (has .then method).
|
|
737
|
+
*
|
|
738
|
+
* This function uses duck typing instead of `instanceof Promise` to work across
|
|
739
|
+
* VM sandbox boundaries where Promises created in a different realm have a
|
|
740
|
+
* different constructor.
|
|
741
|
+
*
|
|
742
|
+
* @example
|
|
743
|
+
* ```typescript
|
|
744
|
+
* // Works with native Promises
|
|
745
|
+
* isPromiseLike(Promise.resolve(42)); // true
|
|
746
|
+
*
|
|
747
|
+
* // Works with VM sandbox Promises (instanceof would fail)
|
|
748
|
+
* const vmPromise = vm.runInContext("Promise.resolve(42)", context);
|
|
749
|
+
* isPromiseLike(vmPromise); // true (instanceof Promise would be false)
|
|
750
|
+
*
|
|
751
|
+
* // Rejects non-Promises
|
|
752
|
+
* isPromiseLike({ then: "not a function" }); // false
|
|
753
|
+
* isPromiseLike(null); // false
|
|
754
|
+
* isPromiseLike(42); // false
|
|
755
|
+
* ```
|
|
756
|
+
*/
|
|
757
|
+
const isPromiseLike = (value) => {
|
|
758
|
+
return value !== null && typeof value === "object" && "then" in value && typeof value.then === "function";
|
|
759
|
+
};
|
|
760
|
+
|
|
729
761
|
//#endregion
|
|
730
762
|
//#region packages/core/src/types/element/lazy-evaluator.ts
|
|
731
763
|
/**
|
|
@@ -747,7 +779,7 @@ const createLazyEvaluator = (define, getDeps, createDepGenerator) => {
|
|
|
747
779
|
}
|
|
748
780
|
if (getDeps) for (const dep of getDeps()) yield* createDepGenerator(dep);
|
|
749
781
|
const defined = define(context);
|
|
750
|
-
if (!(defined
|
|
782
|
+
if (!isPromiseLike(defined)) return (cache = { value: defined }).value;
|
|
751
783
|
promise = defined.then((value) => {
|
|
752
784
|
cache = { value };
|
|
753
785
|
promise = null;
|
|
@@ -1151,7 +1183,7 @@ const createOperationComposerFactory = (schema, adapter, transformDocument) => {
|
|
|
1151
1183
|
return resolvedAdapter.aggregateFragmentMetadata(fragmentMetaInfos);
|
|
1152
1184
|
};
|
|
1153
1185
|
const fragmentMetadataResults = fragmentUsages.map((usage) => usage.metadataBuilder ? usage.metadataBuilder() : void 0);
|
|
1154
|
-
const hasAsyncFragmentMetadata = fragmentMetadataResults.some((r) => r
|
|
1186
|
+
const hasAsyncFragmentMetadata = fragmentMetadataResults.some((r) => isPromiseLike(r));
|
|
1155
1187
|
const buildOperationMetadata = (aggregatedFragmentMetadata) => {
|
|
1156
1188
|
const schemaLevel = resolvedAdapter.schemaLevel;
|
|
1157
1189
|
return options.metadata?.({
|
|
@@ -1194,7 +1226,7 @@ const createOperationComposerFactory = (schema, adapter, transformDocument) => {
|
|
|
1194
1226
|
const aggregated = aggregateFragmentMetadata(fragmentMetadataResults);
|
|
1195
1227
|
const createDefinition = makeCreateDefinition(aggregated);
|
|
1196
1228
|
const operationMetadataResult = buildOperationMetadata(aggregated);
|
|
1197
|
-
if (operationMetadataResult
|
|
1229
|
+
if (isPromiseLike(operationMetadataResult)) return operationMetadataResult.then((metadata) => createDefinition({ metadata }));
|
|
1198
1230
|
return createDefinition({ metadata: operationMetadataResult });
|
|
1199
1231
|
});
|
|
1200
1232
|
};
|