UNPKG

inngest-setup-redwoodjs

Version:

Setup Inngest in RedwoodJS

72 lines (71 loc) 3.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.writeFunctionFile = exports.renderFunctionTemplate = exports.getNamesForFile = exports.getExportedQueryAndMutationTypes = exports.getWebGraphQLTypeDefsFile = void 0; const tslib_1 = require("tslib"); const path_1 = tslib_1.__importDefault(require("path")); const camelcase_1 = tslib_1.__importDefault(require("camelcase")); const fs_extra_1 = tslib_1.__importDefault(require("fs-extra")); const humanize_string_1 = tslib_1.__importDefault(require("humanize-string")); const lodash_template_1 = tslib_1.__importDefault(require("lodash.template")); const param_case_1 = require("param-case"); const cli_helpers_1 = require("@redwoodjs/cli-helpers"); const getWebGraphQLTypeDefsFile = () => { const GRAPHQL_TYPES_PATH = path_1.default.join((0, cli_helpers_1.getPaths)().web.types, 'graphql.d.ts'); return fs_extra_1.default.readFileSync(GRAPHQL_TYPES_PATH, 'utf-8'); }; exports.getWebGraphQLTypeDefsFile = getWebGraphQLTypeDefsFile; const getExportedQueryAndMutationTypes = (graphQLTypeDefs) => { const fileContents = graphQLTypeDefs || (0, exports.getWebGraphQLTypeDefsFile)(); const exportedTypes = []; // Extract exported types const typeRegex = /export\s+type\s+(\w+)\s+=\s+{[^}]*__typename\?:\s+['"](?:Query|Mutation)['"][^}]*}/g; let match; while ((match = typeRegex.exec(fileContents)) !== null) { if (!['Mutation', 'Query'].includes(match[1])) { const name = match[1]; const type = match[0]; const operationType = type.includes("__typename?: 'Query'") ? 'query' : 'mutation'; exportedTypes.push({ name, type, operationType }); } } // Filter exported types with __typename of Query or Mutation const filteredTypes = exportedTypes.filter(type => type.operationType === 'query' || 'mutation'); return filteredTypes.sort((a, b) => { if (a.name < b.name) return -1; if (a.name > b.name) return 1; return 0; }); }; exports.getExportedQueryAndMutationTypes = getExportedQueryAndMutationTypes; const getNamesForFile = (options) => { const name = options.name; const functionName = (0, camelcase_1.default)(name); const humanizedName = (0, humanize_string_1.default)(name); const eventFromName = (0, param_case_1.paramCase)(name); let eventPrefix = 'event'; let eventName = `${eventPrefix}/${eventFromName}`; if (options.graphql && options.type !== 'scheduled' && options.eventName) { eventPrefix = 'graphql'; eventName = `${eventPrefix}/${(0, param_case_1.paramCase)(options.eventName)}.${options.operationType}`; } return { functionName, humanizedName, eventName }; }; exports.getNamesForFile = getNamesForFile; const renderFunctionTemplate = (options) => { const { eventName, functionName, humanizedName } = (0, exports.getNamesForFile)(options); const compiled = (0, lodash_template_1.default)(fs_extra_1.default .readFileSync(path_1.default.resolve(__dirname, '..', '..', 'templates', 'function', `${options.type}.ts.template`), 'utf-8') .toString()); const rendered = compiled({ name: options.name, eventName, functionName, humanizedName }); return { filename: functionName, rendered }; }; exports.renderFunctionTemplate = renderFunctionTemplate; const writeFunctionFile = (filename, rendered, existingFiles) => { const SRC_INNGEST_PATH = path_1.default.join((0, cli_helpers_1.getPaths)().api.src, 'jobs', 'inngest'); (0, cli_helpers_1.writeFile)(path_1.default.join(SRC_INNGEST_PATH, `${filename}.ts`), rendered, { existingFiles, }); }; exports.writeFunctionFile = writeFunctionFile;