UNPKG

2.79 kBJavaScriptView Raw
1const path = require('path')
2const fs = require('fs')
3const debug = require('debug')('spdt')
4
5const STORYBOOK_PORT = 9009
6
7const SPDT_DIR = './.spdt'
8
9const DEFAULT_CONFIG = {
10 pathToSrc: './src',
11 pathToStories: SPDT_DIR,
12 pathToTestIndex: SPDT_DIR,
13 testIndexName: 'test-index.generated.js',
14}
15
16const PACKAGE_SCRIPTS = {
17 'spdt:generate-story-index': './node_modules/.bin/spdt:generate-story-index',
18 'spdt:generate-test-index': './node_modules/.bin/spdt:generate-test-index',
19 'spdt:generate-tests': './node_modules/.bin/spdt:generate-tests',
20 'spdt:test': `jest --detectOpenHandles --config ${SPDT_DIR}/jest.spdt.config.js`,
21 'spdt:test:chrome': `HEADLESS=false jest --detectOpenHandles --config ${SPDT_DIR}/jest.spdt.config.js`,
22 'spdt:test:chrome:slow': `SLOWMO=1000 HEADLESS=false jest --detectOpenHandles --config ${SPDT_DIR}/jest.spdt.config.js`,
23 'spdt:storybook': `start-storybook -p ${STORYBOOK_PORT} -c ${SPDT_DIR}`,
24 spdt:
25 'npm run spdt:generate-story-index && npm run spdt:generate-test-index && npm run spdt:generate-tests && npm run spdt:storybook',
26}
27
28const PACKAGE_JSON_CONFIG_KEY = 'spdt'
29
30function findPackageJson(startDir) {
31 let dir = path.resolve(startDir || process.cwd())
32
33 do {
34 const pkgFile = path.join(dir, 'package.json')
35
36 if (!fs.existsSync(pkgFile) || !fs.statSync(pkgFile).isFile()) {
37 dir = path.join(dir, '..')
38 } else {
39 return pkgFile
40 }
41 } while (dir !== path.resolve(dir, '..'))
42 return null
43}
44
45function getConfig(configPath) {
46 // prettier-ignore
47 const packagePath = configPath === null
48 ? configPath
49 : configPath || findPackageJson()
50 try {
51 const packageJsonConfig = (packagePath && require(packagePath)) || {} // eslint-disable-line import/no-dynamic-require
52 const projectRoot = packagePath && { projectRoot: path.dirname(packagePath) }
53 return Object.assign({}, DEFAULT_CONFIG, packageJsonConfig[PACKAGE_JSON_CONFIG_KEY], projectRoot)
54 } catch (e) {
55 debug(`error: ${e.code} ${e.message}`)
56 }
57 return DEFAULT_CONFIG
58}
59
60function generateScriptsForPackageJson() {
61 const content = ` "scripts": {\n ...\n`
62 .concat(
63 Object.keys(PACKAGE_SCRIPTS)
64 .map((key) => ` "${key}": "${PACKAGE_SCRIPTS[key]}"`)
65 .join(',\n'),
66 )
67 .concat('\n }')
68 return content
69}
70
71function generateConfigForPackageJson() {
72 const content = ` "${PACKAGE_JSON_CONFIG_KEY}": {\n`
73 .concat(
74 Object.keys(DEFAULT_CONFIG)
75 .map((key) => ` "${key}": "${DEFAULT_CONFIG[key]}"`)
76 .join(',\n'),
77 )
78 .concat('\n }')
79 return content
80}
81
82module.exports = {
83 getConfig,
84 findPackageJson,
85 generateScriptsForPackageJson,
86 generateConfigForPackageJson,
87 PACKAGE_JSON_CONFIG_KEY,
88 DEFAULT_CONFIG,
89 PACKAGE_SCRIPTS,
90 STORYBOOK_PORT,
91 SPDT_DIR,
92}