Sub-Store 2.0 major release

- Used Peggy.js to replace the original parsers for Loon, QX and Surge.
- Added support for vmess + ws, vmess + http, snell, socks 5 parsing.
- Added various test cases for parsing.
This commit is contained in:
Peng-YM
2022-06-16 00:14:59 +08:00
parent 98bb91babd
commit 275097f58b
19 changed files with 4159 additions and 506 deletions

View File

@@ -4,65 +4,67 @@ import gulp from 'gulp';
import prettier from 'gulp-prettier';
import header from 'gulp-header';
import eslint from 'gulp-eslint-new';
import newFile from 'gulp-file';
import path from 'path';
import tap from 'gulp-tap';
import pkg from './package.json';
export function peggy() {
return gulp.src('src/**/*.peg')
.pipe(tap(function (file) {
const filename = path.basename(file.path).split(".")[0] + ".js";
const raw = fs.readFileSync(file.path, 'utf8');
const contents = `const grammars = String.raw\`\n${raw}\n\`;\nexport default grammars;`;
return newFile(filename, contents)
.pipe(gulp.dest(path.dirname(file.path)))
}));
}
export function lint() {
return gulp
.src('src/**/*.js')
.pipe(eslint({ fix: true }))
.pipe(eslint.fix())
.pipe(eslint.format())
.pipe(eslint.failAfterError());
return gulp
.src('src/**/*.js')
.pipe(eslint({fix: true}))
.pipe(eslint.fix())
.pipe(eslint.format())
.pipe(eslint.failAfterError());
}
export function styles() {
return gulp
.src('src/**/*.js')
.pipe(
prettier({
singleQuote: true,
trailingComma: 'all',
tabWidth: 4,
bracketSpacing: true
})
)
.pipe(gulp.dest((file) => file.base));
return gulp
.src('src/**/*.js')
.pipe(prettier({
singleQuote: true, trailingComma: 'all', tabWidth: 4, bracketSpacing: true
}))
.pipe(gulp.dest((file) => file.base));
}
function scripts(src, dest) {
return () => {
return browserify(src)
.transform('babelify', {
presets: [ [ '@babel/preset-env' ] ]
})
.plugin('tinyify')
.bundle()
.pipe(fs.createWriteStream(dest));
};
return () => {
return browserify(src)
.transform('babelify', {
presets: [['@babel/preset-env']]
})
.plugin('tinyify')
.bundle()
.pipe(fs.createWriteStream(dest));
};
}
function banner(dest) {
return () => gulp
.src(dest)
.pipe(header(fs.readFileSync('./banner', 'utf-8'), { pkg, updated: new Date().toLocaleString() }))
.pipe(gulp.dest((file) => file.base));
return () => gulp
.src(dest)
.pipe(header(fs.readFileSync('./banner', 'utf-8'), {pkg, updated: new Date().toLocaleString()}))
.pipe(gulp.dest((file) => file.base));
}
const artifacts = [
{ src: 'src/main.js', dest: 'sub-store.min.js' },
{ src: 'src/products/resource-parser.loon.js', dest: 'dist/sub-store-parser.loon.min.js'}
]
{src: 'src/main.js', dest: 'sub-store.min.js'},
{src: 'src/products/resource-parser.loon.js', dest: 'dist/sub-store-parser.loon.min.js'}
];
export const build = gulp.series(
gulp.parallel(artifacts.map(artifact => scripts(artifact.src, artifact.dest))),
gulp.parallel(artifacts.map(artifact => banner(artifact.dest)))
);
export const build = gulp.series(gulp.parallel(artifacts.map(artifact => scripts(artifact.src, artifact.dest))), gulp.parallel(artifacts.map(artifact => banner(artifact.dest))));
const all = gulp.series(
lint,
styles,
build
)
const all = gulp.series(peggy, lint, styles, build)
export default all;