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' })