Skip to content

Commit 0b6c9ac

Browse files
committed
[CM2] Inject remaining settings deps into CM2
1 parent 739acb1 commit 0b6c9ac

File tree

7 files changed

+147
-82
lines changed

7 files changed

+147
-82
lines changed

src/compiler/contentModel2/index.js

+83-49
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
const _ = require('lodash')
2+
const { resolve } = require('path')
13
const { isTemplateFile } = require('./helpers')
24
const models = {
35
homepage: require('./models/homepage'),
@@ -90,61 +92,93 @@ const linkEntries = (contentModel) => {
9092
})
9193
}
9294

93-
const root = (fsTree) => {
94-
const contentModel = {
95-
homepage: defaultHomepage(),
96-
subpages: [],
97-
collections: [],
98-
assets: []
99-
}
100-
101-
fsTree.forEach(node => {
102-
if (isHomepage(node)) {
103-
contentModel.homepage = models.homepage(node)
104-
return
105-
}
106-
107-
if (isSubpage(node)) {
108-
return contentModel.subpages.push(
109-
models.subpage(node)
110-
)
95+
const defaultContentModelSettings = {
96+
permalinkPrefix: '/',
97+
out: resolve('.'),
98+
defaultCategoryName: 'Unclassified',
99+
assetsDirectory: 'assets',
100+
pagesDirectory: 'pages',
101+
homepageDirectory: 'homepage'
102+
}
103+
class ContentModel {
104+
constructor(contentModelSettings = defaultContentModelSettings) {
105+
this.settings = {
106+
...defaultContentModelSettings,
107+
...contentModelSettings
111108
}
112109

113-
if (isPagesDirectory(node)) {
114-
return node.children.forEach(childNode => {
115-
if (isSubpage(childNode)) {
116-
contentModel.subpages.push(
117-
models.subpage(childNode)
118-
)
119-
} else {
120-
contentModel.assets.push(
121-
models.asset(node)
122-
)
123-
}
124-
})
125-
}
110+
this.collectionSettings = _.pick(
111+
this.settings,
112+
['permalinkPrefix', 'out', 'defaultCategoryName']
113+
)
114+
this.subpageSettings = _.pick(
115+
this.settings,
116+
['permalinkPrefix', 'out', 'pagesDirectory']
117+
)
118+
this.homepageSettings = _.pick(
119+
this.settings,
120+
['permalinkPrefix', 'out', 'homepageDirectory']
121+
)
122+
this.assetSettings = _.pick(
123+
this.settings,
124+
['permalinkPrefix', 'out', 'assetsDirectory']
125+
)
126+
}
126127

127-
if (isACollectionDirectory(node)) {
128-
return contentModel.collections.push(
129-
models.collection(node)
130-
)
128+
create(fileSystemTree) {
129+
const contentModel = {
130+
homepage: defaultHomepage(),
131+
subpages: [],
132+
collections: [],
133+
assets: []
131134
}
132135

133-
if (isAssetsDirectory(node)) {
134-
return contentModel.assets.push(
135-
...node.children.map(models.asset)
136+
fileSystemTree.forEach(node => {
137+
if (isHomepage(node)) {
138+
contentModel.homepage = models.homepage(node, this.homepageSettings)
139+
return
140+
}
141+
142+
if (isSubpage(node)) {
143+
return contentModel.subpages.push(
144+
models.subpage(node, this.subpageSettings)
145+
)
146+
}
147+
148+
if (isPagesDirectory(node)) {
149+
return node.children.forEach(childNode => {
150+
if (isSubpage(childNode)) {
151+
contentModel.subpages.push(
152+
models.subpage(childNode, this.subpageSettings)
153+
)
154+
} else {
155+
contentModel.assets.push(
156+
models.asset(childNode, this.assetSettings)
157+
)
158+
}
159+
})
160+
}
161+
162+
if (isACollectionDirectory(node)) {
163+
return contentModel.collections.push(
164+
models.collection(node, this.collectionSettings)
165+
)
166+
}
167+
168+
if (isAssetsDirectory(node)) {
169+
return contentModel.assets.push(
170+
...node.children.map(n => models.asset(n, this.assetSettings))
171+
)
172+
}
173+
174+
contentModel.assets.push(
175+
models.asset(node, this.assetSettings)
136176
)
137-
}
138-
139-
contentModel.assets.push(
140-
models.asset(node)
141-
)
142-
})
177+
})
143178

144-
linkEntries(contentModel)
145-
return contentModel
179+
linkEntries(contentModel)
180+
return contentModel
181+
}
146182
}
147183

148-
module.exports = {
149-
create: root
150-
}
184+
module.exports = ContentModel

src/compiler/contentModel2/models/asset.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
const { join } = require('path')
2-
const Settings = require('../../../settings')
3-
4-
function asset(node) {
5-
const settings = Settings.getSettings()
1+
const { join, resolve } = require('path')
62

3+
const defaultSettings = {
4+
permalinkPrefix: '/',
5+
out: resolve('.'),
6+
assetsDirectory: 'assets'
7+
}
8+
function asset(node, settings = defaultSettings) {
79
const permalink = (
810
settings.permalinkPrefix +
911
[settings.assetsDirectory, node.name].join('/')

src/compiler/contentModel2/models/collection/index.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
const { join } = require('path')
1+
const { join, resolve } = require('path')
22
const _ = require('lodash')
33
const frontMatter = require('front-matter')
44
const makeSlug = require('slug')
5-
const Settings = require('../../../../settings')
65
const { isTemplateFile, Markdown } = require('../../helpers')
76
const models = {
87
attachment: require('../attachment'),
@@ -33,9 +32,12 @@ function parseContent(node, content) {
3332
return Markdown.parse(content)
3433
}
3534

36-
function collection(node) {
37-
const settings = Settings.getSettings()
38-
35+
const defaultSettings = {
36+
permalinkPrefix: '/',
37+
out: resolve('.'),
38+
defaultCategoryName: 'Unclassified'
39+
}
40+
function collection(node, settings = defaultSettings) {
3941
function collectPostTags(post) {
4042
post.tags.forEach(postTag => {
4143
let collectionTag = tree.tags.find(t => t.name === postTag.name)

src/compiler/contentModel2/models/homepage.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
const { join } = require('path')
2-
const Settings = require('../../../settings')
1+
const { join, resolve } = require('path')
32
const models = {
43
_baseEntry: require('./_baseEntry')
54
}
65

7-
function homepage(node) {
8-
const settings = Settings.getSettings()
9-
6+
const defaultSettings = {
7+
permalinkPrefix: '/',
8+
out: resolve('.'),
9+
homepageDirectory: 'homepage'
10+
}
11+
function homepage(node, settings = defaultSettings) {
1012
const baseEntryProps = models._baseEntry(node, ['index', 'homepage', 'home'])
1113

1214
const pageContext = {

src/compiler/contentModel2/models/subpage.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
const { join } = require('path')
2-
const Settings = require('../../../settings')
1+
const { join, resolve } = require('path')
32
const models = {
43
_baseEntry: require('./_baseEntry')
54
}
65

7-
function subpage(node) {
8-
const settings = Settings.getSettings()
9-
6+
const defaultSettings = {
7+
permalinkPrefix: '/',
8+
out: resolve('.'),
9+
pagesDirectory: 'pages'
10+
}
11+
function subpage(node, settings = defaultSettings) {
1012
const baseEntryProps = models._baseEntry(node, ['index', 'page'])
1113

1214
const permalink = (

src/routines.js

+28-7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const _ = require('lodash')
12
const Debug = require('./debug')
23
const Settings = require('./settings')
34
const Decorations = require('./decorations')
@@ -68,21 +69,41 @@ const run = async ({ mode, rootDirectory, refreshTheme, finishCallback }) => {
6869
await Dictionary.init()
6970
await SiteDirectory.create()
7071
await CNAME.create()
72+
7173
const logger = {
7274
debug: Debug.debugLog
7375
}
7476
const { fileSystemTree, contentModel } = await new Compiler({
75-
fileSystemParser: new FileSystemParser({
76-
rootDirectory: settings.rootDirectory,
77-
contentDirectory: settings.contentDirectory,
78-
IGNORE_PATHS_REG_EXP: settings.IGNORE_PATHS_REG_EXP
79-
}, logger),
80-
contentModel: settings.compilerVersion === 2 ? ContentModel2 : ContentModel1,
81-
renderer: settings.compilerVersion === 2 ? Rendering2 : Rendering1
77+
fileSystemParser: new FileSystemParser(
78+
_.pick(settings, [
79+
'rootDirectory',
80+
'contentDirectory',
81+
'IGNORE_PATHS_REG_EXP'
82+
]),
83+
logger
84+
),
85+
86+
contentModel: settings.compilerVersion === 2 ?
87+
new ContentModel2(
88+
_.pick(settings, [
89+
'permalinkPrefix',
90+
'out',
91+
'defaultCategoryName',
92+
'assetsDirectory',
93+
'pagesDirectory',
94+
'homepageDirectory'
95+
])
96+
) :
97+
ContentModel1,
98+
99+
renderer: settings.compilerVersion === 2 ?
100+
Rendering2 :
101+
Rendering1
82102
}).compile()
83103
if (settings.compilerVersion === 1) {
84104
await Assets.copyAssets()
85105
}
106+
86107
await finishCallback({
87108
settings,
88109
fileSystemTree,

src/tests/compiler/contentModel2.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
const os = require('os')
22
const test = require('tape')
3-
const settings = require('../../settings')
4-
const contentModel2 = require('../../compiler/contentModel2')
3+
const ContentModel2 = require('../../compiler/contentModel2')
54

65
const FSTree = os.platform() === 'win32' ?
76
require('../fixtures/contentModel2FSTreeWin32.json') :
87
require('../fixtures/contentModel2FSTree.json')
98

109
test('compiler/contentModel2', t => {
1110
t.test('exits 0', async () => {
12-
await settings.init({
13-
mode: 'build',
14-
rootDirectory: '.'
11+
const contentModel2 = new ContentModel2({
12+
permalinkPrefix: '/my/crazy/url/schemes/',
13+
out: '/somewhere/out/there/there/is/gotta/be/a',
14+
defaultCategoryName: 'Unclassified',
15+
assetsDirectory: 'azkaban',
16+
pagesDirectory: 'stufflar',
17+
homepageDirectory: 'prelude'
1518
})
16-
1719
console.dir(
1820
contentModel2.create(FSTree).collections[0],
1921
{ depth: null, colors: true }

0 commit comments

Comments
 (0)