Compare commits

...

105 Commits

Author SHA1 Message Date
698674b46d fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-03-17 14:06:43 +01:00
eb1a668738 update standard package
Some checks failed
continuous-integration/drone/push Build is failing
2022-03-17 14:06:02 +01:00
95c90f2877 remove jasmine-ts
Some checks failed
continuous-integration/drone/push Build is failing
2022-03-17 13:03:01 +01:00
5a3c7574aa fix
All checks were successful
continuous-integration/drone/push Build is passing
2021-12-21 16:05:48 +01:00
11f8781a0d use standard jasmine-ts
Some checks failed
continuous-integration/drone/push Build is failing
2021-12-21 16:04:48 +01:00
191cd90c2d update
Some checks failed
continuous-integration/drone/push Build is failing
2021-03-18 10:35:49 +01:00
b9bdd6bc9f fix
All checks were successful
continuous-integration/drone/push Build is passing
2021-01-26 21:22:34 +01:00
3e4e5bba1c fix node init
All checks were successful
continuous-integration/drone/push Build is passing
2021-01-26 21:14:09 +01:00
09530c439f update standards
All checks were successful
continuous-integration/drone/push Build is passing
2020-10-21 07:55:05 +02:00
702b2dae29 fix
All checks were successful
continuous-integration/drone/push Build is passing
2020-09-25 20:54:13 +02:00
f38ff47fe2 fix, create tests folder
Some checks failed
continuous-integration/drone/push Build is failing
2020-09-24 12:21:56 +02:00
da8c39c91b switch node template to jasmine
All checks were successful
continuous-integration/drone/push Build is passing
2020-09-24 12:08:31 +02:00
d3a568cfe4 switch to jasmine (wip)
Some checks failed
continuous-integration/drone/push Build is failing
2020-09-24 08:11:44 +02:00
3fac2ba503 update-scanner: automatic update
Some checks failed
continuous-integration/drone/push Build is failing
@types/node: 14.6.2 ==> 14.6.4 minor
eslint: 7.7.0 ==> 7.8.1 minor
2020-09-07 13:46:47 +02:00
b43bbe3459 update-scanner: automatic update
Some checks failed
continuous-integration/drone/push Build is failing
@types/node: 14.6.0 ==> 14.6.2 minor
2020-08-30 16:07:11 +02:00
58753bbd01 upgrade typescript
All checks were successful
continuous-integration/drone/push Build is passing
2020-08-21 13:18:00 +02:00
87995d515f update-scanner: automatic update
Some checks failed
continuous-integration/drone/push Build is failing
@types/node: 14.0.27 ==> 14.6.0 minor
eslint: 7.6.0 ==> 7.7.0 minor
2020-08-19 08:37:46 +02:00
0366226d79 fix drone config
Some checks failed
continuous-integration/drone/push Build is failing
2020-08-07 10:28:29 +02:00
636e32c64f update-scanner: automatic update
Some checks failed
continuous-integration/drone/push Build is failing
@sapphirecode/standard: 1.2.4 ==> 1.3.1 minor
2020-08-06 12:26:06 +02:00
db8f88047b update-scanner: automatic update
Some checks failed
continuous-integration/drone/push Build is failing
@types/node: 14.0.26 ==> 14.0.27 minor
eslint: 7.5.0 ==> 7.6.0 minor
2020-08-04 13:09:31 +02:00
64ed038b30 readme template: allow author in object format
All checks were successful
continuous-integration/drone/push Build is passing
2020-07-25 18:58:28 +02:00
d097ba4ad7 update-scanner: automatic update
All checks were successful
continuous-integration/drone/push Build is passing
@sapphirecode/eslint-config-ts: 1.1.21 ==> 1.1.22 minor
@types/node: 14.0.23 ==> 14.0.26 minor
2020-07-25 16:58:48 +02:00
530c215088 remove unnecessary dependencies
Some checks failed
continuous-integration/drone/push Build is failing
2020-07-25 16:15:37 +02:00
93f4592d16 adapt to new package ci standards, fix test modules getting installed on non test projects
All checks were successful
continuous-integration/drone/push Build is passing
2020-07-19 20:11:54 +02:00
0027bd9152 update-scanner: automatic update
All checks were successful
continuous-integration/drone/push Build is passing
@sapphirecode/console-app: 2.1.1 ==> 2.1.2 minor
@sapphirecode/eslint-config-ts: 1.1.20 ==> 1.1.21 minor
@sapphirecode/modelling: 1.1.10 ==> 1.1.11 minor
@sapphirecode/standard: 1.2.3 ==> 1.2.4 minor
2020-07-19 15:17:47 +02:00
3a92db14de fix
Some checks failed
continuous-integration/drone/push Build is failing
2020-07-19 13:53:56 +02:00
d76d0ad1fb update-scanner: automatic update
Some checks failed
continuous-integration/drone/push Build is failing
@sapphirecode/console-app: 2.0.10 ==> 2.1.1 minor
@sapphirecode/standard: 1.2.1 ==> 1.2.3 minor
eslint: 7.4.0 ==> 7.5.0 minor
typescript: 3.9.6 ==> 3.9.7 minor
2020-07-19 12:21:55 +02:00
b07be17744 update-scanner: automatic update
All checks were successful
continuous-integration/drone/push Build is passing
@sapphirecode/console-app: 2.0.9 ==> 2.0.10 minor
@sapphirecode/eslint-config-ts: 1.1.19 ==> 1.1.20 minor
@sapphirecode/modelling: 1.1.9 ==> 1.1.10 minor
@types/node: 14.0.20 ==> 14.0.23 minor
2020-07-16 10:58:16 +02:00
a9b1052d9c update-scanner: automatic update
All checks were successful
continuous-integration/drone/push Build is passing
@sapphirecode/console-app: 2.0.7 ==> 2.0.9 minor
@sapphirecode/eslint-config-ts: 1.1.17 ==> 1.1.19 minor
@sapphirecode/modelling: 1.1.7 ==> 1.1.9 minor
@sapphirecode/standard: 1.2.0 ==> 1.2.1 minor
2020-07-10 12:43:26 +02:00
bff56aa9d5 fix
All checks were successful
continuous-integration/drone/push Build is passing
2020-07-09 22:05:27 +02:00
3ac16d0b16 trigger build 2020-07-09 22:02:54 +02:00
64eafe7c20 adapt to drone 2020-07-09 22:00:59 +02:00
813cda4183 fix changelog 2020-07-04 16:56:58 +02:00
20c3780f8e Merge branch 'dev' 2020-07-04 16:49:54 +02:00
ba16c60168 remove database snippet 2020-07-04 16:49:16 +02:00
043759f707 update-scanner: automatic update
@sapphirecode/console-app: 2.0.6 ==> 2.0.7 minor
@sapphirecode/eslint-config-ts: 1.1.16 ==> 1.1.17 minor
@sapphirecode/modelling: 1.1.6 ==> 1.1.7 minor
@sapphirecode/standard: 1.1.8 ==> 1.1.9 minor
2020-07-01 09:42:11 +02:00
46be34c4b0 add copyright 2020-06-28 17:02:46 +02:00
3e773b5327 fix 2020-06-28 16:55:44 +02:00
146c9b661f initial menu design, simpler patch serialization 2020-06-28 14:51:37 +02:00
214b113865 complete feature 2020-06-27 19:50:34 +02:00
336edb84b1 fix 2020-06-27 19:42:46 +02:00
d7d30fd417 carry previous date string 2020-06-27 19:36:46 +02:00
6ff99c827d update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.1.14 ==> 1.1.16 minor
@sapphirecode/standard: 1.1.7 ==> 1.1.8 minor
@types/node: 14.0.13 ==> 14.0.14 minor
eslint: 7.3.0 ==> 7.3.1 minor
2020-06-24 13:01:13 +02:00
e3ddb9a069 update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.1.13 ==> 1.1.14 minor
@sapphirecode/standard: 1.1.6 ==> 1.1.7 minor
eslint: 7.2.0 ==> 7.3.0 minor
2020-06-22 08:31:34 +02:00
1519290c1d update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.1.12 ==> 1.1.13 minor
2020-06-19 13:19:13 +02:00
e617141a5c update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.1.11 ==> 1.1.12 minor
@sapphirecode/standard: 1.1.5 ==> 1.1.6 minor
@types/node: 14.0.10 ==> 14.0.13 minor
eslint: 7.1.0 ==> 7.2.0 minor
typescript: 3.9.3 ==> 3.9.5 minor
2020-06-11 20:41:27 +02:00
830c82d69d update-scanner: automatic update
@sapphirecode/standard: 1.1.4 ==> 1.1.5 minor
@types/node: 14.0.9 ==> 14.0.10 minor
fs-extra: 9.0.0 ==> 9.0.1 minor
2020-06-04 11:44:37 +02:00
aba411a17a update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.1.10 ==> 1.1.11 minor
@sapphirecode/standard: 1.1.3 ==> 1.1.4 minor
@types/node: 14.0.5 ==> 14.0.9 minor
2020-06-02 08:58:26 +02:00
92cb9d5c21 update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.1.9 ==> 1.1.10 minor
2020-05-28 08:57:02 +02:00
32deb35fec fix 2020-05-24 19:43:13 +02:00
cd7041c2e1 update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.1.7 ==> 1.1.9 minor
@sapphirecode/standard: 1.0.28 ==> 1.1.3 minor
@types/fs-extra: 9.0.0 ==> 9.0.1 minor
@types/node: 14.0.1 ==> 14.0.5 minor
eslint: 7.0.0 ==> 7.1.0 minor
typescript: 3.9.2 ==> 3.9.3 minor
2020-05-23 18:33:05 +02:00
97d4756eb1 update 2020-05-17 19:55:04 +02:00
b1a53a3ad1 update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.0.45 ==> 1.1.7 minor
@sapphirecode/standard: 1.0.18 ==> 1.0.28 minor
@types/fs-extra: 8.1.0 ==> 9.0.0 major
@types/node: 13.13.6 ==> 14.0.1 major
eslint: 6.8.0 ==> 7.0.0 major
2020-05-17 19:49:50 +02:00
c54fba0483 fix 2020-05-17 16:12:00 +02:00
c68be00e16 update jenkins.js 2020-05-15 13:17:34 +02:00
08ec8d9182 fix 2020-05-13 21:12:29 +02:00
190f20c7b9 fix readme 2020-05-13 21:09:03 +02:00
d55b752958 remove link to package quality, as the site seems to be unmaintained 2020-05-13 21:06:20 +02:00
b87c5bf2f1 adapt jenkins.js 2020-05-13 16:08:05 +02:00
9a0a4a4201 add version to readme 2020-05-13 11:39:46 +02:00
8e3a19221d update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.0.44 ==> 1.0.45 minor
@sapphirecode/standard: 1.0.14 ==> 1.0.18 minor
@types/node: 13.13.5 ==> 14.0.1 major
eslint: 6.8.0 ==> 7.0.0 major
typescript: 3.8.3 ==> 3.9.2 minor
2020-05-13 11:15:26 +02:00
a6da0f6836 description without blockquote 2020-05-11 12:21:18 +02:00
21411e8684 fixing badge again 2020-05-11 12:20:46 +02:00
20e66788c2 fix 2020-05-11 12:18:39 +02:00
f4b7366d49 readme 2020-05-11 12:12:28 +02:00
4e76cf3d5c disable wip snippets 2020-05-11 12:01:39 +02:00
f0a67a5d84 fix 2020-05-11 11:34:16 +02:00
be004c5e02 readme template 2020-05-11 11:33:34 +02:00
8880a72560 update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.0.43 ==> 1.0.44 minor
@sapphirecode/standard: 1.0.13 ==> 1.0.14 minor
2020-05-08 13:53:34 +02:00
3545ba6a48 fix 2020-05-08 09:58:49 +02:00
6b0b40a292 update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.0.41 ==> 1.0.43 minor
2020-05-07 19:35:02 +02:00
c25b352041 fixes 2020-05-07 18:40:35 +02:00
ab66113c89 update-scanner: automatic update
@sapphirecode/eslint-config-ts: 1.0.38 ==> 1.0.41 minor
@sapphirecode/standard: 1.0.12 ==> 1.0.13 minor
2020-05-07 10:43:39 +02:00
3a5cc47424 update-scanner: automatic update
@sapphirecode/standard: 1.0.11 ==> 1.0.12 minor
2020-05-06 10:10:07 +02:00
3bc5d16f8a update 2020-05-06 08:36:48 +02:00
83b5cd054b fix 2020-05-06 07:50:58 +02:00
cb169f9242 fix 2020-05-06 07:45:16 +02:00
5ec439cd1e fix 2020-05-06 07:33:11 +02:00
048dee838a fix publish 2020-05-05 19:50:17 +02:00
1b182c9932 move to @sapphirecode scope 2020-05-05 19:23:52 +02:00
476111c1b6 update-scanner: automatic update
@scode/standard: 1.0.7 ==> 1.0.8 minor
2020-05-04 21:52:22 +02:00
e8b22b84ca update-scanner: automatic update
@scode/eslint-config-ts: 1.0.29 ==> 1.0.31 minor
@scode/standard: 1.0.4 ==> 1.0.7 minor
2020-05-04 21:20:18 +02:00
ebff7dc7f4 update 2020-05-04 12:32:17 +02:00
c9fd021634 fixes, option for no tests 2020-05-04 12:31:38 +02:00
91869b3183 standardization 2020-05-04 12:23:06 +02:00
a7180f9e50 update-scanner: automatic update
@scode/eslint-config-ts: 1.0.27 ==> 1.0.29 minor
2020-05-03 18:35:14 +02:00
bbdfaf1791 update-scanner: automatic update
@scode/eslint-config-ts: 1.0.26 ==> 1.0.27 minor
2020-05-02 17:18:41 +02:00
6e48707ec2 update-scanner: automatic update
@scode/eslint-config-ts: 1.0.23 ==> 1.0.26 minor
2020-04-28 07:43:37 +02:00
0d1b3aac2e fix 2020-04-27 13:54:10 +02:00
9663fc3579 update-scanner: automatic update
@scode/eslint-config-ts: 1.0.22 ==> 1.0.23 minor
@types/node: 13.13.2 ==> 13.13.4 minor
2020-04-27 13:04:23 +02:00
d38cfb041c log error instead of promise rejection 2020-04-27 10:18:12 +02:00
deacaa76a1 ignore d.ts files 2020-04-27 10:12:51 +02:00
650cdf7476 fix 2020-04-27 08:51:53 +02:00
0edf59ba24 fix 2020-04-26 12:07:23 +02:00
cae2b2ad75 fix 2020-04-26 12:04:10 +02:00
b69e6a36c3 license in file + package json 2020-04-26 11:57:42 +02:00
cd7c757daf tsc on test when typescript on 2020-04-26 11:57:32 +02:00
a6e607334c remove unnecessary file 2020-04-26 11:45:22 +02:00
f95226c7f0 remove trailing space 2020-04-24 12:08:30 +02:00
45b64b3aca fix 2020-04-24 10:19:02 +02:00
32410bab93 output declarations by default 2020-04-23 18:09:42 +02:00
17bf48d7cc fix 2020-04-23 17:58:04 +02:00
8bc26b384e fixes 2020-04-23 17:51:19 +02:00
fee3f55300 fix 2020-04-23 17:44:14 +02:00
4dcfde8316 fixes 2020-04-23 17:39:18 +02:00
45 changed files with 1504 additions and 3418 deletions

