UNPKG

7.42 kBJavaScriptView Raw
1//-------------------------------------
2//-- Paths
3//-------------------------------------
4'use strict';
5
6const findUp = require('find-up');
7const path = require('path');
8const slash = require('slash');
9const fss = require('@absolunet/fss');
10
11
12const VENDORS = 'vendor';
13const CACHE = '.nwayo-cache';
14const NOLINT = 'vendor';
15const MAIN_CONFIG = 'nwayo.yaml';
16const MAIN_CONFIG_PATH = findUp.sync(MAIN_CONFIG, { cwd: process.cwd() });
17
18const ROOT = (() => {
19 const prjConfig = fss.readYaml(MAIN_CONFIG_PATH);
20
21 return slash(path.normalize(`${path.dirname(MAIN_CONFIG_PATH)}/${prjConfig.root}`)).replace(/\/$/u, '');
22})();
23
24
25
26
27
28
29const pattern = {};
30pattern.anytree = '**';
31pattern.babel = `^\\/?##includes##(\\${CACHE}|${VENDORS}|components\\/.*\\/scripts\\/${NOLINT}\\/)`; // https://regex101.com/r/kIKuJW/1
32
33const extension = {};
34extension.bundles = 'yaml';
35extension.fonts = '{woff,woff2}';
36extension.images = '{gif,jpg,png,svg}';
37extension.scripts = 'js';
38extension.styles = 'scss';
39extension.stylesBuild = 'css';
40extension.templates = 'jshtml';
41
42const build = {};
43build.fonts = 'fonts';
44build.icons = 'icons';
45build.images = 'images';
46build.raw = 'raw';
47build.scripts = 'scripts';
48build.styles = 'styles';
49
50const folder = {};
51folder.cache = CACHE;
52folder.cacheInline = `${folder.cache}/inline-images`;
53folder.cacheScripts = `${folder.cache}/${build.scripts}`;
54folder.cacheStyles = `${folder.cache}/${build.styles}`;
55folder.vendors = VENDORS;
56folder.vendorsDependencies = `${folder.vendors}/node_modules`;
57folder.bundles = 'bundles';
58folder.components = 'components';
59folder.assets = 'assets';
60folder.fonts = 'fonts';
61folder.icons = 'icons';
62folder.images = 'images';
63folder.inlineImages = 'inline-images';
64folder.raw = 'raw';
65folder.extensions = 'extensions';
66folder.scripts = 'scripts';
67folder.styles = 'styles';
68folder.templates = 'templates';
69folder.misc = 'misc';
70folder.workflowDependencies = 'node_modules';
71folder.nolint = NOLINT;
72
73const filename = {};
74filename.konstan = 'konstan';
75filename.konstanLocal = `${filename.konstan}.json`;
76filename.konstanScripts = `${filename.konstan}.${extension.scripts}`;
77filename.konstanStyles = `${filename.konstan}.json`;
78filename.lodash = `lodash`;
79filename.modernizr = `modernizr`;
80filename.polyfill = `polyfill`;
81filename.mainConfig = MAIN_CONFIG;
82filename.iconsFavicon = `favicon.png`;
83filename.iconsTouch = `touch.png`;
84filename.iconsIcon = `icon.png`;
85filename.iconsLarge = `large.png`;
86filename.iconsTile = `tile.png`;
87
88const directory = {};
89directory.root = ROOT;
90directory.cache = `${directory.root}/${folder.cache}`;
91directory.cacheInline = `${directory.root}/${folder.cacheInline}`;
92directory.cacheScripts = `${directory.root}/${folder.cacheScripts}`;
93directory.cacheStyles = `${directory.root}/${folder.cacheStyles}`;
94directory.bundles = `${directory.root}/${folder.bundles}`;
95directory.components = `${directory.root}/${folder.components}`;
96directory.assets = `${directory.components}/${pattern.anytree}/${folder.assets}`;
97directory.fonts = `${directory.assets}/${folder.fonts}`;
98directory.icons = `${directory.assets}/${folder.icons}`;
99directory.images = `${directory.assets}/${folder.images}`;
100directory.inline = `${directory.assets}/${folder.inlineImages}`;
101directory.raw = `${directory.assets}/${folder.raw}`;
102directory.extensions = `${directory.components}/${pattern.anytree}/${folder.extensions}`;
103directory.scripts = `${directory.components}/${pattern.anytree}/${folder.scripts}`;
104directory.styles = `${directory.components}/${pattern.anytree}/${folder.styles}`;
105directory.templates = `${directory.components}/${pattern.anytree}/${folder.templates}`;
106directory.vendors = `${directory.root}/${folder.vendors}`;
107directory.vendorsDependencies = `${directory.root}/${folder.vendorsDependencies}`;
108directory.misc = `${directory.root}/${folder.misc}`;
109directory.resources = `${directory.misc}/resources`;
110directory.stubs = `${directory.misc}/stubs`;
111
112const files = {};
113files.bundles = `${directory.bundles}/${pattern.anytree}/*.${extension.bundles}`;
114files.fonts = `${directory.fonts}/${pattern.anytree}/*.${extension.fonts}`;
115files.iconsFavicon = `${directory.icons}/${filename.iconsFavicon}`;
116files.iconsTouch = `${directory.icons}/${filename.iconsTouch}`;
117files.iconsIcon = `${directory.icons}/${filename.iconsIcon}`;
118files.iconsLarge = `${directory.icons}/${filename.iconsLarge}`;
119files.iconsTile = `${directory.icons}/${filename.iconsTile}`;
120files.images = `${directory.images}/${pattern.anytree}/*.${extension.images}`;
121files.images2x = `${directory.images}/${pattern.anytree}/*@2x.${extension.images}`;
122files.inline = `${directory.inline}/${pattern.anytree}/*.${extension.images}`;
123files.raw = `${directory.raw}/${pattern.anytree}/*`;
124files.scripts = `${directory.scripts}/${pattern.anytree}/*.${extension.scripts}`;
125files.scriptsLint = [files.scripts, `!${directory.scripts}/${NOLINT}/${pattern.anytree}/*`];
126files.styles = `${directory.styles}/${pattern.anytree}/*.${extension.styles}`;
127files.stylesLint = [files.styles, `!${directory.styles}/${NOLINT}/${pattern.anytree}/*`];
128files.templates = `${directory.templates}/${pattern.anytree}/*.${extension.templates}`;
129files.vendorsScripts = `${directory.vendorsDependencies}/${pattern.anytree}/*.${extension.scripts}`;
130
131const workflow = {};
132workflow.root = slash(path.normalize(`${__dirname}/..`));
133workflow.cliTasks = `${workflow.root}/cli`;
134workflow.tasks = `${workflow.root}/tasks`;
135workflow.ressources = `${workflow.root}/ressources`;
136workflow.matrix = `${workflow.ressources}/doctor-matrix`;
137
138const config = {};
139config.main = MAIN_CONFIG_PATH;
140config.vendors = `${directory.vendors}/package.json`;
141config.konstan = `${directory.root}/konstan.yaml`;
142config.projectPackage = `${directory.root}/package.json`;
143config.workflowPackage = `${workflow.root}/package.json`;
144config.sassFunctions = `${workflow.ressources}/dart-sass-functions.js`;
145config.stylelint = `${directory.root}/.stylelintrc.yaml`;
146config.modernizr = `${directory.root}/modernizr.yaml`;
147config.lodash = `${directory.root}/lodash.yaml`;
148config.lodashBin = slash(require.resolve('lodash-cli'));
149config.babelPreset = slash(require.resolve('@babel/preset-env'));
150config.regeneratorRuntime = slash(require.resolve('regenerator-runtime'));
151
152
153
154
155
156
157class Paths {
158
159 get pattern() { return pattern; }
160 get extension() { return extension; }
161 get build() { return build; }
162 get folder() { return folder; }
163 get directory() { return directory; }
164 get files() { return files; }
165 get filename() { return filename; }
166 get workflow() { return workflow; }
167 get config() { return config; }
168
169}
170
171
172module.exports = new Paths();