Skip to content

Commit 4b61d47

Browse files
fix: correct favicon generation
1 parent 08e5357 commit 4b61d47

File tree

9 files changed

+155
-106
lines changed

9 files changed

+155
-106
lines changed

src/commands/create.ts

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import {
4646
FirebaseConfig
4747
} from './create-common'
4848
import { Q_INCLUDE_FIREBASE, Q_FIREBASE } from './create-firebase'
49+
import { favicon_ } from './favicon'
4950

5051
command(
5152
'create [overwrite]',
@@ -330,33 +331,42 @@ function create(overwriteExisting = false) {
330331
storageBucket: im.config.firebaseStorageBucket
331332
}
332333
: undefined
333-
return forkJoin([
334-
genNpmPackageJson(im.config.fullname, true, overwriteExisting).pipe(
335-
flatMap(test(im.config.fullname))
334+
return generateFngConfig(path, overwriteExisting, faviOverrides).pipe(
335+
flatMap(() =>
336+
forkJoin([
337+
generateCoreAngular(im.config.fullname),
338+
generateGitIgnore(path, overwriteExisting),
339+
generateTsLint(path, overwriteExisting),
340+
generateDotEnv(
341+
path,
342+
overwriteExisting,
343+
firebaseConfig,
344+
im.config.googleAnalyticsTrackingId,
345+
im.config.googleSiteVerificationCode
346+
),
347+
generateTsConfig(path, overwriteExisting),
348+
generateTsDeclartionFile(path, overwriteExisting),
349+
genNpmPackageJson(im.config.fullname, true, overwriteExisting),
350+
im.config.ide
351+
? generateIdeStubs(im.config.ide, path, overwriteExisting)
352+
: of(undefined)
353+
])
336354
),
337-
generateCoreAngular(im.config.fullname),
338-
generateGitIgnore(path, overwriteExisting),
339-
generateTsLint(path, overwriteExisting),
340-
generateDotEnv(
341-
path,
342-
overwriteExisting,
343-
firebaseConfig,
344-
im.config.googleAnalyticsTrackingId,
345-
im.config.googleSiteVerificationCode
346-
),
347-
generateFngConfig(path, overwriteExisting, faviOverrides),
348-
generateTsConfig(path, overwriteExisting),
349-
generateTsDeclartionFile(path, overwriteExisting),
350-
im.config.ide
351-
? generateIdeStubs(im.config.ide, path, overwriteExisting)
352-
: of(undefined)
353-
])
355+
flatMap(() => favicon_(path)),
356+
flatMap(test(im.config.fullname))
357+
)
354358
}, im => im),
355359
take(1)
356360
)
357-
.subscribe(res => {
358-
// noop
359-
}, process.exit)
361+
.subscribe(
362+
res => {
363+
// noop
364+
},
365+
err => {
366+
console.error(err)
367+
process.exit(1)
368+
}
369+
)
360370

361371
// prompt([
362372
// // {

src/commands/favicon.ts

Lines changed: 61 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import { command } from 'yargs'
22
import { logInfoWithBackground, logError } from '../utilities/log'
3-
import { flatMap, map, first, filter, tap } from 'rxjs/operators'
3+
import { flatMap, map, filter, tap, take, first } from 'rxjs/operators'
44
import { rxFavicons } from '../utilities/rx-favicon'
5-
import { writeFile_, mkDirDeep_, writeJsonFile_ } from '../utilities/rx-fs'
5+
import {
6+
writeFile_,
7+
mkDirDeep_,
8+
writeJsonFile_,
9+
mkDirAndContinueIfExists_
10+
} from '../utilities/rx-fs'
611
import { resolve } from 'path'
712
import { forkJoin } from 'rxjs'
813
import readConfig_, {
@@ -18,7 +23,12 @@ command(
1823
return args
1924
},
2025
args => {
21-
favicon()
26+
favicon_('.')
27+
.pipe(
28+
first(),
29+
take(1)
30+
)
31+
.subscribe(logFaviconComplete, logError)
2232
}
2333
)
2434

@@ -51,54 +61,55 @@ interface configModel {
5161
readonly result: FavIconResponse
5262
}
5363

