mono/packages/discourse-legacy/dist/commands/sync-directory.js
2025-12-30 20:21:59 +01:00

118 lines
5.2 KiB
JavaScript

import * as path from 'path';
import { forward_slash, pathInfo } from "@polymech/commons";
import { resolve, isFile } from '@polymech/commons';
import { sync as exists } from '@polymech/fs/exists';
import { CAT_TEST, DEFAULT_IMPORT_OWNER } from '../lib/discourse/constants';
import { defaults } from '../_cli';
import { logger } from '../index';
import { syncComponent } from '../lib/sync/component';
import { PFilterValid } from '@plastichub/osr-fs-utils';
const globBase = require('glob-base');
export const parse = (argv) => {
let ret = {
...argv
};
ret.src = argv.src;
let srcInfo;
let variables = {};
ret.source = resolve(forward_slash(ret.source), ret.alt, variables);
ret.root = resolve(forward_slash(ret.root), ret.alt, variables);
if (ret.src) {
ret.src = resolve(ret.src, ret.alt, variables);
// in case a file with a glob pattern is provided, strip the glob
// this is a special case, enabling shared scripts in Alt-Tap Salamand
const glob_base = globBase(ret.src);
const file = ret.src.replace(glob_base.glob, '').replace(/\/$/, '');
// case : single file
if (exists(file) && isFile(file)) {
ret.src = file;
}
const src = resolve(forward_slash(ret.src), ret.alt, variables);
srcInfo = pathInfo(src);
// case : glob pattern
if (srcInfo && srcInfo.FILES && srcInfo.FILES.length) {
ret.srcInfo = srcInfo;
for (const key in srcInfo) {
if (Object.prototype.hasOwnProperty.call(srcInfo, key)) {
variables['SRC_' + key] = srcInfo[key];
}
}
}
else {
ret.src = resolve(ret.src, ret.alt, variables);
}
}
if (argv.cwd) {
ret.cwd = path.resolve(argv.cwd);
if (!exists((ret.cwd))) {
logger.error(`Invalid working directory ${argv.cwd}`);
}
}
else {
ret.cwd = process.cwd();
}
ret = {
...ret,
variables,
srcInfo
};
return ret;
};
const defaultOptions = (yargs) => {
return yargs
//standard options
.option('debug', { type: 'boolean', default: true, describe: 'debug messages' })
.option('verbose', { type: 'boolean', default: true, describe: 'even more debug messages' })
.option('alt', { type: 'boolean', default: false, describe: 'alt token (%)' })
//discourse
.option('yaml', { type: 'boolean', default: false, describe: 'Parse options from YAML header' })
.option('uploadLocal', { type: 'boolean', default: true, describe: 'Upload local images to Discourse' })
.option('uploadRemote', { type: 'boolean', default: true, describe: 'Upload remote images to Discourse' })
.option('title', { type: 'string', default: 'Title of the Discourse post' })
.option('cat', { default: CAT_TEST, type: 'number' })
.option('timestamp', { type: 'number', default: Date.now() })
.option('owner', { type: 'number', default: DEFAULT_IMPORT_OWNER })
.option('config', { type: 'string', default: 'discourse_admin' })
//osrl
.option('src2', {
default: '${OSR_ROOT}/osr-machines/injection/**/config.json',
type: 'string',
describe: 'Source : Path|Glob. Supported: HTML|MD|OSR(Options via YAML header)'
})
.option('src', {
default: '${OSR_ROOT}/osr-machines/sheetpress/cassandra-light/config.json',
type: 'string',
describe: 'Source : Path|Glob. Supported: HTML|MD|OSR(Options via YAML header)'
})
.option('env', { type: 'string', default: 'forum' })
.option('profile', { type: 'string', default: "${OSR_ROOT}/osr-templates/discourse/base.json" })
.option('format', { type: 'string', default: 'md' })
.option('source', { type: 'string', default: "${OSR_ROOT}/osr-templates/discourse/root.html" })
.option('language', { type: 'string', default: 'osr' })
.option('plugins', { type: 'string', default: '${root}/osr/plugins' })
.option('root', { type: 'string', default: process.cwd() })
.option('product_root', { type: 'string', default: '${PRODUCT_ROOT}/products' })
.option('cwd', { type: 'string', default: process.cwd() })
.option('module', { type: 'string', default: 'osr-lib-components' })
.option('filter', { type: 'string', default: PFilterValid.library_component })
.option('cache', { type: 'boolean', default: true })
.option('env_key', { type: 'string', default: 'OSR-CONFIG', describe: 'Environment key to the config path.' });
};
let options = (yargs) => defaultOptions(yargs);
export const register = (cli) => {
return cli.command('sync-component', 'Sync OSR Component', options, async (argv) => {
defaults();
if (argv.help) {
return;
}
let options = parse(argv);
if (!options) {
return;
}
// options.debug && logger.debug(`CLI Args In`, argv)
// logger.debug('Options', options)
let ret = syncComponent(options);
return ret;
});
};
//# sourceMappingURL=sync-directory.js.map