@simulacrum/github-api-simulator
Version:
Provides common functionality to frontend app and plugins.
95 lines • 5.09 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.extendStore = void 0;
const entities_ts_1 = require("./entities.js");
const inputSchema = (initialState, extendedSchema) => ({ slice }) => {
const storeInitialState = (0, entities_ts_1.convertInitialStateToStoreState)(initialState);
const extended = extendedSchema ? extendedSchema({ slice }) : {};
let slices = Object.assign({ users: slice.table(!storeInitialState ? {} : { initialState: storeInitialState.users }), installations: slice.table(!storeInitialState
? {}
: { initialState: storeInitialState.installations }), repositories: slice.table(!storeInitialState
? {}
: { initialState: storeInitialState.repositories }), branches: slice.table(!storeInitialState ? {} : { initialState: storeInitialState.branches }), organizations: slice.table(!storeInitialState
? {}
: { initialState: storeInitialState.organizations }), blobs: slice.table(!storeInitialState ? {} : { initialState: storeInitialState.blobs }) }, extended);
return slices;
};
const inputActions = (args) => {
return {};
};
const extendActions = (extendedActions) => (args) => {
return extendedActions
? // @ts-expect-error schema is cyclical, ignore extension for now
Object.assign(Object.assign({}, inputActions(args)), extendedActions(args)) : inputActions(args);
};
const inputSelectors = (args) => {
const { createSelector, schema } = args;
const allGithubOrganizations = createSelector(schema.organizations.selectTableAsList, (ghOrgs) => {
return ghOrgs;
});
const getAppInstallation = createSelector(schema.installations.selectTableAsList, schema.organizations.selectTableAsList, schema.repositories.selectTableAsList, (_, org, repo) => ({ org, repo }), (installations, orgs, repos, { org, repo }) => {
const appInstall = installations.find((install) => install.account === org);
if (!appInstall)
return undefined;
let account = undefined;
if (repo) {
const repoData = repos.find((r) => r.owner === (appInstall === null || appInstall === void 0 ? void 0 : appInstall.account) && r.name === repo);
if (repoData)
account = orgs.find((o) => o.login === repoData.owner);
}
else {
account = orgs.find((o) => o.login === (appInstall === null || appInstall === void 0 ? void 0 : appInstall.account));
}
if (!account)
return undefined;
return Object.assign(Object.assign({}, appInstall), { account: Object.assign({}, account), target_id: account === null || account === void 0 ? void 0 : account.id, target_type: account === null || account === void 0 ? void 0 : account.type });
});
const allReposWithOrgs = createSelector(schema.repositories.selectTableAsList, schema.organizations.selectTable, (_, org) => org, (allRepos, orgMap, org) => {
if (org && !(orgMap === null || orgMap === void 0 ? void 0 : orgMap[org]))
return undefined;
const repos = !org ? allRepos : allRepos.filter((r) => r.owner === org);
return repos.map((repo) => {
const linkedRepo = Object.assign(Object.assign({}, repo), { owner: Object.assign({}, orgMap[repo.owner]) });
// TODO better option than delete?
delete linkedRepo.owner.name;
delete linkedRepo.owner.email;
return linkedRepo;
});
});
const getBlob = createSelector(schema.blobs.selectTableAsList, (_state, owner, repo, sha_or_path) => ({
owner,
repo,
sha_or_path,
}), (blobs, { owner, repo, sha_or_path }) => {
const blob = blobs.find((blob) => blob.owner === owner &&
blob.repo === repo &&
(blob.path === sha_or_path || blob.sha === sha_or_path));
return blob;
});
const getBlobAtOwnerRepo = createSelector(schema.blobs.selectTableAsList, (_state, owner, repo) => ({
owner,
repo,
}), (blobs, { owner, repo }) => {
const blob = blobs.filter((blob) => blob.owner === owner && blob.repo === repo);
return blob;
});
return {
allGithubOrganizations,
getAppInstallation,
allReposWithOrgs,
getBlob,
getBlobAtOwnerRepo,
};
};
const extendSelectors = (extendedSelectors) => (args) => {
return extendedSelectors
? // @ts-expect-error schema is cyclical, ignore extension for now
Object.assign(Object.assign({}, inputSelectors(args)), extendedSelectors(args)) : inputSelectors(args);
};
const extendStore = (initialState, extended) => ({
actions: extendActions(extended === null || extended === void 0 ? void 0 : extended.actions),
selectors: extendSelectors(extended === null || extended === void 0 ? void 0 : extended.selectors),
schema: inputSchema(initialState, extended === null || extended === void 0 ? void 0 : extended.schema),
});
exports.extendStore = extendStore;
//# sourceMappingURL=index.js.map
;