UNPKG

@simulacrum/github-api-simulator

Version:

Provides common functionality to frontend app and plugins.

95 lines 5.09 kB
"use strict"; 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