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); }); };