103 lines
3.5 KiB
TypeScript
103 lines
3.5 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 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);
|
|
});
|
|
};
|