@graphql-inspector/action
Version: 
GraphQL Inspector functionality for GitHub Actions
60 lines (59 loc) • 2.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fileLoader = fileLoader;
const tslib_1 = require("tslib");
const fs_1 = require("fs");
const path_1 = require("path");
const core = tslib_1.__importStar(require("@actions/core"));
function fileLoader({ octokit, owner, repo, }) {
    const query = /* GraphQL */ `
    query GetFile($repo: String!, $owner: String!, $expression: String!) {
      repository(name: $repo, owner: $owner) {
        object(expression: $expression) {
          ... on Blob {
            isTruncated
            oid
            text
          }
        }
      }
    }
  `;
    return async function loadFile(file) {
        if (file.workspace) {
            return (0, fs_1.readFileSync)((0, path_1.resolve)(file.workspace, file.path), 'utf8');
        }
        const result = await octokit.graphql(query, {
            repo,
            owner,
            expression: `${file.ref}:${file.path}`,
        });
        core.info(`Query ${file.ref}:${file.path} from ${owner}/${repo}`);
        try {
            if (result?.repository?.object?.oid && result?.repository?.object?.isTruncated) {
                const oid = result?.repository?.object?.oid;
                const getBlobResponse = await octokit.rest.git.getBlob({
                    owner,
                    repo,
                    file_sha: oid,
                });
                if (getBlobResponse?.data?.content) {
                    return Buffer.from(getBlobResponse?.data?.content, 'base64').toString('utf-8');
                }
                throw new Error('getBlobResponse.data.content is null');
            }
            if (result?.repository?.object?.text) {
                if (result?.repository?.object?.isTruncated === false) {
                    return result.repository.object.text;
                }
                throw new Error('result.repository.object.text is truncated and oid is null');
            }
            throw new Error('result.repository.object.text is null');
        }
        catch (error) {
            console.log(result);
            console.error(error);
            throw new Error(`Failed to load '${file.path}' (ref: ${file.ref})`);
        }
    };
}