From 64d2bf237f642eea1b187ab83a67e5b7dbad9218 Mon Sep 17 00:00:00 2001 From: Mario Serrano Date: Tue, 22 Sep 2026 09:59:47 -0500 Subject: [PATCH] feat(cli): enable frontend.vue, bump dynamia.version to 26.9.0, fix token replacement for frontend files - Enable template.frontend.vue: dynamiatools/template-frontend-vue now has a functional scaffold (Vite + Vue 3 + @dynamia-tools/tailadmin-vue + @dynamia-tools/sdk + @dynamia-tools/vue), verified end-to-end through the actual CLI (clone + token replace), and via a full pnpm install + type-check + build against the currently-published @dynamia-tools/sdk@26.8.0/@dynamia-tools/vue@26.8.0 (26.9.0 isn't published yet -- see below). - Bump dynamia.version / npm.sdk.version / npm.ui-core.version / npm.vue.version from 26.4.1 to 26.9.0: this release's target version per Mario. Not yet published to Maven Central/npm as of this commit -- generated backend projects (and this frontend template's package.json) will fail to resolve dependencies until it ships. Once published, no further template changes are needed. - Fix replaceTokensInDir's TEXT_EXTENSIONS allow-list (replace.ts): it was missing .ts/.tsx/.js/.jsx/.vue/.html/.css/.scss entirely, so {{PROJECT_NAME}} would have silently survived generation in every frontend template's actual source/markup files -- only package.json (.json) was ever getting replaced. Found and fixed while building template-frontend-vue. Added a regression test. Also updates the backend templates' pom.xml property and this file's matching replace.ts fallback string to 26.9.0 (separate commits in each template repo). Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01UcARdenC1Sk5EVpkzboH9W --- platform/packages/cli/cli.properties | 10 +++++----- platform/packages/cli/src/utils/replace.ts | 5 ++++- platform/packages/cli/test/replace.test.ts | 14 ++++++++++++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/platform/packages/cli/cli.properties b/platform/packages/cli/cli.properties index 2a633890..cb24cffd 100644 --- a/platform/packages/cli/cli.properties +++ b/platform/packages/cli/cli.properties @@ -5,7 +5,7 @@ # --- # dynamia.* # --- -dynamia.version=26.4.1 +dynamia.version=26.9.0 dynamia.docs.url=https://dynamia.tools/docs # --- @@ -64,7 +64,7 @@ template.frontend.vue.label=Vue 3 template.frontend.vue.repo=https://github.com/dynamiatools/template-frontend-vue template.frontend.vue.branch=main template.frontend.vue.description=Vue 3 + Vite + @dynamia-tools/vue -template.frontend.vue.enabled=false +template.frontend.vue.enabled=true template.frontend.vue.availabilityMessage=Vue frontend template is not available yet. template.frontend.react.label=React @@ -85,11 +85,11 @@ vite.templates.react=react-ts # npm.* (SDK package names and versions) # --- npm.sdk.package=@dynamia-tools/sdk -npm.sdk.version=26.4.1 +npm.sdk.version=26.9.0 npm.ui-core.package=@dynamia-tools/ui-core -npm.ui-core.version=26.4.1 +npm.ui-core.version=26.9.0 npm.vue.package=@dynamia-tools/vue -npm.vue.version=26.4.1 +npm.vue.version=26.9.0 # --- # installer.* diff --git a/platform/packages/cli/src/utils/replace.ts b/platform/packages/cli/src/utils/replace.ts index ba539eff..dcba7dd2 100644 --- a/platform/packages/cli/src/utils/replace.ts +++ b/platform/packages/cli/src/utils/replace.ts @@ -6,6 +6,9 @@ const TEXT_EXTENSIONS = new Set([ '.java', '.kt', '.groovy', '.xml', '.yml', '.yaml', '.properties', '.md', '.txt', '.json', '.gradle', '.kts', + // Frontend templates (Vite/Vue/React): without these, {{PROJECT_NAME}} and any other + // token would be silently left untouched in every source/markup file. + '.ts', '.tsx', '.js', '.jsx', '.vue', '.html', '.css', '.scss', ]) /** @@ -141,7 +144,7 @@ export async function renameJavaPackages(options: RenameOptions): Promise replacements['demo'] = `${artifactId}` replacements['0.0.1-SNAPSHOT'] = `${version}` replacements['DynamiaTools App Backend'] = `${projectName}` - replacements['26.4.1'] = `${dynamiaVersion}` + replacements['26.9.0'] = `${dynamiaVersion}` replacements['4.0.5'] = `${springBootVersion}` replacements['4.0.5.RELEASE'] = `${springBootVersion}` diff --git a/platform/packages/cli/test/replace.test.ts b/platform/packages/cli/test/replace.test.ts index a7851767..01dc2e94 100644 --- a/platform/packages/cli/test/replace.test.ts +++ b/platform/packages/cli/test/replace.test.ts @@ -34,6 +34,20 @@ describe('replaceTokensInDir', () => { expect(readFileSync(join(dir, 'nested', 'deeper', 'a.yml'), 'utf-8')).toBe('name: my-erp') }) + // Regression test: frontend templates (Vite/Vue/React) are mostly .ts/.vue/.html/.js files. + // Without these in the extension allow-list, {{PROJECT_NAME}} silently survives generation. + it('replaces tokens in frontend source/markup files (.ts, .vue, .html, .js)', () => { + writeFileSync(join(dir, 'main.ts'), "const name = '{{PROJECT_NAME}}'") + writeFileSync(join(dir, 'App.vue'), '') + writeFileSync(join(dir, 'index.html'), '{{PROJECT_NAME}}') + writeFileSync(join(dir, 'legacy.js'), "module.exports = '{{PROJECT_NAME}}'") + replaceTokensInDir(dir, { '{{PROJECT_NAME}}': 'my-erp' }) + expect(readFileSync(join(dir, 'main.ts'), 'utf-8')).toBe("const name = 'my-erp'") + expect(readFileSync(join(dir, 'App.vue'), 'utf-8')).toBe('') + expect(readFileSync(join(dir, 'index.html'), 'utf-8')).toBe('my-erp') + expect(readFileSync(join(dir, 'legacy.js'), 'utf-8')).toBe("module.exports = 'my-erp'") + }) + it('applies multiple token replacements in one pass', () => { writeFileSync(join(dir, 'pom.xml'), '{{GROUP_ID}}:{{ARTIFACT_ID}}') replaceTokensInDir(dir, { '{{GROUP_ID}}': 'com.acme', '{{ARTIFACT_ID}}': 'shop' })