14
.drone.yml Normal file
View File

@ -0,0 +1,14 @@
kind: pipeline
name: default
steps:
- name: setup
image: registry:5000/node-build
commands:
- yarn
- curl https://git.scode.ovh/Timo/standard/raw/branch/master/ci.js > ci.js
- name: build
image: registry:5000/node-build
commands:
- node ci.js

View File

@ -2,23 +2,21 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
'use strict';
module.exports = {
env: {
commonjs: true,
es6: true,
node: true
es6: true,
node: true
},
extends: [
'@scode'
],
extends: [ '@sapphirecode' ],
globals: {
Atomics: 'readonly',
Atomics: 'readonly',
SharedArrayBuffer: 'readonly'
},
parserOptions: {
ecmaVersion: 2018
}
}
parserOptions: { ecmaVersion: 2018 }
};

1
.gitignore vendored
View File

@ -3,3 +3,4 @@
# stryker temp files
.stryker-tmp
*.log

1
.npmrc
View File

@ -1 +0,0 @@
@scode:registry=https://npm.scode.ovh

21
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,21 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}\\index.js",
"outFiles": [
"${workspaceFolder}/**/*.js"
],
"console": "externalTerminal"
}
]
}

28
CHANGELOG.md Normal file
View File

@ -0,0 +1,28 @@
# Changelog
## 1.5.0
Node template: use jasmine instead of ava
## 1.4.0
Drone template
Jenkins template: remove node specific template (replaced by drone)
## 1.3.0
Copyright function: carry previous creation date to prevent unnecessary modifications
## 1.2.0
- Fully interactive snippets
- db migration generator removed
## 1.1.0
Knex database migration generator
## 1.0.0
initial version

