lucy-cli 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- package/.drone/.drone.yml +156 -0
- package/.drone/mail_prod_build.hbs +319 -0
- package/.drone/mail_prod_deploy.hbs +309 -0
- package/.drone/mail_satges.hbs +309 -0
- package/.drone/telegram_prod_build.tpl +23 -0
- package/.drone/telegram_prod_deploy.tpl +20 -0
- package/.drone/telegram_stages.tpl +20 -0
- package/.eslintrc.cjs +96 -0
- package/.eslintrc.json +3 -0
- package/.nvmrc +1 -0
- package/.yarnrc.yml +5 -0
- package/README.md +1 -0
- package/dist/Gulpfile.d.ts +28 -0
- package/dist/Gulpfile.js +179 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +44 -0
- package/dist/dev.d.ts +1 -0
- package/dist/dev.js +14 -0
- package/dist/gulp/backend copy.d.ts +4 -0
- package/dist/gulp/backend copy.js +50 -0
- package/dist/gulp/backend.d.ts +4 -0
- package/dist/gulp/backend.js +49 -0
- package/dist/gulp/checks.d.ts +3 -0
- package/dist/gulp/checks.js +119 -0
- package/dist/gulp/clean copy.d.ts +2 -0
- package/dist/gulp/clean copy.js +19 -0
- package/dist/gulp/clean.d.ts +1 -0
- package/dist/gulp/clean.js +14 -0
- package/dist/gulp/copy.d.ts +3 -0
- package/dist/gulp/copy.js +22 -0
- package/dist/gulp/pages copy.d.ts +3 -0
- package/dist/gulp/pages copy.js +22 -0
- package/dist/gulp/pages.d.ts +3 -0
- package/dist/gulp/pages.js +22 -0
- package/dist/gulp/public.d.ts +4 -0
- package/dist/gulp/public.js +50 -0
- package/dist/gulp/styles.d.ts +3 -0
- package/dist/gulp/styles.js +17 -0
- package/dist/gulp/templates.d.ts +1 -0
- package/dist/gulp/templates.js +21 -0
- package/dist/gulp/types.d.ts +5 -0
- package/dist/gulp/types.js +73 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +88 -0
- package/dist/init.d.ts +7 -0
- package/dist/init.js +176 -0
- package/dist/settings.json +91 -0
- package/files/.drone/.drone.yml +156 -0
- package/files/.drone/mail_prod_build.hbs +319 -0
- package/files/.drone/mail_prod_deploy.hbs +309 -0
- package/files/.drone/mail_satges.hbs +309 -0
- package/files/.drone/telegram_prod_build.tpl +23 -0
- package/files/.drone/telegram_prod_deploy.tpl +20 -0
- package/files/.drone/telegram_stages.tpl +20 -0
- package/files/.eslintrc.cjs +96 -0
- package/files/.eslintrc.json +3 -0
- package/files/.nvmrc +1 -0
- package/files/.yarnrc.yml +5 -0
- package/files/currents.config.js +5 -0
- package/files/cypress.config.ts +12 -0
- package/files/docs.tsconfig.json +37 -0
- package/files/jest.config.ts +28 -0
- package/files/lucy.json +5 -0
- package/files/tsconfig.json +51 -0
- package/files/typedoc.json +19 -0
- package/files/typescript/.eslintrc.json +35 -0
- package/files/typescript/__mocks__/.gitkeep +0 -0
- package/files/typescript/backend/index.ts +0 -0
- package/files/typescript/backend/permissions.json +0 -0
- package/files/typescript/pages/.gitkeep +0 -0
- package/files/typescript/public/index.ts +0 -0
- package/files/typescript/styles/.gitkeep +0 -0
- package/files/typescript/styles/global.scss +0 -0
- package/files/typescript/tsconfig.json +45 -0
- package/files/typescript/types/.gitkeep +0 -0
- package/package.json +83 -0
- package/settings/backend-settings.json +19 -0
- package/settings/master-settings.json +17 -0
- package/settings/page-settings.json +18 -0
- package/settings/public-settings.json +21 -0
- package/src/Gulpfile.ts +271 -0
- package/src/dev.ts +20 -0
- package/src/gulp/backend.ts +52 -0
- package/src/gulp/checks.ts +127 -0
- package/src/gulp/clean.ts +21 -0
- package/src/gulp/copy.ts +26 -0
- package/src/gulp/pages.ts +25 -0
- package/src/gulp/public.ts +56 -0
- package/src/gulp/styles.ts +20 -0
- package/src/gulp/templates.ts +25 -0
- package/src/gulp/types.ts +87 -0
- package/src/index.ts +132 -0
- package/src/init.ts +191 -0
- package/src/settings.json +91 -0
- package/src/types.d.ts +5 -0
- package/tsconfig.json +34 -0
package/.eslintrc.cjs
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
module.exports = {
|
2
|
+
extends: ['eslint:recommended', 'plugin:import/recommended', 'plugin:jsdoc/recommended', 'plugin:@typescript-eslint/recommended'],
|
3
|
+
plugins: ['simple-import-sort', 'eslint-plugin-named-import-spacing', '@typescript-eslint'],
|
4
|
+
parser: '@typescript-eslint/parser',
|
5
|
+
ignorePatterns: ['src/**/*', 'typescript/types/backend/**/*', 'typescript/types/pages/**/*', 'typescript/types/public/**/*', 'typescript/types/node/**/*', '.wix/**/*', 'coverage/**/*', 'docs/**/*'],
|
6
|
+
rules: {
|
7
|
+
quotes: [2, 'single', { 'avoidEscape': true, 'allowTemplateLiterals': true }],
|
8
|
+
curly: ['error', 'multi-line'],
|
9
|
+
'simple-import-sort/imports': 'error',
|
10
|
+
'simple-import-sort/exports': 'error',
|
11
|
+
indent: ['error', 'tab'],
|
12
|
+
'no-tabs': 0,
|
13
|
+
'semi-style': ['error', 'last'],
|
14
|
+
semi: [2, 'always'],
|
15
|
+
'object-curly-spacing': ['error', 'always'],
|
16
|
+
'space-in-parens': ['error', 'never'],
|
17
|
+
'newline-before-return': 'error',
|
18
|
+
'space-before-blocks': ['error', { functions: 'always', keywords: 'never', classes: 'always' }],
|
19
|
+
'comma-spacing': ['error', { before: false, after: true }],
|
20
|
+
'no-multi-spaces': ['error'],
|
21
|
+
'import/newline-after-import': ['error', { count: 1 }],
|
22
|
+
'named-import-spacing/named-import-spacing': 2,
|
23
|
+
'no-unused-vars': 'warn',
|
24
|
+
'import/no-unresolved': [0],
|
25
|
+
'no-forbidden-relative-imports': [0],
|
26
|
+
'@typescript-eslint/triple-slash-reference': 'off',
|
27
|
+
'@typescript-eslint/member-ordering': [
|
28
|
+
'error',
|
29
|
+
{ classes: ['constructor', 'private-instance-field', 'protected-instance-field', 'public-instance-field', 'public-instance-method', 'private-instance-method'] }
|
30
|
+
],
|
31
|
+
'@typescript-eslint/naming-convention': [
|
32
|
+
'error',
|
33
|
+
{
|
34
|
+
selector: ['variable', 'function'],
|
35
|
+
format: ['camelCase'],
|
36
|
+
leadingUnderscore: 'allow'
|
37
|
+
},
|
38
|
+
{
|
39
|
+
selector: ['objectLiteralProperty'],
|
40
|
+
format: null,
|
41
|
+
leadingUnderscore: 'allow'
|
42
|
+
},
|
43
|
+
{
|
44
|
+
selector: 'memberLike',
|
45
|
+
modifiers: ['private'],
|
46
|
+
format: ['camelCase'],
|
47
|
+
leadingUnderscore: 'require'
|
48
|
+
},
|
49
|
+
{
|
50
|
+
selector: 'memberLike',
|
51
|
+
modifiers: ['protected'],
|
52
|
+
format: ['camelCase'],
|
53
|
+
leadingUnderscore: 'require'
|
54
|
+
},
|
55
|
+
{
|
56
|
+
selector: 'memberLike',
|
57
|
+
modifiers: ['public'],
|
58
|
+
format: ['camelCase'],
|
59
|
+
leadingUnderscore: 'forbid'
|
60
|
+
},
|
61
|
+
{
|
62
|
+
selector: ['parameterProperty', 'parameter'],
|
63
|
+
format: ['camelCase'],
|
64
|
+
leadingUnderscore: 'forbid'
|
65
|
+
},
|
66
|
+
{
|
67
|
+
selector: 'default',
|
68
|
+
format: ['UPPER_CASE'],
|
69
|
+
leadingUnderscore: 'forbid',
|
70
|
+
trailingUnderscore: 'forbid',
|
71
|
+
custom: {
|
72
|
+
regex: '^[A-Z_]+$',
|
73
|
+
match: true
|
74
|
+
}
|
75
|
+
},
|
76
|
+
{
|
77
|
+
selector: 'typeLike',
|
78
|
+
format: ['PascalCase']
|
79
|
+
},
|
80
|
+
// Custom rule added
|
81
|
+
{
|
82
|
+
selector: 'function',
|
83
|
+
format: ['UPPER_CASE']
|
84
|
+
}
|
85
|
+
],
|
86
|
+
},
|
87
|
+
root: true,
|
88
|
+
env: {
|
89
|
+
es6: true,
|
90
|
+
browser: true,
|
91
|
+
node: true
|
92
|
+
},
|
93
|
+
globals: {
|
94
|
+
$w: 'readonly'
|
95
|
+
}
|
96
|
+
};
|
package/.eslintrc.json
ADDED
package/.nvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
20
|
package/.yarnrc.yml
ADDED
package/README.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# wix-lucy
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import gulpSass from 'gulp-sass';
|
2
|
+
import backendSettings from '../settings/backend-settings.json';
|
3
|
+
import masterSettings from '../settings/master-settings.json';
|
4
|
+
import pageSettings from '../settings/page-settings.json';
|
5
|
+
import publicSettings from '../settings/public-settings.json';
|
6
|
+
export type TaskOptions = {
|
7
|
+
enableIncrementalBuild: boolean;
|
8
|
+
outputDir: string;
|
9
|
+
sass: ReturnType<typeof gulpSass>;
|
10
|
+
userHomeDir: string;
|
11
|
+
replaceOpions: typeof replaceOpions;
|
12
|
+
backendSettings: typeof backendSettings;
|
13
|
+
masterSettings: typeof masterSettings;
|
14
|
+
pageSettings: typeof pageSettings;
|
15
|
+
publicSettings: typeof publicSettings;
|
16
|
+
cwd: string;
|
17
|
+
};
|
18
|
+
export interface File {
|
19
|
+
path: string;
|
20
|
+
dirname: string;
|
21
|
+
}
|
22
|
+
declare const replaceOpions: {
|
23
|
+
logs: {
|
24
|
+
enabled: boolean;
|
25
|
+
};
|
26
|
+
};
|
27
|
+
export declare function runTask(task: string, cwd: string): Promise<void>;
|
28
|
+
export {};
|
package/dist/Gulpfile.js
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
import chalk from 'chalk';
|
2
|
+
import gulp from 'gulp';
|
3
|
+
import clean from 'gulp-clean';
|
4
|
+
import gulpSass from 'gulp-sass';
|
5
|
+
import shell from 'gulp-shell';
|
6
|
+
import replace from 'gulp-string-replace';
|
7
|
+
import * as os from 'os';
|
8
|
+
import * as path from 'path';
|
9
|
+
import * as dartSass from 'sass';
|
10
|
+
import backendSettings from '../settings/backend-settings.json' assert { type: 'json' };
|
11
|
+
import masterSettings from '../settings/master-settings.json' assert { type: 'json' };
|
12
|
+
import pageSettings from '../settings/page-settings.json' assert { type: 'json' };
|
13
|
+
import publicSettings from '../settings/public-settings.json' assert { type: 'json' };
|
14
|
+
import { buildPublic, buildPublicLib } from './gulp/public.js';
|
15
|
+
import { buildBackend, buildBackendJSW } from './gulp/backend.js';
|
16
|
+
import { checkPages, checkTs, checkTsLib } from './gulp/checks.js';
|
17
|
+
import { compileScss } from './gulp/styles.js';
|
18
|
+
import { buildPages } from './gulp/pages.js';
|
19
|
+
import { previewTemplates } from './gulp/templates.js';
|
20
|
+
import { copyFiles } from './gulp/copy.js';
|
21
|
+
import { cleanWix } from './gulp/clean.js';
|
22
|
+
import { addTypes, updateWixTypes } from './gulp/types.js';
|
23
|
+
const sass = gulpSass(dartSass);
|
24
|
+
let enableIncrementalBuild = false;
|
25
|
+
const outputDir = './src';
|
26
|
+
const userHomeDir = os.homedir();
|
27
|
+
const replaceOpions = {
|
28
|
+
logs: {
|
29
|
+
enabled: false
|
30
|
+
}
|
31
|
+
};
|
32
|
+
const taskOptions = {
|
33
|
+
enableIncrementalBuild,
|
34
|
+
outputDir,
|
35
|
+
sass,
|
36
|
+
userHomeDir,
|
37
|
+
pageSettings,
|
38
|
+
publicSettings,
|
39
|
+
backendSettings,
|
40
|
+
masterSettings,
|
41
|
+
replaceOpions,
|
42
|
+
cwd: process.cwd(),
|
43
|
+
};
|
44
|
+
gulp.task('check-pages', gulp.parallel(checkPages));
|
45
|
+
gulp.task('check-ts', gulp.parallel(checkTs(), checkTsLib()));
|
46
|
+
gulp.task('scss', gulp.parallel(compileScss(taskOptions)));
|
47
|
+
gulp.task('build-jsw', gulp.parallel(buildBackendJSW(taskOptions)));
|
48
|
+
gulp.task('build-backend', gulp.parallel(buildBackend(taskOptions)));
|
49
|
+
gulp.task('build-public', gulp.parallel(buildPublic(taskOptions), buildPublicLib(taskOptions)));
|
50
|
+
gulp.task('build-pages', gulp.parallel(buildPages(taskOptions)));
|
51
|
+
gulp.task('preview-templates', gulp.parallel(previewTemplates()));
|
52
|
+
gulp.task('copy-files', gulp.parallel(copyFiles(taskOptions)));
|
53
|
+
gulp.task('clean-wix', gulp.parallel(cleanWix()));
|
54
|
+
gulp.task('sync-types', shell.task([
|
55
|
+
// 'yarn postinstall',
|
56
|
+
]));
|
57
|
+
gulp.task('fix-wixtypes', gulp.parallel(updateWixTypes(taskOptions)));
|
58
|
+
gulp.task('add-wix-types', function (done) {
|
59
|
+
return addTypes(taskOptions, done);
|
60
|
+
});
|
61
|
+
gulp.task('clean-src', async () => {
|
62
|
+
return gulp.src([`${outputDir}/pages`, `${outputDir}/public`, `${outputDir}/backend`], { read: false, allowEmpty: true })
|
63
|
+
.pipe(clean({ force: true }))
|
64
|
+
.on('error', function () {
|
65
|
+
console.log(chalk.red.underline.bold('Cleaning of output files failed!'));
|
66
|
+
this.emit('end');
|
67
|
+
})
|
68
|
+
.on('end', function () { console.log(chalk.blueBright.underline('Cleaning of output files succeeded!')); });
|
69
|
+
});
|
70
|
+
gulp.task('set-production', function () {
|
71
|
+
const droneTag = process.env.DRONE_TAG || 'development';
|
72
|
+
const regexGit = /gitTag:\s*(.*),/g;
|
73
|
+
const regexDev = /devMode:\s*(.*),/g;
|
74
|
+
return gulp
|
75
|
+
.src(['./typescript/public/constants/config.ts'])
|
76
|
+
.pipe(replace(regexGit, `gitTag: '${droneTag}',`))
|
77
|
+
.pipe(replace(regexDev, `devMode: false,`))
|
78
|
+
.pipe(gulp.dest((file) => {
|
79
|
+
const filePath = file.dirname;
|
80
|
+
const outputDir = path.dirname(filePath);
|
81
|
+
return path.join(`${outputDir}/constants`);
|
82
|
+
}))
|
83
|
+
.on('error', function () {
|
84
|
+
console.log(chalk.red.underline.bold('Setting the git tag failed!'));
|
85
|
+
this.emit('end');
|
86
|
+
})
|
87
|
+
.on('end', function () { console.log(chalk.blueBright.underline('Setting the git tag succeeded!')); });
|
88
|
+
});
|
89
|
+
gulp.task('start-wix', shell.task([
|
90
|
+
'yarn wix:dev',
|
91
|
+
]));
|
92
|
+
gulp.task('test-watch', shell.task([
|
93
|
+
'sleep 10; yarn test --watch',
|
94
|
+
]));
|
95
|
+
gulp.task('test', shell.task([
|
96
|
+
'sleep 2; yarn test',
|
97
|
+
]));
|
98
|
+
gulp.task('gen-docs', shell.task([
|
99
|
+
'yarn docs',
|
100
|
+
]));
|
101
|
+
gulp.task('watch-scss', () => {
|
102
|
+
gulp.watch(['typescript/public/scss/**/*.scss'], gulp.series('scss'));
|
103
|
+
});
|
104
|
+
gulp.task('watch-jsw', () => {
|
105
|
+
enableIncrementalBuild = true;
|
106
|
+
gulp.watch(['typescript/backend/**/frontend.*.ts', 'wix-lucy-lib/backend/**/frontend.*.ts'], gulp.series('check-ts', 'build-jsw', 'test'));
|
107
|
+
});
|
108
|
+
gulp.task('watch-backend', () => {
|
109
|
+
enableIncrementalBuild = true;
|
110
|
+
gulp.watch([
|
111
|
+
'typescript/backend/**/*.ts',
|
112
|
+
'typescript/backend/**/*.tsx',
|
113
|
+
'!typescript/backend/**/*.spec.ts',
|
114
|
+
], gulp.series('check-ts', 'build-backend', 'test'));
|
115
|
+
});
|
116
|
+
gulp.task('watch-public', () => {
|
117
|
+
enableIncrementalBuild = true;
|
118
|
+
gulp.watch([
|
119
|
+
'typescript/public/**/*.ts',
|
120
|
+
'typescript/public/**/*.tsx',
|
121
|
+
'wix-lucy-lib/src/public/**/*.ts',
|
122
|
+
'wix-lucy-lib/src/public/**/*.tsx'
|
123
|
+
], gulp.series('check-ts', 'build-public', 'test'));
|
124
|
+
});
|
125
|
+
gulp.task('watch-templates', () => {
|
126
|
+
gulp.watch([
|
127
|
+
'typescript/backend/templates/**/*.tsx',
|
128
|
+
'typescript/backend/templates/data/*.json',
|
129
|
+
'!typescript/backend/templates/render.ts',
|
130
|
+
], gulp.series('preview-templates'));
|
131
|
+
});
|
132
|
+
gulp.task('watch-pages', () => {
|
133
|
+
enableIncrementalBuild = true;
|
134
|
+
gulp.watch('typescript/pages/**/*.ts', gulp.series('check-ts', 'build-pages', 'test'));
|
135
|
+
});
|
136
|
+
gulp.task('watch-files', () => {
|
137
|
+
enableIncrementalBuild = true;
|
138
|
+
gulp.watch([
|
139
|
+
'typescript/backend/**/*',
|
140
|
+
'typescript/public/**/*',
|
141
|
+
'typescript/pages/**/*',
|
142
|
+
'!typescript/**/*.ts',
|
143
|
+
], gulp.series('copy-files'));
|
144
|
+
});
|
145
|
+
gulp.task('watch-types', () => {
|
146
|
+
enableIncrementalBuild = true;
|
147
|
+
gulp.watch(['./.wix/types/**/*.d.ts', '!./.wix/types/wix-code-types'], gulp.series('fix-wixtypes'));
|
148
|
+
});
|
149
|
+
gulp.task('fix-wix', gulp.series('clean-wix', 'sync-types', 'fix-wixtypes', 'add-wix-types'));
|
150
|
+
gulp.task('clean', gulp.series('clean-src'));
|
151
|
+
gulp.task('watch', gulp.parallel('watch-types', 'watch-jsw', 'watch-backend', 'watch-public', 'watch-pages', 'watch-files', 'watch-scss', 'watch-templates'));
|
152
|
+
gulp.task('build-prod', gulp.series('clean', 'set-production', 'fix-wix', 'check-pages', 'build-jsw', 'build-backend', 'build-public', 'build-pages', 'copy-files', 'scss', 'gen-docs'));
|
153
|
+
gulp.task('build', gulp.series('clean', 'fix-wix', 'check-ts', 'build-jsw', 'build-backend', 'build-public', 'build-pages', 'scss', 'copy-files'));
|
154
|
+
gulp.task('fix-for-test', gulp.series('fix-wixtypes', 'add-wix-types'));
|
155
|
+
gulp.task('build-pipeline', gulp.series('clean', 'set-production', 'build-jsw', 'build-backend', 'build-public', 'build-pages', 'copy-files', 'scss', 'gen-docs'));
|
156
|
+
gulp.task('start-dev-env', gulp.parallel('watch', 'check-pages'));
|
157
|
+
gulp.task('dev', gulp.series('build', 'start-dev-env', 'test-watch'));
|
158
|
+
gulp.task('default', gulp.series('dev'));
|
159
|
+
async function gulpTaskRunner(task) {
|
160
|
+
return new Promise(function (resolve, reject) {
|
161
|
+
gulp.series(task, (done) => {
|
162
|
+
resolve(true);
|
163
|
+
done();
|
164
|
+
})(function (err) {
|
165
|
+
console.log('gulpTaskRunner', err);
|
166
|
+
if (err) {
|
167
|
+
reject(err);
|
168
|
+
}
|
169
|
+
});
|
170
|
+
});
|
171
|
+
}
|
172
|
+
export async function runTask(task, cwd) {
|
173
|
+
console.log('runTask', { task, cwd });
|
174
|
+
taskOptions.cwd = cwd;
|
175
|
+
console.log('runTask', { task, cwd });
|
176
|
+
console.log('start');
|
177
|
+
await gulpTaskRunner(task);
|
178
|
+
console.log('end');
|
179
|
+
}
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
import { helloWorld } from './index.js';
|
3
|
+
const args = process.argv.slice(2);
|
4
|
+
const cwd = process.cwd();
|
5
|
+
/**
|
6
|
+
*
|
7
|
+
*/
|
8
|
+
function main() {
|
9
|
+
console.log({ args, cwd });
|
10
|
+
if (args.includes('help') || args.includes('-h')) {
|
11
|
+
console.log('Help is on the way!');
|
12
|
+
return;
|
13
|
+
}
|
14
|
+
if (args.includes('version') || args.includes('-v')) {
|
15
|
+
console.log('1.0.0');
|
16
|
+
return;
|
17
|
+
}
|
18
|
+
if (args.includes('init')) {
|
19
|
+
helloWorld();
|
20
|
+
return;
|
21
|
+
}
|
22
|
+
if (args.includes('sync')) {
|
23
|
+
console.log('Hello serve');
|
24
|
+
return;
|
25
|
+
}
|
26
|
+
}
|
27
|
+
main();
|
28
|
+
// const fs = require("fs"),
|
29
|
+
// path = require("path")
|
30
|
+
// /** Parse the command line */
|
31
|
+
// var args = process.argv.slice(2);
|
32
|
+
// // Validate input
|
33
|
+
// if (args.length !== 2) {
|
34
|
+
// console.log("Warning: Requires 2 arguments");
|
35
|
+
// console.log("node index.js [path/source.html] [targetfile]");
|
36
|
+
// process.exit();
|
37
|
+
// }
|
38
|
+
// const src = args[0];
|
39
|
+
// const target = args[1];
|
40
|
+
// const dirsrc = path.dirname(src);
|
41
|
+
// if (!fs.existsSync(src)) {
|
42
|
+
// console.log("Error: Source file doesn't exist. Given: ", src);
|
43
|
+
// process.exit();
|
44
|
+
// }
|
package/dist/dev.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
export declare function dev(cwd: string, arg: string[]): Promise<void>;
|
package/dist/dev.js
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
import path from 'path';
|
2
|
+
import { fileURLToPath } from 'url';
|
3
|
+
export async function dev(cwd, arg) {
|
4
|
+
console.log('dev', { cwd, arg });
|
5
|
+
// Get the directory name of the current module
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
7
|
+
const __dirname = path.dirname(__filename);
|
8
|
+
// Resolve the path to the Gulpfile
|
9
|
+
const gulpfilePath = path.resolve(__dirname, 'Gulpfile.js');
|
10
|
+
// Dynamically import the Gulpfile
|
11
|
+
const gulpfile = await import(`file://${gulpfilePath}`);
|
12
|
+
// Check if 'dev' task exists
|
13
|
+
gulpfile.runTask('dev', cwd);
|
14
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import chalk from 'chalk';
|
2
|
+
import gulp from 'gulp';
|
3
|
+
import { createGulpEsbuild } from 'gulp-esbuild';
|
4
|
+
import * as path from 'path';
|
5
|
+
export function buildPublic(options) {
|
6
|
+
const { outputDir, enableIncrementalBuild } = options;
|
7
|
+
const gulpEsbuild = createGulpEsbuild({
|
8
|
+
incremental: enableIncrementalBuild,
|
9
|
+
});
|
10
|
+
return () => {
|
11
|
+
return gulp.src([
|
12
|
+
'typescript/public/**/*.ts',
|
13
|
+
'typescript/public/**/*.tsx',
|
14
|
+
])
|
15
|
+
.pipe(gulpEsbuild({
|
16
|
+
bundle: false,
|
17
|
+
}))
|
18
|
+
.pipe(gulp.dest(path.join(outputDir, 'public')))
|
19
|
+
.on('error', function () {
|
20
|
+
console.log(chalk.red.underline.bold('Build of Public TS files failed!'));
|
21
|
+
this.emit('end');
|
22
|
+
})
|
23
|
+
.on('end', function () {
|
24
|
+
console.log(chalk.blueBright.underline('Build of Public TS files succeeded!'));
|
25
|
+
});
|
26
|
+
};
|
27
|
+
}
|
28
|
+
export function buildPublicLib(options) {
|
29
|
+
const { outputDir, enableIncrementalBuild } = options;
|
30
|
+
const gulpEsbuild = createGulpEsbuild({
|
31
|
+
incremental: enableIncrementalBuild,
|
32
|
+
});
|
33
|
+
return () => {
|
34
|
+
return gulp.src([
|
35
|
+
'wix-lucy-lib/src/public/**/*.ts',
|
36
|
+
'wix-lucy-lib/src/public/**/*.tsx'
|
37
|
+
])
|
38
|
+
.pipe(gulpEsbuild({
|
39
|
+
bundle: false,
|
40
|
+
}))
|
41
|
+
.pipe(gulp.dest(path.join(outputDir, 'public')))
|
42
|
+
.on('error', function () {
|
43
|
+
console.log(chalk.red.underline.bold('Build of Public (LIB) TS files failed!'));
|
44
|
+
this.emit('end');
|
45
|
+
})
|
46
|
+
.on('end', function () {
|
47
|
+
console.log(chalk.blueBright.underline('Build of Public (LIB) TS files succeeded!'));
|
48
|
+
});
|
49
|
+
};
|
50
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
import chalk from 'chalk';
|
2
|
+
import gulp from 'gulp';
|
3
|
+
import { createGulpEsbuild } from 'gulp-esbuild';
|
4
|
+
import rename from 'gulp-rename';
|
5
|
+
import * as path from 'path';
|
6
|
+
export function buildBackend(options) {
|
7
|
+
const { outputDir, enableIncrementalBuild } = options;
|
8
|
+
const gulpEsbuild = createGulpEsbuild({
|
9
|
+
incremental: enableIncrementalBuild,
|
10
|
+
});
|
11
|
+
return () => {
|
12
|
+
return gulp.src([
|
13
|
+
'typescript/backend/**/*.ts',
|
14
|
+
'typescript/backend/**/*.tsx',
|
15
|
+
'!typescript/backend/**/frontend.*.ts',
|
16
|
+
'!typescript/backend/**/*.spec.ts',
|
17
|
+
])
|
18
|
+
.pipe(gulpEsbuild({
|
19
|
+
bundle: false,
|
20
|
+
}))
|
21
|
+
.pipe(gulp.dest(path.join(outputDir, 'backend')))
|
22
|
+
.on('error', function () {
|
23
|
+
console.log(chalk.red.underline.bold('Build of Backend TS files failed!'));
|
24
|
+
this.emit('end');
|
25
|
+
})
|
26
|
+
.on('end', function () {
|
27
|
+
console.log(chalk.blueBright.underline('Build of Backend TS files succeeded!'));
|
28
|
+
});
|
29
|
+
};
|
30
|
+
}
|
31
|
+
export function buildBackendJSW(options) {
|
32
|
+
const { outputDir, enableIncrementalBuild } = options;
|
33
|
+
const gulpEsbuild = createGulpEsbuild({
|
34
|
+
incremental: enableIncrementalBuild,
|
35
|
+
});
|
36
|
+
return () => {
|
37
|
+
return gulp.src(['typescript/backend/**/*.jsw.ts', 'wix-lucy-lib/backend/**/*.jsw.ts'])
|
38
|
+
.pipe(gulpEsbuild({
|
39
|
+
bundle: false,
|
40
|
+
}))
|
41
|
+
.pipe(rename({ extname: '.jsw' }))
|
42
|
+
.pipe(gulp.dest(path.join(outputDir, 'backend')))
|
43
|
+
.on('error', function () {
|
44
|
+
console.log(chalk.red.underline.bold('Build of JSW files failed!'));
|
45
|
+
this.emit('end');
|
46
|
+
})
|
47
|
+
.on('end', function () { console.log(chalk.blueBright.underline('Build of JSW files succeeded!')); });
|
48
|
+
};
|
49
|
+
}
|
@@ -0,0 +1,119 @@
|
|
1
|
+
import chalk from 'chalk';
|
2
|
+
import * as fs from 'fs';
|
3
|
+
import glob from 'glob';
|
4
|
+
import * as path from 'path';
|
5
|
+
import gulp from 'gulp';
|
6
|
+
import ts from 'gulp-typescript';
|
7
|
+
/**
|
8
|
+
* Extracts a match from a file
|
9
|
+
* @param {string} filePath File path
|
10
|
+
* @param {string} pattern Pattern to match
|
11
|
+
*/
|
12
|
+
function extractMatchFromFile(filePath, pattern) {
|
13
|
+
return new Promise((resolve, reject) => {
|
14
|
+
fs.readFile(filePath, 'utf8', (err, data) => {
|
15
|
+
if (err) {
|
16
|
+
reject(err);
|
17
|
+
return;
|
18
|
+
}
|
19
|
+
const regex = new RegExp(pattern);
|
20
|
+
const match = regex.exec(data);
|
21
|
+
const capturedGroup = match ? match.groups?.page : null;
|
22
|
+
resolve(capturedGroup);
|
23
|
+
});
|
24
|
+
});
|
25
|
+
}
|
26
|
+
/**
|
27
|
+
* Reads files in a folder
|
28
|
+
* @param {string} folderPath Folder path
|
29
|
+
* @param {string} pattern Pattern to match
|
30
|
+
* @param {string} globPattern Glob pattern
|
31
|
+
*/
|
32
|
+
function readFilesInFolder(folderPath, pattern, globPattern) {
|
33
|
+
return new Promise((resolve, reject) => {
|
34
|
+
glob(path.join(folderPath, globPattern), (err, files) => {
|
35
|
+
if (err) {
|
36
|
+
reject(err);
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
const filenameList = [];
|
40
|
+
/**
|
41
|
+
* Traverse files
|
42
|
+
* @param {number} index Index
|
43
|
+
*/
|
44
|
+
function traverseFiles(index) {
|
45
|
+
if (index === files.length) {
|
46
|
+
resolve(filenameList);
|
47
|
+
return;
|
48
|
+
}
|
49
|
+
const file = files[index];
|
50
|
+
if (pattern) {
|
51
|
+
if (!file)
|
52
|
+
return;
|
53
|
+
extractMatchFromFile(file, pattern)
|
54
|
+
.then((capturedGroup) => {
|
55
|
+
if (capturedGroup) {
|
56
|
+
filenameList.push(capturedGroup);
|
57
|
+
}
|
58
|
+
traverseFiles(index + 1);
|
59
|
+
})
|
60
|
+
.catch(reject);
|
61
|
+
}
|
62
|
+
if (!pattern) {
|
63
|
+
if (!file)
|
64
|
+
return;
|
65
|
+
filenameList.push(path.basename(file));
|
66
|
+
traverseFiles(index + 1);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
traverseFiles(0);
|
70
|
+
});
|
71
|
+
});
|
72
|
+
}
|
73
|
+
export async function checkPages() {
|
74
|
+
console.log(chalk.blueBright.underline.bold('Checking pages...'));
|
75
|
+
const sourcePages = await readFilesInFolder('./.wix/types/', '\\/pages\\/(?<page>.*\\.ts)', '**/*.json');
|
76
|
+
const tsPages = await readFilesInFolder('./typescript/pages', null, '**/*.ts');
|
77
|
+
const sourcePagesSet = new Set(sourcePages);
|
78
|
+
const tsPagesSet = new Set(tsPages);
|
79
|
+
const missingInTs = Array.from(sourcePagesSet).filter((item) => !tsPages.includes(item));
|
80
|
+
const obsoleteInTs = Array.from(tsPagesSet).filter((item) => !sourcePages.includes(item));
|
81
|
+
if (missingInTs.length > 0) {
|
82
|
+
console.log(chalk.yellow.underline.bold('Missing in ts folder: '), '\n', missingInTs);
|
83
|
+
throw new Error('Missing in ts folder');
|
84
|
+
}
|
85
|
+
if (obsoleteInTs.length > 0) {
|
86
|
+
console.log(chalk.yellow.underline.bold('Obsolete in ts folder'), '\n', obsoleteInTs);
|
87
|
+
throw new Error('Obsolete in ts folder');
|
88
|
+
}
|
89
|
+
if (missingInTs.length === 0 || obsoleteInTs.length === 0)
|
90
|
+
console.log(chalk.blueBright.underline.bold('Files are insync!'));
|
91
|
+
}
|
92
|
+
export function checkTs() {
|
93
|
+
const tsProject = ts.createProject('./wix-lucy-lib/tsconfig.json', { noEmit: true });
|
94
|
+
return () => {
|
95
|
+
return gulp.src(['wix-lucy-lib/typescript/**/*.ts', '!wix-lucy-lib/typescript/types/**/*.ts'], { cwd: 'typescript' })
|
96
|
+
.pipe(tsProject(ts.reporter.fullReporter()))
|
97
|
+
.on('error', function () {
|
98
|
+
console.log(chalk.red.underline.bold('Typescript (LIB) error!'));
|
99
|
+
this.emit('end');
|
100
|
+
})
|
101
|
+
.on('end', function () {
|
102
|
+
console.log(chalk.blueBright.underline('Typescript check succeeded!'));
|
103
|
+
});
|
104
|
+
};
|
105
|
+
}
|
106
|
+
export function checkTsLib() {
|
107
|
+
const tsProject = ts.createProject('./wix-lucy-lib/tsconfig.json', { noEmit: true });
|
108
|
+
return () => {
|
109
|
+
return gulp.src(['wix-lucy-lib/typescript/**/*.ts', '!wix-lucy-lib/typescript/types/**/*.ts'], { cwd: 'typescript' })
|
110
|
+
.pipe(tsProject(ts.reporter.fullReporter()))
|
111
|
+
.on('error', function () {
|
112
|
+
console.log(chalk.red.underline.bold('Typescript (LIB) error!'));
|
113
|
+
this.emit('end');
|
114
|
+
})
|
115
|
+
.on('end', function () {
|
116
|
+
console.log(chalk.blueBright.underline('Typescript check (LIB) succeeded!'));
|
117
|
+
});
|
118
|
+
};
|
119
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import chalk from 'chalk';
|
2
|
+
import gulp from 'gulp';
|
3
|
+
import { createGulpEsbuild } from 'gulp-esbuild';
|
4
|
+
import clean from 'gulp-clean';
|
5
|
+
export function cleanWix(options) {
|
6
|
+
const { outputDir, enableIncrementalBuild } = options;
|
7
|
+
const gulpEsbuild = createGulpEsbuild({
|
8
|
+
incremental: enableIncrementalBuild,
|
9
|
+
});
|
10
|
+
return () => {
|
11
|
+
return gulp.src('./.wix', { read: false, allowEmpty: true })
|
12
|
+
.pipe(clean({ force: true }))
|
13
|
+
.on('error', function () {
|
14
|
+
console.log(chalk.red.underline.bold('Cleaning of .wix failed!'));
|
15
|
+
this.emit('end');
|
16
|
+
})
|
17
|
+
.on('end', function () { console.log(chalk.blueBright.underline('Cleaning of .wix succeeded!')); });
|
18
|
+
};
|
19
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare function cleanWix(): () => any;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import chalk from 'chalk';
|
2
|
+
import gulp from 'gulp';
|
3
|
+
import clean from 'gulp-clean';
|
4
|
+
export function cleanWix() {
|
5
|
+
return () => {
|
6
|
+
return gulp.src('./.wix', { read: false, allowEmpty: true })
|
7
|
+
.pipe(clean({ force: true }))
|
8
|
+
.on('error', function () {
|
9
|
+
console.log(chalk.red.underline.bold('Cleaning of .wix failed!'));
|
10
|
+
this.emit('end');
|
11
|
+
})
|
12
|
+
.on('end', function () { console.log(chalk.blueBright.underline('Cleaning of .wix succeeded!')); });
|
13
|
+
};
|
14
|
+
}
|