lucy-cli 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.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
@@ -0,0 +1,22 @@
|
|
1
|
+
import gulp from 'gulp';
|
2
|
+
import chalk from 'chalk';
|
3
|
+
export function copyFiles(options) {
|
4
|
+
const { outputDir } = options;
|
5
|
+
return () => {
|
6
|
+
return gulp.src([
|
7
|
+
'typescript/**/*',
|
8
|
+
'!typescript/*tsconfig.json',
|
9
|
+
'!typescript/**/*.ts',
|
10
|
+
'!typescript/**/*.tsx',
|
11
|
+
'!typescript/types/**/**',
|
12
|
+
'!typescript/__mocks__/**/**',
|
13
|
+
'!typescript/public/scss/**',
|
14
|
+
])
|
15
|
+
.pipe(gulp.dest(outputDir))
|
16
|
+
.on('error', function () {
|
17
|
+
console.log(chalk.red.underline.bold('Copy of files failed!'));
|
18
|
+
this.emit('end');
|
19
|
+
})
|
20
|
+
.on('end', function () { console.log(chalk.blueBright.underline('Copy of files succeeded!')); });
|
21
|
+
};
|
22
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import gulp from 'gulp';
|
2
|
+
import chalk from 'chalk';
|
3
|
+
import { createGulpEsbuild } from 'gulp-esbuild';
|
4
|
+
import * as path from 'path';
|
5
|
+
export function buildPages(options) {
|
6
|
+
const { outputDir, enableIncrementalBuild } = options;
|
7
|
+
const gulpEsbuild = createGulpEsbuild({
|
8
|
+
incremental: enableIncrementalBuild, // enables the esbuild's incremental build
|
9
|
+
});
|
10
|
+
return () => {
|
11
|
+
return gulp.src('typescript/pages/*.ts')
|
12
|
+
.pipe(gulpEsbuild({
|
13
|
+
bundle: false,
|
14
|
+
}))
|
15
|
+
.pipe(gulp.dest(path.join(outputDir, 'pages')))
|
16
|
+
.on('error', function () {
|
17
|
+
console.log(chalk.red.underline.bold('Build of Pages TS files failed!'));
|
18
|
+
this.emit('end');
|
19
|
+
})
|
20
|
+
.on('end', function () { console.log(chalk.blueBright.underline('Build of Pages TS files succeeded!')); });
|
21
|
+
};
|
22
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import gulp from 'gulp';
|
2
|
+
import chalk from 'chalk';
|
3
|
+
import { createGulpEsbuild } from 'gulp-esbuild';
|
4
|
+
import * as path from 'path';
|
5
|
+
export function buildPages(options) {
|
6
|
+
const { outputDir, enableIncrementalBuild } = options;
|
7
|
+
const gulpEsbuild = createGulpEsbuild({
|
8
|
+
incremental: enableIncrementalBuild, // enables the esbuild's incremental build
|
9
|
+
});
|
10
|
+
return () => {
|
11
|
+
return gulp.src('typescript/pages/*.ts')
|
12
|
+
.pipe(gulpEsbuild({
|
13
|
+
bundle: false,
|
14
|
+
}))
|
15
|
+
.pipe(gulp.dest(path.join(outputDir, 'pages')))
|
16
|
+
.on('error', function () {
|
17
|
+
console.log(chalk.red.underline.bold('Build of Pages TS files failed!'));
|
18
|
+
this.emit('end');
|
19
|
+
})
|
20
|
+
.on('end', function () { console.log(chalk.blueBright.underline('Build of Pages TS files succeeded!')); });
|
21
|
+
};
|
22
|
+
}
|
@@ -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,17 @@
|
|
1
|
+
import gulp from 'gulp';
|
2
|
+
import chalk from 'chalk';
|
3
|
+
export function compileScss(options) {
|
4
|
+
const { sass, outputDir } = options;
|
5
|
+
return () => {
|
6
|
+
return gulp.src(['typescript/styles/global.scss'])
|
7
|
+
.pipe(sass().on('error', sass.logError))
|
8
|
+
.pipe(gulp.dest(`${outputDir}/public/css`))
|
9
|
+
.on('error', function () {
|
10
|
+
console.log(chalk.red.underline.bold('Compiling of scss files failed!'));
|
11
|
+
this.emit('end');
|
12
|
+
})
|
13
|
+
.on('end', function () {
|
14
|
+
console.log(chalk.blueBright.underline('Compiling of scss files succeeded!'));
|
15
|
+
});
|
16
|
+
};
|
17
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare function previewTemplates(): () => any;
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import gulp from 'gulp';
|
2
|
+
import chalk from 'chalk';
|
3
|
+
import exec from 'gulp-exec';
|
4
|
+
export function previewTemplates() {
|
5
|
+
const options = {
|
6
|
+
continueOnError: true,
|
7
|
+
};
|
8
|
+
return () => {
|
9
|
+
return gulp.src([
|
10
|
+
'typescript/backend/templates/**/*.tsx',
|
11
|
+
'typescript/backend/templates/data/*.json',
|
12
|
+
'!typescript/backend/templates/render.ts',
|
13
|
+
])
|
14
|
+
.pipe(exec((file) => `npx ts-node-esm -T ${file.path}`, options))
|
15
|
+
.on('error', function () {
|
16
|
+
console.log(chalk.red.underline.bold('Render of Template failed!'));
|
17
|
+
this.emit('end');
|
18
|
+
})
|
19
|
+
.on('end', function () { console.log(chalk.blueBright.underline('Render of Template succeeded!')); });
|
20
|
+
};
|
21
|
+
}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import gulp from 'gulp';
|
3
|
+
import { TaskOptions } from '../Gulpfile';
|
4
|
+
export declare function updateWixTypes(options: TaskOptions): () => any;
|
5
|
+
export declare function addTypes(options: TaskOptions, done: gulp.TaskFunctionCallback): NodeJS.ReadWriteStream;
|
@@ -0,0 +1,73 @@
|
|
1
|
+
import chalk from 'chalk';
|
2
|
+
import gulp from 'gulp';
|
3
|
+
import * as path from 'path';
|
4
|
+
import replace from 'gulp-string-replace';
|
5
|
+
import foreach from 'gulp-foreach';
|
6
|
+
import jeditor from 'gulp-json-editor';
|
7
|
+
import merge from 'merge-stream';
|
8
|
+
import * as insert from 'gulp-insert';
|
9
|
+
export function updateWixTypes(options) {
|
10
|
+
const { publicSettings, backendSettings, masterSettings, pageSettings, replaceOpions } = options;
|
11
|
+
let count = 0;
|
12
|
+
return () => {
|
13
|
+
return gulp.src(['./.wix/types/*/*.json', '!./.wix/types/wix-code-types/*.json'])
|
14
|
+
.pipe(foreach(function (stream, file) {
|
15
|
+
count++;
|
16
|
+
if (file.dirname.endsWith('public'))
|
17
|
+
return stream.pipe(jeditor(publicSettings));
|
18
|
+
if (file.dirname.endsWith('backend'))
|
19
|
+
return stream.pipe(jeditor(backendSettings));
|
20
|
+
if (file.dirname.endsWith('masterPage'))
|
21
|
+
return stream.pipe(jeditor(masterSettings));
|
22
|
+
return stream.pipe(jeditor(pageSettings));
|
23
|
+
}))
|
24
|
+
.pipe(replace('masterPage.masterPage.js', 'masterPage.ts', replaceOpions))
|
25
|
+
.pipe(replace('/src/', '/typescript/', replaceOpions))
|
26
|
+
.pipe(replace('.js"', '.ts"', replaceOpions))
|
27
|
+
// .pipe(tap(function(file) { // tap into the stream to log the output
|
28
|
+
// console.log(file.contents?.toString() ?? 'no content');
|
29
|
+
// }))
|
30
|
+
.pipe(gulp.dest((file) => {
|
31
|
+
const filePath = file.dirname;
|
32
|
+
const outputDir = path.dirname(filePath);
|
33
|
+
return path.join(outputDir);
|
34
|
+
}))
|
35
|
+
.on('error', function () {
|
36
|
+
console.log(chalk.red.underline.bold('Modification of WIX configs failed!'));
|
37
|
+
this.emit('end');
|
38
|
+
})
|
39
|
+
.on('end', function () { console.log(chalk.blueBright.underline(`Modification of ${count} WIX configs succeeded!`)); });
|
40
|
+
};
|
41
|
+
}
|
42
|
+
export function addTypes(options, done) {
|
43
|
+
const { replaceOpions, cwd } = options;
|
44
|
+
console.log('CWD', cwd);
|
45
|
+
const processPages = gulp.src(['./.wix/types/wix-code-types/dist/types/page/$w.d.ts'])
|
46
|
+
.pipe(replace('declare namespace \\$w {', ' declare namespace $w{\nconst api: $w.Api;\n', replaceOpions))
|
47
|
+
.pipe(gulp.dest('./.wix/types/wix-code-types/dist/types/page/'));
|
48
|
+
const exportTypes = gulp.src(['./.wix/types/wix-code-types/dist/types/common/*.d.ts', '!./.wix/types/wix-code-types/dist/types/common/$w.d.ts'])
|
49
|
+
.pipe(replace('interface ', 'export interface ', replaceOpions))
|
50
|
+
.pipe(replace('enum ', 'export enum ', replaceOpions))
|
51
|
+
.pipe(replace('type ', 'export type ', replaceOpions))
|
52
|
+
.pipe(gulp.dest('./.wix/types/wix-code-types/dist/types/common/'));
|
53
|
+
const exportTypesBeta = gulp.src(['./.wix/types/wix-code-types/dist/types/beta/common/*.d.ts', '!./.wix/types/wix-code-types/dist/types/beta/common/$w.d.ts'])
|
54
|
+
.pipe(replace('interface ', 'export interface ', replaceOpions))
|
55
|
+
.pipe(replace('enum ', 'export enum ', replaceOpions))
|
56
|
+
.pipe(replace('type ', 'export type ', replaceOpions))
|
57
|
+
.pipe(gulp.dest('./.wix/types/wix-code-types/dist/types/beta/common/'));
|
58
|
+
const processCommon = gulp.src(['./.wix/types/wix-code-types/dist/types/common/$w.d.ts'])
|
59
|
+
.pipe(insert.prepend("import { FrontendAPISchema } from '../../../../../../typescript/public/models/common/frontendApi.model';\nimport '@total-typescript/ts-reset';\n"))
|
60
|
+
.pipe(replace('namespace \\$w {', 'declare namespace $w{\ntype Api = FrontendAPISchema;\n', replaceOpions))
|
61
|
+
.pipe(gulp.dest('./.wix/types/wix-code-types/dist/types/common/'));
|
62
|
+
return merge(processPages, processCommon, exportTypesBeta, exportTypes)
|
63
|
+
.on('error', function () {
|
64
|
+
console.log(chalk.red.underline.bold('Add of new Types (store & Global) failed!'));
|
65
|
+
this.emit('end');
|
66
|
+
done();
|
67
|
+
})
|
68
|
+
.on('end', function () {
|
69
|
+
console.log(chalk.blueBright.underline('Add of new Types (store & Global) succeeded!'));
|
70
|
+
done();
|
71
|
+
});
|
72
|
+
}
|
73
|
+
;
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
import { dirname } from 'path';
|
3
|
+
import { fileURLToPath } from 'url';
|
4
|
+
import { existsSync } from 'fs';
|
5
|
+
import chalk from 'chalk';
|
6
|
+
import { join } from 'path';
|
7
|
+
import fs from 'fs/promises';
|
8
|
+
import { init } from './init.js';
|
9
|
+
import { dev } from './dev.js';
|
10
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
12
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
13
|
+
const __dirname = dirname(__filename);
|
14
|
+
/**
|
15
|
+
*
|
16
|
+
*/
|
17
|
+
async function main() {
|
18
|
+
const moduleSettings = {
|
19
|
+
packageRoot: dirname(__dirname),
|
20
|
+
targetFolder: process.cwd(),
|
21
|
+
args: process.argv.slice(2),
|
22
|
+
wixConfigPath: join(process.cwd(), 'wix.config.json'),
|
23
|
+
lucyConfigPath: join(process.cwd(), 'lucy.json')
|
24
|
+
};
|
25
|
+
let projectSettings;
|
26
|
+
if (!existsSync(moduleSettings.wixConfigPath)) {
|
27
|
+
console.log(chalk.red.underline.bold(`This is not a WIX project ${moduleSettings.targetFolder}`));
|
28
|
+
return;
|
29
|
+
}
|
30
|
+
const packageJSONraw = await fs.readFile(join(moduleSettings.targetFolder, 'package.json'), 'utf8');
|
31
|
+
const packageJSON = JSON.parse(packageJSONraw);
|
32
|
+
if (existsSync(moduleSettings.lucyConfigPath)) {
|
33
|
+
try {
|
34
|
+
const data = await fs.readFile(moduleSettings.lucyConfigPath, 'utf8');
|
35
|
+
projectSettings = JSON.parse(data);
|
36
|
+
}
|
37
|
+
catch (parseError) {
|
38
|
+
console.error(chalk.red.underline.bold('Error parsing Lucy.json', parseError));
|
39
|
+
}
|
40
|
+
}
|
41
|
+
else {
|
42
|
+
console.log(chalk.blueBright.underline.bold('Project not Intialized!'));
|
43
|
+
return;
|
44
|
+
}
|
45
|
+
if (packageJSON?.wixLucy?.intialized && !args.includes('-f')) {
|
46
|
+
console.error(chalk.red.underline.bold(`This project is already initialized ${moduleSettings.targetFolder}`));
|
47
|
+
return;
|
48
|
+
}
|
49
|
+
console.log({ args, cwd });
|
50
|
+
if (args.includes('help') || args.includes('-h')) {
|
51
|
+
console.log('Help is on the way!');
|
52
|
+
return;
|
53
|
+
}
|
54
|
+
if (args.includes('version') || args.includes('-v')) {
|
55
|
+
console.log('1.0.0');
|
56
|
+
return;
|
57
|
+
}
|
58
|
+
if (args.includes('init')) {
|
59
|
+
init(cwd, packageRoot, args);
|
60
|
+
return;
|
61
|
+
}
|
62
|
+
if (args.includes('dev')) {
|
63
|
+
dev(cwd, args);
|
64
|
+
return;
|
65
|
+
}
|
66
|
+
if (args.includes('sync')) {
|
67
|
+
console.log('Hello serve');
|
68
|
+
return;
|
69
|
+
}
|
70
|
+
}
|
71
|
+
main();
|
72
|
+
// const fs = require("fs"),
|
73
|
+
// path = require("path")
|
74
|
+
// /** Parse the command line */
|
75
|
+
// var args = process.argv.slice(2);
|
76
|
+
// // Validate input
|
77
|
+
// if (args.length !== 2) {
|
78
|
+
// console.log("Warning: Requires 2 arguments");
|
79
|
+
// console.log("node index.js [path/source.html] [targetfile]");
|
80
|
+
// process.exit();
|
81
|
+
// }
|
82
|
+
// const src = args[0];
|
83
|
+
// const target = args[1];
|
84
|
+
// const dirsrc = path.dirname(src);
|
85
|
+
// if (!fs.existsSync(src)) {
|
86
|
+
// console.log("Error: Source file doesn't exist. Given: ", src);
|
87
|
+
// process.exit();
|
88
|
+
// }
|
package/dist/init.d.ts
ADDED
package/dist/init.js
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
import chalk from 'chalk';
|
2
|
+
import { existsSync, mkdirSync, promises as fsPromises } from 'fs';
|
3
|
+
import fse from 'fs-extra';
|
4
|
+
import { join } from 'path';
|
5
|
+
import { simpleGit } from 'simple-git';
|
6
|
+
import fs from 'fs/promises';
|
7
|
+
import { spawnSync } from 'child_process';
|
8
|
+
import settings from './settings.json' assert { type: 'json' };
|
9
|
+
import path from 'path';
|
10
|
+
/**
|
11
|
+
* Init Lucy project
|
12
|
+
* @param {string} cwd Current working directory
|
13
|
+
* @param {string} packageRoot Package root directory
|
14
|
+
* @returns {void}
|
15
|
+
*/
|
16
|
+
export async function init(cwd, packageRoot, args) {
|
17
|
+
const sourceFolder = join(packageRoot, 'files');
|
18
|
+
const targetFolder = cwd;
|
19
|
+
let projectSettings;
|
20
|
+
if (existsSync(join(targetFolder, 'lucy.json'))) {
|
21
|
+
try {
|
22
|
+
const lucyConfig = join(targetFolder, 'lucy.json');
|
23
|
+
const data = await fs.readFile(lucyConfig, 'utf8');
|
24
|
+
projectSettings = JSON.parse(data);
|
25
|
+
}
|
26
|
+
catch (parseError) {
|
27
|
+
console.error(chalk.red.underline.bold('Error parsinc Lucy.json', parseError));
|
28
|
+
}
|
29
|
+
}
|
30
|
+
else {
|
31
|
+
const lucyConfig = {
|
32
|
+
packages: settings.packages,
|
33
|
+
modules: settings.modules
|
34
|
+
};
|
35
|
+
await fs.writeFile(join(targetFolder, 'lucy.json'), JSON.stringify(lucyConfig, null, 2), 'utf8');
|
36
|
+
console.log(chalk.blueBright.underline.bold('Created Lucy config file!'));
|
37
|
+
}
|
38
|
+
const wixConfigPath = join(targetFolder, 'wix.config.json');
|
39
|
+
const packageJSONraw = await fs.readFile(join(targetFolder, 'package.json'), 'utf8');
|
40
|
+
const packageJSON = JSON.parse(packageJSONraw);
|
41
|
+
if (packageJSON?.wixLucy?.intialized && !args.includes('-f')) {
|
42
|
+
console.error(chalk.red.underline.bold(`This project is already initialized ${targetFolder}`));
|
43
|
+
return;
|
44
|
+
}
|
45
|
+
if (!existsSync(wixConfigPath)) {
|
46
|
+
console.error(chalk.red.underline.bold(`This is not a WIX project ${targetFolder}`));
|
47
|
+
return;
|
48
|
+
}
|
49
|
+
await copyFolder(sourceFolder, targetFolder);
|
50
|
+
await editJson(join(targetFolder, 'package.json'), ['type', 'scripts', 'wixLucy'], ['module', settings.scripts, settings.lucySettings]);
|
51
|
+
await stringReplace(join(targetFolder, 'currents.config.js'), ['__ProjectName__'], [path.basename(targetFolder)]);
|
52
|
+
await installPackages(projectSettings?.packages ? projectSettings?.packages : settings.packages, targetFolder);
|
53
|
+
await editJson(join(targetFolder, 'jsconfig.json'), ['compilerOptions', 'exclude'], [settings.wixSettings.compilerOptions, settings.wixSettings.exclude]);
|
54
|
+
await editJson(join(targetFolder, 'typedoc.json'), ['name'], [path.basename(targetFolder)]);
|
55
|
+
await gitInit(targetFolder, projectSettings?.modules ? projectSettings?.modules : settings.modules);
|
56
|
+
console.log(chalk.blueBright.underline.bold('Done!'));
|
57
|
+
}
|
58
|
+
/**
|
59
|
+
* Copy files from source to target
|
60
|
+
* @param {string} source Source folder
|
61
|
+
* @param {string} target Target folder
|
62
|
+
* @returns {Promise<void>}
|
63
|
+
*/
|
64
|
+
async function copyFolder(source, target) {
|
65
|
+
if (!existsSync(target)) {
|
66
|
+
console.error(chalk.red.underline.bold(`Target folder doesn't exist: ${target}`));
|
67
|
+
return;
|
68
|
+
}
|
69
|
+
try {
|
70
|
+
const files = await fsPromises.readdir(source);
|
71
|
+
for (const file of files) {
|
72
|
+
const sourcePath = join(source, file);
|
73
|
+
const targetPath = join(target, file);
|
74
|
+
if (file === 'lucy.json' && existsSync(targetPath)) {
|
75
|
+
continue;
|
76
|
+
}
|
77
|
+
const stats = await fsPromises.stat(sourcePath);
|
78
|
+
if (stats.isDirectory()) {
|
79
|
+
if (!existsSync(file)) {
|
80
|
+
mkdirSync(file);
|
81
|
+
}
|
82
|
+
await fse.copySync(sourcePath, targetPath, { overwrite: true });
|
83
|
+
}
|
84
|
+
else {
|
85
|
+
fse.copySync(sourcePath, targetPath, { overwrite: true });
|
86
|
+
}
|
87
|
+
}
|
88
|
+
}
|
89
|
+
catch (err) {
|
90
|
+
console.error(chalk.red.underline.bold(err));
|
91
|
+
}
|
92
|
+
finally {
|
93
|
+
console.log(chalk.blueBright.underline.bold('Copy files completed!'));
|
94
|
+
}
|
95
|
+
}
|
96
|
+
/**
|
97
|
+
* Edit Json files
|
98
|
+
* @param {string} filePath File path
|
99
|
+
* @param {string[]} keys Keys to edit
|
100
|
+
* @param {string[]} values Values to edit
|
101
|
+
* @returns {void}
|
102
|
+
*/
|
103
|
+
async function editJson(filePath, keys, values) {
|
104
|
+
try {
|
105
|
+
const data = await fs.readFile(filePath, 'utf8');
|
106
|
+
let jsonData;
|
107
|
+
try {
|
108
|
+
jsonData = JSON.parse(data);
|
109
|
+
}
|
110
|
+
catch (parseError) {
|
111
|
+
console.error(chalk.red.underline.bold('Error parsing JSON:', parseError));
|
112
|
+
return;
|
113
|
+
}
|
114
|
+
for (const key of keys) {
|
115
|
+
const index = keys.indexOf(key);
|
116
|
+
const value = values[index];
|
117
|
+
jsonData[key] = value;
|
118
|
+
}
|
119
|
+
const updatedJsonData = JSON.stringify(jsonData, null, 2);
|
120
|
+
await fs.writeFile(filePath, updatedJsonData, 'utf8');
|
121
|
+
}
|
122
|
+
catch (err) {
|
123
|
+
console.log(chalk.red.underline.bold(err));
|
124
|
+
}
|
125
|
+
finally {
|
126
|
+
console.log(chalk.blueBright.underline.bold(`File ${filePath} updated successfully!`));
|
127
|
+
}
|
128
|
+
}
|
129
|
+
async function stringReplace(filePath, keys, values) {
|
130
|
+
try {
|
131
|
+
let modifiedContent = '';
|
132
|
+
const data = await fs.readFile(filePath, 'utf8');
|
133
|
+
for (const key of keys) {
|
134
|
+
const index = keys.indexOf(key);
|
135
|
+
const value = values[index];
|
136
|
+
const regex = new RegExp(`${key}`, 'g');
|
137
|
+
modifiedContent = data.replace(regex, `${value}`);
|
138
|
+
}
|
139
|
+
await fs.writeFile(filePath, modifiedContent, 'utf8');
|
140
|
+
}
|
141
|
+
catch (err) {
|
142
|
+
console.log(chalk.red.underline.bold(err));
|
143
|
+
}
|
144
|
+
finally {
|
145
|
+
console.log(chalk.blueBright.underline.bold(`File ${filePath} updated successfully!`));
|
146
|
+
}
|
147
|
+
}
|
148
|
+
async function installPackages(packages, cwd) {
|
149
|
+
const packageNames = Object.keys(packages);
|
150
|
+
const packageVersions = Object.values(packages);
|
151
|
+
const packageNamesAndVersions = packageNames.map((name, index) => `${name}@${packageVersions[index]}`);
|
152
|
+
const command = `yarn add ${packageNamesAndVersions.join(' ')}`;
|
153
|
+
const result = spawnSync(command, { shell: true, stdio: 'inherit' });
|
154
|
+
if (result.error) {
|
155
|
+
console.error(chalk.red.underline.bold(`Command failed: ${result.error.message}`));
|
156
|
+
}
|
157
|
+
else {
|
158
|
+
console.log(chalk.blueBright.underline.bold(`Command succeeded: ${result.stdout}`));
|
159
|
+
}
|
160
|
+
}
|
161
|
+
async function gitInit(cwd, modules) {
|
162
|
+
const git = simpleGit({ baseDir: cwd });
|
163
|
+
for (const [name, url] of Object.entries(modules)) {
|
164
|
+
console.log(chalk.green.underline.bold(`Cloning ${name}`));
|
165
|
+
try {
|
166
|
+
await git.submoduleAdd(url, name);
|
167
|
+
}
|
168
|
+
catch (e) {
|
169
|
+
console.error(chalk.red.underline.bold(`Command failed: ${e}`));
|
170
|
+
}
|
171
|
+
finally {
|
172
|
+
console.log(chalk.blueBright.underline.bold(`Cloned ${name}`));
|
173
|
+
}
|
174
|
+
}
|
175
|
+
console.log(chalk.blueBright.underline.bold(`All Modules cloned!`));
|
176
|
+
}
|
@@ -0,0 +1,91 @@
|
|
1
|
+
{
|
2
|
+
"modules": {
|
3
|
+
"wix-lucy-lib": "git@github.com:Integral-Systems/wix-lucy-lib.git"
|
4
|
+
},
|
5
|
+
"wixSettings": {
|
6
|
+
"compilerOptions": {
|
7
|
+
"composite": true,
|
8
|
+
"noEmit": false,
|
9
|
+
"lib": [
|
10
|
+
"DOM"
|
11
|
+
],
|
12
|
+
"jsx": "react"
|
13
|
+
},
|
14
|
+
"exclude": [
|
15
|
+
"**/*.js"
|
16
|
+
]
|
17
|
+
},
|
18
|
+
"lucySettings": {
|
19
|
+
"intialized": true
|
20
|
+
},
|
21
|
+
"packages": {
|
22
|
+
"@danpercic86/helpful-decorators": "^2.4.0",
|
23
|
+
"@js-joda/core": "5.5.3",
|
24
|
+
"@js-joda/locale": "4.8.10",
|
25
|
+
"@js-joda/locale_de": "4.8.10",
|
26
|
+
"@js-joda/locale_en": "4.8.10",
|
27
|
+
"@js-joda/timezone": "2.18.0",
|
28
|
+
"@react-pdf/renderer": "2.0.17",
|
29
|
+
"@total-typescript/ts-reset": "^0.4.2",
|
30
|
+
"@types/i18n": "^0.13.6",
|
31
|
+
"@types/jest": "^29.5.3",
|
32
|
+
"@types/node": "^20.5.7",
|
33
|
+
"@types/nodemailer": "^6.4.10",
|
34
|
+
"@types/react": "^18.2.21",
|
35
|
+
"@typescript-eslint/eslint-plugin": "^5.61.0",
|
36
|
+
"@typescript-eslint/parser": "^5.61.0",
|
37
|
+
"@typescript-eslint/utils": "^5.61.0",
|
38
|
+
"@wix/cli": "1.0.83",
|
39
|
+
"@wix/eslint-plugin-cli": "^1.0.1",
|
40
|
+
"@wix/image": "1.96.0",
|
41
|
+
"@wix/velo-bind": "1.0.8",
|
42
|
+
"add": "^2.0.6",
|
43
|
+
"await-semaphore": "0.1.3",
|
44
|
+
"axios": "1.4.0",
|
45
|
+
"crypto-js": "4.1.1",
|
46
|
+
"cypress": "^12.17.2",
|
47
|
+
"cypress-cloud": "^1.9.3",
|
48
|
+
"esbuild": "^0.18.11",
|
49
|
+
"eslint": "^8.25.0",
|
50
|
+
"eslint-plugin-import": "^2.27.5",
|
51
|
+
"eslint-plugin-jsdoc": "^46.4.3",
|
52
|
+
"eslint-plugin-named-import-spacing": "^1.0.3",
|
53
|
+
"eslint-plugin-simple-import-sort": "^10.0.0",
|
54
|
+
"eventemitter3": "4.0.7",
|
55
|
+
"gsap": "3.11.4",
|
56
|
+
"helpful-decorators": "^2.1.0",
|
57
|
+
"i18next": "22.4.7",
|
58
|
+
"jest": "^29.6.1",
|
59
|
+
"merge-stream": "^2.0.0",
|
60
|
+
"mobx": "6.8.0",
|
61
|
+
"mobx-utils": "6.0.3",
|
62
|
+
"node-cache": "5.1.2",
|
63
|
+
"nodemailer": "6.9.3",
|
64
|
+
"payment": "2.3.0",
|
65
|
+
"prettier": "^3.0.3",
|
66
|
+
"react": "18.2.0",
|
67
|
+
"react-dom": "18.1.0",
|
68
|
+
"react-transition-group": "4.4.5",
|
69
|
+
"sass": "^1.65.1",
|
70
|
+
"ts-jest": "^29.1.1",
|
71
|
+
"ts-node": "^10.9.1",
|
72
|
+
"tsx": "^3.13.0",
|
73
|
+
"typedoc": "^0.25.1",
|
74
|
+
"typedoc-theme-hierarchy": "^4.0.0",
|
75
|
+
"typescript": "^5.1.6",
|
76
|
+
"uuid": "9.0.0",
|
77
|
+
"zod": "3.22.2"
|
78
|
+
},
|
79
|
+
"scripts": {
|
80
|
+
"postinstall": "wix sync-types",
|
81
|
+
"wix:dev": "wix dev",
|
82
|
+
"dev": "gulp dev",
|
83
|
+
"lint": "eslint .",
|
84
|
+
"docs": "typedoc --tsconfig typescript/tsconfig.json --skipErrorChecking",
|
85
|
+
"build": "gulp build-prod",
|
86
|
+
"fix-wix": "gulp fix-wix",
|
87
|
+
"tsc": "tsc -p ./typescript/tsconfig.json --noEmit",
|
88
|
+
"test": "jest --config jest.config.ts --passWithNoTests",
|
89
|
+
"test:watch": "jest --config jest.config.ts --watch"
|
90
|
+
}
|
91
|
+
}
|