23
Jenkinsfile vendored
View File

@ -1,23 +0,0 @@
pipeline {
agent any
environment {
VERSION = VersionNumber([
versionNumberString:
'${BUILDS_ALL_TIME}',
versionPrefix: '1.2.',
worstResultForIncrement: 'SUCCESS'
])
}
stages {
stage('Building') {
steps {
script {
currentBuild.displayName = env.VERSION
}
sh 'yarn ci ${VERSION}'
}
}
}
}

30
LICENSE
View File

@ -1,29 +1,11 @@
Copyright (c) 2020, Timo Hocker
Copyright (c) <year> <author>. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
All rights reserved.
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of snippeteer nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,60 +1,58 @@
# Snippeteer
# @sapphirecode/snippeteer
version: 1.5.x
macros for setting up projects or project parts
## Installation
to work with the @scode scope you have to add the following line to your npmrc.
for this particular one you'll have to add it to the global npmrc stored in your home folder (~/.npmrc)
> npm i -g @sapphirecode/snippeteer
```npmrc
@scode:registry=https://npm.scode.ovh
```
## Requirements
then install the module using the following command
installed on the system:
```sh
npm i -g @scode/snippeteer
```
- yarn
- git
## Usage
```sh
snippeteer [snippet] [..args]
```
run `snippeteer` in console and choose a snippet, all necessary parameters will
be asked interactively
All snippets will be executed relative to your current working directory!
### Snippets
## Snippets
#### copyright
### Snippet
add copyright notice to .js, .ts and .mjs files, as well was generating a
license file and adding fields like author and license to the package.json
Creates a new snippet template
#### jenkins
```sh
snippeteer snippet [name]
```
create a generic jenkinsfile
### Node
#### drone
Creates a new nodejs project
create a generic .drone.yml for deployment of node projects
```sh
snippeteer node [name]
```
necessary scripts in the package.json:
### Jenkins
- ci: `yarn --frozen-lockfile && node jenkins.js`
- compile: `tsc` or
`tsc --allowJs --declaration --emitDeclarationOnly index.js`, ...
Adds files necessary for jenkins
compile should be the general compile task, for typescript: tsc, for commonjs:
creating type definitions, ...
optionally with a js script for npm modules by adding 'node' as argument
#### node
```sh
snippeteer jenkins [node]
```
initializes a node project with the standard structure used by sapphirecode
modules
### Vue
#### readme
Adds files, dependencies and scripts for vue to a nodejs project
create a template readme file
```sh
snippeteer vue
```
## License
BSD-3-Clause © Timo Hocker <timo@scode.ovh>

