mirror of
https://github.com/chenasraf/simple-scaffold.git
synced 2026-05-18 01:29:09 +00:00
Compare commits
24 Commits
v1.7.0-dev
...
v1.7.1-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
77be7c09d5 | ||
|
|
1246b51cda | ||
|
|
fea6c0fb16 | ||
|
|
2b7423993b | ||
|
|
a47ba1186c | ||
|
|
06b1552dca | ||
|
|
4868925511 | ||
|
|
79cfdbed38 | ||
|
|
4f27b7b934 | ||
|
|
bee430a40d | ||
|
|
3dfc920455 | ||
|
|
68307d1378 | ||
|
|
33e1d569a3 | ||
|
|
c446439b1a | ||
|
|
773fd00674 | ||
|
|
22763f655e | ||
|
|
a54b1f9fa7 | ||
|
|
dac5527173 | ||
|
|
339459cad8 | ||
|
|
62b4a1cd2f | ||
|
|
5844c080ec | ||
|
|
9393c546aa | ||
|
|
263bf0bf36 | ||
|
|
e0ed371adb |
12
.github/workflows/docs.yml
vendored
12
.github/workflows/docs.yml
vendored
@@ -2,19 +2,19 @@ name: Documentation
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ master, develop ]
|
branches: [master]
|
||||||
jobs:
|
jobs:
|
||||||
docs:
|
docs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
# if: "!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[skip docs]')"
|
|
||||||
if: "!contains(github.event.head_commit.message, '[skip docs]')"
|
if: "!contains(github.event.head_commit.message, '[skip docs]')"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: "18.x"
|
run_install: |
|
||||||
- run: yarn install --frozen-lockfile
|
- recursive: true
|
||||||
- run: yarn build-docs
|
args: [--frozen-lockfile, --strict-peer-dependencies]
|
||||||
|
- run: pnpm build-docs
|
||||||
- uses: peaceiris/actions-gh-pages@v3
|
- uses: peaceiris/actions-gh-pages@v3
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
11
.github/workflows/pull_requests.yml
vendored
11
.github/workflows/pull_requests.yml
vendored
@@ -9,9 +9,10 @@ jobs:
|
|||||||
if: "!contains(github.event.head_commit.message, '[skip ci]')"
|
if: "!contains(github.event.head_commit.message, '[skip ci]')"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: "18.x"
|
run_install: |
|
||||||
- run: yarn install --frozen-lockfile
|
- recursive: true
|
||||||
- run: yarn build
|
args: [--frozen-lockfile, --strict-peer-dependencies]
|
||||||
- run: yarn test
|
- run: pnpm build
|
||||||
|
- run: pnpm test
|
||||||
|
|||||||
24
.github/workflows/release.yml
vendored
24
.github/workflows/release.yml
vendored
@@ -2,18 +2,19 @@ name: Test & Build
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ master, develop, feat/*, fix/* ]
|
branches: [master, develop, feat/*, fix/*]
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: "!contains(github.event.head_commit.message, '[skip ci]')"
|
if: "!contains(github.event.head_commit.message, '[skip ci]')"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: "18.x"
|
run_install: |
|
||||||
- run: yarn install --frozen-lockfile
|
- recursive: true
|
||||||
- run: yarn test
|
args: [--frozen-lockfile, --strict-peer-dependencies]
|
||||||
|
- run: pnpm test
|
||||||
if: "!contains(github.event.head_commit.message, '[skip test]')"
|
if: "!contains(github.event.head_commit.message, '[skip test]')"
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -21,13 +22,14 @@ jobs:
|
|||||||
needs: test
|
needs: test
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: "18.x"
|
run_install: |
|
||||||
- run: yarn install --frozen-lockfile
|
- recursive: true
|
||||||
- run: yarn build
|
args: [--frozen-lockfile, --strict-peer-dependencies]
|
||||||
- run: cd ./dist && yarn pack --filename=../package.tgz
|
- run: pnpm build
|
||||||
- run: yarn semantic-release
|
- run: cd ./dist && pnpm pack --pack-destination=../
|
||||||
|
- run: pnpm semantic-release
|
||||||
if: "!contains(github.event.head_commit.message, '[skip publish]')"
|
if: "!contains(github.event.head_commit.message, '[skip publish]')"
|
||||||
env:
|
env:
|
||||||
NPM_TOKEN: "${{ secrets.NPM_TOKEN }}"
|
NPM_TOKEN: "${{ secrets.NPM_TOKEN }}"
|
||||||
|
|||||||
24
CHANGELOG.md
24
CHANGELOG.md
@@ -1,5 +1,29 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## [1.7.1-develop.1](https://github.com/chenasraf/simple-scaffold/compare/v1.7.0...v1.7.1-develop.1) (2023-06-07)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* local config file load error ([2b74239](https://github.com/chenasraf/simple-scaffold/commit/2b7423993be06b2375631642455c801ae2acf75f))
|
||||||
|
|
||||||
|
## [1.7.0-develop.7](https://github.com/chenasraf/simple-scaffold/compare/v1.7.0-develop.6...v1.7.0-develop.7) (2023-06-07)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* local config file load error ([2b74239](https://github.com/chenasraf/simple-scaffold/commit/2b7423993be06b2375631642455c801ae2acf75f))
|
||||||
|
|
||||||
|
## [1.7.0-develop.6](https://github.com/chenasraf/simple-scaffold/compare/v1.7.0-develop.5...v1.7.0-develop.6) (2023-05-27)
|
||||||
|
|
||||||
|
## [1.7.0-develop.5](https://github.com/chenasraf/simple-scaffold/compare/v1.7.0-develop.4...v1.7.0-develop.5) (2023-05-12)
|
||||||
|
|
||||||
|
## [1.7.0-develop.4](https://github.com/chenasraf/simple-scaffold/compare/v1.7.0-develop.3...v1.7.0-develop.4) (2023-05-11)
|
||||||
|
|
||||||
|
## [1.7.0-develop.3](https://github.com/chenasraf/simple-scaffold/compare/v1.7.0-develop.2...v1.7.0-develop.3) (2023-05-11)
|
||||||
|
|
||||||
|
## [1.7.0-develop.2](https://github.com/chenasraf/simple-scaffold/compare/v1.7.0-develop.1...v1.7.0-develop.2) (2023-05-10)
|
||||||
|
|
||||||
## [1.7.0-develop.1](https://github.com/chenasraf/simple-scaffold/compare/v1.6.0...v1.7.0-develop.1) (2023-05-09)
|
## [1.7.0-develop.1](https://github.com/chenasraf/simple-scaffold/compare/v1.6.0...v1.7.0-develop.1) (2023-05-09)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ $ npx simple-scaffold@latest \
|
|||||||
This will immediately create the following file: `src/components/PageWrapper.tsx`
|
This will immediately create the following file: `src/components/PageWrapper.tsx`
|
||||||
|
|
||||||
```tsx
|
```tsx
|
||||||
// Created: 2077/01/01
|
// Created: 2077-01-01
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
|
||||||
export default PageWrapper: React.FC = (props) => {
|
export default PageWrapper: React.FC = (props) => {
|
||||||
|
|||||||
21
package.json
21
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "simple-scaffold",
|
"name": "simple-scaffold",
|
||||||
"version": "1.7.0-develop.1",
|
"version": "1.7.1-develop.1",
|
||||||
"description": "Generate any file structure - from single components to entire app boilerplates, with a single command.",
|
"description": "Generate any file structure - from single components to entire app boilerplates, with a single command.",
|
||||||
"homepage": "https://chenasraf.github.io/simple-scaffold",
|
"homepage": "https://chenasraf.github.io/simple-scaffold",
|
||||||
"repository": "https://github.com/chenasraf/simple-scaffold.git",
|
"repository": "https://github.com/chenasraf/simple-scaffold.git",
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"bin": "cmd.js",
|
"bin": "cmd.js",
|
||||||
|
"packageManager": "pnpm@8.5.0",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"javascript",
|
"javascript",
|
||||||
"cli",
|
"cli",
|
||||||
@@ -21,24 +22,23 @@
|
|||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"clean": "rimraf dist/",
|
"clean": "rimraf dist/",
|
||||||
"build": "yarn clean && tsc && chmod -R +x ./dist && cp ./package.json ./README.md ./dist/",
|
"build": "pnpm clean && tsc && chmod -R +x ./dist && cp ./package.json ./README.md ./dist/",
|
||||||
"dev": "tsc --watch",
|
"dev": "tsc --watch",
|
||||||
"start": "node dist/scaffold.js",
|
"start": "node dist/scaffold.js",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"cmd": "node --trace-warnings dist/cmd.js",
|
"cmd": "node --trace-warnings dist/cmd.js",
|
||||||
"build-test": "yarn build && yarn test",
|
"build-test": "pnpm build && pnpm test",
|
||||||
"build-cmd": "yarn build && yarn cmd",
|
"build-cmd": "pnpm build && pnpm cmd",
|
||||||
"build-docs": "typedoc",
|
"build-docs": "typedoc",
|
||||||
"watch-docs": "yarn typedoc --watch",
|
"watch-docs": "pnpm typedoc --watch",
|
||||||
"audit-fix": "npm_config_yes=true npx yarn-audit-fix --flow=convert",
|
"audit-fix": "pnpm audit --fix",
|
||||||
"changelog": "conventional-changelog -p conventionalcommits -i CHANGELOG.md -s -r 0"
|
"changelog": "conventional-changelog -p conventionalcommits -i CHANGELOG.md -s -r 0; echo \"# Change Log\n\n$(cat CHANGELOG.md)\" > CHANGELOG.md"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chalk": "^4.1.2",
|
"chalk": "^4.1.2",
|
||||||
"date-fns": "^2.29.3",
|
"date-fns": "^2.30.0",
|
||||||
"glob": "^9.2.1",
|
"glob": "^10.2.3",
|
||||||
"handlebars": "^4.7.7",
|
"handlebars": "^4.7.7",
|
||||||
"lodash": "^4.17.21",
|
|
||||||
"massarg": "^1.0.7-pre.1"
|
"massarg": "^1.0.7-pre.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -47,7 +47,6 @@
|
|||||||
"@semantic-release/git": "^10.0.1",
|
"@semantic-release/git": "^10.0.1",
|
||||||
"@semantic-release/release-notes-generator": "^10.0.3",
|
"@semantic-release/release-notes-generator": "^10.0.3",
|
||||||
"@types/jest": "^29.5.1",
|
"@types/jest": "^29.5.1",
|
||||||
"@types/lodash": "^4.14.171",
|
|
||||||
"@types/mock-fs": "^4.13.1",
|
"@types/mock-fs": "^4.13.1",
|
||||||
"@types/node": "^18.16.0",
|
"@types/node": "^18.16.0",
|
||||||
"conventional-changelog": "^3.1.25",
|
"conventional-changelog": "^3.1.25",
|
||||||
|
|||||||
90
pnpm-lock.yaml
generated
90
pnpm-lock.yaml
generated
@@ -5,17 +5,14 @@ dependencies:
|
|||||||
specifier: ^4.1.2
|
specifier: ^4.1.2
|
||||||
version: 4.1.2
|
version: 4.1.2
|
||||||
date-fns:
|
date-fns:
|
||||||
specifier: ^2.29.3
|
specifier: ^2.30.0
|
||||||
version: 2.29.3
|
version: 2.30.0
|
||||||
glob:
|
glob:
|
||||||
specifier: ^9.2.1
|
specifier: ^10.2.3
|
||||||
version: 9.2.1
|
version: 10.2.3
|
||||||
handlebars:
|
handlebars:
|
||||||
specifier: ^4.7.7
|
specifier: ^4.7.7
|
||||||
version: 4.7.7
|
version: 4.7.7
|
||||||
lodash:
|
|
||||||
specifier: ^4.17.21
|
|
||||||
version: 4.17.21
|
|
||||||
massarg:
|
massarg:
|
||||||
specifier: ^1.0.7-pre.1
|
specifier: ^1.0.7-pre.1
|
||||||
version: 1.0.7-pre.1
|
version: 1.0.7-pre.1
|
||||||
@@ -36,9 +33,6 @@ devDependencies:
|
|||||||
'@types/jest':
|
'@types/jest':
|
||||||
specifier: ^29.5.1
|
specifier: ^29.5.1
|
||||||
version: 29.5.1
|
version: 29.5.1
|
||||||
'@types/lodash':
|
|
||||||
specifier: ^4.14.171
|
|
||||||
version: 4.14.171
|
|
||||||
'@types/mock-fs':
|
'@types/mock-fs':
|
||||||
specifier: ^4.13.1
|
specifier: ^4.13.1
|
||||||
version: 4.13.1
|
version: 4.13.1
|
||||||
@@ -385,6 +379,13 @@ packages:
|
|||||||
'@babel/helper-plugin-utils': 7.21.5
|
'@babel/helper-plugin-utils': 7.21.5
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@babel/runtime@7.21.5:
|
||||||
|
resolution: {integrity: sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==}
|
||||||
|
engines: {node: '>=6.9.0'}
|
||||||
|
dependencies:
|
||||||
|
regenerator-runtime: 0.13.11
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@babel/template@7.20.7:
|
/@babel/template@7.20.7:
|
||||||
resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
|
resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@@ -454,7 +455,6 @@ packages:
|
|||||||
strip-ansi-cjs: /strip-ansi@6.0.1
|
strip-ansi-cjs: /strip-ansi@6.0.1
|
||||||
wrap-ansi: 8.1.0
|
wrap-ansi: 8.1.0
|
||||||
wrap-ansi-cjs: /wrap-ansi@7.0.0
|
wrap-ansi-cjs: /wrap-ansi@7.0.0
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@istanbuljs/load-nyc-config@1.1.0:
|
/@istanbuljs/load-nyc-config@1.1.0:
|
||||||
resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
|
resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
|
||||||
@@ -896,7 +896,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
|
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dev: true
|
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@pnpm/config.env-replace@1.1.0:
|
/@pnpm/config.env-replace@1.1.0:
|
||||||
@@ -1143,10 +1142,6 @@ packages:
|
|||||||
pretty-format: 29.5.0
|
pretty-format: 29.5.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/lodash@4.14.171:
|
|
||||||
resolution: {integrity: sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@types/minimist@1.2.2:
|
/@types/minimist@1.2.2:
|
||||||
resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
|
resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -1252,12 +1247,10 @@ packages:
|
|||||||
/ansi-regex@5.0.1:
|
/ansi-regex@5.0.1:
|
||||||
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/ansi-regex@6.0.1:
|
/ansi-regex@6.0.1:
|
||||||
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
|
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/ansi-sequence-parser@1.1.0:
|
/ansi-sequence-parser@1.1.0:
|
||||||
resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==}
|
resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==}
|
||||||
@@ -1284,7 +1277,6 @@ packages:
|
|||||||
/ansi-styles@6.2.1:
|
/ansi-styles@6.2.1:
|
||||||
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
|
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/ansicolors@0.3.2:
|
/ansicolors@0.3.2:
|
||||||
resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==}
|
resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==}
|
||||||
@@ -1815,7 +1807,6 @@ packages:
|
|||||||
path-key: 3.1.1
|
path-key: 3.1.1
|
||||||
shebang-command: 2.0.0
|
shebang-command: 2.0.0
|
||||||
which: 2.0.2
|
which: 2.0.2
|
||||||
dev: true
|
|
||||||
|
|
||||||
/crypto-random-string@4.0.0:
|
/crypto-random-string@4.0.0:
|
||||||
resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==}
|
resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==}
|
||||||
@@ -1829,9 +1820,11 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/date-fns@2.29.3:
|
/date-fns@2.30.0:
|
||||||
resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==}
|
resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
|
||||||
engines: {node: '>=0.11'}
|
engines: {node: '>=0.11'}
|
||||||
|
dependencies:
|
||||||
|
'@babel/runtime': 7.21.5
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/dateformat@3.0.3:
|
/dateformat@3.0.3:
|
||||||
@@ -1918,7 +1911,6 @@ packages:
|
|||||||
|
|
||||||
/eastasianwidth@0.2.0:
|
/eastasianwidth@0.2.0:
|
||||||
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
|
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/electron-to-chromium@1.4.382:
|
/electron-to-chromium@1.4.382:
|
||||||
resolution: {integrity: sha512-czMavlW52VIPgutbVL9JnZIZuFijzsG1ww/1z2Otu1r1q+9Qe2bTsH3My3sZarlvwyqHM6+mnZfEnt2Vr4dsIg==}
|
resolution: {integrity: sha512-czMavlW52VIPgutbVL9JnZIZuFijzsG1ww/1z2Otu1r1q+9Qe2bTsH3My3sZarlvwyqHM6+mnZfEnt2Vr4dsIg==}
|
||||||
@@ -1931,11 +1923,9 @@ packages:
|
|||||||
|
|
||||||
/emoji-regex@8.0.0:
|
/emoji-regex@8.0.0:
|
||||||
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/emoji-regex@9.2.2:
|
/emoji-regex@9.2.2:
|
||||||
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
|
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/env-ci@9.1.0:
|
/env-ci@9.1.0:
|
||||||
resolution: {integrity: sha512-ZCEas2sDVFR3gpumwwzSU4OJZwWJ46yqJH3TqH3vSxEBzeAlC0uCJLGAnZC0vX1TIXzHzjcwpKmUn2xw5mC/qA==}
|
resolution: {integrity: sha512-ZCEas2sDVFR3gpumwwzSU4OJZwWJ46yqJH3TqH3vSxEBzeAlC0uCJLGAnZC0vX1TIXzHzjcwpKmUn2xw5mC/qA==}
|
||||||
@@ -2120,7 +2110,6 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
cross-spawn: 7.0.3
|
cross-spawn: 7.0.3
|
||||||
signal-exit: 4.0.1
|
signal-exit: 4.0.1
|
||||||
dev: true
|
|
||||||
|
|
||||||
/from2@2.3.0:
|
/from2@2.3.0:
|
||||||
resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
|
resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
|
||||||
@@ -2140,6 +2129,7 @@ packages:
|
|||||||
|
|
||||||
/fs.realpath@1.0.0:
|
/fs.realpath@1.0.0:
|
||||||
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
|
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/fsevents@2.3.2:
|
/fsevents@2.3.2:
|
||||||
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
||||||
@@ -2237,8 +2227,8 @@ packages:
|
|||||||
is-glob: 4.0.3
|
is-glob: 4.0.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/glob@10.2.2:
|
/glob@10.2.3:
|
||||||
resolution: {integrity: sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==}
|
resolution: {integrity: sha512-Kb4rfmBVE3eQTAimgmeqc2LwSnN0wIOkkUL6HmxEFxNJ4fHghYHVbFba/HcGcRjE6s9KoMNK3rSOwkL4PioZjg==}
|
||||||
engines: {node: '>=16 || 14 >=14.17'}
|
engines: {node: '>=16 || 14 >=14.17'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -2247,7 +2237,6 @@ packages:
|
|||||||
minimatch: 9.0.0
|
minimatch: 9.0.0
|
||||||
minipass: 5.0.0
|
minipass: 5.0.0
|
||||||
path-scurry: 1.7.0
|
path-scurry: 1.7.0
|
||||||
dev: true
|
|
||||||
|
|
||||||
/glob@7.2.3:
|
/glob@7.2.3:
|
||||||
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
||||||
@@ -2260,16 +2249,6 @@ packages:
|
|||||||
path-is-absolute: 1.0.1
|
path-is-absolute: 1.0.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/glob@9.2.1:
|
|
||||||
resolution: {integrity: sha512-Pxxgq3W0HyA3XUvSXcFhRSs+43Jsx0ddxcFrbjxNGkL2Ak5BAUBxLqI5G6ADDeCHLfzzXFhe0b1yYcctGmytMA==}
|
|
||||||
engines: {node: '>=16 || 14 >=14.17'}
|
|
||||||
dependencies:
|
|
||||||
fs.realpath: 1.0.0
|
|
||||||
minimatch: 7.4.6
|
|
||||||
minipass: 4.2.8
|
|
||||||
path-scurry: 1.7.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/globals@11.12.0:
|
/globals@11.12.0:
|
||||||
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
|
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
@@ -2469,7 +2448,6 @@ packages:
|
|||||||
/is-fullwidth-code-point@3.0.0:
|
/is-fullwidth-code-point@3.0.0:
|
||||||
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
|
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/is-generator-fn@2.1.0:
|
/is-generator-fn@2.1.0:
|
||||||
resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
|
resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
|
||||||
@@ -2531,7 +2509,6 @@ packages:
|
|||||||
|
|
||||||
/isexe@2.0.0:
|
/isexe@2.0.0:
|
||||||
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
|
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/issue-parser@6.0.0:
|
/issue-parser@6.0.0:
|
||||||
resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==}
|
resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==}
|
||||||
@@ -2597,7 +2574,6 @@ packages:
|
|||||||
'@isaacs/cliui': 8.0.2
|
'@isaacs/cliui': 8.0.2
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@pkgjs/parseargs': 0.11.0
|
'@pkgjs/parseargs': 0.11.0
|
||||||
dev: true
|
|
||||||
|
|
||||||
/java-properties@1.0.2:
|
/java-properties@1.0.2:
|
||||||
resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==}
|
resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==}
|
||||||
@@ -3320,19 +3296,11 @@ packages:
|
|||||||
brace-expansion: 1.1.11
|
brace-expansion: 1.1.11
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/minimatch@7.4.6:
|
|
||||||
resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==}
|
|
||||||
engines: {node: '>=10'}
|
|
||||||
dependencies:
|
|
||||||
brace-expansion: 2.0.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/minimatch@9.0.0:
|
/minimatch@9.0.0:
|
||||||
resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==}
|
resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==}
|
||||||
engines: {node: '>=16 || 14 >=14.17'}
|
engines: {node: '>=16 || 14 >=14.17'}
|
||||||
dependencies:
|
dependencies:
|
||||||
brace-expansion: 2.0.1
|
brace-expansion: 2.0.1
|
||||||
dev: true
|
|
||||||
|
|
||||||
/minimist-options@4.1.0:
|
/minimist-options@4.1.0:
|
||||||
resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
|
resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
|
||||||
@@ -3346,11 +3314,6 @@ packages:
|
|||||||
/minimist@1.2.8:
|
/minimist@1.2.8:
|
||||||
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
|
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
|
||||||
|
|
||||||
/minipass@4.2.8:
|
|
||||||
resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
|
|
||||||
engines: {node: '>=8'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/minipass@5.0.0:
|
/minipass@5.0.0:
|
||||||
resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
|
resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -3719,7 +3682,6 @@ packages:
|
|||||||
/path-key@3.1.1:
|
/path-key@3.1.1:
|
||||||
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
|
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/path-key@4.0.0:
|
/path-key@4.0.0:
|
||||||
resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
|
resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
|
||||||
@@ -3954,6 +3916,10 @@ packages:
|
|||||||
esprima: 4.0.1
|
esprima: 4.0.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/regenerator-runtime@0.13.11:
|
||||||
|
resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/registry-auth-token@5.0.2:
|
/registry-auth-token@5.0.2:
|
||||||
resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==}
|
resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
@@ -4012,7 +3978,7 @@ packages:
|
|||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dependencies:
|
dependencies:
|
||||||
glob: 10.2.2
|
glob: 10.2.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/run-parallel@1.2.0:
|
/run-parallel@1.2.0:
|
||||||
@@ -4110,12 +4076,10 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dependencies:
|
dependencies:
|
||||||
shebang-regex: 3.0.0
|
shebang-regex: 3.0.0
|
||||||
dev: true
|
|
||||||
|
|
||||||
/shebang-regex@3.0.0:
|
/shebang-regex@3.0.0:
|
||||||
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
|
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/shiki@0.14.2:
|
/shiki@0.14.2:
|
||||||
resolution: {integrity: sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==}
|
resolution: {integrity: sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==}
|
||||||
@@ -4133,7 +4097,6 @@ packages:
|
|||||||
/signal-exit@4.0.1:
|
/signal-exit@4.0.1:
|
||||||
resolution: {integrity: sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==}
|
resolution: {integrity: sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/signale@1.4.0:
|
/signale@1.4.0:
|
||||||
resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==}
|
resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==}
|
||||||
@@ -4241,7 +4204,6 @@ packages:
|
|||||||
emoji-regex: 8.0.0
|
emoji-regex: 8.0.0
|
||||||
is-fullwidth-code-point: 3.0.0
|
is-fullwidth-code-point: 3.0.0
|
||||||
strip-ansi: 6.0.1
|
strip-ansi: 6.0.1
|
||||||
dev: true
|
|
||||||
|
|
||||||
/string-width@5.1.2:
|
/string-width@5.1.2:
|
||||||
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
|
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
|
||||||
@@ -4250,7 +4212,6 @@ packages:
|
|||||||
eastasianwidth: 0.2.0
|
eastasianwidth: 0.2.0
|
||||||
emoji-regex: 9.2.2
|
emoji-regex: 9.2.2
|
||||||
strip-ansi: 7.0.1
|
strip-ansi: 7.0.1
|
||||||
dev: true
|
|
||||||
|
|
||||||
/string_decoder@1.1.1:
|
/string_decoder@1.1.1:
|
||||||
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
|
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
|
||||||
@@ -4269,14 +4230,12 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dependencies:
|
dependencies:
|
||||||
ansi-regex: 5.0.1
|
ansi-regex: 5.0.1
|
||||||
dev: true
|
|
||||||
|
|
||||||
/strip-ansi@7.0.1:
|
/strip-ansi@7.0.1:
|
||||||
resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==}
|
resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
dependencies:
|
dependencies:
|
||||||
ansi-regex: 6.0.1
|
ansi-regex: 6.0.1
|
||||||
dev: true
|
|
||||||
|
|
||||||
/strip-bom@3.0.0:
|
/strip-bom@3.0.0:
|
||||||
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
|
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
|
||||||
@@ -4659,7 +4618,6 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dependencies:
|
dependencies:
|
||||||
isexe: 2.0.0
|
isexe: 2.0.0
|
||||||
dev: true
|
|
||||||
|
|
||||||
/wordwrap@1.0.0:
|
/wordwrap@1.0.0:
|
||||||
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
|
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
|
||||||
@@ -4671,7 +4629,6 @@ packages:
|
|||||||
ansi-styles: 4.3.0
|
ansi-styles: 4.3.0
|
||||||
string-width: 4.2.3
|
string-width: 4.2.3
|
||||||
strip-ansi: 6.0.1
|
strip-ansi: 6.0.1
|
||||||
dev: true
|
|
||||||
|
|
||||||
/wrap-ansi@8.1.0:
|
/wrap-ansi@8.1.0:
|
||||||
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
|
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
|
||||||
@@ -4680,7 +4637,6 @@ packages:
|
|||||||
ansi-styles: 6.2.1
|
ansi-styles: 6.2.1
|
||||||
string-width: 5.1.2
|
string-width: 5.1.2
|
||||||
strip-ansi: 7.0.1
|
strip-ansi: 7.0.1
|
||||||
dev: true
|
|
||||||
|
|
||||||
/wrappy@1.0.2:
|
/wrappy@1.0.2:
|
||||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
const releaseRules = [
|
const releaseRules = [
|
||||||
{ type: "feat", section: "Features", release: "minor" },
|
{ type: "feat", section: "Features", release: "minor" },
|
||||||
{ type: "docs", section: "Build", release: false },
|
{ type: "revert", section: "Features", release: "minor" },
|
||||||
{ type: "fix", section: "Bug Fixes", release: "patch" },
|
{ type: "fix", section: "Bug Fixes", release: "patch" },
|
||||||
|
{ type: "chore", section: "Misc", release: "patch" },
|
||||||
{ type: "refactor", section: "Misc", release: "patch" },
|
{ type: "refactor", section: "Misc", release: "patch" },
|
||||||
{ type: "perf", section: "Misc", release: "patch" },
|
{ type: "perf", section: "Misc", release: "patch" },
|
||||||
{ type: "build", section: "Build", release: "patch" },
|
{ type: "build", section: "Build", release: "patch" },
|
||||||
{ type: "chore", section: "Misc", release: "patch" },
|
{ type: "docs", section: "Build", release: false },
|
||||||
{ type: "test", section: "Tests", release: false },
|
{ type: "test", section: "Tests", release: "patch" },
|
||||||
]
|
]
|
||||||
|
|
||||||
/** @type {import('semantic-release').Options} */
|
/** @type {import('semantic-release').Options} */
|
||||||
@@ -22,9 +23,9 @@ module.exports = {
|
|||||||
],
|
],
|
||||||
analyzeCommits: {
|
analyzeCommits: {
|
||||||
path: "semantic-release-conventional-commits",
|
path: "semantic-release-conventional-commits",
|
||||||
majorTypes: ["major", "breaking"],
|
majorTypes: releaseRules.filter((x) => x.release === "major").map((x) => x.type),
|
||||||
minorTypes: ["minor", "feat", "feature"],
|
minorTypes: releaseRules.filter((x) => x.release === "minor").map((x) => x.type),
|
||||||
patchTypes: ["patch", "fix", "bugfix", "refactor", "perf", "revert"],
|
patchTypes: releaseRules.filter((x) => x.release === "patch").map((x) => x.type),
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
[
|
[
|
||||||
@@ -76,7 +77,12 @@ module.exports = {
|
|||||||
[
|
[
|
||||||
"@semantic-release/github",
|
"@semantic-release/github",
|
||||||
{
|
{
|
||||||
assets: ["package.tgz"],
|
assets: [
|
||||||
|
{
|
||||||
|
path: "*.tgz",
|
||||||
|
name: "simple-scaffold.tgz",
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
10
src/cmd.ts
10
src/cmd.ts
@@ -8,8 +8,10 @@ import fs from "fs/promises"
|
|||||||
import { parseAppendData, parseConfig } from "./config"
|
import { parseAppendData, parseConfig } from "./config"
|
||||||
|
|
||||||
export async function parseCliArgs(args = process.argv.slice(2)) {
|
export async function parseCliArgs(args = process.argv.slice(2)) {
|
||||||
const pkg = JSON.parse((await fs.readFile(path.join(__dirname, "package.json"))).toString())
|
const pkgFile = await fs.readFile(path.join(__dirname, "package.json"))
|
||||||
const isConfig = args.includes("--config") || args.includes("-c") || args.includes("--github") || args.includes("-gh")
|
const pkg = JSON.parse(pkgFile.toString())
|
||||||
|
const isConfigProvided =
|
||||||
|
args.includes("--config") || args.includes("-c") || args.includes("--github") || args.includes("-gh")
|
||||||
|
|
||||||
return (
|
return (
|
||||||
massarg<ScaffoldCmdConfig>()
|
massarg<ScaffoldCmdConfig>()
|
||||||
@@ -47,7 +49,7 @@ export async function parseCliArgs(args = process.argv.slice(2)) {
|
|||||||
name: "output",
|
name: "output",
|
||||||
aliases: ["o"],
|
aliases: ["o"],
|
||||||
description: `Path to output to. If --create-sub-folder is enabled, the subfolder will be created inside this path. ${chalk.reset`${chalk.white`(default: current dir)`}`}`,
|
description: `Path to output to. If --create-sub-folder is enabled, the subfolder will be created inside this path. ${chalk.reset`${chalk.white`(default: current dir)`}`}`,
|
||||||
required: !isConfig,
|
required: !isConfigProvided,
|
||||||
})
|
})
|
||||||
.option({
|
.option({
|
||||||
name: "templates",
|
name: "templates",
|
||||||
@@ -56,7 +58,7 @@ export async function parseCliArgs(args = process.argv.slice(2)) {
|
|||||||
description:
|
description:
|
||||||
"Template files to use as input. You may provide multiple files, each of which can be a relative or absolute path, " +
|
"Template files to use as input. You may provide multiple files, each of which can be a relative or absolute path, " +
|
||||||
"or a glob pattern for multiple file matching easily.",
|
"or a glob pattern for multiple file matching easily.",
|
||||||
required: !isConfig,
|
required: !isConfigProvided,
|
||||||
})
|
})
|
||||||
.option({
|
.option({
|
||||||
name: "overwrite",
|
name: "overwrite",
|
||||||
|
|||||||
@@ -54,22 +54,11 @@ export async function parseConfig(config: ScaffoldCmdConfig & OptionsBase): Prom
|
|||||||
let c: ScaffoldConfig = config
|
let c: ScaffoldConfig = config
|
||||||
if (config.github) {
|
if (config.github) {
|
||||||
log(config, LogLevel.Info, `Loading config from github ${config.github}`)
|
log(config, LogLevel.Info, `Loading config from github ${config.github}`)
|
||||||
const gitUrl = new URL(`https://github.com/${config.github}`)
|
config.config = githubPartToUrl(config.github)
|
||||||
if (!gitUrl.pathname.endsWith(".git")) {
|
|
||||||
gitUrl.pathname += ".git"
|
|
||||||
}
|
|
||||||
config.config = gitUrl.toString()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.config) {
|
if (config.config) {
|
||||||
const isUrl = config.config.includes("://")
|
const { configFile, key } = parseConfigSelection(config.config, config.key)
|
||||||
|
|
||||||
const hasColonToken = (!isUrl && config.config.includes(":")) || (isUrl && count(config.config, ":") > 1)
|
|
||||||
const colonIndex = config.config.lastIndexOf(":")
|
|
||||||
const [configFile, templateKey = "default"] = hasColonToken
|
|
||||||
? [config.config.substring(0, colonIndex), config.config.substring(colonIndex + 1)]
|
|
||||||
: [config.config, undefined]
|
|
||||||
const key = (config.key ?? templateKey) || "default"
|
|
||||||
log(config, LogLevel.Info, `Loading config from ${configFile} with key ${key}`)
|
log(config, LogLevel.Info, `Loading config from ${configFile} with key ${key}`)
|
||||||
const configPromise = await getConfig({ config: configFile, quiet: config.quiet, verbose: config.verbose })
|
const configPromise = await getConfig({ config: configFile, quiet: config.quiet, verbose: config.verbose })
|
||||||
const configImport = await resolve(configPromise, config)
|
const configImport = await resolve(configPromise, config)
|
||||||
@@ -92,6 +81,26 @@ export async function parseConfig(config: ScaffoldCmdConfig & OptionsBase): Prom
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function parseConfigSelection(config: string, key?: string): { configFile: string; key: string } {
|
||||||
|
const isUrl = config.includes("://")
|
||||||
|
|
||||||
|
const hasColonToken = (!isUrl && config.includes(":")) || (isUrl && count(config, ":") > 1)
|
||||||
|
const colonIndex = config.lastIndexOf(":")
|
||||||
|
const [configFile, templateKey = "default"] = hasColonToken
|
||||||
|
? [config.substring(0, colonIndex), config.substring(colonIndex + 1)]
|
||||||
|
: [config, undefined]
|
||||||
|
const _key = (key ?? templateKey) || "default"
|
||||||
|
return { configFile, key: _key }
|
||||||
|
}
|
||||||
|
|
||||||
|
export function githubPartToUrl(part: string): string {
|
||||||
|
const gitUrl = new URL(`https://github.com/${part}`)
|
||||||
|
if (!gitUrl.pathname.endsWith(".git")) {
|
||||||
|
gitUrl.pathname += ".git"
|
||||||
|
}
|
||||||
|
return gitUrl.toString()
|
||||||
|
}
|
||||||
|
|
||||||
function wrapNoopResolver<T, R = T>(value: Resolver<T, R>): Resolver<T, R> {
|
function wrapNoopResolver<T, R = T>(value: Resolver<T, R>): Resolver<T, R> {
|
||||||
if (typeof value === "function") {
|
if (typeof value === "function") {
|
||||||
return value
|
return value
|
||||||
@@ -103,7 +112,7 @@ function wrapNoopResolver<T, R = T>(value: Resolver<T, R>): Resolver<T, R> {
|
|||||||
/** @internal */
|
/** @internal */
|
||||||
export async function getConfig(config: ConfigLoadConfig): Promise<ScaffoldConfigFile> {
|
export async function getConfig(config: ConfigLoadConfig): Promise<ScaffoldConfigFile> {
|
||||||
const { config: configFile, ...logConfig } = config as Required<typeof config>
|
const { config: configFile, ...logConfig } = config as Required<typeof config>
|
||||||
const url = new URL(configFile)
|
const url = configFile.includes("://") ? new URL(configFile) : new URL(`file://${configFile}`)
|
||||||
|
|
||||||
if (url.protocol === "file:") {
|
if (url.protocol === "file:") {
|
||||||
log(logConfig, LogLevel.Info, `Loading config from file ${configFile}`)
|
log(logConfig, LogLevel.Info, `Loading config from file ${configFile}`)
|
||||||
@@ -114,11 +123,11 @@ export async function getConfig(config: ConfigLoadConfig): Promise<ScaffoldConfi
|
|||||||
const isHttp = url.protocol === "http:" || url.protocol === "https:"
|
const isHttp = url.protocol === "http:" || url.protocol === "https:"
|
||||||
const isGit = url.protocol === "git:" || (isHttp && url.pathname.endsWith(".git"))
|
const isGit = url.protocol === "git:" || (isHttp && url.pathname.endsWith(".git"))
|
||||||
|
|
||||||
if (isHttp || isGit) {
|
if (isGit) {
|
||||||
if (isGit) {
|
return getGitConfig(url, logConfig)
|
||||||
return getGitConfig(url, logConfig)
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!isHttp) {
|
||||||
throw new Error(`Unsupported protocol ${url.protocol}`)
|
throw new Error(`Unsupported protocol ${url.protocol}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,19 +30,10 @@ export function log(config: LogConfig, level: LogLevel, ...obj: any[]): void {
|
|||||||
|
|
||||||
export function logInputFile(
|
export function logInputFile(
|
||||||
config: ScaffoldConfig,
|
config: ScaffoldConfig,
|
||||||
{
|
data: {
|
||||||
origTemplate,
|
originalTemplate: string
|
||||||
relPath,
|
relativePath: string
|
||||||
template,
|
parsedTemplate: string
|
||||||
inputFilePath,
|
|
||||||
nonGlobTemplate,
|
|
||||||
basePath,
|
|
||||||
isDirOrGlob,
|
|
||||||
isGlob,
|
|
||||||
}: {
|
|
||||||
origTemplate: string
|
|
||||||
relPath: string
|
|
||||||
template: string
|
|
||||||
inputFilePath: string
|
inputFilePath: string
|
||||||
nonGlobTemplate: string
|
nonGlobTemplate: string
|
||||||
basePath: string
|
basePath: string
|
||||||
@@ -50,20 +41,7 @@ export function logInputFile(
|
|||||||
isGlob: boolean
|
isGlob: boolean
|
||||||
},
|
},
|
||||||
): void {
|
): void {
|
||||||
log(
|
log(config, LogLevel.Debug, data)
|
||||||
config,
|
|
||||||
LogLevel.Debug,
|
|
||||||
`\nprocess.cwd(): ${process.cwd()}`,
|
|
||||||
`\norigTemplate: ${origTemplate}`,
|
|
||||||
`\nrelPath: ${relPath}`,
|
|
||||||
`\ntemplate: ${template}`,
|
|
||||||
`\ninputFilePath: ${inputFilePath}`,
|
|
||||||
`\nnonGlobTemplate: ${nonGlobTemplate}`,
|
|
||||||
`\nbasePath: ${basePath}`,
|
|
||||||
`\nisDirOrGlob: ${isDirOrGlob}`,
|
|
||||||
`\nisGlob: ${isGlob}`,
|
|
||||||
`\n`,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function logInitStep(config: ScaffoldConfig): void {
|
export function logInitStep(config: ScaffoldConfig): void {
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
import path from "path"
|
import path from "path"
|
||||||
import { DefaultHelpers, Helper, LogLevel, ScaffoldConfig } from "./types"
|
import { DefaultHelpers, Helper, LogLevel, ScaffoldConfig } from "./types"
|
||||||
import camelCase from "lodash/camelCase"
|
|
||||||
import snakeCase from "lodash/snakeCase"
|
|
||||||
import kebabCase from "lodash/kebabCase"
|
|
||||||
import startCase from "lodash/startCase"
|
|
||||||
import Handlebars from "handlebars"
|
import Handlebars from "handlebars"
|
||||||
import dtAdd from "date-fns/add"
|
import dtAdd from "date-fns/add"
|
||||||
import dtFormat from "date-fns/format"
|
import dtFormat from "date-fns/format"
|
||||||
@@ -29,14 +25,9 @@ export const defaultHelpers: Record<DefaultHelpers, Helper> = {
|
|||||||
date: dateHelper,
|
date: dateHelper,
|
||||||
}
|
}
|
||||||
|
|
||||||
export function _dateHelper(date: Date, formatString: string): string
|
function _dateHelper(date: Date, formatString: string): string
|
||||||
export function _dateHelper(
|
function _dateHelper(date: Date, formatString: string, durationDifference: number, durationType: keyof Duration): string
|
||||||
date: Date,
|
function _dateHelper(
|
||||||
formatString: string,
|
|
||||||
durationDifference: number,
|
|
||||||
durationType: keyof Duration,
|
|
||||||
): string
|
|
||||||
export function _dateHelper(
|
|
||||||
date: Date,
|
date: Date,
|
||||||
formatString: string,
|
formatString: string,
|
||||||
durationDifference?: number,
|
durationDifference?: number,
|
||||||
@@ -61,7 +52,6 @@ export function dateHelper(
|
|||||||
durationDifference: number,
|
durationDifference: number,
|
||||||
durationType: keyof Duration,
|
durationType: keyof Duration,
|
||||||
): string
|
): string
|
||||||
|
|
||||||
export function dateHelper(
|
export function dateHelper(
|
||||||
date: string,
|
date: string,
|
||||||
formatString: string,
|
formatString: string,
|
||||||
@@ -71,7 +61,35 @@ export function dateHelper(
|
|||||||
return _dateHelper(dateFns.parseISO(date), formatString, durationDifference!, durationType!)
|
return _dateHelper(dateFns.parseISO(date), formatString, durationDifference!, durationType!)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function pascalCase(s: string): string {
|
// splits by either non-alpha character or capital letter
|
||||||
|
function toWordParts(string: string): string[] {
|
||||||
|
return string.split(/(?=[A-Z])|[^a-zA-Z]/).filter((s) => s.length > 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
function camelCase(s: string): string {
|
||||||
|
return toWordParts(s).reduce((acc, part, i) => {
|
||||||
|
if (i === 0) {
|
||||||
|
return part.toLowerCase()
|
||||||
|
}
|
||||||
|
return acc + part[0].toUpperCase() + part.slice(1).toLowerCase()
|
||||||
|
}, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
function snakeCase(s: string): string {
|
||||||
|
return toWordParts(s).join("_").toLowerCase()
|
||||||
|
}
|
||||||
|
|
||||||
|
function kebabCase(s: string): string {
|
||||||
|
return toWordParts(s).join("-").toLowerCase()
|
||||||
|
}
|
||||||
|
|
||||||
|
function startCase(s: string): string {
|
||||||
|
return toWordParts(s)
|
||||||
|
.map((part) => part[0].toUpperCase() + part.slice(1).toLowerCase())
|
||||||
|
.join(" ")
|
||||||
|
}
|
||||||
|
|
||||||
|
function pascalCase(s: string): string {
|
||||||
return startCase(s).replace(/\s+/g, "")
|
return startCase(s).replace(/\s+/g, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,22 +7,19 @@
|
|||||||
import path from "path"
|
import path from "path"
|
||||||
import { handleErr, resolve } from "./utils"
|
import { handleErr, resolve } from "./utils"
|
||||||
import {
|
import {
|
||||||
createDirIfNotExists,
|
|
||||||
isDir,
|
isDir,
|
||||||
removeGlob,
|
removeGlob,
|
||||||
makeRelativePath,
|
makeRelativePath,
|
||||||
getTemplateGlobInfo,
|
getTemplateGlobInfo,
|
||||||
getFileList,
|
getFileList,
|
||||||
getBasePath,
|
getBasePath,
|
||||||
copyFileTransformed,
|
|
||||||
getTemplateFileInfo,
|
|
||||||
handleTemplateFile,
|
handleTemplateFile,
|
||||||
} from "./file"
|
} from "./file"
|
||||||
import { LogLevel, MinimalConfig, Resolver, ScaffoldCmdConfig, ScaffoldConfig } from "./types"
|
import { LogLevel, MinimalConfig, Resolver, ScaffoldCmdConfig, ScaffoldConfig } from "./types"
|
||||||
import { OptionsBase } from "massarg/types"
|
import { OptionsBase } from "massarg/types"
|
||||||
import { pascalCase, registerHelpers } from "./parser"
|
import { defaultHelpers, registerHelpers } from "./parser"
|
||||||
import { log, logInitStep, logInputFile } from "./logger"
|
import { log, logInitStep, logInputFile } from "./logger"
|
||||||
import { getOptionValueForFile, parseConfig } from "./config"
|
import { parseConfig } from "./config"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a scaffold using given `options`.
|
* Create a scaffold using given `options`.
|
||||||
@@ -61,7 +58,7 @@ export async function Scaffold(config: ScaffoldConfig): Promise<void> {
|
|||||||
|
|
||||||
registerHelpers(config)
|
registerHelpers(config)
|
||||||
try {
|
try {
|
||||||
config.data = { name: config.name, Name: pascalCase(config.name), ...config.data }
|
config.data = { name: config.name, Name: defaultHelpers.pascalCase(config.name), ...config.data }
|
||||||
logInitStep(config)
|
logInitStep(config)
|
||||||
for (let _template of config.templates) {
|
for (let _template of config.templates) {
|
||||||
try {
|
try {
|
||||||
@@ -77,9 +74,9 @@ export async function Scaffold(config: ScaffoldConfig): Promise<void> {
|
|||||||
const relPath = makeRelativePath(path.dirname(removeGlob(inputFilePath).replace(nonGlobTemplate, "")))
|
const relPath = makeRelativePath(path.dirname(removeGlob(inputFilePath).replace(nonGlobTemplate, "")))
|
||||||
const basePath = getBasePath(relPath)
|
const basePath = getBasePath(relPath)
|
||||||
logInputFile(config, {
|
logInputFile(config, {
|
||||||
origTemplate,
|
originalTemplate: origTemplate,
|
||||||
relPath,
|
relativePath: relPath,
|
||||||
template,
|
parsedTemplate: template,
|
||||||
inputFilePath,
|
inputFilePath,
|
||||||
nonGlobTemplate,
|
nonGlobTemplate,
|
||||||
basePath,
|
basePath,
|
||||||
@@ -112,7 +109,7 @@ export async function Scaffold(config: ScaffoldConfig): Promise<void> {
|
|||||||
* @category Main
|
* @category Main
|
||||||
* @return {Promise<void>} A promise that resolves when the scaffold is complete
|
* @return {Promise<void>} A promise that resolves when the scaffold is complete
|
||||||
*/
|
*/
|
||||||
Scaffold.fromConfig = async function (
|
Scaffold.fromConfig = async function(
|
||||||
/** The path or URL to the config file */
|
/** The path or URL to the config file */
|
||||||
pathOrUrl: string,
|
pathOrUrl: string,
|
||||||
/** Information needed before loading the config */
|
/** Information needed before loading the config */
|
||||||
|
|||||||
61
tests/config.test.ts
Normal file
61
tests/config.test.ts
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
import { ScaffoldCmdConfig } from "../src/types"
|
||||||
|
import { OptionsBase } from "massarg/types"
|
||||||
|
import { githubPartToUrl, parseAppendData, parseConfigSelection } from "../src/config"
|
||||||
|
|
||||||
|
const blankCliConf: ScaffoldCmdConfig & OptionsBase = {
|
||||||
|
verbose: 0,
|
||||||
|
name: "",
|
||||||
|
output: "",
|
||||||
|
templates: [],
|
||||||
|
data: { name: "test" },
|
||||||
|
overwrite: false,
|
||||||
|
createSubFolder: false,
|
||||||
|
dryRun: false,
|
||||||
|
quiet: false,
|
||||||
|
extras: [],
|
||||||
|
help: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("config", () => {
|
||||||
|
describe("parseAppendData", () => {
|
||||||
|
test('works for "key=value"', () => {
|
||||||
|
expect(parseAppendData("key=value", blankCliConf)).toEqual({ key: "value", name: "test" })
|
||||||
|
})
|
||||||
|
|
||||||
|
test('works for "key:=value"', () => {
|
||||||
|
expect(parseAppendData("key:=123", blankCliConf)).toEqual({ key: 123, name: "test" })
|
||||||
|
})
|
||||||
|
|
||||||
|
test("overwrites existing value", () => {
|
||||||
|
expect(parseAppendData("name:=123", blankCliConf)).toEqual({ name: 123 })
|
||||||
|
})
|
||||||
|
|
||||||
|
test("works with quotes", () => {
|
||||||
|
expect(parseAppendData('key="value test"', blankCliConf)).toEqual({ key: "value test", name: "test" })
|
||||||
|
})
|
||||||
|
})
|
||||||
|
describe("githubPartToUrl", () => {
|
||||||
|
test("works", () => {
|
||||||
|
expect(githubPartToUrl("chenasraf/simple-scaffold")).toEqual("https://github.com/chenasraf/simple-scaffold.git")
|
||||||
|
expect(githubPartToUrl("chenasraf/simple-scaffold.git")).toEqual(
|
||||||
|
"https://github.com/chenasraf/simple-scaffold.git",
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
describe("parseConfigSelection", () => {
|
||||||
|
test("works", () => {
|
||||||
|
expect(parseConfigSelection("scaffold.config.js", "component")).toEqual({
|
||||||
|
configFile: "scaffold.config.js",
|
||||||
|
key: "component",
|
||||||
|
})
|
||||||
|
expect(parseConfigSelection("scaffold.config.js:component", "main")).toEqual({
|
||||||
|
configFile: "scaffold.config.js",
|
||||||
|
key: "main",
|
||||||
|
})
|
||||||
|
expect(parseConfigSelection("scaffold.config.js", "main")).toEqual({
|
||||||
|
configFile: "scaffold.config.js",
|
||||||
|
key: "main",
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
148
tests/parser.test.ts
Normal file
148
tests/parser.test.ts
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
import { ScaffoldCmdConfig, ScaffoldConfig } from "../src/types"
|
||||||
|
import path from "path"
|
||||||
|
import * as dateFns from "date-fns"
|
||||||
|
import { OptionsBase } from "massarg/types"
|
||||||
|
import { dateHelper, defaultHelpers, handlebarsParse, nowHelper } from "../src/parser"
|
||||||
|
|
||||||
|
const blankConf: ScaffoldConfig = {
|
||||||
|
verbose: 0,
|
||||||
|
name: "",
|
||||||
|
output: "",
|
||||||
|
templates: [],
|
||||||
|
data: { name: "test" },
|
||||||
|
}
|
||||||
|
|
||||||
|
const blankCliConf: ScaffoldCmdConfig & OptionsBase = {
|
||||||
|
verbose: 0,
|
||||||
|
name: "",
|
||||||
|
output: "",
|
||||||
|
templates: [],
|
||||||
|
data: { name: "test" },
|
||||||
|
overwrite: false,
|
||||||
|
createSubFolder: false,
|
||||||
|
dryRun: false,
|
||||||
|
quiet: false,
|
||||||
|
extras: [],
|
||||||
|
help: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("parser", () => {
|
||||||
|
describe("handlebarsParse", () => {
|
||||||
|
let origSep: any
|
||||||
|
describe("windows paths", () => {
|
||||||
|
beforeAll(() => {
|
||||||
|
origSep = path.sep
|
||||||
|
Object.defineProperty(path, "sep", { value: "\\" })
|
||||||
|
})
|
||||||
|
afterAll(() => {
|
||||||
|
Object.defineProperty(path, "sep", { value: origSep })
|
||||||
|
})
|
||||||
|
test("should work for windows paths", async () => {
|
||||||
|
expect(handlebarsParse(blankConf, "C:\\exports\\{{name}}.txt", { isPath: true })).toEqual(
|
||||||
|
Buffer.from("C:\\exports\\test.txt"),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
describe("non-windows paths", () => {
|
||||||
|
beforeAll(() => {
|
||||||
|
origSep = path.sep
|
||||||
|
Object.defineProperty(path, "sep", { value: "/" })
|
||||||
|
})
|
||||||
|
afterAll(() => {
|
||||||
|
Object.defineProperty(path, "sep", { value: origSep })
|
||||||
|
})
|
||||||
|
test("should work for non-windows paths", async () => {
|
||||||
|
expect(handlebarsParse(blankConf, "/home/test/{{name}}.txt", { isPath: true })).toEqual(
|
||||||
|
Buffer.from("/home/test/test.txt"),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
test("should not do path escaping on non-path compiles", async () => {
|
||||||
|
expect(
|
||||||
|
handlebarsParse(
|
||||||
|
{ ...blankConf, data: { ...blankConf.data, escaped: "value" } },
|
||||||
|
"/home/test/{{name}} \\{{escaped}}.txt",
|
||||||
|
{
|
||||||
|
isPath: false,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
).toEqual(Buffer.from("/home/test/test {{escaped}}.txt"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("Helpers", () => {
|
||||||
|
describe("string helpers", () => {
|
||||||
|
test("camelCase", () => {
|
||||||
|
expect(defaultHelpers.camelCase("test string")).toEqual("testString")
|
||||||
|
expect(defaultHelpers.camelCase("test_string")).toEqual("testString")
|
||||||
|
expect(defaultHelpers.camelCase("test-string")).toEqual("testString")
|
||||||
|
expect(defaultHelpers.camelCase("testString")).toEqual("testString")
|
||||||
|
expect(defaultHelpers.camelCase("TestString")).toEqual("testString")
|
||||||
|
expect(defaultHelpers.camelCase("Test____String")).toEqual("testString")
|
||||||
|
})
|
||||||
|
test("pascalCase", () => {
|
||||||
|
expect(defaultHelpers.pascalCase("test string")).toEqual("TestString")
|
||||||
|
expect(defaultHelpers.pascalCase("test_string")).toEqual("TestString")
|
||||||
|
expect(defaultHelpers.pascalCase("test-string")).toEqual("TestString")
|
||||||
|
expect(defaultHelpers.pascalCase("testString")).toEqual("TestString")
|
||||||
|
expect(defaultHelpers.pascalCase("TestString")).toEqual("TestString")
|
||||||
|
expect(defaultHelpers.pascalCase("Test____String")).toEqual("TestString")
|
||||||
|
})
|
||||||
|
test("snakeCase", () => {
|
||||||
|
expect(defaultHelpers.snakeCase("test string")).toEqual("test_string")
|
||||||
|
expect(defaultHelpers.snakeCase("test_string")).toEqual("test_string")
|
||||||
|
expect(defaultHelpers.snakeCase("test-string")).toEqual("test_string")
|
||||||
|
expect(defaultHelpers.snakeCase("testString")).toEqual("test_string")
|
||||||
|
expect(defaultHelpers.snakeCase("TestString")).toEqual("test_string")
|
||||||
|
expect(defaultHelpers.snakeCase("Test____String")).toEqual("test_string")
|
||||||
|
})
|
||||||
|
test("kebabCase", () => {
|
||||||
|
expect(defaultHelpers.kebabCase("test string")).toEqual("test-string")
|
||||||
|
expect(defaultHelpers.kebabCase("test_string")).toEqual("test-string")
|
||||||
|
expect(defaultHelpers.kebabCase("test-string")).toEqual("test-string")
|
||||||
|
expect(defaultHelpers.kebabCase("testString")).toEqual("test-string")
|
||||||
|
expect(defaultHelpers.kebabCase("TestString")).toEqual("test-string")
|
||||||
|
expect(defaultHelpers.kebabCase("Test____String")).toEqual("test-string")
|
||||||
|
})
|
||||||
|
test("startCase", () => {
|
||||||
|
expect(defaultHelpers.startCase("test string")).toEqual("Test String")
|
||||||
|
expect(defaultHelpers.startCase("test_string")).toEqual("Test String")
|
||||||
|
expect(defaultHelpers.startCase("test-string")).toEqual("Test String")
|
||||||
|
expect(defaultHelpers.startCase("testString")).toEqual("Test String")
|
||||||
|
expect(defaultHelpers.startCase("TestString")).toEqual("Test String")
|
||||||
|
expect(defaultHelpers.startCase("Test____String")).toEqual("Test String")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
describe("date helpers", () => {
|
||||||
|
describe("now", () => {
|
||||||
|
test("should work without extra params", () => {
|
||||||
|
const now = new Date()
|
||||||
|
const fmt = "yyyy-MM-dd HH:mm"
|
||||||
|
|
||||||
|
expect(nowHelper(fmt)).toEqual(dateFns.format(now, fmt))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("date", () => {
|
||||||
|
test("should work with no offset params", () => {
|
||||||
|
const now = new Date()
|
||||||
|
const fmt = "yyyy-MM-dd HH:mm"
|
||||||
|
|
||||||
|
expect(dateHelper(now.toISOString(), fmt)).toEqual(dateFns.format(now, fmt))
|
||||||
|
})
|
||||||
|
|
||||||
|
test("should work with offset params", () => {
|
||||||
|
const now = new Date()
|
||||||
|
const fmt = "yyyy-MM-dd HH:mm"
|
||||||
|
|
||||||
|
expect(dateHelper(now.toISOString(), fmt, -1, "days")).toEqual(
|
||||||
|
dateFns.format(dateFns.add(now, { days: -1 }), fmt),
|
||||||
|
)
|
||||||
|
expect(dateHelper(now.toISOString(), fmt, 1, "months")).toEqual(
|
||||||
|
dateFns.format(dateFns.add(now, { months: 1 }), fmt),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -1,125 +1,21 @@
|
|||||||
import { ScaffoldCmdConfig, ScaffoldConfig } from "../src/types"
|
import { handleErr, resolve } from "../src/utils"
|
||||||
import path from "path"
|
|
||||||
import * as dateFns from "date-fns"
|
|
||||||
import { OptionsBase } from "massarg/types"
|
|
||||||
import { dateHelper, handlebarsParse, nowHelper } from "../src/parser"
|
|
||||||
import { parseAppendData } from "../src/config"
|
|
||||||
|
|
||||||
const blankConf: ScaffoldConfig = {
|
describe("utils", () => {
|
||||||
verbose: 0,
|
describe("resolve", () => {
|
||||||
name: "",
|
test("should resolve function", () => {
|
||||||
output: "",
|
expect(resolve(() => 1, null)).toBe(1)
|
||||||
templates: [],
|
expect(resolve((x) => x, 2)).toBe(2)
|
||||||
data: { name: "test" },
|
|
||||||
}
|
|
||||||
|
|
||||||
const blankCliConf: ScaffoldCmdConfig & OptionsBase = {
|
|
||||||
verbose: 0,
|
|
||||||
name: "",
|
|
||||||
output: "",
|
|
||||||
templates: [],
|
|
||||||
data: { name: "test" },
|
|
||||||
overwrite: false,
|
|
||||||
createSubFolder: false,
|
|
||||||
dryRun: false,
|
|
||||||
quiet: false,
|
|
||||||
extras: [],
|
|
||||||
help: false,
|
|
||||||
}
|
|
||||||
|
|
||||||
describe("Utils", () => {
|
|
||||||
describe("handlebarsParse", () => {
|
|
||||||
let origSep: any
|
|
||||||
describe("windows paths", () => {
|
|
||||||
beforeAll(() => {
|
|
||||||
origSep = path.sep
|
|
||||||
Object.defineProperty(path, "sep", { value: "\\" })
|
|
||||||
})
|
|
||||||
afterAll(() => {
|
|
||||||
Object.defineProperty(path, "sep", { value: origSep })
|
|
||||||
})
|
|
||||||
test("should work for windows paths", async () => {
|
|
||||||
expect(handlebarsParse(blankConf, "C:\\exports\\{{name}}.txt", { isPath: true })).toEqual(
|
|
||||||
Buffer.from("C:\\exports\\test.txt"),
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
describe("non-windows paths", () => {
|
test("should resolve value", () => {
|
||||||
beforeAll(() => {
|
expect(resolve(1, null)).toBe(1)
|
||||||
origSep = path.sep
|
expect(resolve(2, 1)).toBe(2)
|
||||||
Object.defineProperty(path, "sep", { value: "/" })
|
|
||||||
})
|
|
||||||
afterAll(() => {
|
|
||||||
Object.defineProperty(path, "sep", { value: origSep })
|
|
||||||
})
|
|
||||||
test("should work for non-windows paths", async () => {
|
|
||||||
expect(handlebarsParse(blankConf, "/home/test/{{name}}.txt", { isPath: true })).toEqual(
|
|
||||||
Buffer.from("/home/test/test.txt"),
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
test("should not do path escaping on non-path compiles", async () => {
|
|
||||||
expect(
|
|
||||||
handlebarsParse(
|
|
||||||
{ ...blankConf, data: { ...blankConf.data, escaped: "value" } },
|
|
||||||
"/home/test/{{name}} \\{{escaped}}.txt",
|
|
||||||
{
|
|
||||||
isPath: false,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
).toEqual(Buffer.from("/home/test/test {{escaped}}.txt"))
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("Helpers", () => {
|
describe("handleErr", () => {
|
||||||
describe("date helpers", () => {
|
test("should throw error", () => {
|
||||||
describe("now", () => {
|
expect(() => handleErr({ name: "test", message: "test" })).toThrow()
|
||||||
test("should work without extra params", () => {
|
expect(() => handleErr(null as never)).not.toThrow()
|
||||||
const now = new Date()
|
|
||||||
const fmt = "yyyy-MM-dd HH:mm"
|
|
||||||
|
|
||||||
expect(nowHelper(fmt)).toEqual(dateFns.format(now, fmt))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe("date", () => {
|
|
||||||
test("should work with no offset params", () => {
|
|
||||||
const now = new Date()
|
|
||||||
const fmt = "yyyy-MM-dd HH:mm"
|
|
||||||
|
|
||||||
expect(dateHelper(now.toISOString(), fmt)).toEqual(dateFns.format(now, fmt))
|
|
||||||
})
|
|
||||||
|
|
||||||
test("should work with offset params", () => {
|
|
||||||
const now = new Date()
|
|
||||||
const fmt = "yyyy-MM-dd HH:mm"
|
|
||||||
|
|
||||||
expect(dateHelper(now.toISOString(), fmt, -1, "days")).toEqual(
|
|
||||||
dateFns.format(dateFns.add(now, { days: -1 }), fmt),
|
|
||||||
)
|
|
||||||
expect(dateHelper(now.toISOString(), fmt, 1, "months")).toEqual(
|
|
||||||
dateFns.format(dateFns.add(now, { months: 1 }), fmt),
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe("parseAppendData", () => {
|
|
||||||
test('works for "key=value"', () => {
|
|
||||||
expect(parseAppendData("key=value", blankCliConf)).toEqual({ key: "value", name: "test" })
|
|
||||||
})
|
|
||||||
|
|
||||||
test('works for "key:=value"', () => {
|
|
||||||
expect(parseAppendData("key:=123", blankCliConf)).toEqual({ key: 123, name: "test" })
|
|
||||||
})
|
|
||||||
|
|
||||||
test("overwrites existing value", () => {
|
|
||||||
expect(parseAppendData("name:=123", blankCliConf)).toEqual({ name: 123 })
|
|
||||||
})
|
|
||||||
|
|
||||||
test("works with quotes", () => {
|
|
||||||
expect(parseAppendData('key="value test"', blankCliConf)).toEqual({ key: "value test", name: "test" })
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user