@isograph/react 0.0.0-main-368b39c5 → 0.0.0-main-6b4f9048
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/.turbo/turbo-compile-typescript.log +1 -1
- package/dist/core/FragmentReference.d.ts +3 -1
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/cache.d.ts +1 -0
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +51 -29
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +8 -1
- package/dist/core/util.d.ts +3 -0
- package/dist/core/util.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/core/FragmentReference.ts +9 -1
- package/src/core/cache.ts +63 -29
- package/src/core/read.ts +11 -1
- package/src/core/util.ts +4 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @isograph/react@0.0.0-main-
|
|
2
|
+
> @isograph/react@0.0.0-main-6b4f9048 compile-typescript /Users/runner/work/isograph/isograph/libs/isograph-react
|
|
3
3
|
> rm -rf dist/* && tsc -p tsconfig.pkg.json
|
|
4
4
|
|
|
@@ -2,7 +2,9 @@ import { ReaderWithRefetchQueries } from '../core/entrypoint';
|
|
|
2
2
|
import { type Link } from './IsographEnvironment';
|
|
3
3
|
import { PromiseWrapper } from './PromiseWrapper';
|
|
4
4
|
import type { StartUpdate } from './reader';
|
|
5
|
-
export type VariableValue = string | number | boolean | null |
|
|
5
|
+
export type VariableValue = string | number | boolean | null | {
|
|
6
|
+
readonly [index: string]: VariableValue;
|
|
7
|
+
} | VariableValue[];
|
|
6
8
|
export type Variables = {
|
|
7
9
|
readonly [index: string]: VariableValue;
|
|
8
10
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FragmentReference.d.ts","sourceRoot":"","sources":["../../src/core/FragmentReference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,MAAM,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"FragmentReference.d.ts","sourceRoot":"","sources":["../../src/core/FragmentReference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ;IACE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;CACzC,GACD,aAAa,EAAE,CAAC;AAEpB,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS;IACrC,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,CAAC;CAC9B,GACG,CAAC,GACD,KAAK,CAAC;AAEV,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS;IAC3C,UAAU,EAAE,MAAM,CAAC,SAAS,SAAS,CAAC;CACvC,GACG,CAAC,GACD,SAAS,CAAC;AAEd,MAAM,MAAM,kBAAkB,CAC5B,CAAC,SAAS;IACR,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACnC,IACC,CAAC,CAAC,aAAa,CAAC,CAAC;AAErB,MAAM,MAAM,iBAAiB,CAC3B,cAAc,SAAS,qBAAqB,EAC5C,iBAAiB,IACf;IACF,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,wBAAwB,EAAE,cAAc,CAC/C,wBAAwB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAC5D,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACtD,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAElD,wBAAgB,4BAA4B,CAC1C,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC9C,SAAS,EAAE,MAAM,GAChB,4BAA4B,CAE9B"}
|
package/dist/core/cache.d.ts
CHANGED
|
@@ -31,4 +31,5 @@ export declare function insertIfNotExists<K, V>(map: Map<K, Set<V>>, key: K): Se
|
|
|
31
31
|
export declare function getParentRecordKey(astNode: NormalizationLinkedField | NormalizationScalarField | ReaderLinkedField | ReaderScalarField, variables: Variables): string;
|
|
32
32
|
export declare const FIRST_SPLIT_KEY = "____";
|
|
33
33
|
export declare const SECOND_SPLIT_KEY = "___";
|
|
34
|
+
export declare const THIRD_SPLIT_KEY = "__";
|
|
34
35
|
//# sourceMappingURL=cache.d.ts.map
|
package/dist/core/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,WAAW,EACZ,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,kBAAkB,EAElB,wBAAwB,EACxB,wBAAwB,EACxB,wCAAwC,EACxC,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,KAAK,qBAAqB,
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,WAAW,EACZ,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,kBAAkB,EAElB,wBAAwB,EACxB,wBAAwB,EACxB,wCAAwC,EACxC,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,KAAK,qBAAqB,EAE3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,MAAM,EAIN,IAAI,EAGJ,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAwB,sBAAsB,EAAE,MAAM,QAAQ,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAGhF,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,wBAAgB,8BAA8B,CAC5C,cAAc,SAAS,qBAAqB,EAC5C,iBAAiB,EAEjB,WAAW,EAAE,mBAAmB,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,GACrE,WAAW,CAAC,iBAAiB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAanE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAezC;AAED,wBAAgB,2BAA2B,CACzC,cAAc,SAAS,qBAAqB,EAC5C,iBAAiB,EACjB,iBAAiB,SAAS,gBAAgB,GAAG,sBAAsB,EAEnE,WAAW,EAAE,mBAAmB,EAChC,UAAU,EAAE,kBAAkB,CAC5B,cAAc,EACd,iBAAiB,EACjB,iBAAiB,CAClB,EACD,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,YAAY,CAAC,EAAE,YAAY,CAAC,iBAAiB,CAAC,GAC7C,WAAW,CAAC,iBAAiB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAgCnE;AAED,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACnE,MAAM,MAAM,oBAAoB,GAC5B,0BAA0B,GAC1B,IAAI,GACJ,qBAAqB,GACrB,CAAC,qBAAqB,GAAG,IAAI,CAAC,EAAE,GAChC,CAAC,0BAA0B,GAAG,IAAI,CAAC,EAAE,CAAC;AAE1C,MAAM,MAAM,qBAAqB,GAAG;IAGlC,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,CAAC;IAClD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF,wBAAgB,aAAa,CAC3B,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,qBAAqB,EACvC,eAAe,EAAE,qBAAqB,EACtC,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,wCAAwC,EAAE,EAChE,IAAI,EAAE,IAAI,GACT,cAAc,CAgChB;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,MAAM,IAAI,GACnB,MAAM,IAAI,CAOZ;AAED,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,mBAAmB,EAChC,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,MAAM,IAAI,GACnB,MAAM,IAAI,CAQZ;AAGD,wBAAgB,SAAS,CAAC,cAAc,SAAS,qBAAqB,EACpE,WAAW,EAAE,mBAAmB,EAChC,yBAAyB,EAAE,sBAAsB,CAAC,cAAc,CAAC,EACjE,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,EACzD,QAAQ,EAAE,CACR,4BAA4B,EAAE,sBAAsB,CAAC,cAAc,CAAC,KACjE,IAAI,EACT,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,GACnC,MAAM,IAAI,CAUZ;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,mBAAmB,EAChC,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,IAAI,CAAC,CAWf;AA8HD,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AA6ExD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,UAOlE;AAwPD,wBAAgB,kBAAkB,CAChC,OAAO,EACH,wBAAwB,GACxB,wBAAwB,GACxB,iBAAiB,GACjB,iBAAiB,EACrB,SAAS,EAAE,SAAS,GACnB,MAAM,CAUR;AA0GD,eAAO,MAAM,eAAe,SAAS,CAAC;AACtC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,eAAe,OAAO,CAAC"}
|
package/dist/core/cache.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SECOND_SPLIT_KEY = exports.FIRST_SPLIT_KEY = exports.TYPENAME_FIELD_NAME = void 0;
|
|
3
|
+
exports.THIRD_SPLIT_KEY = exports.SECOND_SPLIT_KEY = exports.FIRST_SPLIT_KEY = exports.TYPENAME_FIELD_NAME = void 0;
|
|
4
4
|
exports.getOrCreateItemInSuspenseCache = getOrCreateItemInSuspenseCache;
|
|
5
5
|
exports.stableCopy = stableCopy;
|
|
6
6
|
exports.getOrCreateCacheForArtifact = getOrCreateCacheForArtifact;
|
|
@@ -422,6 +422,15 @@ function getParentRecordKey(astNode, variables) {
|
|
|
422
422
|
function getStoreKeyChunkForArgumentValue(argumentValue, variables) {
|
|
423
423
|
var _a;
|
|
424
424
|
switch (argumentValue.kind) {
|
|
425
|
+
case 'Object': {
|
|
426
|
+
return Object.fromEntries(argumentValue.value.map(([argumentName, argumentValue]) => {
|
|
427
|
+
return [
|
|
428
|
+
argumentName,
|
|
429
|
+
// substitute variables
|
|
430
|
+
getStoreKeyChunkForArgumentValue(argumentValue, variables),
|
|
431
|
+
];
|
|
432
|
+
}));
|
|
433
|
+
}
|
|
425
434
|
case 'Literal': {
|
|
426
435
|
return argumentValue.value;
|
|
427
436
|
}
|
|
@@ -444,48 +453,61 @@ function getStoreKeyChunkForArgumentValue(argumentValue, variables) {
|
|
|
444
453
|
}
|
|
445
454
|
}
|
|
446
455
|
function getStoreKeyChunkForArgument(argument, variables) {
|
|
447
|
-
|
|
456
|
+
let chunk = getStoreKeyChunkForArgumentValue(argument[1], variables);
|
|
457
|
+
if (typeof chunk === 'object') {
|
|
458
|
+
chunk = JSON.stringify(stableCopy(chunk));
|
|
459
|
+
}
|
|
448
460
|
return `${exports.FIRST_SPLIT_KEY}${argument[0]}${exports.SECOND_SPLIT_KEY}${chunk}`;
|
|
449
461
|
}
|
|
450
462
|
function getNetworkResponseKey(astNode) {
|
|
451
463
|
let networkResponseKey = astNode.fieldName;
|
|
452
464
|
const fieldParameters = astNode.arguments;
|
|
453
465
|
if (fieldParameters != null) {
|
|
454
|
-
for (const
|
|
455
|
-
|
|
456
|
-
let argumentValueChunk;
|
|
457
|
-
switch (argumentValue.kind) {
|
|
458
|
-
case 'Literal': {
|
|
459
|
-
argumentValueChunk = 'l_' + argumentValue.value;
|
|
460
|
-
break;
|
|
461
|
-
}
|
|
462
|
-
case 'Variable': {
|
|
463
|
-
argumentValueChunk = 'v_' + argumentValue.name;
|
|
464
|
-
break;
|
|
465
|
-
}
|
|
466
|
-
case 'String': {
|
|
467
|
-
argumentValueChunk = 's_' + argumentValue.value;
|
|
468
|
-
break;
|
|
469
|
-
}
|
|
470
|
-
case 'Enum': {
|
|
471
|
-
argumentValueChunk = 'e_' + argumentValue.value;
|
|
472
|
-
break;
|
|
473
|
-
}
|
|
474
|
-
default: {
|
|
475
|
-
// Ensure we have covered all variants
|
|
476
|
-
let _ = argumentValue;
|
|
477
|
-
_;
|
|
478
|
-
throw new Error('Unexpected case');
|
|
479
|
-
}
|
|
480
|
-
}
|
|
466
|
+
for (const [argumentName, argumentValue] of fieldParameters) {
|
|
467
|
+
let argumentValueChunk = getArgumentValueChunk(argumentValue);
|
|
481
468
|
networkResponseKey += `${exports.FIRST_SPLIT_KEY}${argumentName}${exports.SECOND_SPLIT_KEY}${argumentValueChunk}`;
|
|
482
469
|
}
|
|
483
470
|
}
|
|
484
471
|
return networkResponseKey;
|
|
485
472
|
}
|
|
473
|
+
function getArgumentValueChunk(argumentValue) {
|
|
474
|
+
switch (argumentValue.kind) {
|
|
475
|
+
case 'Object': {
|
|
476
|
+
return ('o_' +
|
|
477
|
+
argumentValue.value
|
|
478
|
+
.map(([argumentName, argumentValue]) => {
|
|
479
|
+
return (argumentName +
|
|
480
|
+
exports.THIRD_SPLIT_KEY +
|
|
481
|
+
getArgumentValueChunk(argumentValue));
|
|
482
|
+
})
|
|
483
|
+
.join('_') +
|
|
484
|
+
'_c');
|
|
485
|
+
}
|
|
486
|
+
case 'Literal': {
|
|
487
|
+
return 'l_' + argumentValue.value;
|
|
488
|
+
}
|
|
489
|
+
case 'Variable': {
|
|
490
|
+
return 'v_' + argumentValue.name;
|
|
491
|
+
}
|
|
492
|
+
case 'String': {
|
|
493
|
+
// replace all non-word characters (alphanumeric & underscore) with underscores
|
|
494
|
+
return 's_' + argumentValue.value.replaceAll(/\W/g, '_');
|
|
495
|
+
}
|
|
496
|
+
case 'Enum': {
|
|
497
|
+
return 'e_' + argumentValue.value;
|
|
498
|
+
}
|
|
499
|
+
default: {
|
|
500
|
+
// Ensure we have covered all variants
|
|
501
|
+
let _ = argumentValue;
|
|
502
|
+
_;
|
|
503
|
+
throw new Error('Unexpected case');
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
}
|
|
486
507
|
// an alias might be pullRequests____first___first____after___cursor
|
|
487
508
|
exports.FIRST_SPLIT_KEY = '____';
|
|
488
509
|
exports.SECOND_SPLIT_KEY = '___';
|
|
510
|
+
exports.THIRD_SPLIT_KEY = '__';
|
|
489
511
|
// Returns a key to look up an item in the store
|
|
490
512
|
function getDataIdOfNetworkResponse(parentRecordLink, dataToNormalize, astNode, variables, index) {
|
|
491
513
|
// If we are dealing with nested Query, use __ROOT as id
|
package/dist/core/read.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/core/read.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AAQjB,OAAO,EACL,WAAW,EAEX,iBAAiB,EAEjB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGL,mBAAmB,EACnB,KAAK,IAAI,EACV,MAAM,uBAAuB,CAAC;AAe/B,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI;IACtC,QAAQ,CAAC,kBAAkB,EAAE,cAAc,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,cAAc,SAAS,qBAAqB,EAE5C,WAAW,EAAE,mBAAmB,EAChC,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,EAC7D,qBAAqB,EAAE,2BAA2B,GACjD,sBAAsB,CAAC,cAAc,CAAC,CAiExC;AAED,MAAM,MAAM,cAAc,CAAC,cAAc,IACrC;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,CAAC,kBAAkB,EAAE,cAAc,CAAC;CAC7C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;CAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/core/read.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AAQjB,OAAO,EACL,WAAW,EAEX,iBAAiB,EAEjB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGL,mBAAmB,EACnB,KAAK,IAAI,EACV,MAAM,uBAAuB,CAAC;AAe/B,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI;IACtC,QAAQ,CAAC,kBAAkB,EAAE,cAAc,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,cAAc,SAAS,qBAAqB,EAE5C,WAAW,EAAE,mBAAmB,EAChC,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,EAC7D,qBAAqB,EAAE,2BAA2B,GACjD,sBAAsB,CAAC,cAAc,CAAC,CAiExC;AAED,MAAM,MAAM,cAAc,CAAC,cAAc,IACrC;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,CAAC,kBAAkB,EAAE,cAAc,CAAC;CAC7C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;CAC3B,CAAC;AAwoBN,MAAM,MAAM,2BAA2B,GAAG;IACxC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,wBAAgB,oCAAoC,CAClD,qBAAqB,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAAG,IAAI,GAClE,2BAA2B,CAK7B"}
|
package/dist/core/read.js
CHANGED
|
@@ -453,7 +453,10 @@ function generateChildVariableMap(variables, fieldArguments) {
|
|
|
453
453
|
}
|
|
454
454
|
const childVars = {};
|
|
455
455
|
for (const [name, value] of fieldArguments) {
|
|
456
|
-
if (value.kind === '
|
|
456
|
+
if (value.kind === 'Object') {
|
|
457
|
+
childVars[name] = generateChildVariableMap(variables, value.value);
|
|
458
|
+
}
|
|
459
|
+
else if (value.kind === 'Variable') {
|
|
457
460
|
const variable = variables[value.name];
|
|
458
461
|
// Variable could be null if it was not provided but has a default case,
|
|
459
462
|
// so we allow the loop to continue rather than throwing an error.
|
|
@@ -473,6 +476,10 @@ function writeQueryArgsToVariables(targetVariables, queryArgs, variables) {
|
|
|
473
476
|
}
|
|
474
477
|
for (const [name, argType] of queryArgs) {
|
|
475
478
|
switch (argType.kind) {
|
|
479
|
+
case 'Object': {
|
|
480
|
+
writeQueryArgsToVariables((targetVariables[name] = {}), argType.value, variables);
|
|
481
|
+
break;
|
|
482
|
+
}
|
|
476
483
|
case 'Variable': {
|
|
477
484
|
targetVariables[name] = variables[argType.name];
|
|
478
485
|
break;
|
package/dist/core/util.d.ts
CHANGED
package/dist/core/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/core/util.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,GAAG,IACpE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1D,MAAM,MAAM,8BAA8B,CAAC,CAAC,IAC1C,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,GAChC,GAAG,CAAC,mBAAmB,GACvB,CAAC,GAAG,GAAG,CAAC,mBAAmB,CAAC;AAElC,MAAM,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC;AACnC,MAAM,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AACrD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAClC,MAAM,MAAM,aAAa,GACrB;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;CACrB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC"}
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/core/util.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,GAAG,IACpE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1D,MAAM,MAAM,8BAA8B,CAAC,CAAC,IAC1C,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,GAChC,GAAG,CAAC,mBAAmB,GACvB,CAAC,GAAG,GAAG,CAAC,mBAAmB,CAAC;AAElC,MAAM,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC;AACnC,MAAM,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AACrD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAClC,MAAM,MAAM,aAAa,GACrB;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;CACrB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@isograph/react",
|
|
3
|
-
"version": "0.0.0-main-
|
|
3
|
+
"version": "0.0.0-main-6b4f9048",
|
|
4
4
|
"description": "Use Isograph with React",
|
|
5
5
|
"homepage": "https://isograph.dev",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"iso-watch": "cross-env ../../target/debug/isograph_cli --config ./isograph.config.json --watch"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@isograph/disposable-types": "0.0.0-main-
|
|
24
|
-
"@isograph/react-disposable-state": "0.0.0-main-
|
|
25
|
-
"@isograph/reference-counted-pointer": "0.0.0-main-
|
|
23
|
+
"@isograph/disposable-types": "0.0.0-main-6b4f9048",
|
|
24
|
+
"@isograph/react-disposable-state": "0.0.0-main-6b4f9048",
|
|
25
|
+
"@isograph/reference-counted-pointer": "0.0.0-main-6b4f9048"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
28
|
"react": "^18.0.0 || ^19.0.0"
|
|
@@ -5,7 +5,15 @@ import { PromiseWrapper } from './PromiseWrapper';
|
|
|
5
5
|
import type { StartUpdate } from './reader';
|
|
6
6
|
|
|
7
7
|
// TODO type this better
|
|
8
|
-
export type VariableValue =
|
|
8
|
+
export type VariableValue =
|
|
9
|
+
| string
|
|
10
|
+
| number
|
|
11
|
+
| boolean
|
|
12
|
+
| null
|
|
13
|
+
| {
|
|
14
|
+
readonly [index: string]: VariableValue;
|
|
15
|
+
}
|
|
16
|
+
| VariableValue[];
|
|
9
17
|
|
|
10
18
|
export type Variables = { readonly [index: string]: VariableValue };
|
|
11
19
|
|
package/src/core/cache.ts
CHANGED
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
FragmentReference,
|
|
21
21
|
Variables,
|
|
22
22
|
type UnknownTReadFromStore,
|
|
23
|
+
type VariableValue,
|
|
23
24
|
} from './FragmentReference';
|
|
24
25
|
import {
|
|
25
26
|
DataId,
|
|
@@ -730,8 +731,19 @@ export function getParentRecordKey(
|
|
|
730
731
|
function getStoreKeyChunkForArgumentValue(
|
|
731
732
|
argumentValue: ArgumentValue,
|
|
732
733
|
variables: Variables,
|
|
733
|
-
) {
|
|
734
|
+
): VariableValue {
|
|
734
735
|
switch (argumentValue.kind) {
|
|
736
|
+
case 'Object': {
|
|
737
|
+
return Object.fromEntries(
|
|
738
|
+
argumentValue.value.map(([argumentName, argumentValue]) => {
|
|
739
|
+
return [
|
|
740
|
+
argumentName,
|
|
741
|
+
// substitute variables
|
|
742
|
+
getStoreKeyChunkForArgumentValue(argumentValue, variables),
|
|
743
|
+
];
|
|
744
|
+
}),
|
|
745
|
+
);
|
|
746
|
+
}
|
|
735
747
|
case 'Literal': {
|
|
736
748
|
return argumentValue.value;
|
|
737
749
|
}
|
|
@@ -755,7 +767,12 @@ function getStoreKeyChunkForArgumentValue(
|
|
|
755
767
|
}
|
|
756
768
|
|
|
757
769
|
function getStoreKeyChunkForArgument(argument: Argument, variables: Variables) {
|
|
758
|
-
|
|
770
|
+
let chunk = getStoreKeyChunkForArgumentValue(argument[1], variables);
|
|
771
|
+
|
|
772
|
+
if (typeof chunk === 'object') {
|
|
773
|
+
chunk = JSON.stringify(stableCopy(chunk));
|
|
774
|
+
}
|
|
775
|
+
|
|
759
776
|
return `${FIRST_SPLIT_KEY}${argument[0]}${SECOND_SPLIT_KEY}${chunk}`;
|
|
760
777
|
}
|
|
761
778
|
|
|
@@ -764,43 +781,60 @@ function getNetworkResponseKey(
|
|
|
764
781
|
): string {
|
|
765
782
|
let networkResponseKey = astNode.fieldName;
|
|
766
783
|
const fieldParameters = astNode.arguments;
|
|
784
|
+
|
|
767
785
|
if (fieldParameters != null) {
|
|
768
|
-
for (const
|
|
769
|
-
|
|
770
|
-
let argumentValueChunk;
|
|
771
|
-
switch (argumentValue.kind) {
|
|
772
|
-
case 'Literal': {
|
|
773
|
-
argumentValueChunk = 'l_' + argumentValue.value;
|
|
774
|
-
break;
|
|
775
|
-
}
|
|
776
|
-
case 'Variable': {
|
|
777
|
-
argumentValueChunk = 'v_' + argumentValue.name;
|
|
778
|
-
break;
|
|
779
|
-
}
|
|
780
|
-
case 'String': {
|
|
781
|
-
argumentValueChunk = 's_' + argumentValue.value;
|
|
782
|
-
break;
|
|
783
|
-
}
|
|
784
|
-
case 'Enum': {
|
|
785
|
-
argumentValueChunk = 'e_' + argumentValue.value;
|
|
786
|
-
break;
|
|
787
|
-
}
|
|
788
|
-
default: {
|
|
789
|
-
// Ensure we have covered all variants
|
|
790
|
-
let _: never = argumentValue;
|
|
791
|
-
_;
|
|
792
|
-
throw new Error('Unexpected case');
|
|
793
|
-
}
|
|
794
|
-
}
|
|
786
|
+
for (const [argumentName, argumentValue] of fieldParameters) {
|
|
787
|
+
let argumentValueChunk = getArgumentValueChunk(argumentValue);
|
|
795
788
|
networkResponseKey += `${FIRST_SPLIT_KEY}${argumentName}${SECOND_SPLIT_KEY}${argumentValueChunk}`;
|
|
796
789
|
}
|
|
797
790
|
}
|
|
791
|
+
|
|
798
792
|
return networkResponseKey;
|
|
799
793
|
}
|
|
800
794
|
|
|
795
|
+
function getArgumentValueChunk(argumentValue: ArgumentValue): string {
|
|
796
|
+
switch (argumentValue.kind) {
|
|
797
|
+
case 'Object': {
|
|
798
|
+
return (
|
|
799
|
+
'o_' +
|
|
800
|
+
argumentValue.value
|
|
801
|
+
.map(([argumentName, argumentValue]) => {
|
|
802
|
+
return (
|
|
803
|
+
argumentName +
|
|
804
|
+
THIRD_SPLIT_KEY +
|
|
805
|
+
getArgumentValueChunk(argumentValue)
|
|
806
|
+
);
|
|
807
|
+
})
|
|
808
|
+
.join('_') +
|
|
809
|
+
'_c'
|
|
810
|
+
);
|
|
811
|
+
}
|
|
812
|
+
case 'Literal': {
|
|
813
|
+
return 'l_' + argumentValue.value;
|
|
814
|
+
}
|
|
815
|
+
case 'Variable': {
|
|
816
|
+
return 'v_' + argumentValue.name;
|
|
817
|
+
}
|
|
818
|
+
case 'String': {
|
|
819
|
+
// replace all non-word characters (alphanumeric & underscore) with underscores
|
|
820
|
+
return 's_' + argumentValue.value.replaceAll(/\W/g, '_');
|
|
821
|
+
}
|
|
822
|
+
case 'Enum': {
|
|
823
|
+
return 'e_' + argumentValue.value;
|
|
824
|
+
}
|
|
825
|
+
default: {
|
|
826
|
+
// Ensure we have covered all variants
|
|
827
|
+
let _: never = argumentValue;
|
|
828
|
+
_;
|
|
829
|
+
throw new Error('Unexpected case');
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
|
|
801
834
|
// an alias might be pullRequests____first___first____after___cursor
|
|
802
835
|
export const FIRST_SPLIT_KEY = '____';
|
|
803
836
|
export const SECOND_SPLIT_KEY = '___';
|
|
837
|
+
export const THIRD_SPLIT_KEY = '__';
|
|
804
838
|
|
|
805
839
|
// Returns a key to look up an item in the store
|
|
806
840
|
function getDataIdOfNetworkResponse(
|
package/src/core/read.ts
CHANGED
|
@@ -717,7 +717,9 @@ function generateChildVariableMap(
|
|
|
717
717
|
type Writable<T> = { -readonly [P in keyof T]: T[P] };
|
|
718
718
|
const childVars: Writable<Variables> = {};
|
|
719
719
|
for (const [name, value] of fieldArguments) {
|
|
720
|
-
if (value.kind === '
|
|
720
|
+
if (value.kind === 'Object') {
|
|
721
|
+
childVars[name] = generateChildVariableMap(variables, value.value);
|
|
722
|
+
} else if (value.kind === 'Variable') {
|
|
721
723
|
const variable = variables[value.name];
|
|
722
724
|
// Variable could be null if it was not provided but has a default case,
|
|
723
725
|
// so we allow the loop to continue rather than throwing an error.
|
|
@@ -741,6 +743,14 @@ function writeQueryArgsToVariables(
|
|
|
741
743
|
}
|
|
742
744
|
for (const [name, argType] of queryArgs) {
|
|
743
745
|
switch (argType.kind) {
|
|
746
|
+
case 'Object': {
|
|
747
|
+
writeQueryArgsToVariables(
|
|
748
|
+
(targetVariables[name] = {}),
|
|
749
|
+
argType.value,
|
|
750
|
+
variables,
|
|
751
|
+
);
|
|
752
|
+
break;
|
|
753
|
+
}
|
|
744
754
|
case 'Variable': {
|
|
745
755
|
targetVariables[name] = variables[argType.name];
|
|
746
756
|
break;
|