View File

@ -1,39 +0,0 @@
pipeline {
agent any
environment {
VERSION = VersionNumber([
versionNumberString:
'${BUILDS_ALL_TIME}',
versionPrefix: '1.0.',
worstResultForIncrement: 'SUCCESS'
])
publish = 0
}
stages {
stage('Setup') {
steps {
script {
currentBuild.displayName = env.VERSION
}
echo 'Setting up test environment'
sh 'echo setup'
}
}
}
post {
success {
script {
publish = sh script: "git log -1 | grep '\\[no publish\\]'", returnStatus: true
if (publish != 0) {
echo 'Deploying'
sh 'echo deploy'
} else {
echo 'Build successful, Commit not marked for deploying'
currentBuild.result = "UNSTABLE"
}
}
}
}
}

View File

@ -1,23 +0,0 @@
pipeline {
agent any
environment {
VERSION = VersionNumber([
versionNumberString:
'${BUILDS_ALL_TIME}',
versionPrefix: '1.0.',
worstResultForIncrement: 'SUCCESS'
])
}
stages {
stage('Building') {
steps {
script {
currentBuild.displayName = env.VERSION
}
sh 'yarn ci ${VERSION}'
}
}
}
}

View File

@ -1,28 +0,0 @@
/* eslint-disable no-process-exit */
/* eslint-disable no-console */
/* eslint-disable no-sync */
'use strict';
const fs = require ('fs');
const child_process = require ('child_process');
const pkg = JSON.parse (fs.readFileSync ('package.json', 'utf-8'));
[
,, pkg.version
] = process.argv;
fs.writeFileSync ('package.json', JSON.stringify (pkg, null, 2));
child_process.execSync ('yarn lint', { stdio: 'inherit' });
if (typeof pkg.scripts !== 'undefined' && typeof pkg.scripts.test === 'string')
child_process.execSync ('yarn test', { stdio: 'inherit' });
if (typeof pkg.scripts !== 'undefined' && typeof pkg.scripts.compile === 'string')
child_process.execSync ('yarn compile', { stdio: 'inherit' });
child_process.exec ('git log -1 | grep \'\\[no publish\\]\'')
.addListener ('exit', (code) => {
if (code === 0) {
console.log ('build not marked for deployment');
process.exit (1);
}
else { child_process.execSync ('yarn publish'); }
});

View File

@ -4,7 +4,7 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
'use strict';

View File

@ -1,33 +0,0 @@
/*
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
*/
/* eslint-disable no-process-exit */
/* eslint-disable no-console */
/* eslint-disable no-sync */
'use strict';
const fs = require ('fs');
const child_process = require ('child_process');
const pkg = JSON.parse (fs.readFileSync ('package.json', 'utf-8'));
[
,, pkg.version
] = process.argv;
fs.writeFileSync ('package.json', JSON.stringify (pkg, null, 2));
child_process.execSync ('yarn lint', { stdio: 'inherit' });
if (typeof pkg.scripts !== 'undefined' && typeof pkg.scripts.test === 'string')
child_process.execSync ('yarn test', { stdio: 'inherit' });
child_process.exec ('git log -1 | grep \'\\[no publish\\]\'')
.addListener ('exit', (code) => {
if (code === 0) {
console.log ('build not marked for deployment');
process.exit (1);
}
else { child_process.execSync ('yarn publish'); }
});

View File

@ -2,23 +2,23 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
/* eslint-disable */
'use strict';
module.exports = {
env: {
commonjs: true,
es6: true,
node: true
es6: true,
node: true
},
extends: [
'@scode/eslint-config-ts'
],
extends: [ '@sapphirecode/eslint-config-ts' ],
globals: {
Atomics: 'readonly',
Atomics: 'readonly',
SharedArrayBuffer: 'readonly'
},
parserOptions: {
ecmaVersion: 2018
}
}
parserOptions: { ecmaVersion: 2018 }
};

View File

