Compare commits

..

64 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
30 changed files with 1147 additions and 1361 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

@ -5,20 +5,18 @@
* 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: [
'@sapphirecode'
],
extends: [ '@sapphirecode' ],
globals: {
Atomics: 'readonly',
Atomics: 'readonly',
SharedArrayBuffer: 'readonly'
},
parserOptions: {
ecmaVersion: 2018
}
}
parserOptions: { ecmaVersion: 2018 }
};

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}'
}
}
}
}

View File

@ -1,8 +1,8 @@
# @sapphirecode/snippeteer
[![Package quality](https://packagequality.com/shield/@sapphirecode/snippeteer.svg)](https://packagequality.com/#?package=@sapphirecode/snippeteer)
version: 1.5.x
> macros for setting up projects or project parts
macros for setting up projects or project parts
## Installation
@ -31,8 +31,9 @@ license file and adding fields like author and license to the package.json
create a generic jenkinsfile
for node projects: automatically generates a jenkinsfile and jenkins.js for easy
use in jenkins.
#### drone
create a generic .drone.yml for deployment of node projects
necessary scripts in the package.json:

View File

@ -1,34 +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>, May 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' });
child_process.execSync ('yarn test', { stdio: 'inherit' });
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 --access public'); }
});

View File

@ -5,20 +5,20 @@
* 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: [
'@sapphirecode/eslint-config-ts'
],
extends: [ '@sapphirecode/eslint-config-ts' ],
globals: {
Atomics: 'readonly',
Atomics: 'readonly',
SharedArrayBuffer: 'readonly'
},
parserOptions: {
ecmaVersion: 2018
}
}
parserOptions: { ecmaVersion: 2018 }
};

View File

@ -9,13 +9,18 @@ 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

@ -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

@ -41,10 +41,8 @@ export default class Copyright implements Snippet {
);
await modify_json ((json) => {
json.author = `${options.author} <${options.email}>`;
json.license = options.has_license
? options.license
: 'UNLICENSED';
json.author = { name: options.author, email: options.email };
json.license = options.has_license ? options.license : 'UNLICENSED';
return json;
});
@ -59,11 +57,14 @@ export default class Copyright implements Snippet {
);
}
if (!this._loaded_from_config && await new Confirm (
{ message: 'should those settings be saved for the next run?' }
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 ();
}
@ -81,10 +82,9 @@ export default class Copyright implements Snippet {
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) {
@ -104,9 +104,7 @@ export default class Copyright implements Snippet {
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}
@ -135,21 +133,23 @@ license: ${options.license}`);
);
}
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,20 +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>, May 2020
*/
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,27 +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>, May 2020
*/
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,21 +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>, May 2020
*/
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,12 +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>, May 2020
*/
import { Database } from './Database';
export interface PatchAction {
apply(db: Database): void;
}

View File

@ -1,22 +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>, May 2020
*/
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,16 +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>, May 2020
*/
export class Relation {
public column: string;
public table: string;
public constructor (table: string, column: string) {
this.column = column;
this.table = table;
}
}

View File

@ -1,10 +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>, May 2020
*/
export interface Serializable {
serialize(): string;
}

View File

@ -1,26 +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>, May 2020
*/
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,18 +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>, May 2020
*/
import { Snippet } from '../../Snippet';
export default class Database implements Snippet {
public is_active (): boolean {
return false;
}
public start (): Promise<void> {
return Promise.resolve ();
}
}

View File

@ -1,60 +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>, May 2020
*/
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);
if (typeof table === 'undefined' || table === null) {
throw new Error (
`table ${this.table} not found`
);
}
const column = table.get_column (this.column);
if (typeof column === 'undefined' || column === null) {
throw new Error (
`column ${this.column} not found in table ${this.table}`
);
}
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

@ -7,10 +7,7 @@
/* eslint-disable max-len */
import { files } from '@sapphirecode/standard';
const general = { jenkinsfile: '' };
const node = { jenkinsfile: files.jenkinsfile, js: files.jenkins };
general.jenkinsfile = `pipeline {
agent any
@ -53,4 +50,4 @@ general.jenkinsfile = `pipeline {
}
`;
export { general, node };
export { general };

View File

@ -5,11 +5,10 @@
* 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 is_active (): boolean {
@ -17,23 +16,6 @@ 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 ();
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');
}
await apply_template (general.jenkinsfile, 'Jenkinsfile');
}
}

View File

@ -7,7 +7,11 @@
import path from 'path';
import { Input, Confirm } from 'enquirer';
import { scripts as standard_scripts } from '@sapphirecode/standard';
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';
@ -16,6 +20,22 @@ import {
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
*
@ -28,8 +48,22 @@ async function init_package (
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
const scripts: Record<string, string>
= {
lint: standard_scripts.lint,
test: standard_scripts.test.common,
@ -39,7 +73,9 @@ async function init_package (
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 {
@ -92,13 +128,14 @@ export default class Node implements Snippet {
);
}
run_command ('git init', folder);
run_command ('yarn init -y', folder);
run_command (
`yarn add --dev @sapphirecode/eslint-config${use_ts
? '-ts typescript @ava/typescript'
: ''} eslint nyc ava`,
folder
);
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

@ -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>, June 2020
*/
/* eslint-disable max-len */
export function get_readme (
software: string,
@ -8,9 +15,9 @@ export function get_readme (
): string {
return `# ${software}
[![Package quality](https://packagequality.com/shield/${software}.svg)](https://packagequality.com/#?package=${software})
version: 0.0.0
> ${description}
${description}
## Installation
@ -20,7 +27,7 @@ npm:
yarn:
> yarn add ${dev ? '--dev' : ''} ${software}
> yarn add ${dev ? '--dev ' : ''}${software}
## Usage

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>, June 2020
*/
import { Confirm } from 'enquirer';
import { Snippet } from '../../Snippet';
import { modify_json, apply_template } from '../../Helper';
@ -24,7 +31,10 @@ export default class Readme implements Snippet {
package_data.software = json.name;
package_data.description = json.description;
package_data.license = json.license;
package_data.author = json.author;
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,

View File

@ -1,41 +1,49 @@
{
"name": "@sapphirecode/snippeteer",
"version": "1.0.0",
"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\"",
"compile": "tsc"
},
"repository": {
"type": "git",
"url": "git@git.scode.ovh:timo/snippeteer"
"url": "https://git.scode.ovh:timo/snippeteer.git"
},
"files": [
"/dist/",
"/lib/",
"LICENSE"
],
"author": "Timo Hocker <timo@scode.ovh>",
"author": {
"name": "Timo Hocker",
"email": "timo@scode.ovh"
},
"license": "BSD-3-Clause",
"devDependencies": {
"@sapphirecode/eslint-config-ts": "^1.0.22",
"@types/fs-extra": "^8.1.0",
"@types/node": "^13.13.2",
"eslint": "^6.8.0",
"typescript": "^3.8.3"
"@types/fs-extra": "^9.0.0",
"@types/node": "^17.0.2",
"eslint": "^8.5.0",
"typescript": "^4.0.2"
},
"dependencies": {
"@sapphirecode/standard": "^1.0.1",
"@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

@ -8,9 +8,9 @@
// "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. */
"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. */

1863
yarn.lock

File diff suppressed because it is too large Load Diff