graphql-codegen-flutter-freezed
Version:
A stand-alone package to generate Freezed models from GraphQL schema based on the flutter-freezed plugin for GraphQL Code Generator
37 lines (36 loc) • 2.03 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.plugin = void 0;
const plugin_helpers_1 = require("@graphql-codegen/plugin-helpers");
const schema_ast_1 = require("@graphql-codegen/schema-ast");
const freezed_declaration_blocks_1 = require("./freezed-declaration-blocks");
const schema_visitor_1 = require("./schema-visitor");
const utils_1 = require("./utils");
const plugin = (schema, _documents, config) => {
// sets the defaults for the config
config = Object.assign({}, new utils_1.DefaultFreezedPluginConfig(config));
const { schema: _schema, ast } = (0, schema_ast_1.transformSchemaAST)(schema, config);
const _a = (0, schema_visitor_1.schemaVisitor)(_schema, config), { freezedFactoryBlockRepository } = _a, visitor = __rest(_a, ["freezedFactoryBlockRepository"]);
const visitorResult = (0, plugin_helpers_1.oldVisit)(ast, { leave: visitor });
const generated = visitorResult.definitions.filter((def) => def instanceof freezed_declaration_blocks_1.FreezedDeclarationBlock);
return (generated
.map(freezedDeclarationBlock => freezedDeclarationBlock.toString().replaceAll(/==>factory==>.+/gm, s => {
const pattern = s.replace('==>factory==>', '').trim();
const [key, appliesOn, name, typeName] = pattern.split('==>');
return freezedFactoryBlockRepository.retrieve(key, appliesOn, name, typeName !== null && typeName !== void 0 ? typeName : null).toString();
}))
.join('')
.trim() + '\n');
};
exports.plugin = plugin;