website/_webpack/js/flow-loader.js (75 lines of code) (raw):
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const versionCache = {};
const TRY_LIB_CONTENTS = `
declare type $JSXIntrinsics = {
[string]: {
instance: any,
props: {
children?: React$Node,
[key: string]: any,
},
},
};
`.slice(1);
function get(url) {
return new Promise(function(resolve, reject) {
var req = new XMLHttpRequest();
req.open('GET', url);
req.onload = function() {
if (req.status == 200) {
resolve([url, req.response]);
}
else {
reject(Error(req.statusText));
}
};
req.onerror = function() {
reject(Error("Network Error"));
};
req.send();
});
}
export function load(version) {
if (version in versionCache) {
return Promise.resolve(versionCache[version]);
}
const majorVersion =
version === 'master'
? Infinity
: parseInt(version.split('.')[1], 10);
const libs = majorVersion <= 54 ? [
`/static/${version}/flowlib/core.js`,
`/static/${version}/flowlib/bom.js`,
`/static/${version}/flowlib/cssom.js`,
`/static/${version}/flowlib/dom.js`,
`/static/${version}/flowlib/node.js`,
`/static/${version}/flowlib/react.js`,
`/static/${version}/flowlib/streams.js`,
] : majorVersion <= 71 ? [
`/static/${version}/flowlib/core.js`,
`/static/${version}/flowlib/react.js`,
] : [
`/static/${version}/flowlib/core.js`,
`/static/${version}/flowlib/react.js`,
`/static/${version}/flowlib/intl.js`,
];
const flowLoader = new Promise(function(resolve) {
requirejs([`/static/${version}/flow.js`], resolve);
});
return Promise.all([flowLoader, ...libs.map(get)])
.then(function([_flow, ...contents]) {
contents.forEach(function(nameAndContent) {
self.flow.registerFile(nameAndContent[0], nameAndContent[1]);
});
self.flow.registerFile('try-lib.js', TRY_LIB_CONTENTS);
if (majorVersion <= 126) {
self.flow.setLibs([...libs, 'try-lib.js']);
} else {
self.flow.initBuiltins([...libs, 'try-lib.js']);
}
versionCache[version] = self.flow;
return flow;
})
.catch(function(err) {
throw err;
});
}