From 70d46309717bfcb7c1d04d3215213b1d4c089cf7 Mon Sep 17 00:00:00 2001 From: Roman Axelrod Date: Thu, 17 Nov 2022 00:32:11 +0200 Subject: [PATCH] Add basic Handlebars to Hubl converter. --- platforms/hubspot/hubspot-email-adapter.js | 25 +++++++++++++++++++++- platforms/hubspot/hubspot-page-adapter.js | 16 ++++++++------ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/platforms/hubspot/hubspot-email-adapter.js b/platforms/hubspot/hubspot-email-adapter.js index 4b0dae5..a1a689e 100644 --- a/platforms/hubspot/hubspot-email-adapter.js +++ b/platforms/hubspot/hubspot-email-adapter.js @@ -7,8 +7,11 @@ const {modulesPath, projectPath} = getConfigs(); export async function buildHubspotEmail(blockName) { const distPath = await createDistFolder(blockName); - await copyFile(`${projectPath}/src/${blockName}.template.hbs`, `${distPath}/module.html`) + // Template + let handlebars = await readFile(path.join(srcPath, `${blockName}.template.hbs`), "utf8"); + await writeFile(path.join(distPath, 'module.html'), handlebarsToHubl(handlebars)); + // JSON await buildHubspotJSONFiles(distPath, { global: false, host_template_types: ["EMAIL"], @@ -243,3 +246,23 @@ export async function buildHubspotJSONFiles(distPath, metaData) { // Export JSON file. await writeFile(path.join(distPath, 'fields.json'), JSON.stringify(fields, null, 4)); } + + +export function handlebarsToHubl(handlebars) { + handlebars = handlebars.replace(/{{#if /g, '{% if module.'); + handlebars = handlebars.replace(/{{\/if}}/g, '{% endif %}'); + handlebars = handlebars.replace(/{{#each /g, '{% for module.'); + handlebars = handlebars.replace(/{{\/each}}/g, '{% endfor %}'); + handlebars = handlebars.replace(/{{base_url}}/g, ''); + handlebars = handlebars.replace(/{esc_attr /g, '{'); + handlebars = handlebars.replace(/{esc_url /g, '{'); + handlebars = handlebars.replace(/{esc_html /g, '{'); + handlebars = handlebars.replace(/{{{ /g, '{{'); + handlebars = handlebars.replace(/ }}}/g, '}}'); + handlebars = handlebars.replace(/{{{/g, '{{'); + handlebars = handlebars.replace(/}}}/g, '}}'); + handlebars = handlebars.replace(/{{/g, '{{module.'); + handlebars = handlebars.replace(/{{module. /g, '{{ module.'); + + return handlebars; +} diff --git a/platforms/hubspot/hubspot-page-adapter.js b/platforms/hubspot/hubspot-page-adapter.js index 3667abf..616d133 100644 --- a/platforms/hubspot/hubspot-page-adapter.js +++ b/platforms/hubspot/hubspot-page-adapter.js @@ -1,8 +1,7 @@ import path from "path"; -import {copyFile} from "fs/promises"; -import {copy} from "fs-extra"; +import {copyFile, readFile, writeFile} from "fs/promises"; import {capitalize, getConfigs} from "../../helpers.js"; -import {buildHubspotJSONFiles, createDistFolder,} from "./hubspot-email-adapter.js"; +import {buildHubspotJSONFiles, createDistFolder, handlebarsToHubl,} from "./hubspot-email-adapter.js"; const {modulesPath, projectPath} = getConfigs(); @@ -10,11 +9,17 @@ export async function buildHubspotPage(blockName) { const distPath = await createDistFolder(blockName); const srcPath = path.join(projectPath, 'src'); - await copyFile(path.join(srcPath, `${blockName}.template.hbs`), path.join(distPath, 'module.html')); + + // Template + let handlebars = await readFile(path.join(srcPath, `${blockName}.template.hbs`), "utf8"); + await writeFile(path.join(distPath, 'module.html'), handlebarsToHubl(handlebars)); + + // Assets await copyFile(path.join(srcPath, 'styles', `${blockName}.min.css`), path.join(distPath, 'module.css')); await copyFile(path.join(srcPath, 'scripts', `${blockName}.min.js`), path.join(distPath, 'module.js')); - await copy(path.join(projectPath, 'src', 'images'), path.join(distPath, 'images')); + // await copy(path.join(projectPath, 'src', 'images'), path.join(distPath, 'images')); + // JSON await buildHubspotJSONFiles(distPath, { global: false, host_template_types: ["PAGE"], @@ -22,4 +27,3 @@ export async function buildHubspotPage(blockName) { is_available_for_new_content: true }); } -