Skip to content

Commit 489fad5

Browse files
authored
Angular create tauri app [#1934] (#2203)
1 parent 8237260 commit 489fad5

5 files changed

Lines changed: 125 additions & 3 deletions

File tree

.changes/cta-added-angular-cli.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"create-tauri-app": patch
3+
---
4+
5+
Added Angular CLI recipe.

.github/workflows/test-cta.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
matrix:
2727
node: ["14", "16"]
2828
manager: ["6", "7"]
29-
recipe: ["vanillajs", "cra", "vite"]
29+
recipe: ["vanillajs", "cra", "vite", "ngcli"]
3030
exclude:
3131
- node: "16"
3232
manager: "6"
@@ -73,7 +73,7 @@ jobs:
7373
fail-fast: false
7474
matrix:
7575
node: ["14", "16"]
76-
recipe: ["vanillajs", "cra", "vite"]
76+
recipe: ["vanillajs", "cra", "vite", "ngcli"]
7777

7878
steps:
7979
- uses: actions/checkout@v2

tooling/create-tauri-app/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { cra } from './recipes/react'
1111
import { vuecli } from './recipes/vue-cli'
1212
import { vanillajs } from './recipes/vanilla'
1313
import { vite } from './recipes/vite'
14+
import { ngcli } from './recipes/ng-cli'
1415
import { install, checkPackageManager } from './dependency-manager'
1516
import { shell } from './shell'
1617
import { addTauriScript } from './helpers/add-tauri-script'
@@ -113,7 +114,7 @@ interface Responses {
113114
recipeName: string
114115
}
115116

116-
const allRecipes: Recipe[] = [vanillajs, cra, vite, vuecli]
117+
const allRecipes: Recipe[] = [vanillajs, cra, vite, vuecli, ngcli]
117118

118119
const recipeByShortName = (name: string): Recipe | undefined =>
119120
allRecipes.find((r) => r.shortName === name)
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import { PackageManager } from '../dependency-manager'
2+
import { shell } from '../shell'
3+
import { Recipe } from '../types/recipe'
4+
5+
const addAdditionalPackage = async (
6+
packageManager: PackageManager,
7+
cwd: string,
8+
appName: string,
9+
packageName: string
10+
): Promise<void> => {
11+
const ngCommand = ['ng', 'add', packageName, '--skip-confirmation']
12+
13+
if (packageManager === 'yarn') {
14+
await shell('yarn', ngCommand, {
15+
cwd: `${cwd}/${appName}`
16+
})
17+
} else {
18+
await shell('npm', ['run', ...ngCommand], {
19+
cwd: `${cwd}/${appName}`
20+
})
21+
}
22+
}
23+
24+
const ngcli: Recipe = {
25+
descriptiveName: {
26+
name: 'Angular CLI (https://angular.io/cli)',
27+
value: 'ng-cli'
28+
},
29+
shortName: 'ngcli',
30+
extraNpmDependencies: [],
31+
extraNpmDevDependencies: [],
32+
configUpdate: ({ cfg }) => ({
33+
...cfg,
34+
distDir: `../dist/${cfg.appName}`,
35+
devPath: 'http://localhost:4200'
36+
}),
37+
extraQuestions: ({ ci }) => {
38+
return [
39+
{
40+
type: 'confirm',
41+
name: 'material',
42+
message: 'Add Angular Material (https://material.angular.io/)?',
43+
validate: (input: string) => {
44+
return input.toLowerCase() === 'yes'
45+
},
46+
loop: false,
47+
when: !ci
48+
},
49+
{
50+
type: 'confirm',
51+
name: 'eslint',
52+
message:
53+
'Add Angular ESLint (https://github.com/angular-eslint/angular-eslint)?',
54+
validate: (input: string) => {
55+
return input.toLowerCase() === 'yes'
56+
},
57+
loop: false,
58+
when: !ci
59+
}
60+
]
61+
},
62+
preInit: async ({ cwd, cfg, answers, packageManager }) => {
63+
// Angular CLI creates the folder for you
64+
await shell(
65+
'npx',
66+
[
67+
'-p',
68+
'@angular/cli',
69+
'ng',
70+
'new',
71+
`${cfg.appName}`,
72+
`--package-manager=${packageManager}`
73+
],
74+
{
75+
cwd
76+
}
77+
)
78+
79+
if (answers) {
80+
if (answers.material) {
81+
await addAdditionalPackage(
82+
packageManager,
83+
cwd,
84+
cfg.appName,
85+
'@angular/material'
86+
)
87+
}
88+
89+
if (answers.eslint) {
90+
await addAdditionalPackage(
91+
packageManager,
92+
cwd,
93+
cfg.appName,
94+
'@angular-eslint/schematics'
95+
)
96+
}
97+
}
98+
},
99+
postInit: async ({ cwd }) => {
100+
console.log(`
101+
Your installation completed. Change directory to \`${cwd}\` and happy coding.
102+
`)
103+
104+
return await Promise.resolve()
105+
}
106+
}
107+
108+
export { ngcli }

tooling/create-tauri-app/test/index.spec.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,14 @@ describe('CTA', () => {
134134
'tauri:serve': expect.anything()
135135
})
136136
)
137+
},
138+
ngcli: () => {
139+
expect(packageFileOutput['scripts']).toEqual(
140+
expect.objectContaining({
141+
ng: 'ng',
142+
tauri: 'tauri'
143+
})
144+
)
137145
}
138146
}
139147

0 commit comments

Comments
 (0)