Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions platform/packages/cli/cli.properties
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# ---
# dynamia.*
# ---
dynamia.version=26.4.1
dynamia.version=26.9.0
dynamia.docs.url=https://dynamia.tools/docs

# ---
Expand Down Expand Up @@ -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
Expand All @@ -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.*
Expand Down
5 changes: 4 additions & 1 deletion platform/packages/cli/src/utils/replace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
])

/**
Expand Down Expand Up @@ -141,7 +144,7 @@ export async function renameJavaPackages(options: RenameOptions): Promise<void>
replacements['<artifactId>demo</artifactId>'] = `<artifactId>${artifactId}</artifactId>`
replacements['<version>0.0.1-SNAPSHOT</version>'] = `<version>${version}</version>`
replacements['<name>DynamiaTools App Backend</name>'] = `<name>${projectName}</name>`
replacements['<dynamia.version>26.4.1</dynamia.version>'] = `<dynamia.version>${dynamiaVersion}</dynamia.version>`
replacements['<dynamia.version>26.9.0</dynamia.version>'] = `<dynamia.version>${dynamiaVersion}</dynamia.version>`
replacements['<version>4.0.5</version>'] = `<version>${springBootVersion}</version>`
replacements['<version>4.0.5.RELEASE</version>'] = `<version>${springBootVersion}</version>`

Expand Down
14 changes: 14 additions & 0 deletions platform/packages/cli/test/replace.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'), '<template>{{PROJECT_NAME}}</template>')
writeFileSync(join(dir, 'index.html'), '<title>{{PROJECT_NAME}}</title>')
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('<template>my-erp</template>')
expect(readFileSync(join(dir, 'index.html'), 'utf-8')).toBe('<title>my-erp</title>')
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' })
Expand Down
Loading