104 lines
3.2 KiB
TypeScript
104 lines
3.2 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';
|
|
|
|
/**
|
|
* Migrates npmextra.json from old namespace keys to new package-scoped keys
|
|
*/
|
|
const migrateNamespaceKeys = (npmextraJson: any): boolean => {
|
|
let migrated = false;
|
|
const migrations = [
|
|
{ oldKey: 'gitzone', newKey: '@git.zone/cli' },
|
|
{ oldKey: 'tsdoc', newKey: '@git.zone/tsdoc' },
|
|
{ oldKey: 'npmdocker', newKey: '@git.zone/tsdocker' },
|
|
{ oldKey: 'npmci', newKey: '@ship.zone/szci' },
|
|
{ oldKey: 'szci', newKey: '@ship.zone/szci' },
|
|
];
|
|
for (const { oldKey, newKey } of migrations) {
|
|
if (npmextraJson[oldKey] && !npmextraJson[newKey]) {
|
|
npmextraJson[newKey] = npmextraJson[oldKey];
|
|
delete npmextraJson[oldKey];
|
|
migrated = true;
|
|
console.log(`Migrated npmextra.json: ${oldKey} -> ${newKey}`);
|
|
}
|
|
}
|
|
return migrated;
|
|
};
|
|
|
|
/**
|
|
* runs the npmextra file checking
|
|
*/
|
|
export const run = async (projectArg: Project) => {
|
|
const formatSmartstream = new plugins.smartstream.StreamWrapper([
|
|
plugins.smartgulp.src([`npmextra.json`]),
|
|
gulpFunction.forEach(async (fileArg: plugins.smartfile.SmartFile) => {
|
|
const fileString = fileArg.contents.toString();
|
|
const npmextraJson = JSON.parse(fileString);
|
|
|
|
// Migrate old namespace keys to new package-scoped keys
|
|
migrateNamespaceKeys(npmextraJson);
|
|
|
|
if (!npmextraJson['@git.zone/cli']) {
|
|
npmextraJson['@git.zone/cli'] = {};
|
|
}
|
|
|
|
const expectedRepoInformation: string[] = [
|
|
'projectType',
|
|
'module.githost',
|
|
'module.gitscope',
|
|
'module.gitrepo',
|
|
'module.description',
|
|
'module.npmPackagename',
|
|
'module.license',
|
|
];
|
|
|
|
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
for (const expectedRepoInformationItem of expectedRepoInformation) {
|
|
if (
|
|
!plugins.smartobject.smartGet(
|
|
npmextraJson['@git.zone/cli'],
|
|
expectedRepoInformationItem,
|
|
)
|
|
) {
|
|
interactInstance.addQuestions([
|
|
{
|
|
message: `What is the value of ${expectedRepoInformationItem}`,
|
|
name: expectedRepoInformationItem,
|
|
type: 'input',
|
|
default: 'undefined variable',
|
|
},
|
|
]);
|
|
}
|
|
}
|
|
|
|
const answerbucket = await interactInstance.runQueue();
|
|
for (const expectedRepoInformationItem of expectedRepoInformation) {
|
|
const cliProvidedValue = answerbucket.getAnswerFor(
|
|
expectedRepoInformationItem,
|
|
);
|
|
if (cliProvidedValue) {
|
|
plugins.smartobject.smartAdd(
|
|
npmextraJson['@git.zone/cli'],
|
|
expectedRepoInformationItem,
|
|
cliProvidedValue,
|
|
);
|
|
}
|
|
}
|
|
|
|
// delete obsolete
|
|
// tbd
|
|
|
|
if (!npmextraJson['@ship.zone/szci']) {
|
|
npmextraJson['@ship.zone/szci'] = {};
|
|
}
|
|
|
|
fileArg.setContentsFromString(JSON.stringify(npmextraJson, null, 2));
|
|
}),
|
|
plugins.smartgulp.replace(),
|
|
]);
|
|
await formatSmartstream.run().catch((error) => {
|
|
console.log(error);
|
|
});
|
|
};
|