54-
function mapResponsesToWriteableObservables(response: configModel) {
55-
return readConfig_().pipe(
56-
flatMap(config => {
57-
const _confg = {
58-
...config,
59-
generatedMetaTags: response.result.html
60-
}
61-
return writeJsonFile_(resolve('fusing-angular.json'), _confg, true)
62-
}),
63-
flatMap(() => {
64-
return forkJoin(
65-
...response.result.files.map(file =>
66-
writeFile_(
67-
resolve(`${response.config.output}/${file.name}`),
68-
file.contents
64+
function mapResponsesToWriteableObservables(baseDir = '') {
65+
return function(response: configModel) {
66+
return readConfig_(baseDir).pipe(
67+
map(config => {
68+
return {
69+
...config,
70+
generatedMetaTags: response.result.html
71+
}
72+
}),
73+
flatMap(config =>
74+
writeJsonFile_(resolve(baseDir, 'fusing-angular.json'), config, true)
75+
),
76+
flatMap(() =>
77+
mkDirAndContinueIfExists_(resolve(baseDir, `${response.config.output}`))
78+
),
79+
flatMap(() => {
80+
return forkJoin([
81+
...response.result.files.map(file =>
82+
writeFile_(
83+
resolve(baseDir, `${response.config.output}/${file.name}`),
84+
file.contents
85+
)
86+
),
87+
...response.result.images.map(file =>
88+
writeFile_(
89+
resolve(baseDir, `${response.config.output}/${file.name}`),
90+
file.contents
91+
)
6992
)
70-
)
71-
)
72-
}),
73-
map(() => {
74-
return response.result.images.map(file =>
75-
writeFile_(
76-
resolve(`${response.config.output}/${file.name}`),
77-
file.contents
78-
)
79-
)
80-
})
81-
)
93+
])
94+
})
95+
)
96+
}
8297
}
8398

84-
function favicon() {
85-
readConfig_()
86-
.pipe(
87-
tap(logFaviconStart),
88-
filter(requireFaviconConfig),
89-
map(mapFaviconConfig),
90-
flatMap(rxFavicons, (config: FaviconConfig, result) => ({
91-
config,
92-
result
93-
})),
94-
tap(logDirectoryCheck),
95-
flatMap(
96-
response => mkDirDeep_(response.config.output),
97-
response => ({ ...response })
98-
),
99-
map(mapResponsesToWriteableObservables),
100-
flatMap(fileWriteObs => forkJoin(fileWriteObs)),
101-
first()
102-
)
103-
.subscribe(logFaviconComplete, logError)
99+
export function favicon_(path?: string) {
100+
return readConfig_(path).pipe(
101+
tap(logFaviconStart),
102+
filter(requireFaviconConfig),
103+
map(mapFaviconConfig),
104+
flatMap(rxFavicons(path), (config: FaviconConfig, result) => ({
105+
config,
106+
result
107+
})),
108+
tap(logDirectoryCheck),
109+
// flatMap(
110+
// response => mkDirDeep_(resolve(path || '', response.config.output)),
111+
// response => ({ ...response })
112+
// ),
113+
flatMap(mapResponsesToWriteableObservables(path))
114+
)
104115
}

src/generators/angular-core.gen.ts

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import {
55
appSharedModuleTemplate,
66
appComponentCssTemplate,
77
appComponentHtmlTemplate,
8-
appIndex
8+
appIndex,
9+
favicon
910
} from '../templates/core/app'
1011
import { writeFile_, mkDirAndContinueIfExists_ } from '../utilities/rx-fs'
1112
import { forkJoin } from 'rxjs'
@@ -21,12 +22,14 @@ import {
2122
serverModuleTemplate,
2223
serverAppTemplate
2324
} from '../templates/core/server'
25+
import { robots } from '../templates/core/assets'
2426

2527
export function generateCoreAngular(projectDir: string) {
2628
return forkJoin([
2729
generateCoreAngularApp(projectDir),
2830
generateCoreAngularBrowser(projectDir),
29-
generateCoreAngularServer(projectDir)
31+
generateCoreAngularServer(projectDir),
32+
generateCoreAngularAssets(projectDir)
3033
])
3134
}
3235

@@ -59,21 +62,22 @@ export function generateCoreAngularApp(projectDir: string, universal = true) {
5962
writeFile_(`${baseDir}/app.component.ts`, appComponentTemplate),
6063
writeFile_(`${baseDir}/app.component.scss`, appComponentCssTemplate), // TODO: write component generator function instead
6164
writeFile_(`${baseDir}/app.component.html`, appComponentHtmlTemplate),
62-
writeFile_(`${baseDir}/index.pug`, appIndex)
65+
writeFile_(`${baseDir}/index.pug`, appIndex),
66+
writeFile_(`${baseDir}/favicon.svg`, favicon)
6367
])
64-
),
65-
flatMap(() =>
66-
mkDirAndContinueIfExists_(resolve(baseDir, 'home')).pipe(
67-
flatMap(() =>
68-
forkJoin([
69-
// writeFile_(
70-
// `${baseDir}/home/home.component.ts`,
71-
// homeComponentTemplate
72-
// )
73-
])
74-
)
75-
)
7668
)
69+
// flatMap(() =>
70+
// mkDirAndContinueIfExists_(resolve(baseDir, 'home')).pipe(
71+
// flatMap(() =>
72+
// forkJoin([
73+
// // writeFile_(
74+
// // `${baseDir}/home/home.component.ts`,
75+
// // homeComponentTemplate
76+
// // )
77+
// ])
78+
// )
79+
// )
80+
// )
7781
)
7882
}
7983

