From d2aa9644fb2240e45385ccc8fe6acf091a63f42b Mon Sep 17 00:00:00 2001 From: Code Date: Thu, 6 Feb 2025 23:49:12 +0100 Subject: [PATCH] cad esm port 2/3 --- packages/cad/dist/_cli.d.ts | 1 + packages/cad/dist/_cli.js | 13 + packages/cad/dist/cad/index.d.ts | 1 + packages/cad/dist/cad/index.js | 2 + packages/cad/dist/cad/sw-convert.d.ts | 6 + packages/cad/dist/cad/sw-convert.js | 365 ++++++++++++++++++ packages/cad/dist/cad/sw-lib.d.ts | 3 + packages/cad/dist/cad/sw-lib.js | 4 + packages/cad/dist/cad/sw-pack.d.ts | 3 + packages/cad/dist/cad/sw-pack.js | 53 +++ packages/cad/dist/cad/sw-types.d.ts | 180 +++++++++ packages/cad/dist/cad/sw-types.js | 139 +++++++ packages/cad/dist/cad/sw-util.d.ts | 9 + packages/cad/dist/cad/sw-util.js | 84 ++++ packages/cad/dist/commands/index.d.ts | 1 + packages/cad/dist/commands/index.js | 2 + packages/cad/dist/commands/info.d.ts | 2 + packages/cad/dist/commands/info.js | 24 ++ packages/cad/dist/commands/pack.d.ts | 3 + packages/cad/dist/commands/pack.js | 54 +++ packages/cad/dist/commands/slice.d.ts | 2 + packages/cad/dist/commands/slice.js | 52 +++ packages/cad/dist/commands/sw-pack.d.ts | 2 + packages/cad/dist/commands/sw-pack.js | 15 + packages/cad/dist/commands/sw.d.ts | 2 + packages/cad/dist/commands/sw.js | 16 + packages/cad/dist/constants.d.ts | 7 + packages/cad/dist/constants.js | 8 + packages/cad/dist/index.d.ts | 11 + packages/cad/dist/index.js | 22 ++ packages/cad/dist/lib/cache.d.ts | 1 + packages/cad/dist/lib/cache.js | 2 + packages/cad/dist/lib/formatter.d.ts | 1 + packages/cad/dist/lib/formatter.js | 19 + packages/cad/dist/lib/geometry/dxf.d.ts | 1 + packages/cad/dist/lib/geometry/dxf.js | 51 +++ packages/cad/dist/lib/index.d.ts | 1 + packages/cad/dist/lib/index.js | 13 + packages/cad/dist/lib/process/index.d.ts | 17 + packages/cad/dist/lib/process/index.js | 142 +++++++ packages/cad/dist/log.d.ts | 1 + packages/cad/dist/log.js | 2 + packages/cad/dist/main.d.ts | 2 + packages/cad/dist/main.js | 18 + .../dist/os/context_menu/register_cli.d.ts | 6 + .../cad/dist/os/context_menu/register_cli.js | 108 ++++++ packages/cad/dist/print/index.d.ts | 1 + packages/cad/dist/print/index.js | 2 + packages/cad/dist/print/slic3r.d.ts | 9 + packages/cad/dist/print/slic3r.js | 341 ++++++++++++++++ packages/cad/dist/report/csv.d.ts | 1 + packages/cad/dist/report/csv.js | 46 +++ packages/cad/dist/report/index.d.ts | 1 + packages/cad/dist/report/index.js | 2 + packages/cad/dist/slic3r_argv.d.ts | 5 + packages/cad/dist/slic3r_argv.js | 182 +++++++++ packages/cad/dist/sw_argv.d.ts | 5 + packages/cad/dist/sw_argv.js | 249 ++++++++++++ packages/cad/dist/types.d.ts | 213 ++++++++++ packages/cad/dist/types.js | 2 + packages/cad/package.json | 10 +- packages/cad/src/cad/index.ts | 2 +- packages/cad/src/cad/sw-convert.ts | 44 +-- packages/cad/src/cad/sw-lib.ts | 25 +- packages/cad/src/cad/sw-pack.ts | 16 +- packages/cad/src/cad/sw-util.ts | 7 +- packages/cad/src/commands/info.ts | 4 +- packages/cad/src/commands/pack.ts | 8 +- packages/cad/src/commands/slice.ts | 14 +- packages/cad/src/commands/sw-pack.ts | 8 +- packages/cad/src/commands/sw.ts | 8 +- packages/cad/src/constants.ts | 6 +- packages/cad/src/index.ts | 37 +- packages/cad/src/lib/geometry/dxf.ts | 4 +- packages/cad/src/lib/process/index.ts | 2 +- packages/cad/src/log.ts | 1 - packages/cad/src/main.ts | 10 +- packages/cad/src/print/index.ts | 2 +- packages/cad/src/print/slic3r.ts | 40 +- packages/cad/src/renderer/puppeteer/Scope.ts | 95 ----- .../cad/src/renderer/puppeteer/constants.ts | 25 -- packages/cad/src/renderer/puppeteer/index.ts | 186 --------- .../cad/src/renderer/puppeteer/network.ts | 176 --------- packages/cad/src/renderer/puppeteer/page.ts | 0 .../cad/src/renderer/puppeteer/processes.ts | 78 ---- packages/cad/src/renderer/puppeteer/report.ts | 40 -- packages/cad/src/renderer/puppeteer/stdin.ts | 31 -- packages/cad/src/renderer/puppeteer/times.ts | 12 - packages/cad/src/renderer/puppeteer/trace.ts | 57 --- packages/cad/src/renderer/puppeteer/types.ts | 124 ------ packages/cad/src/report/index.ts | 2 +- packages/cad/src/slic3r_argv.ts | 19 +- packages/cad/src/sw_argv.ts | 12 +- packages/cad/src/tree.cs | 48 --- packages/cad/src/types.ts | 2 +- 95 files changed, 2660 insertions(+), 1025 deletions(-) create mode 100644 packages/cad/dist/_cli.d.ts create mode 100644 packages/cad/dist/_cli.js create mode 100644 packages/cad/dist/cad/index.d.ts create mode 100644 packages/cad/dist/cad/index.js create mode 100644 packages/cad/dist/cad/sw-convert.d.ts create mode 100644 packages/cad/dist/cad/sw-convert.js create mode 100644 packages/cad/dist/cad/sw-lib.d.ts create mode 100644 packages/cad/dist/cad/sw-lib.js create mode 100644 packages/cad/dist/cad/sw-pack.d.ts create mode 100644 packages/cad/dist/cad/sw-pack.js create mode 100644 packages/cad/dist/cad/sw-types.d.ts create mode 100644 packages/cad/dist/cad/sw-types.js create mode 100644 packages/cad/dist/cad/sw-util.d.ts create mode 100644 packages/cad/dist/cad/sw-util.js create mode 100644 packages/cad/dist/commands/index.d.ts create mode 100644 packages/cad/dist/commands/index.js create mode 100644 packages/cad/dist/commands/info.d.ts create mode 100644 packages/cad/dist/commands/info.js create mode 100644 packages/cad/dist/commands/pack.d.ts create mode 100644 packages/cad/dist/commands/pack.js create mode 100644 packages/cad/dist/commands/slice.d.ts create mode 100644 packages/cad/dist/commands/slice.js create mode 100644 packages/cad/dist/commands/sw-pack.d.ts create mode 100644 packages/cad/dist/commands/sw-pack.js create mode 100644 packages/cad/dist/commands/sw.d.ts create mode 100644 packages/cad/dist/commands/sw.js create mode 100644 packages/cad/dist/constants.d.ts create mode 100644 packages/cad/dist/constants.js create mode 100644 packages/cad/dist/index.d.ts create mode 100644 packages/cad/dist/index.js create mode 100644 packages/cad/dist/lib/cache.d.ts create mode 100644 packages/cad/dist/lib/cache.js create mode 100644 packages/cad/dist/lib/formatter.d.ts create mode 100644 packages/cad/dist/lib/formatter.js create mode 100644 packages/cad/dist/lib/geometry/dxf.d.ts create mode 100644 packages/cad/dist/lib/geometry/dxf.js create mode 100644 packages/cad/dist/lib/index.d.ts create mode 100644 packages/cad/dist/lib/index.js create mode 100644 packages/cad/dist/lib/process/index.d.ts create mode 100644 packages/cad/dist/lib/process/index.js create mode 100644 packages/cad/dist/log.d.ts create mode 100644 packages/cad/dist/log.js create mode 100644 packages/cad/dist/main.d.ts create mode 100644 packages/cad/dist/main.js create mode 100644 packages/cad/dist/os/context_menu/register_cli.d.ts create mode 100644 packages/cad/dist/os/context_menu/register_cli.js create mode 100644 packages/cad/dist/print/index.d.ts create mode 100644 packages/cad/dist/print/index.js create mode 100644 packages/cad/dist/print/slic3r.d.ts create mode 100644 packages/cad/dist/print/slic3r.js create mode 100644 packages/cad/dist/report/csv.d.ts create mode 100644 packages/cad/dist/report/csv.js create mode 100644 packages/cad/dist/report/index.d.ts create mode 100644 packages/cad/dist/report/index.js create mode 100644 packages/cad/dist/slic3r_argv.d.ts create mode 100644 packages/cad/dist/slic3r_argv.js create mode 100644 packages/cad/dist/sw_argv.d.ts create mode 100644 packages/cad/dist/sw_argv.js create mode 100644 packages/cad/dist/types.d.ts create mode 100644 packages/cad/dist/types.js delete mode 100644 packages/cad/src/log.ts delete mode 100644 packages/cad/src/renderer/puppeteer/Scope.ts delete mode 100644 packages/cad/src/renderer/puppeteer/constants.ts delete mode 100644 packages/cad/src/renderer/puppeteer/index.ts delete mode 100644 packages/cad/src/renderer/puppeteer/network.ts delete mode 100644 packages/cad/src/renderer/puppeteer/page.ts delete mode 100644 packages/cad/src/renderer/puppeteer/processes.ts delete mode 100644 packages/cad/src/renderer/puppeteer/report.ts delete mode 100644 packages/cad/src/renderer/puppeteer/stdin.ts delete mode 100644 packages/cad/src/renderer/puppeteer/times.ts delete mode 100644 packages/cad/src/renderer/puppeteer/trace.ts delete mode 100644 packages/cad/src/renderer/puppeteer/types.ts delete mode 100644 packages/cad/src/tree.cs diff --git a/packages/cad/dist/_cli.d.ts b/packages/cad/dist/_cli.d.ts new file mode 100644 index 00000000..7a7cdc3a --- /dev/null +++ b/packages/cad/dist/_cli.d.ts @@ -0,0 +1 @@ +export declare const defaults: () => void; diff --git a/packages/cad/dist/_cli.js b/packages/cad/dist/_cli.js new file mode 100644 index 00000000..70792f8e --- /dev/null +++ b/packages/cad/dist/_cli.js @@ -0,0 +1,13 @@ +// tweaks and handlers +export const defaults = () => { + // default command + const DefaultCommand = 'summary'; + if (process.argv.length === 2) { + process.argv.push(DefaultCommand); + } + // currently no default handler, display only : + process.on('unhandledRejection', (reason) => { + console.error('Unhandled rejection, reason: ', reason); + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9fY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNCQUFzQjtBQUN0QixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO0lBQ3pCLGtCQUFrQjtJQUNsQixNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUM7SUFDakMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLE9BQU8sQ0FBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUNoRCxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNELENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDIn0= \ No newline at end of file diff --git a/packages/cad/dist/cad/index.d.ts b/packages/cad/dist/cad/index.d.ts new file mode 100644 index 00000000..961d07b8 --- /dev/null +++ b/packages/cad/dist/cad/index.d.ts @@ -0,0 +1 @@ +export { convert, pack } from './sw-lib.js'; diff --git a/packages/cad/dist/cad/index.js b/packages/cad/dist/cad/index.js new file mode 100644 index 00000000..dbca0d63 --- /dev/null +++ b/packages/cad/dist/cad/index.js @@ -0,0 +1,2 @@ +export { convert, pack } from './sw-lib.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2FkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFBIn0= \ No newline at end of file diff --git a/packages/cad/dist/cad/sw-convert.d.ts b/packages/cad/dist/cad/sw-convert.d.ts new file mode 100644 index 00000000..69f111a2 --- /dev/null +++ b/packages/cad/dist/cad/sw-convert.d.ts @@ -0,0 +1,6 @@ +import { SolidworkOptions } from '../types.js'; +export declare const convertFile: (src: any, target: any, view: string, onNode: (data: any) => void, options: SolidworkOptions, configuration: string) => Promise; +export declare function convertFiles(file: any, targets: string[], view: any, onNode: (data: any) => void, options: SolidworkOptions): Promise; +export declare const report: (data: any, dst: string) => any; +export declare const targets: (f: string, options: SolidworkOptions) => any[]; +export declare function convert(options: SolidworkOptions): Promise<(void | any[])[]>; diff --git a/packages/cad/dist/cad/sw-convert.js b/packages/cad/dist/cad/sw-convert.js new file mode 100644 index 00000000..6622d993 --- /dev/null +++ b/packages/cad/dist/cad/sw-convert.js @@ -0,0 +1,365 @@ +import * as path from 'path'; +import pMap from 'p-map'; +import { sync as which } from 'which'; +import { resolve, OSR_CACHE } from '@polymech/commons'; +import { equalFiles, swProcMessage } from './sw-util.js'; +import { reportCSV } from '../report/csv.js'; +import { logger, substitute } from '../index.js'; +import { removeEmpty } from '../lib/index.js'; +import { Helper } from '../lib/process/index.js'; +import { sync as exists } from "@polymech/fs/exists"; +import { sync as read } from "@polymech/fs/read"; +import { sync as write } from "@polymech/fs/write"; +import { sync as dir } from "@polymech/fs/dir"; +import { sync as rm } from "@polymech/fs/remove"; +import { deepClone as clone } from "@polymech/core/objects"; +import { swRayTraceRenderQuality_e } from './sw-types.js'; +import { get_cached, get_path_cached, set_cached } from '@polymech/cache'; +import { MODULE_NAME, MSG_FAILED_TO_LOAD } from '../constants.js'; +import { closeAppByName, fileAsBuffer, getSWBin } from './sw-util.js'; +export const convertFile = async (src, target, view, onNode = () => { }, options, configuration) => { + configuration = options.configuration || configuration; + options.close && closeAppByName('SLDWORKS'); + const osr_cache = OSR_CACHE(); + let cache_key_obj = { + sw: options.sw, + src, + target, + configuration + }; + if (target.endsWith('.jpg')) { + cache_key_obj = + { + ...cache_key_obj, + quality: options.quality, + width: options.width, + height: options.height, + renderer: options.renderer + }; + } + if (target.endsWith('.xlsx')) { + cache_key_obj = { + ...cache_key_obj, + "bom-config": options['bom-config'], + "bom-detail": options['bom-detail'], + "bom-template": options['bom-template'], + "bom-type": options['bom-type'], + "bom-images": options['bom-images'], + }; + } + const ca_options = JSON.parse(JSON.stringify(removeEmpty(cache_key_obj))); + let cached = await get_cached(src, ca_options, MODULE_NAME); + const cachedPath = await get_path_cached(src, ca_options, MODULE_NAME); + if (!exists(target)) { + cached = null; + } + if (osr_cache && cached && cachedPath && options.cache == true) { + if (!exists(target) || !equalFiles(target, cachedPath)) { + write(target, Buffer.from(cached)); + } + logger.debug(`[${MODULE_NAME}] Skipping conversion of ${src} to ${target}`); + await onNode({ src, target, options }); + return Promise.resolve(); + } + const parts = path.parse(target); + const source_parts = path.parse(src); + let exe = '' + options.script; + let cwd = getSWBin(options.sw); + let _target = '' + target; + let onPost = null; + // SW Photoview wont render correctly in hidden mode + if (parts.ext === '.jpg' && source_parts.ext.toLowerCase() === '.sldasm' && options.renderer.toLowerCase() === ' ') { + logger.debug(`[${MODULE_NAME}] Converting ${src} to ${target} : - Photoview: - ` + options.hidden); + options.hidden = "false"; + } + let args = [ + `--source="${src}"`, + `--target="${target}"`, + `--configuration="${configuration}"`, + `--view="*${view}"`, + `--hidden=` + options.hidden || "true", + `--width=` + options.width, + `--height=` + options.height, + `--swv=` + options.swv, + `--renderer=` + options.renderer.toLowerCase() || "solidworks", + `--quality=${options.quality || swRayTraceRenderQuality_e.swRenderQuality_Good}` + ]; + if (options.save) + args.push(`--save`); + if (options.pack) + args.push(`--pack`); + if (options.rebuild) + args.push(`--rebuild`); + if (options.light) + args.push(`--light`); + if (options.write) + args.push(`--write`); + if (parts.ext === '.json' && source_parts.ext.toLowerCase() === '.sldasm') { + exe = 'model-reader.exe'; + args = [ + `--source="${path.resolve(src)}"`, + `--target="${_target}"` + ]; + onPost = () => { + try { + let props = read(_target, 'json'); + if (!props) { + logger.error('Error reading model file ', src); + return false; + } + props = props.map(removeEmpty); + write(_target, props); + return true; + } + catch (e) { + logger.error(`Error executing model-reader::onPost for ${src} to ${_target}`); + write(_target, {}); + return false; + } + }; + } + if (parts.base.endsWith('-configs.json') && source_parts.ext.toLowerCase() === '.sldasm') { + exe = 'getconfigs.exe'; + args = [ + `--source="${path.resolve(src)}"`, + `--target="${path.resolve(_target)}"` + ]; + onPost = () => { + try { + let props = read(_target, 'json'); + if (!props) { + logger.error('Error reading configurations file ', src); + return false; + } + return true; + } + catch (e) { + logger.error(`Error executing get::onPost for ${src} to ${_target}`); + write(_target, {}); + return false; + } + }; + } + if (parts.ext === '.html') { + exe = 'ExportHTML.exe'; + if (!configuration || configuration === 'Default') { + args = [ + `"${src}"`, + `"${target}"`, + ]; + } + else if (configuration) { + //EDrawings Control doesnt support configurations directly, we need a configuration specific edrawings file exported instead + const eDrawingsFile = src.toLowerCase().replace('.sldasm', `-${configuration}.EASM`); + if (!exists(eDrawingsFile)) { + logger.error(`Configuration specific edrawing file ${eDrawingsFile} doesnt exists`); + return Promise.resolve(); + } + args = [ + `"${eDrawingsFile}"`, + `"${target}"`, + `${configuration}` + ]; + } + } + if (parts.ext === '.xlsx') { + exe = 'bom.exe'; + args = [ + `"${src}"`, + `"${target}"`, + `--configuration ${options['bom-config']}`, + `--type ${options['bom-type']}`, + `--detail ${options['bom-detail']}` + ]; + options['bom-images'] && args.push('--images'); + options['bom-template'] && args.push(`--template ${options['bom-template']}`); + if (!options.cache && exists(target)) { + rm(target); + } + } + if (source_parts.ext === '.drawio') { + exe = 'draw.io.exe'; + try { + cwd = path.parse(which(exe)).dir; + } + catch (e) { + logger.error(`Cant find ${exe}`); + return Promise.resolve(); + } + args = [ + `"${src}"`, + '-x', + `-f ${parts.ext.replace('.', '')}`, + `${options.args}` + ]; + } + const bin = path.resolve(`${cwd}/${exe}`); + if (!exists(bin)) { + logger.error(`${bin} doesnt exists in ${cwd}`); + logger.error('__dirname:' + __dirname); + logger.error('options.sw ' + options.sw); + return; + } + const ret = await Helper.run(cwd, exe, args, options.debug); + ret.messages = [...new Set(ret.messages)]; + const failed = !!ret.messages.find((m) => m.includes(MSG_FAILED_TO_LOAD)); + ret.messages = ret.messages.map((m) => swProcMessage(m)).filter(x => x != null).map(x => x.message); + const info = { + ...ret, + src, + target, + failed: failed, + options + }; + await onNode(info); + onPost && onPost(); + if (info.failed) { + rm(_target); + return ret; + } + osr_cache && options.cache == true && await set_cached(src, ca_options, MODULE_NAME, fileAsBuffer(_target)); + options.close && closeAppByName('SLDWORKS'); + return ret; +}; +export async function convertFiles(file, targets, view, onNode = () => { }, options) { + if (options.dry) { + logger.info(`Dry run convert ${file} to `, targets.map((t) => { `\n\t${t}`; }).join(',\n')); + return Promise.resolve(); + } + return pMap(targets, (target) => { + return convertFile(file, target.target, view, onNode, options, target.configuration); + }, { concurrency: 1 }); +} +export const report = (data, dst) => { + let report = null; + if (dst.endsWith('.md')) { + //report = reportMarkdown(data) + } + if (dst.endsWith('.csv')) { + report = reportCSV(data); + } + logger.info(`Write report to ${dst}`); + report = write(dst, data); + return report; +}; +export const targets = (f, options) => { + const srcParts = path.parse(f); + const variables = clone(options.variables); + const targets = []; + let configurations = { "Default": null }; + if (options.configuration && options.configuration !== 'Default') { + configurations[options.configuration] = null; + delete configurations["Default"]; + } + if (options.dstInfo.PATH.includes('{CONFIGURATION}') && + srcParts.ext.toLowerCase() === '.sldasm') { + const configurationsFile = `${srcParts.dir}/${srcParts.name}-configs.json`; + if (exists(configurationsFile)) { + try { + configurations = read(configurationsFile, 'json'); + } + catch (error) { + logger.error(`Error reading configurations file ${configurationsFile}`); + } + } + } + for (const conf in configurations) { + if (options.dstInfo.IS_GLOB) { + options.dstInfo.GLOB_EXTENSIONS.forEach((e) => { + variables.SRC_NAME = srcParts.name; + variables.SRC_DIR = srcParts.dir; + variables.CONFIGURATION = conf; + let targetPath = substitute(options.variables.DST_PATH, options.alt, variables); + targetPath = path.resolve(targetPath.replace(options.variables.DST_FILE_EXT, '') + e); + const parts = path.parse(targetPath); + if (srcParts.ext === parts.ext) { + return; + } + if (!exists(parts.dir)) { + try { + dir(parts.dir); + } + catch (e) { + if (options.debug) { + logger.error(`Error creating target path ${parts.dir} for ${targetPath}`); + } + return; + } + } + targets.push({ + target: targetPath, + configuration: conf + }); + }); + } + else { + variables.SRC_NAME = srcParts.name; + variables.SRC_DIR = srcParts.dir; + variables.CONFIGURATION = conf; + let targetPath = substitute(options.variables.DST_PATH, options.alt, variables); + if (!exists(targetPath)) { + try { + dir(targetPath); + } + catch (e) { + if (options.debug) { + logger.error(`Error creating target path ${targetPath}`); + } + return; + } + } + targets.push({ + target: targetPath, + configuration: conf + }); + } + } + return targets; +}; +export async function convert(options) { + logger.setSettings({ minLevel: options.logLevel || 'warn' }); + let reports = []; + const onNode = options.onNode || ((data) => reports.push(data)); + if (options.srcInfo.FILES.length === 0) { + logger.warn(`No files found to convert : `, options.src); + return; + } + //skip orphan / temporary files + options.srcInfo.FILES = options.srcInfo.FILES.filter((f) => { + return f.includes('~$') === false; + }); + const ret = await pMap(options.srcInfo.FILES, async (f) => { + const outputs = targets(f, options); + logger.info(`Convert ${f} to ${outputs.map(t => t.target).join(',')}`); + return convertFiles(f, outputs, options.view, onNode, options); + }, { concurrency: 1 }); + if (options.report) { + const reportOutFile = path.resolve(resolve(options.report, false, { + dst: options.srcInfo.DIR, + ...options.variables, + CONFIGURATION: options.configuration || '' + })); + logger.debug(`Write report to ${reportOutFile}`); + report(reports, reportOutFile); + } + return ret; +} +/* +const on3DHTML = (src, dst, options: SolidworkOptions) => { + const web_root = path.resolve(__dirname + '/../../web/xeo'); + const config = JSON.parse(read(path.resolve(__dirname + '/../../config.json')) as any); + const templatePath = path.resolve(`${web_root}/template.html`); + const template = read(templatePath, 'string') as string; + + const srcParts = path.parse(src); + const variables = { + ...config.variables, + SRC_PATH_WEB: './' + srcParts.name + '_3D.html', + MODEL_SRC: './' + srcParts.name + '.3dxml', + }; + + const content = substitute(false, template, variables); + write(dst, content); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ctY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYWQvc3ctY29udmVydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUM1QixPQUFPLElBQUksTUFBTSxPQUFPLENBQUE7QUFDeEIsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRTdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUVoRCxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTlDLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDaEQsT0FBTyxFQUFFLFNBQVMsSUFBSSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUUzRCxPQUFPLEVBQUUseUJBQXlCLEVBQTRCLE1BQU0sZUFBZSxDQUFBO0FBQ25GLE9BQU8sRUFBRSxVQUFV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 \ No newline at end of file diff --git a/packages/cad/dist/cad/sw-lib.d.ts b/packages/cad/dist/cad/sw-lib.d.ts new file mode 100644 index 00000000..59fe7daf --- /dev/null +++ b/packages/cad/dist/cad/sw-lib.d.ts @@ -0,0 +1,3 @@ +export * from './sw-convert.js'; +export * from './sw-util.js'; +export * from './sw-pack.js'; diff --git a/packages/cad/dist/cad/sw-lib.js b/packages/cad/dist/cad/sw-lib.js new file mode 100644 index 00000000..a924a96a --- /dev/null +++ b/packages/cad/dist/cad/sw-lib.js @@ -0,0 +1,4 @@ +export * from './sw-convert.js'; +export * from './sw-util.js'; +export * from './sw-pack.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ctbGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhZC9zdy1saWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLGNBQWMsQ0FBQTtBQUM1QixjQUFjLGNBQWMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/cad/dist/cad/sw-pack.d.ts b/packages/cad/dist/cad/sw-pack.d.ts new file mode 100644 index 00000000..be2f38e9 --- /dev/null +++ b/packages/cad/dist/cad/sw-pack.d.ts @@ -0,0 +1,3 @@ +import { SolidworkOptions } from '../types.js'; +export declare function packFile(file: any, onNode: (data: any) => void, options: SolidworkOptions): Promise; +export declare function pack(options: SolidworkOptions): Promise; diff --git a/packages/cad/dist/cad/sw-pack.js b/packages/cad/dist/cad/sw-pack.js new file mode 100644 index 00000000..5a2fadab --- /dev/null +++ b/packages/cad/dist/cad/sw-pack.js @@ -0,0 +1,53 @@ +import * as path from 'path'; +import pMap from 'p-map'; +import { logger } from '../index.js'; +import { Helper } from '../lib/process/index.js'; +import { sync as exists } from "@polymech/fs/exists"; +import { getSWBin } from './sw-util.js'; +export async function packFile(file, onNode = () => { }, options) { + if (options.dry) { + return Promise.resolve(); + } + const target = options.dst; + if (options.cache && exists(target)) { + onNode({ + src: file, + target + }); + return Promise.resolve(); + } + let exe = '' + options.script; + let args = [ + `"${file}"`, + `"${target}"` + ]; + const cwd = getSWBin(options.sw); + const bin = path.resolve(`${cwd}/${exe}`); + if (!exists(bin)) { + logger.error(`${bin} doesnt exists in ${cwd}`); + logger.error('__dirname:' + __dirname); + logger.error('options.sw ' + options.sw); + return; + } + options.debug && logger.debug(`Running ${cwd}/${exe} with`, args); + const promise = Helper.run(cwd, exe, args, options.debug); + promise.then((d) => { + onNode({ + ...d, + src: file, + target + }); + }); + return promise; +} +export async function pack(options) { + let reports = []; + const onNode = (data) => { reports.push(data); }; + options.verbose && logger.info(`Pack ${options.srcInfo.FILES.length} files `); + const ret = await pMap(options.srcInfo.FILES, async (f) => { + logger.debug(`Convert ${f} to `, options.dst); + return packFile(f, onNode, options); + }, { concurrency: 1 }); + return ret; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ctcGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYWQvc3ctcGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUM1QixPQUFPLElBQUksTUFBTSxPQUFPLENBQUE7QUFDeEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUVwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDaEQsT0FBTyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXZDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUFDLElBQUksRUFBRSxTQUE4QixHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBeUI7SUFDbkcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUMzQixJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbEMsTUFBTSxDQUFDO1lBQ0gsR0FBRyxFQUFFLElBQUk7WUFDVCxNQUFNO1NBQ1QsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzlCLElBQUksSUFBSSxHQUFHO1FBQ1AsSUFBSSxJQUFJLEdBQUc7UUFDWCxJQUFJLE1BQU0sR0FBRztLQUNoQixDQUFBO0lBR0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcscUJBQXFCLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDOUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUE7UUFDdEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3hDLE9BQU07SUFDVixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ2pFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNmLE1BQU0sQ0FBQztZQUNILEdBQUcsQ0FBQztZQUNKLEdBQUcsRUFBRSxJQUFJO1lBQ1QsTUFBTTtTQUNULENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxPQUFPLENBQUE7QUFDbEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsSUFBSSxDQUFDLE9BQXlCO0lBQ2hELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQTtJQUNoQixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQTtJQUMvQyxPQUFPLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLFNBQVMsQ0FBQyxDQUFBO0lBQzdFLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0RCxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzdDLE9BQU8sUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDdkMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDdEIsT0FBTyxHQUFHLENBQUE7QUFDZCxDQUFDIn0= \ No newline at end of file diff --git a/packages/cad/dist/cad/sw-types.d.ts b/packages/cad/dist/cad/sw-types.d.ts new file mode 100644 index 00000000..403ad790 --- /dev/null +++ b/packages/cad/dist/cad/sw-types.d.ts @@ -0,0 +1,180 @@ +export interface IComponent { + Name: string; + Path: string; + IsSuppressed: boolean; +} +export interface IMass { + Mass: number; + Density: number; + Volume: number; + SurfaceArea: number; + CenterOfMassX: number; + CenterOfMassY: number; + CenterOfMassZ: number; +} +export interface IBox { + MinX: number; + MinY: number; + MinZ: number; + MaxX: number; + MaxY: number; + MaxZ: number; +} +export interface IMaterial { + Material: string; + "Materials": string; +} +export interface IProperties { + [key: string]: object; +} +export interface IAssembly { + Components: IComponent[]; +} +export interface ITreeNode { + Name: string; + Children: Node[]; + Path: string; + Parent: string | null; + Properties: IProperties; + Equations: { + [key: string]: number | string; + }; + Mass: IMass; + Box: IBox; + Material: { + [key: string]: string; + }; + States: { + [key: string]: object; + }; + LaserParts: any; + activeConfiguration: any; +} +export interface Configuration { + "Total Bounding Box Length"?: string; + "Total Bounding Box Width"?: string; + "Total Bounding Box Thickness"?: string; + "Total Bounding Box Volume"?: string; + "Weight"?: string; + "Cost - Total Cost"?: string; + "IsLaser?": string; + "Hide"?: string; + "Catalog"?: string; + "Configurations"?: string; +} +export interface Configurations { + [key: string]: Configuration; +} +export interface IAssemblyData { + assembly: IAssembly; + root: ITreeNode; + Configurations: Configurations; +} +export declare enum swRayTraceRenderImageFormat { + swImageFormat_FlexiblePrecision = 0, + swImageFormat_Targa = 1, + swImageFormat_WindowsBmp = 2, + swImageFormat_HDR = 3, + swImageFormat_JPEG2000 = 4, + swImageFormat_JPEG2000_16bit = 5, + swImageFormat_JPEG2000_16bit_Lossless = 6, + swImageFormat_JPEG = 7, + swImageFormat_PNG = 8, + swImageFormat_PNG_16bit = 9, + swImageFormat_SGI_RGB = 10, + swImageFormat_TIF = 11, + swImageFormat_TIF_16bit = 12, + swImageFormat_TIF_16bit_uncompr = 13, + swImageFormat_OpenEXR = 14, + swImageFormat_OpenEXR_32bit = 15, + swImageFormat_OpenEXR_TILED16bit = 16, + swImageFormat_OpenEXR_TILED32bit = 17 +} +export declare enum swRayTraceRenderQuality_e { + swRenderQuality_Good = 0, + swRenderQuality_Better = 1, + swRenderQuality_Best = 2, + swRenderQuality_Maximum = 3 +} +export declare enum ImageAspectRatio { + AspectRatio_1_1 = "1:1", + AspectRatio_4_3 = "4:3", + AspectRatio_16_9 = "16:9", + AspectRatio_21_9 = "21:9", + AspectRatio_2_3 = "2:3", + AspectRatio_3_2 = "3:2", + AspectRatio_5_4 = "5:4", + AspectRatio_3_4 = "3:4", + AspectRatio_9_16 = "9:16", + AspectRatio_10_16 = "10:16", + AspectRatio_16_10 = "16:10", + AspectRatio_16_15 = "16:15", + AspectRatio_18_9 = "18:9", + AspectRatio_32_9 = "32:9", + AspectRatio_48_9 = "48:9" +} +export declare enum ImageResolution { + Resolution_640x480 = "640x480", + Resolution_800x600 = "800x600", + Resolution_1024x768 = "1024x768", + Resolution_1280x720 = "1280x720", + Resolution_1280x800 = "1280x800", + Resolution_1280x1024 = "1280x1024", + Resolution_1366x768 = "1366x768", + Resolution_1440x900 = "1440x900", + Resolution_1600x900 = "1600x900", + Resolution_1680x1050 = "1680x1050", + Resolution_1920x1080 = "1920x1080", + Resolution_1920x1200 = "1920x1200", + Resolution_2560x1440 = "2560x1440", + Resolution_2560x1600 = "2560x1600", + Resolution_3840x2160 = "3840x2160", + Resolution_4096x2160 = "4096x2160", + Resolution_5120x2880 = "5120x2880", + Resolution_7680x4320 = "7680x4320" +} +export interface IRayTraceRendererOptions { + imageWidth: number; + imageHeight: number; + imageFormat: number; + previewRenderQuality: number; + finalRenderQuality: number; + bloomEnabled: boolean; + bloomThreshold: number; + bloomRadius: number; + contourEnabled: boolean; + shadedContour: boolean; + contourLineThickness: number; + contourLineColor: number; + useSolidWorksViewAspectRatio: boolean; + defaultImagePath: string; + useSceneBackgroundImageAspectRatio: boolean; + outputAmbientOcclusion: boolean; + directCaustics: boolean; + causticQuality: number; + gamma: number; + numberOfReflections: number; + numberOfRefractions: number; + networkRendering: boolean; + clientWorkload: number; + sendDataForNetworkJob: boolean; + networkSharedDirectory: string; + causticAmount: number; + customRenderSettings: boolean; + contourCartoonRenderingEnabled: boolean; + hasCartoonEdges: boolean; + hasCartoonShading: boolean; + includeAnnotationsInRendering: boolean; + renderType: number; + renderAnnotationsToSeparateImage: boolean; + alphaOutput: boolean; + offloadedRendering: boolean; +} +export declare enum EDocumentState { + Default = 0, + Hidden = 1, + ReadOnly = 2, + ViewOnly = 4, + Silent = 8, + Rapid = 16 +} diff --git a/packages/cad/dist/cad/sw-types.js b/packages/cad/dist/cad/sw-types.js new file mode 100644 index 00000000..1e71a60b --- /dev/null +++ b/packages/cad/dist/cad/sw-types.js @@ -0,0 +1,139 @@ +export var swRayTraceRenderImageFormat; +(function (swRayTraceRenderImageFormat) { + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_FlexiblePrecision"] = 0] = "swImageFormat_FlexiblePrecision"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_Targa"] = 1] = "swImageFormat_Targa"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_WindowsBmp"] = 2] = "swImageFormat_WindowsBmp"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_HDR"] = 3] = "swImageFormat_HDR"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_JPEG2000"] = 4] = "swImageFormat_JPEG2000"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_JPEG2000_16bit"] = 5] = "swImageFormat_JPEG2000_16bit"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_JPEG2000_16bit_Lossless"] = 6] = "swImageFormat_JPEG2000_16bit_Lossless"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_JPEG"] = 7] = "swImageFormat_JPEG"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_PNG"] = 8] = "swImageFormat_PNG"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_PNG_16bit"] = 9] = "swImageFormat_PNG_16bit"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_SGI_RGB"] = 10] = "swImageFormat_SGI_RGB"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_TIF"] = 11] = "swImageFormat_TIF"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_TIF_16bit"] = 12] = "swImageFormat_TIF_16bit"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_TIF_16bit_uncompr"] = 13] = "swImageFormat_TIF_16bit_uncompr"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_OpenEXR"] = 14] = "swImageFormat_OpenEXR"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_OpenEXR_32bit"] = 15] = "swImageFormat_OpenEXR_32bit"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_OpenEXR_TILED16bit"] = 16] = "swImageFormat_OpenEXR_TILED16bit"; + swRayTraceRenderImageFormat[swRayTraceRenderImageFormat["swImageFormat_OpenEXR_TILED32bit"] = 17] = "swImageFormat_OpenEXR_TILED32bit"; +})(swRayTraceRenderImageFormat || (swRayTraceRenderImageFormat = {})); +export var swRayTraceRenderQuality_e; +(function (swRayTraceRenderQuality_e) { + swRayTraceRenderQuality_e[swRayTraceRenderQuality_e["swRenderQuality_Good"] = 0] = "swRenderQuality_Good"; + swRayTraceRenderQuality_e[swRayTraceRenderQuality_e["swRenderQuality_Better"] = 1] = "swRenderQuality_Better"; + swRayTraceRenderQuality_e[swRayTraceRenderQuality_e["swRenderQuality_Best"] = 2] = "swRenderQuality_Best"; + swRayTraceRenderQuality_e[swRayTraceRenderQuality_e["swRenderQuality_Maximum"] = 3] = "swRenderQuality_Maximum"; +})(swRayTraceRenderQuality_e || (swRayTraceRenderQuality_e = {})); +export var ImageAspectRatio; +(function (ImageAspectRatio) { + ImageAspectRatio["AspectRatio_1_1"] = "1:1"; + ImageAspectRatio["AspectRatio_4_3"] = "4:3"; + ImageAspectRatio["AspectRatio_16_9"] = "16:9"; + ImageAspectRatio["AspectRatio_21_9"] = "21:9"; + ImageAspectRatio["AspectRatio_2_3"] = "2:3"; + ImageAspectRatio["AspectRatio_3_2"] = "3:2"; + ImageAspectRatio["AspectRatio_5_4"] = "5:4"; + ImageAspectRatio["AspectRatio_3_4"] = "3:4"; + ImageAspectRatio["AspectRatio_9_16"] = "9:16"; + ImageAspectRatio["AspectRatio_10_16"] = "10:16"; + ImageAspectRatio["AspectRatio_16_10"] = "16:10"; + ImageAspectRatio["AspectRatio_16_15"] = "16:15"; + ImageAspectRatio["AspectRatio_18_9"] = "18:9"; + ImageAspectRatio["AspectRatio_32_9"] = "32:9"; + ImageAspectRatio["AspectRatio_48_9"] = "48:9"; +})(ImageAspectRatio || (ImageAspectRatio = {})); +export var ImageResolution; +(function (ImageResolution) { + ImageResolution["Resolution_640x480"] = "640x480"; + ImageResolution["Resolution_800x600"] = "800x600"; + ImageResolution["Resolution_1024x768"] = "1024x768"; + ImageResolution["Resolution_1280x720"] = "1280x720"; + ImageResolution["Resolution_1280x800"] = "1280x800"; + ImageResolution["Resolution_1280x1024"] = "1280x1024"; + ImageResolution["Resolution_1366x768"] = "1366x768"; + ImageResolution["Resolution_1440x900"] = "1440x900"; + ImageResolution["Resolution_1600x900"] = "1600x900"; + ImageResolution["Resolution_1680x1050"] = "1680x1050"; + ImageResolution["Resolution_1920x1080"] = "1920x1080"; + ImageResolution["Resolution_1920x1200"] = "1920x1200"; + ImageResolution["Resolution_2560x1440"] = "2560x1440"; + ImageResolution["Resolution_2560x1600"] = "2560x1600"; + ImageResolution["Resolution_3840x2160"] = "3840x2160"; + ImageResolution["Resolution_4096x2160"] = "4096x2160"; + ImageResolution["Resolution_5120x2880"] = "5120x2880"; + ImageResolution["Resolution_7680x4320"] = "7680x4320"; +})(ImageResolution || (ImageResolution = {})); +function createRendererOptions(options) { + const defaults = { + imageWidth: 800, + imageHeight: 600, + imageFormat: 0, + previewRenderQuality: 50, + finalRenderQuality: 100, + bloomEnabled: true, + bloomThreshold: 0.5, + bloomRadius: 10, + contourEnabled: false, + shadedContour: false, + contourLineThickness: 1, + contourLineColor: 0, + useSolidWorksViewAspectRatio: false, + defaultImagePath: '', + useSceneBackgroundImageAspectRatio: false, + outputAmbientOcclusion: false, + directCaustics: false, + causticQuality: 50, + gamma: 2.2, + numberOfReflections: 2, + numberOfRefractions: 2, + networkRendering: false, + clientWorkload: 0, + sendDataForNetworkJob: false, + networkSharedDirectory: '', + causticAmount: 0.5, + customRenderSettings: false, + contourCartoonRenderingEnabled: false, + hasCartoonEdges: false, + hasCartoonShading: false, + includeAnnotationsInRendering: false, + renderType: 0, + renderAnnotationsToSeparateImage: false, + alphaOutput: false, + offloadedRendering: false, + }; + return { ...defaults, ...options }; +} +export var EDocumentState; +(function (EDocumentState) { + // + // Summary: + // Default state of the document + EDocumentState[EDocumentState["Default"] = 0] = "Default"; + // + // Summary: + // Checks if document is hidden + EDocumentState[EDocumentState["Hidden"] = 1] = "Hidden"; + // + // Summary: + // Opens document in read-only mode + EDocumentState[EDocumentState["ReadOnly"] = 2] = "ReadOnly"; + // + // Summary: + // Opens document in view only mode + EDocumentState[EDocumentState["ViewOnly"] = 4] = "ViewOnly"; + // + // Summary: + // Opens document without displaying any popup messages + EDocumentState[EDocumentState["Silent"] = 8] = "Silent"; + // + // Summary: + // Opens document in the rapid mode + // + // Remarks: + // This mode significantly improves the performance of opening but certain functionality + // and API migth not be available + EDocumentState[EDocumentState["Rapid"] = 16] = "Rapid"; +})(EDocumentState || (EDocumentState = {})); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ctdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2FkL3N3LXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRFQSxNQUFNLENBQU4sSUFBWSwyQkFtQlg7QUFuQkQsV0FBWSwyQkFBMkI7SUFDbkMsbUlBQStCLENBQUE7SUFDL0IsMkdBQW1CLENBQUE7SUFDbkIscUhBQXdCLENBQUE7SUFDeEIsdUdBQWlCLENBQUE7SUFDakIsaUhBQXNCLENBQUE7SUFDdEIsNkhBQTRCLENBQUE7SUFDNUIsK0lBQXFDLENBQUE7SUFDckMseUdBQWtCLENBQUE7SUFDbEIsdUdBQWlCLENBQUE7SUFDakIsbUhBQXVCLENBQUE7SUFDdkIsZ0hBQXFCLENBQUE7SUFDckIsd0dBQWlCLENBQUE7SUFDakIsb0hBQXVCLENBQUE7SUFDdkIsb0lBQStCLENBQUE7SUFDL0IsZ0hBQXFCLENBQUE7SUFDckIsNEhBQTJCLENBQUE7SUFDM0Isc0lBQWdDLENBQUE7SUFDaEMsc0lBQWdDLENBQUE7QUFDcEMsQ0FBQyxFQW5CVywyQkFBMkIsS0FBM0IsMkJBQTJCLFFBbUJ0QztBQUVELE1BQU0sQ0FBTixJQUFZLHlCQUtYO0FBTEQsV0FBWSx5QkFBeUI7SUFDakMseUdBQW9CLENBQUE7SUFDcEIsNkdBQXNCLENBQUE7SUFDdEIseUdBQW9CLENBQUE7SUFDcEIsK0dBQXVCLENBQUE7QUFDM0IsQ0FBQyxFQUxXLHlCQUF5QixLQUF6Qix5QkFBeUIsUUFLcEM7QUFFRCxNQUFNLENBQU4sSUFBWSxnQkFnQlg7QUFoQkQsV0FBWSxnQkFBZ0I7SUFDeEIsMkNBQXVCLENBQUE7SUFDdkIsMkNBQXVCLENBQUE7SUFDdkIsNkNBQXlCLENBQUE7SUFDekIsNkNBQXlCLENBQUE7SUFDekIsMkNBQXVCLENBQUE7SUFDdkIsMkNBQXVCLENBQUE7SUFDdkIsMkNBQXVCLENBQUE7SUFDdkIsMkNBQXVCLENBQUE7SUFDdkIsNkNBQXlCLENBQUE7SUFDekIsK0NB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 \ No newline at end of file diff --git a/packages/cad/dist/cad/sw-util.d.ts b/packages/cad/dist/cad/sw-util.d.ts new file mode 100644 index 00000000..2cf68e19 --- /dev/null +++ b/packages/cad/dist/cad/sw-util.d.ts @@ -0,0 +1,9 @@ +export declare const swProcMessage: (log: string) => { + logLevel: string; + message: string; +} | null; +export declare const fileAsBuffer: (path: string) => Buffer; +export declare const getSWBin: (argv: string) => string; +export declare function closeAppByName(appName: string): void; +export declare function removeEmptyValues(obj: any): any; +export declare const equalFiles: (pathA: any, pathB: any) => boolean; diff --git a/packages/cad/dist/cad/sw-util.js b/packages/cad/dist/cad/sw-util.js new file mode 100644 index 00000000..259af361 --- /dev/null +++ b/packages/cad/dist/cad/sw-util.js @@ -0,0 +1,84 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import { execSync } from 'child_process'; +import { sync as exists } from "@polymech/fs/exists"; +import { sync as read } from "@polymech/fs/read"; +import { BUF_SIZE_CMP } from '../constants.js'; +export const swProcMessage = (log) => { + const regex = /<<(\w+)::(.*?)>>/; + const match = log.match(regex); + if (match) { + return { + logLevel: match[1], + message: match[2] + }; + } +}; +export const fileAsBuffer = (path) => read(path, 'buffer') || Buffer.from("-"); +export const getSWBin = (argv) => { + const swVersion = parseInt(argv); + if (swVersion) { + return path.resolve(__dirname + `/../sw/${swVersion}`); + } + else { + return path.resolve(argv); + } +}; +export function closeAppByName(appName) { + try { + const command = `tasklist /FI "IMAGENAME eq ${appName}.exe" /NH`; + const output = execSync(command).toString(); + const lines = output.split('\n'); + const processIdLine = lines.find(line => line.includes(appName)); + if (!processIdLine) { + return; + } + const processId = parseInt(processIdLine.split(/\s+/)[1], 10); + execSync(`taskkill /F /PID ${processId}`); + } + catch (error) { } +} +export function removeEmptyValues(obj) { + for (const key in obj) { + const value = obj[key]; + if (!value || typeof value !== 'number' || + typeof value !== 'boolean' || + typeof value !== 'string') { + delete obj[key]; + } + } + return obj; +} +export const equalFiles = (pathA, pathB) => { + if (!exists(pathA) || !exists(pathB)) { + return false; + } + let statA = fs.lstatSync(pathA); + let statB = fs.lstatSync(pathB); + if (statA.size !== statB.size) { + return false; + } + ; + let fdA = fs.openSync(pathA, 'r'); + let fdB = fs.openSync(pathB, 'r'); + let bufA = Buffer.alloc(BUF_SIZE_CMP); + let bufB = Buffer.alloc(BUF_SIZE_CMP); + let readA = 1; + let readB = 1; + while (readA > 0) { + readA = fs.readSync(fdA, bufA, 0, bufA.length, null); + readB = fs.readSync(fdB, bufB, 0, bufB.length, null); + if (readA !== readB) { + return false; + } + for (let i = 0; i < readA; i++) { + if (bufA[i] !== bufB[i]) { + return false; + } + } + } + fs.closeSync(fdA); + fs.closeSync(fdB); + return true; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ctdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYWQvc3ctdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQTtBQUN4QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDcEQsT0FBTyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFOUMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBVyxFQUErQyxFQUFFO0lBQ3RGLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFBO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNSLE9BQU87WUFDSCxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNsQixPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNwQixDQUFBO0lBQ0wsQ0FBQztBQUNMLENBQUMsQ0FBQTtBQUNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBRWhHLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQ3JDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNoQyxJQUFJLFNBQVMsRUFBRSxD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 \ No newline at end of file diff --git a/packages/cad/dist/commands/index.d.ts b/packages/cad/dist/commands/index.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/packages/cad/dist/commands/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/cad/dist/commands/index.js b/packages/cad/dist/commands/index.js new file mode 100644 index 00000000..f8d6163e --- /dev/null +++ b/packages/cad/dist/commands/index.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9 \ No newline at end of file diff --git a/packages/cad/dist/commands/info.d.ts b/packages/cad/dist/commands/info.d.ts new file mode 100644 index 00000000..ca73784e --- /dev/null +++ b/packages/cad/dist/commands/info.d.ts @@ -0,0 +1,2 @@ +import * as CLI from 'yargs'; +export declare const register: (cli: CLI.Argv) => any; diff --git a/packages/cad/dist/commands/info.js b/packages/cad/dist/commands/info.js new file mode 100644 index 00000000..c536a480 --- /dev/null +++ b/packages/cad/dist/commands/info.js @@ -0,0 +1,24 @@ +import { CONFIG_DEFAULT, DEFAULT_ROOTS } from '@polymech/commons'; +import { logger } from '../index.js'; +const defaultOptions = (yargs) => { + return yargs.option('debug', { + default: 'false', + describe: 'debug messages' + }).option('env_key', { + default: 'OSR-CONFIG', + describe: 'Environment key to the config path' + }); +}; +let options = (yargs) => defaultOptions(yargs); +export const register = (cli) => { + return cli.command('info', 'info', options, async (argv) => { + if (argv.help) { + return; + } + const args = argv; + const src = CONFIG_DEFAULT(args.env_key); + logger.debug(`Reading OSR Config with key "${argv.env_key}"`, src); + logger.debug(`OSR Paths:`, DEFAULT_ROOTS); + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUVwQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFO0lBQ3ZDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDekIsT0FBTyxFQUFFLE9BQU87UUFDaEIsUUFBUSxFQUFFLGdCQUFnQjtLQUM3QixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUNqQixPQUFPLEVBQUUsWUFBWTtRQUNyQixRQUFRLEVBQUUsb0NBQW9DO0tBQ2pELENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQUVELElBQUksT0FBTyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFDdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFtQixFQUFFLEVBQUU7UUFDdEUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFBQyxPQUFNO1FBQUMsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBUSxJQUFJLENBQUE7UUFDdEIsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN4QyxNQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFDN0MsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/packages/cad/dist/commands/pack.d.ts b/packages/cad/dist/commands/pack.d.ts new file mode 100644 index 00000000..3298fb71 --- /dev/null +++ b/packages/cad/dist/commands/pack.d.ts @@ -0,0 +1,3 @@ +import * as CLI from 'yargs'; +export declare const defaultOptions: (yargs: CLI.Argv) => any; +export declare const register: (cli: CLI.Argv) => any; diff --git a/packages/cad/dist/commands/pack.js b/packages/cad/dist/commands/pack.js new file mode 100644 index 00000000..0e86d279 --- /dev/null +++ b/packages/cad/dist/commands/pack.js @@ -0,0 +1,54 @@ +import { logger } from '../index.js'; +import { sanitizeSingle } from '../sw_argv.js'; +import { pack } from '../cad/index.js'; +export const defaultOptions = (yargs) => { + return yargs.option('src', { + default: './', + describe: 'The source directory or source file. Glob patters are supported!', + demandOption: true + }).option('dst', { + describe: 'Destination folder or file' + }).option('view', { + default: 'Isometric', + describe: 'Sets the target view' + }).option('Report', { + describe: 'Optional conversion report. Can be JSON, HTML, CSV or Markdown' + }).option('debug', { + default: false, + describe: 'Enable internal debug messages', + type: 'boolean' + }).option('skip', { + default: true, + describe: 'Skip existing files', + type: 'boolean', + }).option('dry', { + default: false, + describe: 'Run without conversion but create reports', + type: 'boolean' + }).option('alt', { + default: false, + describe: 'Alternate tokenizer' + }).option('verbose', { + default: true, + describe: 'Show internal messages', + type: 'boolean' + }).option('sw', { + describe: 'Set explicit the path to the Solidworks binaries & scripts.\ + "It assumes SolidWorks.Interop.sldworks.dll and export.cmd at this location!' + }).option('script', { + describe: 'Set explicit the path to the Solidworks script' + }); +}; +let options = (yargs) => defaultOptions(yargs); +export const register = (cli) => { + return cli.command('pack', '', options, async (argv) => { + if (argv.help) { + return; + } + const options = sanitizeSingle(argv); + logger.setSettings({ minLevel: options.logLevel }); + logger.debug("options " + argv.dst, options); + return pack(options); + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9wYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFdEMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUU7SUFDOUMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUN2QixPQUFPLEVBQUUsSUFBSTtRQUNiLFFBQVEsRUFBRSxrRUFBa0U7UUFDNUUsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsNEJBQTRCO0tBQ3pDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ2QsT0FBTyxFQUFFLFdBQVc7UUFDcEIsUUFBUSxFQUFFLHNCQUFzQjtLQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUNoQixRQUFRLEVBQUUsZ0VBQWdFO0tBQzdFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ2QsT0FBTyxFQUFFLElBQUk7UUFDYixRQUFRLEVBQUUscUJBQXFCO1FBQy9CLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsMkNBQTJDO1FBQ3JELElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUscUJBQXFCO0tBQ2xDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ2pCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtRQUNaLFFBQVEsRUFBRTtxRkFDbUU7S0FDaEYsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDaEIsUUFBUSxFQUFFLGdEQUFnRDtLQUM3RCxDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUFDRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWEsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1FBQ2xFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQUMsT0FBTTtRQUFDLENBQUM7UUFDekIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBcUIsQ0FBQTtRQUN4RCxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFlLEVBQUMsQ0FBQyxDQUFBO1FBQ3hELE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDNUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFRLENBQUE7SUFDL0IsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/packages/cad/dist/commands/slice.d.ts b/packages/cad/dist/commands/slice.d.ts new file mode 100644 index 00000000..ca73784e --- /dev/null +++ b/packages/cad/dist/commands/slice.d.ts @@ -0,0 +1,2 @@ +import * as CLI from 'yargs'; +export declare const register: (cli: CLI.Argv) => any; diff --git a/packages/cad/dist/commands/slice.js b/packages/cad/dist/commands/slice.js new file mode 100644 index 00000000..e7fde490 --- /dev/null +++ b/packages/cad/dist/commands/slice.js @@ -0,0 +1,52 @@ +import * as path from 'path'; +import { logger } from '../index.js'; +import { defaultOptions, sanitize } from '../slic3r_argv.js'; +import { convert } from '../print/index.js'; +import { load } from 'js-yaml'; +import { deepClone as clone } from "@polymech/core/objects"; +import { sync as read } from "@polymech/fs/read"; +const SLIC3R_DEFAULTS = () => path.resolve(path.join(__dirname, '../profiles/slic3r_defaults.yaml')); +const defaults = (defaults, options) => { + let key, returnObject; + returnObject = clone(options) || {}; + for (key in defaults) + if (defaults.hasOwnProperty(key) && + typeof returnObject[key] === 'undefined') + returnObject[key] = defaults[key]; + return returnObject; +}; +export const register = (cli) => { + const defaults_path = SLIC3R_DEFAULTS(); + cli.parserConfiguration({ + "short-option-groups": true, + "camel-case-expansion": false + }); + const defaultsRaw = read(defaults_path); + let defaults_json = load(defaultsRaw); + let options = (yargs) => { + let opts = defaultOptions(yargs); + Object.keys(defaults_json.properties).forEach((k) => { + const val = defaults_json.properties[k]; + switch (defaults_json.properties[k].type) { + case 'object': + case 'boolean': + case 'number': + case 'string': { + opts = opts.option(k, val); + break; + } + } + }); + return opts; + }; + return cli.command('slice', 'Run Slic3r', options, async (argv) => { + if (argv.help) { + return; + } + let options = sanitize(argv); + options = defaults(defaults_json, options); + options.debug && logger.info("options " + argv.dst, options); + return convert(options); + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvc2xpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUVwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQzlCLE9BQU8sRUFBRSxTQUFTLElBQUksS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDM0QsT0FBTyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUVoRCxNQUFNLGVBQWUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGtDQUFrQyxDQUFDLENBQUMsQ0FBQTtBQUVwRyxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUVuQyxJQUFJLEdBQUcsRUFDSCxZQUFZLENBQUE7SUFFaEIsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUE7SUFFbkMsS0FBSyxHQUFHLElBQUksUUFBUTtRQUNoQixJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO1lBQzVCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFdBQVc7WUFDeEMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV6QyxPQUFPLFlBQVksQ0FBQTtBQUN2QixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUV0QyxNQUFNLGFBQWEsR0FBRyxlQUFlLEVBQUUsQ0FBQTtJQUV2QyxHQUFHLENBQUMsbUJBQW1CLENBQUM7UUFDcEIscUJBQXFCLEVBQUUsSUFBSTtRQUMzQixzQkFBc0IsRUFBRSxLQUFLO0tBQ2hDLENBQUMsQ0FBQTtJQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQVcsQ0FBQTtJQUNqRCxJQUFJLGFBQWEsR0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDMUMsSUFBSSxPQUFPLEdBQVEsQ0FBQyxLQUFlLEVBQUUsRUFBRTtRQUNuQyxJQUFJLElBQUksR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDaEQsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN2QyxRQUFRLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssUUFBUSxDQUFDO2dCQUNkLEtBQUssU0FBUyxDQUFDO2dCQUNmLEtBQUssUUFBUSxDQUFDO2dCQUNkLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDWixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7b0JBQzFCLE1BQU07Z0JBQ1YsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQyxDQUFBO0lBRUQsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFtQixFQUFFLEVBQUU7UUFDN0UsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFBQyxPQUFNO1FBQUMsQ0FBQztRQUV6QixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFrQixDQUFBO1FBRTdDLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRTFDLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUU1RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/cad/dist/commands/sw-pack.d.ts b/packages/cad/dist/commands/sw-pack.d.ts new file mode 100644 index 00000000..ca73784e --- /dev/null +++ b/packages/cad/dist/commands/sw-pack.d.ts @@ -0,0 +1,2 @@ +import * as CLI from 'yargs'; +export declare const register: (cli: CLI.Argv) => any; diff --git a/packages/cad/dist/commands/sw-pack.js b/packages/cad/dist/commands/sw-pack.js new file mode 100644 index 00000000..bf18ac48 --- /dev/null +++ b/packages/cad/dist/commands/sw-pack.js @@ -0,0 +1,15 @@ +import { logger } from '../index.js'; +import { defaultOptions, sanitize } from '../sw_argv.js'; +import { convert } from '../cad/index.js'; +let options = (yargs) => defaultOptions(yargs); +export const register = (cli) => { + return cli.command('sw-pack', 'Pack and Go - Using the Zip option to preserve folder structure', options, async (argv) => { + if (argv.help) { + return; + } + const options = sanitize(argv); + options.debug && logger.info("options " + argv.dst, options); + return convert(options); + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ctcGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9zdy1wYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRXpDLElBQUksT0FBTyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7QUFFeEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFFdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxpRUFBaUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQW1CLEVBQUUsRUFBRTtRQUNwSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUFDLE9BQU07UUFBQyxDQUFDO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQXFCLENBQUE7UUFFbEQsT0FBTyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzVELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/cad/dist/commands/sw.d.ts b/packages/cad/dist/commands/sw.d.ts new file mode 100644 index 00000000..ca73784e --- /dev/null +++ b/packages/cad/dist/commands/sw.d.ts @@ -0,0 +1,2 @@ +import * as CLI from 'yargs'; +export declare const register: (cli: CLI.Argv) => any; diff --git a/packages/cad/dist/commands/sw.js b/packages/cad/dist/commands/sw.js new file mode 100644 index 00000000..10335130 --- /dev/null +++ b/packages/cad/dist/commands/sw.js @@ -0,0 +1,16 @@ +import { logger } from '../index.js'; +import { defaultOptions, sanitize } from '../sw_argv.js'; +import { convert } from '../cad/sw-convert.js'; +let options = (yargs) => defaultOptions(yargs); +export const register = (cli) => { + return cli.command('sw', 'Convert CAD files via Solidworks Interop API', options, async (argv) => { + if (argv.help) { + return; + } + const options = sanitize(argv); + logger.setSettings({ minLevel: options.logLevel }); + logger.info("options " + argv.dst, options); + return convert(options); + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvc3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUVwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFOUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUV4RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUN0QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLDhDQUE4QyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1FBQzVHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQUMsT0FBTTtRQUFDLENBQUM7UUFDekIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBcUIsQ0FBQTtRQUNsRCxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFlLEVBQUUsQ0FBQyxDQUFBO1FBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDM0MsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFRLENBQUE7SUFDbEMsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/packages/cad/dist/constants.d.ts b/packages/cad/dist/constants.d.ts new file mode 100644 index 00000000..1e476271 --- /dev/null +++ b/packages/cad/dist/constants.d.ts @@ -0,0 +1,7 @@ +export declare const GIT_CHANGELOG_MESSAGE_PREFIX = "ChangeLog:"; +export declare const GIT_REPO = "https://git.polymech.io/osr-plastic/"; +export declare const MODULE_NAME = "POLYMECH-CAD"; +export declare const PACKAGE_NAME = "polymech-cad"; +export declare const DEFAULT_REPORT = "${SRC_DIR}/cad-report-${CONFIGURATION}.json"; +export declare const BUF_SIZE_CMP: number; +export declare const MSG_FAILED_TO_LOAD = "Failed to load"; diff --git a/packages/cad/dist/constants.js b/packages/cad/dist/constants.js new file mode 100644 index 00000000..a64b144e --- /dev/null +++ b/packages/cad/dist/constants.js @@ -0,0 +1,8 @@ +export const GIT_CHANGELOG_MESSAGE_PREFIX = 'ChangeLog:'; +export const GIT_REPO = 'https://git.polymech.io/osr-plastic/'; +export const MODULE_NAME = `POLYMECH-CAD`; +export const PACKAGE_NAME = 'polymech-cad'; +export const DEFAULT_REPORT = '${SRC_DIR}/cad-report-${CONFIGURATION}.json'; +export const BUF_SIZE_CMP = 16 * 1024; +export const MSG_FAILED_TO_LOAD = 'Failed to load'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxZQUFZLENBQUE7QUFDeEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLHNDQUFzQyxDQUFBO0FBQzlELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUE7QUFDekMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQTtBQUMxQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUksNkNBQTZDLENBQUE7QUFDNUUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUE7QUFDckMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUEifQ== \ No newline at end of file diff --git a/packages/cad/dist/index.d.ts b/packages/cad/dist/index.d.ts new file mode 100644 index 00000000..6f687464 --- /dev/null +++ b/packages/cad/dist/index.d.ts @@ -0,0 +1,11 @@ +export * from './types.js'; +export * from './cad/sw-lib.js'; +export * from './_cli.js'; +export * from './sw_argv.js'; +export * from './lib/geometry/dxf.js'; +import { Logger } from "tslog"; +export declare function createLogger(name: string, options?: any): Logger; +export declare const defaultLogger: Logger; +export { MODULE_NAME } from './constants.js'; +export declare const logger: Logger; +export declare const substitute: (_path: string, alt?: boolean, vars?: Record) => any; diff --git a/packages/cad/dist/index.js b/packages/cad/dist/index.js new file mode 100644 index 00000000..87035ce8 --- /dev/null +++ b/packages/cad/dist/index.js @@ -0,0 +1,22 @@ +import { resolve } from "@polymech/commons/variables"; +export * from './types.js'; +export * from './cad/sw-lib.js'; +export * from './_cli.js'; +export * from './sw_argv.js'; +export * from './lib/geometry/dxf.js'; +import { Logger } from "tslog"; +export function createLogger(name, options) { + return new Logger({ + name, + type: 'pretty', + ...options, + }); +} +export const defaultLogger = createLogger('DefaultLogger', { + minLevel: 1 +}); +import { MODULE_NAME } from './constants.js'; +export { MODULE_NAME } from './constants.js'; +export const logger = createLogger(MODULE_NAME, {}); +export const substitute = resolve; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRyxNQUFNLDZCQUE2QixDQUFBO0FBRXRELGNBQWMsWUFBWSxDQUFBO0FBQzFCLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxXQUFXLENBQUE7QUFDekIsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyx1QkFBdUIsQ0FBQTtBQUVyQyxPQUFPLEVBQUcsTUFBTSxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBRS9CLE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBWSxFQUFFLE9BQWE7SUFDcEQsT0FBTyxJQUFJLE1BQU0sQ0FBQztRQUNkLElBQUk7UUFDSixJQUFJLEVBQUUsUUFBUTtRQUNkLEdBQUcsT0FBTztLQUNiLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLGVBQWUsRUFBRTtJQUN2RCxRQUFRLEVBQUUsQ0FBQztDQUNkLENBQUMsQ0FBQTtBQUVGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFNUMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFFbkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQSJ9 \ No newline at end of file diff --git a/packages/cad/dist/lib/cache.d.ts b/packages/cad/dist/lib/cache.d.ts new file mode 100644 index 00000000..5a4e50bc --- /dev/null +++ b/packages/cad/dist/lib/cache.d.ts @@ -0,0 +1 @@ +export declare const get: (str: string, dst: string) => void; diff --git a/packages/cad/dist/lib/cache.js b/packages/cad/dist/lib/cache.js new file mode 100644 index 00000000..1c649b03 --- /dev/null +++ b/packages/cad/dist/lib/cache.js @@ -0,0 +1,2 @@ +export const get = (str, dst) => { }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQVUsRUFBRSxHQUFVLEVBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/cad/dist/lib/formatter.d.ts b/packages/cad/dist/lib/formatter.d.ts new file mode 100644 index 00000000..57246606 --- /dev/null +++ b/packages/cad/dist/lib/formatter.d.ts @@ -0,0 +1 @@ +export declare const sizeToString: (bytes: number, si?: boolean) => string; diff --git a/packages/cad/dist/lib/formatter.js b/packages/cad/dist/lib/formatter.js new file mode 100644 index 00000000..27689f63 --- /dev/null +++ b/packages/cad/dist/lib/formatter.js @@ -0,0 +1,19 @@ +export const sizeToString = (bytes, si = true) => { + var units; + var u; + var b = bytes; + var thresh = si ? 1000 : 1024; + if (Math.abs(b) < thresh) { + return b + ' B'; + } + units = si + ? ['kB', 'MB', 'GB', 'TB'] + : ['KiB', 'MiB', 'GiB', 'TiB']; + u = -1; + do { + b /= thresh; + ++u; + } while (Math.abs(b) >= thresh && u < units.length - 1); + return b.toFixed(1) + ' ' + units[u]; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9mb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUFFLEtBQWMsSUFBSSxFQUFFLEVBQUU7SUFDOUQsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLENBQUMsQ0FBQztJQUNOLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNkLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBQ0QsS0FBSyxHQUFHLEVBQUU7UUFDTixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ1AsR0FBRyxDQUFDO1FBQ0EsQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUNaLEVBQUUsQ0FBQyxDQUFDO0lBQ1IsQ0FBQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUN4RCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUMifQ== \ No newline at end of file diff --git a/packages/cad/dist/lib/geometry/dxf.d.ts b/packages/cad/dist/lib/geometry/dxf.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/packages/cad/dist/lib/geometry/dxf.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/cad/dist/lib/geometry/dxf.js b/packages/cad/dist/lib/geometry/dxf.js new file mode 100644 index 00000000..b5292bca --- /dev/null +++ b/packages/cad/dist/lib/geometry/dxf.js @@ -0,0 +1,51 @@ +import * as fs from 'fs'; +const dxf = require('dxf-parser'); +import { sync as write } from '@polymech/fs/write'; +function distanceBetweenPoints(p1, p2) { + return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)); +} +function arcLength(radius, startAngle, endAngle) { + return Math.abs(endAngle - startAngle) * radius; +} +function calculateEntityLength(entity) { + switch (entity.type) { + //case 'LINE': + // return distanceBetweenPoints(entity.start!, entity.end!); + case 'LWPOLYLINE': + case 'LINE': + let length = 0; + for (let i = 0; i < entity.vertices.length - 1; i++) { + try { + length += distanceBetweenPoints(entity.vertices[i], entity.vertices[i + 1]); + } + catch (e) { + console.log('error', entity, e); + } + } + return length; + case 'CIRCLE': + return 2 * Math.PI * entity.radius; + case 'ARC': + return arcLength(entity.radius, entity.startAngle, entity.endAngle); + default: + return 0; + } +} +function calculateTotalDxfEntitiesLength(filePath) { + const parser = new dxf(); + const dxfData = parser.parseSync(fs.readFileSync(filePath, 'utf-8')); + const ret = dxfData.entities.reduce((totalLength, entity) => { + console.log('entity', entity); + const length = calculateEntityLength(entity); + return totalLength + length; + }, 0); + write(filePath + '.json', JSON.stringify(dxfData, null, 2)); + return ret; +} +const test = () => { + // Usage example + const filePath = './tests/dxf/square-200-bore.DXF'; + const totalLength = calculateTotalDxfEntitiesLength(filePath); + console.log(`Total length of all entities: ${totalLength}`); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHhmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9nZW9tZXRyeS9keGYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO0FBRWpDLE9BQU8sRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFhbEQsU0FBUyxxQkFBcUIsQ0FBQyxFQUE0QixFQUFFLEVBQTRCO0lBQ3JGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxNQUFjLEVBQUUsVUFBa0IsRUFBRSxRQUFnQjtJQUNuRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwRCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxNQUFpQjtJQUM1QyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixjQUFjO1FBQ2QsK0RBQStEO1FBQy9ELEtBQUssWUFBWSxDQUFDO1FBQ2xCLEtBQUssTUFBTTtZQUNQLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDO29CQUNELE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsUUFBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xGLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7Z0JBRW5DLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDbEIsS0FBSyxRQUFRO1lBQ1QsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTyxDQUFDO1FBQ3hDLEtBQUssS0FBSztZQUNOLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFPLEVBQUUsTUFBTSxDQUFDLFVBQVcsRUFBRSxNQUFNLENBQUMsUUFBUyxDQUFDLENBQUM7UUFDM0U7WUFDSSxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsK0JBQStCLENBQUMsUUFBZ0I7SUFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFckUsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFtQixFQUFFLE1BQWlCLEVBQUUsRUFBRTtRQUMzRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUM3QixNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDaEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ04sS0FBSyxDQUFFLFFBQVEsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUQsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO0lBQ2QsZ0JBQWdCO0lBQ2hCLE1BQU0sUUFBUSxHQUFHLGlDQUFpQyxDQUFBO0lBQ2xELE1BQU0sV0FBVyxHQUFHLCtCQUErQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/cad/dist/lib/index.d.ts b/packages/cad/dist/lib/index.d.ts new file mode 100644 index 00000000..782c5510 --- /dev/null +++ b/packages/cad/dist/lib/index.d.ts @@ -0,0 +1 @@ +export declare const removeEmpty: (data: any) => any; diff --git a/packages/cad/dist/lib/index.js b/packages/cad/dist/lib/index.js new file mode 100644 index 00000000..a9cebd3b --- /dev/null +++ b/packages/cad/dist/lib/index.js @@ -0,0 +1,13 @@ +export const removeEmpty = (data) => { + //transform properties into key-values pairs and filter all the empty-values + const entries = Object.entries(data).filter(([, value]) => value != null); + //map through all the remaining properties and check if the value is an object. + //if value is object, use recursion to remove empty properties + const clean = entries.map(([key, v]) => { + const value = typeof v == 'object' ? removeEmpty(v) : v; + return [key, value]; + }); + //transform the key-value pairs back to an object. + return Object.fromEntries(clean); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO0lBQ2hDLDRFQUE0RTtJQUM1RSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBRTFFLCtFQUErRTtJQUMvRSw4REFBOEQ7SUFDOUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN2RCxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3ZCLENBQUMsQ0FBQyxDQUFBO0lBRUYsa0RBQWtEO0lBQ2xELE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNwQyxDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/packages/cad/dist/lib/process/index.d.ts b/packages/cad/dist/lib/process/index.d.ts new file mode 100644 index 00000000..02713a88 --- /dev/null +++ b/packages/cad/dist/lib/process/index.d.ts @@ -0,0 +1,17 @@ +export declare enum STATUS { + OK = 0, + ERROR = 1, + PENDING = 2 +} +export declare class Process { + binary: string; + cwd: string; + args: string; + constructor(options?: any); + optionsToString(options: any): string; + optionsToArray(options: any): string[]; + exec(command: string, options?: any, args?: any[]): Promise; +} +export declare class Helper { + static run(cwd: any, command: string, args: string[], debug_stream?: boolean): Promise; +} diff --git a/packages/cad/dist/lib/process/index.js b/packages/cad/dist/lib/process/index.js new file mode 100644 index 00000000..cbbc5cd2 --- /dev/null +++ b/packages/cad/dist/lib/process/index.js @@ -0,0 +1,142 @@ +import { logger } from '../../index.js'; +import { exec } from 'child_process'; +export var STATUS; +(function (STATUS) { + STATUS[STATUS["OK"] = 0] = "OK"; + STATUS[STATUS["ERROR"] = 1] = "ERROR"; + STATUS[STATUS["PENDING"] = 2] = "PENDING"; +})(STATUS || (STATUS = {})); +const fatalHandler = (message, fn) => { + if (message.startsWith('fatal:')) { + fn('\t\ ' + message); + return true; + } + return false; +}; +// tslint:disable-next-line:no-empty +const subscribe = (signal, collector = () => { }, options = {}) => { + const buffer = []; + signal.on('message', (message) => logger.debug('message', message)); + signal.on('error', (error) => logger.error('std-error', error)); + signal.on('data', (data) => { + const message = data.toString(); + buffer.push(message); // .replace(/[\x00-\x1F\x7F-\x9F]/g, "") + collector(buffer); + logger.debug("\n Process : \n\t", data); + }); +}; +const merge = (buffer, data) => buffer.concat(data); +const hook = (process, resolve, reject, cmd, options = {}) => { + let buffer = []; + const collector = (data) => { buffer = buffer.concat(data); }; + subscribe(process.stdout, collector, options); + subscribe(process.stderr, collector, options); + process.on('exit', (code, signal) => { + if (code) { + resolve({ + code: STATUS.ERROR, + command: cmd, + error: code, + messages: buffer + }); + } + else { + resolve({ + code: STATUS.OK, + command: cmd, + messages: buffer + }); + } + }); + return process; +}; +export class Process { + binary = 'magick'; + cwd = ''; + args = ''; + constructor(options = {}) { + this.binary = options.binary || this.binary; + this.cwd = options.cwd || process.cwd(); + } + optionsToString(options) { + const args = []; + // tslint:disable-next-line:forin + for (const k in options) { + const val = options[k]; + if (k.length === 1) { + // val is true, add '-k' + if (val === true) { + args.push('-' + k); + } + else if (val !== false) { + // if val is not false, add '-k val' + args.push('-' + k + ' ' + val); + } + } + else { + if (val === true) { + args.push('--' + k); + } + else if (val !== false) { + args.push('--' + k + '=' + val); + } + } + } + return args.join(' '); + } + optionsToArray(options) { + const args = []; + // tslint:disable-next-line:forin + for (const k in options) { + const val = options[k]; + if (k.length === 1) { + // val is true, add '-k' + if (val === true) { + args.push('-' + k); + } + else if (val !== false) { + // if val is not false, add '-k val' + args.push('-' + k + ' ' + val); + } + } + else { + if (val === true) { + args.push('--' + k); + } + else if (val !== false) { + args.push('--' + k + '=' + val); + } + } + } + return args; + } + async exec(command, options = {}, args = []) { + args = [command].concat(args); + return new Promise((resolve, reject) => { + const p = exec(this.binary + ' ' + args.join(' '), { + cwd: this.cwd + }); + return hook(p, resolve, reject, this.binary + ' ' + args.join(' '), options); + }); + } +} +export class Helper { + static async run(cwd, command, args, debug_stream = false) { + logger.trace(`Run ${command} in ${cwd} ${args.join(' ')}`); + const gitProcess = new Process({ + cwd: cwd, + binary: command + }); + const p = gitProcess.exec('', { + debug: debug_stream + }, args); + if (!debug_stream) { + p.catch((e) => logger.error('Error git command : ' + command, e)); + } + else { + logger.trace(command + ' ' + args.join(' ')); + } + return p; + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Byb2Nlc3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXZDLE9BQU8sRUFBZ0IsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE1BQU0sQ0FBTixJQUFZLE1BSVg7QUFKRCxXQUFZLE1BQU07SUFDZCwrQkFBRSxDQUFBO0lBQ0YscUNBQUssQ0FBQTtJQUNMLHlDQUFPLENBQUE7QUFDWCxDQUFDLEVBSlcsTUFBTSxLQUFOLE1BQU0sUUFJakI7QUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUF5QixFQUFXLEVBQUU7SUFDekUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDL0IsRUFBRSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQTtRQUNwQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDaEIsQ0FBQyxDQUFBO0FBRUQsb0NBQW9DO0FBQ3BDLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBdUIsRUFBRSxZQUFpQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsVUFBZSxFQUFFLEVBQUUsRUFBRTtJQUN6RyxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUE7SUFDM0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDbkUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDL0QsTUFB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 \ No newline at end of file diff --git a/packages/cad/dist/log.d.ts b/packages/cad/dist/log.d.ts new file mode 100644 index 00000000..27abd08d --- /dev/null +++ b/packages/cad/dist/log.d.ts @@ -0,0 +1 @@ +export declare const noop: () => void; diff --git a/packages/cad/dist/log.js b/packages/cad/dist/log.js new file mode 100644 index 00000000..f38ff07b --- /dev/null +++ b/packages/cad/dist/log.js @@ -0,0 +1,2 @@ +export const noop = () => { }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/cad/dist/main.d.ts b/packages/cad/dist/main.d.ts new file mode 100644 index 00000000..b7988016 --- /dev/null +++ b/packages/cad/dist/main.d.ts @@ -0,0 +1,2 @@ +#!/usr/bin/env node +export {}; diff --git a/packages/cad/dist/main.js b/packages/cad/dist/main.js new file mode 100644 index 00000000..8fd32267 --- /dev/null +++ b/packages/cad/dist/main.js @@ -0,0 +1,18 @@ +#!/usr/bin/env node +import { defaults } from './_cli.js'; +defaults(); +import * as cli from 'yargs'; +import { register as registerSW } from './commands/sw.js'; +registerSW(cli); +//import { register as registerSlic3r } from './commands/slice.js'; registerSlic3r(cli as any) +//import { register as registerPack } from './commands/pack.js'; registerPack(cli as any) +//import { register as registerInfo } from './commands/info.js'; registerInfo(cli as any) +const argv = cli.argv; +if (argv.h || argv.help) { + cli.showHelp(); + process.exit(); +} +else if (argv.v || argv.version) { + process.exit(); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQUMsUUFBUSxFQUFFLENBQUE7QUFFaEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUE7QUFFNUIsT0FBTyxFQUFFLFFBQVEsSUFBSSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUFDLFVBQVUsQ0FBQyxHQUFVLENBQUMsQ0FBQTtBQUNqRiw4RkFBOEY7QUFDOUYseUZBQXlGO0FBQ3pGLHlGQUF5RjtBQUV6RixNQUFNLElBQUksR0FBUSxHQUFHLENBQUMsSUFBSSxDQUFBO0FBRTFCLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2QsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ2xCLENBQUM7S0FBTSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUNsQixDQUFDIn0= \ No newline at end of file diff --git a/packages/cad/dist/os/context_menu/register_cli.d.ts b/packages/cad/dist/os/context_menu/register_cli.d.ts new file mode 100644 index 00000000..52bd98ed --- /dev/null +++ b/packages/cad/dist/os/context_menu/register_cli.d.ts @@ -0,0 +1,6 @@ +export declare const registerCommand: (options: any) => Promise; +export declare const registerDirectoryCommand: (options: any) => Promise; +export declare const registerOpenWithCommand: (extensions: any, options: any) => Promise; +export declare const removeCommand: (name: any) => Promise; +export declare const removeDirectoryCommand: (name: any) => Promise; +export declare const removeOpenWithCommand: (extensions: any, name: any) => Promise; diff --git a/packages/cad/dist/os/context_menu/register_cli.js b/packages/cad/dist/os/context_menu/register_cli.js new file mode 100644 index 00000000..a38af33d --- /dev/null +++ b/packages/cad/dist/os/context_menu/register_cli.js @@ -0,0 +1,108 @@ +const Registry = require('rage-edit').Registry; +const SOFTWARE_CLASSES = 'HKCU\\Software\\Classes\\'; +export const registerCommand = async (options) => { + if (!options) + throw new Error('options are empty'); + const { name, icon, command, menu } = options; + if (!name) + throw new Error('name is not specified'); + if (!command) + throw new Error('command is not specified'); + if (!menu) + throw new Error('menuName is not specified'); + try { + await Registry.set(`${SOFTWARE_CLASSES}*\\shell\\${name}`); + await Registry.set(`${SOFTWARE_CLASSES}*\\shell\\${name}`, '', menu); + if (icon) + await Registry.set(`${SOFTWARE_CLASSES}*\\shell\\${name}`, 'Icon', (icon.endsWith('.exe') ? `${icon},0` : icon)); + await Registry.set(`${SOFTWARE_CLASSES}*\\shell\\${name}\\command`, '', `"${command}" "%1"`); + } + catch (e) { + return Promise.reject(e); + } + return Promise.resolve(); +}; +export const registerDirectoryCommand = async (options) => { + if (!options) + throw new Error('options are empty'); + const { name, icon, command, menu } = options; + if (!name) + throw new Error('name is not specified'); + if (!command) + throw new Error('command is not specified'); + if (!menu) + throw new Error('menu is not specified'); + try { + await Registry.set(`${SOFTWARE_CLASSES}Directory\\shell\\${name}`); + await Registry.set(`${SOFTWARE_CLASSES}Directory\\shell\\${name}`, '', menu); + if (icon) + await Registry.set(`${SOFTWARE_CLASSES}Directory\\shell\\${name}`, 'Icon', (icon.endsWith('.exe') ? `${icon},0` : icon)); + await Registry.set(`${SOFTWARE_CLASSES}Directory\\shell\\${name}\\command`, '', `"${command}" "%1"`); + } + catch (e) { + return Promise.reject(e); + } + return Promise.resolve(); +}; +export const registerOpenWithCommand = async (extensions, options) => { + if (!extensions || !extensions.length) + throw new Error('extensions is not specified'); + if (!options) + throw new Error('options are empty'); + const { name, command } = options; + if (!name) + throw new Error('name is not specified'); + if (!command) + throw new Error('command is not specified'); + try { + await Promise.all((await findExtensionNames(extensions)).map(async (n) => { + await Registry.set(`${SOFTWARE_CLASSES}${n}`); + await Registry.set(`${SOFTWARE_CLASSES}${n}\\shell\\${name}`); + await Registry.set(`${SOFTWARE_CLASSES}${n}\\shell\\${name}\\command`, '', `"${command}" "%1"`); + })); + } + catch (e) { + return Promise.reject(e); + } + return Promise.resolve(); +}; +export const removeCommand = async (name) => { + if (!name) + throw new Error('name is not specified'); + try { + await Registry.delete(`${SOFTWARE_CLASSES}*\\shell\\${name}`); + } + catch (e) { + return Promise.reject(e); + } + return Promise.resolve(); +}; +export const removeDirectoryCommand = async (name) => { + if (!name) + throw new Error('name is not specified'); + try { + await Registry.delete(`${SOFTWARE_CLASSES}Directory\\shell\\${name}`); + } + catch (e) { + return Promise.reject(e); + } + return Promise.resolve(); +}; +export const removeOpenWithCommand = async (extensions, name) => { + if (!extensions) + throw new Error('extensions is not specified'); + if (!name) + throw new Error('name is not specified'); + try { + await Promise.all((await findExtensionNames(extensions)).map(async (n) => await Registry.delete(`${SOFTWARE_CLASSES}${n}\\shell\\${name}`))); + } + catch (e) { + return Promise.reject(e); + } + return Promise.resolve(); +}; +async function findExtensionNames(exts) { + const { ses_root } = await Registry.get('HKCR'); + return Promise.all(Object.keys(ses_root).filter(e => exts.includes(e)).map(async (k) => (await Registry.get(`HKCR\\${k}`)).$values[''])); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJfY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29zL2NvbnRleHRfbWVudS9yZWdpc3Rlcl9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTyxRQUFRLEdBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUVqRCxNQUFNLGdCQUFnQixHQUFHLDJCQUEyQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7SUFDOUMsSUFBSSxDQUFDLE9BQU87UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFbkQsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM5QyxJQUFJLENBQUMsSUFBSTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNwRCxJQUFJLENBQUMsT0FBTztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUMxRCxJQUFJLENBQUMsSUFBSTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUV4RCxJQUFJLENBQUM7UUFDSixNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixhQUFhLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRSxJQUFJLElBQUk7WUFBRSxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsYUFBYSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxD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 \ No newline at end of file diff --git a/packages/cad/dist/print/index.d.ts b/packages/cad/dist/print/index.d.ts new file mode 100644 index 00000000..f174db35 --- /dev/null +++ b/packages/cad/dist/print/index.d.ts @@ -0,0 +1 @@ +export { convert } from './slic3r.js'; diff --git a/packages/cad/dist/print/index.js b/packages/cad/dist/print/index.js new file mode 100644 index 00000000..09bff981 --- /dev/null +++ b/packages/cad/dist/print/index.js @@ -0,0 +1,2 @@ +export { convert } from './slic3r.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/cad/dist/print/slic3r.d.ts b/packages/cad/dist/print/slic3r.d.ts new file mode 100644 index 00000000..e0e9ab08 --- /dev/null +++ b/packages/cad/dist/print/slic3r.d.ts @@ -0,0 +1,9 @@ +import { SlicerOptions } from '../types.js'; +export declare const fileAsBuffer: (path: string) => Buffer; +export declare const getSlicrDir: (options: SlicerOptions) => string; +export declare const getBin: (options: SlicerOptions) => string; +export declare const convertFile: (file: any, target: any, onNode: (data: any) => void, options: SlicerOptions) => Promise; +export declare function convertFiles(file: any, targets: string[], onNode: (data: any) => void, options: SlicerOptions): Promise; +export declare const report: (data: any, dst: string) => any; +export declare const targets: (f: string, options: SlicerOptions) => any[]; +export declare function convert(options: SlicerOptions): Promise; diff --git a/packages/cad/dist/print/slic3r.js b/packages/cad/dist/print/slic3r.js new file mode 100644 index 00000000..88e80713 --- /dev/null +++ b/packages/cad/dist/print/slic3r.js @@ -0,0 +1,341 @@ +import * as path from 'path'; +import { logger, substitute } from '../index.js'; +import { removeEmpty } from '../lib/index.js'; +import { OSR_CACHE } from '@polymech/commons'; +import { sync as exists } from "@polymech/fs/exists"; +import { sync as read } from "@polymech/fs/read"; +import { sync as write } from "@polymech/fs/write"; +import { sync as dir } from "@polymech/fs/dir"; +import { sync as which } from 'which'; +import * as md5 from 'md5'; +import pMap from 'p-map'; +import { Helper } from '../lib/process/index.js'; +import { reportCSV } from '../report/csv.js'; +import { get_cached, set_cached } from '@polymech/cache'; +import { MODULE_NAME } from '../constants.js'; +export const fileAsBuffer = (path) => read(path, 'buffer') || Buffer.from("-"); +const SLIC3R_EXE = 'Slic3r-console.exe'; +const clone = (obj) => { + if (null == obj || "object" != typeof obj) + return obj; + var copy = obj.constructor(); + for (var attr in obj) { + if (obj.hasOwnProperty(attr)) + copy[attr] = obj[attr]; + } + return copy; +}; +export const getSlicrDir = (options) => { + const dir = path.parse(which(SLIC3R_EXE)).dir; + if (exists(dir)) { + return dir; + } +}; +export const getBin = (options) => { + const dir = getSlicrDir(options); + const exe = path.resolve(path.join(dir, SLIC3R_EXE)); + if (exists(exe)) { + return exe; + } +}; +const toPercentString = (aNumber) => String(aNumber * 100) + '%'; +export const convertFile = async (file, target, onNode = () => { }, options) => { + let bin = getBin(options); + if (!bin) { + logger.error(`Cant find Slicr. Please register the directory in your $PATH environment variable!`); + return; + } + const getArgs = (o) => { + return [ + `--output "${target}"`, + // Non-slicing actions + o.repair ? '--repair' : '', + o.cut ? '--cut' : '', + o.split ? '--split' : '', + o.info ? '--info' : '', + '--threads ' + o.threads, + // Output options + o.outputFilenameFormat ? + '--output-filename-format ' + o.outputFilenameFormat : '', + o.postProcess ? o.postProcessScripts.map(function (script) { + return '--post-process ' + script; + }).join(' ') : '', + o.exportSvg ? '--export-svg' : '', + o.merge ? '--merge' : '', + // Printer options + '--nozzle-diameter ' + o.nozzleDiameter, + '--print-center ' + o.printCenter.x + ',' + o.printCenter.y, + '--z-offset ' + o.zOffset, + '--gcode-flavor ' + o.GCodeFlavor, + o.useRelativeEDistances ? '--use-relative-e-distances ' : '', + o.useFirmwareRetraction ? '--use-firmware-retraction ' : '', + o.useVolumetricE ? '--use-volumetric-e ' : '', + o.GCodeArcs ? '--gcode-arcs' : '', + o.g0 ? '--g0' : '', + o.GCodeComments ? '--gcode-comments' : '', + '--vibration-limit ' + o.vibrationLimit, + //'--pressure-advance ' + o.pressureAdvance, + // Filament options + '--filament-diameter ' + o.filamentDiameter, + '--extrusion-multiplier ' + o.extrusionMultiplier, + '--temperature ' + o.temperature, + '--first-layer-temperature ' + o.firstLayerTemperature, + '--bed-temperature ' + o.bedTemperature, + '--first-layer-bed-temperature ' + o.firstLayerBedTemperature, + // Speed options + '--travel-speed ' + o.travelSpeed, + '--perimeter-speed ' + o.perimeterSpeed, + '--small-perimeter-speed ' + o.smallPerimeterSpeed, + '--external-perimeter-speed ' + o.externalPerimeterSpeed, + '--infill-speed ' + o.infillSpeed, + '--solid-infill-speed ' + o.solidInfillSpeed, + '--top-solid-infill-speed ' + o.topSolidInfillSpeed, + '--support-material-speed ' + o.supportMaterialSpeed, + '--support-material-interface-speed ' + o.supportMaterialInterfaceSpeed, + '--bridge-speed ' + o.bridgeSpeed, + '--gap-fill-speed ' + o.gapFillSpeed, + '--first-layer-speed ' + o.firstLayerSpeed, + // Accelerator options + '--perimeter-acceleration ' + o.perimeterAcceleration, + '--infill-acceleration ' + o.infillAcceleration, + '--bridge-acceleration ' + o.bridgeAcceleration, + '--first-layer-acceleration ' + o.firstLayerAcceleration, + '--default-acceleration ' + o.defaultAcceleration, + // Accuracy options + '--layer-height ' + o.layerHeight, + '--first-layer-height ' + o.firstLayerHeight, + '--infill-every-layers ' + o.infillEveryLayers, + '--solid-infill-every-layers ' + o.solidInfillEveryLayers, + // Print Options + '--perimeters ' + o.perimeters, + '--top-solid-layers ' + o.topSolidLayers, + '--bottom-solid-layers ' + o.bottomSolidLayers, + o.solidLayers ? '--solid-layers' : '', + '--fill-density ' + toPercentString(o.fillDensity), + '--fill-angle ' + o.fillAngle, + '--fill-pattern ' + o.fillPattern, + '--solid-fill-pattern ' + o.solidFillPattern, + o.startGcode ? '--start-gcode' : '', + o.endGcode ? '--end-gcode ' : '', + o.layerGcode ? '--layer-gcode ' : '', + o.toolchangeGcode ? '--toolchange-gcode ' : '', + '--seam-position ' + o.seamPosition, + o.externalPerimetersFirst ? '--external-perimeters-first ' : '', + o.spiralVase ? '--spiral-vase ' : '', + o.onlyRetractWhenCrossingPerimeters ? + '--only-retract-when-crossing-perimeters ' : '', + '--solid-infill-below-area ' + o.solidInfillBelowArea, + o.infillOnlyWhereNeeded ? '--infill-only-where-needed ' : '', + o.infillFirst ? '--infill-first ' : '', + // Quality options + o.extraPerimeters ? '--extra-perimeters' : '', + o.avoidCrossingPerimeters ? '--avoid-crossing-perimeters' : '', + o.thinWalls ? '--thin-walls' : '', + o.overhangs ? '--overhangs' : '', + // Support material options + o.supportMaterial ? '--support-material ' : '', + '--support-material-threshold ' + o.supportMaterialThreshold, + '--support-material-pattern ' + o.supportMaterialPattern, + '--support-material-spacing ' + o.supportMaterialSpacing, + '--support-material-angle ' + o.supportMaterialAngle, + '--support-material-interface-layers ' + + o.supportMaterialInterfaceLayers, + '--support-material-interface-spacing ' + + o.supportMaterialInterfaceSpacing, + '--raft-layers ' + o.raftLayers, + '--support-material-enforce-layers ' + o.supportMaterialEnforceLayers, + o.dontSupportBridges ? '--dont-support-bridges ' : '', + // Retraction options + '--retract-length ' + o.retractLength, + '--retract-speed ' + o.retractSpeed, + '--retract-restart-extra ' + o.retractRestartExtra, + '--retract-before-travel ' + o.retractBeforeTravel, + '--retract-lift ' + o.retractLift, + o.retractLayerChange ? '--retract-layer-change' : '', + o.wipe ? '--wipe' : '', + // Retraction options for multi-extruder setups + '--retract-length-toolchange ' + o.retractLengthToolchange, + '--retract-restart-extra-toolchange ' + o.retractRestartExtraToolchange, + // Cooling options + o.cooling ? '--cooling ' : ' ', + '--min-fan-speed ' + (o.minFanSpeed * 100), // in % + '--max-fan-speed ' + (o.maxFanSpeed * 100), // in % + '--bridge-fan-speed ' + (o.bridgeFanSpeed * 100), // in % + '--fan-below-layer-time ' + o.fanBelowLayerTime, + '--slowdown-below-layer-time ' + o.slowdownBelowLayerTime, + '--min-print-speed ' + o.minPrintSpeed, + '--disable-fan-first-layers ' + o.disableFanFirstLayers, + o.fanAlwaysOn ? '--fan-always-on ' : '', + // Skirt options + '--skirts ' + o.skirts, + '--skirt-distance ' + o.skirtDistance, + '--skirt-height ' + o.skirtHeight, + '--min-skirt-length ' + o.minSkirtLength, + '--brim-width ' + o.brimWidth, + // Transform options + '--scale ' + o.scale, + '--rotate ' + o.rotate, + '--duplicate ' + o.duplicate, + '--duplicate-grid ' + o.duplicateGrid, + '--duplicate-distance ' + o.duplicateDistance, + //'--xy-size-compensation ' + o.xySizeCompensation, + // Sequential printing options + o.completeObjects ? '--complete-objects ' : '', + '--extruder-clearance-radius ' + o.extruderClearanceRadius, + '--extruder-clearance-height ' + o.extruderClearanceHeight, + // Miscellaneous options: + o.notes ? '--notes ' + o.notes : '', + '--resolution ' + o.resolution, + // '--bed-size ' + o.bedSize.width + ',' + o.bedSize.height, + // Flow options (advanced): + '--extrusion-width ' + o.extrusionWidth, + o.firstLayerExtrusionWidth ? + '--first-layer-extrusion-width ' + o.firstLayerExtrusionWidth : '', + '--perimeter-extrusion-width ' + o.perimeterExtrusionWidth, + //'--external-perimeter-extrusion-width ' + + // o.externalPerimeterExtrusionWidth, + '--infill-extrusion-width ' + o.infillExtrusionWidth, + '--solid-infill-extrusion-width ' + o.solidInfillExtrusionWidth, + '--top-infill-extrusion-width ' + o.topInfillExtrusionWidth, + '--support-material-extrusion-width ' + o.supportMaterialExtrusionWidth, + '--bridge-flow-ratio ' + o.bridgeFlowRatio, + // Multiple extruder options: + o.extruderOffset.x || o.extruderOffset.y ? + '--extruder-offset ' + o.extruderOffset.x + 'x' + + o.extruderOffset.y : '', + '--perimeter-extruder ' + o.perimeterExtruder, + '--infill-extruder ' + o.infillExtruder, + //'--solid-infill-extruder ' + o.solidInfillExtruder, + '--support-material-extruder ' + o.supportMaterialExtruder, + '--support-material-interface-extruder ' + + o.supportMaterialInterfaceExtruder, + o.oozePrevention ? '--ooze-prevention ' : '', + '--standby-temperature-delta ' + o.standbyTemperatureDelta, + `"${file}"` + ]; + }; + const osr_cache = OSR_CACHE(); + const ca_options = JSON.parse(JSON.stringify({ ...options, target, skip: null })); + const cached = await get_cached(file, ca_options, MODULE_NAME); + if (osr_cache && cached && options.cache !== false) { + let md5Src = md5(Buffer.from(cached)); + let md5Dst = md5(fileAsBuffer(target)); + if (!exists(target) || md5Src !== md5Dst) { + write(target, Buffer.from(cached)); + } + onNode({ + src: file, + target + }); + return Promise.resolve(); + } + let _target = '' + target; + let args = getArgs(options).filter((a) => !!a).filter((k) => k.indexOf('undefined') == -1); + const ret = await Helper.run(getSlicrDir(options), SLIC3R_EXE, args, options.debug); + if (ret && ret.code !== 0) { + logger.error(`Error running Slic3r : `); + return ret; + } + if (options.log) { + write(options.log, ret.messages.join('\n')); + } + onNode({ + ...ret, + src: file, + target + }); + if (options.saveArgs) { + write(options.saveArgs, `${SLIC3R_EXE} ${args.join(' ')}`); + } + if (options.saveAsProfile) { + const out = clone(removeEmpty(options)); + delete out['src']; + delete out['srcInfo']; + delete out['dst']; + delete out['dstInfo']; + delete out['title']; + delete out['type']; + delete out['properties']; + delete out['oneOf']; + delete out['$0']; + delete out['_']; + delete out['skip']; + delete out['variables']; + delete out['saveAsProfile']; + delete out['saveArgs']; + delete out['profile']; + delete out['debug']; + delete out['verbose']; + delete out['log']; + write(options.saveAsProfile, out); + } + if (osr_cache) { + options.debug && logger.info('Write output to cache', _target); + await set_cached(file, ca_options, MODULE_NAME, fileAsBuffer(_target)); + } + return ret; +}; +export async function convertFiles(file, targets, onNode = () => { }, options) { + if (options.dry) { + return Promise.resolve(); + } + return pMap(targets, (target) => { + return convertFile(file, target, onNode, options); + }, { concurrency: 1 }); +} +export const report = (data, dst) => { + let report = null; + if (dst.endsWith('.csv')) { + report = reportCSV(data); + } + if (report) { + logger.info(`Write report to ${dst}`); + write(dst, report); + } + return report; +}; +export const targets = (f, options) => { + const srcParts = path.parse(f); + const variables = clone(options.variables); + const targets = []; + if (options.dstInfo.IS_GLOB) { + options.dstInfo.GLOB_EXTENSIONS.forEach((e) => { + variables.SRC_NAME = srcParts.name; + variables.SRC_DIR = srcParts.dir; + let targetPath = substitute(options.variables.DST_PATH, options.alt, variables); + targetPath = path.resolve(targetPath.replace(options.variables.DST_FILE_EXT, '') + e); + const parts = path.parse(targetPath); + if (!exists(parts.dir)) { + try { + dir(parts.dir); + } + catch (e) { + if (options.debug) { + logger.error(`Error creating target path ${parts.dir} for ${targetPath}`); + } + return; + } + } + targets.push(targetPath); + }); + } + return targets; +}; +export async function convert(options) { + let reports = []; + const onNode = options.onNode || ((data) => reports.push(data)); + options.verbose && logger.info(`Convert ${options.srcInfo.FILES.length} files `); + await pMap(options.srcInfo.FILES, (f) => { + const outputs = targets(f, options); + options.verbose && logger.info(`Convert ${f} to `, outputs); + return convertFiles(f, outputs, onNode, options); + }, { concurrency: 1 }); + if (options.report) { + const reportOutFile = substitute(options.report, false, { + dst: options.srcInfo.DIR + }); + options.verbose && logger.info(`Write report to ${reportOutFile}`); + report(reports, reportOutFile); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpYzNyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ByaW50L3NsaWMzci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUM1QixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFHLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDcEQsT0FBTyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDOUMsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDckMsT0FBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLENBQUE7QUFDMUIsT0FBTyxJQUFJLE1BQU0sT0FBTyxDQUFBO0FBR3hCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUVoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFNUMsT0FBTyxFQUNILFVBQVUsRUFDVixVQUFVLEVBQ2IsTUFBTSxpQkFBaUIsQ0FBQTtBQUV4QixPQUFPLEVBQ0gsV0FBVyxFQUNkLE1BQU0saUJBQWlCLENBQUE7QUFHeEIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJ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 \ No newline at end of file diff --git a/packages/cad/dist/report/csv.d.ts b/packages/cad/dist/report/csv.d.ts new file mode 100644 index 00000000..327837b8 --- /dev/null +++ b/packages/cad/dist/report/csv.d.ts @@ -0,0 +1 @@ +export declare const reportCSV: (data: any) => any; diff --git a/packages/cad/dist/report/csv.js b/packages/cad/dist/report/csv.js new file mode 100644 index 00000000..9f3d23bc --- /dev/null +++ b/packages/cad/dist/report/csv.js @@ -0,0 +1,46 @@ +import * as path from 'path'; +const csv = require('csv-stringify/lib/sync'); +const OSR_REGEX = /^[0-9].+$/; +const isOSR = (filename) => filename.match(OSR_REGEX) != null; +export const reportCSV = (data) => { + const image = (path) => `![](./${(encodeURI(path))})`; + const file = (path) => `[${path}](./${(encodeURI(path))})`; + const qty = (filename) => { + if (isOSR(filename)) { + const parts = filename.split("_"); + const partsLength = parts.length; + const token = parts[partsLength - 3]; + if (token) { + return parseInt(token.replace('x', '')); + } + } + return 'unknown'; + }; + const thickness = (filename) => { + if (isOSR(filename)) { + const parts = filename.split("_"); + const partsLength = parts.length; + const token = parts[partsLength - 2]; + if (token) { + return token; + } + } + return 'unknown'; + }; + const set = data.map((d) => [ + `${path.parse(d.target).name}`, + `${image(path.parse(d.target).name + path.parse(d.target).ext)}`, + `${file(path.parse(d.src).name + path.parse(d.src).ext)}`, + `${qty(path.parse(d.src).name)}`, + `${thickness(path.parse(d.src).name)}`, + `${isOSR(path.parse(d.src).name) ? 'Laser' : 'Unkown'}`, + '' + ]); + const csvString = csv(set, { + header: true, + delimiter: ',', + columns: { 'a': 'Name', 'b': 'Thumbnail', 'c': 'File', 'd': 'Qty', 'f': 'Thickness', 'g': 'Type', 'h': 'Missing' } + }); + return csvString; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlcG9ydC9jc3YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDOUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQzlCLE1BQU0sS0FBSyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUU5QixNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDdEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUUzRCxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ3JCLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDbEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2pDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDUixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQyxDQUFBO0lBRUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUMzQixJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1IsT0FBTyxLQUFLLENBQUM7WUFDakIsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDLENBQUE7SUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN4QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRTtRQUM5QixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDaEUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3pELEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2hDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3RDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtRQUN2RCxFQUFFO0tBQ0wsQ0FDQSxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUN2QixNQUFNLEVBQUUsSUFBSTtRQUNaLFNBQVMsRUFBRSxHQUFHO1FBQ2QsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRTtLQUNySCxDQUFDLENBQUM7SUFFSCxPQUFPLFNBQVMsQ0FBQztBQUVyQixDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/packages/cad/dist/report/index.d.ts b/packages/cad/dist/report/index.d.ts new file mode 100644 index 00000000..7b664b0d --- /dev/null +++ b/packages/cad/dist/report/index.d.ts @@ -0,0 +1 @@ +export { reportCSV } from './csv.js'; diff --git a/packages/cad/dist/report/index.js b/packages/cad/dist/report/index.js new file mode 100644 index 00000000..4ce75c5b --- /dev/null +++ b/packages/cad/dist/report/index.js @@ -0,0 +1,2 @@ +export { reportCSV } from './csv.js'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVwb3J0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUEifQ== \ No newline at end of file diff --git a/packages/cad/dist/slic3r_argv.d.ts b/packages/cad/dist/slic3r_argv.d.ts new file mode 100644 index 00000000..408a1eaf --- /dev/null +++ b/packages/cad/dist/slic3r_argv.d.ts @@ -0,0 +1,5 @@ +import * as CLI from 'yargs'; +import { SolidworkOptions, SlicerOptions } from './types.js'; +export declare const defaultOptions: (yargs: CLI.Argv) => any; +export declare const sanitizeSingle: (argv: CLI.Arguments) => SolidworkOptions; +export declare const sanitize: (argv: any) => SlicerOptions; diff --git a/packages/cad/dist/slic3r_argv.js b/packages/cad/dist/slic3r_argv.js new file mode 100644 index 00000000..0f19bd3f --- /dev/null +++ b/packages/cad/dist/slic3r_argv.js @@ -0,0 +1,182 @@ +import * as path from 'path'; +import { pathInfo, resolve } from "@polymech/commons"; +import { sync as read } from "@polymech/fs/read"; +import { sync as exists } from "@polymech/fs/exists"; +import { substitute, logger } from './index.js'; +export const defaultOptions = (yargs) => { + return yargs.option('src', { + default: './', + describe: 'The source directory or source file. Glob patters are supported!', + demandOption: true + }).option('dst', { + describe: 'Destination folder or file' + }).option('Report', { + describe: 'Optional conversion report. Can be JSON, HTML, CSV or Markdown' + }).option('debug', { + default: false, + describe: 'Enable internal debug messages', + type: 'boolean' + }).option('alt', { + default: false, + describe: 'Use alternate tokenizer, & instead of $', + type: 'boolean' + }).option('skip', { + default: true, + describe: 'Skip existing files', + type: 'boolean' + }).option('dry', { + default: false, + describe: 'Run without conversion', + type: 'boolean' + }).option('verbose', { + default: true, + describe: 'Show internal messages', + type: 'boolean' + }).option('saveArgs', { + describe: 'Save command line options to a file', + type: 'string' + }).option('saveAsProfile', { + describe: 'Save command line options to a json file. To be loaded via --profile=file.json', + type: 'string' + }).option('profile', { + describe: 'Load options from a json file', + type: 'string' + }).option('log', { + describe: 'Save Slic3r output to a file', + type: 'string' + }); +}; +// Sanitizes faulty user argv options for all commands. +export const sanitizeSingle = (argv) => { + const src = path.resolve('' + argv.src); + const config = argv.config ? read(path.resolve('' + argv.config), 'json') : {}; + const extraVariables = {}; + for (const key in config) { + if (Object.prototype.hasOwnProperty.call(config, key)) { + const element = config[key]; + if (typeof element === 'string') { + extraVariables[key] = element; + } + } + } + const args = { + src: src, + dst: '' + argv.dst, + report: argv.report ? path.resolve(argv.report) : null, + debug: argv.debug, + verbose: argv.verbose, + dry: argv.dry, + cache: argv.skip, + alt: argv.alt, + // glob: argv.glob as string, + variables: { ...extraVariables }, + args: argv.args || '' + }; + if (!args.src) { + logger.error('Invalid source, abort'); + return process.exit(); + } + args.srcInfo = pathInfo(argv.src); + if (!args.srcInfo.FILES) { + logger.error(`Invalid source files, abort`); + return process.exit(); + } + for (const key in args.srcInfo) { + if (Object.prototype.hasOwnProperty.call(args.srcInfo, key)) { + args.variables['SRC_' + key] = args.srcInfo[key]; + } + } + if (argv.dst) { + args.dst = path.resolve(args.dst); + args.dstInfo = pathInfo(args.dst); + args.dstInfo.PATH = path.resolve(argv.dst); + for (const key in args.dstInfo) { + if (Object.prototype.hasOwnProperty.call(args.dstInfo, key)) { + args.variables['DST_' + key] = args.dstInfo[key]; + } + } + } + return args; +}; +export const sanitize = (argv) => { + const src = path.resolve('' + argv.src); + const config = argv.config ? read(path.resolve('' + argv.config), 'json') : {}; + const extraVariables = {}; + for (const key in config) { + if (Object.prototype.hasOwnProperty.call(config, key)) { + const element = config[key]; + if (typeof element === 'string') { + extraVariables[key] = element; + } + } + } + let args = { + src: src, + dst: '' + argv.dst, + report: argv.report, + debug: argv.debug, + verbose: argv.verbose, + dry: argv.dry, + onNode: argv.onNode, + cache: argv.skip, + alt: argv.alt, + variables: { + ...extraVariables + }, + ...argv + }; + args.extruderOffset = args.extruderOffset ? args.extruderOffset : { x: 0, y: 0 }; + if (!args.src) { + logger.error('Invalid source, abort'); + return; + } + args.srcInfo = pathInfo(argv.src); + if (!args.srcInfo.FILES) { + logger.error(`Invalid source files, abort`, args.srcInfo); + return process.exit(); + } + for (const key in args.srcInfo) { + if (Object.prototype.hasOwnProperty.call(args.srcInfo, key)) { + args.variables['SRC_' + key] = args.srcInfo[key]; + } + } + if (argv.saveAsProfile) { + args.saveAsProfile = path.resolve(resolve(args.saveAsProfile, args.alt, args.variables)); + } + if (argv.saveArgs) { + args.saveArgs = path.resolve(resolve(args.saveArgs, args.alt, args.variables)); + } + if (argv.report) { + args.report = path.resolve(resolve(args.report, args.alt, args.variables)); + } + if (argv.profile) { + args.profile = path.resolve(resolve(args.profile, args.alt, args.variables)); + } + if (argv.dst) { + args.dst = path.resolve(resolve(args.dst, args.alt, args.variables)); + args.dstInfo = pathInfo(args.dst); + args.dstInfo.PATH = argv.dst; + for (const key in args.dstInfo) { + if (Object.prototype.hasOwnProperty.call(args.dstInfo, key)) { + args.variables['DST_' + key] = args.dstInfo[key]; + } + } + } + if (argv.profile) { + args.profile = path.resolve(resolve(args.profile, args.alt, args.variables)); + if (exists(args.profile)) { + const profile = read(args.profile, 'json'); + if (profile) { + args = { + ...args, + ...profile + }; + } + } + } + if (argv.log) { + args.log = path.resolve(substitute(args.log, args.alt, args.variables)); + } + return args; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpYzNyX2FyZ3YuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2xpYzNyX2FyZ3YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFPNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFL0MsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUU7SUFDOUMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUN2QixPQUFPLEVBQUUsSUFBSTtRQUNiLFFBQVEsRUFBRSxrRUFBa0U7UUFDNUUsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsNEJBQTRCO0tBQ3pDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ2hCLFFBQVEsRUFBRSxnRUFBZ0U7S0FDN0UsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDZixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxnQ0FBZ0M7UUFDMUMsSUFBSSxFQUFFLFNBQVM7S0FDbEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSx5Q0FBeUM7UUFDbkQsSUFBSSxFQUFFLFNBQVM7S0FDbEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDZCxPQUFPLEVBQUUsSUFBSTtRQUNiLFFBQVEsRUFBRSxx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 \ No newline at end of file diff --git a/packages/cad/dist/sw_argv.d.ts b/packages/cad/dist/sw_argv.d.ts new file mode 100644 index 00000000..050fcdab --- /dev/null +++ b/packages/cad/dist/sw_argv.d.ts @@ -0,0 +1,5 @@ +import * as CLI from 'yargs'; +import { SolidworkOptions } from './index.js'; +export declare const defaultOptions: (yargs: CLI.Argv) => any; +export declare const sanitizeSingle: (argv: CLI.Arguments) => SolidworkOptions; +export declare const sanitize: (argv: any) => SolidworkOptions; diff --git a/packages/cad/dist/sw_argv.js b/packages/cad/dist/sw_argv.js new file mode 100644 index 00000000..04beab46 --- /dev/null +++ b/packages/cad/dist/sw_argv.js @@ -0,0 +1,249 @@ +import * as path from 'path'; +import { substitute } from "@polymech/core/strings"; +import { resolve, forward_slash, pathInfo } from "@polymech/commons"; +import { sync as read } from "@polymech/fs/read"; +import { logger } from './index.js'; +import { DEFAULT_REPORT } from './constants.js'; +export const defaultOptions = (yargs) => { + return yargs.option('src', { + default: './', + describe: 'The source directory or source file. Glob patters are supported!', + demandOption: true + }).option('format', { + describe: 'The target format. Multiple formats are allowed as well, use --format=pdf --format=jpg' + }).option('dst', { + describe: 'Destination folder or file' + }).option('view', { + default: 'Render', + describe: 'Sets the target view' + }).option('Report', { + describe: 'Optional conversion report. Can be JSON, HTML, CSV or Markdown' + }).option('debug', { + default: false, + describe: 'Enable internal debug messages', + type: 'boolean' + }).option('alt', { + default: false, + describe: 'Use alternate tokenizer, & instead of $', + type: 'boolean' + }).option('report', { + default: DEFAULT_REPORT, + describe: '', + type: 'string' + }).option('configuration', { + default: 'Default', + describe: 'Set the Model Configuration to be used', + type: 'string', + alias: 'c' + }).option('cache', { + default: false, + describe: 'Enable caching', + type: 'boolean' + }).option('hidden', { + describe: 'Hide Solidworks window', + type: 'string' + }).option('dry', { + default: false, + describe: 'Run without conversion', + type: 'boolean' + }).option('verbose', { + default: true, + describe: 'Show internal messages', + type: 'boolean' + }).option('quality', { + default: 2, + describe: 'Raytrace quality', + type: 'number' + }).option('renderer', { + default: 'Solidworks', + describe: 'Renderer to be used: Solidworks or Photoview', + type: 'string', + }).option('sw', { + describe: 'Set explicit the path to the Solidworks binaries & scripts.\ + Otherwise, set it to 2020, 2022 or 2023 to use the built-in binaries', + default: 2024, + type: 'number' + }).option('swv', { + describe: 'Internal Solidworks Version. Use \'30\' for 2022', + default: 32, + type: 'number' + }).option('pack', { + describe: 'Pack and Go an Assembly. The destination must be a folder', + default: false, + type: 'boolean' + }).option('rebuild', { + describe: 'Rebuild the assembly', + default: false, + type: 'boolean' + }).option('save', { + describe: 'Save the assembly or part', + default: false, + type: 'boolean' + }).option('light', { + describe: 'Open assembly in light mode', + default: false, + type: 'boolean' + }).option('script', { + describe: 'Set explicit the path to the Solidworks script', + default: 'convert.exe' + }).option('bom-config', { + describe: 'Set the Model Configuration to be used', + default: 'Default' + }).option('bom-template', { + describe: 'Path to the BOM template. Default is osr-cad/sw/bom-all.sldbomtbt' + }).option('bom-type', { + describe: 'Bom Type : default = 2 - PartsOnly = 1 | TopLevelOnly = 2 | Indented = 3', + type: "number", + default: 2 + }).option('bom-detail', { + describe: 'Bom Numbering : default = 1 - Type_None = 0 | Type_Detailed = 1 | Type_Flat = 2 | BOMNotSet = 3', + type: "number", + default: 1 + }).option('bom-images', { + describe: 'Add an image in the first colum', + type: 'boolean', + default: false + }); +}; +export const sanitizeSingle = (argv) => { + const src = forward_slash(path.resolve(resolve(argv.src))); + const config = argv.config ? read(path.resolve('' + argv.config), 'json') : {}; + const extraVariables = {}; + for (const key in config) { + if (Object.prototype.hasOwnProperty.call(config, key)) { + const element = config[key]; + if (typeof element === 'string') { + extraVariables[key] = element; + } + } + } + const args = { + src: src, + dst: '' + argv.dst, + debug: argv.debug, + verbose: argv.verbose, + dry: argv.dry, + cache: argv.cache, + alt: argv.alt, + quality: argv.quality, + clear: argv.clear, + renderer: argv.renderer || "solidworks", + close: argv.close, + width: argv.width || "1024", + height: argv.height || "1024", + hidden: argv.hidden || "true", + configuration: argv.configuration || 'Default', + script: argv.script || 'convert.exe', + sw: argv.sw || 2024, + swv: argv.swv || 32, + view: argv.view || '*Render', + pack: argv.pack, + light: argv.light, + rebuild: argv.rebuild, + save: argv.save, + write: argv.write, + variables: { ...extraVariables }, + report: argv.report || DEFAULT_REPORT, + args: argv.args || '' + }; + if (!args.src) { + logger.error('Invalid source, abort'); + return process.exit(); + } + args.srcInfo = pathInfo(argv.src); + if (!args.srcInfo.FILES) { + logger.error(`Invalid source files, abort`); + return process.exit(); + } + for (const key in args.srcInfo) { + if (Object.prototype.hasOwnProperty.call(args.srcInfo, key)) { + args.variables['SRC_' + key] = args.srcInfo[key]; + } + } + if (argv.dst) { + args.dst = path.resolve(args.dst); + args.dstInfo = pathInfo(args.dst); + args.dstInfo.PATH = path.resolve(argv.dst); + for (const key in args.dstInfo) { + if (Object.prototype.hasOwnProperty.call(args.dstInfo, key)) { + args.variables['DST_' + key] = args.dstInfo[key]; + } + } + } + return args; +}; +export const sanitize = (argv) => { + const src = forward_slash(path.resolve(resolve(argv.src))); + const config = argv.config ? read(path.resolve('' + argv.config), 'json') : {}; + const extraVariables = {}; + for (const key in config) { + if (Object.prototype.hasOwnProperty.call(config, key)) { + const element = config[key]; + if (typeof element === 'string') { + extraVariables[key] = element; + } + } + } + const args = { + src: src, + dst: '' + argv.dst, + debug: argv.debug, + verbose: argv.verbose, + dry: argv.dry, + onNode: argv.onNode, + cache: argv.cache, + hidden: argv.hidden || "true", + renderer: argv.renderer || "solidworks", + alt: argv.alt, + quality: argv.quality, + logLevel: argv.logLevel, + close: argv.close, + width: argv.width || "1024", + height: argv.height || "1024", + script: argv.script || 'convert.exe', + sw: argv.sw || 2024, + swv: argv.swv || 32, + configuration: argv.configuration || 'Default', + report: argv.report || DEFAULT_REPORT, + pack: argv.pack, + light: argv.light, + rebuild: argv.rebuild, + save: argv.save, + write: argv.write, + variables: { ...extraVariables }, + view: argv.view || 'Render', + args: argv.args || '', + "bom-config": argv['bom-config'], + "bom-detail": argv['bom-detail'], + "bom-template": argv['bom-template'], + "bom-type": argv['bom-type'], + "bom-images": argv['bom-images'], + }; + if (!args.src) { + logger.error('Invalid source, abort'); + return process.exit(); + } + args.srcInfo = pathInfo(src); + if (!args.srcInfo.FILES) { + logger.error(`Invalid source files, abort`, args.srcInfo); + return process.exit(); + } + for (const key in args.srcInfo) { + if (Object.prototype.hasOwnProperty.call(args.srcInfo, key)) { + args.variables['SRC_' + key] = args.srcInfo[key]; + } + } + if (argv.dst) { + args.dst = path.resolve(substitute(args.dst, args.variables)); + args.dstInfo = pathInfo(args.dst); + args.dstInfo.PATH = argv.dst; + for (const key in args.dstInfo) { + if (Object.prototype.hasOwnProperty.call(args.dstInfo, key)) { + args.variables['DST_' + key] = args.dstInfo[key]; + } + } + } + args.view = argv.view || "Render"; + return args; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dfYXJndi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zd19hcmd2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBRTVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFO0lBQzlDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDdkIsT0FBTyxFQUFFLElBQUk7UUFDYixRQUFRLEVBQUUsa0VBQWtFO1FBQzVFLFlBQVksRUFBRSxJQUFJO0tBQ3JCLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ2hCLFFBQVEsRUFBRSx3RkFBd0Y7S0FDckcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsNEJBQTRCO0tBQ3pDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ2QsT0FBTyxFQUFFLFFBQVE7UUFDakIsUUFBUSxFQUFFLHNCQUFzQjtLQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUNoQixRQUFRLEVBQUUsZ0VBQWdFO0tBQzdFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENB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 \ No newline at end of file diff --git a/packages/cad/dist/types.d.ts b/packages/cad/dist/types.d.ts new file mode 100644 index 00000000..6caa6fa6 --- /dev/null +++ b/packages/cad/dist/types.d.ts @@ -0,0 +1,213 @@ +import { PATH_INFO } from "@polymech/commons"; +export interface IOptionsCache { + cache?: boolean; + clear?: boolean; +} +export interface IOptionsBase extends IOptionsCache { + src: string; + srcInfo?: PATH_INFO; + dstInfo?: PATH_INFO; + dst?: string; + alt?: boolean; + debug?: boolean; + verbose?: boolean; + dry?: boolean; + report?: string; + variables: Record; + script?: string; + args?: string; + onNode: (data: INodeCallback) => Promise; +} +export interface INodeCallback { + src: string; + target: string; + options: IOptionsBase; +} +export interface IBomOptions { + 'bom-template'?: string; + 'bom-detail'?: number; + 'bom-type'?: number; + 'bom-images'?: boolean; + 'bom-config'?: string; +} +export interface SolidworkOptions extends IOptionsBase, IBomOptions { + close?: boolean; + configuration?: string; + height?: number; + hidden?: string; + light?: boolean; + logLevel?: string; + pack?: boolean; + quality?: number; + rebuild?: boolean; + renderer?: string; + save?: boolean; + sw?: string; + swv?: number; + view?: string; + width?: number; + write?: boolean; +} +export interface IPrintCenter { + x: number; + y: number; +} +export type EGCodeFlavor = 'reprap' | 'marlin' | 'teacup' | 'makerware' | 'sailfish' | 'mach3' | 'noextrusion'; +export interface IBedSize { + width: number; + height: number; +} +export interface IExtruderOffset { + x: number; + y: number; +} +export type TOutputResult = boolean; +export interface ISlic3rCLIOptions { + avoidCrossingPerimeters?: boolean; + bedSize?: IBedSize; + bedTemperature?: number; + bottomSolidLayers?: number; + bridgeAcceleration?: number; + bridgeFanSpeed?: number; + bridgeFlowRatio?: number; + bridgeSpeed?: number; + brimWidth?: number; + completeObjects?: boolean; + cooling?: boolean; + cut?: number; + defaultAcceleration?: number; + disableFanFirstLayers?: number; + dontSupportBridges?: boolean; + duplicate?: number; + duplicateDistance?: number; + duplicateGrid?: string; + endGCode?: boolean; + endGcode?: boolean; + exportSvg?: boolean; + externalPerimeterExtrusionWidth?: number | string; + externalPerimetersFirst?: boolean; + externalPerimeterSpeed?: number; + extraPerimeters?: boolean; + extruderClearanceHeight?: number; + extruderClearanceRadius?: number; + extruderOffset?: IExtruderOffset; + extrusionMultiplier?: number; + extrusionWidth?: number | string; + fanAlwaysOn?: boolean; + fanBelowLayerTime?: number; + filamentDiameter?: number; + fillAngle?: number; + fillDensity?: number; + fillPattern?: string; + firstLayerAcceleration?: number; + firstLayerBedTemperature?: number; + firstLayerExtrusionWidth?: number | string; + firstLayerHeight?: number; + firstLayerSpeed?: number; + firstLayerTemperature?: number; + g0?: boolean; + gapFillSpeed?: number; + GCodeArcs?: boolean; + GCodeComments?: boolean; + GCodeFlavor?: EGCodeFlavor; + infillAcceleration?: number; + infillEveryLayers?: number; + infillExtruder?: number; + infillExtrusionWidth?: number | string; + infillFirst?: boolean; + infillOnlyWhereNeeded?: boolean; + infillSpeed?: number; + info?: boolean; + inputFile?: string; + layerGCode?: boolean; + layerGcode?: boolean; + layerHeight?: number; + load?: string; + log?: string; + maxFanSpeed?: number; + merge?: boolean; + minFanSpeed?: number; + minPrintSpeed?: number; + minSkirtLength?: number; + notes?: string; + nozzleDiameter?: number; + onlyRetractWhenCrossingPerimeters?: boolean; + oozePrevention?: boolean; + outputDirectory?: string; + outputFile?: string; + outputFilenameFormat?: string; + overhangs?: boolean; + perimeterAcceleration?: number; + perimeterExtruder?: number; + perimeterExtrusionWidth?: number | string; + perimeters?: number; + perimeterSpeed?: number; + postProcess?: string[]; + postProcessScripts?: string[]; + pressureAdvance?: number; + printCenter?: IPrintCenter; + profile?: string; + raftLayers?: number; + repair?: boolean; + resolution?: number; + retractBeforeTravel?: number; + retractLayerChange?: boolean; + retractLength?: number; + retractLengthToolchange?: number; + retractLift?: number; + retractRestartExtra?: number; + retractRestartExtraToolchange?: number; + retractSpeed?: number; + rotate?: number; + save?: string; + saveArgs?: string; + saveAsProfile?: string; + scale?: number; + seamPosition?: 'random' | 'nearest' | 'aligned'; + skirtDistance?: number; + skirtHeight?: number; + skirts?: number; + slowdownBelowLayerTime?: number; + smallPerimeterSpeed?: number; + solidFillPattern?: string; + solidInfillBelowArea?: number; + solidInfillEveryLayers?: number; + solidInfillExtruder?: number; + solidInfillExtrusionWidth?: number | string; + solidInfillSpeed?: number; + solidLayers?: boolean; + spiralVase?: boolean; + split?: boolean; + standbyTemperatureDelta?: number; + startGCode?: boolean; + startGcode?: boolean; + supportMaterial?: boolean; + supportMaterialAngle?: number; + supportMaterialEnforceLayers?: number; + supportMaterialExtruder?: number; + supportMaterialExtrusionWidth?: number | string; + supportMaterialInterfaceExtruder?: number; + supportMaterialInterfaceLayers?: number; + supportMaterialInterfaceSpacing?: number; + supportMaterialInterfaceSpeed?: number; + supportMaterialPattern?: string; + supportMaterialSpacing?: number; + supportMaterialSpeed?: number; + supportMaterialThreshold?: number; + temperature?: number; + thinWalls?: boolean; + threads?: number; + toolchangeGCode?: boolean; + toolchangeGcode?: boolean; + topInfillExtrusionWidth?: number | string; + topSolidInfillSpeed?: number; + topSolidLayers?: number; + travelSpeed?: number; + useFirmwareRetraction?: boolean; + useRelativeEDistances?: boolean; + useVolumetricE?: boolean; + vibrationLimit?: number; + wipe?: boolean; + zOffset?: number; +} +export type SlicerOptions = IOptionsBase & ISlic3rCLIOptions; diff --git a/packages/cad/dist/types.js b/packages/cad/dist/types.js new file mode 100644 index 00000000..a0dabde2 --- /dev/null +++ b/packages/cad/dist/types.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9 \ No newline at end of file diff --git a/packages/cad/package.json b/packages/cad/package.json index e37ce0a2..15bf5974 100644 --- a/packages/cad/package.json +++ b/packages/cad/package.json @@ -1,6 +1,7 @@ { "name": "@polymech/cad", "version": "0.8.8", + "type": "module", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "help": "node build/main.js --help", @@ -36,8 +37,7 @@ "@polymech/commons": "link:..\\commons", "@polymech/core": "link:..\\core", "@polymech/fs": "link:..\\fs", - "@types/node": "^20.17.9", - "@types/yargs": "^17.0.11", + "@polymech/log": "link:..\\log", "add": "^2.0.6", "csv-stringify": "^5.6.1", "dxf-parser": "^1.1.2", @@ -49,12 +49,14 @@ "parse-glob": "^2.0.1", "regexp.escape": "^1.1.0", "tslint": "^5.10.0", + "tslog": "^3.3.3", "which": "^2.0.2", "yargs": "^17.7.2" }, "devDependencies": { - "typescript": "^5.7.3", "@types/js-yaml": "^4.0.9", - "@types/which": "^1.3.2" + "@types/node": "^22.13.1", + "@types/which": "^1.3.2", + "typescript": "^5.7.3" } } diff --git a/packages/cad/src/cad/index.ts b/packages/cad/src/cad/index.ts index 73ee4b43..5769c2a7 100644 --- a/packages/cad/src/cad/index.ts +++ b/packages/cad/src/cad/index.ts @@ -1 +1 @@ -export { convert, pack } from './sw-lib' +export { convert, pack } from './sw-lib.js' diff --git a/packages/cad/src/cad/sw-convert.ts b/packages/cad/src/cad/sw-convert.ts index 42a9aef2..0a3b3a67 100644 --- a/packages/cad/src/cad/sw-convert.ts +++ b/packages/cad/src/cad/sw-convert.ts @@ -1,33 +1,31 @@ -import * as fs from 'fs' import * as path from 'path' -import * as pMap from 'p-map' +import pMap from 'p-map' import { sync as which } from 'which' -import { resolve, OSR_CACHE } from '@plastichub/osr-commons' -import { equalFiles, swProcMessage } from './sw-util' -import { reportCSV } from '../report' -import { logger, substitute } from '..' -import { removeEmpty } from '../lib/' -import { SolidworkOptions } from '../types' -import { Helper } from '../lib/process/index' +import { resolve, OSR_CACHE } from '@polymech/commons' +import { equalFiles, swProcMessage } from './sw-util.js' +import { reportCSV } from '../report/csv.js' +import { logger, substitute } from '../index.js' +import { removeEmpty } from '../lib/index.js' +import { SolidworkOptions } from '../types.js' +import { Helper } from '../lib/process/index.js' -import { sync as exists } from "@plastichub/fs/exists" -import { sync as read } from "@plastichub/fs/read" -import { sync as write } from "@plastichub/fs/write" -import { sync as dir } from "@plastichub/fs/dir" -import { sync as rm } from "@plastichub/fs/remove" -import { clone } from "@plastichub/core/objects" +import { sync as exists } from "@polymech/fs/exists" +import { sync as read } from "@polymech/fs/read" +import { sync as write } from "@polymech/fs/write" +import { sync as dir } from "@polymech/fs/dir" -import { swRayTraceRenderQuality_e, IAssembly, IAssemblyData } from './sw-types' +import { sync as rm } from "@polymech/fs/remove" +import { deepClone as clone } from "@polymech/core/objects" -import { get_cached, get_path_cached, get_cache_key, set_cached } from '@plastichub/osr-cache/lib' +import { swRayTraceRenderQuality_e, IAssembly, IAssemblyData } from './sw-types.js' +import { get_cached, get_path_cached, get_cache_key, set_cached } from '@polymech/cache' import { - BUF_SIZE_CMP, MODULE_NAME, MSG_FAILED_TO_LOAD -} from '../constants' +} from '../constants.js' -import { closeAppByName, fileAsBuffer, getSWBin, removeEmptyValues } from './sw-util' +import { closeAppByName, fileAsBuffer, getSWBin, removeEmptyValues } from './sw-util.js' export const convertFile = async ( src, @@ -239,7 +237,7 @@ export const convertFile = async ( } export async function convertFiles(file, targets: string[], view, onNode: (data: any) => void = () => { }, options: SolidworkOptions) { if (options.dry) { - logger.info(`Dry run convert ${file} to `, targets.map((t)=>{`\n\t${t}`}).join(',\n')) + logger.info(`Dry run convert ${file} to `, targets.map((t) => { `\n\t${t}` }).join(',\n')) return Promise.resolve() } return pMap(targets, (target: any) => { @@ -290,7 +288,7 @@ export const targets = (f: string, options: SolidworkOptions) => { variables.SRC_NAME = srcParts.name variables.SRC_DIR = srcParts.dir variables.CONFIGURATION = conf - let targetPath = substitute(options.alt, options.variables.DST_PATH, variables) + let targetPath = substitute(options.variables.DST_PATH, options.alt, variables) targetPath = path.resolve(targetPath.replace(options.variables.DST_FILE_EXT, '') + e) const parts = path.parse(targetPath) if (srcParts.ext === parts.ext) { @@ -315,7 +313,7 @@ export const targets = (f: string, options: SolidworkOptions) => { variables.SRC_NAME = srcParts.name variables.SRC_DIR = srcParts.dir variables.CONFIGURATION = conf - let targetPath = substitute(options.alt, options.variables.DST_PATH, variables) + let targetPath = substitute(options.variables.DST_PATH, options.alt, variables) if (!exists(targetPath)) { try { dir(targetPath) diff --git a/packages/cad/src/cad/sw-lib.ts b/packages/cad/src/cad/sw-lib.ts index 8946520b..ca4281b3 100644 --- a/packages/cad/src/cad/sw-lib.ts +++ b/packages/cad/src/cad/sw-lib.ts @@ -1,23 +1,4 @@ -import * as fs from 'fs' -import * as path from 'path' -import * as pMap from 'p-map' -import { sync as which } from 'which' -import { execSync } from 'child_process' - -import { reportCSV } from '../report' -import { logger, substitute } from '..' -import { removeEmpty } from '../lib/' -import { SolidworkOptions } from '../types' -import { Helper } from '../lib/process/index' - -import { sync as exists } from "@plastichub/fs/exists" -import { sync as read } from "@plastichub/fs/read" -import { sync as write } from "@plastichub/fs/write" -import { sync as dir } from "@plastichub/fs/dir" -import { sync as rm } from "@plastichub/fs/remove" -import { clone } from "@plastichub/core/objects" - -export * from './sw-convert' -export * from './sw-util' -export * from './sw-pack' +export * from './sw-convert.js' +export * from './sw-util.js' +export * from './sw-pack.js' diff --git a/packages/cad/src/cad/sw-pack.ts b/packages/cad/src/cad/sw-pack.ts index 742e9c60..00d612f6 100644 --- a/packages/cad/src/cad/sw-pack.ts +++ b/packages/cad/src/cad/sw-pack.ts @@ -1,14 +1,10 @@ import * as path from 'path' -import * as pMap from 'p-map' - -import { logger } from '..' -import { SolidworkOptions } from '../types' -import { Helper } from '../lib/process/index' - -import { sync as exists } from "@plastichub/fs/exists" - - -import { getSWBin } from './sw-util' +import pMap from 'p-map' +import { logger } from '../index.js' +import { SolidworkOptions } from '../types.js' +import { Helper } from '../lib/process/index.js' +import { sync as exists } from "@polymech/fs/exists" +import { getSWBin } from './sw-util.js' export async function packFile(file, onNode: (data: any) => void = () => { }, options: SolidworkOptions) { if (options.dry) { diff --git a/packages/cad/src/cad/sw-util.ts b/packages/cad/src/cad/sw-util.ts index 8c6c3901..d45c6c8c 100644 --- a/packages/cad/src/cad/sw-util.ts +++ b/packages/cad/src/cad/sw-util.ts @@ -1,10 +1,9 @@ import * as fs from 'fs' import * as path from 'path' import { execSync } from 'child_process' -import { sync as exists } from "@plastichub/fs/exists" -import { sync as read } from "@plastichub/fs/read" - -import { BUF_SIZE_CMP } from '../constants' +import { sync as exists } from "@polymech/fs/exists" +import { sync as read } from "@polymech/fs/read" +import { BUF_SIZE_CMP } from '../constants.js' export const swProcMessage = (log: string):{ logLevel: string, message: string } | null => { const regex = /<<(\w+)::(.*?)>>/ diff --git a/packages/cad/src/commands/info.ts b/packages/cad/src/commands/info.ts index 1008e81e..5c6885dd 100644 --- a/packages/cad/src/commands/info.ts +++ b/packages/cad/src/commands/info.ts @@ -1,7 +1,7 @@ import * as CLI from 'yargs' -import { CONFIG_DEFAULT, DEFAULT_ROOTS } from '@plastichub/osr-commons'; -import { logger } from '../' +import { CONFIG_DEFAULT, DEFAULT_ROOTS } from '@polymech/commons'; +import { logger } from '../index.js' const defaultOptions = (yargs: CLI.Argv) => { return yargs.option('debug', { diff --git a/packages/cad/src/commands/pack.ts b/packages/cad/src/commands/pack.ts index 7aa6023c..107be088 100644 --- a/packages/cad/src/commands/pack.ts +++ b/packages/cad/src/commands/pack.ts @@ -1,8 +1,8 @@ import * as CLI from 'yargs' -import { logger } from '../' -import { SolidworkOptions } from '../types' -import { sanitizeSingle } from '../sw_argv' -import { pack } from '../cad/index' +import { logger } from '../index.js' +import { SolidworkOptions } from '../types.js' +import { sanitizeSingle } from '../sw_argv.js' +import { pack } from '../cad/index.js' export const defaultOptions = (yargs: CLI.Argv) => { return yargs.option('src', { diff --git a/packages/cad/src/commands/slice.ts b/packages/cad/src/commands/slice.ts index dc18dae6..9cbd18bd 100644 --- a/packages/cad/src/commands/slice.ts +++ b/packages/cad/src/commands/slice.ts @@ -1,14 +1,12 @@ import * as CLI from 'yargs' import * as path from 'path' -import { logger } from '..' -import { SlicerOptions } from '../types' -import { defaultOptions, sanitize } from '../slic3r_argv' -import { convert } from '../print' +import { logger } from '../index.js' +import { SlicerOptions } from '../types.js' +import { defaultOptions, sanitize } from '../slic3r_argv.js' +import { convert } from '../print/index.js' import { load } from 'js-yaml' - -import { clone } from "@plastichub/core/objects" - -import { sync as read } from "@plastichub/fs/read" +import { deepClone as clone } from "@polymech/core/objects" +import { sync as read } from "@polymech/fs/read" const SLIC3R_DEFAULTS = () => path.resolve(path.join(__dirname, '../profiles/slic3r_defaults.yaml')) diff --git a/packages/cad/src/commands/sw-pack.ts b/packages/cad/src/commands/sw-pack.ts index c5abcb5d..da987188 100644 --- a/packages/cad/src/commands/sw-pack.ts +++ b/packages/cad/src/commands/sw-pack.ts @@ -1,8 +1,8 @@ import * as CLI from 'yargs' -import { logger } from '..' -import { SolidworkOptions } from '../types' -import { defaultOptions, sanitize } from '../sw_argv' -import { convert } from '../cad/index' +import { logger } from '../index.js' +import { SolidworkOptions } from '../types.js' +import { defaultOptions, sanitize } from '../sw_argv.js' +import { convert } from '../cad/index.js' let options = (yargs: CLI.Argv) => defaultOptions(yargs) diff --git a/packages/cad/src/commands/sw.ts b/packages/cad/src/commands/sw.ts index ae4a365c..96b4e857 100644 --- a/packages/cad/src/commands/sw.ts +++ b/packages/cad/src/commands/sw.ts @@ -1,8 +1,8 @@ import * as CLI from 'yargs' -import { logger } from '..' -import { SolidworkOptions } from '../types' -import { defaultOptions, sanitize } from '../sw_argv' -import { convert } from '../cad' +import { logger } from '../index.js' +import { SolidworkOptions } from '../types.js' +import { defaultOptions, sanitize } from '../sw_argv.js' +import { convert } from '../cad/sw-convert.js' let options = (yargs: CLI.Argv) => defaultOptions(yargs) diff --git a/packages/cad/src/constants.ts b/packages/cad/src/constants.ts index 02f60886..fc8ef4db 100644 --- a/packages/cad/src/constants.ts +++ b/packages/cad/src/constants.ts @@ -1,7 +1,7 @@ export const GIT_CHANGELOG_MESSAGE_PREFIX = 'ChangeLog:' -export const GIT_REPO = 'https://git.osr-plastic.org/osr-plastic/' -export const MODULE_NAME = `OSR-CAD` -export const PACKAGE_NAME = 'osr-cad' +export const GIT_REPO = 'https://git.polymech.io/osr-plastic/' +export const MODULE_NAME = `POLYMECH-CAD` +export const PACKAGE_NAME = 'polymech-cad' export const DEFAULT_REPORT = '${SRC_DIR}/cad-report-${CONFIGURATION}.json' export const BUF_SIZE_CMP = 16 * 1024 export const MSG_FAILED_TO_LOAD = 'Failed to load' diff --git a/packages/cad/src/index.ts b/packages/cad/src/index.ts index f4004153..cda2cbc0 100644 --- a/packages/cad/src/index.ts +++ b/packages/cad/src/index.ts @@ -1,14 +1,27 @@ -export * from './log' -export * from './types' -export * from './cad/sw-lib' -export * from './_cli' -export * from './sw_argv' -export * from './lib/geometry/dxf' +import { resolve } from "@polymech/commons/variables" -import { logger as _logger } from '@plastichub/core/debug' -import { MODULE_NAME } from './constants' +export * from './types.js' +export * from './cad/sw-lib.js' +export * from './_cli.js' +export * from './sw_argv.js' +export * from './lib/geometry/dxf.js' -export const logger = _logger(MODULE_NAME) -import { substitute as _substitute , substituteAlt as _substituteAlt } from "@plastichub/core/strings" -import { IObjectLiteral } from "@plastichub/core" -export const substitute = (alt:boolean, template:string, vars:IObjectLiteral) => alt ? _substituteAlt(template,vars) : _substitute(template, vars) +import { Logger } from "tslog" + +export function createLogger(name: string, options?: any) { + return new Logger({ + name, + type: 'pretty', + ...options, + }) +} +export const defaultLogger = createLogger('DefaultLogger', { + minLevel: 1 +}) + +import { MODULE_NAME } from './constants.js' +export { MODULE_NAME } from './constants.js' + +export const logger = createLogger(MODULE_NAME, {}) + +export const substitute = resolve diff --git a/packages/cad/src/lib/geometry/dxf.ts b/packages/cad/src/lib/geometry/dxf.ts index d27a4272..255e7cbe 100644 --- a/packages/cad/src/lib/geometry/dxf.ts +++ b/packages/cad/src/lib/geometry/dxf.ts @@ -1,7 +1,7 @@ import * as fs from 'fs'; const dxf = require('dxf-parser') -import { sync as read } from '@plastichub/fs/read' -import { sync as write } from '@plastichub/fs/write' +import { sync as read } from '@polymech/fs/read' +import { sync as write } from '@polymech/fs/write' interface DxfEntity { type: string; diff --git a/packages/cad/src/lib/process/index.ts b/packages/cad/src/lib/process/index.ts index 2a4950e7..090768cd 100644 --- a/packages/cad/src/lib/process/index.ts +++ b/packages/cad/src/lib/process/index.ts @@ -1,4 +1,4 @@ -import { logger } from '../../index' +import { logger } from '../../index.js' import * as stream from 'stream'; import { ChildProcess, exec } from 'child_process'; diff --git a/packages/cad/src/log.ts b/packages/cad/src/log.ts deleted file mode 100644 index 277c88ae..00000000 --- a/packages/cad/src/log.ts +++ /dev/null @@ -1 +0,0 @@ -export const noop = () => {} \ No newline at end of file diff --git a/packages/cad/src/main.ts b/packages/cad/src/main.ts index 126218ee..be988237 100644 --- a/packages/cad/src/main.ts +++ b/packages/cad/src/main.ts @@ -1,12 +1,12 @@ #!/usr/bin/env node -import { defaults } from './_cli'; defaults() +import { defaults } from './_cli.js'; defaults() import * as cli from 'yargs' -import { register as registerSW } from './commands/sw'; registerSW(cli as any) -import { register as registerSlic3r } from './commands/slice'; registerSlic3r(cli as any) -import { register as registerPack } from './commands/pack'; registerPack(cli as any) -import { register as registerInfo } from './commands/info'; registerInfo(cli as any) +import { register as registerSW } from './commands/sw.js'; registerSW(cli as any) +//import { register as registerSlic3r } from './commands/slice.js'; registerSlic3r(cli as any) +//import { register as registerPack } from './commands/pack.js'; registerPack(cli as any) +//import { register as registerInfo } from './commands/info.js'; registerInfo(cli as any) const argv: any = cli.argv diff --git a/packages/cad/src/print/index.ts b/packages/cad/src/print/index.ts index a3c722e7..862ed1e3 100644 --- a/packages/cad/src/print/index.ts +++ b/packages/cad/src/print/index.ts @@ -1 +1 @@ -export { convert } from './slic3r' +export { convert } from './slic3r.js' diff --git a/packages/cad/src/print/slic3r.ts b/packages/cad/src/print/slic3r.ts index 726cdea6..3c29fd14 100644 --- a/packages/cad/src/print/slic3r.ts +++ b/packages/cad/src/print/slic3r.ts @@ -1,28 +1,28 @@ import * as path from 'path' -import { logger, substitute } from '..' -import { removeEmpty } from '../lib' -import { OSR_CACHE } from '@plastichub/osr-commons' -import { sync as exists } from "@plastichub/fs/exists" -import { sync as read } from "@plastichub/fs/read" -import { sync as write } from "@plastichub/fs/write" -import { sync as dir } from "@plastichub/fs/dir" -import { Promise as BPromise } from 'bluebird' +import { logger, substitute } from '../index.js' +import { removeEmpty } from '../lib/index.js' +import { OSR_CACHE } from '@polymech/commons' +import { sync as exists } from "@polymech/fs/exists" +import { sync as read } from "@polymech/fs/read" +import { sync as write } from "@polymech/fs/write" +import { sync as dir } from "@polymech/fs/dir" import { sync as which } from 'which' import * as md5 from 'md5' +import pMap from 'p-map' -import { SlicerOptions } from '../types' -import { Helper } from '../lib/process/index' +import { SlicerOptions } from '../types.js' +import { Helper } from '../lib/process/index.js' -import { reportCSV } from '../report' +import { reportCSV } from '../report/csv.js' import { get_cached, set_cached -} from '@plastichub/osr-cache/lib' +} from '@polymech/cache' import { MODULE_NAME -} from '../constants' +} from '../constants.js' export const fileAsBuffer = (path: string) => read(path, 'buffer') as Buffer || Buffer.from("-") @@ -326,11 +326,10 @@ export const convertFile = async (file, target, onNode: (data: any) => void = () } export async function convertFiles(file, targets: string[], onNode: (data: any) => void = () => { }, options: SlicerOptions) { - if (options.dry) { return Promise.resolve() } - return BPromise.resolve(targets).map((target) => { + return pMap(targets,(target) => { return convertFile(file, target, onNode, options) }, { concurrency: 1 }); @@ -339,14 +338,9 @@ export async function convertFiles(file, targets: string[], onNode: (data: any) export const report = (data, dst: string) => { let report: any = null; - if (dst.endsWith('.md')) { - //report = reportMarkdown(data); - } - if (dst.endsWith('.csv')) { report = reportCSV(data); } - if (report) { logger.info(`Write report to ${dst}`); write(dst, report); @@ -362,7 +356,7 @@ export const targets = (f: string, options: SlicerOptions) => { options.dstInfo.GLOB_EXTENSIONS.forEach((e) => { variables.SRC_NAME = srcParts.name variables.SRC_DIR = srcParts.dir - let targetPath = substitute(options.alt, options.variables.DST_PATH, variables) + let targetPath = substitute(options.variables.DST_PATH,options.alt, variables) targetPath = path.resolve(targetPath.replace(options.variables.DST_FILE_EXT, '') + e) const parts = path.parse(targetPath) if (!exists(parts.dir)) { @@ -388,14 +382,14 @@ export async function convert(options: SlicerOptions) { const onNode = options.onNode || ((data) => reports.push(data)) options.verbose && logger.info(`Convert ${options.srcInfo.FILES.length} files `) - await BPromise.resolve(options.srcInfo.FILES).map((f) => { + await pMap(options.srcInfo.FILES,(f) => { const outputs = targets(f, options) options.verbose && logger.info(`Convert ${f} to `, outputs) return convertFiles(f, outputs, onNode, options) }, { concurrency: 1 }) if (options.report) { - const reportOutFile: string = substitute(false, options.report, { + const reportOutFile: string = substitute(options.report,false,{ dst: options.srcInfo.DIR }) options.verbose && logger.info(`Write report to ${reportOutFile}`); diff --git a/packages/cad/src/renderer/puppeteer/Scope.ts b/packages/cad/src/renderer/puppeteer/Scope.ts deleted file mode 100644 index 3852e95a..00000000 --- a/packages/cad/src/renderer/puppeteer/Scope.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { Browser, launch, Page, Response } from 'puppeteer'; -import { inspect, error, debug } from '../../log'; -import { capture_requests, capture_responses } from './network'; -let instance: Scope; -import * as path from 'path'; -import { URL } from 'url'; -export const STATS_SUFFIX = '_stats.json'; -export const SESSION_EVENTS_SUFFIX = '_session.json'; -export const TRACE_SUFFIX = '_trace.json'; -const included_categories = ['devtools.timeline']; -const _url_short = (url: string) => - new URL(url).hostname; - -const _date_suffix = () => - new Date().toLocaleTimeString().replace(/:/g, '_'); - -const _random_suffix = () => - Math.random() * 100; - -const _default_filename = (url: string) => - `${_url_short(url)}_${_random_suffix()}`; - -export const default_path = (cwd: string, url: string) => - `${path.join(cwd, _default_filename(url))}${STATS_SUFFIX}`; - -export const default_session_events_path = (cwd: string, url: string) => - `${path.join(cwd || process.cwd(), 'sessions', _default_filename(url))}${SESSION_EVENTS_SUFFIX}`; - -export const default_trace_path = (cwd: string, url: string) => - `${path.join(cwd, _default_filename(url))}${TRACE_SUFFIX}`; - -export class Scope { - browser!: Browser; - context!: any; - page!: Page; - args!: any; - requests: any[] = []; - responses: Response[] = []; - eventBeacons: any[] = []; - mutationBeacons: any[] = []; - sessionSuffix: string = ''; - onResponse; - onRequest; - async init() { - this.sessionSuffix = ' - ' + new Date().getTime(); - const args = [ - '--no-sandbox', - '--disable-setuid-sandbox', - '--disable-infobars', - '--window-position=0,0', - '--ignore-certifcate-errors', - '--ignore-certifcate-errors-spki-list', - '--user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3312.0 Safari/537.36"' - ]; - this.browser = await launch({ headless: this.args.headless === 'true', devtools: true,args:args}); - // const context = await this.browser.createIncognitoBrowserContext(); - this.page = await this.browser.newPage(); - // this.page = await context.newPage(); - - this.page.on('console', msg => { - // error('Browser error:', msg); - }); - this.page.on('error', msg => error('Browser Error:', msg)); - // this.page.on('pageerror', msg => error('Browser Page Error:', msg)); - // this.page.on('requestfailed', msg => error('Browser Page Request Error:', msg)); - - //capture_requests(this, this.page); - //capture_responses(this, this.page); - - // this.args.disableRequests !== 'true' && capture_requests(this, this.page); - // this.args.disableResponses !== 'true' && capture_requests(this, this.page); - // capture_responses(this, this.page); - const page2 = this.page as any; - //page2.setCacheEnabled(false); - /* - await page2._client.send('Security.setOverrideCertificateErrors', { - override: true - }); - */ - await page2._client.on('Security.certificateError', (event: any) => { - page2._client.send('Security.handleCertificateError', { - eventId: event.eventId, - action: 'continue' // ignore error and continue request - }) - }) - } -} - -export const getScope = (cliArgs?: any) => { - if (!instance) { - instance = new Scope(); - instance.args = cliArgs; - } - return instance; -} diff --git a/packages/cad/src/renderer/puppeteer/constants.ts b/packages/cad/src/renderer/puppeteer/constants.ts deleted file mode 100644 index d1883ee9..00000000 --- a/packages/cad/src/renderer/puppeteer/constants.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NavigationOptions } from 'puppeteer'; -export const defaultTenant = 1; -export const userSessionsTab = (base: string) => `${base}/e/${defaultTenant}/#usersearchoverview;gtf=l_2_HOURS`; -export const loginUrl = (base: string) => `${base}/login`; -export const loginUrlDemoDev = () => `https://proxy-dev.dynatracelabs.com/sso/ProxyLocator.jsp`; -export const defaultPageOptions = (): NavigationOptions => { - return { - timeout: 5000, - waitUntil: 'networkidle2' - } -} - -export const replay_api_overview = 'uemshareddetails/rumoverviewdata/usersearchoverview'; -const ts = () => { - const d = new Date(); - return d.getHours() + '_' + d.getMinutes() + '_' + d.getSeconds(); -} -export const sessionName = (url?: string) => `Pupeteer :${ts()}`; - -export const maxSessionWaitingTime = 1000 * 60 * 3; -export const responseRetryTime = 1000 * 8; -export const defaultMutationRoot = '#mutationsRoot'; -export const defaultMutationTag = 'div'; -export const defaultHeavyMutations = 2000; -export const defaultMediumMutations = 500; diff --git a/packages/cad/src/renderer/puppeteer/index.ts b/packages/cad/src/renderer/puppeteer/index.ts deleted file mode 100644 index ab7dd088..00000000 --- a/packages/cad/src/renderer/puppeteer/index.ts +++ /dev/null @@ -1,186 +0,0 @@ -import { launch, Page } from 'puppeteer' -import { readFileSync } from 'fs'; -import * as moment from 'moment'; -import { sync as unlink } from '@plastichub/fs/remove'; -import { async as iterator } from '@plastichub/fs/iterator'; -import { - debug, inspect, - Options, TraceEntry, TraceTiming, - default_trace_path, - ReportEntry, - NetworkReportEntry, - sizeToString, - log, - spinner, - STATS_SUFFIX, - TRACE_SUFFIX -} from '../../'; -import { end_time } from './times'; -import { find_time } from './trace'; -import { rl } from './stdin'; -import { report, find_report, get_report } from './report'; -import { IProcessingNode } from '@plastichub/fs/interfaces'; - -const included_categories = ['devtools.timeline']; - -export class Puppeteer { - - static clean(url: string, options: Options) { - iterator(options.cwd, { - matching: [`*${STATS_SUFFIX}`, `*${TRACE_SUFFIX}`] - }).then((it) => { - let node: IProcessingNode = null; - while (node = it.next()) { - unlink(node.path); - } - }) - } - - static async begin(url: string, options: Options) { - - const browser = await launch({ - headless: options.headless, - devtools: false - }); - return await browser.newPage(); - } - static async crawler(url: string, options?: Options) { - - const page = await this.begin(url, options); - - } - static async repl(url: string, options?: Options) { - - const page = await this.begin(url, options); - page.on('console', msg => inspect('Console Message:', msg.text())); - - await page.goto(url, { - timeout: 600000, - waitUntil: 'networkidle0' - }); - - const readline = rl(`${url}#`, (line: string) => { - page.evaluate(line).then((results) => { - inspect(`Did evaluate ${line} to `, results); - }) - }, () => this.end(page)); - } - - - static async end(page: Page) { - - const browser = await page.browser(); - await page.close(); - await browser.close(); - } - - static async summary(url: string, options?: Options) { - - const browser = await launch({ - headless: options.headless, - devtools: true - }); - const page = await browser.newPage(); - await page.goto(url, { - timeout: 600000, - waitUntil: 'networkidle0' - }); - const metrics = await page.metrics(); - await this.end(page); - return metrics; - } - - static async detail(url: string, options?: Options) { - - const network_stats = report(); - const ReceivedTotal = get_report(network_stats, 'Received Total'); - const ReceivedStyleSheets = get_report(network_stats, 'Received Stylesheets'); - const ReceivedScripts = get_report(network_stats, 'Received Scripts'); - const ReceivedHTML = get_report(network_stats, 'Received HTML'); - const ReceivedImages = get_report(network_stats, 'Received Images'); - const ReceivedJSON = get_report(network_stats, 'Received JSON'); - const ReceivedFonts = get_report(network_stats, 'Received Fonts'); - const ReceivedBinary = get_report(network_stats, 'Received Binary'); - const MimeMap = { - 'application/javascript': ReceivedScripts, - 'text/javascript': ReceivedScripts, - 'text/css': ReceivedStyleSheets, - 'text/html': ReceivedHTML, - 'image/png': ReceivedImages, - 'image/gif': ReceivedImages, - 'image/svg+xml': ReceivedImages, - 'application/json': ReceivedJSON, - 'application/octet-stream': ReceivedBinary, - 'font/woff2': ReceivedFonts, - 'application/font-woff2': ReceivedFonts - } - - const traceFile = default_trace_path(options.cwd, url); - - const page = await this.begin(url, options); - await page.tracing.start({ - path: traceFile, - categories: included_categories - }); - await page.goto(url, { - timeout: 600000, - waitUntil: 'networkidle0' - }); - const metrics = await (page as any)._client.send('Performance.getMetrics'); - const nowTs = new Date().getTime(); - // const navigationStart = getTimeFromMetrics(metrics, 'NavigationStart'); - const navigationStart = find_time(metrics, 'Timestamp') + nowTs; - await page.tracing.stop(); - - // --- extracting data from trace.json --- - const tracing = JSON.parse(readFileSync(traceFile, 'utf8')); - - const dataReceivedEvents = tracing.traceEvents.filter(x => x.name === 'ResourceReceivedData'); - const dataResponseEvents = tracing.traceEvents.filter(x => x.name === 'ResourceReceiveResponse'); - - // find resource in responses or return default empty - const content_response = (requestId: string): TraceEntry => dataResponseEvents.find((x) => - x.args.data.requestId === requestId) - || { args: { data: { encodedDataLength: 0 } } }; - - const report_per_mime = (mime: string): NetworkReportEntry => MimeMap[mime] || get_report(network_stats, mime); - - // our iteration over the trace - // @TODO: convert to a better tree structure to avoid O(n) lookups - // @TODO: emit to extensions: events & aspects - // @TODO: calculate times - // @TODO: filter - // @TODO: options.mask - // @TODO: this iterator might get async - ReceivedTotal.value = dataReceivedEvents.reduce((first, x) => { - const content = content_response(x.args.data.requestId); - const data = content.args.data; - const report = report_per_mime(data.mimeType); - if (data.fromCache === false) { - report.value += x.args.data.encodedDataLength - report.count++; - } else { - report.cached_count++; - } - ReceivedTotal.count++; - return first + x.args.data.encodedDataLength; - }, ReceivedTotal.value); - - // calulate finals - [ReceivedTotal, ReceivedHTML, ReceivedImages, ReceivedJSON, - ReceivedScripts, ReceivedFonts, ReceivedBinary - ].forEach((r) => r.formatted = sizeToString(r.value)) - - // --- end extracting data from trace.json --- - - let results = []; - - // lights off - await this.end(page); - - return { - times: [], - network: network_stats - } - } -} diff --git a/packages/cad/src/renderer/puppeteer/network.ts b/packages/cad/src/renderer/puppeteer/network.ts deleted file mode 100644 index 2e42164c..00000000 --- a/packages/cad/src/renderer/puppeteer/network.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { Page, Request, Response } from 'puppeteer'; -import { sessionName, maxSessionWaitingTime, defaultPageOptions, userSessionsTab } from './constants'; -import * as debug from '../../log'; -import { Scope } from './Scope'; -import { parse } from 'url'; -import { navigateToUserSessions } from './processes'; - -const debugRequests = true; -const debugResponses = false; -export const default_postdata = (request: Request): any => request.postData && request.postData() || {}; -export type ResponseMatch = (request: any) => boolean; -export const HasUserSessions = (request: Request) => (default_postdata(request).users) -export const MyUserSessions = (url: string, request: Request) => SessionWithName(request, sessionName(url)); -export const SessionWithName = (request: Request, name: string) => { - const data = default_postdata(request).users || []; - return data.find((user: any) => user.id === name) -} -export type ResponseResolve = Response & { - data: any; -} -const default_prepare = (requests: Request[]): Request[] => { - return requests; -}; - -const default_filter_json = (r: Request) => ((r.headers()['content-type'] || '').startsWith('application/json;')) === true; -const responses = async function (requests: Request[]) { return Promise.all(requests.map(r => r.response()!.json())) }; - -export const findRequest = (url: string, requests: Request[], match?: ResponseMatch): Request[] => { - url = decodeURIComponent(url); - if (!match) { - return requests.filter((request) => request.url().indexOf(url) !== -1); - } else { - const results = requests.filter((request) => request.url().indexOf(url) !== -1); - return results.filter((r) => match!(r)); - } -} - -export function waitForResponse(url: string, scope: Scope, match: ResponseMatch, timeout: number = 5000): Promise { - return new Promise((resolve, reject) => { - setTimeout(() => { - try { - - let requests = default_prepare(scope.requests).filter(default_filter_json).filter(r => r.response() != null); - requests = requests.filter((request) => request.url().indexOf(url) !== -1); - responses(requests).then((responses) => { - const ret = responses.filter(match); - if (ret.length) { - resolve(ret); - } else { - reject('cant find anything yet'); - } - }); - } catch (error) { - debug.error('waitForResponse Error ', error); - } - }, timeout); - }) -} -export function waitForResponseNTimes(url: string, scope: Scope, match: ResponseMatch, timeout: number = 5000) { - return new Promise((resolve, reject) => { - const maxTime = maxSessionWaitingTime; - const retryTime = 8000; - let reachedTimeOut = false; - let interval: any = null; - interval = setInterval(() => { - if (reachedTimeOut) { - clearInterval(interval); - debug.error('reached max'); - reject('reached maximum timeout'); - return; - } - onReload(scope).then(() => { - scope.page.reload().then(() => { - debug.info('retry '); - waitForResponse(url, scope, match, retryTime).then((session) => { - debug.inspect('got my session', session); - clearInterval(interval); - resolve(session); - }).catch((e) => { - debug.error('found nothing'); - }) - }).catch((e) => { - console.error('error loading page : ', e); - }); - }); - }, retryTime); - - - setTimeout(() => { - reachedTimeOut = true; - clearInterval(interval); - reject('max timeout reached'); - }, maxTime); - }); -}; - -export async function capture_request(where: any[], request: Request) { - debugRequests && debug.inspect('Request', { url: request.url(), data: request.postData() }); - where.push({ url: request.url(), data: await request.postData(), request: request }); - debugRequests && debug.inspect('requests', where.map(r => r.url)); -} - -export async function capture_response(where: any[], response: Response) { - debugResponses && debug.inspect('Response', { url: response.url(), data: await response.json() }); - where.push(response); -} - -export async function capture_requests(scope: Scope, page: Page) { - - await page.setRequestInterception(true); - - scope.requests = []; - page.on('request', (interceptedRequest: Request) => { - - if(scope.onRequest){ - scope.onRequest(interceptedRequest, scope); - return; - } - - try { - const url = decodeURIComponent(interceptedRequest.url()); - const parsed = parse(url, true); - if (url.includes('.css') || url.includes('.svg')) { - interceptedRequest.abort(); - return; - - } - const query = parsed.query; - const isJson = (interceptedRequest.headers()['content-type'] || '').startsWith('application/json') === true; - if (isJson) { - // capture_request(scope.requests, interceptedRequest); - //debugRequests && debug.inspect('q ' + query['contentType'] + ' ' + url); - } - interceptedRequest.continue(); - } catch (e) { - debug.error('error parsing request ', e); - } - }); -} - -export async function capture_responses(scope: Scope, page: Page) { - try { - // await page.setRequestInterception(true); - } catch (e) { - debug.error('error intercepting responses', e); - } - scope.responses = []; - page.on('response', response => { - try { - const isJson = (response.headers()['content-type'] || '').startsWith('application/json;') === true; - const url = response.url(); - - if (response.status() === 200) { - if (isJson) { - capture_response(scope.responses, response); - } - if (scope.onResponse) { - scope.onResponse(response, scope); - } - } else { - debugResponses && debug.error(`Error loading ${url} : ${response.status()}`); - } - } catch (e) { - debugResponses && debug.error('Error parsing response'); - } - }); -} -export async function onReload(scope: Scope) { - scope.requests = []; - try { - await scope.page.setRequestInterception(false); - } catch (e) { - - } - await scope.page.setRequestInterception(true); -} \ No newline at end of file diff --git a/packages/cad/src/renderer/puppeteer/page.ts b/packages/cad/src/renderer/puppeteer/page.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/cad/src/renderer/puppeteer/processes.ts b/packages/cad/src/renderer/puppeteer/processes.ts deleted file mode 100644 index a0cecb4a..00000000 --- a/packages/cad/src/renderer/puppeteer/processes.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { Page, Request } from 'puppeteer'; -import { Options } from './types'; -import { loginUrl, defaultPageOptions, userSessionsTab, loginUrlDemoDev } from './constants'; - -export async function loginFrontEnd(page: Page, options: Options) { - // await page.goto(loginUrl(options.dynatraceUrl), defaultPageOptions()); - await page.type('#user', 'admin'); - await page.type('#password', 'admin'); - await page.click('#login-form > .maindiv > .logindiv > .submitdiv > .button'); - await page.waitForSelector('.tenant-selector'); - await page.click('.textboxdiv > .tenant-selector:nth-child(2)'); -} - -export async function loginDemoDev(page: Page, options: Options) { - await page.goto(loginUrlDemoDev(), defaultPageOptions()); - await page.type('#IDToken1', 'guenter.baumgart@ruxit.com'); - await page.click('.maindiv > .logindiv > form > div > #formsubmit'); - - return new Promise((resolve) => { - setTimeout(() => { - resolve(1); - console.log('time out'); - }, 20 * 1000) - }); - - console.log('logged in 1/2!'); - - - /* - const puppeteer = require('puppeteer'); - - (async () => { - const browser = await puppeteer.launch() - const page = await browser.newPage() - - await page.waitForSelector('.logindiv > form > .textboxdiv > .emailLoginIcon > #IDToken1') - await page.click('.logindiv > form > .textboxdiv > .emailLoginIcon > #IDToken1') - - await page.waitForSelector('.maindiv > .logindiv > form > div > #formsubmit') - await page.click('.maindiv > .logindiv > form > div > #formsubmit') - - const navigationPromise = page.waitForNavigation() - await navigationPromise - - await page.waitForSelector('.logindiv > form > .margin-bottom\3A > .passwordIcon > #IDToken2') - await page.click('.logindiv > form > .margin-bottom\3A > .passwordIcon > #IDToken2') - - await page.waitForSelector('.logindiv > form > fieldset > div > #IDToken3') - await page.click('.logindiv > form > fieldset > div > #IDToken3') - - await page.waitForSelector('form > fieldset > #button-base > div > #loginButton_0') - await page.click('form > fieldset > #button-base > div > #loginButton_0') - - await navigationPromise - - await navigationPromise - - await navigationPromise - - await browser.close() - })() - */ - - //await page.type('#password', 'admin'); - //await page.click('#login-form > .maindiv > .logindiv > .submitdiv > .button'); - //await page.waitForSelector('.tenant-selector'); - //await page.click('.textboxdiv > .tenant-selector:nth-child(2)'); -} - -export async function navigateToUserSessions(page: Page, options: Options) { - // await page.goto(userSessionsTab(options.dynatraceUrl), defaultPageOptions()); -} - - -export async function navigateToUserLocalhost(page: Page, options?: Options) { - // await page.goto('http://localhost/', defaultPageOptions()); -} - diff --git a/packages/cad/src/renderer/puppeteer/report.ts b/packages/cad/src/renderer/puppeteer/report.ts deleted file mode 100644 index 7e96a639..00000000 --- a/packages/cad/src/renderer/puppeteer/report.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NetworkReportEntry } from './types'; -const report_item = (name: string): NetworkReportEntry => { - return { - name: name, - value: 0, - formatted: '', - count: 0, - cached_count: 0, - external_count: 0, - local_count: 0, - times: { - end: 0, - formatted: '' - } - } -} - -export const report = () => { - return [ - report_item('Received Total'), - report_item('Received Stylesheets'), - report_item('Received Scripts'), - report_item('Received HTML'), - report_item('Received JSON'), - report_item('Received Images'), - report_item('Received Fonts'), - report_item('Received Binary') - ] -} - -export const find_report = (where: any[], name: string) => where.find((media) => media.name === name); - -export const get_report = (where: any[], type: string) => { - let record = find_report(where, type); - if (!record) { - record = report_item(type); - where.push(record); - } - return record; -} \ No newline at end of file diff --git a/packages/cad/src/renderer/puppeteer/stdin.ts b/packages/cad/src/renderer/puppeteer/stdin.ts deleted file mode 100644 index f05fb7ff..00000000 --- a/packages/cad/src/renderer/puppeteer/stdin.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createInterface, ReadLine } from 'readline'; -import { Page } from 'puppeteer'; -import chalk from 'chalk'; - - - -export const rl = (prompt: string, onLine?: (line: string) => void, onClose?: () => {}) => { - const rl = createInterface({ - input: process.stdin, - output: process.stdout, - prompt: chalk.green(prompt) - }) - console.log('start stdin: ' + prompt); - rl.prompt() - rl.on('line', (line) => { - if(!line){ - return; - } - try { - onLine(line); - } catch (e) { - console.error(e) - rl.prompt() - } - }) - rl.on('close', () => { - rl.close() - onClose(); - }); - return rl; -} \ No newline at end of file diff --git a/packages/cad/src/renderer/puppeteer/times.ts b/packages/cad/src/renderer/puppeteer/times.ts deleted file mode 100644 index 17645d9d..00000000 --- a/packages/cad/src/renderer/puppeteer/times.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TraceEntry } from './types' -export const end_time = (entry: TraceEntry): number => { - const timing = entry.args.data.timing; - const start = timing.requestTime; - const received = entry.ts; - //it might be more accurate to calc this with the header times - const headersReceived = start + timing.receiveHeadersEnd / 1000; - let responseReceived = headersReceived; - responseReceived = Math.min(responseReceived, headersReceived); - responseReceived = Math.max(responseReceived, start); - return Math.max(-1, responseReceived); -} diff --git a/packages/cad/src/renderer/puppeteer/trace.ts b/packages/cad/src/renderer/puppeteer/trace.ts deleted file mode 100644 index d98a3f6f..00000000 --- a/packages/cad/src/renderer/puppeteer/trace.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { NetworkReportEntry, TraceEntry } from "./types"; - -export const find_time = (metrics, name) => - metrics.metrics.find(x => x.name === name).value; - -export const all_with_name = (where: NetworkReportEntry[], name: string) => - where.filter((entry) => entry.name === name); - -/* -export const tree = (entries: TraceEntry[]) => { - const tasks = []; - let currentTask; - - for (const event of entries) { - // Only look at X (Complete), B (Begin), and E (End) events as they have most data - if (event.ph !== 'X' && event.ph !== 'B' && event.ph !== 'E') continue; - - // Update currentTask based on the elapsed time. - // The next event may be after currentTask has ended. - while ( - currentTask && - Number.isFinite(currentTask.endTime) && - currentTask.endTime <= event.ts - ) { - currentTask = currentTask.parent; - } - - if (!currentTask) { - // We can't start a task with an end event - if (event.ph === 'E') { - throw new Error('Fatal trace logic error'); - } - - currentTask = entries._createNewTaskNode(event); - tasks.push(currentTask); - - continue; - } - - if (event.ph === 'X' || event.ph === 'B') { - // We're starting a nested event, create it as a child and make it the currentTask - const newTask = entries._createNewTaskNode(event, currentTask); - tasks.push(newTask); - currentTask = newTask; - } else { - if (currentTask.event.ph !== 'B') { - throw new Error('Fatal trace logic error'); - } - - // We're ending an event, update the end time and the currentTask to its parent - currentTask.endTime = event.ts; - currentTask = currentTask.parent; - } - } - return tasks; -} -*/ \ No newline at end of file diff --git a/packages/cad/src/renderer/puppeteer/types.ts b/packages/cad/src/renderer/puppeteer/types.ts deleted file mode 100644 index e746e423..00000000 --- a/packages/cad/src/renderer/puppeteer/types.ts +++ /dev/null @@ -1,124 +0,0 @@ -///////////////////////////////////////////////////// -// -// Application types -// -export enum OutputTarget { - STDOUT = 'console', - FILE = 'file' -} - -export enum OutputFormat { - text = 'text', - json = 'json' -} - -export interface Options { - // @TODO: support many - url?: string; - format?: OutputFormat; - // @TODO: support many - target?: OutputTarget; - headless?: boolean; - // output path - path?: string; - // @TODO: required to pick profile/config files - cwd?: string; - // @TODO: time of sesssion, mapped to Puppeteer waitUntil, if it's a number, the session will be opened for that - // time window, time=-1 means infinity, useful for repl. sessions - time?: number; - // @TODO: reload interval - reload?: number; - // @TODO: repl. --repl=true=interactive or repl=path to specify script - repl?: string | boolean; - // TODO: colored ouput - colors?: boolean; -} - -// options for certain categories as network, rendering,... -export interface OptionEx { - include?: string | string[]; - exclude?: string | string[]; - query?: string | string[]; -} - -export type OptionsEx = Options & { - launchOptions?: { - // puppeteer launch options - } - waitOptions?: { - // puppeteer wait options: wait for selector,... - } - replOptions?: { - script?: string; - } -} - -export type OutputResult = boolean; - -export interface ReportEntry { - name: string; -} - -export type NetworkReportEntry = ReportEntry & { - value: number; - formatted: string; - count: number; - cached_count: number; - external_count: number; - local_count: number; - times?: { - end: number, - formatted: string; - } -} - -///////////////////////////////////////////////////// -// -// Foreign data types (trace data) -// - -// type for a network resource's timing -export interface TraceTiming { - requestTime: number; - proxyStart: number; - proxyEnd: number; - dnsStart: number; - dnsEnd: number; - connectStart: number; - connectEnd: number; - sslStart: number; - sslEnd: number; - workerStart: number; - workerReady: number; - sendStart: number; - sendEnd: number; - receiveHeadersEnd: number; - pushStart: number; - pushEnd: number; -} - -export interface TraceData { - requestId: string; - frame: string; - statusCode: number; - mimeType: string; - encodedDataLength: number; - fromCache: boolean; - fromServiceWorker: boolean; - timing: TraceTiming; -} -export interface TraceArgs { - data: TraceData; -} - -export interface TraceEntry { - pid: number; - tid: number; - ts: number; - ph: string; // B: begin, | E: end; For async events: S: start, F: finish - cat: string; - name: string; - args: TraceArgs; - tts: number; - s: string; -} diff --git a/packages/cad/src/report/index.ts b/packages/cad/src/report/index.ts index f797e172..a1258ee1 100644 --- a/packages/cad/src/report/index.ts +++ b/packages/cad/src/report/index.ts @@ -1 +1 @@ -export { reportCSV } from './csv' \ No newline at end of file +export { reportCSV } from './csv.js' \ No newline at end of file diff --git a/packages/cad/src/slic3r_argv.ts b/packages/cad/src/slic3r_argv.ts index b827693e..6d4c8fa5 100644 --- a/packages/cad/src/slic3r_argv.ts +++ b/packages/cad/src/slic3r_argv.ts @@ -3,15 +3,14 @@ import * as path from 'path' import { SolidworkOptions, - SlicerOptions, - logger -} from './' + SlicerOptions +} from './types.js' -import { pathInfo, resolve } from "@plastichub/osr-commons" -import { sync as read } from "@plastichub/fs/read" -import { sync as exists } from "@plastichub/fs/exists" +import { pathInfo, resolve } from "@polymech/commons" +import { sync as read } from "@polymech/fs/read" +import { sync as exists } from "@polymech/fs/exists" -import { substitute } from './' +import { substitute, logger } from './index.js' export const defaultOptions = (yargs: CLI.Argv) => { return yargs.option('src', { @@ -71,7 +70,7 @@ export const sanitizeSingle = (argv: CLI.Arguments): SolidworkOptions => { } } } - const args: any = { + const args: any = { src: src, dst: '' + argv.dst as string, report: argv.report ? path.resolve(argv.report as string) : null, @@ -208,11 +207,9 @@ export const sanitize = (argv: any): SlicerOptions => { } } } - if (argv.log) { - args.log = path.resolve(substitute(args.alt, args.log, args.variables)) + args.log = path.resolve(substitute(args.log, args.alt, args.variables)) } - return args } diff --git a/packages/cad/src/sw_argv.ts b/packages/cad/src/sw_argv.ts index 8ffce6eb..0b529458 100644 --- a/packages/cad/src/sw_argv.ts +++ b/packages/cad/src/sw_argv.ts @@ -1,12 +1,12 @@ import * as CLI from 'yargs' import * as path from 'path' -import { substitute } from "@plastichub/core/strings" -import { resolve, forward_slash, pathInfo } from "@plastichub/osr-commons" -import { sync as read } from "@plastichub/fs/read" - -import { SolidworkOptions, logger } from './' -import { DEFAULT_REPORT } from './constants' +import { substitute } from "@polymech/core/strings" +import { resolve, forward_slash, pathInfo } from "@polymech/commons" +import { sync as read } from "@polymech/fs/read" +import { logger } from './index.js' +import { SolidworkOptions } from './index.js' +import { DEFAULT_REPORT } from './constants.js' export const defaultOptions = (yargs: CLI.Argv) => { return yargs.option('src', { diff --git a/packages/cad/src/tree.cs b/packages/cad/src/tree.cs deleted file mode 100644 index 0c252121..00000000 --- a/packages/cad/src/tree.cs +++ /dev/null @@ -1,48 +0,0 @@ - - -using Newtonsoft.Json; -using SolidWorks.Interop.sldworks; -using SolidWorks.Interop.swconst; -using System.Collections.Generic; - -public class TreeItem -{ - public string Name { get; set; } - public List Children { get; set; } -} - -public string CreateAssemblyTreeJson(string filePath) -{ - SldWorks swApp = new SldWorks(); - ModelDoc2 swModel = swApp.OpenDoc6(filePath, (int)swDocumentTypes_e.swDocASSEMBLY, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", 0, 0); - AssemblyDoc swAssembly = (AssemblyDoc)swModel; - - TreeItem root = new TreeItem(); - root.Name = swModel.GetTitle(); - - List children = new List(); - TraverseComponents(swAssembly.GetComponents(false), children); - root.Children = children; - - swApp.CloseDoc(swModel.GetTitle()); - - return JsonConvert.SerializeObject(root); -} - -private void TraverseComponents(Component2[] components, List parentList) -{ - foreach (Component2 component in components) - { - TreeItem item = new TreeItem(); - item.Name = component.Name2; - - if (component.GetChildrenCount() > 0) - { - List children = new List(); - TraverseComponents(component.GetChildren(), children); - item.Children = children; - } - - parentList.Add(item); - } -} diff --git a/packages/cad/src/types.ts b/packages/cad/src/types.ts index 02905638..8b2df376 100644 --- a/packages/cad/src/types.ts +++ b/packages/cad/src/types.ts @@ -1,4 +1,4 @@ -import { PATH_INFO } from "@plastichub/osr-commons" +import { PATH_INFO } from "@polymech/commons" export interface IOptionsCache { cache?: boolean