chayns-toolkit 3.0.6 → 3.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -88
- package/lib/cli.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,88 +1,88 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
<a href="https://tobitsoftware.github.io/chayns-toolkit/" target="_blank">
|
|
3
|
-
<h1 align="center">
|
|
4
|
-
<img src="https://raw.githubusercontent.com/TobitSoftware/chayns-toolkit/HEAD/assets/logo.png" width="500px" alt="chayns-toolkit" />
|
|
5
|
-
</h1>
|
|
6
|
-
</a>
|
|
7
|
-
<p align="center">A zero-config toolchain for developing chayns® apps.</p>
|
|
8
|
-
<p align="center">
|
|
9
|
-
<a href="https://github.com/TobitSoftware/chayns-toolkit/blob/master/LICENSE" target="_blank">
|
|
10
|
-
<img src="https://img.shields.io/github/license/TobitSoftware/chayns-toolkit?color=%23A855F7&labelColor=%2327272A&style=for-the-badge" alt="" />
|
|
11
|
-
</a>
|
|
12
|
-
<a href="https://www.npmjs.com/package/chayns-toolkit" target="_blank">
|
|
13
|
-
<img src="https://img.shields.io/npm/v/chayns-toolkit?color=%236366F1&labelColor=%2327272A&style=for-the-badge" alt="" />
|
|
14
|
-
</a>
|
|
15
|
-
<a href="https://github.com/TobitSoftware/chayns-toolkit/branches" target="_blank">
|
|
16
|
-
<img src="https://img.shields.io/github/last-commit/TobitSoftware/chayns-toolkit?color=%2310B981&labelColor=%2327272A&style=for-the-badge" alt="" />
|
|
17
|
-
</a>
|
|
18
|
-
</p>
|
|
19
|
-
</div>
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
**chayns-toolkit** contains pre-configured tools for the development, publishing and quality
|
|
24
|
-
assurance of your app. It was created to simplify the development experience when working with
|
|
25
|
-
[React](https://reactjs.org).
|
|
26
|
-
|
|
27
|
-
> This toolchain is specialized in developing apps and plugins for the
|
|
28
|
-
> [chayns®](https://chayns.org/) platform. If you want to develop a general purpose web app, take a
|
|
29
|
-
> look at [Next.js](https://nextjs.org/). <br>
|
|
30
|
-
|
|
31
|
-
<br>
|
|
32
|
-
|
|
33
|
-
## ❯ Getting Started
|
|
34
|
-
|
|
35
|
-
For the easiest way to start a new chayns® project with chayns-toolkit check out
|
|
36
|
-
[`create-chayns-app`](https://github.com/TobitSoftware/create-chayns-app).
|
|
37
|
-
|
|
38
|
-
<br>
|
|
39
|
-
|
|
40
|
-
## ❯ Documentation
|
|
41
|
-
|
|
42
|
-
Visit
|
|
43
|
-
[https://tobitsoftware.github.io/chayns-toolkit/](https://tobitsoftware.github.io/chayns-toolkit/)
|
|
44
|
-
to view the full documentation.
|
|
45
|
-
|
|
46
|
-
<br>
|
|
47
|
-
|
|
48
|
-
## ❯ Migration v2 to v3
|
|
49
|
-
|
|
50
|
-
The chayns-toolkit moved RsBuild instead of webpack in this version. This means customizing the
|
|
51
|
-
config has changed significantly.
|
|
52
|
-
|
|
53
|
-
- **output.apiVersion** has been removed
|
|
54
|
-
- **remoteEntry.js** has been renamed to **v2.remoteEntry.js**
|
|
55
|
-
- **output.serverSideRendering** has been added. This creates a build to use for modules in SSR.
|
|
56
|
-
- Creates two subdirectories in build directory for client- and server-build.
|
|
57
|
-
- dotenv-Files will be automatically loaded now depending on the current NODE_ENV/BUILD_ENV
|
|
58
|
-
- Only variables which start with PUBLIC\_ are passed to the javascript context. Other
|
|
59
|
-
variables are only available in the toolkit.config.js to customize the config
|
|
60
|
-
- Not defined environment-variables are not replaced by RsBuild which can cause errors (webpack
|
|
61
|
-
replaced them with empty string)
|
|
62
|
-
- **output.entryPoints** has been added and changes how to configure the entry points of the
|
|
63
|
-
application
|
|
64
|
-
[https://tobitsoftware.github.io/chayns-toolkit/docs/configuration/output](https://tobitsoftware.github.io/chayns-toolkit/docs/configuration/output)
|
|
65
|
-
|
|
66
|
-
## ❯ Contributing
|
|
67
|
-
|
|
68
|
-
Please see our
|
|
69
|
-
[contributing document](https://tobitsoftware.github.io/chayns-toolkit/docs/contributing).
|
|
70
|
-
|
|
71
|
-
<br>
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
<p align="center">
|
|
76
|
-
<sub>
|
|
77
|
-
Project created by Leo Driesch at Tobit.Software.
|
|
78
|
-
</sub>
|
|
79
|
-
</p>
|
|
80
|
-
<p align="center">
|
|
81
|
-
<a href="https://labs.tobit.com/">
|
|
82
|
-
<img alt="Tobit.Software homepage" src="./assets/icons/globe.svg">
|
|
83
|
-
</a>
|
|
84
|
-
|
|
85
|
-
<a href="https://github.com/TobitSoftware">
|
|
86
|
-
<img alt="Tobit.Software on GitHub" src="./assets/icons/github.svg">
|
|
87
|
-
</a>
|
|
88
|
-
</p>
|
|
1
|
+
<div align="center">
|
|
2
|
+
<a href="https://tobitsoftware.github.io/chayns-toolkit/" target="_blank">
|
|
3
|
+
<h1 align="center">
|
|
4
|
+
<img src="https://raw.githubusercontent.com/TobitSoftware/chayns-toolkit/HEAD/assets/logo.png" width="500px" alt="chayns-toolkit" />
|
|
5
|
+
</h1>
|
|
6
|
+
</a>
|
|
7
|
+
<p align="center">A zero-config toolchain for developing chayns® apps.</p>
|
|
8
|
+
<p align="center">
|
|
9
|
+
<a href="https://github.com/TobitSoftware/chayns-toolkit/blob/master/LICENSE" target="_blank">
|
|
10
|
+
<img src="https://img.shields.io/github/license/TobitSoftware/chayns-toolkit?color=%23A855F7&labelColor=%2327272A&style=for-the-badge" alt="" />
|
|
11
|
+
</a>
|
|
12
|
+
<a href="https://www.npmjs.com/package/chayns-toolkit" target="_blank">
|
|
13
|
+
<img src="https://img.shields.io/npm/v/chayns-toolkit?color=%236366F1&labelColor=%2327272A&style=for-the-badge" alt="" />
|
|
14
|
+
</a>
|
|
15
|
+
<a href="https://github.com/TobitSoftware/chayns-toolkit/branches" target="_blank">
|
|
16
|
+
<img src="https://img.shields.io/github/last-commit/TobitSoftware/chayns-toolkit?color=%2310B981&labelColor=%2327272A&style=for-the-badge" alt="" />
|
|
17
|
+
</a>
|
|
18
|
+
</p>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
**chayns-toolkit** contains pre-configured tools for the development, publishing and quality
|
|
24
|
+
assurance of your app. It was created to simplify the development experience when working with
|
|
25
|
+
[React](https://reactjs.org).
|
|
26
|
+
|
|
27
|
+
> This toolchain is specialized in developing apps and plugins for the
|
|
28
|
+
> [chayns®](https://chayns.org/) platform. If you want to develop a general purpose web app, take a
|
|
29
|
+
> look at [Next.js](https://nextjs.org/). <br>
|
|
30
|
+
|
|
31
|
+
<br>
|
|
32
|
+
|
|
33
|
+
## ❯ Getting Started
|
|
34
|
+
|
|
35
|
+
For the easiest way to start a new chayns® project with chayns-toolkit check out
|
|
36
|
+
[`create-chayns-app`](https://github.com/TobitSoftware/create-chayns-app).
|
|
37
|
+
|
|
38
|
+
<br>
|
|
39
|
+
|
|
40
|
+
## ❯ Documentation
|
|
41
|
+
|
|
42
|
+
Visit
|
|
43
|
+
[https://tobitsoftware.github.io/chayns-toolkit/](https://tobitsoftware.github.io/chayns-toolkit/)
|
|
44
|
+
to view the full documentation.
|
|
45
|
+
|
|
46
|
+
<br>
|
|
47
|
+
|
|
48
|
+
## ❯ Migration v2 to v3
|
|
49
|
+
|
|
50
|
+
The chayns-toolkit moved RsBuild instead of webpack in this version. This means customizing the
|
|
51
|
+
config has changed significantly.
|
|
52
|
+
|
|
53
|
+
- **output.apiVersion** has been removed
|
|
54
|
+
- **remoteEntry.js** has been renamed to **v2.remoteEntry.js**
|
|
55
|
+
- **output.serverSideRendering** has been added. This creates a build to use for modules in SSR.
|
|
56
|
+
- Creates two subdirectories in build directory for client- and server-build.
|
|
57
|
+
- dotenv-Files will be automatically loaded now depending on the current NODE_ENV/BUILD_ENV
|
|
58
|
+
- Only variables which start with PUBLIC\_ are passed to the javascript context. Other
|
|
59
|
+
variables are only available in the toolkit.config.js to customize the config
|
|
60
|
+
- Not defined environment-variables are not replaced by RsBuild which can cause errors (webpack
|
|
61
|
+
replaced them with empty string)
|
|
62
|
+
- **output.entryPoints** has been added and changes how to configure the entry points of the
|
|
63
|
+
application
|
|
64
|
+
[https://tobitsoftware.github.io/chayns-toolkit/docs/configuration/output](https://tobitsoftware.github.io/chayns-toolkit/docs/configuration/output)
|
|
65
|
+
|
|
66
|
+
## ❯ Contributing
|
|
67
|
+
|
|
68
|
+
Please see our
|
|
69
|
+
[contributing document](https://tobitsoftware.github.io/chayns-toolkit/docs/contributing).
|
|
70
|
+
|
|
71
|
+
<br>
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
<p align="center">
|
|
76
|
+
<sub>
|
|
77
|
+
Project created by Leo Driesch at Tobit.Software.
|
|
78
|
+
</sub>
|
|
79
|
+
</p>
|
|
80
|
+
<p align="center">
|
|
81
|
+
<a href="https://labs.tobit.com/">
|
|
82
|
+
<img alt="Tobit.Software homepage" src="./assets/icons/globe.svg">
|
|
83
|
+
</a>
|
|
84
|
+
|
|
85
|
+
<a href="https://github.com/TobitSoftware">
|
|
86
|
+
<img alt="Tobit.Software on GitHub" src="./assets/icons/github.svg">
|
|
87
|
+
</a>
|
|
88
|
+
</p>
|
package/lib/cli.js
CHANGED
|
@@ -29,10 +29,10 @@ attempted value: ${s}
|
|
|
29
29
|
`),F.blank(o.message),F.exit(1);return}let[r,n]=await Promise.all([bm(),ym()]),i=!0;for(let s of t)if(i){for(let o of s)await o({config:e,packageJson:r,packageManager:n})&&(i=!1);t.indexOf(s)!==t.length-1&&F.blank("")}}var gr=z(require("dotenv"));function _r(t=!1){t?(process.env.BABEL_ENV="development",process.env.NODE_ENV="development"):(process.env.BABEL_ENV="production",process.env.NODE_ENV="production");let e=t?"development":process.env.BUILD_ENV||"production";gr.default.config({path:`.env.${e}.local`}),gr.default.config({path:".env.local"}),gr.default.config({path:`.env.${e}`}),gr.default.config({path:".env"})}var xm=require("util"),{isRegExp:vm}=xm.types;function Em(t,e){let r=Object.keys({...t.dependencies,...t.devDependencies});return Array.isArray(e)?r.filter(n=>e.some(i=>vm(i)?i.test(n):i===n)):vm(e)?r.some(n=>e.test(n)):r.includes(e)}var Am=z(require("fs")),wm=z(require("path")),Om=require("util"),HP=(0,Om.promisify)(Am.readFile);async function Es(t){let e=wm.resolve("package.json"),r=await HP(e,{encoding:"utf-8"}),n=JSON.parse(r),i=Object.keys({...n.dependencies,...n.devDependencies});return Array.isArray(t)?i.filter(s=>t.some(o=>Sm(o)?o.test(s):o===s)):Sm(t)?i.some(s=>t.test(s)):i.includes(t)}function Sm(t){return Object.prototype.toString.call(t)==="[object RegExp]"}async function Cm(t){let e=await Es("@types/react"),r=await Es("@types/react-dom"),n=[!e&&"@types/react",!r&&"@types/react-dom"].filter(Boolean);if(n.length>0){let i=n.map(s=>L.code(s)).join(" and ");F.hint(`You should install the ${i} package${n.length>0?"s":""} to get TypeScript support for React.
|
|
30
30
|
`),t!==void 0&&F.blank(`Install them by running ${Xe.install(t,n,!0)}`)}}async function Pm(){if(!G.hasFile("tsconfig.json"))return!0;let r=(await G.readFile("tsconfig.json")??"").replace(/\s/gi,"");return r===""||r==="{}"}var h0=z(p0());async function d0(){return G.hasFile("tsconfig.json")?!0:(await(0,h0.default)("src/**/*.{ts,tsx}")).length>0}async function In({packageJson:t,packageManager:e}){let r=Em(t,"typescript"),n=await Pm();return r?(await Cm(e),n&&await m0(),!1):await d0()?(n&&await m0(),F.error(`To use TypeScript, you have to install the ${L.code`typescript`} package by running ${Xe.install(e,"typescript",!0)}.`),!0):!1}async function m0(){await G.writeFile("tsconfig.json",JSON.stringify(LF,void 0,4)),F.info(`Seems like you want to use TypeScript. A ${L.path`tsconfig.json`} file has been set up for you.`)}var LF={compilerOptions:{allowJs:!0,allowSyntheticDefaultImports:!0,checkJs:!1,esModuleInterop:!0,experimentalDecorators:!0,isolatedModules:!0,jsx:"react",lib:["DOM","ESNext"],noEmit:!0,skipLibCheck:!0,strict:!0}};var ia=z(require("fs"));function Nn({config:t}){let{cert:e,key:r}=t.development,n=!1;return r&&!e||!r&&e?(F.error(`You have specified the ${L.code(r?"key":"cert")} field in your ${L.path`chayns-toolkit.json`} file, but not ${L.code(r?"cert":"key")}. You need to specify paths in both fields for SSL to work.`),n=!0):(r&&(ia.existsSync(r)||(F.error(`No file exists at the ${L.code`key`} path specified in ${L.path`chayns-toolkit.json`}.`),n=!0)),e&&(ia.existsSync(e)||(F.error(`No file exists at the ${L.code`cert`} path specified in ${L.path`chayns-toolkit.json`}.`),n=!0))),n}var sa=!1;function oa({devtools:t}){return async({config:e,packageJson:r,packageManager:n})=>{let{port:i,ports:s,host:o,cert:a,key:u}=e.development,c=e.output.serverSideRendering==="all"?["server","client"]:[null];for(let f of c){let p=await Tr({analyze:!1,mode:"development",outputFilename:e.output.filename,singleBundle:e.output.singleBundle,serverSideRendering:e.output.serverSideRendering!==!1&&e.output.serverSideRendering!=="build-only",packageJson:r,injectDevtoolsScript:t,prefixCss:e.output.prefixCss,cssVersion:e.output.cssVersion,exposeModules:e.output.exposeModules,entryPoints:e.output.entryPoints,target:f});if(t&&("react-devtools"in(r.dependencies||{})?(F.error(`You added ${L.code`react-devtools`} as a regular dependency.`),F.blank(`Install it under ${L.code`devDependencies`} by running ${Xe.move(n,"react-devtools","dev")}.
|
|
31
31
|
`),process.exit(1)):"react-devtools"in(r.devDependencies||{})||(F.error(`You need to install the ${L.code`react-devtools`} package to use the ${L.command`--devtools`} option.`),F.blank(`Run ${Xe.move(n,"react-devtools","dev")} to add it as a ${L.code`devDependency`}.
|
|
32
|
-
`),process.exit(1)),(0,g0.exec)(`node ${_0.join(require.resolve("react-devtools"),"../bin.js")}`)),p.server||={},p.server.host=o,p.server.port=i,s&&(f==="server"?p.server.port=s.server:p.server.port=s.client),p.server.headers={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"X-Requested-With, content-type, Authorization"},a&&u&&(p.server.https={cert:Er.default.readFileSync(a),key:Er.default.readFileSync(u)}),typeof e.webpack=="function"){let x=e.webpack;p=fn({config:p,dev:!0,modifier:x,target:
|
|
32
|
+
`),process.exit(1)),(0,g0.exec)(`node ${_0.join(require.resolve("react-devtools"),"../bin.js")}`)),p.server||={},p.server.host=o,p.server.port=i,e.output.serverSideRendering==="all"&&s&&(f==="server"?p.server.port=s.server:p.server.port=s.client),p.server.headers={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"X-Requested-With, content-type, Authorization"},a&&u&&(p.server.https={cert:Er.default.readFileSync(a),key:Er.default.readFileSync(u)}),typeof e.webpack=="function"){let x=e.webpack;p=fn({config:p,dev:!0,modifier:x,target:f})}let h=await(0,y0.createRsbuild)({rsbuildConfig:p}),{server:b,urls:d}=await h.startDevServer();d.forEach(x=>{console.log("Project is running at: ",x)});let y=async()=>{sa||(sa=!0,console.log("Start restarting dev server"),await b.close(),_r(!0),sa=!1,await Qe([In,Nn],[oa({devtools:t})]),console.log("Dev Server restarted"),(0,b0.unwatchFile)(G.resolvePath("./toolkit.config.js"),y))};(0,Er.watchFile)(G.resolvePath("./toolkit.config.js"),y)}}}var aa=require("eslint");async function v0(){F.info("Linting your code...");try{let t=new aa.ESLint({fix:!0,extensions:["js","jsx","ts","tsx"]}),e=await t.lintFiles(["./src"]);await aa.ESLint.outputFixes(e);let r=e.reduce((s,o)=>s+o.warningCount,0),n=e.reduce((s,o)=>s+o.errorCount,0),i="";(r||n)&&(i=(await t.loadFormatter("pretty")).format(e)),n+r===0?F.info(`No linting errors were found.
|
|
33
33
|
`):(F.warn(`${n} errors and ${r} were found:
|
|
34
34
|
`),console.log(i))}catch(t){F.error(`An error occured while linting your project:
|
|
35
|
-
`),F.blank(t.message)}}var x0=z(require("fs")),E0=require("jest"),ua=z(require("path"));function S0({watch:t,setupFile:e}){return async({config:r,packageJson:n})=>{let i={transform:{"\\.[jt]sx?$":["babel-jest",{presets:["@babel/preset-react","@babel/preset-env"]}]},moduleFileExtensions:["ts","tsx","js","jsx"],moduleNameMapper:{"^.+\\.(css|less|scss)$":"babel-jest","\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$":ua.default.resolve(__dirname,"assets","file-mock.js")},testPathIgnorePatterns:["^.+\\.eslintrc\\.js$"],setupFilesAfterEnv:[ua.default.resolve(__dirname,"assets","react-testing-library.setup.js")],testEnvironment:"jsdom"};if(typeof r.jest=="function"){let o=r.jest;i=o(i)}if(e){let o=G.resolvePath(e),a=`The specified setup file for the tests (${o}) could not be found.`;try{x0.default.existsSync(o)?i.setupFilesAfterEnv&&i.setupFilesAfterEnv.push(o):F.warn(a)}catch{F.warn(a)}}let s=[];s.push("--config",JSON.stringify(i)),t&&s.push("--watch"),await(0,E0.run)(s)}}var la=z(ln()),A0=z(require("http")),w0=z(require("https")),O0=z(require("serve-handler")),ca=z(require("fs"));function C0(){return async({config:t})=>{let{host:e,port:r,cert:n,key:i}=t.development,s,o;n&&(s=ca.default.readFileSync(n)),i&&(o=ca.default.readFileSync(i));let a=!!(s&&o),u=async(f,p)=>{let h=Date.now();await(0,O0.default)(f,p,{public:t.output.path??"build"}),console.log(f.method,f.url),console.log("Returned",(p.statusCode===200?la.default.green:la.default.red)(p.statusCode),"in",Date.now()-h,"ms")};(a?w0.default.createServer({key:o,cert:s},u):A0.default.createServer(u)).listen(r,()=>{let f=`http${a?"s":""}://${e}:${r}`;console.log(`Running at ${f}`)}),await Promise.resolve()}}var nt=new P0.Command;nt.version("3.0.
|
|
35
|
+
`),F.blank(t.message)}}var x0=z(require("fs")),E0=require("jest"),ua=z(require("path"));function S0({watch:t,setupFile:e}){return async({config:r,packageJson:n})=>{let i={transform:{"\\.[jt]sx?$":["babel-jest",{presets:["@babel/preset-react","@babel/preset-env"]}]},moduleFileExtensions:["ts","tsx","js","jsx"],moduleNameMapper:{"^.+\\.(css|less|scss)$":"babel-jest","\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$":ua.default.resolve(__dirname,"assets","file-mock.js")},testPathIgnorePatterns:["^.+\\.eslintrc\\.js$"],setupFilesAfterEnv:[ua.default.resolve(__dirname,"assets","react-testing-library.setup.js")],testEnvironment:"jsdom"};if(typeof r.jest=="function"){let o=r.jest;i=o(i)}if(e){let o=G.resolvePath(e),a=`The specified setup file for the tests (${o}) could not be found.`;try{x0.default.existsSync(o)?i.setupFilesAfterEnv&&i.setupFilesAfterEnv.push(o):F.warn(a)}catch{F.warn(a)}}let s=[];s.push("--config",JSON.stringify(i)),t&&s.push("--watch"),await(0,E0.run)(s)}}var la=z(ln()),A0=z(require("http")),w0=z(require("https")),O0=z(require("serve-handler")),ca=z(require("fs"));function C0(){return async({config:t})=>{let{host:e,port:r,cert:n,key:i}=t.development,s,o;n&&(s=ca.default.readFileSync(n)),i&&(o=ca.default.readFileSync(i));let a=!!(s&&o),u=async(f,p)=>{let h=Date.now();await(0,O0.default)(f,p,{public:t.output.path??"build"}),console.log(f.method,f.url),console.log("Returned",(p.statusCode===200?la.default.green:la.default.red)(p.statusCode),"in",Date.now()-h,"ms")};(a?w0.default.createServer({key:o,cert:s},u):A0.default.createServer(u)).listen(r,()=>{let f=`http${a?"s":""}://${e}:${r}`;console.log(`Running at ${f}`)}),await Promise.resolve()}}var nt=new P0.Command;nt.version("3.0.8","-v, --version","output the version number");nt.command("dev").description("start up a development server with hot module replacement").option("-d, --devtools","open react-devtools in a separate window",!1).action(async t=>{_r(!0),await Qe([In,Nn],[oa({devtools:t.devtools})])});nt.command("build").description("bundles your code for production").option("-a, --analyze","analyze your bundle size",!1).action(async t=>{try{_r(!1),await Qe([_m({analyze:t.analyze})])}catch(e){F.error(e),F.exit(1)}console.info("")});nt.command("lint").description("lints your code for possible errors").action(async()=>{await v0(),console.info("")});nt.command("serve").description("serves the files from a local build folder").action(async()=>{try{await Qe([C0()])}catch(t){F.error(t)}});nt.command("test").description("executes all Jest tests for this project").option("-w, --watch","watch for changes to rerun tests",!1).option("--setupFile <path>","file that should be executed before the tests are initialized","").action(async t=>{try{await Qe([S0(t)])}catch(e){F.error(e)}console.info("")});nt.parse(process.argv);
|
|
36
36
|
/*! Bundled license information:
|
|
37
37
|
|
|
38
38
|
is-extglob/index.js:
|