UNPKG

@kunn/go

Version:

:octopus: Go Language support for Kunn

110 lines (109 loc) 4.05 kB
"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spread = (this && this.__spread) || function () { for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); return ar; }; Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require("@kunn/core"); var map_1 = require("@sudoo/bark/map"); var createSimple = function (text, nest) { return ({ text: text, nest: nest, }); }; var parseProtocolToString = function (protocol) { return "" + protocol[0].toUpperCase() + protocol.toLowerCase().substring(1); }; var generateNamespace = function (route) { var parsedPath = route.path .split('/') .filter(Boolean) .map(function (value) { return value.replace(/ /g, ''); }); return parseProtocolToString(route.protocol) + "_" + parsedPath.join('_'); }; exports.generateGoLangTypeKeyedDefinition = function (name, data, nest) { var lines = exports.generateGoLangTypeDefinition(data, nest); if (lines[0]) { lines[0] = { text: name + " " + lines[0].text, nest: lines[0].nest, }; } return lines; }; exports.generateGoLangTypeDefinition = function (data, nest) { switch (data.type) { case core_1.TYPE.FLOAT: return [createSimple('float32', nest)]; case core_1.TYPE.INTEGER: return [createSimple('int32', nest)]; case core_1.TYPE.STRING: return [createSimple('string', nest)]; case core_1.TYPE.ARRAY: { var definition = exports.generateGoLangTypeDefinition(data.element, nest); if (definition[0]) { definition[0] = { text: "[]" + definition[0].text, nest: definition[0].nest, }; } return definition; } case core_1.TYPE.OBJECT: { var objectResult = map_1._Map.keys(data.map).reduce(function (previous, key) { var typeValue = exports.generateGoLangTypeKeyedDefinition(key, data.map[key], nest + 1); return __spread(previous, typeValue); }, []); return __spread([{ text: "struct {", nest: nest, }], objectResult, [{ text: "}", nest: nest, }]); } } return []; }; exports.generateGoLangSubData = function (name, record) { return __spread([{ text: name + " struct {", nest: 1, }], map_1._Map.keys(record).reduce(function (previous, key) { return __spread(previous, exports.generateGoLangTypeKeyedDefinition(key, record[key], 2)); }, []), [{ text: '}', nest: 1, }]); }; exports.generateGoLangGesture = function (route) { var gesture = core_1.GestureBuffer.create(); gesture.appendHead({ text: "type " + generateNamespace(route) + " struct {", nest: 0, }).appendTail({ text: "}", nest: 0, }); gesture.appendBody.apply(gesture, __spread(exports.generateGoLangSubData('Query', route.request.query))); if (route.protocol === core_1.PROTOCOL.DELETE || route.protocol === core_1.PROTOCOL.POST || route.protocol === core_1.PROTOCOL.PUT) { var request = route.request; gesture.appendBody.apply(gesture, __spread(exports.generateGoLangSubData('Body', request.body))); } gesture.appendBody.apply(gesture, __spread(exports.generateGoLangSubData('Response', route.request.response))); return gesture.combine(); };