121 lines
4.1 KiB
TypeScript
121 lines
4.1 KiB
TypeScript
|
import * as plugins from './mod.plugins.js';
|
||
|
import * as paths from '../paths.js';
|
||
|
import * as gulpFunction from '@push.rocks/gulp-function';
|
||
|
import { Project } from '../classes.project.js';
|
||
|
|
||
|
import { logger } from '../gitzone.logging.js';
|
||
|
|
||
|
/**
|
||
|
* ensures a certain dependency
|
||
|
*/
|
||
|
const ensureDependency = async (
|
||
|
packageJsonObjectArg: any,
|
||
|
position: 'dep' | 'devDep' | 'everywhere',
|
||
|
constraint: 'exclude' | 'include' | 'latest',
|
||
|
dependencyArg: string
|
||
|
) => {};
|
||
|
|
||
|
export const run = async (projectArg: Project) => {
|
||
|
const formatStreamWrapper = new plugins.smartstream.StreamWrapper([
|
||
|
plugins.smartgulp.src([`package.json`]),
|
||
|
gulpFunction.forEach(async (fileArg: plugins.smartfile.SmartFile) => {
|
||
|
const npmextraConfig = new plugins.npmextra.Npmextra(paths.cwd);
|
||
|
const gitzoneData: any = npmextraConfig.dataFor('gitzone', {});
|
||
|
const fileString = fileArg.contents.toString();
|
||
|
const packageJson = JSON.parse(fileString);
|
||
|
|
||
|
// metadata
|
||
|
packageJson.repository = {
|
||
|
"type": "git",
|
||
|
"url": `git+https://${gitzoneData.module.githost}/${gitzoneData.module.gitscope}/${gitzoneData.module.gitrepo}.git`
|
||
|
};
|
||
|
packageJson.bugs = {
|
||
|
"url": `https://${gitzoneData.module.githost}/${gitzoneData.module.gitscope}/${gitzoneData.module.gitrepo}/issues`
|
||
|
},
|
||
|
packageJson.homepage = `https://${gitzoneData.module.githost}/${gitzoneData.module.gitscope}/${gitzoneData.module.gitrepo}#readme`;
|
||
|
|
||
|
|
||
|
// Check for module type
|
||
|
if (!packageJson.type) {
|
||
|
logger.log('info', `setting packageJson.type to "module"`);
|
||
|
packageJson.type = 'module';
|
||
|
}
|
||
|
|
||
|
// Check for private or public
|
||
|
if (packageJson.private !== undefined) {
|
||
|
logger.log('info', 'Success -> found private/public info in package.json!');
|
||
|
} else {
|
||
|
logger.log('error', 'found no private boolean! Setting it to private for now!');
|
||
|
packageJson.private = true;
|
||
|
}
|
||
|
|
||
|
// Check for license
|
||
|
if (packageJson.license) {
|
||
|
logger.log('info', 'Success -> found license in package.json!');
|
||
|
} else {
|
||
|
logger.log('error', 'found no license! Setting it to UNLICENSED for now!');
|
||
|
packageJson.license = 'UNLICENSED';
|
||
|
}
|
||
|
|
||
|
// Check for build script
|
||
|
if (packageJson.scripts.build) {
|
||
|
logger.log('info', 'Success -> found build script in package.json!');
|
||
|
} else {
|
||
|
logger.log('error', 'found no build script! Putting a placeholder there for now!');
|
||
|
packageJson.scripts.build = `echo "Not needed for now"`;
|
||
|
}
|
||
|
|
||
|
// Check for buildDocs script
|
||
|
if (!packageJson.scripts.buildDocs) {
|
||
|
logger.log('info', 'found no buildDocs script! Putting tsdoc script there now.');
|
||
|
packageJson.scripts.buildDocs = `tsdoc`;
|
||
|
}
|
||
|
|
||
|
// check package.json
|
||
|
if (!packageJson.main) {
|
||
|
logger.log('error', 'no "main" property');
|
||
|
process.exit(0);
|
||
|
}
|
||
|
if (!packageJson.typings) {
|
||
|
logger.log('error', 'no "typings" property');
|
||
|
process.exit(0);
|
||
|
}
|
||
|
if (!packageJson.browserslist) {
|
||
|
packageJson.browserslist = ['last 1 chrome versions'];
|
||
|
}
|
||
|
if (!packageJson.main.includes('dist_') || !packageJson.typings.includes('dist_')) {
|
||
|
logger.log('error', 'check packagesJson main and typings');
|
||
|
process.exit(0);
|
||
|
}
|
||
|
|
||
|
// check for files
|
||
|
packageJson.files = [
|
||
|
'ts/**/*',
|
||
|
'ts_web/**/*',
|
||
|
'dist/**/*',
|
||
|
'dist_*/**/*',
|
||
|
'dist_ts/**/*',
|
||
|
'dist_ts_web/**/*',
|
||
|
'assets/**/*',
|
||
|
'cli.js',
|
||
|
'npmextra.json',
|
||
|
'readme.md',
|
||
|
];
|
||
|
|
||
|
// check for dependencies
|
||
|
await ensureDependency(packageJson, 'devDep', 'latest', '@push.rocks/tapbundle');
|
||
|
await ensureDependency(packageJson, 'devDep', 'latest', '@git.zone/tstest');
|
||
|
await ensureDependency(packageJson, 'devDep', 'latest', '@git.zone/tsbuild');
|
||
|
|
||
|
// exclude
|
||
|
// TODO
|
||
|
|
||
|
fileArg.setContentsFromString(JSON.stringify(packageJson, null, 2));
|
||
|
}),
|
||
|
plugins.smartgulp.replace(),
|
||
|
]);
|
||
|
await formatStreamWrapper.run().catch((error) => {
|
||
|
console.log(error);
|
||
|
});
|
||
|
};
|