Skip to content

Commit f3d010a

Browse files
committed
refactor: Move some things around
1 parent b74da75 commit f3d010a

File tree

17 files changed

+201
-210
lines changed

17 files changed

+201
-210
lines changed

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"name": "@fabschurt/microgen",
33
"author": "Fabien Schurter",
4-
"license": "MIT",
54
"type": "module",
6-
"main": "src/main.js",
5+
"license": "MIT",
6+
"main": "./src/main.js",
77
"imports": {
88
"#src/*": "./src/*.js",
9-
"#tests/helpers": "./tests/_helpers.js"
9+
"#tests/helpers": "./tests/.lib/helpers.js"
1010
},
1111
"bin": {
1212
"microgen": "./bin/cli.js"

src/adapter/pug.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const TEMPLATE_EXT = '.pug'
2+
3+
export const renderTemplate = (
4+
(renderPug, readFile) => (
5+
(templateBasePath, data) => (
6+
readFile(templateBasePath + TEMPLATE_EXT)
7+
.then((template) => renderPug(template, data))
8+
)
9+
)
10+
)

src/adapter/renderTemplate/pug.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/domain/assets.js

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,36 @@ const INDEX_TEMPLATE_BASENAME = 'index'
22
const INDEX_OUTPUT_NAME = 'index.html'
33
const ASSETS_DIR_NAME = 'assets'
44

5-
export function renderProjectIndex(
6-
withSrcDir,
7-
withBuildDir,
8-
writeFile,
9-
renderTemplate,
10-
data,
11-
) {
12-
return withSrcDir((prefixWithSrcDir) => {
13-
return withBuildDir(async (prefixWithBuildDir) => {
14-
return writeFile(
15-
prefixWithBuildDir(INDEX_OUTPUT_NAME),
16-
await renderTemplate(
17-
prefixWithSrcDir(INDEX_TEMPLATE_BASENAME),
18-
data,
19-
),
20-
)
21-
})
22-
})
23-
}
5+
export const renderProjectIndex = (
6+
(withSrcDir, withBuildDir, writeFile, renderTemplate) => (
7+
(data) => (
8+
withSrcDir((prefixWithSrcDir) => (
9+
withBuildDir(async (prefixWithBuildDir) => (
10+
writeFile(
11+
prefixWithBuildDir(INDEX_OUTPUT_NAME),
12+
await renderTemplate(
13+
prefixWithSrcDir(INDEX_TEMPLATE_BASENAME),
14+
data,
15+
),
16+
)
17+
))
18+
))
19+
)
20+
)
21+
)
2422

25-
export function copyProjectAssetsDir(
23+
export const copyProjectAssetsDir = (
2624
withSrcDir,
2725
withBuildDir,
2826
copyDir,
2927
ifPathExists,
30-
) {
31-
return withSrcDir((prefixWithSrcDir) => {
32-
return withBuildDir((prefixWithBuildDir) => {
33-
return ifPathExists(
28+
) => (
29+
withSrcDir((prefixWithSrcDir) => (
30+
withBuildDir((prefixWithBuildDir) => (
31+
ifPathExists(
3432
prefixWithSrcDir(ASSETS_DIR_NAME),
3533
(dirPath) => copyDir(dirPath, prefixWithBuildDir(ASSETS_DIR_NAME)),
3634
)
37-
})
38-
})
39-
}
35+
))
36+
))
37+
)

src/domain/data.js

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,29 @@
11
const DATA_FILE_PATH = 'data.json'
22
const ENV_VAR_PLACEHOLDER_PATTERN = /^%(.+)%$/
33

4-
function captureEnvVarName(value) {
4+
const captureEnvVarName = (value) => {
55
const match = value.match?.(ENV_VAR_PLACEHOLDER_PATTERN)
66

77
return match ? match[1] : null
88
}
99

10-
export function parseProjectData(parseJSONFile, withSrcDir) {
11-
return withSrcDir((prefixWithSrcDir) => parseJSONFile(prefixWithSrcDir(DATA_FILE_PATH)))
12-
}
10+
export const parseProjectData = (parseJSONFile, withSrcDir) => (
11+
withSrcDir((prefixWithSrcDir) => parseJSONFile(prefixWithSrcDir(DATA_FILE_PATH)))
12+
)
1313

14-
export function mergeDataWithEnvVars(
15-
deepCloneObject,
16-
transformObjectValues,
17-
data,
18-
envVars,
19-
) {
20-
return transformObjectValues(
21-
deepCloneObject(data),
22-
(obj, key) => {
23-
const envVarName = captureEnvVarName(obj[key])
14+
export const mergeDataWithEnvVars = (
15+
(deepCloneObject, transformObjectValues) => (
16+
(data, envVars) => (
17+
transformObjectValues(
18+
deepCloneObject(data),
19+
(obj, key) => {
20+
const envVarName = captureEnvVarName(obj[key])
2421

25-
if (envVarName) {
26-
obj[key] = envVars[envVarName] ?? null
27-
}
28-
}
22+
if (envVarName) {
23+
obj[key] = envVars[envVarName] ?? null
24+
}
25+
},
26+
)
27+
)
2928
)
30-
}
29+
)

src/domain/i18n.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,19 @@ const LANG_PATTERN = /^[a-z]{2}$/
55
const TRANSLATION_DIR_PATH = 'i18n'
66
const TRANSLATION_FILE_EXT = '.json'
77

8-
export function parseProjectTranslations(parseJSONFile, withSrcDir, lang) {
9-
assert.match(lang, LANG_PATTERN, `'${lang}' is not a valid language code.`)
8+
export const parseProjectTranslations = (
9+
(parseJSONFile, withSrcDir) => (
10+
(lang) => {
11+
assert.match(lang, LANG_PATTERN, `'${lang}' is not a valid language code.`)
1012

11-
return withSrcDir((prefixWithSrcDir) => {
12-
const translationFilePath = join(
13-
prefixWithSrcDir(TRANSLATION_DIR_PATH),
14-
lang + TRANSLATION_FILE_EXT,
15-
)
13+
return withSrcDir((prefixWithSrcDir) => {
14+
const translationFilePath = join(
15+
prefixWithSrcDir(TRANSLATION_DIR_PATH),
16+
lang + TRANSLATION_FILE_EXT,
17+
)
1618

17-
return parseJSONFile(translationFilePath)
18-
})
19-
}
19+
return parseJSONFile(translationFilePath)
20+
})
21+
}
22+
)
23+
)

src/main.js

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -18,46 +18,18 @@ import {
1818
mergeObjectList,
1919
accessObjectProp,
2020
} from '#src/utils/object'
21-
import renderTemplate from '#src/adapter/renderTemplate/pug'
21+
import { renderTemplate } from '#src/adapter/pug'
2222
import { format } from 'node:util'
2323
import { render as renderPug } from 'pug'
2424

25-
function parseData(parseJSONFile, withSrcDir, lang = null, envVars = []) {
26-
return Promise.all([
27-
parseProjectData(parseJSONFile, withSrcDir)
28-
.then((data) => mergeDataWithEnvVars(
29-
deepCloneObject,
30-
transformObjectValues,
31-
data,
32-
envVars,
33-
))
34-
,
35-
lang
36-
? (
37-
parseProjectTranslations(parseJSONFile, withSrcDir, lang)
38-
.then((dictionary) => ({
39-
_: {
40-
trans: (transKey, ...args) => (
41-
format(
42-
accessObjectProp(dictionary, transKey),
43-
...args,
44-
)
45-
)
46-
},
47-
}))
48-
) : {}
49-
,
50-
])
51-
.then(cleanUpObjectList)
52-
.then(mergeObjectList)
53-
}
54-
55-
export default async function main(
25+
export default (async (
5626
srcDirPath,
5727
buildDirPath,
5828
lang = null,
5929
envVars = {},
60-
) {
30+
) => {
31+
const _parseJSONFile = parseJSONFile(ifPathExists, readFile)
32+
6133
await ifPathExists(buildDirPath, rmDir)
6234

6335
const [withSrcDir, withBuildDir] = await Promise.all([
@@ -66,21 +38,45 @@ export default async function main(
6638
])
6739

6840
return (
69-
parseData(
70-
(filePath) => parseJSONFile(ifPathExists, readFile, filePath),
71-
withSrcDir,
72-
lang,
73-
envVars,
74-
)
41+
Promise.all([
42+
parseProjectData(_parseJSONFile, withSrcDir)
43+
.then(
44+
(data) => mergeDataWithEnvVars(
45+
deepCloneObject,
46+
transformObjectValues,
47+
)(
48+
data,
49+
envVars,
50+
)
51+
)
52+
,
53+
lang
54+
? (
55+
parseProjectTranslations(_parseJSONFile, withSrcDir)(lang)
56+
.then((dictionary) => ({
57+
_: {
58+
trans: (msgID, ...args) => (
59+
format(
60+
accessObjectProp(dictionary, msgID),
61+
...args,
62+
)
63+
)
64+
},
65+
}))
66+
)
67+
: {}
68+
,
69+
])
70+
.then(cleanUpObjectList)
71+
.then(mergeObjectList)
7572
.then((data) => (
7673
Promise.all([
7774
renderProjectIndex(
7875
withSrcDir,
7976
withBuildDir,
8077
writeFile,
81-
(templateBasePath, data) => renderTemplate(renderPug, readFile, templateBasePath, data),
82-
data,
83-
),
78+
renderTemplate(renderPug, readFile),
79+
)(data),
8480
copyProjectAssetsDir(
8581
withSrcDir,
8682
withBuildDir,
@@ -90,4 +86,4 @@ export default async function main(
9086
])
9187
))
9288
)
93-
}
89+
})

0 commit comments

Comments
 (0)