@@ -112,3 +116,12 @@ export function generateCoreAngularServer(projectDir: string) {
112116
)
113117
)
114118
}
119+
120+
export function generateCoreAngularAssets(projectDir: string) {
121+
const root = resolve(`${projectDir}/src`)
122+
const baseDir = resolve(root, 'assets')
123+
return mkDirAndContinueIfExists_(root).pipe(
124+
flatMap(() => mkDirAndContinueIfExists_(baseDir)),
125+
flatMap(() => forkJoin([writeFile_(`${baseDir}/robots.txt`, robots)]))
126+
)
127+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<svg width="2353" height="2500" viewBox="0 0 256 272" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid">
2+
<path d="M.1 45.522L125.908.697l129.196 44.028-20.919 166.45-108.277 59.966-106.583-59.169L.1 45.522z" fill="#E23237"/>
3+
<path d="M255.104 44.725L125.908.697v270.444l108.277-59.866 20.919-166.55z" fill="#B52E31"/>
4+
<path d="M126.107 32.274L47.714 206.693l29.285-.498 15.739-39.347h70.325l17.233 39.845 27.99.498-82.179-174.917zm.2 55.882l26.496 55.383h-49.806l23.31-55.383z" fill="#FFF"/>
5+
</svg>

src/templates/core/app/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as appComponentCssTemplate from './app.component.scss.txt'
66
import * as appComponentHtmlTemplate from './app.component.html.txt'
77
import * as homeComponentTemplate from './home.component.ts.txt'
88
import * as appIndex from './index.pug.txt'
9+
import * as favicon from './favicon.svg.txt'
910

1011
export {
1112
appModuleTemplate,
@@ -15,5 +16,6 @@ export {
1516
homeComponentTemplate,
1617
appComponentCssTemplate,
1718
appComponentHtmlTemplate,
18-
appIndex
19+
appIndex,
20+
favicon
1921
}

src/templates/core/assets/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import * as robots from './robots.txt'
2+
3+
export { robots }
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
User-agent: *
2+
Disallow:

src/utilities/read-config.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { map, catchError } from 'rxjs/operators'
1+
import { map, catchError, tap } from 'rxjs/operators'
22
import { readFile_ } from './rx-fs'
33
import * as favs from 'favicons'
4+
import { resolve } from 'path'
45

56
const configPath = 'fusing-angular.json'
67

@@ -45,8 +46,8 @@ export interface FusingAngularConfig {
4546
readonly generatedMetaTags?: ReadonlyArray<string>
4647
}
4748

48-
export default function readConfig_() {
49-
return readFile_(configPath).pipe(
49+
export default function readConfig_(basePath = '') {
50+
return readFile_(resolve(basePath, configPath)).pipe(
5051
map<Buffer, any>(file => JSON.parse(file.toString())),
5152
map<any, FusingAngularConfig>(obj => obj), // TODO: add validation handler here
5253
catchError(err => {

src/utilities/rx-favicon.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,20 @@ function callback(config: FaviconConfig) {
1313
}
1414
}
1515

16-
export function rxFavicons(config?: FaviconConfig) {
17-
const _config = {
18-
source:
19-
(config && resolve(config.source)) || resolve('src/app/favicon.svg'),
20-
configuration: {
21-
path: '/assets/favicons',
22-
...(config && config.config)
23-
}
24-
} as any
25-
26-
return bindCallback(favs as any, callback(_config))(
27-
_config.source,
28-
_config.configuration
29-
) as Observable<favs.FavIconResponse>
16+
export function rxFavicons(baseDir = '.') {
17+
return function(config?: FaviconConfig) {
18+
const _config = {
19+
source:
20+
(config && resolve(baseDir, config.source)) ||
21+
resolve(baseDir, 'src/app/favicon.svg'),
22+
configuration: {
23+
path: '/assets/favicons',
24+
...(config && config.config)
25+
}
26+
} as any
27+
return bindCallback(favs as any, callback(_config))(
28+
_config.source,
29+
_config.configuration
30+
) as Observable<favs.FavIconResponse>
31+
}
3032
}

0 commit comments

Comments
 (0)