@ -1,3 +1,10 @@
/*
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
import path from 'path';
import child_process from 'child_process';
import fs from 'fs-extra';
@ -5,8 +12,8 @@ import fs from 'fs-extra';
/**
* write a template to a file
*
* @param {string} contents file contents
* @param {string} destination file destination
* @param contents - file contents
* @param destination - file destination
*/
async function apply_template (
contents: string,
@ -27,8 +34,8 @@ type JSONMutator = {
/**
* modify a json file
*
* @param {Function} func function that modifies the object
* @param {string} json_path path of json file
* @param func - function that modifies the object
* @param json_path - path of json file
*/
async function modify_json (
func: JSONMutator,
@ -37,14 +44,16 @@ async function modify_json (
const file_path = path.join (process.cwd (), json_path);
const content = JSON.parse (await fs.readFile (file_path, 'utf-8'));
const new_obj = await func (content);
if (typeof new_obj === 'undefined' || new_obj === null)
return;
await fs.writeFile (file_path, JSON.stringify (new_obj, null, 2));
}
/**
* run a command
*
* @param {string} command command to run
* @param {string} folder folder to run in
* @param command - command to run
* @param folder - folder to run in
*/
function run_command (command: string, folder = ''): void {
// eslint-disable-next-line no-sync

View File

@ -2,9 +2,10 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
export interface Snippet {
is_active(): boolean;
start(cwd: string): Promise<void>;
}

View File

@ -2,7 +2,7 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
export class DialogHandler {

2
lib/enquirer.d.ts vendored
View File

@ -2,7 +2,7 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
declare module 'enquirer';

View File

@ -2,7 +2,7 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
import path from 'path';
@ -12,15 +12,22 @@ import { Snippet } from './Snippet';
(async (): Promise<void> => {
const snippets = await fs.readdir (path.join (__dirname, 'snippets'));
const snippet = await new AutoComplete (
{
name: 'snippet',
message: 'choose a snippet',
choices: snippets
}
)
const runners: Record<string, Snippet> = {};
await Promise.all (
snippets.map (async (s) => {
const runner = (new (
await import (`./snippets/${s}/index.js`)
).default) as Snippet;
runners[s] = runner;
})
);
const snippet = await new AutoComplete ({
name: 'snippet',
message: 'choose a snippet',
choices: snippets.filter ((s) => runners[s].is_active ())
})
.run ();
const runner
= new (await import (`./snippets/${snippet}/index.js`)).default as Snippet;
runner.start (process.cwd ());
}) ();
runners[snippet].start (process.cwd ());
}) ()
// eslint-disable-next-line no-console
.catch ((e) => console.log (e));

View File

@ -2,20 +2,25 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
import { CopyrightOptions } from './copyright_options';
export class CopyrightGenerator {
public static get_copyright_notice (
opt: CopyrightOptions
opt: CopyrightOptions,
date_str?: string
): string {
let notice = '';
const date = (new Date);
const dtf = new Intl.DateTimeFormat ('en', { month: 'long' });
const year = date.getFullYear ();
const month = dtf.format (date);
let date_string = date_str;
if (typeof date_str === 'undefined') {
const date = (new Date);
const dtf = new Intl.DateTimeFormat ('en', { month: 'long' });
const year = date.getFullYear ();
const month = dtf.format (date);
date_string = `${month} ${year}`;
}
if (opt.has_license) {
notice = `${'/*'}
@ -23,7 +28,7 @@ export class CopyrightGenerator {
* This file is part of ${opt.software} which is released under ${
opt.license}.
* See file 'LICENSE' for full license details.
* Created by ${opt.author} <${opt.email}>, ${month} ${year}
* Created by ${opt.author} <${opt.email}>, ${date_string}
*/
`;
@ -31,7 +36,7 @@ export class CopyrightGenerator {
else {
notice = `${'/*'}
* Copyright (C) ${opt.company || opt.author} - All Rights Reserved
* Created by ${opt.author} <${opt.email}>, ${month} ${year}
* Created by ${opt.author} <${opt.email}>, ${date_string}
*/
`;

View File

@ -2,7 +2,7 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
export class CopyrightOptions {

View File

@ -2,7 +2,7 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
/* eslint-disable no-await-in-loop */
@ -12,8 +12,8 @@ import fs from 'fs-extra';
export class FileMapper {
public static async map_all_files (
folder: string,
mutator: Function,
args: Array<unknown> = []
mutator: (data: string, file: string, args: Array<unknown>) => string|null,
opts: Array<unknown> = []
): Promise<void> {
const files = await fs.readdir (folder);
for (const file of files) {
@ -21,11 +21,11 @@ export class FileMapper {
continue;
const abs_path = path.join (folder, file);
if ((await fs.stat (abs_path)).isDirectory ()) {
await FileMapper.map_all_files (abs_path, mutator, args);
await FileMapper.map_all_files (abs_path, mutator, opts);
continue;
}
const data = await fs.readFile (abs_path, 'utf-8');
const res = mutator (data, file, args);
const res = mutator (data, file, opts);
if (res === null)
continue;
await fs.writeFile (abs_path, res, 'utf-8');

View File

@ -2,7 +2,7 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
/* eslint-disable no-await-in-loop */
@ -10,59 +10,85 @@ import path from 'path';
import fs from 'fs-extra';
import { Confirm, Input, AutoComplete } from 'enquirer';
// eslint-disable-next-line id-match
import { findLicense } from 'license';
import { findLicense, getLicense } from 'license';
import { Snippet } from '../../Snippet';
import { DialogHandler } from '../../dialog';
import { modify_json } from '../../Helper';
import { CopyrightGenerator } from './copyright_generator';
import { FileMapper } from './file_mapper';
import { CopyrightOptions } from './copyright_options';
export default class Copyright implements Snippet {
private options: CopyrightOptions | null = null;
private cwd = '';
private loaded_from_config = false;
public is_active (): boolean {
return true;
}
private _options: CopyrightOptions | null = null;
private _cwd = '';
private _loaded_from_config = false;
async start (cwd: string): Promise<void> {
this.cwd = cwd;
this._cwd = cwd;
await this.load_options_file ();
if (!this.options)
if (!this._options)
await this.gather_options ();
const options = this._options as CopyrightOptions;
await FileMapper.map_all_files (
this.cwd,
this._cwd,
this.fix_file_license.bind (this)
);
if (!this.loaded_from_config && await new Confirm (
{ message: 'should those settings be saved for the next run?' }
await modify_json ((json) => {
json.author = { name: options.author, email: options.email };
json.license = options.has_license ? options.license : 'UNLICENSED';
return json;
});
if (options.has_license) {
await fs.writeFile (
path.join (cwd, 'LICENSE'),
getLicense (options.license, {
name: options.author,
email: options.email,
project: options.software
})
);
}
if (
!this._loaded_from_config
&& (await new Confirm (
{ message: 'should those settings be saved for the next run?' }
)
.run ()
.catch (DialogHandler.catch))
)
.run ()
.catch (DialogHandler.catch))
this.save_options_file ();
}
private async gather_options (): Promise<void> {
this.options = (new CopyrightOptions);
this.options.author = await new Input ({ message: 'author' })
this._options = (new CopyrightOptions);
this._options.author = await new Input ({ message: 'author' })
.run ()
.catch (DialogHandler.catch);
this.options.email = await new Input ({ message: 'email' })
this._options.email = await new Input ({ message: 'email' })
.run ()
.catch (DialogHandler.catch);
this.options.company = await new Input ({ message: 'company' })
this._options.company = await new Input ({ message: 'company' })
.run ()
.catch (DialogHandler.catch);
this.options.software = await new Input ({ message: 'software name' })
this._options.software = await new Input ({ message: 'software name' })
.run ()
.catch (DialogHandler.catch);
this.options.has_license = await new Confirm ({
message:
'would you like to specify a license?'
})
this._options.has_license = await new Confirm (
{ message: 'would you like to specify a license?' }
)
.run ()
.catch (DialogHandler.catch);
if (this.options.has_license) {
this.options.license = await new AutoComplete ({
if (this._options.has_license) {
this._options.license = await new AutoComplete ({
name: 'license',
message: 'choose a license',
limit: 10,
@ -74,13 +100,11 @@ export default class Copyright implements Snippet {
}
private async load_options_file (): Promise<void> {
const file_path = path.join (this.cwd, '.liconfig.json');
this.options = null;
const file_path = path.join (this._cwd, '.liconfig.json');
this._options = null;
if (await fs.pathExists (file_path)) {
const options = JSON.parse (
await fs.readFile (file_path, 'utf-8')
);
const options = JSON.parse (await fs.readFile (file_path, 'utf-8'));
// eslint-disable-next-line no-console
console.log (`author: ${options.author}
@ -94,36 +118,38 @@ license: ${options.license}`);
.run ()
.catch (DialogHandler.catch);
if (should_load) {
this.options = options;
this.loaded_from_config = true;
this._options = options;
this._loaded_from_config = true;
}
}
}
private async save_options_file (): Promise<void> {
const file_path = path.join (this.cwd, '.liconfig.json');
const file_path = path.join (this._cwd, '.liconfig.json');
await fs.writeFile (
file_path,
JSON.stringify (this.options, null, 2),
JSON.stringify (this._options, null, 2),
'utf-8'
);
}
private fix_file_license (
data: string,
filename: string
): string | null {
const regex = /\/\*\s+\*\sCopyright[\s\S]*?\*\/\n{0,2}/gu;
private fix_file_license (data: string, filename: string): string | null {
// eslint-disable-next-line max-len
const regex = /\/\*\s+\*\sCopyright[\s\S]*?(?:Created by.*?, (?<date>[a-z]+ [0-9]+)[\s\S]*?|\s)\*\/\n{0,2}/gui;
const shebang = /^#!.*?\n\n/gu;
const shebang_line = shebang.exec (data);
if (!(/\.(?:js|ts|mjs)$/u).test (filename) && !regex.test (data))
return null;
return (shebang_line ? shebang_line[0] : '')
+ CopyrightGenerator.get_copyright_notice (
this.options as CopyrightOptions
)
+ data.replace (regex, '')
.replace (shebang, '');
const res = regex.exec (data);
return (
(shebang_line ? shebang_line[0] : '')
+ CopyrightGenerator.get_copyright_notice (
this._options as CopyrightOptions,
res?.groups?.date
)
+ data.replace (regex, '')
.replace (shebang, '')
);
}
}

View File

@ -1,13 +0,0 @@
import { ColumnType } from './ColumnType';
import { Relation } from './Relation';
export class Column {
public name: string;
public type: ColumnType;
public relation?: Relation;
public constructor (name: string, type: ColumnType) {
this.name = name;
this.type = type;
}
}

View File

@ -1,20 +0,0 @@
export enum ColumnType {
string = 'string',
text = 'text',
integer = 'integer',
big_integer = 'bigInteger',
float = 'float',
decimal = 'decimal',
increments = 'increments',
big_increments = 'bigIncrements',
boolean = 'boolean',
date = 'date',
date_time ='datetime',
time = 'time',
timestamp = 'timestamp',
binary = 'binary',
enum = 'enu',
json='json',
jsonb='jsonb',
uuid='uuid'
}

View File

@ -1,14 +0,0 @@
import { Table } from './Table';
export class Database {
public tables: Array<Table> = [];
public get_table (name: string): Table|null {
for (const table of this.tables) {
if (table.name === name)
return table;
}
return null;
}
}

View File

@ -1,5 +0,0 @@
import { Database } from './Database';
export interface PatchAction {
apply(db: Database): void;
}

View File

@ -1,15 +0,0 @@
export enum PatchActions {
rename_column = 'rc',
add_column = 'ac',
drop_column = 'dc',
add_relation = 'ar',
drop_relation = 'dr',
set_column_type = 'tc',
add_table = 'at',
drop_table = 'dt',
rename_table = 'rt',
insert_data = 'id',
update_data = 'ud',
mutate_data = 'md',
delete_data = 'dd'
}

View File

@ -1,9 +0,0 @@
export class Relation {
public column: string;
public table: string;
public constructor (table: string, column: string) {
this.column = column;
this.table = table;
}
}

View File

@ -1,3 +0,0 @@
export interface Serializable {
serialize(): string;
}

View File

@ -1,19 +0,0 @@
import { Column } from './Column';
export class Table {
public name: string;
public columns: Array<Column> = [];
public constructor (name: string) {
this.name = name;
}
public get_column (name: string): Column|null {
for (const col of this.columns) {
if (col.name === name)
return col;
}
return null;
}
}

View File

@ -1,7 +0,0 @@
import { Snippet } from '../../Snippet';
export default class Database implements Snippet {
public start (): Promise<void> {
// noop
}
}

View File

@ -1,42 +0,0 @@
import { Serializable } from '../classes/Serializable';
import { PatchAction } from '../classes/PatchAction';
import { Database } from '../classes/Database';
export class RenameColumn implements Serializable, PatchAction {
public table: string;
public column: string;
public new_name: string;
public constructor (
column: string,
new_name: string|null = null,
table: string|null = null
) {
if (new_name === null || table === null) {
const regex
= /(?<table>[a-z_]+) (?<column>[a-z_]+) (?<new_name>[a-z_]+)/iu;
const res = regex.exec (column);
if (res === null || typeof res.groups === 'undefined')
throw new Error ('invalid string to deserialize');
this.column = res.groups.column;
this.new_name = res.groups.new_name;
this.table = res.groups.table;
return;
}
this.column = column;
this.table = table;
this.new_name = new_name;
}
public serialize (): string {
return `${this.table} ${this.column} ${this.new_name}`;
}
public apply (db: Database): void {
const table = db.get_table (this.table);
const column = table?.get_column(this.column);
column?.name = this.new_name;
}
}

View File

@ -0,0 +1,20 @@
/*
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, July 2020
*/
import { files } from '@sapphirecode/standard';
import { Snippet } from '../../Snippet';
import { apply_template } from '../../Helper';
export default class Drone implements Snippet {
public is_active (): boolean {
return true;
}
public async start (): Promise<void> {
await apply_template (files.drone, '.drone.yml');
}
}

View File

@ -1,7 +1,13 @@
/*
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
/* eslint-disable max-len */
const general = { jenkinsfile: '' };
const node = { jenkinsfile: '', js: '' };
general.jenkinsfile = `pipeline {
agent any
@ -44,59 +50,4 @@ general.jenkinsfile = `pipeline {
}
`;
node.jenkinsfile = `pipeline {
agent any
environment {
VERSION = VersionNumber([
versionNumberString:
'\${BUILDS_ALL_TIME}',
versionPrefix: '1.0.',
worstResultForIncrement: 'SUCCESS'
])
}
stages {
stage('Building') {
steps {
script {
currentBuild.displayName = env.VERSION
}
sh 'yarn ci \${VERSION}'
}
}
}
}
`;
node.js = `/* eslint-disable no-process-exit */
/* eslint-disable no-console */
/* eslint-disable no-sync */
'use strict';
const fs = require ('fs');
const child_process = require ('child_process');
const pkg = JSON.parse (fs.readFileSync ('package.json', 'utf-8'));
[
,, pkg.version
] = process.argv;
fs.writeFileSync ('package.json', JSON.stringify (pkg, null, 2));
child_process.execSync ('yarn lint', { stdio: 'inherit' });
if (typeof pkg.scripts !== 'undefined' && typeof pkg.scripts.test === 'string')
child_process.execSync ('yarn test', { stdio: 'inherit' });
if (typeof pkg.scripts !== 'undefined' && typeof pkg.scripts.compile === 'string')
child_process.execSync ('yarn compile', { stdio: 'inherit' });
child_process.exec ('git log -1 | grep \\'\\\\[no publish\\\\]\\'')
.addListener ('exit', (code) => {
if (code === 0) {
console.log ('build not marked for deployment');
process.exit (1);
}
else { child_process.execSync ('yarn publish'); }
});
`;
export { general, node };
export { general };

View File

@ -2,34 +2,20 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
import { Confirm } from 'enquirer';
import { Snippet } from '../../Snippet';
import { apply_template, modify_json } from '../../Helper';
import { apply_template } from '../../Helper';
import { general, node } from './Assets';
import { general } from './Assets';
export default class Jenkins implements Snippet {
public async start (): Promise<void> {
const is_node = await new Confirm ({
message: 'is the current project using nodejs?',
initial: true
})
.run ();
public is_active (): boolean {
return true;
}
if (is_node) {
await apply_template (node.js, 'jenkins.js');
await apply_template (node.jenkinsfile, 'Jenkinsfile');
// eslint-disable-next-line @typescript-eslint/no-explicit-any
await modify_json ((obj: any): any => {
obj.scripts.ci = 'yarn && node jenkins.js';
return obj;
});
}
else {
await apply_template (general.jenkinsfile, 'Jenkinsfile');
}
public async start (): Promise<void> {
await apply_template (general.jenkinsfile, 'Jenkinsfile');
}
}

View File

@ -1,3 +1,10 @@
/*
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
const eslintrc = `module.exports = {
env: {
commonjs: true,
@ -5,7 +12,7 @@ const eslintrc = `module.exports = {
node: true
},
extends: [
'@scode'
'@sapphirecode'
],
globals: {
Atomics: 'readonly',
@ -24,7 +31,7 @@ const eslintrc_ts = `module.exports = {
node: true
},
extends: [
'@scode/eslint-config-ts'
'@sapphirecode/eslint-config-ts'
],
globals: {
Atomics: 'readonly',
@ -42,9 +49,6 @@ const gitignore = `/node_modules/
/coverage/
`;
const npmrc = `@scode:registry=https://npm.scode.ovh
`;
const tsconfig = `{
"compilerOptions": {
"target": "es5",
@ -53,9 +57,14 @@ const tsconfig = `{
"rootDir": "./lib",
"strict": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true
"forceConsistentCasingInFileNames": true,
"declaration": true
}
}
`;
export { eslintrc, gitignore, npmrc, tsconfig, eslintrc_ts };
const eslintignore = `/dist/
*.d.ts
`;
export { eslintrc, gitignore, tsconfig, eslintrc_ts, eslintignore };

View File

@ -2,32 +2,124 @@
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, April 2020
* Created by Timo Hocker <timo@scode.ovh>, May 2020
*/
import path from 'path';
import { Input } from 'enquirer';
import { Input, Confirm } from 'enquirer';
import {
scripts as standard_scripts,
files as standard_files
} from '@sapphirecode/standard';
import fs from 'fs-extra';
import { Snippet } from '../../Snippet';
import { apply_template, modify_json, run_command } from '../../Helper';
import { eslintrc, gitignore, npmrc, tsconfig, eslintrc_ts } from './Assets';
import {
eslintrc, gitignore,
tsconfig, eslintrc_ts, eslintignore
} from './Assets';
const packages = {
common: [ 'eslint' ],
js: [ '@sapphirecode/eslint-config' ],
ts: [
'typescript',
'@sapphirecode/eslint-config-ts'
],
test: [
'nyc',
'jasmine',
'@types/jasmine'
],
test_ts: [ 'ts-node' ]
};
/**
* initialize the package.json
*
* @param folder - folder
* @param use_ts - use typescript
* @param use_tests - use tests
*/
async function init_package (
folder: string,
use_ts: boolean,
use_tests: boolean
): Promise<void> {
run_command ('yarn init -y', folder);
const bundle = [
...packages.common,
...(use_ts ? packages.ts : packages.js),
...(use_tests ? packages.test : []),
...(use_ts && use_tests ? packages.test_ts : [])
];
run_command (
`yarn add --dev ${bundle.join (' ')}`,
folder
);
await modify_json ((obj: Record<string, unknown>) => {
const scripts: Record<string, string>
= {
lint: standard_scripts.lint,
test: standard_scripts.test.common,
compile: standard_scripts.compile.common
};
const files = [ 'LICENSE' ];
if (use_ts) {
scripts.compile = standard_scripts.compile.ts;
scripts.pretest = standard_scripts.test.ts_pre;
scripts.test = standard_scripts.test.ts;
scripts.posttest = standard_scripts.test.ts_post;
files.push ('/dist/');
}
else {
files.push ('*.js', '*.d.ts');
}
if (!use_tests)
scripts.test = standard_scripts.test.no;
obj.scripts = scripts;
obj.files = files;
return obj;
}, path.join (folder, 'package.json'));
}
export default class Node implements Snippet {
public is_active (): boolean {
return true;
}
public async start (): Promise<void> {
const folder = await new Input (
{ message: 'project name (leave empty for current folder):' }
)
.run ();
const use_ts = await new confirm ({
const use_ts = await new Confirm ({
message: 'use typescript?',
initial: false
})
.run ();
const use_tests = await new Confirm ({
message: 'use tests?',
initial: true
})
.run ();
await apply_template (eslintrc, path.join (folder, '.eslintrc.js'));
await apply_template (npmrc, path.join (folder, '.npmrc'));
await apply_template (gitignore, path.join (folder, '.gitignore'));
await apply_template (
eslintignore,
path.join (folder, '.eslintignore')
);
if (use_ts) {
await apply_template (tsconfig, path.join (folder, 'tsconfig.json'));
await apply_template (
@ -36,22 +128,15 @@ export default class Node implements Snippet {
);
}
run_command ('git init', folder);
run_command ('yarn init -y', folder);
run_command (
`yarn add --dev @scode/eslint-config${use_ts
? '-ts typescript @ava/typescript'
: ''} eslint nyc ava`,
folder
);
await modify_json ((obj: Record<string, unknown>) => {
obj.scripts = {
lint: 'eslint . --ext .js,.jsx,.ts,.tsx,.vue,.mjs',
test: 'nyc ava'
};
if (use_ts)
obj.scripts.compile = 'tsc';
return obj;
}, path.join (folder, 'package.json'));
if (use_tests) {
await apply_template (
standard_files.jasmine,
path.join (folder, 'jasmine.json')
);
await fs.mkdirp (path.join (folder, 'test/spec'));
}
await init_package (folder, use_ts, use_tests);
}
}

View File

@ -0,0 +1,40 @@
/*
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, June 2020
*/
/* eslint-disable max-len */
export function get_readme (
software: string,
description: string,
dev: boolean,
license: string,
author: string
): string {
return `# ${software}
version: 0.0.0
${description}
## Installation
npm:
> npm i --save${dev ? '-dev' : ''} ${software}
yarn:
> yarn add ${dev ? '--dev ' : ''}${software}
## Usage
TODO: Add usage
## License
${license} © ${author}
`;
}

View File

@ -0,0 +1,48 @@
/*
* Copyright (C) SapphireCode - All Rights Reserved
* This file is part of Snippeteer which is released under BSD-3-Clause.
* See file 'LICENSE' for full license details.
* Created by Timo Hocker <timo@scode.ovh>, June 2020
*/
import { Confirm } from 'enquirer';
import { Snippet } from '../../Snippet';
import { modify_json, apply_template } from '../../Helper';
import { get_readme } from './Assets';
export default class Readme implements Snippet {
public is_active (): boolean {
return true;
}
public async start (): Promise<void> {
const dev = await new Confirm ({
message: 'is the package used as dev dependency?',
default: false
})
.run ();
const package_data = {
software: '',
description: '',
license: '',
author: ''
};
await modify_json ((json) => {
package_data.software = json.name;
package_data.description = json.description;
package_data.license = json.license;
if (typeof json.author === 'object')
package_data.author = `${json.author.name} <${json.author.email}>`;
else
package_data.author = json.author;
});
const readme = get_readme (
package_data.software,
package_data.description,
dev,
package_data.license,
package_data.author
);
await apply_template (readme, 'README.md');
}
}

View File

@ -1,40 +1,49 @@
{
"name": "@scode/snippeteer",
"version": "1.0.0",
"name": "@sapphirecode/snippeteer",
"version": "1.5.6",
"description": "macros for setting up projects or project parts",
"main": "index.js",
"bin": {
"snippeteer": "./index.js"
},
"bugs": "https://redmine.scode.ovh/projects/snippeteer",
"scripts": {
"lint": "eslint . --ext .js,.jsx,.ts,.tsx,.vue,.mjs",
"ci": "yarn --frozen-lockfile && node jenkins.js",
"test": "echo \"no test\""
"test": "echo \"no test\"",
"compile": "tsc"
},
"repository": {
"type": "git",
"url": "git@git.scode.ovh:timo/snippeteer"
"url": "https://git.scode.ovh:timo/snippeteer.git"
},
"files": [
"/dist/",
"/assets/",
"/lib/",
"LICENSE"
],
"author": "Timo Hocker",
"author": {
"name": "Timo Hocker",
"email": "timo@scode.ovh"
},
"license": "BSD-3-Clause",
"devDependencies": {
"@scode/eslint-config-ts": "^1.0.21",
"@types/fs-extra": "^8.1.0",
"@types/node": "^13.13.0",
"eslint": "^6.8.0",
"typescript": "^3.8.3"
"@sapphirecode/eslint-config-ts": "^1.0.22",
"@types/fs-extra": "^9.0.0",
"@types/node": "^17.0.2",
"eslint": "^8.5.0",
"typescript": "^4.0.2"
},
"dependencies": {
"@sapphirecode/standard": "^1.5.5",
"enquirer": "^2.3.5",
"fs-extra": "^9.0.0",
"fs-extra": "^10.0.0",
"license": "^1.0.3"
},
"engines": {
"node": ">=10.0.0"
}
},
"keywords": [
"snippet",
"template"
]
}

View File

@ -1,66 +1,66 @@
{
"compilerOptions": {
/* Basic Options */
// "incremental": true, /* Enable incremental compilation */
"target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
// "lib": [], /* Specify library files to be included in the compilation. */
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
// "declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
// "sourceMap": true, /* Generates corresponding '.map' file. */
// "outFile": "./", /* Concatenate and emit output to single file. */
"outDir": "./dist", /* Redirect output structure to the directory. */
"rootDir": "./lib", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
// "composite": true, /* Enable project compilation */
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
// "removeComments": true, /* Do not emit comments to output. */
// "noEmit": true, /* Do not emit outputs. */
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
/* Strict Type-Checking Options */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* Enable strict null checks. */
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
/* Additional Checks */
// "noUnusedLocals": true, /* Report errors on unused locals. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
/* Module Resolution Options */
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
/* Source Map Options */
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
/* Experimental Options */
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
/* Advanced Options */
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
}
}
{
"compilerOptions": {
/* Basic Options */
// "incremental": true, /* Enable incremental compilation */
"target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
// "lib": [], /* Specify library files to be included in the compilation. */
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
"declaration": true, /* Generates corresponding '.d.ts' file. */
"declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
"sourceMap": true, /* Generates corresponding '.map' file. */
// "outFile": "./", /* Concatenate and emit output to single file. */
"outDir": "./dist", /* Redirect output structure to the directory. */
"rootDir": "./lib", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
// "composite": true, /* Enable project compilation */
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
// "removeComments": true, /* Do not emit comments to output. */
// "noEmit": true, /* Do not emit outputs. */
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
/* Strict Type-Checking Options */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* Enable strict null checks. */
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
/* Additional Checks */
// "noUnusedLocals": true, /* Report errors on unused locals. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
/* Module Resolution Options */
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
/* Source Map Options */
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
/* Experimental Options */
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
/* Advanced Options */
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
}
}

File diff suppressed because it is too large Load Diff

1869
yarn.lock

File diff suppressed because it is too large Load Diff