rescript-relay 0.22.0 → 0.23.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.
- package/CHANGELOG.md +35 -0
- package/bin-darwin +0 -0
- package/bin-linux +0 -0
- package/bsconfig.json +1 -1
- package/cli/cli.js +2 -2
- package/language-plugin/dist/index.js +1 -1
- package/package.json +12 -14
- package/ppx-darwin +0 -0
- package/ppx-linux +0 -0
- package/src/ReactDOMExperimental.bs.js +19 -1
- package/src/ReactDOMExperimental.res +16 -3
- package/src/ReactExperimental.bs.js +1 -16
- package/src/ReactExperimental.res +4 -20
- package/src/RescriptRelay.bs.js +19 -20
- package/src/RescriptRelay.res +10 -12
- package/src/RescriptRelay.resi +2 -2
- package/src/experimental-router/RescriptRelayRouter.bs.js +3 -3
- package/src/experimental-router/RescriptRelayRouter.res +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
module.exports=(()=>{"use strict";var e={338:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.find=void 0,t.find=function(e,t){return function(e,t){if(!e.includes("%relay"))return[];const n=e.match(/(?<=\[%relay)([\s\S]*?)(?=];)/g);if(n)return n.map((e=>({template:e.replace(/({\||\|})/g,""),keyName:null,sourceLocationOffset:{line:1,column:1}})));const r=e.match(/(?<=\%relay\([\s]*`)[\s\S.]+?(?=`[\s]*\))/g);return r?r.map((e=>({template:e,keyName:null,sourceLocationOffset:{line:1,column:1}}))):[]}(e)}},189:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateFromFlowTypes=void 0;const r=n(129),o=n(622);t.generateFromFlowTypes=e=>{var t;const n=r.spawnSync(o.resolve(o.join(__dirname,"../RescriptRelayBin.exe")),["generate-from-flow"],{cwd:__dirname,stdio:"pipe",encoding:"utf-8",input:JSON.stringify(e)});if(0!==n.status)throw null!==(t=n.error)&&void 0!==t?t:new Error("Error generating types");return n.output.filter(Boolean).join("")}},571:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.transforms=t.generate=void 0;const r=n(791),o=n(224),a=n(148),i=n(354),s=n(189),l=n(602);function c(e){const t=Object.assign({Int:"int",Float:"float"},e);return Object.keys(t).forEach((e=>{t[e]=l.maskDots(t[e])})),t}t.generate=function(e,t,n){var a;let i=r.generate(e,t,Object.assign(Object.assign({},n),{customScalars:c(n.customScalars)}));const l=o.makeOperationDescriptor(t),d=o.extractOperationInfo(t);return s.generateFromFlowTypes({content:i,operation_type:["Query","Mutation","Subscription"].includes(l.tag)?{operation:l.tag,operation_value:l.value}:{operation:"Fragment",fragment_value:l.value},print_config:{variables_holding_connection_ids:null!==(a=d.variablesHoldingConnectionIds)&&void 0!==a?a:null,connection:d.connection?{at_object_path:d.connection.atObjectPath,field_name:d.connection.fieldName,key:d.connection.key}:null}})},t.transforms=[i.transform,a.transform,...r.transforms]},942:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0});const r=n(366),o=n(622);e.exports=({moduleName:e,documentType:t,concreteText:n,typeText:a,definition:i})=>{let s=null;"Source"===i.loc.kind&&(s=o.basename(i.loc.source.name));const l="ConcreteRequest"===t&&e.toLowerCase().endsWith("query_graphql")?"include RescriptRelay.MakeLoadQuery({\n type variables = Types.variables\n type loadedQueryRef = queryRef\n type response = Types.response\n type node = relayOperationNode\n let query = node\n let convertVariables = Internal.convertVariables\n });":"",{processedText:c,referencedNodes:d}=r.processConcreteText(n),u=`%raw(json\` ${c} \`)`;return[s?`/* @sourceLoc ${s} */`:null,a||"",...d.length>0?[`%%private(let makeNode = (${d.map((({identifier:e})=>e)).join(", ")}): operationType => {`,...d.map((({identifier:e})=>` ignore(${e})`)),` ${u}`,"})",`let node: operationType = makeNode(${d.map((({moduleName:e})=>`${e}_graphql.node`)).join(", ")})`]:[`let node: operationType = ${u}`],"",l,""].filter((e=>null!=e)).join("\n")}},602:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.unmaskDots=t.maskDots=void 0,t.maskDots=e=>e.split(".").join("__oo__"),t.unmaskDots=e=>e.split("__oo__").join(".")},607:(e,t,n)=>{const r=n(571),o=n(942),{find:a}=n(338),i=n(622),s=n(747);function l(e){return t=>{const n=i.join(e,t.relPath);let r="";try{r=s.readFileSync(n,"utf8")}catch(e){return console.warn(`RelaySourceModuleParser: Unable to read the file "${n}". Looks like it was removed.`),!1}return r.indexOf("%relay")>=0}}e.exports=()=>({inputExtensions:["re","res"],outputExtension:"res",schemaExtensions:[],typeGenerator:r,formatModule:o,findGraphQLTags:a,isGeneratedFile:e=>e.endsWith("_graphql.res")||e.endsWith(".js")||e.endsWith(".mjs"),keepExtraFile:e=>e.endsWith(".js")||e.endsWith(".mjs"),getFileFilter:l,getModuleName:e=>`${e}_graphql`})},224:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.makeOperationDescriptor=t.extractOperationInfo=void 0;const r=n(195);function o(e,t,n){if("Root"===e.kind&&["mutation","subscription"].includes(e.operation)){const e=t.directives.filter((e=>["appendNode","prependNode","appendEdge","prependEdge","deleteEdge"].includes(e.name)));e.length>0&&e.forEach((e=>{const t=e.args.find((e=>"connections"===e.name)),r=null==t?void 0:t.value;r&&"Variable"===r.kind&&(n.variablesHoldingConnectionIds?n.variablesHoldingConnectionIds.push(r.variableName):n.variablesHoldingConnectionIds=[r.variableName])}))}}t.extractOperationInfo=function(e){let t={};const n="Fragment"===e.kind?"fragment":"response";return n?(function e(n,a){r.IRVisitor.visit(a,{ScalarField(e){o(a,e,t)},LinkedField(e){const r=e.directives.find((e=>"connection"===e.name));if(r&&!t.connection){let o=null;r.args.forEach((e=>{"key"===e.name&&"Literal"===e.value.kind&&(o=e.value.value)})),o&&(t=Object.assign(Object.assign({},t),{connection:{key:o,atObjectPath:[...n],fieldName:e.alias}}))}o(a,e,t),n.push(e.alias)},InlineFragment(t){t.typeCondition.name&&t.selections.forEach((r=>{e([...n,t.typeCondition.name.toLowerCase()],r)}))}})}([n],e),t):t},t.makeOperationDescriptor=function(e){if("Root"===e.kind)switch(e.operation){case"mutation":return{tag:"Mutation",value:e.name};case"query":return{tag:"Query",value:e.name};case"subscription":return{tag:"Subscription",value:e.name}}else if("Fragment"==e.kind)return{tag:"Fragment",value:[e.name,Boolean(e.metadata&&e.metadata.plural)]};throw new Error("Could not map root node. This should not happen.")}},148:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.transform=void 0;const r=n(724),{createUserError:o}=n(182),a=["and","as","asr","assert","begin","class","constraint","do","while","for","done","while","for","downto","else","end","exception","external","false","for","fun","function","functor","if","in","include","inherit","initializer","land","lazy","let","lor","lsl","lsr","lxor","match","method","mod","module","open","mutable","new","nonrec","object","of","open","open!","or","private","rec","let","module","sig","struct","then","to","true","try","type","val","virtual","val","method","class","when","while","with","switch"];let i=["fragment","t_fragment","subscription","mutation","response","variables","refetchVariables","t","fragmentRef","fragmentRefs","fragmentRefSelector","operationType"];function s(e){if(e.alias){let{disallowed:t,message:n}=function(e){let t=e[0];return/[A-Z]/.test(t)?{disallowed:!0,message:`Field names may not start with an uppercase letter. Please alias the '${e}' field to something starting with a lowercase letter.`}:a.includes(e)?{disallowed:!0,message:`'${e}' is a reserved keyword in ReasonML and therefore cannot be used as a field name. Please alias your field to something else.`}:i.includes(e)?{disallowed:!0,message:`'${e}' is a reserved keyword in RescriptRelay and therefore cannot be used as a field name. Please alias your field to something else.`}:{disallowed:!1,message:""}}(e.alias);if(t)throw o("Found an invalid field name: "+n,[e.loc])}e.selections&&e.selections.forEach(s)}function l(e){return s(e),e}t.transform=function(e){return r.transform(e,{ScalarField:l,LinkedField:l})}},354:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.transform=void 0;const r=n(724),{createUserError:o}=n(182),{hasUnaliasedSelection:a}=n(124);function i(e){const t=this.getContext().getSchema();let n=this.traverse(e);if(t.isAbstractType(t.getRawType(n.type))&&!a(n,"__typename"))throw o('Unions and interfaces must have the field __typename explicitly selected. Please add __typename to the fields selected by "'+e.alias+'" in your operation.',[e.loc]);return n}t.transform=function(e){return r.transform(e,{LinkedField:i})}},366:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processConcreteText=void 0,t.processConcreteText=function(e){let t=/(require\('.\/)([A-Za-z_.0-9/]+)(.graphql
|
|
1
|
+
module.exports=(()=>{"use strict";var e={338:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.find=void 0,t.find=function(e,t){return function(e,t){if(!e.includes("%relay"))return[];const n=e.match(/(?<=\[%relay)([\s\S]*?)(?=];)/g);if(n)return n.map((e=>({template:e.replace(/({\||\|})/g,""),keyName:null,sourceLocationOffset:{line:1,column:1}})));const r=e.match(/(?<=\%relay\([\s]*`)[\s\S.]+?(?=`[\s]*\))/g);return r?r.map((e=>({template:e,keyName:null,sourceLocationOffset:{line:1,column:1}}))):[]}(e)}},189:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateFromFlowTypes=void 0;const r=n(129),o=n(622);t.generateFromFlowTypes=e=>{var t;const n=r.spawnSync(o.resolve(o.join(__dirname,"../RescriptRelayBin.exe")),["generate-from-flow"],{cwd:__dirname,stdio:"pipe",encoding:"utf-8",input:JSON.stringify(e)});if(0!==n.status)throw null!==(t=n.error)&&void 0!==t?t:new Error("Error generating types");return n.output.filter(Boolean).join("")}},571:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.transforms=t.generate=void 0;const r=n(791),o=n(224),a=n(148),i=n(354),s=n(189),l=n(602);function c(e){const t=Object.assign({Int:"int",Float:"float"},e);return Object.keys(t).forEach((e=>{t[e]=l.maskDots(t[e])})),t}t.generate=function(e,t,n){var a;let i=r.generate(e,t,Object.assign(Object.assign({},n),{customScalars:c(n.customScalars)}));const l=o.makeOperationDescriptor(t),d=o.extractOperationInfo(t);return s.generateFromFlowTypes({content:i,operation_type:["Query","Mutation","Subscription"].includes(l.tag)?{operation:l.tag,operation_value:l.value}:{operation:"Fragment",fragment_value:l.value},print_config:{variables_holding_connection_ids:null!==(a=d.variablesHoldingConnectionIds)&&void 0!==a?a:null,connection:d.connection?{at_object_path:d.connection.atObjectPath,field_name:d.connection.fieldName,key:d.connection.key}:null}})},t.transforms=[i.transform,a.transform,...r.transforms]},942:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0});const r=n(366),o=n(622);e.exports=({moduleName:e,documentType:t,concreteText:n,typeText:a,definition:i})=>{let s=null;"Source"===i.loc.kind&&(s=o.basename(i.loc.source.name));const l="ConcreteRequest"===t&&e.toLowerCase().endsWith("query_graphql")?"include RescriptRelay.MakeLoadQuery({\n type variables = Types.variables\n type loadedQueryRef = queryRef\n type response = Types.response\n type node = relayOperationNode\n let query = node\n let convertVariables = Internal.convertVariables\n });":"",{processedText:c,referencedNodes:d}=r.processConcreteText(n),u=`%raw(json\` ${c} \`)`;return[s?`/* @sourceLoc ${s} */`:null,a||"",...d.length>0?[`%%private(let makeNode = (${d.map((({identifier:e})=>e)).join(", ")}): operationType => {`,...d.map((({identifier:e})=>` ignore(${e})`)),` ${u}`,"})",`let node: operationType = makeNode(${d.map((({moduleName:e})=>`${e}_graphql.node`)).join(", ")})`]:[`let node: operationType = ${u}`],"",l,""].filter((e=>null!=e)).join("\n")}},602:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.unmaskDots=t.maskDots=void 0,t.maskDots=e=>e.split(".").join("__oo__"),t.unmaskDots=e=>e.split("__oo__").join(".")},607:(e,t,n)=>{const r=n(571),o=n(942),{find:a}=n(338),i=n(622),s=n(747);function l(e){return t=>{const n=i.join(e,t.relPath);let r="";try{r=s.readFileSync(n,"utf8")}catch(e){return console.warn(`RelaySourceModuleParser: Unable to read the file "${n}". Looks like it was removed.`),!1}return r.indexOf("%relay")>=0}}e.exports=()=>({inputExtensions:["re","res"],outputExtension:"res",schemaExtensions:[],typeGenerator:r,formatModule:o,findGraphQLTags:a,isGeneratedFile:e=>e.endsWith("_graphql.res")||e.endsWith(".js")||e.endsWith(".mjs"),keepExtraFile:e=>e.endsWith(".js")||e.endsWith(".mjs"),getFileFilter:l,getModuleName:e=>`${e}_graphql`})},224:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.makeOperationDescriptor=t.extractOperationInfo=void 0;const r=n(195);function o(e,t,n){if("Root"===e.kind&&["mutation","subscription"].includes(e.operation)){const e=t.directives.filter((e=>["appendNode","prependNode","appendEdge","prependEdge","deleteEdge"].includes(e.name)));e.length>0&&e.forEach((e=>{const t=e.args.find((e=>"connections"===e.name)),r=null==t?void 0:t.value;r&&"Variable"===r.kind&&(n.variablesHoldingConnectionIds?n.variablesHoldingConnectionIds.push(r.variableName):n.variablesHoldingConnectionIds=[r.variableName])}))}}t.extractOperationInfo=function(e){let t={};const n="Fragment"===e.kind?"fragment":"response";return n?(function e(n,a){r.IRVisitor.visit(a,{ScalarField(e){o(a,e,t)},LinkedField(e){const r=e.directives.find((e=>"connection"===e.name));if(r&&!t.connection){let o=null;r.args.forEach((e=>{"key"===e.name&&"Literal"===e.value.kind&&(o=e.value.value)})),o&&(t=Object.assign(Object.assign({},t),{connection:{key:o,atObjectPath:[...n],fieldName:e.alias}}))}o(a,e,t),n.push(e.alias)},InlineFragment(t){t.typeCondition.name&&t.selections.forEach((r=>{e([...n,t.typeCondition.name.toLowerCase()],r)}))}})}([n],e),t):t},t.makeOperationDescriptor=function(e){if("Root"===e.kind)switch(e.operation){case"mutation":return{tag:"Mutation",value:e.name};case"query":return{tag:"Query",value:e.name};case"subscription":return{tag:"Subscription",value:e.name}}else if("Fragment"==e.kind)return{tag:"Fragment",value:[e.name,Boolean(e.metadata&&e.metadata.plural)]};throw new Error("Could not map root node. This should not happen.")}},148:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.transform=void 0;const r=n(724),{createUserError:o}=n(182),a=["and","as","asr","assert","begin","class","constraint","do","while","for","done","while","for","downto","else","end","exception","external","false","for","fun","function","functor","if","in","include","inherit","initializer","land","lazy","let","lor","lsl","lsr","lxor","match","method","mod","module","open","mutable","new","nonrec","object","of","open","open!","or","private","rec","let","module","sig","struct","then","to","true","try","type","val","virtual","val","method","class","when","while","with","switch"];let i=["fragment","t_fragment","subscription","mutation","response","variables","refetchVariables","t","fragmentRef","fragmentRefs","fragmentRefSelector","operationType"];function s(e){if(e.alias){let{disallowed:t,message:n}=function(e){let t=e[0];return/[A-Z]/.test(t)?{disallowed:!0,message:`Field names may not start with an uppercase letter. Please alias the '${e}' field to something starting with a lowercase letter.`}:a.includes(e)?{disallowed:!0,message:`'${e}' is a reserved keyword in ReasonML and therefore cannot be used as a field name. Please alias your field to something else.`}:i.includes(e)?{disallowed:!0,message:`'${e}' is a reserved keyword in RescriptRelay and therefore cannot be used as a field name. Please alias your field to something else.`}:{disallowed:!1,message:""}}(e.alias);if(t)throw o("Found an invalid field name: "+n,[e.loc])}e.selections&&e.selections.forEach(s)}function l(e){return s(e),e}t.transform=function(e){return r.transform(e,{ScalarField:l,LinkedField:l})}},354:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.transform=void 0;const r=n(724),{createUserError:o}=n(182),{hasUnaliasedSelection:a}=n(124);function i(e){const t=this.getContext().getSchema();let n=this.traverse(e);if(t.isAbstractType(t.getRawType(n.type))&&!a(n,"__typename"))throw o('Unions and interfaces must have the field __typename explicitly selected. Please add __typename to the fields selected by "'+e.alias+'" in your operation.',[e.loc]);return n}t.transform=function(e){return r.transform(e,{LinkedField:i})}},366:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processConcreteText=void 0,t.processConcreteText=function(e){let t=/(require\('.\/)([A-Za-z_.0-9/]+)(.graphql'\))/gm,n=e;const r=[];let o;for(;null!==(o=t.exec(e));){let[e,t,a]=o;const i=`node_${a}`;r.push({moduleName:a,identifier:i}),n=n.replace(e,`node_${a}`)}return{processedText:n,referencedNodes:r}}},129:e=>{e.exports=require("child_process")},747:e=>{e.exports=require("fs")},622:e=>{e.exports=require("path")},195:e=>{e.exports=require("relay-compiler")},182:e=>{e.exports=require("relay-compiler/lib/core/CompilerError")},724:e=>{e.exports=require("relay-compiler/lib/core/IRTransformer")},791:e=>{e.exports=require("relay-compiler/lib/language/javascript/RelayFlowGenerator")},124:e=>{e.exports=require("relay-compiler/lib/transforms/TransformUtils")}},t={};return function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}(607)})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rescript-relay",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.0",
|
|
4
4
|
"main": "src/RescriptRelay.res",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Gabriel Nordeborn",
|
|
@@ -32,27 +32,25 @@
|
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@rescript/react": "0.10.3",
|
|
35
|
-
"@testing-library/jest-dom": "^
|
|
36
|
-
"@testing-library/react": "^
|
|
35
|
+
"@testing-library/jest-dom": "^5.16.1",
|
|
36
|
+
"@testing-library/react": "^13.0.0-alpha.5",
|
|
37
37
|
"bs-fetch": "^0.5.0",
|
|
38
38
|
"graphql": "14.5.0",
|
|
39
39
|
"graphql-query-test-mock": "^0.12.1",
|
|
40
|
-
"jest": "^
|
|
40
|
+
"jest": "^27.2.4",
|
|
41
41
|
"nock": "^11.7.0",
|
|
42
42
|
"node-fetch": "^2.6.0",
|
|
43
|
-
"react": "0.0.0
|
|
44
|
-
"react-dom": "0.0.0
|
|
45
|
-
"react-relay": "
|
|
46
|
-
"
|
|
47
|
-
"relay-
|
|
48
|
-
"relay-
|
|
49
|
-
"relay-runtime": "^11.0.0"
|
|
43
|
+
"react": "^18.0.0-rc.0",
|
|
44
|
+
"react-dom": "^18.0.0-rc.0",
|
|
45
|
+
"react-relay": "12.0.0",
|
|
46
|
+
"relay-compiler": "12.0.0",
|
|
47
|
+
"relay-config": "12.0.0",
|
|
48
|
+
"relay-runtime": "12.0.0"
|
|
50
49
|
},
|
|
51
50
|
"peerDependencies": {
|
|
52
51
|
"@rescript/react": "*",
|
|
53
52
|
"graphql": "*",
|
|
54
53
|
"react-relay": "*",
|
|
55
|
-
"reason-promise": "^1.0.2",
|
|
56
54
|
"relay-compiler": "*",
|
|
57
55
|
"relay-config": "*",
|
|
58
56
|
"relay-runtime": "*",
|
|
@@ -63,7 +61,7 @@
|
|
|
63
61
|
"rescript": "^9.1.2"
|
|
64
62
|
},
|
|
65
63
|
"resolutions": {
|
|
66
|
-
"react": "0.0.0
|
|
67
|
-
"react-dom": "0.0.0
|
|
64
|
+
"react": "18.0.0-rc.0",
|
|
65
|
+
"react-dom": "18.0.0-rc.0"
|
|
68
66
|
}
|
|
69
67
|
}
|
package/ppx-darwin
CHANGED
|
Binary file
|
package/ppx-linux
CHANGED
|
Binary file
|
|
@@ -1,2 +1,20 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
-
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var ReactDom = require("react-dom");
|
|
5
|
+
|
|
6
|
+
function renderConcurrentRootAtElementWithId(content, id) {
|
|
7
|
+
var element = document.getElementById(id);
|
|
8
|
+
if (element == null) {
|
|
9
|
+
throw {
|
|
10
|
+
RE_EXN_ID: "Invalid_argument",
|
|
11
|
+
_1: "ReactExperimental.renderConcurrentRootAtElementWithId : no element of id " + id + " found in the HTML.",
|
|
12
|
+
Error: new Error()
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
ReactDom.createRoot(element).render(content);
|
|
16
|
+
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
exports.renderConcurrentRootAtElementWithId = renderConcurrentRootAtElementWithId;
|
|
20
|
+
/* react-dom Not a pure module */
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
include ReactDOM.Experimental
|
|
2
2
|
|
|
3
3
|
@module("react-dom")
|
|
4
|
-
external
|
|
4
|
+
external createRoot: Dom.element => root = "createRoot"
|
|
5
5
|
|
|
6
|
-
@
|
|
7
|
-
external
|
|
6
|
+
@val @return(nullable)
|
|
7
|
+
external getElementById: string => option<Dom.element> = "document.getElementById"
|
|
8
|
+
|
|
9
|
+
let renderConcurrentRootAtElementWithId: (React.element, string) => unit = (content, id) =>
|
|
10
|
+
switch getElementById(id) {
|
|
11
|
+
| None =>
|
|
12
|
+
raise(
|
|
13
|
+
Invalid_argument(
|
|
14
|
+
"ReactExperimental.renderConcurrentRootAtElementWithId : no element of id " ++
|
|
15
|
+
id ++ " found in the HTML.",
|
|
16
|
+
),
|
|
17
|
+
)
|
|
18
|
+
| Some(element) =>
|
|
19
|
+
createRoot(element)->render(content)
|
|
20
|
+
}
|
|
@@ -1,23 +1,8 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var ReactDom = require("react-dom");
|
|
5
4
|
|
|
6
5
|
var SuspenseList = {};
|
|
7
6
|
|
|
8
|
-
function renderConcurrentRootAtElementWithId(content, id) {
|
|
9
|
-
var element = document.getElementById(id);
|
|
10
|
-
if (element == null) {
|
|
11
|
-
throw {
|
|
12
|
-
RE_EXN_ID: "Invalid_argument",
|
|
13
|
-
_1: "ReactExperimental.renderConcurrentRootAtElementWithId : no element of id " + id + " found in the HTML.",
|
|
14
|
-
Error: new Error()
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
ReactDom.unstable_createRoot(element).render(content);
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
7
|
exports.SuspenseList = SuspenseList;
|
|
22
|
-
|
|
23
|
-
/* react-dom Not a pure module */
|
|
8
|
+
/* No side effect */
|
|
@@ -1,32 +1,16 @@
|
|
|
1
1
|
type callback<'input, 'output> = 'input => 'output
|
|
2
2
|
|
|
3
3
|
@module("react")
|
|
4
|
-
external
|
|
4
|
+
external useDeferredValue: 'value => 'value = "useDeferredValue"
|
|
5
5
|
|
|
6
6
|
@module("react")
|
|
7
|
-
external
|
|
8
|
-
"
|
|
7
|
+
external useTransition: unit => (bool, callback<callback<unit, unit>, unit>) =
|
|
8
|
+
"useTransition"
|
|
9
9
|
|
|
10
10
|
module SuspenseList = {
|
|
11
11
|
@module("react") @react.component
|
|
12
12
|
external make: (
|
|
13
13
|
~children: React.element,
|
|
14
14
|
~revealOrder: [#forwards | #backwards | #together]=?,
|
|
15
|
-
) => React.element = "
|
|
15
|
+
) => React.element = "SuspenseList"
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
@val @return(nullable)
|
|
19
|
-
external getElementById: string => option<Dom.element> = "document.getElementById"
|
|
20
|
-
|
|
21
|
-
let renderConcurrentRootAtElementWithId: (React.element, string) => unit = (content, id) =>
|
|
22
|
-
switch getElementById(id) {
|
|
23
|
-
| None =>
|
|
24
|
-
raise(
|
|
25
|
-
Invalid_argument(
|
|
26
|
-
"ReactExperimental.renderConcurrentRootAtElementWithId : no element of id " ++
|
|
27
|
-
id ++ " found in the HTML.",
|
|
28
|
-
),
|
|
29
|
-
)
|
|
30
|
-
| Some(element) =>
|
|
31
|
-
ReactDOMExperimental.unstable_createRoot(element)->ReactDOMExperimental.render(content)
|
|
32
|
-
}
|
package/src/RescriptRelay.bs.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
var Curry = require("rescript/lib/js/curry.js");
|
|
5
5
|
var React = require("react");
|
|
6
6
|
var Utils = require("./utils");
|
|
7
|
-
var $$Promise = require("reason-promise/src/js/promise.bs.js");
|
|
8
7
|
var Belt_Array = require("rescript/lib/js/belt_Array.js");
|
|
9
8
|
var Caml_option = require("rescript/lib/js/caml_option.js");
|
|
10
9
|
var ReactRelay = require("react-relay");
|
|
@@ -220,25 +219,25 @@ function MakeLoadQuery(C) {
|
|
|
220
219
|
return Caml_option.nullable_to_opt(token.source);
|
|
221
220
|
};
|
|
222
221
|
var queryRefToPromise = function (token) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
222
|
+
return new Promise((function (resolve, param) {
|
|
223
|
+
var o = queryRefToObservable(token);
|
|
224
|
+
if (o !== undefined) {
|
|
225
|
+
Caml_option.valFromOption(o).subscribe({
|
|
226
|
+
complete: (function (param) {
|
|
227
|
+
return resolve({
|
|
228
|
+
TAG: /* Ok */0,
|
|
229
|
+
_0: undefined
|
|
230
|
+
});
|
|
231
|
+
})
|
|
232
|
+
});
|
|
233
|
+
return ;
|
|
234
|
+
} else {
|
|
235
|
+
return resolve({
|
|
236
|
+
TAG: /* Error */1,
|
|
237
|
+
_0: undefined
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}));
|
|
242
241
|
};
|
|
243
242
|
return {
|
|
244
243
|
load: load,
|
package/src/RescriptRelay.res
CHANGED
|
@@ -471,7 +471,7 @@ module Observable = {
|
|
|
471
471
|
@send
|
|
472
472
|
external subscribe: (t<'response>, observer<'response>) => subscription = "subscribe"
|
|
473
473
|
|
|
474
|
-
@send external toPromise: t<'t> => Promise.t<'t> = "toPromise"
|
|
474
|
+
@send external toPromise: t<'t> => Js.Promise.t<'t> = "toPromise"
|
|
475
475
|
}
|
|
476
476
|
|
|
477
477
|
module Network = {
|
|
@@ -709,18 +709,16 @@ module MakeLoadQuery = (C: MakeLoadQueryConfig) => {
|
|
|
709
709
|
}
|
|
710
710
|
|
|
711
711
|
let queryRefToPromise = token => {
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
712
|
+
Js.Promise.make((~resolve, ~reject as _) => {
|
|
713
|
+
switch token->queryRefToObservable {
|
|
714
|
+
| None => resolve(. Error())
|
|
715
|
+
| Some(o) =>
|
|
716
|
+
let _: Observable.subscription = o->{
|
|
717
|
+
open Observable
|
|
718
|
+
subscribe(makeObserver(~complete=() => resolve(. Ok()), ()))
|
|
719
|
+
}
|
|
720
720
|
}
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
promise
|
|
721
|
+
})
|
|
724
722
|
}
|
|
725
723
|
}
|
|
726
724
|
|
package/src/RescriptRelay.resi
CHANGED
|
@@ -636,7 +636,7 @@ module Observable: {
|
|
|
636
636
|
"Turns an `Observable` into a promise. _Beware_ that reading the response in the resulting promise is currently _not safe_ due to some internals of how ReScript Relay works. This will be resolved in the future."
|
|
637
637
|
)
|
|
638
638
|
@send
|
|
639
|
-
external toPromise: t<'t> => Promise.t<'t> = "toPromise"
|
|
639
|
+
external toPromise: t<'t> => Js.Promise.t<'t> = "toPromise"
|
|
640
640
|
}
|
|
641
641
|
|
|
642
642
|
@ocaml.doc("Represents the network layer.")
|
|
@@ -885,5 +885,5 @@ module MakeLoadQuery: (C: MakeLoadQueryConfig) =>
|
|
|
885
885
|
) => C.loadedQueryRef
|
|
886
886
|
|
|
887
887
|
let queryRefToObservable: C.loadedQueryRef => option<Observable.t<C.response>>
|
|
888
|
-
let queryRefToPromise: C.loadedQueryRef => Promise.t<Belt.Result.t<unit, unit>>
|
|
888
|
+
let queryRefToPromise: C.loadedQueryRef => Js.Promise.t<Belt.Result.t<unit, unit>>
|
|
889
889
|
}
|
|
@@ -242,8 +242,8 @@ function RescriptRelayRouter$RouteRenderer(Props) {
|
|
|
242
242
|
});
|
|
243
243
|
var initialized = match[0];
|
|
244
244
|
var router = React.useContext(context);
|
|
245
|
-
var match$1 = React.
|
|
246
|
-
var startTransition = match$1[
|
|
245
|
+
var match$1 = React.useTransition();
|
|
246
|
+
var startTransition = match$1[1];
|
|
247
247
|
var match$2 = React.useState(function () {
|
|
248
248
|
return Curry._1(router.get, undefined);
|
|
249
249
|
});
|
|
@@ -281,7 +281,7 @@ function RescriptRelayRouter$RouteRenderer(Props) {
|
|
|
281
281
|
var match$4 = routeEntry.route;
|
|
282
282
|
var renderedContent = initialized && match$4 !== undefined ? Caml_option.some(Curry._1(match$4.render, routeEntry.url)) : undefined;
|
|
283
283
|
if (initialized) {
|
|
284
|
-
return React.createElement(React.Fragment, undefined, renderPending !== undefined ? Curry._1(renderPending, match$1[
|
|
284
|
+
return React.createElement(React.Fragment, undefined, renderPending !== undefined ? Curry._1(renderPending, match$1[0]) : null, React.createElement(React.Suspense, {
|
|
285
285
|
children: renderedContent !== undefined ? Caml_option.valFromOption(renderedContent) : (
|
|
286
286
|
renderNotFound !== undefined ? Curry._1(renderNotFound, routeEntry.url) : null
|
|
287
287
|
),
|
|
@@ -233,7 +233,7 @@ module RouteRenderer = {
|
|
|
233
233
|
let (initialized, setInitialized) = React.useState(() => false)
|
|
234
234
|
let router = use()
|
|
235
235
|
|
|
236
|
-
let (
|
|
236
|
+
let (isPending, startTransition) = ReactExperimental.useTransition()
|
|
237
237
|
|
|
238
238
|
let (routeEntry, setRouteEntry) = React.useState(() => router.get())
|
|
239
239
|
|