inngest-setup-redwoodjs
Version:
Setup Inngest in RedwoodJS
72 lines (71 loc) • 3.74 kB
JavaScript
;
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;