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