diff --git a/packages/commons/dist/component.js b/packages/commons/dist/component.js index db75237e..39fdf001 100644 --- a/packages/commons/dist/component.js +++ b/packages/commons/dist/component.js @@ -73,7 +73,7 @@ const find_items = (nodes, options) => { return nodes.map((c) => { const root = resolve(options.root, false, {}); return { - rel: forward_slash(`${path.relative(root, c)}`), + rel: forward_slash(`${path.relative(root, path.parse(c).dir)}`), path: forward_slash(`${options.root}/${path.relative(root, c)}`), config: readOSRConfig(c) }; @@ -107,4 +107,4 @@ export const get = (src, root, type) => { } } }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUU1QixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUNsQixDQUFDLENBQUM7QUFFSCxpQkFBaUI7QUFDakIsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0IsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDL0IsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDakMsQ0FBQyxDQUFDO0FBRUgsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN2QyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQzdDLENBQUMsQ0FBQztBQUVILG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3JDLGVBQWUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQzNCLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3ZCLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztDQUM3QixDQUFDLENBQUM7QUFFSCwwQkFBMEI7QUFDMUIsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUUxQyxPQUFPO0lBQ1AsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDaEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQy9CLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRS9CLFVBQVU7SUFDVixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDekMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbEMsWUFBWSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzVDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRzVCLFNBQVM7SUFDVCxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNoQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUVoQixTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNoQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN0QyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUU1QixTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMvQixhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUVwQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRTtJQUUvQjs7TUFFRTtJQUNGLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3ZFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3pCLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3JDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3BCLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDekMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtDQUMxQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFJakIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDL0ksT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFM0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFlLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDNUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3BDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ25CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUM3QyxPQUFPO1lBQ0gsR0FBRyxFQUFFLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0MsSUFBSSxFQUFFLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUMzQixDQUFBO0lBQ0wsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ25DLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO1FBQ25DLFFBQVEsRUFBRSxJQUFJO0tBQ2pCLENBQUMsQ0FBQTtJQUNGLFFBQVEsSUFBSSxFQUFFO1FBQ1YsS0FBSyxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNyQyxNQUFNLE9BQU8sR0FBRztnQkFDWixNQUFNLEVBQUUsMkJBQTJCO2dCQUNuQyxJQUFJO2FBQ1AsQ0FBQTtZQUNELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7U0FDNUM7UUFFRCxLQUFLLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sT0FBTyxHQUFHO2dCQUNaLE1BQU0sRUFBRSx1QkFBdUI7Z0JBQy9CLElBQUk7YUFDUCxDQUFBO1lBQ0QsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtTQUM1QztRQUVELEtBQUssY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdkMsTUFBTSxPQUFPLEdBQUc7Z0JBQ1osTUFBTSxFQUFFLDZCQUE2QjtnQkFDckMsSUFBSTthQUNQLENBQUE7WUFDRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQzVDO0tBQ0o7QUFDTCxDQUFDLENBQUEifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUU1QixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUNsQixDQUFDLENBQUM7QUFFSCxpQkFBaUI7QUFDakIsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0IsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDL0IsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDakMsQ0FBQyxDQUFDO0FBRUgsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN2QyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQzdDLENBQUMsQ0FBQztBQUVILG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3JDLGVBQWUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQzNCLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3ZCLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztDQUM3QixDQUFDLENBQUM7QUFFSCwwQkFBMEI7QUFDMUIsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUUxQyxPQUFPO0lBQ1AsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDaEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQy9CLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRS9CLFVBQVU7SUFDVixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDekMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbEMsWUFBWSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzVDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRzVCLFNBQVM7SUFDVCxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNoQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUVoQixTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNoQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN0QyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUU1QixTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMvQixhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUVwQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRTtJQUUvQjs7TUFFRTtJQUNGLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3ZFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3pCLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3JDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3BCLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDekMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtDQUMxQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFJakIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDL0ksT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFM0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFlLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDNUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3BDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ25CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUM3QyxPQUFPO1lBQ0gsR0FBRyxFQUFFLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxJQUFJLEVBQUUsYUFBYSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQzNCLENBQUE7SUFDTCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDbkMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7UUFDbkMsUUFBUSxFQUFFLElBQUk7S0FDakIsQ0FBQyxDQUFBO0lBQ0YsUUFBUSxJQUFJLEVBQUU7UUFDVixLQUFLLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sT0FBTyxHQUFHO2dCQUNaLE1BQU0sRUFBRSwyQkFBMkI7Z0JBQ25DLElBQUk7YUFDUCxDQUFBO1lBQ0QsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtTQUM1QztRQUVELEtBQUssWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDakMsTUFBTSxPQUFPLEdBQUc7Z0JBQ1osTUFBTSxFQUFFLHVCQUF1QjtnQkFDL0IsSUFBSTthQUNQLENBQUE7WUFDRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQzVDO1FBRUQsS0FBSyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN2QyxNQUFNLE9BQU8sR0FBRztnQkFDWixNQUFNLEVBQUUsNkJBQTZCO2dCQUNyQyxJQUFJO2FBQ1AsQ0FBQTtZQUNELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7U0FDNUM7S0FDSjtBQUNMLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/commons/src/component.ts b/packages/commons/src/component.ts index 6eecf1b5..b403c4ef 100644 --- a/packages/commons/src/component.ts +++ b/packages/commons/src/component.ts @@ -91,7 +91,7 @@ const find_items = (nodes: string[], options) => { return nodes.map((c) => { const root = resolve(options.root, false, {}) return { - rel: forward_slash(`${path.relative(root, c)}`), + rel: forward_slash(`${path.relative(root, path.parse(c).dir)}`), path: forward_slash(`${options.root}/${path.relative(root, c)}`), config: readOSRConfig(c) } diff --git a/packages/i18n/.gitignore b/packages/i18n/.gitignore new file mode 100644 index 00000000..7b3d0c81 --- /dev/null +++ b/packages/i18n/.gitignore @@ -0,0 +1,7 @@ +/node_modules +/coverage +*.log +.DS_Store +tests/temp +data +clear_history.sh diff --git a/packages/i18n/.npmignore b/packages/i18n/.npmignore new file mode 100644 index 00000000..4c9addac --- /dev/null +++ b/packages/i18n/.npmignore @@ -0,0 +1,4 @@ +./docs +./scripts +./tests +./incoming \ No newline at end of file diff --git a/packages/i18n/.vscode/launch.json b/packages/i18n/.vscode/launch.json new file mode 100644 index 00000000..43b5a6f9 --- /dev/null +++ b/packages/i18n/.vscode/launch.json @@ -0,0 +1,430 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Translate - Tests/MD/Glossary", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='DE'", + "--srcLang='EN'", + "--logLevel=debug", + "--cache=false", + "--glossary=true", + "--formality=more", + "--src='./tests/EN/glossary-*.md'", + "--dstI='./tests/EN/glossary-*.md'" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Tests/DE", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='EN'", + "--srcLang='DE'", + "--filters=Hugo", + "--debug", + "--src='./tests/DE/*.md'" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ] + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Text", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='FR'", + "--srcLang='DE'", + "--logLevel=debug", + "--text='Auf die inneren Werte kommt es an :)'" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Tests/toml", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='DE'", + "--srcLang='EN'", + "--debug", + "--keys='name'", + "--src='./tests/*.toml'" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ] + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Tests/ Hugo Toml", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='FR'", + "--srcLang='EN'", + "--debug", + "--noCache", + "--keys='name'", + "--src='./tests/toml/menus*.toml'", + "--dst='${SRC_DIR}/${SRC_NAME}.${DST_LANG}${SRC_EXT}'" + + + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Tests/ Hugo Toml - Single", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='FR'", + "--srcLang='EN'", + "--debug", + "--noCache", + "--keys='name'", + "--src='./tests/_toml/menus.en.toml'", + "--dst='./tests/_toml/${SRC_NAME.0}.${DST_LANG}${SRC_EXT}'", + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Tests YAML - Single", + "skipFiles": [], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "resolveSourceMapLocations": [ + "${workspaceFolder}/**", + "!**/node_modules/**" + ], + "args": [ + "translate", + "--dstLang='DE'", + "--srcLang='EN'", + "--debug", + "--glossary", + "--noCache", + "--keys='translation'", + "--src='./tests/yml/en2.yaml'", + "--dst='./tests/yml/de2.yaml'", + ], + "cwd": "${workspaceFolder}", + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "Translate:YAML:CreateGlossary", + "skipFiles": [], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "resolveSourceMapLocations": [ + "${workspaceFolder}/**", + "!**/node_modules/**" + ], + "args": [ + "translate", + "--dstLang=de", + "--srcLang=en", + "--debug", + "--glossary", + "--createGlossary=true", + "--logLevel=debug", + "--cache=false", + "--stdout=true", + "--keys=translation", + "--src='./tests/yml/en2.yaml'", + "--dst='./tests/yml/de2.yaml'", + ], + "cwd": "${workspaceFolder}", + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Tests/toml", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='DE'", + "--srcLang='EN'", + "--debug", + "--keys='name'", + "--src='./tests/*.toml'" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ] + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Tests/xlsx", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}/main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='ES'", + "--srcLang='EN'", + "--debug=false", + "--src='./tests/EN/xls/specs-shredder.xlsx'", + "--query='$[*][0,1,2,3,4]'", + "--cache=false", + "--logLevel=trace" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "outputCapture": "std", + "sourceMaps": true + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Tests/xlsx - AIt", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}/lib/async-iterator-test.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "outputCapture": "std", + "sourceMaps": true + },{ + "type": "node", + "request": "launch", + "name": "Translate - Tests/hugo/xlsx", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}/main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='ES,FR,DE,IT'", + "--srcLang='EN'", + "--debug", + "--src='./tests/hugo/*-en.xlsx'", + "--query='$[*][0,1]'", + "--cache=false", + "--dst='./tests/hugo/${SRC_NAME-0}-${DST_LANG}.xlsx'" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "outputCapture": "std", + "sourceMaps": true + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Tests/xlsx - DE", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}/main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='DE'", + "--srcLang='EN'", + "--debug", + "--src='./tests/EN/xls/specs*.xlsx'", + "--query='$[*][0,1]'", + "--cache=false" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "outputCapture": "std", + "sourceMaps": true + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Tests/cs-cart-cats", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='DE'", + "--srcLang='EN'", + "--debug", + "--cache=false", + "--keys='category'", + "--src=\"${OSR_CACHE}/cs-cart/latest/en/categories.json\"", + "--dst=\"${OSR_CACHE}/cs-cart/latest/${DST_LANG}/${SRC_NAME}${SRC_EXT}\"" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ] + }, + { + "type": "node", + "request": "launch", + "name": "Glossary - Create - EN->DE", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "glossary", + "create", + "--name='pp'", + "--dstLang='DE'", + "--srcLang='EN'", + "--debug=true", + "--src='${OSR_ROOT}/osr-i18n-store/glossary/en/de/*.csv'" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Academy", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='DE'", + "--srcLang='EN'", + "--debug", + "--cwd=../hugoplayground2/src", + "--src=../hugoplayground2/src/academy/**/*.md", + "--filters='Hugo'", + "--dst=../osr-kb-test/src/academy/de/${SRC_REL}/${SRC_NAME}${SRC_EXT}" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ] + }, + { + "type": "node", + "request": "launch", + "name": "Translate - Academy - ES", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='ES'", + "--srcLang='EN'", + "--debug", + "--cwd=../hugoplayground2/src", + "--src=../hugoplayground2/src/academy/**/*.md", + "--dst='${OSR_ROOT}/osr-string-exchange/academy/${DST_LANG}/${SRC_REL}/${SRC_NAME}${SRC_EXT}'" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ] + }, + { + "type": "node", + "request": "launch", + "name": "Translate - CS-CART - Products", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "args": [ + "translate", + "--dstLang='DE'", + "--srcLang='EN'", + "--debug", + "--keys=full_description,short_description", + "--src=\"${OSR_CACHE}/cs-cart/latest/en/*.json\"", + "--dst=\"${OSR_CACHE}/cs-cart/latest/${DST_LANG}/${SRC_NAME}${SRC_EXT}\"" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ] + } + ] +} \ No newline at end of file diff --git a/packages/i18n/.vscode/settings.json b/packages/i18n/.vscode/settings.json new file mode 100644 index 00000000..235fa9fe --- /dev/null +++ b/packages/i18n/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "cSpell.words": [ + "deepl", + "iarna", + "plastichub", + "Salamand" + ], + "cmake.configureOnOpen": false +} \ No newline at end of file diff --git a/packages/i18n/LICENSE b/packages/i18n/LICENSE new file mode 100644 index 00000000..b0e20f53 --- /dev/null +++ b/packages/i18n/LICENSE @@ -0,0 +1,9 @@ +Copyright (c) All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/i18n/README.md b/packages/i18n/README.md new file mode 100644 index 00000000..cfbca79b --- /dev/null +++ b/packages/i18n/README.md @@ -0,0 +1,168 @@ +# i18n related library and CLI for OSR content + +Currently translates Markdown directories using [DeepL](deepl.com) API. + +## Installation + +1. Install from NPM +```sh + npm i -g @plastichub/osr-i18n +``` +2. Define an environment variable on your system `OSR-CONFIG` which holds the path to a json file, eg: `C:\Users\nobody-likeyou\.osr\config.json` with the following content (see [./docs/config.json](./docs/config.json) example): + +```json +{ + "deepl": { + "comment": "Please get a key on deepl.com ! ", + "auth_key": "34dbf59f-adeb-1959-d906-502e0ec6afb7", + "free_api": false + } +} +``` + +You can verify the config by ```osr-i18n info``` + +## Commands + +### `info` + +**Brief**: outputs configuration and supported language keys + +```js + osr-i18n info +``` + +### `translate` + +#### Simple + +```sh + +osr-i18n translate --text="Na Du Schnecke" --sourceLang="DE" --targetLang="EN" + +# or pipe into a file + +osr-i18n translate --text="Na Du Schnecke" --sourceLang="DE" --targetLang="EN" > translations.json + + +```json +Translating Na Du Schnecke! Du schaust so traurig aus! to +[ + { + detected_source_language: 'DE', + text: 'Well you snail! You look so sad!' + } +] +``` + +### Using Glob patters + +#### 1. Translate directory of files, simple + +```sh + +osr-i18n translate --src="./**/*.md" --sourceLang="DE" --targetLang="EN" + +``` + +**Remarks:** + +- this will translate all files in ```./**/*.md```, to ```./**/somefile.EN.md``` + +- when no ```--dst``` argument is specified, the output path is composed by adding the target language in the filename, eg: `my-info.md` becomes `my-info_de.md` + +- please run `osr-i18n translate --help` for supported file types + +#### 2. Translate directory of files, advanced + +```sh + +osr-i18n translate --src="./**/*.md" --dst='${SRC_DIR}/${SRC_NAME}.${DST_LANG}.+(md)' --sourceLang="DE" --targetLang="EN" + +``` + +#### 2. Translate directory of files, advanced + +```sh + +osr-i18n translate --src="./**/*.md" --cwd='source directory' --dst='target directory' --sourceLang="DE" --targetLang="EN" + +``` + +**Remarks:** + +- sourceLang is not needed to be set explicit, DeepL will recognize +- please run `osr-i18n translate --help` for supported file types +- See more examples in [./tests/](./tests) +- Please see more integration examples in [./docs/Integration.md](./docs/Integration.md) + +### Example : Create a glossary + +```sh + +osr-i18n glossary create --name="pp" --src="${OSR_ROOT}/osr-commons/i18n/glossary/en/de/*.csv" --srcLang="EN" --dstLang="DE" + +``` + +**Remarks:** + +This creates a glossary file, given a CSV file, eg: + +```csv +Plastic,Kunststoff +Shredder,Granulator +Mould,Spritzgussform +Precious – Plastic,Precious - Plastic +Sheetpress,Plattenpresse +Injection,Spritzgießmaschine +Injection Kits,Injection Kits + +``` + +It creates a meta file, adding '_glossary.json' to the source CSV file, with the content: + +```json +{ + "glossaryId": "60c0b19b-27f0-45ab-a375-feaef2b85b92", + "name": "pp", + "ready": true, + "sourceLang": "en", + "targetLang": "de", + "creationTime": "2023-02-18T17:25:37.800Z", + "entryCount": 7 +} +``` + +--- + +## Path variables + +- **DST_LANG**: Destination language +- **SRC_LANG**: Destination language +- **CWD**: Current working directory, as specified on the CLI +- **SRC_REL**: Relative directory, from main source path to currently translated file + +--- + +## Todos + +- [x] Support [Glossaries](https://www.deepl.com/en/docs-api/glossaries) +- [x] Plugins: emoji fuckery removal, ignore filter/patterns +- [-] Imprint meta (osr-version, config) +- [x] XLS (osr-lib-data) +- [-] Google Sheets, direct +- [-] Google Speech API to produce audio files (see boilerplate in [./src/speech/google.ts](./src/speech/google.ts)) +- [-] Audio (from osr-ai/chatgpt) +- [-] translate keys in `unitconv` +- [-] OSRL AST +- [x] JSON values, via JSON-get|path + +## References + +- [js-quantities](http://gentooboontoo.github.io/js-quantities/) +- [xl8 service - units](https://www.xl8.ai/products) +- [i18n units - blog](https://whpintl.com/blog/localization-measurement-units-dita/) + +### LLMs + +- [ChatGPT vs GoogleBard vs DeepL](https://www.youtube.com/watch?v=CoH7nzWFeQQ&ab_channel=Freelanceverse-AdrianProbst) diff --git a/packages/i18n/docs/Integration.md b/packages/i18n/docs/Integration.md new file mode 100644 index 00000000..045f0c3d --- /dev/null +++ b/packages/i18n/docs/Integration.md @@ -0,0 +1,25 @@ +# Integration + +## Integration: [Alt-Tap Salamand](https://www.altap.cz/) - Custom Menus + +To use OSR-i18n in custom menus, as follows + +![](./assets/integration-as-custom-menu.PNG) + +1. install osr-cad via ```npm i -g @plastichub/osr-cad``` +2. Register a new custom menu (press F9 on any file) + +![](./assets/integration-as-custom-menu-register.PNG) + +**command** : ```osr-i18n``` + +**Arguments** : ```translate --alt=true --targetLang="DE" --debug --src="$(FullName)" --dst="&{SRC_DIR}/&{SRC_NAME}.&{DST_LANG}.+(md)"``` + +```sh + +translate # osr-i18n command + --alt=true # use alternate tokenizer, '&' instead of '$' to prevent collisions with Alt-Tab's own variable designator + --debug=true # be verbose + --src="$(FullName)" # use Alt-Tab's variable for the current selected file + --dst="&{SRC_DIR}/&{SRC_NAME}.&{DST_LANG}.+(md)" # the output destination path +``` diff --git a/packages/i18n/docs/assets/integration-as-custom-menu-register.PNG b/packages/i18n/docs/assets/integration-as-custom-menu-register.PNG new file mode 100644 index 00000000..0cf486ab Binary files /dev/null and b/packages/i18n/docs/assets/integration-as-custom-menu-register.PNG differ diff --git a/packages/i18n/docs/assets/integration-as-custom-menu.PNG b/packages/i18n/docs/assets/integration-as-custom-menu.PNG new file mode 100644 index 00000000..1e02dfed Binary files /dev/null and b/packages/i18n/docs/assets/integration-as-custom-menu.PNG differ diff --git a/packages/i18n/docs/config.json b/packages/i18n/docs/config.json new file mode 100644 index 00000000..898af452 --- /dev/null +++ b/packages/i18n/docs/config.json @@ -0,0 +1,6 @@ +{ + "deepl": { + "auth_key": "34dbf59f-adeb-1959-d906-502e0ec6afc2", + "free_api": false + } +} \ No newline at end of file diff --git a/packages/i18n/package-lock.json b/packages/i18n/package-lock.json new file mode 100644 index 00000000..08b58dda --- /dev/null +++ b/packages/i18n/package-lock.json @@ -0,0 +1,9107 @@ +{ + "name": "@plastichub/osr-i18n", + "version": "0.2.5", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@plastichub/osr-i18n", + "version": "0.2.5", + "license": "BSD-3-Clause", + "dependencies": { + "@iarna/toml": "^2.2.5", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-cache": "file:../osr-cache", + "@plastichub/osr-cli-commons": "file:../osr-cli-commons", + "@plastichub/osr-commons": "file:../osr-commons", + "@plastichub/osr-log": "file:../osr-log", + "@plastichub/osr-sync": "^0.3.8", + "@types/html-minifier-terser": "^7.0.2", + "@types/node": "^20.14.9", + "axios": "^0.27.2", + "convert-units": "^2.3.4", + "cryptr": "^6.0.3", + "deepl-node": "^1.8.0", + "env-var": "^7.1.1", + "front-matter": "^4.0.2", + "glob-base": "^0.3.0", + "html-minifier-terser": "^7.2.0", + "json-to-pretty-yaml": "^1.2.2", + "jsonpath-plus": "^8.1.0", + "keyv": "^4.5.4", + "keyv-file": "^0.3.1", + "link-dev": "^1.0.4", + "p-map": "^4.0.0", + "p-throttle": "^v4.1.1", + "querystring": "^0.2.1", + "ssri": "^10.0.1", + "tslog": "^4.9.3", + "typesafe-i18n": "^5.11.0", + "typescript": "^4.9.5", + "xlsx": "^0.18.5", + "yaml": "^2.4.1", + "yargs": "^17.7.2", + "zod": "^3.23.8" + }, + "bin": { + "osr-i18n": "main.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "../osr-cache": { + "name": "@plastichub/osr-cache", + "version": "0.4.7", + "license": "BSD-3-Clause", + "dependencies": { + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.32", + "@plastichub/osr-cli-commons": "^0.5.1", + "@plastichub/osr-commons": "file:../osr-commons", + "@types/node": "^20.14.9", + "@types/yargs": "^17.0.32", + "cacache": "^18.0.3", + "md5": "^2.3.0", + "yargs": "^17.7.2" + }, + "bin": { + "osr-cache": "main.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "../osr-cli-commons": { + "name": "@plastichub/osr-cli-commons", + "version": "0.5.2", + "license": "BSD-3-Clause", + "dependencies": { + "@asteasolutions/zod-to-openapi": "github:asteasolutions/zod-to-openapi", + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.32", + "@plastichub/osr-commons": "file:../osr-commons", + "@plastichub/osr-log": "file:../osr-log", + "ansi-regex": "^5.0.0", + "cryptr": "^6.0.3", + "env-var": "^7.1.1", + "fast-glob": "^3.2.11", + "glob": "^10.4.1", + "glob-base": "github:justin-caribou/glob-base", + "is-glob": "^4.0.3", + "p-map": "^4.0.0", + "parse-glob": "^3.0.4", + "tslog": "^4.9.3", + "typescript": "^5.6.3", + "yaml": "^2.6.0", + "yargs": "^17.7.2", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.23.5", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "osr-cli": "main.js" + }, + "devDependencies": { + "@types/jest": "^29.5.14", + "@types/node": "^20.17.6", + "@types/yargs": "^17.0.33", + "jest": "^29.7.0", + "ts-jest": "^29.2.5" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "../osr-commons": { + "name": "@plastichub/osr-commons", + "version": "0.3.4", + "license": "BSD-3-Clause", + "dependencies": { + "@asteasolutions/zod-to-openapi": "^7.2.0", + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-log": "file:../osr-log", + "cryptr": "^6.0.3", + "env-var": "^7.1.1", + "fast-glob": "^3.3.2", + "filenamify": "^4.3.0", + "glob": "^11.0.0", + "is-glob": "^4.0.3", + "parse-glob": "^3.0.4", + "sanitize-filename": "^1.6.3", + "tslog": "^4.9.3", + "typescript": "^5.6.3", + "yargs": "^17.7.2", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.23.5", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "osr-commons": "main.js" + }, + "devDependencies": { + "@types/download": "^8.0.1", + "@types/node": "^22.8.6" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "../osr-log": { + "name": "@plastichub/osr-log", + "version": "0.0.1", + "dependencies": { + "@plastichub/core": "^0.1.9", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-cli-commons": "^0.5.2", + "@types/chokidar": "^2.1.3", + "@types/grunt": "^0.4.31", + "@types/lodash": "^4.14.148", + "@types/node": "^20.14.2", + "bluebird": "^3.7.2", + "cheerio": "^1.0.0-rc.10", + "chokidar": "^3.5.3", + "exifreader": "^4.23.2", + "fast-glob": "^3.2.12", + "filenamify": "^5.1.0", + "front-matter": "^4.0.2", + "grunt": "^1.6.1", + "grunt-contrib-clean": "^2.0.0", + "grunt-extend-config": "^0.9.7", + "grunt-parallel": "^0.5.1", + "grunt-shell": "^3.0.1", + "npm-run-all": "^4.1.5", + "p-map": "^4.0.0", + "rotating-file-stream": "^3.2.3", + "sanitize-filename": "^1.6.3", + "tslog": "^4.9.3", + "yaml": "^2.4.2", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "zod": "^3.23.8" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "license": "MIT" + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@plastichub/core": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@plastichub/core/-/core-0.2.6.tgz", + "integrity": "sha512-DF2IUZu6cw8+iVnFv2BFvd+s/7DYfrfXh7o3Uhg0IjbZ/QOIXY21URarnMQoTl9NEwUKN8ZZIHJmOIulT8helg==", + "dependencies": { + "deepmerge": "^4.3.1", + "tslog": "^3.3.3" + } + }, + "node_modules/@plastichub/core/node_modules/tslog": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/tslog/-/tslog-3.3.4.tgz", + "integrity": "sha512-N0HHuHE0e/o75ALfkioFObknHR5dVchUad4F0XyFf3gXJYB++DewEzwGI/uIOM216E5a43ovnRNEeQIq9qgm4Q==", + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.21" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@plastichub/fs": { + "version": "0.13.39", + "resolved": "https://registry.npmjs.org/@plastichub/fs/-/fs-0.13.39.tgz", + "integrity": "sha512-Q96zN5LAlTmtj6gIbHbVM0erp2NgP+P4izRzdhqnMz/WopAvD7ZJxjQ/J44e67R6WKQuvcxt/eXPNaFBB5ehlg==", + "dependencies": { + "@plastichub/core": "^0.2.1", + "@types/denodeify": "^1.2.31", + "@types/glob": "^8.1.0", + "@types/minimatch": "^3.0.3", + "@types/node": "^14.18.63", + "denodeify": "^1.2.1", + "errno": "^0.1.4", + "glob": "^10.4.1", + "mime": "^2.0.3", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "progress-stream": "^1.2.0", + "q": "^1.4.1", + "rimraf": "^2.7.1", + "throttle": "^1.0.3", + "trash": "^4.3.0", + "typescript": "^4.0.3", + "write-file-atomic": "^1.3.1", + "yargs": "^17.7.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@plastichub/fs/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, + "node_modules/@plastichub/fs/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@plastichub/fs/node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/fs/node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/fs/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@plastichub/osr-cache": { + "resolved": "../osr-cache", + "link": true + }, + "node_modules/@plastichub/osr-cli-commons": { + "resolved": "../osr-cli-commons", + "link": true + }, + "node_modules/@plastichub/osr-commons": { + "resolved": "../osr-commons", + "link": true + }, + "node_modules/@plastichub/osr-log": { + "resolved": "../osr-log", + "link": true + }, + "node_modules/@plastichub/osr-sync": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@plastichub/osr-sync/-/osr-sync-0.3.8.tgz", + "integrity": "sha512-xoud6GBkWioeTKs8Hsojvt9f0iTJYlJGWKv8owAOZ/djvrHdVCcuLITzHULsIpIDAQY/wt4bHcsJdQGLWg/+QA==", + "dependencies": { + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-cli-commons": "^0.4.9", + "archiver": "^5.3.1", + "bluebird": "^3.5.1", + "escape-html": "^1.0.3", + "globby": "^6.1.0", + "googleapis": "^59.0.0", + "jsome": "^2.3.24", + "json2csv": "^5.0.1", + "lodash": "^4.16.6", + "markdown-table": "^2.0.0", + "mkdirp": "^0.5.1", + "pkg-dir": "^2.0.0", + "q": "^1.4.1", + "showdown": "^1.9.1", + "tslib": "^1.8.1", + "typescript": "^4.7.4", + "yargonaut": "^1.1.2", + "yargs": "^17.0.1" + }, + "bin": { + "osr-sync": "main.js" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/@plastichub/osr-cli-commons": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@plastichub/osr-cli-commons/-/osr-cli-commons-0.4.9.tgz", + "integrity": "sha512-/cVXEqMp1T4n8njCnzzSqchTdSyPmzcqiucjCiR8Jc27uvzNAtTE+8pOxnmyibUqjkKijFV2CoJ2jVGguthAyA==", + "license": "BSD-3-Clause", + "dependencies": { + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.32", + "@plastichub/osr-commons": "^0.3.3", + "@types/cacache": "^15.0.1", + "@types/node": "^14.17.5", + "@types/which": "^3.0.3", + "@types/yargs": "^17.0.2", + "bluebird": "^3.7.2", + "cacache": "^16.1.2", + "chalk": "^2.4.1", + "convert-units": "^2.3.4", + "cryptr": "^6.0.3", + "env-var": "^7.1.1", + "fast-glob": "^3.2.11", + "glob": "^10.4.1", + "glob-base": "github:justin-caribou/glob-base", + "is-glob": "^4.0.3", + "parse-glob": "^3.0.4", + "rage-edit": "^1.2.0", + "typescript": "^4.3.5", + "which": "^4.0.0", + "yargs": "^17.5.1" + }, + "bin": { + "osr-cli": "main.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, + "node_modules/@plastichub/osr-sync/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/cacache/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/ssri/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@plastichub/osr-sync/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sindresorhus/df": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-2.1.0.tgz", + "integrity": "sha512-yozEsK3X8sEjh9fiolh3JntMUuGKe2n2t8gtE3yZ1PqAFFeaSxTrSiEVORy/YkPzUsxQ85RzLcGqmqSOgiFhtg==", + "dependencies": { + "execa": "^0.2.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@sindresorhus/df/node_modules/execa": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz", + "integrity": "sha512-zmBGzLd3nhA/NB9P7VLoceAO6vyYPftvl809Vjwe5U2fYI9tYWbeKqP3wZlAw9WS+znnkogf/bhSU+Gcn2NbkQ==", + "dependencies": { + "cross-spawn-async": "^2.1.1", + "npm-run-path": "^1.0.0", + "object-assign": "^4.0.1", + "path-key": "^1.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/@sindresorhus/df/node_modules/npm-run-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", + "integrity": "sha512-PrGAi1SLlqNvKN5uGBjIgnrTb8fl0Jz0a3JJmeMcGnIBh7UE9Gc4zsAMlwDajOMg2b1OgP6UPvoLUboTmMZPFA==", + "dependencies": { + "path-key": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@sindresorhus/df/node_modules/path-key": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", + "integrity": "sha512-T3hWy7tyXlk3QvPFnT+o2tmXRzU4GkitkUWLp/WZ0S/FXd7XMx176tRurgTvHTNMJOQzTcesHNpBqetH86mQ9g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/cacache": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/cacache/-/cacache-15.0.1.tgz", + "integrity": "sha512-JhL2GFJuHMx4RMg4z0XfXB4ZkKdyiOaOLpjoYMXcyKfrkF3IBXNZBj6/Peo9zX/7PPHyfI63NWVD589cI2YTzg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/denodeify": { + "version": "1.2.35", + "resolved": "https://registry.npmjs.org/@types/denodeify/-/denodeify-1.2.35.tgz", + "integrity": "sha512-5ixm6RMZKJUMlFKPZj378M/NOCGdodVVzvkYKlYbGp6mQ/r1C7C5KVroSTsZTI75qqmczZeOhhGywcWVURPMMw==" + }, + "node_modules/@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "dependencies": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, + "node_modules/@types/glob/node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, + "node_modules/@types/html-minifier-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-7.0.2.tgz", + "integrity": "sha512-mm2HqV22l8lFQh4r2oSsOEVea+m0qqxEmwpc9kC1p/XzmjLWrReR9D/GRs8Pex2NX/imyEH9c5IU/7tMBQCHOA==", + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, + "node_modules/@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/which": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.4.tgz", + "integrity": "sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==" + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/archiver": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.3", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bignumber.js": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", + "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camel-case/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/convert-units": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/convert-units/-/convert-units-2.3.4.tgz", + "integrity": "sha512-ERHfdA0UhHJp1IpwE6PnFJx8LqG7B1ZjJ20UvVCmopEnVCfER68Tbe3kvN63dLbYXDA2xFWRE6zd4Wsf0w7POg==", + "dependencies": { + "lodash.foreach": "2.3.x", + "lodash.keys": "2.3.x" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn-async": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", + "integrity": "sha512-snteb3aVrxYYOX9e8BabYFK9WhCDhTlw1YQktfTthBogxri4/2r9U2nQc0ffY73ZAxezDc+U8gvHAeU1wy1ubQ==", + "deprecated": "cross-spawn no longer requires a build toolchain, use it instead", + "dependencies": { + "lru-cache": "^4.0.0", + "which": "^1.2.8" + } + }, + "node_modules/cross-spawn-async/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/cross-spawn-async/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/cryptr": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cryptr/-/cryptr-6.0.3.tgz", + "integrity": "sha512-Nhaxn3CYl/OoWF3JSZlF8B6FQO600RRkU3g8213OGEIq4YvMlc3od8hL9chubhY1SmTq8ienvCRq1MSFjMTpOg==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deepl-node": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/deepl-node/-/deepl-node-1.8.0.tgz", + "integrity": "sha512-q8fQaQ2/HXvXWV9j5mABCH9tIlfWghFeVQfad4yPm8ZcYdhLNLwdmPMqXptL9oVueSRo+UtJR1OlnIm/EvvtAA==", + "dependencies": { + "@types/node": ">=12.0", + "axios": ">=0.21.2 <1.2.0 || >=1.2.1", + "form-data": "^3.0.0", + "loglevel": ">=1.6.2" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/deepl-node/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==" + }, + "node_modules/dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-case/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-var": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/env-var/-/env-var-7.1.1.tgz", + "integrity": "sha512-4+vvlq+wwGQNwY/nI3/+Ojc1MKHCmITRJ6VWkQzDtMD6fAEb60ACRUCnlIAonMKW9YzqYmYxbyVu9vTb++yNRg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-applescript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-applescript/-/escape-string-applescript-2.0.0.tgz", + "integrity": "sha512-Z7OsRJUi5+OHT89RRJlkS8cKxIh9AyPmgtEevsSQFCx5WLIiS3hy/HRiiQZzYQMsn6MWyCDZ5elBFa/9dxT0BA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-glob/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-glob/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-text-encoding": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", + "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==" + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figlet": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.2.tgz", + "integrity": "sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "dependencies": { + "js-yaml": "^3.13.1" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gcp-metadata": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", + "dependencies": { + "gaxios": "^4.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-base": { + "version": "0.3.0", + "resolved": "git+ssh://git@github.com/justin-caribou/glob-base.git#d4fe4313e55988a902a3940127cb946a7defbb50", + "dependencies": { + "glob-parent": "^6.0.2", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-parent/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/google-auth-library": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", + "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^4.0.0", + "gcp-metadata": "^4.2.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/googleapis": { + "version": "59.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-59.0.0.tgz", + "integrity": "sha512-GV/E4KRN89a4GxSk7D7cwUfRYgcJHR05sOgm/WGdwc/u8dxNXG5lWmz9gF5ZwFGk2yKtVxL4VZNn4zBuZ6rmGg==", + "dependencies": { + "google-auth-library": "^6.0.0", + "googleapis-common": "^4.4.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/googleapis-common": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-4.4.3.tgz", + "integrity": "sha512-W46WKCk3QtlCCfmZyQIH5zxmDOyeV5Qj+qs7nr2ox08eRkEJMWp6iwv542R/PsokXaGUSrmif4vCC4+rGzRSsQ==", + "dependencies": { + "extend": "^3.0.2", + "gaxios": "^4.0.0", + "google-auth-library": "^6.0.0", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "dependencies": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jsome": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/jsome/-/jsome-2.5.0.tgz", + "integrity": "sha512-QBjTpOA9MLO78hrR4V3S6FZpDRdsLhOxA9VZ5Qfum/h7pF/TkaTaq+yYZmWKrov8m+bV6wZgmBTf5m5J2805Pw==", + "dependencies": { + "chalk": "^2.3.0", + "json-stringify-safe": "^5.0.1", + "yargs": "^11.0.0" + }, + "bin": { + "jsome": "bin/cli.js" + } + }, + "node_modules/jsome/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/jsome/node_modules/cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/jsome/node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "node_modules/jsome/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/jsome/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jsome/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jsome/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/wrap-ansi/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "node_modules/jsome/node_modules/yargs": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", + "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", + "dependencies": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + } + }, + "node_modules/jsome/node_modules/yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha512-CswCfdOgCr4MMsT1GzbEJ7Z2uYudWyrGX8Bgh/0eyCzj/DXWdKq6a/ADufkzI1WAOIW6jYaXJvRyLhDO0kfqBw==", + "dependencies": { + "camelcase": "^4.1.0" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/json-to-pretty-yaml": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz", + "integrity": "sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==", + "dependencies": { + "remedial": "^1.0.7", + "remove-trailing-spaces": "^1.0.6" + }, + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/json2csv": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-5.0.7.tgz", + "integrity": "sha512-YRZbUnyaJZLZUJSRi2G/MqahCyRv9n/ds+4oIetjDF3jWQA7AG7iSeKTiZiCNqtMZM7HDyt0e/W6lEnoGEmMGA==", + "dependencies": { + "commander": "^6.1.0", + "jsonparse": "^1.3.1", + "lodash.get": "^4.4.2" + }, + "bin": { + "json2csv": "bin/json2csv.js" + }, + "engines": { + "node": ">= 10", + "npm": ">= 6.13.0" + } + }, + "node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jsonpath-plus": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-8.1.0.tgz", + "integrity": "sha512-qVTiuKztFGw0dGhYi3WNqvddx3/SHtyDT0xJaeyz4uP0d1tkpG+0y5uYQ4OcIo1TLAz3PE/qDOW9F0uDt3+CTw==", + "bin": { + "jsonpath": "bin/jsonpath-cli.js", + "jsonpath-plus": "bin/jsonpath-cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/keyv-file": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/keyv-file/-/keyv-file-0.3.1.tgz", + "integrity": "sha512-nrIyNaGlw8nf11mu8p7ttr+Qj6V3N0/BO62Y/oDsi02aWKWYaQjGVPLo0XPfRIwgaByQabuA/IH1se7i150LnQ==", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^4.0.1", + "tslib": "^1.9.3" + } + }, + "node_modules/keyv-file/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/keyv-file/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dependencies": { + "invert-kv": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/link-dev": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/link-dev/-/link-dev-1.0.4.tgz", + "integrity": "sha512-TiqNBenTobwtGnQMnADg1abK+uQUQgYsixN0dSKLtPZHjxvPI5Nk0eqT0LUkE4V0Nplu7TWAbAQhqkBW7E1z4w==", + "dependencies": { + "commander": "^8.3.0", + "execa": "^5.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "link-dev": "bin/link-dev.js" + } + }, + "node_modules/link-dev/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/link-dev/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/link-dev/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/link-dev/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/link-dev/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/link-dev/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/link-dev/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/link-dev/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/link-dev/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash._basebind": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basebind/-/lodash._basebind-2.3.0.tgz", + "integrity": "sha512-SHqM7YCuJ+BeGTs7lqpWnmdHEeF4MWxS3dksJctHFNxR81FXPOzA4bS5Vs5CpcGTkBpM8FCl+YEbQEblRw8ABg==", + "dependencies": { + "lodash._basecreate": "~2.3.0", + "lodash._setbinddata": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "node_modules/lodash._basecreate": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-2.3.0.tgz", + "integrity": "sha512-vwZaWldZwS2y9b99D8i9+WtgiZXbHKsBsMrpxJEqTsNW20NhJo5W8PBQkeQO9CmxuqEYn8UkMnfEM2MMT4cVrw==", + "dependencies": { + "lodash._renative": "~2.3.0", + "lodash.isobject": "~2.3.0", + "lodash.noop": "~2.3.0" + } + }, + "node_modules/lodash._basecreatecallback": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreatecallback/-/lodash._basecreatecallback-2.3.0.tgz", + "integrity": "sha512-Ev+pDzzfVfgbiucpXijconLGRBar7/+KNCf05kSnk4CmdDVhAy1RdbU9efCJ/o9GXI08JdUGwZ+5QJ3QX3kj0g==", + "dependencies": { + "lodash._setbinddata": "~2.3.0", + "lodash.bind": "~2.3.0", + "lodash.identity": "~2.3.0", + "lodash.support": "~2.3.0" + } + }, + "node_modules/lodash._basecreatewrapper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.3.0.tgz", + "integrity": "sha512-YLycQ7k8AB9Wc1EOvLNxuRWcqipDkMXq2GCgnLWQR6qtgTb3gY3LELzEpnFshrEO4LOLs+R2EpcY+uCOZaLQ8Q==", + "dependencies": { + "lodash._basecreate": "~2.3.0", + "lodash._setbinddata": "~2.3.0", + "lodash._slice": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "node_modules/lodash._createwrapper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-2.3.0.tgz", + "integrity": "sha512-XjaI/rzg9W+WO4WJDQ+PRlHD5sAMJ1RhJLuT65cBxLCb1kIYs4U20jqvTDGAWyVT3c34GYiLd9AreHYuB/8yJA==", + "dependencies": { + "lodash._basebind": "~2.3.0", + "lodash._basecreatewrapper": "~2.3.0", + "lodash.isfunction": "~2.3.0" + } + }, + "node_modules/lodash._objecttypes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.3.0.tgz", + "integrity": "sha512-jbA6QyHt9cw3BzvbWzIcnU3Z12jSneT6xBgz3Y782CJsN1tV5aTBKrFo2B4AkeHBNaxSrbPYZZpi1Lwj3xjdtg==" + }, + "node_modules/lodash._renative": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._renative/-/lodash._renative-2.3.0.tgz", + "integrity": "sha512-v44MRirqYqZGK/h5UKoVqXWF2L+LUiLTU+Ogu5rHRVWJUA1uWIlHaMpG8f/OA8j++BzPMQij9+erXHtgFcbuwg==" + }, + "node_modules/lodash._setbinddata": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._setbinddata/-/lodash._setbinddata-2.3.0.tgz", + "integrity": "sha512-xMFfbF7dL+sFtrdE49uHFmfpBAEwlFtfgMp86nQRlAF6aizYL+3MTbnYMKJSkP1W501PhsgiBED5kBbZd8kR2g==", + "dependencies": { + "lodash._renative": "~2.3.0", + "lodash.noop": "~2.3.0" + } + }, + "node_modules/lodash._shimkeys": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.3.0.tgz", + "integrity": "sha512-9Iuyi7TiWMGa/9+2rqEE+Zwye4b/U2w7Saw6UX1h6Xs88mEER+uz9FZcEBPKMVKsad9Pw5GNAcIBRnW2jNpneQ==", + "dependencies": { + "lodash._objecttypes": "~2.3.0" + } + }, + "node_modules/lodash._slice": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._slice/-/lodash._slice-2.3.0.tgz", + "integrity": "sha512-7C61GhzRUv36gTafr+RIb+AomCAYsSATEoK4OP0VkNBcwvsM022Z22AVgqjjzikeNO1U29LzsJZDvLbiNPUYvA==" + }, + "node_modules/lodash.bind": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-2.3.0.tgz", + "integrity": "sha512-goakyOo+FMN8lttMPnZ0UNlr5RlzX4IrUXyTJPT2A0tGCMXySupond9wzvDqTvVmYTcQjIKGrj8naJDS2xWAlQ==", + "dependencies": { + "lodash._createwrapper": "~2.3.0", + "lodash._renative": "~2.3.0", + "lodash._slice": "~2.3.0" + } + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, + "node_modules/lodash.foreach": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-2.3.0.tgz", + "integrity": "sha512-yLnyptVRJd0//AbGp480grgQG9iaDIV5uOgSbpurRy1dYybPbjNTLQ3FyLEQ84buVLPG7jyaiyvpzgfOutRB3Q==", + "dependencies": { + "lodash._basecreatecallback": "~2.3.0", + "lodash.forown": "~2.3.0" + } + }, + "node_modules/lodash.forown": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-2.3.0.tgz", + "integrity": "sha512-dUnCsuQTtq3Y7bxPNoEEqjJjPL2ftLtcz2PTeRKvhbpdM514AvnqCjewHGsm/W+dwspIwa14KoWEZeizJ7smxA==", + "dependencies": { + "lodash._basecreatecallback": "~2.3.0", + "lodash._objecttypes": "~2.3.0", + "lodash.keys": "~2.3.0" + } + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "node_modules/lodash.identity": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.identity/-/lodash.identity-2.3.0.tgz", + "integrity": "sha512-NYJ2r2cwy3tkx/saqbIZEX6oQUzjWTnGRu7d/zmBjMCZos3eHBxCpbvWFWSetv8jFVrptsp6EbWjzNgBKhUoOA==" + }, + "node_modules/lodash.isfunction": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.3.0.tgz", + "integrity": "sha512-X5lteBYlCrVO7Qc00fxP8W90fzRp6Ax9XcHANmU3OsZHdSyIVZ9ZlX5QTTpRq8aGY+9I5Rmd0UTzTIIyWPugEQ==" + }, + "node_modules/lodash.isobject": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.3.0.tgz", + "integrity": "sha512-jo1pfV61C4TE8BfEzqaHj6EIKiSkFANJrB6yscwuCJMSRw5tbqjk4Gv7nJzk4Z6nFKobZjGZ8Qd41vmnwgeQqQ==", + "dependencies": { + "lodash._objecttypes": "~2.3.0" + } + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.keys": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.3.0.tgz", + "integrity": "sha512-c0UW0ffqMxSCtoVbmVt2lERJLkEqgoOn2ejPsWXzr0ZrqRbl3uruGgwHzhtqXxi6K/ei3Ey7zimOqSwXgzazPg==", + "dependencies": { + "lodash._renative": "~2.3.0", + "lodash._shimkeys": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "node_modules/lodash.noop": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-2.3.0.tgz", + "integrity": "sha512-NpSm8HRm1WkBBWHUveDukLF4Kfb5P5E3fjHc9Qre9A11nNubozLWD2wH3UBTZbu+KSuX8aSUvy9b+PUyEceJ8g==" + }, + "node_modules/lodash.support": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.support/-/lodash.support-2.3.0.tgz", + "integrity": "sha512-etc7VWbB0U3Iya8ixj2xy4sDBN3jvPX7ODi8iXtn4KkkjNpdngrdc7Vlt5jub/Vgqx6/dWtp7Ml9awhCQPYKGQ==", + "dependencies": { + "lodash._renative": "~2.3.0" + } + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==" + }, + "node_modules/loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dependencies": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mount-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mount-point/-/mount-point-3.0.0.tgz", + "integrity": "sha512-jAhfD7ZCG+dbESZjcY1SdFVFqSJkh/yGbdsifHcPkvuLRO5ugK0Ssmd9jdATu29BTd4JiN+vkpMzVvsUgP3SZA==", + "dependencies": { + "@sindresorhus/df": "^1.0.1", + "pify": "^2.3.0", + "pinkie-promise": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mount-point/node_modules/@sindresorhus/df": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-1.0.1.tgz", + "integrity": "sha512-1Hyp7NQnD/u4DSxR2DGW78TF9k7R0wZ8ev0BpMAIzA6yTQSHqNb5wTuvtcPYf4FWbVse2rW7RgDsyL8ua2vXHw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/no-case/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dependencies": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/os-locale/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/os-locale/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/os-locale/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-4.1.1.tgz", + "integrity": "sha512-TuU8Ato+pRTPJoDzYD4s7ocJYcNSEZRvlxoq3hcPI2kZDZ49IQ1Wkj7/gDJc3X7XiEAAvRGtDzdXJI0tC3IL1g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "engines": { + "node": ">=4" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/param-case/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/parent-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", + "integrity": "sha512-2MXDNZC4aXdkkap+rBBMv0lUsfJqvX5/2FiYYnfCnorZt3Pk06/IOR5KeaoghgS2w07MLWgjbsnyaq6PdHn2LQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", + "dependencies": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascal-case/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha512-ojakdnUgL5pzJYWw2AIDEupaQCX5OPbM688ZevubICjdIX01PRSYKqm33fJoCOJBRseYCTUlQRnBNX+Pchaejw==", + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha512-MIBPjZz6oGNSw5rn2mSp+nP9FGoaVo6QsPyPVEaD4puilz5hZNa3kfnrlqRNYFsugslbU3An4mnkLLtZOaWvrA==", + "dependencies": { + "speedometer": "~0.1.2", + "through2": "~0.2.3" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "license": "ISC" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/rage-edit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rage-edit/-/rage-edit-1.2.0.tgz", + "integrity": "sha512-0RspBRc2s6We4g7hRCvT5mu7YPEnfjvQK8Tt354a2uUNJCMC7MKLvo/1mLvHUCQ/zbP6siQyp5VRZN7UCpMFZg==" + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.2.tgz", + "integrity": "sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remedial": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", + "integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==", + "engines": { + "node": "*" + } + }, + "node_modules/remove-trailing-spaces": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz", + "integrity": "sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==" + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/run-applescript": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-3.2.0.tgz", + "integrity": "sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==", + "dependencies": { + "execa": "^0.10.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/showdown": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz", + "integrity": "sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==", + "dependencies": { + "yargs": "^14.2" + }, + "bin": { + "showdown": "bin/showdown.js" + } + }, + "node_modules/showdown/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/showdown/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "node_modules/showdown/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/showdown/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/showdown/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/showdown/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/showdown/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/showdown/node_modules/yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dependencies": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "node_modules/showdown/node_modules/yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", + "engines": { + "node": "*" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/speedometer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha512-phdEoDlA6EUIVtzwq1UiNMXDUogczp204aYF/yfOhjNePWFfIpBJ1k5wLMuXQhEOOMjuTJEcc4vdZa+vuP+n/Q==" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "license": "Apache-2.0", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ssri": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", + "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", + "dependencies": { + "minipass": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.3.tgz", + "integrity": "sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser": { + "version": "5.34.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", + "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/throttle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/throttle/-/throttle-1.0.3.tgz", + "integrity": "sha512-VYINSQFQeFdmhCds0tTqvQmLmdAjzGX1D6GnRQa4zlq8OpTtWSMddNyRq8Z4Snw/d6QZrWt9cM/cH8xTiGUkYA==", + "dependencies": { + "readable-stream": ">= 0.3.0", + "stream-parser": ">= 0.0.2" + }, + "engines": { + "node": ">= v0.8.0" + } + }, + "node_modules/through2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "integrity": "sha512-mLa8Bn2mZurjyomGKWRu3Bo2mvoQojFks9NvOK8H+k4kDJNkdEqG522KFZsEFBEl6rKkxTgFbE5+OPcgfvPEHA==", + "dependencies": { + "readable-stream": "~1.1.9", + "xtend": "~2.1.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/trash": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/trash/-/trash-4.3.0.tgz", + "integrity": "sha512-f36TKwIaBiXm63xSrn8OTNghg5CYHBsFVJvcObMo76LRpgariuRi2CqXQHw1VzfeximD0igdGaonOG6N760BtQ==", + "dependencies": { + "escape-string-applescript": "^2.0.0", + "fs-extra": "^0.30.0", + "globby": "^7.1.1", + "p-map": "^1.2.0", + "p-try": "^1.0.0", + "pify": "^3.0.0", + "run-applescript": "^3.0.0", + "uuid": "^3.1.0", + "xdg-trashdir": "^2.1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/trash/node_modules/globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==", + "dependencies": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/trash/node_modules/p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/trash/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/trash/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/tslog": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/tslog/-/tslog-4.9.3.tgz", + "integrity": "sha512-oDWuGVONxhVEBtschLf2cs/Jy8i7h1T+CpdkTNWQgdAF7DhRo2G8vMCgILKe7ojdEkLhICWgI1LYSSKaJsRgcw==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/fullstack-build/tslog?sponsor=1" + } + }, + "node_modules/typesafe-i18n": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/typesafe-i18n/-/typesafe-i18n-5.11.0.tgz", + "integrity": "sha512-OVX/6/F834XldHTMdmo3TcMPePcvLXwYrkDgqWYxmuVCTyCrk0aIdUOIWM0RPZEQ2D106+/LcWFCkJiBCuK2pA==", + "bin": { + "typesafe-i18n": "cli/typesafe-i18n.mjs" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ivanhofer" + }, + "peerDependencies": { + "typescript": ">=3.5.1" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + }, + "node_modules/user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==", + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha512-NF1pPn594TaRSUO/HARoB4jK8I+rWgcpVlpQCK6/6o5PHyLUt2CSiDrpUZbQ6rROck+W2EwF8mBJcTs+W98J9w==", + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xdg-trashdir": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xdg-trashdir/-/xdg-trashdir-2.1.1.tgz", + "integrity": "sha512-KcVhPaOu2ZurYNHSRTf1+ZHORkTZGCQ+u0JHN17QixRISJq4pXOnjt/lQcehvtHL5QAKhSzKgyjrcNnPdkPBHA==", + "dependencies": { + "@sindresorhus/df": "^2.1.0", + "mount-point": "^3.0.0", + "pify": "^2.2.0", + "user-home": "^2.0.0", + "xdg-basedir": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargonaut": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz", + "integrity": "sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==", + "dependencies": { + "chalk": "^1.1.1", + "figlet": "^1.1.1", + "parent-require": "^1.0.0" + } + }, + "node_modules/yargonaut/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargonaut/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargonaut/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargonaut/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargonaut/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + }, + "dependencies": { + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + }, + "@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, + "@plastichub/core": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@plastichub/core/-/core-0.2.6.tgz", + "integrity": "sha512-DF2IUZu6cw8+iVnFv2BFvd+s/7DYfrfXh7o3Uhg0IjbZ/QOIXY21URarnMQoTl9NEwUKN8ZZIHJmOIulT8helg==", + "requires": { + "deepmerge": "^4.3.1", + "tslog": "^3.3.3" + }, + "dependencies": { + "tslog": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/tslog/-/tslog-3.3.4.tgz", + "integrity": "sha512-N0HHuHE0e/o75ALfkioFObknHR5dVchUad4F0XyFf3gXJYB++DewEzwGI/uIOM216E5a43ovnRNEeQIq9qgm4Q==", + "requires": { + "source-map-support": "^0.5.21" + } + } + } + }, + "@plastichub/fs": { + "version": "0.13.39", + "resolved": "https://registry.npmjs.org/@plastichub/fs/-/fs-0.13.39.tgz", + "integrity": "sha512-Q96zN5LAlTmtj6gIbHbVM0erp2NgP+P4izRzdhqnMz/WopAvD7ZJxjQ/J44e67R6WKQuvcxt/eXPNaFBB5ehlg==", + "requires": { + "@plastichub/core": "^0.2.1", + "@types/denodeify": "^1.2.31", + "@types/glob": "^8.1.0", + "@types/minimatch": "^3.0.3", + "@types/node": "^14.18.63", + "denodeify": "^1.2.1", + "errno": "^0.1.4", + "glob": "^10.4.1", + "mime": "^2.0.3", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "progress-stream": "^1.2.0", + "q": "^1.4.1", + "rimraf": "^2.7.1", + "throttle": "^1.0.3", + "trash": "^4.3.0", + "typescript": "^4.0.3", + "write-file-atomic": "^1.3.1", + "yargs": "^17.7.2" + }, + "dependencies": { + "@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "dependencies": { + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + } + } + }, + "@plastichub/osr-cache": { + "version": "file:../osr-cache", + "requires": { + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.32", + "@plastichub/osr-cli-commons": "^0.5.1", + "@plastichub/osr-commons": "file:../osr-commons", + "@types/node": "^20.14.9", + "@types/yargs": "^17.0.32", + "cacache": "^18.0.3", + "md5": "^2.3.0", + "yargs": "^17.7.2" + } + }, + "@plastichub/osr-cli-commons": { + "version": "file:../osr-cli-commons", + "requires": { + "@asteasolutions/zod-to-openapi": "github:asteasolutions/zod-to-openapi", + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.32", + "@plastichub/osr-commons": "file:../osr-commons", + "@plastichub/osr-log": "file:../osr-log", + "@types/jest": "^29.5.14", + "@types/node": "^20.17.6", + "@types/yargs": "^17.0.33", + "ansi-regex": "^5.0.0", + "cryptr": "^6.0.3", + "env-var": "^7.1.1", + "fast-glob": "^3.2.11", + "glob": "^10.4.1", + "glob-base": "github:justin-caribou/glob-base", + "is-glob": "^4.0.3", + "jest": "^29.7.0", + "p-map": "^4.0.0", + "parse-glob": "^3.0.4", + "ts-jest": "^29.2.5", + "tslog": "^4.9.3", + "typescript": "^5.6.3", + "yaml": "^2.6.0", + "yargs": "^17.7.2", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.23.5", + "zod-to-ts": "^1.2.0" + } + }, + "@plastichub/osr-commons": { + "version": "file:../osr-commons", + "requires": { + "@asteasolutions/zod-to-openapi": "^7.2.0", + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-log": "file:../osr-log", + "@types/download": "^8.0.1", + "@types/node": "^22.8.6", + "cryptr": "^6.0.3", + "env-var": "^7.1.1", + "fast-glob": "^3.3.2", + "filenamify": "^4.3.0", + "glob": "^11.0.0", + "is-glob": "^4.0.3", + "parse-glob": "^3.0.4", + "sanitize-filename": "^1.6.3", + "tslog": "^4.9.3", + "typescript": "^5.6.3", + "yargs": "^17.7.2", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.23.5", + "zod-to-ts": "^1.2.0" + } + }, + "@plastichub/osr-log": { + "version": "file:../osr-log", + "requires": { + "@plastichub/core": "^0.1.9", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-cli-commons": "^0.5.2", + "@types/chokidar": "^2.1.3", + "@types/grunt": "^0.4.31", + "@types/lodash": "^4.14.148", + "@types/node": "^20.14.2", + "bluebird": "^3.7.2", + "cheerio": "^1.0.0-rc.10", + "chokidar": "^3.5.3", + "exifreader": "^4.23.2", + "fast-glob": "^3.2.12", + "filenamify": "^5.1.0", + "front-matter": "^4.0.2", + "grunt": "^1.6.1", + "grunt-contrib-clean": "^2.0.0", + "grunt-extend-config": "^0.9.7", + "grunt-parallel": "^0.5.1", + "grunt-shell": "^3.0.1", + "npm-run-all": "^4.1.5", + "p-map": "^4.0.0", + "rotating-file-stream": "^3.2.3", + "sanitize-filename": "^1.6.3", + "tslog": "^4.9.3", + "yaml": "^2.4.2", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "zod": "^3.23.8" + } + }, + "@plastichub/osr-sync": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@plastichub/osr-sync/-/osr-sync-0.3.8.tgz", + "integrity": "sha512-xoud6GBkWioeTKs8Hsojvt9f0iTJYlJGWKv8owAOZ/djvrHdVCcuLITzHULsIpIDAQY/wt4bHcsJdQGLWg/+QA==", + "requires": { + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-cli-commons": "^0.4.9", + "archiver": "^5.3.1", + "bluebird": "^3.5.1", + "escape-html": "^1.0.3", + "globby": "^6.1.0", + "googleapis": "^59.0.0", + "jsome": "^2.3.24", + "json2csv": "^5.0.1", + "lodash": "^4.16.6", + "markdown-table": "^2.0.0", + "mkdirp": "^0.5.1", + "pkg-dir": "^2.0.0", + "q": "^1.4.1", + "showdown": "^1.9.1", + "tslib": "^1.8.1", + "typescript": "^4.7.4", + "yargonaut": "^1.1.2", + "yargs": "^17.0.1" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@plastichub/osr-cli-commons": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@plastichub/osr-cli-commons/-/osr-cli-commons-0.4.9.tgz", + "integrity": "sha512-/cVXEqMp1T4n8njCnzzSqchTdSyPmzcqiucjCiR8Jc27uvzNAtTE+8pOxnmyibUqjkKijFV2CoJ2jVGguthAyA==", + "requires": { + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.32", + "@plastichub/osr-commons": "^0.3.3", + "@types/cacache": "^15.0.1", + "@types/node": "^14.17.5", + "@types/which": "^3.0.3", + "@types/yargs": "^17.0.2", + "bluebird": "^3.7.2", + "cacache": "^16.1.2", + "chalk": "^2.4.1", + "convert-units": "^2.3.4", + "cryptr": "^6.0.3", + "env-var": "^7.1.1", + "fast-glob": "^3.2.11", + "glob": "^10.4.1", + "glob-base": "github:justin-caribou/glob-base", + "is-glob": "^4.0.3", + "parse-glob": "^3.0.4", + "rage-edit": "^1.2.0", + "typescript": "^4.3.5", + "which": "^4.0.0", + "yargs": "^17.5.1" + } + }, + "@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "dependencies": { + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "requires": { + "minipass": "^3.1.1" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "requires": { + "isexe": "^3.1.1" + } + } + } + }, + "@sindresorhus/df": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-2.1.0.tgz", + "integrity": "sha512-yozEsK3X8sEjh9fiolh3JntMUuGKe2n2t8gtE3yZ1PqAFFeaSxTrSiEVORy/YkPzUsxQ85RzLcGqmqSOgiFhtg==", + "requires": { + "execa": "^0.2.2" + }, + "dependencies": { + "execa": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz", + "integrity": "sha512-zmBGzLd3nhA/NB9P7VLoceAO6vyYPftvl809Vjwe5U2fYI9tYWbeKqP3wZlAw9WS+znnkogf/bhSU+Gcn2NbkQ==", + "requires": { + "cross-spawn-async": "^2.1.1", + "npm-run-path": "^1.0.0", + "object-assign": "^4.0.1", + "path-key": "^1.0.0", + "strip-eof": "^1.0.0" + } + }, + "npm-run-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", + "integrity": "sha512-PrGAi1SLlqNvKN5uGBjIgnrTb8fl0Jz0a3JJmeMcGnIBh7UE9Gc4zsAMlwDajOMg2b1OgP6UPvoLUboTmMZPFA==", + "requires": { + "path-key": "^1.0.0" + } + }, + "path-key": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", + "integrity": "sha512-T3hWy7tyXlk3QvPFnT+o2tmXRzU4GkitkUWLp/WZ0S/FXd7XMx176tRurgTvHTNMJOQzTcesHNpBqetH86mQ9g==" + } + } + }, + "@types/cacache": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/cacache/-/cacache-15.0.1.tgz", + "integrity": "sha512-JhL2GFJuHMx4RMg4z0XfXB4ZkKdyiOaOLpjoYMXcyKfrkF3IBXNZBj6/Peo9zX/7PPHyfI63NWVD589cI2YTzg==", + "requires": { + "@types/node": "*" + } + }, + "@types/denodeify": { + "version": "1.2.35", + "resolved": "https://registry.npmjs.org/@types/denodeify/-/denodeify-1.2.35.tgz", + "integrity": "sha512-5ixm6RMZKJUMlFKPZj378M/NOCGdodVVzvkYKlYbGp6mQ/r1C7C5KVroSTsZTI75qqmczZeOhhGywcWVURPMMw==" + }, + "@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "requires": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + }, + "dependencies": { + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + } + } + }, + "@types/html-minifier-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-7.0.2.tgz", + "integrity": "sha512-mm2HqV22l8lFQh4r2oSsOEVea+m0qqxEmwpc9kC1p/XzmjLWrReR9D/GRs8Pex2NX/imyEH9c5IU/7tMBQCHOA==" + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, + "@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/which": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.4.tgz", + "integrity": "sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==" + }, + "@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==" + }, + "adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "archiver": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.3", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "requires": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bignumber.js": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", + "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "requires": { + "fill-range": "^7.1.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + } + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==" + }, + "cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "requires": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" + }, + "codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + }, + "compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "convert-units": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/convert-units/-/convert-units-2.3.4.tgz", + "integrity": "sha512-ERHfdA0UhHJp1IpwE6PnFJx8LqG7B1ZjJ20UvVCmopEnVCfER68Tbe3kvN63dLbYXDA2xFWRE6zd4Wsf0w7POg==", + "requires": { + "lodash.foreach": "2.3.x", + "lodash.keys": "2.3.x" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + }, + "crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "requires": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "cross-spawn-async": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", + "integrity": "sha512-snteb3aVrxYYOX9e8BabYFK9WhCDhTlw1YQktfTthBogxri4/2r9U2nQc0ffY73ZAxezDc+U8gvHAeU1wy1ubQ==", + "requires": { + "lru-cache": "^4.0.0", + "which": "^1.2.8" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + } + } + }, + "cryptr": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cryptr/-/cryptr-6.0.3.tgz", + "integrity": "sha512-Nhaxn3CYl/OoWF3JSZlF8B6FQO600RRkU3g8213OGEIq4YvMlc3od8hL9chubhY1SmTq8ienvCRq1MSFjMTpOg==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "deepl-node": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/deepl-node/-/deepl-node-1.8.0.tgz", + "integrity": "sha512-q8fQaQ2/HXvXWV9j5mABCH9tIlfWghFeVQfad4yPm8ZcYdhLNLwdmPMqXptL9oVueSRo+UtJR1OlnIm/EvvtAA==", + "requires": { + "@types/node": ">=12.0", + "axios": ">=0.21.2 <1.2.0 || >=1.2.1", + "form-data": "^3.0.0", + "loglevel": ">=1.6.2" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==" + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "requires": { + "path-type": "^3.0.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + } + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "env-var": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/env-var/-/env-var-7.1.1.tgz", + "integrity": "sha512-4+vvlq+wwGQNwY/nI3/+Ojc1MKHCmITRJ6VWkQzDtMD6fAEb60ACRUCnlIAonMKW9YzqYmYxbyVu9vTb++yNRg==" + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "requires": { + "prr": "~1.0.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-applescript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-applescript/-/escape-string-applescript-2.0.0.tgz", + "integrity": "sha512-Z7OsRJUi5+OHT89RRJlkS8cKxIh9AyPmgtEevsSQFCx5WLIiS3hy/HRiiQZzYQMsn6MWyCDZ5elBFa/9dxT0BA==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "fast-text-encoding": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz", + "integrity": "sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==" + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "figlet": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.2.tgz", + "integrity": "sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ==" + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "requires": { + "locate-path": "^2.0.0" + } + }, + "follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" + }, + "foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, + "front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "requires": { + "js-yaml": "^3.13.1" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + } + }, + "gcp-metadata": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", + "requires": { + "gaxios": "^4.0.0", + "json-bigint": "^1.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "git+ssh://git@github.com/justin-caribou/glob-base.git#d4fe4313e55988a902a3940127cb946a7defbb50", + "from": "glob-base@^0.3.0", + "requires": { + "glob-parent": "^6.0.2", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "google-auth-library": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", + "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==", + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^4.0.0", + "gcp-metadata": "^4.2.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + } + }, + "google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "requires": { + "node-forge": "^1.3.1" + } + }, + "googleapis": { + "version": "59.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-59.0.0.tgz", + "integrity": "sha512-GV/E4KRN89a4GxSk7D7cwUfRYgcJHR05sOgm/WGdwc/u8dxNXG5lWmz9gF5ZwFGk2yKtVxL4VZNn4zBuZ6rmGg==", + "requires": { + "google-auth-library": "^6.0.0", + "googleapis-common": "^4.4.0" + } + }, + "googleapis-common": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-4.4.3.tgz", + "integrity": "sha512-W46WKCk3QtlCCfmZyQIH5zxmDOyeV5Qj+qs7nr2ox08eRkEJMWp6iwv542R/PsokXaGUSrmif4vCC4+rGzRSsQ==", + "requires": { + "extend": "^3.0.2", + "gaxios": "^4.0.0", + "google-auth-library": "^6.0.0", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^8.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "requires": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "requires": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "dependencies": { + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" + } + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "jackspeak": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + } + } + }, + "jsome": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/jsome/-/jsome-2.5.0.tgz", + "integrity": "sha512-QBjTpOA9MLO78hrR4V3S6FZpDRdsLhOxA9VZ5Qfum/h7pF/TkaTaq+yYZmWKrov8m+bV6wZgmBTf5m5J2805Pw==", + "requires": { + "chalk": "^2.3.0", + "json-stringify-safe": "^5.0.1", + "yargs": "^11.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "yargs": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", + "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha512-CswCfdOgCr4MMsT1GzbEJ7Z2uYudWyrGX8Bgh/0eyCzj/DXWdKq6a/ADufkzI1WAOIW6jYaXJvRyLhDO0kfqBw==", + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "json-to-pretty-yaml": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz", + "integrity": "sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==", + "requires": { + "remedial": "^1.0.7", + "remove-trailing-spaces": "^1.0.6" + } + }, + "json2csv": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-5.0.7.tgz", + "integrity": "sha512-YRZbUnyaJZLZUJSRi2G/MqahCyRv9n/ds+4oIetjDF3jWQA7AG7iSeKTiZiCNqtMZM7HDyt0e/W6lEnoGEmMGA==", + "requires": { + "commander": "^6.1.0", + "jsonparse": "^1.3.1", + "lodash.get": "^4.4.2" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" + }, + "jsonpath-plus": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-8.1.0.tgz", + "integrity": "sha512-qVTiuKztFGw0dGhYi3WNqvddx3/SHtyDT0xJaeyz4uP0d1tkpG+0y5uYQ4OcIo1TLAz3PE/qDOW9F0uDt3+CTw==" + }, + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "requires": { + "json-buffer": "3.0.1" + } + }, + "keyv-file": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/keyv-file/-/keyv-file-0.3.1.tgz", + "integrity": "sha512-nrIyNaGlw8nf11mu8p7ttr+Qj6V3N0/BO62Y/oDsi02aWKWYaQjGVPLo0XPfRIwgaByQabuA/IH1se7i150LnQ==", + "requires": { + "debug": "^4.1.1", + "fs-extra": "^4.0.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "requires": { + "readable-stream": "^2.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "link-dev": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/link-dev/-/link-dev-1.0.4.tgz", + "integrity": "sha512-TiqNBenTobwtGnQMnADg1abK+uQUQgYsixN0dSKLtPZHjxvPI5Nk0eqT0LUkE4V0Nplu7TWAbAQhqkBW7E1z4w==", + "requires": { + "commander": "^8.3.0", + "execa": "^5.1.1", + "picocolors": "^1.0.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash._basebind": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basebind/-/lodash._basebind-2.3.0.tgz", + "integrity": "sha512-SHqM7YCuJ+BeGTs7lqpWnmdHEeF4MWxS3dksJctHFNxR81FXPOzA4bS5Vs5CpcGTkBpM8FCl+YEbQEblRw8ABg==", + "requires": { + "lodash._basecreate": "~2.3.0", + "lodash._setbinddata": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "lodash._basecreate": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-2.3.0.tgz", + "integrity": "sha512-vwZaWldZwS2y9b99D8i9+WtgiZXbHKsBsMrpxJEqTsNW20NhJo5W8PBQkeQO9CmxuqEYn8UkMnfEM2MMT4cVrw==", + "requires": { + "lodash._renative": "~2.3.0", + "lodash.isobject": "~2.3.0", + "lodash.noop": "~2.3.0" + } + }, + "lodash._basecreatecallback": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreatecallback/-/lodash._basecreatecallback-2.3.0.tgz", + "integrity": "sha512-Ev+pDzzfVfgbiucpXijconLGRBar7/+KNCf05kSnk4CmdDVhAy1RdbU9efCJ/o9GXI08JdUGwZ+5QJ3QX3kj0g==", + "requires": { + "lodash._setbinddata": "~2.3.0", + "lodash.bind": "~2.3.0", + "lodash.identity": "~2.3.0", + "lodash.support": "~2.3.0" + } + }, + "lodash._basecreatewrapper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.3.0.tgz", + "integrity": "sha512-YLycQ7k8AB9Wc1EOvLNxuRWcqipDkMXq2GCgnLWQR6qtgTb3gY3LELzEpnFshrEO4LOLs+R2EpcY+uCOZaLQ8Q==", + "requires": { + "lodash._basecreate": "~2.3.0", + "lodash._setbinddata": "~2.3.0", + "lodash._slice": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "lodash._createwrapper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-2.3.0.tgz", + "integrity": "sha512-XjaI/rzg9W+WO4WJDQ+PRlHD5sAMJ1RhJLuT65cBxLCb1kIYs4U20jqvTDGAWyVT3c34GYiLd9AreHYuB/8yJA==", + "requires": { + "lodash._basebind": "~2.3.0", + "lodash._basecreatewrapper": "~2.3.0", + "lodash.isfunction": "~2.3.0" + } + }, + "lodash._objecttypes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.3.0.tgz", + "integrity": "sha512-jbA6QyHt9cw3BzvbWzIcnU3Z12jSneT6xBgz3Y782CJsN1tV5aTBKrFo2B4AkeHBNaxSrbPYZZpi1Lwj3xjdtg==" + }, + "lodash._renative": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._renative/-/lodash._renative-2.3.0.tgz", + "integrity": "sha512-v44MRirqYqZGK/h5UKoVqXWF2L+LUiLTU+Ogu5rHRVWJUA1uWIlHaMpG8f/OA8j++BzPMQij9+erXHtgFcbuwg==" + }, + "lodash._setbinddata": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._setbinddata/-/lodash._setbinddata-2.3.0.tgz", + "integrity": "sha512-xMFfbF7dL+sFtrdE49uHFmfpBAEwlFtfgMp86nQRlAF6aizYL+3MTbnYMKJSkP1W501PhsgiBED5kBbZd8kR2g==", + "requires": { + "lodash._renative": "~2.3.0", + "lodash.noop": "~2.3.0" + } + }, + "lodash._shimkeys": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.3.0.tgz", + "integrity": "sha512-9Iuyi7TiWMGa/9+2rqEE+Zwye4b/U2w7Saw6UX1h6Xs88mEER+uz9FZcEBPKMVKsad9Pw5GNAcIBRnW2jNpneQ==", + "requires": { + "lodash._objecttypes": "~2.3.0" + } + }, + "lodash._slice": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._slice/-/lodash._slice-2.3.0.tgz", + "integrity": "sha512-7C61GhzRUv36gTafr+RIb+AomCAYsSATEoK4OP0VkNBcwvsM022Z22AVgqjjzikeNO1U29LzsJZDvLbiNPUYvA==" + }, + "lodash.bind": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-2.3.0.tgz", + "integrity": "sha512-goakyOo+FMN8lttMPnZ0UNlr5RlzX4IrUXyTJPT2A0tGCMXySupond9wzvDqTvVmYTcQjIKGrj8naJDS2xWAlQ==", + "requires": { + "lodash._createwrapper": "~2.3.0", + "lodash._renative": "~2.3.0", + "lodash._slice": "~2.3.0" + } + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, + "lodash.foreach": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-2.3.0.tgz", + "integrity": "sha512-yLnyptVRJd0//AbGp480grgQG9iaDIV5uOgSbpurRy1dYybPbjNTLQ3FyLEQ84buVLPG7jyaiyvpzgfOutRB3Q==", + "requires": { + "lodash._basecreatecallback": "~2.3.0", + "lodash.forown": "~2.3.0" + } + }, + "lodash.forown": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-2.3.0.tgz", + "integrity": "sha512-dUnCsuQTtq3Y7bxPNoEEqjJjPL2ftLtcz2PTeRKvhbpdM514AvnqCjewHGsm/W+dwspIwa14KoWEZeizJ7smxA==", + "requires": { + "lodash._basecreatecallback": "~2.3.0", + "lodash._objecttypes": "~2.3.0", + "lodash.keys": "~2.3.0" + } + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "lodash.identity": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.identity/-/lodash.identity-2.3.0.tgz", + "integrity": "sha512-NYJ2r2cwy3tkx/saqbIZEX6oQUzjWTnGRu7d/zmBjMCZos3eHBxCpbvWFWSetv8jFVrptsp6EbWjzNgBKhUoOA==" + }, + "lodash.isfunction": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.3.0.tgz", + "integrity": "sha512-X5lteBYlCrVO7Qc00fxP8W90fzRp6Ax9XcHANmU3OsZHdSyIVZ9ZlX5QTTpRq8aGY+9I5Rmd0UTzTIIyWPugEQ==" + }, + "lodash.isobject": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.3.0.tgz", + "integrity": "sha512-jo1pfV61C4TE8BfEzqaHj6EIKiSkFANJrB6yscwuCJMSRw5tbqjk4Gv7nJzk4Z6nFKobZjGZ8Qd41vmnwgeQqQ==", + "requires": { + "lodash._objecttypes": "~2.3.0" + } + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.keys": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.3.0.tgz", + "integrity": "sha512-c0UW0ffqMxSCtoVbmVt2lERJLkEqgoOn2ejPsWXzr0ZrqRbl3uruGgwHzhtqXxi6K/ei3Ey7zimOqSwXgzazPg==", + "requires": { + "lodash._renative": "~2.3.0", + "lodash._shimkeys": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "lodash.noop": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-2.3.0.tgz", + "integrity": "sha512-NpSm8HRm1WkBBWHUveDukLF4Kfb5P5E3fjHc9Qre9A11nNubozLWD2wH3UBTZbu+KSuX8aSUvy9b+PUyEceJ8g==" + }, + "lodash.support": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.support/-/lodash.support-2.3.0.tgz", + "integrity": "sha512-etc7VWbB0U3Iya8ixj2xy4sDBN3jvPX7ODi8iXtn4KkkjNpdngrdc7Vlt5jub/Vgqx6/dWtp7Ml9awhCQPYKGQ==", + "requires": { + "lodash._renative": "~2.3.0" + } + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==" + }, + "loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==" + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, + "markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "requires": { + "repeat-string": "^1.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "mount-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mount-point/-/mount-point-3.0.0.tgz", + "integrity": "sha512-jAhfD7ZCG+dbESZjcY1SdFVFqSJkh/yGbdsifHcPkvuLRO5ugK0Ssmd9jdATu29BTd4JiN+vkpMzVvsUgP3SZA==", + "requires": { + "@sindresorhus/df": "^1.0.1", + "pify": "^2.3.0", + "pinkie-promise": "^2.0.1" + }, + "dependencies": { + "@sindresorhus/df": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-1.0.1.tgz", + "integrity": "sha512-1Hyp7NQnD/u4DSxR2DGW78TF9k7R0wZ8ev0BpMAIzA6yTQSHqNb5wTuvtcPYf4FWbVse2rW7RgDsyL8ua2vXHw==" + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + } + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "dependencies": { + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + } + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-4.1.1.tgz", + "integrity": "sha512-TuU8Ato+pRTPJoDzYD4s7ocJYcNSEZRvlxoq3hcPI2kZDZ49IQ1Wkj7/gDJc3X7XiEAAvRGtDzdXJI0tC3IL1g==" + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" + }, + "package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + } + } + }, + "parent-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", + "integrity": "sha512-2MXDNZC4aXdkkap+rBBMv0lUsfJqvX5/2FiYYnfCnorZt3Pk06/IOR5KeaoghgS2w07MLWgjbsnyaq6PdHn2LQ==" + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + } + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==" + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + } + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + } + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha512-ojakdnUgL5pzJYWw2AIDEupaQCX5OPbM688ZevubICjdIX01PRSYKqm33fJoCOJBRseYCTUlQRnBNX+Pchaejw==", + "requires": { + "find-up": "^2.1.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha512-MIBPjZz6oGNSw5rn2mSp+nP9FGoaVo6QsPyPVEaD4puilz5hZNa3kfnrlqRNYFsugslbU3An4mnkLLtZOaWvrA==", + "requires": { + "speedometer": "~0.1.2", + "through2": "~0.2.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "rage-edit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rage-edit/-/rage-edit-1.2.0.tgz", + "integrity": "sha512-0RspBRc2s6We4g7hRCvT5mu7YPEnfjvQK8Tt354a2uUNJCMC7MKLvo/1mLvHUCQ/zbP6siQyp5VRZN7UCpMFZg==" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-glob": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.2.tgz", + "integrity": "sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==", + "requires": { + "minimatch": "^5.1.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + }, + "remedial": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", + "integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==" + }, + "remove-trailing-spaces": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz", + "integrity": "sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "run-applescript": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-3.2.0.tgz", + "integrity": "sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==", + "requires": { + "execa": "^0.10.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + }, + "showdown": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz", + "integrity": "sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==", + "requires": { + "yargs": "^14.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==" + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "speedometer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha512-phdEoDlA6EUIVtzwq1UiNMXDUogczp204aYF/yfOhjNePWFfIpBJ1k5wLMuXQhEOOMjuTJEcc4vdZa+vuP+n/Q==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "requires": { + "frac": "~1.1.2" + } + }, + "ssri": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", + "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", + "requires": { + "minipass": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.3.tgz", + "integrity": "sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==" + } + } + }, + "stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "requires": { + "debug": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "terser": { + "version": "5.34.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", + "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, + "throttle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/throttle/-/throttle-1.0.3.tgz", + "integrity": "sha512-VYINSQFQeFdmhCds0tTqvQmLmdAjzGX1D6GnRQa4zlq8OpTtWSMddNyRq8Z4Snw/d6QZrWt9cM/cH8xTiGUkYA==", + "requires": { + "readable-stream": ">= 0.3.0", + "stream-parser": ">= 0.0.2" + } + }, + "through2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "integrity": "sha512-mLa8Bn2mZurjyomGKWRu3Bo2mvoQojFks9NvOK8H+k4kDJNkdEqG522KFZsEFBEl6rKkxTgFbE5+OPcgfvPEHA==", + "requires": { + "readable-stream": "~1.1.9", + "xtend": "~2.1.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "trash": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/trash/-/trash-4.3.0.tgz", + "integrity": "sha512-f36TKwIaBiXm63xSrn8OTNghg5CYHBsFVJvcObMo76LRpgariuRi2CqXQHw1VzfeximD0igdGaonOG6N760BtQ==", + "requires": { + "escape-string-applescript": "^2.0.0", + "fs-extra": "^0.30.0", + "globby": "^7.1.1", + "p-map": "^1.2.0", + "p-try": "^1.0.0", + "pify": "^3.0.0", + "run-applescript": "^3.0.0", + "uuid": "^3.1.0", + "xdg-trashdir": "^2.1.1" + }, + "dependencies": { + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==", + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "tslog": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/tslog/-/tslog-4.9.3.tgz", + "integrity": "sha512-oDWuGVONxhVEBtschLf2cs/Jy8i7h1T+CpdkTNWQgdAF7DhRo2G8vMCgILKe7ojdEkLhICWgI1LYSSKaJsRgcw==" + }, + "typesafe-i18n": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/typesafe-i18n/-/typesafe-i18n-5.11.0.tgz", + "integrity": "sha512-OVX/6/F834XldHTMdmo3TcMPePcvLXwYrkDgqWYxmuVCTyCrk0aIdUOIWM0RPZEQ2D106+/LcWFCkJiBCuK2pA==", + "requires": {} + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==", + "requires": { + "os-homedir": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, + "wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" + }, + "word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "xdg-basedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha512-NF1pPn594TaRSUO/HARoB4jK8I+rWgcpVlpQCK6/6o5PHyLUt2CSiDrpUZbQ6rROck+W2EwF8mBJcTs+W98J9w==", + "requires": { + "os-homedir": "^1.0.0" + } + }, + "xdg-trashdir": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xdg-trashdir/-/xdg-trashdir-2.1.1.tgz", + "integrity": "sha512-KcVhPaOu2ZurYNHSRTf1+ZHORkTZGCQ+u0JHN17QixRISJq4pXOnjt/lQcehvtHL5QAKhSzKgyjrcNnPdkPBHA==", + "requires": { + "@sindresorhus/df": "^2.1.0", + "mount-point": "^3.0.0", + "pify": "^2.2.0", + "user-home": "^2.0.0", + "xdg-basedir": "^2.0.0" + } + }, + "xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "requires": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + } + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "requires": { + "object-keys": "~0.4.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==" + }, + "yargonaut": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz", + "integrity": "sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==", + "requires": { + "chalk": "^1.1.1", + "figlet": "^1.1.1", + "parent-require": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" + } + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + } + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + }, + "zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + } + }, + "zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==" + } + } +} diff --git a/packages/i18n/package.json b/packages/i18n/package.json new file mode 100644 index 00000000..aeabaab4 --- /dev/null +++ b/packages/i18n/package.json @@ -0,0 +1,70 @@ +{ + "name": "@polymech/osr-i18n", + "version": "0.3.0", + "typings": "index.d.ts", + "type": "module", + "publishConfig": { + "access": "public" + }, + "bin": { + "osr-i18n": "main.js" + }, + "dependencies": { + "@iarna/toml": "^2.2.5", + "@plastichub/osr-sync": "^0.3.8", + "@types/html-minifier-terser": "^7.0.2", + "@types/node": "^20.14.9", + "axios": "^0.27.2", + "convert-units": "^2.3.4", + "cryptr": "^6.0.3", + "deepl-node": "^1.8.0", + "env-var": "^7.1.1", + "front-matter": "^4.0.2", + "glob-base": "^0.3.0", + "html-minifier-terser": "^7.2.0", + "json-to-pretty-yaml": "^1.2.2", + "jsonpath-plus": "^8.1.0", + "keyv": "^4.5.4", + "keyv-file": "^0.3.1", + "link-dev": "^1.0.4", + "p-map": "^4.0.0", + "p-throttle": "^v4.1.1", + "querystring": "^0.2.1", + "ssri": "^10.0.1", + "tslog": "^4.9.3", + "typesafe-i18n": "^5.11.0", + "typescript": "^4.9.5", + "xlsx": "^0.18.5", + "yaml": "^2.4.1", + "yargs": "^17.7.2", + "zod": "^3.23.8" + }, + "scripts": { + "test": "tsc; mocha --full-trace mocha \"spec/**/*.spec.js\"", + "test-with-coverage": "istanbul cover node_modules/.bin/_mocha -- 'spec/**/*.spec.js'", + "lint": "tslint --project=./tsconfig.json", + "build": "tsc -p . --declaration", + "dev": "tsc -p . --declaration -w", + "typings": "tsc --declaration", + "docs": "npx typedoc src/index.ts", + "dev-test-watch": "mocha-typescript-watch", + "typesafe-i18n": "typesafe-i18n", + "link-dev": "sh scripts/link-dev.sh", + "dev-test-md": "node ./dist/main.js translate --debug --src='./tests/*.md'", + "dev-test-md-de": "node ./dist/main.js translate --targetLang='EN' --sourceLang='DE' --debug --src='./tests/DE/*.md'", + "dev-test-json": "node ./dist/main.js translate --debug --src='./tests/*.json'", + "dev-test-toml": "node ./dist/main.js translate --debug --src='./tests/*.toml'" + }, + "homepage": "https://git.osr-plastic.org/osr-plastic/osr-i18n", + "repository": { + "type": "git", + "url": "https://git.osr-plastic.org/osr-plastic/osr-i18n.git" + }, + "engines": { + "node": ">= 14.0.0" + }, + "license": "BSD-3-Clause", + "keywords": [ + "typescript" + ] +} diff --git a/packages/i18n/scripts/create-glossary-de.sh b/packages/i18n/scripts/create-glossary-de.sh new file mode 100644 index 00000000..fc0f8f28 --- /dev/null +++ b/packages/i18n/scripts/create-glossary-de.sh @@ -0,0 +1,5 @@ +node ./dist/main.js glossary create \ +--srcLang='EN' \ +--dstLang='DE' \ +--src='${OSR_ROOT}/osr-commons/i18n/glossary/en/de/*.csv' + diff --git a/packages/i18n/scripts/link-dev.sh b/packages/i18n/scripts/link-dev.sh new file mode 100644 index 00000000..4a2bdc8b --- /dev/null +++ b/packages/i18n/scripts/link-dev.sh @@ -0,0 +1,2 @@ +npm link ../core/ +npm link ../osr-cli-commons/ \ No newline at end of file diff --git a/packages/i18n/scripts/translate-academy-de.sh b/packages/i18n/scripts/translate-academy-de.sh new file mode 100644 index 00000000..6263d066 --- /dev/null +++ b/packages/i18n/scripts/translate-academy-de.sh @@ -0,0 +1,9 @@ +node ./dist/main.js translate \ +--cwd='../osr-kb-next/src' \ +--dry=false \ +--srcLang='EN' \ +--dstLang='DE' \ +--debug \ +--src='${OSR_ROOT}/osr-string-exchange/academy_test/**/*.md' \ +--dst='${OSR_ROOT}/osr-string-exchange/academy/${DST_LANG}/${SRC_REL}/${SRC_NAME}${SRC_EXT}' + diff --git a/packages/i18n/scripts/translate-academy-es.sh b/packages/i18n/scripts/translate-academy-es.sh new file mode 100644 index 00000000..a10c16de --- /dev/null +++ b/packages/i18n/scripts/translate-academy-es.sh @@ -0,0 +1,9 @@ +node ./dist/main.js translate \ +--cwd='../osr-kb-next/src' \ +--dry=false \ +--srcLang='EN' \ +--dstLang='ES' \ +--debug \ +--src='../osr-kb-next/src/academy/en/**/*.md' \ +--dst='${OSR_ROOT}/osr-string-exchange/academy/${DST_LANG}/${SRC_REL}/${SRC_NAME}${SRC_EXT}' + diff --git a/packages/i18n/scripts/translate-academy.sh b/packages/i18n/scripts/translate-academy.sh new file mode 100644 index 00000000..fc19149d --- /dev/null +++ b/packages/i18n/scripts/translate-academy.sh @@ -0,0 +1,10 @@ +node ./dist/main.js translate \ +--cwd='../hugoplayground2/src' \ +--dry=false \ +--srcLang='EN' \ +--dstLang=$1 \ +--debug \ +--filters="Hugo" \ +--src='../hugoplayground2/src/academy/**/*.md' \ +--dst='../osr-kb-test/src/academy/'$1'/${SRC_REL}/${SRC_NAME}${SRC_EXT}' + diff --git a/packages/i18n/scripts/translate-cscart-en-de.sh b/packages/i18n/scripts/translate-cscart-en-de.sh new file mode 100644 index 00000000..723ca810 --- /dev/null +++ b/packages/i18n/scripts/translate-cscart-en-de.sh @@ -0,0 +1,9 @@ +node ./dist/main.js translate \ +--dry=false \ +--srcLang='EN' \ +--dstLang='DE' \ +--debug \ +--keys='full_description' \ +--src='${OSR_CACHE}/cs-cart/latest/en/*.json' \ +--dst='${OSR_CACHE}/cs-cart/latest/${DST_LANG}/${SRC_NAME}${SRC_EXT}' + diff --git a/packages/i18n/src/.gitignore b/packages/i18n/src/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/packages/i18n/src/_cli.ts b/packages/i18n/src/_cli.ts new file mode 100644 index 00000000..3eb7214d --- /dev/null +++ b/packages/i18n/src/_cli.ts @@ -0,0 +1,68 @@ +import * as path from 'path' +import { sync as exists } from '@plastichub/fs/exists' +import { IOptions } from './types' +import { logger } from './' + +export const defaults = () => { + const DefaultCommand = 'info'; + if (process.argv.length === 2) { + process.argv.push(DefaultCommand); + } + + process.on('unhandledRejection', (reason: string) => { + console.error('Unhandled rejection, reason: ', reason); + }) +} + +export const sanitize = (argv: any): IOptions | boolean => { + + let ret: any = { + all: argv.all, + src: argv.src, + dst: argv.dst, + dry: argv.dry, + alt: argv.alt, + srcLang: argv.srcLang, + dstLang: argv.dstLang || 'EN', + formality: argv.formality, + debug: argv.debug, + text: argv.text, + query: argv.query, + glossary: argv.glossary, + createGlossary: argv.createGlossary, + cache: argv.cache, + api_key: argv.api_key, + keys: argv.keys, + storeRoot: argv.storeRoot, + store: argv.store, + logLevel: argv.logLevel, + logger: argv.logger + } + + if (!argv.src && !argv.text) { + logger.error("No source path or text specified!") + return false + } + + if (!argv.dstLang) { + logger.error("No target language specified!") + return false + } + + if (argv.cwd) { + ret.cwd = path.resolve(argv.cwd) + if (!exists((ret.cwd))) { + ret.debug && logger.error(`Invalid working directory ${argv.cwd}`) + ret.cwd = process.cwd() + } + } else { + ret.cwd = process.cwd() + } + + ret = { + ...ret, + ...{ variables: {} } + } + + return ret +} \ No newline at end of file diff --git a/packages/i18n/src/commands/glossary.ts b/packages/i18n/src/commands/glossary.ts new file mode 100644 index 00000000..b8ad246a --- /dev/null +++ b/packages/i18n/src/commands/glossary.ts @@ -0,0 +1,101 @@ +import * as CLI from 'yargs' +import * as path from 'path' + +const globBase = require('glob-base') +import { pairs } from '../lib/glossary' + +import { defaults, sanitize } from '../_cli' +import { parse } from '../options' +import { IOptions } from '../types' +import { logger } from '../' + +import { CONFIG_DEFAULT } from '@plastichub/osr-commons' +import { resolve } from "@plastichub/osr-commons/variables" +import * as pMap from 'p-map' + +const defaultOptions = (yargs: CLI.Argv) => { + return yargs.option('debug', { + default: false, + describe: 'debug messages', + type: 'boolean' + }).option('env_key', { + default: 'OSR-CONFIG', + describe: 'Environment key to the config path.' + }).option('src', { + describe: 'Path to the input file(s). Glob patters are supported', + }).option('dst', { + describe: 'Target file', + }).option('dst', { + describe: 'Path to the output file(s). Glob patters are supported', + default: '${SRC_DIR}/${DST_LANG}/${SRC_NAME}${SRC_EXT}' + }).option('srcLang', { + describe: 'Source language. Please run `osr-i18n info to see all supported languages`', + default: '' + }).option('cache', { + describe: 'Cache directory', + default: '${ROOT}/.osr/cache/i18n' + }).option('dstLang', { + describe: 'Target Language. Please run `osr-i18n info to see all supported languages`', + default: 'DE' + }).option('name', { + describe: 'Name of the glossary', + default: 'osr-i18n-store' + }).option('alt', { + default: false, + describe: 'Use alternate tokenizer, & instead of $', + type: 'boolean' + }) +} + +let options = (yargs: CLI.Argv) => defaultOptions(yargs) + + +export const register = (cli: CLI.Argv) => { + return cli.command('glossary ', 'Manages glossaries on DeepL', options, async (argv: CLI.Arguments) => { + defaults() + + if (argv.help) { return } + const args: any = argv + const config: any = CONFIG_DEFAULT(args.env_key) + const verb = argv.verb + if (verb === 'create') { + let options = sanitize(argv as any) as IOptions + if (!options) { + logger.error(`Invalid options, abort`); + return + } + + let opts = parse(options, args) + opts.config = config + if (!opts.srcInfo) { + logger.error(`Invalid source : ${argv.src}`, opts) + return + } + + if (opts.srcInfo.IS_GLOB) { + const glob_base = globBase(opts.src) + opts.pathVariables.ROOT = path.resolve(glob_base.base) + } else { + options.pathVariables.ROOT = path.resolve(opts.cwd) + } + + opts.pathVariables['DST_LANG'] = opts.dstLang.toLocaleLowerCase() + opts.pathVariables['SRC_LANG'] = opts.srcLang.toLocaleLowerCase() + opts.pathVariables['CWD'] = path.resolve(opts.cwd) + if (!opts.srcInfo || (opts.srcInfo && !opts.srcInfo.FILES)) { + logger.error(`Have no source files for ${opts.src}`) + return + } + if (opts.srcInfo && opts.srcInfo.FILES) { + await pMap(opts.srcInfo.FILES, async (files) => { + await pMap(files, (source: string) => { + //return create(options.srcLang, options.dstLang, options, source) + }, { concurrency: 1 }) + }) + } + } + if (verb === 'pairs' && argv.dst) { + await pairs(config.deepl, path.resolve(resolve(argv.dst as string))) + } + }) +} diff --git a/packages/i18n/src/commands/info.ts b/packages/i18n/src/commands/info.ts new file mode 100644 index 00000000..ea76b55e --- /dev/null +++ b/packages/i18n/src/commands/info.ts @@ -0,0 +1,54 @@ +import * as CLI from 'yargs'; +import { CONFIG_DEFAULT } from '@plastichub/osr-commons'; +import { logger } from '../' + +const defaultOptions = (yargs: CLI.Argv) => { + 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: CLI.Argv) => defaultOptions(yargs) + +export const register = (cli: CLI.Argv) => { + return cli.command('info', 'info', options, async (argv: CLI.Arguments) => { + if (argv.help) { return } + const args:any = argv + const src:any = CONFIG_DEFAULT(args.env_key) + logger.debug(`Reading OSR Config with key "${argv.env_key}"`, src.deepl) + logger.info(`Supported languages \n + | 'BG' + | 'CS' + | 'DA' + | 'DE' + | 'EL' + | 'EN-GB' + | 'EN-US' + | 'EN' + | 'ES' + | 'ET' + | 'FI' + | 'FR' + | 'HU' + | 'IT' + | 'JA' + | 'LT' + | 'LV' + | 'NL' + | 'PL' + | 'PT-PT' + | 'PT-BR' + | 'PT' + | 'RO' + | 'RU' + | 'SK' + | 'SL' + | 'SV' + | 'ZH' + `) + }) +} diff --git a/packages/i18n/src/commands/translate.ts b/packages/i18n/src/commands/translate.ts new file mode 100644 index 00000000..07d69f6b --- /dev/null +++ b/packages/i18n/src/commands/translate.ts @@ -0,0 +1,112 @@ +import * as CLI from 'yargs' +import { CONFIG_DEFAULT } from '@plastichub/osr-commons' + +import { translate } from '../lib/translate' +import { defaults, sanitize } from '../_cli' +import { IOptions } from '../types' +import { logger } from '../' + +const defaultOptions = (yargs: CLI.Argv) => { + return yargs.option('debug', { + default: false, + describe: 'debug messages', + type: 'boolean' + }).option('dry', { + default: false, + describe: 'Process files for debug purposes only.', + type: 'boolean' + }).option('env_key', { + default: 'OSR-CONFIG', + describe: 'Environment key to the config path.' + }).option('src', { + describe: 'Path to the input file(s). Glob patters are supported', + }).option('dst', { + describe: 'Path to the output file(s). Glob patters are supported', + default: '${SRC_DIR}/${DST_LANG}/${SRC_NAME}${SRC_EXT}' + }).option('formality', { + describe: 'Formality: default|more|less', + default: 'default' + }).option('srcLang', { + describe: 'Source language. Please run `osr-i18n info to see all supported languages`', + default: '' + }).option('cache', { + describe: 'Cache directory', + default: '${ROOT}/.osr/cache/i18n' + }).option('dstLang', { + describe: 'Target Language. Please run `osr-i18n info to see all supported languages`', + default: 'DE' + }).option('text', { + describe: 'Translate a given text only.' + }).option('all', { + describe: 'Return all translations, only supported for --text', + default: false, + type: 'boolean' + }).option('alt', { + default: false, + describe: 'Use alternate tokenizer, & instead of $', + type: 'boolean' + }).option('cache', { + default: false, + describe: 'Enable cache', + type: 'boolean' + }).option('glossary', { + default: false, + describe: 'Enable glossary files (see osr-i18n-store/glossary)', + type: 'boolean' + }).option('createGlossary', { + default: true, + describe: 'Automatically create glossary files (see osr-i18n-store/glossary)', + type: 'boolean' + }).option('filters', { + default: false, + describe: 'Comma separated list of filters. Currently implemented : `Hugo`', + type: 'string' + }).option('keys', { + describe: 'Comma separated list of keys to be translated for key/value files.', + type: 'string' + }).option('query', { + describe: 'JSONPath query for JSON and XLSX files. See https://jsonpath-plus.github.io/JSONPath/demo/, eg: $[*][0,4] to select the first and fifth column of each xlsx file', + type: 'string' + }).option('dumpJSON', { + describe: 'In case of XLSX files, dump the JSON raw data', + type: 'boolean', + default: false + }).option('storeRoot', { + describe: 'i18n store root for glossaries', + type: 'string', + default: '${OSR_ROOT}/i18n-store/' + }).option('store', { + describe: 'Language store cache file', + type: 'string', + default: '${OSR_ROOT}/i18n-store/store-${DST_LANG}.json' + }).option('csv-store', { + default: false, + describe: 'Generate CSV files for the store (manual editing)', + type: 'boolean' + }).option('stdout', { + default: true, + describe: 'Output to stdout', + type: 'boolean' + }).option('logLevel', { + default: 'warn', + describe: 'Log level: silly|debug|trace|info|warn|error|fatal', + type: 'string' + }) +} + +let options = (yargs: CLI.Argv) => defaultOptions(yargs) + +export const register = (cli: CLI.Argv) => { + return cli.command('translate', 'Translates text via DeepL', options, async (argv: CLI.Arguments) => { + defaults() + if (argv.help) { return } + const args: any = argv + const config: any = CONFIG_DEFAULT(args.env_key) + let options = sanitize(argv) as IOptions + if (!options) { + logger.error(`Invalid options, abort`) + return + } + await translate({ ...options, api_key: config.deepl.auth_key }) + }) +} diff --git a/packages/i18n/src/constants.ts b/packages/i18n/src/constants.ts new file mode 100644 index 00000000..6c154830 --- /dev/null +++ b/packages/i18n/src/constants.ts @@ -0,0 +1,7 @@ +export const MODULE_NAME = `OSR-i18n` + +export const GLOSSARY_FILE_EXT = '.csv' +export const GLOSSARY_FILES = '${OSR_ROOT}/i18n-store/glossary' +export const GLOSSARY_FILE_NAME = 'index.csv' +export const GLOSSARY_INFO_FILE = 'index_glossary.json' +export const GLOSSARY_INFO_FILE_SUFFIX = '_glossary.json' diff --git a/packages/i18n/src/index.ts b/packages/i18n/src/index.ts new file mode 100644 index 00000000..9b8c9d80 --- /dev/null +++ b/packages/i18n/src/index.ts @@ -0,0 +1,15 @@ +export * from './lib' +export { MODULE_NAME } from './constants' +export * from './options' + +export { Logger } from 'tslog' +import { createLogger } from '@plastichub/osr-log' +import { Logger } from 'tslog' + +export const logger:Logger = createLogger('OSR-Commons') + +export { sanitize } from './_cli' +export * from './types' +export * from './zod_schema' +export * from './zod_types' + diff --git a/packages/i18n/src/lib/async-iterator.ts b/packages/i18n/src/lib/async-iterator.ts new file mode 100644 index 00000000..cca0b6e1 --- /dev/null +++ b/packages/i18n/src/lib/async-iterator.ts @@ -0,0 +1,136 @@ +import { JSONPath } from 'jsonpath-plus' +import * as pThrottle from 'p-throttle' +import * as pMap from 'p-map' + +// import { logger } from '../../index' + +export type AsyncTransformer = (input: string, path: string) => Promise +export type ErrorCallback = (path: string, value: string, error: any) => void +export type FilterCallback = (input: string, path: string) => Promise +export type Filter = (input: string) => Promise + +export interface TransformOptions { + transform: AsyncTransformer + path: string + throttleDelay: number + concurrentTasks: number + errorCallback: ErrorCallback + filterCallback: FilterCallback +} + +export const isNumber: Filter = async (input: string) => (/^-?\d+(\.\d+)?$/.test(input)) +export const isBoolean: Filter = async (input: string) => /^(true|false)$/i.test(input) +export const isValidString: Filter = async (input: string) => !(input.trim() !== '') + +export const testFilters = (filters: Filter[]): FilterCallback => { + return async (input: string) => { + for (const filter of filters) { + if (await filter(input)) { + return false; + } + } + return true; + }; +}; + +export const defaultFilters = (filters: Filter[] = []) => + [ + isNumber, isBoolean, isValidString, ...filters + ] + +export async function transformObject( + obj: any, + transform: AsyncTransformer, + path: string, + throttleDelay: number, + concurrentTasks: number, + errorCallback: ErrorCallback, + testCallback: FilterCallback +): Promise { + const paths = JSONPath({ path, json: obj, resultType: 'pointer' }); + await pMap( + paths, + async (jsonPointer: any) => { + const keys = jsonPointer.slice(1).split('/') + await transformPath(obj, keys, transform, throttleDelay, concurrentTasks, jsonPointer, errorCallback, testCallback) + }, + { concurrency: concurrentTasks } + ) +} +export async function transformPath( + obj: any, + keys: string[], + transform: AsyncTransformer, + throttleDelay: number, + concurrentTasks: number, + currentPath: string, + errorCallback: ErrorCallback, + testCallback: FilterCallback +): Promise { + + let current = obj + + for (let i = 0; i < keys.length - 1; i++) { + current = current[keys[i]] + } + const lastKey = keys[keys.length - 1] + const throttle = pThrottle({ + limit: 1, + interval: throttleDelay, + }) + + if (typeof lastKey === 'string' && lastKey !== '') { + try { + const newKey = isValidString(lastKey) && !isNumber(lastKey) ? await throttle(transform)(lastKey, currentPath) : lastKey + if (newKey !== lastKey) { + current[newKey] = current[lastKey] + delete current[lastKey] + } + if (typeof current[newKey] === 'string' && current[newKey] !== '') { + if (await testCallback(current[newKey], `${currentPath}/${lastKey}`)) { + current[newKey] = await throttle(transform)(current[newKey], `${currentPath}/${lastKey}`) + } + } else if (typeof current[newKey] === 'object' && current[newKey] !== null) { + await transformObject(current[newKey], transform, '$.*', throttleDelay, concurrentTasks, errorCallback, testCallback) + } + } catch (error) { + errorCallback(currentPath, lastKey, error) + } + } +} + +const exampleTransformFunction: AsyncTransformer = async (input: string, path: string): Promise => { + if (input === 'random') throw new Error('API error') + console.log('translate : ' + input) + return input.toUpperCase() +} + +export const defaultError: ErrorCallback = (path: string, value: string, error: any): void => { + console.error(`Error at path: ${path}, value: ${value}, error: ${error}`) +} + +export const defaultOptions = (options: TransformOptions = {} as TransformOptions): TransformOptions => { + return { + transform: exampleTransformFunction, + path: options.path || '$[*][0,1,2]', + throttleDelay: 10, + concurrentTasks: 1, + errorCallback: defaultError, + filterCallback: testFilters(defaultFilters()), + ...options + } +} + +const data = {} + +const runTransformation = async (): Promise => { + // const testTransformFunction = testFilters([isNumber, isBoolean]) + const options: TransformOptions = defaultOptions(); + try { + await transformObject(data, options.transform, options.path, options.throttleDelay, options.concurrentTasks, options.errorCallback, options.filterCallback); + console.log('Transformed object:', data); + console.log('All transformations were successful.'); + } catch (error) { + console.error('Transformation failed:', error); + } +} \ No newline at end of file diff --git a/packages/i18n/src/lib/cache.ts b/packages/i18n/src/lib/cache.ts new file mode 100644 index 00000000..81ea2313 --- /dev/null +++ b/packages/i18n/src/lib/cache.ts @@ -0,0 +1,7 @@ +import * as cache from '@plastichub/osr-cache' + +/* +return cacache.get.info(CACHE, 'vendor-instagram').then((cache)=>{ + +}); +*/ \ No newline at end of file diff --git a/packages/i18n/src/lib/codes.ts b/packages/i18n/src/lib/codes.ts new file mode 100644 index 00000000..96d9e7ca --- /dev/null +++ b/packages/i18n/src/lib/codes.ts @@ -0,0 +1,1950 @@ +/** + * @author Phil Teare + * using wikipedia data + * @link https://stackoverflow.com/questions/3217492/list-of-language-codes-in-yaml-or-json + * @link https://loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt + * @link http://country.io/data/ + */ +export const iso_lang_codes = { + "ab": { + "name": "Abkhaz", + "nativeName": "аҧсуа" + }, + "aa": { + "name": "Afar", + "nativeName": "Afaraf" + }, + "af": { + "name": "Afrikaans", + "nativeName": "Afrikaans" + }, + "ak": { + "name": "Akan", + "nativeName": "Akan" + }, + "sq": { + "name": "Albanian", + "nativeName": "Shqip" + }, + "am": { + "name": "Amharic", + "nativeName": "አማርኛ" + }, + "ar": { + "name": "Arabic", + "nativeName": "العربية" + }, + "an": { + "name": "Aragonese", + "nativeName": "Aragonés" + }, + "hy": { + "name": "Armenian", + "nativeName": "Հայերեն" + }, + "as": { + "name": "Assamese", + "nativeName": "অসমীয়া" + }, + "av": { + "name": "Avaric", + "nativeName": "авар мацӀ, магӀарул мацӀ" + }, + "ae": { + "name": "Avestan", + "nativeName": "avesta" + }, + "ay": { + "name": "Aymara", + "nativeName": "aymar aru" + }, + "az": { + "name": "Azerbaijani", + "nativeName": "azərbaycan dili" + }, + "bm": { + "name": "Bambara", + "nativeName": "bamanankan" + }, + "ba": { + "name": "Bashkir", + "nativeName": "башҡорт теле" + }, + "eu": { + "name": "Basque", + "nativeName": "euskara, euskera" + }, + "be": { + "name": "Belarusian", + "nativeName": "Беларуская" + }, + "bn": { + "name": "Bengali", + "nativeName": "বাংলা" + }, + "bh": { + "name": "Bihari", + "nativeName": "भोजपुरी" + }, + "bi": { + "name": "Bislama", + "nativeName": "Bislama" + }, + "bs": { + "name": "Bosnian", + "nativeName": "bosanski jezik" + }, + "br": { + "name": "Breton", + "nativeName": "brezhoneg" + }, + "bg": { + "name": "Bulgarian", + "nativeName": "български език" + }, + "my": { + "name": "Burmese", + "nativeName": "ဗမာစာ" + }, + "ca": { + "name": "Catalan; Valencian", + "nativeName": "Català" + }, + "ch": { + "name": "Chamorro", + "nativeName": "Chamoru" + }, + "ce": { + "name": "Chechen", + "nativeName": "нохчийн мотт" + }, + "ny": { + "name": "Chichewa; Chewa; Nyanja", + "nativeName": "chiCheŵa, chinyanja" + }, + "zh": { + "name": "Chinese", + "nativeName": "中文 (Zhōngwén), 汉语, 漢語" + }, + "cv": { + "name": "Chuvash", + "nativeName": "чӑваш чӗлхи" + }, + "kw": { + "name": "Cornish", + "nativeName": "Kernewek" + }, + "co": { + "name": "Corsican", + "nativeName": "corsu, lingua corsa" + }, + "cr": { + "name": "Cree", + "nativeName": "ᓀᐦᐃᔭᐍᐏᐣ" + }, + "hr": { + "name": "Croatian", + "nativeName": "hrvatski" + }, + "cs": { + "name": "Czech", + "nativeName": "česky, čeština" + }, + "da": { + "name": "Danish", + "nativeName": "dansk" + }, + "dv": { + "name": "Divehi; Dhivehi; Maldivian;", + "nativeName": "ދިވެހި" + }, + "nl": { + "name": "Dutch", + "nativeName": "Nederlands, Vlaams" + }, + "en": { + "name": "English", + "nativeName": "English" + }, + "eo": { + "name": "Esperanto", + "nativeName": "Esperanto" + }, + "et": { + "name": "Estonian", + "nativeName": "eesti, eesti keel" + }, + "ee": { + "name": "Ewe", + "nativeName": "Eʋegbe" + }, + "fo": { + "name": "Faroese", + "nativeName": "føroyskt" + }, + "fj": { + "name": "Fijian", + "nativeName": "vosa Vakaviti" + }, + "fi": { + "name": "Finnish", + "nativeName": "suomi, suomen kieli" + }, + "fr": { + "name": "French", + "nativeName": "français, langue française" + }, + "ff": { + "name": "Fula; Fulah; Pulaar; Pular", + "nativeName": "Fulfulde, Pulaar, Pular" + }, + "gl": { + "name": "Galician", + "nativeName": "Galego" + }, + "ka": { + "name": "Georgian", + "nativeName": "ქართული" + }, + "de": { + "name": "German", + "nativeName": "Deutsch" + }, + "el": { + "name": "Greek, Modern", + "nativeName": "Ελληνικά" + }, + "gn": { + "name": "Guaraní", + "nativeName": "Avañeẽ" + }, + "gu": { + "name": "Gujarati", + "nativeName": "ગુજરાતી" + }, + "ht": { + "name": "Haitian; Haitian Creole", + "nativeName": "Kreyòl ayisyen" + }, + "ha": { + "name": "Hausa", + "nativeName": "Hausa, هَوُسَ" + }, + "he": { + "name": "Hebrew (modern)", + "nativeName": "עברית" + }, + "hz": { + "name": "Herero", + "nativeName": "Otjiherero" + }, + "hi": { + "name": "Hindi", + "nativeName": "हिन्दी, हिंदी" + }, + "ho": { + "name": "Hiri Motu", + "nativeName": "Hiri Motu" + }, + "hu": { + "name": "Hungarian", + "nativeName": "Magyar" + }, + "ia": { + "name": "Interlingua", + "nativeName": "Interlingua" + }, + "id": { + "name": "Indonesian", + "nativeName": "Bahasa Indonesia" + }, + "ie": { + "name": "Interlingue", + "nativeName": "Originally called Occidental; then Interlingue after WWII" + }, + "ga": { + "name": "Irish", + "nativeName": "Gaeilge" + }, + "ig": { + "name": "Igbo", + "nativeName": "Asụsụ Igbo" + }, + "ik": { + "name": "Inupiaq", + "nativeName": "Iñupiaq, Iñupiatun" + }, + "io": { + "name": "Ido", + "nativeName": "Ido" + }, + "is": { + "name": "Icelandic", + "nativeName": "Íslenska" + }, + "it": { + "name": "Italian", + "nativeName": "Italiano" + }, + "iu": { + "name": "Inuktitut", + "nativeName": "ᐃᓄᒃᑎᑐᑦ" + }, + "ja": { + "name": "Japanese", + "nativeName": "日本語 (にほんご/にっぽんご)" + }, + "jv": { + "name": "Javanese", + "nativeName": "basa Jawa" + }, + "kl": { + "name": "Kalaallisut, Greenlandic", + "nativeName": "kalaallisut, kalaallit oqaasii" + }, + "kn": { + "name": "Kannada", + "nativeName": "ಕನ್ನಡ" + }, + "kr": { + "name": "Kanuri", + "nativeName": "Kanuri" + }, + "ks": { + "name": "Kashmiri", + "nativeName": "कश्मीरी, كشميري‎" + }, + "kk": { + "name": "Kazakh", + "nativeName": "Қазақ тілі" + }, + "km": { + "name": "Khmer", + "nativeName": "ភាសាខ្មែរ" + }, + "ki": { + "name": "Kikuyu, Gikuyu", + "nativeName": "Gĩkũyũ" + }, + "rw": { + "name": "Kinyarwanda", + "nativeName": "Ikinyarwanda" + }, + "ky": { + "name": "Kirghiz, Kyrgyz", + "nativeName": "кыргыз тили" + }, + "kv": { + "name": "Komi", + "nativeName": "коми кыв" + }, + "kg": { + "name": "Kongo", + "nativeName": "KiKongo" + }, + "ko": { + "name": "Korean", + "nativeName": "한국어 (韓國語), 조선말 (朝鮮語)" + }, + "ku": { + "name": "Kurdish", + "nativeName": "Kurdî, كوردی‎" + }, + "kj": { + "name": "Kwanyama, Kuanyama", + "nativeName": "Kuanyama" + }, + "la": { + "name": "Latin", + "nativeName": "latine, lingua latina" + }, + "lb": { + "name": "Luxembourgish, Letzeburgesch", + "nativeName": "Lëtzebuergesch" + }, + "lg": { + "name": "Luganda", + "nativeName": "Luganda" + }, + "li": { + "name": "Limburgish, Limburgan, Limburger", + "nativeName": "Limburgs" + }, + "ln": { + "name": "Lingala", + "nativeName": "Lingála" + }, + "lo": { + "name": "Lao", + "nativeName": "ພາສາລາວ" + }, + "lt": { + "name": "Lithuanian", + "nativeName": "lietuvių kalba" + }, + "lu": { + "name": "Luba-Katanga", + "nativeName": "" + }, + "lv": { + "name": "Latvian", + "nativeName": "latviešu valoda" + }, + "gv": { + "name": "Manx", + "nativeName": "Gaelg, Gailck" + }, + "mk": { + "name": "Macedonian", + "nativeName": "македонски јазик" + }, + "mg": { + "name": "Malagasy", + "nativeName": "Malagasy fiteny" + }, + "ms": { + "name": "Malay", + "nativeName": "bahasa Melayu, بهاس ملايو‎" + }, + "ml": { + "name": "Malayalam", + "nativeName": "മലയാളം" + }, + "mt": { + "name": "Maltese", + "nativeName": "Malti" + }, + "mi": { + "name": "Māori", + "nativeName": "te reo Māori" + }, + "mr": { + "name": "Marathi (Marāṭhī)", + "nativeName": "मराठी" + }, + "mh": { + "name": "Marshallese", + "nativeName": "Kajin M̧ajeļ" + }, + "mn": { + "name": "Mongolian", + "nativeName": "монгол" + }, + "na": { + "name": "Nauru", + "nativeName": "Ekakairũ Naoero" + }, + "nv": { + "name": "Navajo, Navaho", + "nativeName": "Diné bizaad, Dinékʼehǰí" + }, + "nb": { + "name": "Norwegian Bokmål", + "nativeName": "Norsk bokmål" + }, + "nd": { + "name": "North Ndebele", + "nativeName": "isiNdebele" + }, + "ne": { + "name": "Nepali", + "nativeName": "नेपाली" + }, + "ng": { + "name": "Ndonga", + "nativeName": "Owambo" + }, + "nn": { + "name": "Norwegian Nynorsk", + "nativeName": "Norsk nynorsk" + }, + "no": { + "name": "Norwegian", + "nativeName": "Norsk" + }, + "ii": { + "name": "Nuosu", + "nativeName": "ꆈꌠ꒿ Nuosuhxop" + }, + "nr": { + "name": "South Ndebele", + "nativeName": "isiNdebele" + }, + "oc": { + "name": "Occitan", + "nativeName": "Occitan" + }, + "oj": { + "name": "Ojibwe, Ojibwa", + "nativeName": "ᐊᓂᔑᓈᐯᒧᐎᓐ" + }, + "cu": { + "name": "Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic", + "nativeName": "ѩзыкъ словѣньскъ" + }, + "om": { + "name": "Oromo", + "nativeName": "Afaan Oromoo" + }, + "or": { + "name": "Oriya", + "nativeName": "ଓଡ଼ିଆ" + }, + "os": { + "name": "Ossetian, Ossetic", + "nativeName": "ирон æвзаг" + }, + "pa": { + "name": "Panjabi, Punjabi", + "nativeName": "ਪੰਜਾਬੀ, پنجابی‎" + }, + "pi": { + "name": "Pāli", + "nativeName": "पाऴि" + }, + "fa": { + "name": "Persian", + "nativeName": "فارسی" + }, + "pl": { + "name": "Polish", + "nativeName": "polski" + }, + "ps": { + "name": "Pashto, Pushto", + "nativeName": "پښتو" + }, + "pt": { + "name": "Portuguese", + "nativeName": "Português" + }, + "qu": { + "name": "Quechua", + "nativeName": "Runa Simi, Kichwa" + }, + "rm": { + "name": "Romansh", + "nativeName": "rumantsch grischun" + }, + "rn": { + "name": "Kirundi", + "nativeName": "kiRundi" + }, + "ro": { + "name": "Romanian, Moldavian, Moldovan", + "nativeName": "română" + }, + "ru": { + "name": "Russian", + "nativeName": "русский язык" + }, + "sa": { + "name": "Sanskrit (Saṁskṛta)", + "nativeName": "संस्कृतम्" + }, + "sc": { + "name": "Sardinian", + "nativeName": "sardu" + }, + "sd": { + "name": "Sindhi", + "nativeName": "सिन्धी, سنڌي، سندھی‎" + }, + "se": { + "name": "Northern Sami", + "nativeName": "Davvisámegiella" + }, + "sm": { + "name": "Samoan", + "nativeName": "gagana faa Samoa" + }, + "sg": { + "name": "Sango", + "nativeName": "yângâ tî sängö" + }, + "sr": { + "name": "Serbian", + "nativeName": "српски језик" + }, + "gd": { + "name": "Scottish Gaelic; Gaelic", + "nativeName": "Gàidhlig" + }, + "sn": { + "name": "Shona", + "nativeName": "chiShona" + }, + "si": { + "name": "Sinhala, Sinhalese", + "nativeName": "සිංහල" + }, + "sk": { + "name": "Slovak", + "nativeName": "slovenčina" + }, + "sl": { + "name": "Slovene", + "nativeName": "slovenščina" + }, + "so": { + "name": "Somali", + "nativeName": "Soomaaliga, af Soomaali" + }, + "st": { + "name": "Southern Sotho", + "nativeName": "Sesotho" + }, + "es": { + "name": "Spanish; Castilian", + "nativeName": "español, castellano" + }, + "su": { + "name": "Sundanese", + "nativeName": "Basa Sunda" + }, + "sw": { + "name": "Swahili", + "nativeName": "Kiswahili" + }, + "ss": { + "name": "Swati", + "nativeName": "SiSwati" + }, + "sv": { + "name": "Swedish", + "nativeName": "svenska" + }, + "ta": { + "name": "Tamil", + "nativeName": "தமிழ்" + }, + "te": { + "name": "Telugu", + "nativeName": "తెలుగు" + }, + "tg": { + "name": "Tajik", + "nativeName": "тоҷикӣ, toğikī, تاجیکی‎" + }, + "th": { + "name": "Thai", + "nativeName": "ไทย" + }, + "ti": { + "name": "Tigrinya", + "nativeName": "ትግርኛ" + }, + "bo": { + "name": "Tibetan Standard, Tibetan, Central", + "nativeName": "བོད་ཡིག" + }, + "tk": { + "name": "Turkmen", + "nativeName": "Türkmen, Түркмен" + }, + "tl": { + "name": "Tagalog", + "nativeName": "Wikang Tagalog, ᜏᜒᜃᜅ᜔ ᜆᜄᜎᜓᜄ᜔" + }, + "tn": { + "name": "Tswana", + "nativeName": "Setswana" + }, + "to": { + "name": "Tonga (Tonga Islands)", + "nativeName": "faka Tonga" + }, + "tr": { + "name": "Turkish", + "nativeName": "Türkçe" + }, + "ts": { + "name": "Tsonga", + "nativeName": "Xitsonga" + }, + "tt": { + "name": "Tatar", + "nativeName": "татарча, tatarça, تاتارچا‎" + }, + "tw": { + "name": "Twi", + "nativeName": "Twi" + }, + "ty": { + "name": "Tahitian", + "nativeName": "Reo Tahiti" + }, + "ug": { + "name": "Uighur, Uyghur", + "nativeName": "Uyƣurqə, ئۇيغۇرچە‎" + }, + "uk": { + "name": "Ukrainian", + "nativeName": "українська" + }, + "ur": { + "name": "Urdu", + "nativeName": "اردو" + }, + "uz": { + "name": "Uzbek", + "nativeName": "zbek, Ўзбек, أۇزبېك‎" + }, + "ve": { + "name": "Venda", + "nativeName": "Tshivenḓa" + }, + "vi": { + "name": "Vietnamese", + "nativeName": "Tiếng Việt" + }, + "vo": { + "name": "Volapük", + "nativeName": "Volapük" + }, + "wa": { + "name": "Walloon", + "nativeName": "Walon" + }, + "cy": { + "name": "Welsh", + "nativeName": "Cymraeg" + }, + "wo": { + "name": "Wolof", + "nativeName": "Wollof" + }, + "fy": { + "name": "Western Frisian", + "nativeName": "Frysk" + }, + "xh": { + "name": "Xhosa", + "nativeName": "isiXhosa" + }, + "yi": { + "name": "Yiddish", + "nativeName": "ייִדיש" + }, + "yo": { + "name": "Yoruba", + "nativeName": "Yorùbá" + }, + "za": { + "name": "Zhuang, Chuang", + "nativeName": "Saɯ cueŋƅ, Saw cuengh" + } +} + +export const country_codes = [ + { + "name": "Afghanistan", + "dial_code": "+93", + "code": "AF" + }, + { + "name": "Aland Islands", + "dial_code": "+358", + "code": "AX" + }, + { + "name": "Albania", + "dial_code": "+355", + "code": "AL" + }, + { + "name": "Algeria", + "dial_code": "+213", + "code": "DZ" + }, + { + "name": "AmericanSamoa", + "dial_code": "+1684", + "code": "AS" + }, + { + "name": "Andorra", + "dial_code": "+376", + "code": "AD" + }, + { + "name": "Angola", + "dial_code": "+244", + "code": "AO" + }, + { + "name": "Anguilla", + "dial_code": "+1264", + "code": "AI" + }, + { + "name": "Antarctica", + "dial_code": "+672", + "code": "AQ" + }, + { + "name": "Antigua and Barbuda", + "dial_code": "+1268", + "code": "AG" + }, + { + "name": "Argentina", + "dial_code": "+54", + "code": "AR" + }, + { + "name": "Armenia", + "dial_code": "+374", + "code": "AM" + }, + { + "name": "Aruba", + "dial_code": "+297", + "code": "AW" + }, + { + "name": "Australia", + "dial_code": "+61", + "code": "AU" + }, + { + "name": "Austria", + "dial_code": "+43", + "code": "AT" + }, + { + "name": "Azerbaijan", + "dial_code": "+994", + "code": "AZ" + }, + { + "name": "Bahamas", + "dial_code": "+1242", + "code": "BS" + }, + { + "name": "Bahrain", + "dial_code": "+973", + "code": "BH" + }, + { + "name": "Bangladesh", + "dial_code": "+880", + "code": "BD" + }, + { + "name": "Barbados", + "dial_code": "+1246", + "code": "BB" + }, + { + "name": "Belarus", + "dial_code": "+375", + "code": "BY" + }, + { + "name": "Belgium", + "dial_code": "+32", + "code": "BE" + }, + { + "name": "Belize", + "dial_code": "+501", + "code": "BZ" + }, + { + "name": "Benin", + "dial_code": "+229", + "code": "BJ" + }, + { + "name": "Bermuda", + "dial_code": "+1441", + "code": "BM" + }, + { + "name": "Bhutan", + "dial_code": "+975", + "code": "BT" + }, + { + "name": "Bolivia, Plurinational State of", + "dial_code": "+591", + "code": "BO" + }, + { + "name": "Bosnia and Herzegovina", + "dial_code": "+387", + "code": "BA" + }, + { + "name": "Botswana", + "dial_code": "+267", + "code": "BW" + }, + { + "name": "Brazil", + "dial_code": "+55", + "code": "BR" + }, + { + "name": "British Indian Ocean Territory", + "dial_code": "+246", + "code": "IO" + }, + { + "name": "Brunei Darussalam", + "dial_code": "+673", + "code": "BN" + }, + { + "name": "Bulgaria", + "dial_code": "+359", + "code": "BG" + }, + { + "name": "Burkina Faso", + "dial_code": "+226", + "code": "BF" + }, + { + "name": "Burundi", + "dial_code": "+257", + "code": "BI" + }, + { + "name": "Cambodia", + "dial_code": "+855", + "code": "KH" + }, + { + "name": "Cameroon", + "dial_code": "+237", + "code": "CM" + }, + { + "name": "Canada", + "dial_code": "+1", + "code": "CA" + }, + { + "name": "Cape Verde", + "dial_code": "+238", + "code": "CV" + }, + { + "name": "Cayman Islands", + "dial_code": "+ 345", + "code": "KY" + }, + { + "name": "Central African Republic", + "dial_code": "+236", + "code": "CF" + }, + { + "name": "Chad", + "dial_code": "+235", + "code": "TD" + }, + { + "name": "Chile", + "dial_code": "+56", + "code": "CL" + }, + { + "name": "China", + "dial_code": "+86", + "code": "CN" + }, + { + "name": "Christmas Island", + "dial_code": "+61", + "code": "CX" + }, + { + "name": "Cocos (Keeling) Islands", + "dial_code": "+61", + "code": "CC" + }, + { + "name": "Colombia", + "dial_code": "+57", + "code": "CO" + }, + { + "name": "Comoros", + "dial_code": "+269", + "code": "KM" + }, + { + "name": "Congo", + "dial_code": "+242", + "code": "CG" + }, + { + "name": "Congo, The Democratic Republic of the Congo", + "dial_code": "+243", + "code": "CD" + }, + { + "name": "Cook Islands", + "dial_code": "+682", + "code": "CK" + }, + { + "name": "Costa Rica", + "dial_code": "+506", + "code": "CR" + }, + { + "name": "Cote d'Ivoire", + "dial_code": "+225", + "code": "CI" + }, + { + "name": "Croatia", + "dial_code": "+385", + "code": "HR" + }, + { + "name": "Cuba", + "dial_code": "+53", + "code": "CU" + }, + { + "name": "Cyprus", + "dial_code": "+357", + "code": "CY" + }, + { + "name": "Czech Republic", + "dial_code": "+420", + "code": "CZ" + }, + { + "name": "Denmark", + "dial_code": "+45", + "code": "DK" + }, + { + "name": "Djibouti", + "dial_code": "+253", + "code": "DJ" + }, + { + "name": "Dominica", + "dial_code": "+1767", + "code": "DM" + }, + { + "name": "Dominican Republic", + "dial_code": "+1849", + "code": "DO" + }, + { + "name": "Ecuador", + "dial_code": "+593", + "code": "EC" + }, + { + "name": "Egypt", + "dial_code": "+20", + "code": "EG" + }, + { + "name": "El Salvador", + "dial_code": "+503", + "code": "SV" + }, + { + "name": "Equatorial Guinea", + "dial_code": "+240", + "code": "GQ" + }, + { + "name": "Eritrea", + "dial_code": "+291", + "code": "ER" + }, + { + "name": "Estonia", + "dial_code": "+372", + "code": "EE" + }, + { + "name": "Ethiopia", + "dial_code": "+251", + "code": "ET" + }, + { + "name": "Falkland Islands (Malvinas)", + "dial_code": "+500", + "code": "FK" + }, + { + "name": "Faroe Islands", + "dial_code": "+298", + "code": "FO" + }, + { + "name": "Fiji", + "dial_code": "+679", + "code": "FJ" + }, + { + "name": "Finland", + "dial_code": "+358", + "code": "FI" + }, + { + "name": "France", + "dial_code": "+33", + "code": "FR" + }, + { + "name": "French Guiana", + "dial_code": "+594", + "code": "GF" + }, + { + "name": "French Polynesia", + "dial_code": "+689", + "code": "PF" + }, + { + "name": "Gabon", + "dial_code": "+241", + "code": "GA" + }, + { + "name": "Gambia", + "dial_code": "+220", + "code": "GM" + }, + { + "name": "Georgia", + "dial_code": "+995", + "code": "GE" + }, + { + "name": "Germany", + "dial_code": "+49", + "code": "DE" + }, + { + "name": "Ghana", + "dial_code": "+233", + "code": "GH" + }, + { + "name": "Gibraltar", + "dial_code": "+350", + "code": "GI" + }, + { + "name": "Greece", + "dial_code": "+30", + "code": "GR" + }, + { + "name": "Greenland", + "dial_code": "+299", + "code": "GL" + }, + { + "name": "Grenada", + "dial_code": "+1473", + "code": "GD" + }, + { + "name": "Guadeloupe", + "dial_code": "+590", + "code": "GP" + }, + { + "name": "Guam", + "dial_code": "+1671", + "code": "GU" + }, + { + "name": "Guatemala", + "dial_code": "+502", + "code": "GT" + }, + { + "name": "Guernsey", + "dial_code": "+44", + "code": "GG" + }, + { + "name": "Guinea", + "dial_code": "+224", + "code": "GN" + }, + { + "name": "Guinea-Bissau", + "dial_code": "+245", + "code": "GW" + }, + { + "name": "Guyana", + "dial_code": "+595", + "code": "GY" + }, + { + "name": "Haiti", + "dial_code": "+509", + "code": "HT" + }, + { + "name": "Holy See (Vatican City State)", + "dial_code": "+379", + "code": "VA" + }, + { + "name": "Honduras", + "dial_code": "+504", + "code": "HN" + }, + { + "name": "Hong Kong", + "dial_code": "+852", + "code": "HK" + }, + { + "name": "Hungary", + "dial_code": "+36", + "code": "HU" + }, + { + "name": "Iceland", + "dial_code": "+354", + "code": "IS" + }, + { + "name": "India", + "dial_code": "+91", + "code": "IN" + }, + { + "name": "Indonesia", + "dial_code": "+62", + "code": "ID" + }, + { + "name": "Iran, Islamic Republic of Persian Gulf", + "dial_code": "+98", + "code": "IR" + }, + { + "name": "Iraq", + "dial_code": "+964", + "code": "IQ" + }, + { + "name": "Ireland", + "dial_code": "+353", + "code": "IE" + }, + { + "name": "Isle of Man", + "dial_code": "+44", + "code": "IM" + }, + { + "name": "Israel", + "dial_code": "+972", + "code": "IL" + }, + { + "name": "Italy", + "dial_code": "+39", + "code": "IT" + }, + { + "name": "Jamaica", + "dial_code": "+1876", + "code": "JM" + }, + { + "name": "Japan", + "dial_code": "+81", + "code": "JP" + }, + { + "name": "Jersey", + "dial_code": "+44", + "code": "JE" + }, + { + "name": "Jordan", + "dial_code": "+962", + "code": "JO" + }, + { + "name": "Kazakhstan", + "dial_code": "+77", + "code": "KZ" + }, + { + "name": "Kenya", + "dial_code": "+254", + "code": "KE" + }, + { + "name": "Kiribati", + "dial_code": "+686", + "code": "KI" + }, + { + "name": "Korea, Democratic People's Republic of Korea", + "dial_code": "+850", + "code": "KP" + }, + { + "name": "Korea, Republic of South Korea", + "dial_code": "+82", + "code": "KR" + }, + { + "name": "Kuwait", + "dial_code": "+965", + "code": "KW" + }, + { + "name": "Kyrgyzstan", + "dial_code": "+996", + "code": "KG" + }, + { + "name": "Laos", + "dial_code": "+856", + "code": "LA" + }, + { + "name": "Latvia", + "dial_code": "+371", + "code": "LV" + }, + { + "name": "Lebanon", + "dial_code": "+961", + "code": "LB" + }, + { + "name": "Lesotho", + "dial_code": "+266", + "code": "LS" + }, + { + "name": "Liberia", + "dial_code": "+231", + "code": "LR" + }, + { + "name": "Libyan Arab Jamahiriya", + "dial_code": "+218", + "code": "LY" + }, + { + "name": "Liechtenstein", + "dial_code": "+423", + "code": "LI" + }, + { + "name": "Lithuania", + "dial_code": "+370", + "code": "LT" + }, + { + "name": "Luxembourg", + "dial_code": "+352", + "code": "LU" + }, + { + "name": "Macao", + "dial_code": "+853", + "code": "MO" + }, + { + "name": "Macedonia", + "dial_code": "+389", + "code": "MK" + }, + { + "name": "Madagascar", + "dial_code": "+261", + "code": "MG" + }, + { + "name": "Malawi", + "dial_code": "+265", + "code": "MW" + }, + { + "name": "Malaysia", + "dial_code": "+60", + "code": "MY" + }, + { + "name": "Maldives", + "dial_code": "+960", + "code": "MV" + }, + { + "name": "Mali", + "dial_code": "+223", + "code": "ML" + }, + { + "name": "Malta", + "dial_code": "+356", + "code": "MT" + }, + { + "name": "Marshall Islands", + "dial_code": "+692", + "code": "MH" + }, + { + "name": "Martinique", + "dial_code": "+596", + "code": "MQ" + }, + { + "name": "Mauritania", + "dial_code": "+222", + "code": "MR" + }, + { + "name": "Mauritius", + "dial_code": "+230", + "code": "MU" + }, + { + "name": "Mayotte", + "dial_code": "+262", + "code": "YT" + }, + { + "name": "Mexico", + "dial_code": "+52", + "code": "MX" + }, + { + "name": "Micronesia, Federated States of Micronesia", + "dial_code": "+691", + "code": "FM" + }, + { + "name": "Moldova", + "dial_code": "+373", + "code": "MD" + }, + { + "name": "Monaco", + "dial_code": "+377", + "code": "MC" + }, + { + "name": "Mongolia", + "dial_code": "+976", + "code": "MN" + }, + { + "name": "Montenegro", + "dial_code": "+382", + "code": "ME" + }, + { + "name": "Montserrat", + "dial_code": "+1664", + "code": "MS" + }, + { + "name": "Morocco", + "dial_code": "+212", + "code": "MA" + }, + { + "name": "Mozambique", + "dial_code": "+258", + "code": "MZ" + }, + { + "name": "Myanmar", + "dial_code": "+95", + "code": "MM" + }, + { + "name": "Namibia", + "dial_code": "+264", + "code": "NA" + }, + { + "name": "Nauru", + "dial_code": "+674", + "code": "NR" + }, + { + "name": "Nepal", + "dial_code": "+977", + "code": "NP" + }, + { + "name": "Netherlands", + "dial_code": "+31", + "code": "NL" + }, + { + "name": "Netherlands Antilles", + "dial_code": "+599", + "code": "AN" + }, + { + "name": "New Caledonia", + "dial_code": "+687", + "code": "NC" + }, + { + "name": "New Zealand", + "dial_code": "+64", + "code": "NZ" + }, + { + "name": "Nicaragua", + "dial_code": "+505", + "code": "NI" + }, + { + "name": "Niger", + "dial_code": "+227", + "code": "NE" + }, + { + "name": "Nigeria", + "dial_code": "+234", + "code": "NG" + }, + { + "name": "Niue", + "dial_code": "+683", + "code": "NU" + }, + { + "name": "Norfolk Island", + "dial_code": "+672", + "code": "NF" + }, + { + "name": "Northern Mariana Islands", + "dial_code": "+1670", + "code": "MP" + }, + { + "name": "Norway", + "dial_code": "+47", + "code": "NO" + }, + { + "name": "Oman", + "dial_code": "+968", + "code": "OM" + }, + { + "name": "Pakistan", + "dial_code": "+92", + "code": "PK" + }, + { + "name": "Palau", + "dial_code": "+680", + "code": "PW" + }, + { + "name": "Palestinian Territory, Occupied", + "dial_code": "+970", + "code": "PS" + }, + { + "name": "Panama", + "dial_code": "+507", + "code": "PA" + }, + { + "name": "Papua New Guinea", + "dial_code": "+675", + "code": "PG" + }, + { + "name": "Paraguay", + "dial_code": "+595", + "code": "PY" + }, + { + "name": "Peru", + "dial_code": "+51", + "code": "PE" + }, + { + "name": "Philippines", + "dial_code": "+63", + "code": "PH" + }, + { + "name": "Pitcairn", + "dial_code": "+872", + "code": "PN" + }, + { + "name": "Poland", + "dial_code": "+48", + "code": "PL" + }, + { + "name": "Portugal", + "dial_code": "+351", + "code": "PT" + }, + { + "name": "Puerto Rico", + "dial_code": "+1939", + "code": "PR" + }, + { + "name": "Qatar", + "dial_code": "+974", + "code": "QA" + }, + { + "name": "Romania", + "dial_code": "+40", + "code": "RO" + }, + { + "name": "Russia", + "dial_code": "+7", + "code": "RU" + }, + { + "name": "Rwanda", + "dial_code": "+250", + "code": "RW" + }, + { + "name": "Reunion", + "dial_code": "+262", + "code": "RE" + }, + { + "name": "Saint Barthelemy", + "dial_code": "+590", + "code": "BL" + }, + { + "name": "Saint Helena, Ascension and Tristan Da Cunha", + "dial_code": "+290", + "code": "SH" + }, + { + "name": "Saint Kitts and Nevis", + "dial_code": "+1869", + "code": "KN" + }, + { + "name": "Saint Lucia", + "dial_code": "+1758", + "code": "LC" + }, + { + "name": "Saint Martin", + "dial_code": "+590", + "code": "MF" + }, + { + "name": "Saint Pierre and Miquelon", + "dial_code": "+508", + "code": "PM" + }, + { + "name": "Saint Vincent and the Grenadines", + "dial_code": "+1784", + "code": "VC" + }, + { + "name": "Samoa", + "dial_code": "+685", + "code": "WS" + }, + { + "name": "San Marino", + "dial_code": "+378", + "code": "SM" + }, + { + "name": "Sao Tome and Principe", + "dial_code": "+239", + "code": "ST" + }, + { + "name": "Saudi Arabia", + "dial_code": "+966", + "code": "SA" + }, + { + "name": "Senegal", + "dial_code": "+221", + "code": "SN" + }, + { + "name": "Serbia", + "dial_code": "+381", + "code": "RS" + }, + { + "name": "Seychelles", + "dial_code": "+248", + "code": "SC" + }, + { + "name": "Sierra Leone", + "dial_code": "+232", + "code": "SL" + }, + { + "name": "Singapore", + "dial_code": "+65", + "code": "SG" + }, + { + "name": "Slovakia", + "dial_code": "+421", + "code": "SK" + }, + { + "name": "Slovenia", + "dial_code": "+386", + "code": "SI" + }, + { + "name": "Solomon Islands", + "dial_code": "+677", + "code": "SB" + }, + { + "name": "Somalia", + "dial_code": "+252", + "code": "SO" + }, + { + "name": "South Africa", + "dial_code": "+27", + "code": "ZA" + }, + { + "name": "South Sudan", + "dial_code": "+211", + "code": "SS" + }, + { + "name": "South Georgia and the South Sandwich Islands", + "dial_code": "+500", + "code": "GS" + }, + { + "name": "Spain", + "dial_code": "+34", + "code": "ES" + }, + { + "name": "Sri Lanka", + "dial_code": "+94", + "code": "LK" + }, + { + "name": "Sudan", + "dial_code": "+249", + "code": "SD" + }, + { + "name": "Suriname", + "dial_code": "+597", + "code": "SR" + }, + { + "name": "Svalbard and Jan Mayen", + "dial_code": "+47", + "code": "SJ" + }, + { + "name": "Swaziland", + "dial_code": "+268", + "code": "SZ" + }, + { + "name": "Sweden", + "dial_code": "+46", + "code": "SE" + }, + { + "name": "Switzerland", + "dial_code": "+41", + "code": "CH" + }, + { + "name": "Syrian Arab Republic", + "dial_code": "+963", + "code": "SY" + }, + { + "name": "Taiwan", + "dial_code": "+886", + "code": "TW" + }, + { + "name": "Tajikistan", + "dial_code": "+992", + "code": "TJ" + }, + { + "name": "Tanzania, United Republic of Tanzania", + "dial_code": "+255", + "code": "TZ" + }, + { + "name": "Thailand", + "dial_code": "+66", + "code": "TH" + }, + { + "name": "Timor-Leste", + "dial_code": "+670", + "code": "TL" + }, + { + "name": "Togo", + "dial_code": "+228", + "code": "TG" + }, + { + "name": "Tokelau", + "dial_code": "+690", + "code": "TK" + }, + { + "name": "Tonga", + "dial_code": "+676", + "code": "TO" + }, + { + "name": "Trinidad and Tobago", + "dial_code": "+1868", + "code": "TT" + }, + { + "name": "Tunisia", + "dial_code": "+216", + "code": "TN" + }, + { + "name": "Turkey", + "dial_code": "+90", + "code": "TR" + }, + { + "name": "Turkmenistan", + "dial_code": "+993", + "code": "TM" + }, + { + "name": "Turks and Caicos Islands", + "dial_code": "+1649", + "code": "TC" + }, + { + "name": "Tuvalu", + "dial_code": "+688", + "code": "TV" + }, + { + "name": "Uganda", + "dial_code": "+256", + "code": "UG" + }, + { + "name": "Ukraine", + "dial_code": "+380", + "code": "UA" + }, + { + "name": "United Arab Emirates", + "dial_code": "+971", + "code": "AE" + }, + { + "name": "United Kingdom", + "dial_code": "+44", + "code": "GB" + }, + { + "name": "United States", + "dial_code": "+1", + "code": "US" + }, + { + "name": "Uruguay", + "dial_code": "+598", + "code": "UY" + }, + { + "name": "Uzbekistan", + "dial_code": "+998", + "code": "UZ" + }, + { + "name": "Vanuatu", + "dial_code": "+678", + "code": "VU" + }, + { + "name": "Venezuela, Bolivarian Republic of Venezuela", + "dial_code": "+58", + "code": "VE" + }, + { + "name": "Vietnam", + "dial_code": "+84", + "code": "VN" + }, + { + "name": "Virgin Islands, British", + "dial_code": "+1284", + "code": "VG" + }, + { + "name": "Virgin Islands, U.S.", + "dial_code": "+1340", + "code": "VI" + }, + { + "name": "Wallis and Futuna", + "dial_code": "+681", + "code": "WF" + }, + { + "name": "Yemen", + "dial_code": "+967", + "code": "YE" + }, + { + "name": "Zambia", + "dial_code": "+260", + "code": "ZM" + }, + { + "name": "Zimbabwe", + "dial_code": "+263", + "code": "ZW" + } +] \ No newline at end of file diff --git a/packages/i18n/src/lib/deepl.ts b/packages/i18n/src/lib/deepl.ts new file mode 100644 index 00000000..1fbfafa8 --- /dev/null +++ b/packages/i18n/src/lib/deepl.ts @@ -0,0 +1,136 @@ +import axios from 'axios' +import { stringify } from 'querystring' + +// https://github.com/DeepLcom/deepl-node/tree/main/src +export interface IGlossary { + glossaryId: string; + name: string; + ready: boolean; + sourceLang: DeepLLanguages; + targetLang: DeepLLanguages; + creationTime: string; + entryCount: number; + entries: string; + hash: string; +} + + +export interface IDeepLOptions { + free_api: Boolean; + auth_key: string; + text: string; + source_lang?: DeepLLanguages; + target_lang: DeepLLanguages; + split_sentences?: '0' | '1' | 'nonewlines'; + preserve_formatting?: '0' | '1'; + formality?: 'default' | 'more' | 'less'; + tag_handling?: string[]; + non_splitting_tags?: string[]; + outline_detection?: string; + splitting_tags?: string[]; + ignore_tags?: string[]; + glossary_id?: string; +} + + + +export interface IDeepLResponse { + translations: { + detected_source_language: string; + text: string; + }[]; +} + +export const translate_deeplT = async ( + parameters: IDeepLOptions +) => { + // const sub_domain = parameters.free_api ? 'api-free' : 'api'; + try { + const params = "preserve_formatting=1&tag_handling=xml&auth_key=4f6441ab-8e09-48d3-9031-3ca5cd463f79&formality=default&free_api=false&text=Variant&target_lang=de&source_lang=en" + const ret = axios.post( + `https://api.deepl.com/v2/translate`, + params, {}) as any + + return ret + // return (ret as any).data +/* + const ret = await axios.post( + `https://${sub_domain}.deepl.com/v2/translate`, + params, {}) as any + return (ret as any).data + */ + } catch (error) { + console.error(error.message) + } +} +export const translate_deepl = async ( + parameters: IDeepLOptions +) => { + const sub_domain = parameters.free_api ? 'api-free' : 'api'; + try { + let params = stringify(parameters as any) + return axios.post( + `https://${sub_domain}.deepl.com/v2/translate`, + params, {}) as any + // return (ret as any).data +/* + const ret = await axios.post( + `https://${sub_domain}.deepl.com/v2/translate`, + params, {}) as any + return (ret as any).data + */ + } catch (error) { + console.error('error : translate_deepl', error.message) + //console.error(error.message) + } +} + +export const create_glossary = async ( + parameters: IDeepLOptions +) => { + const sub_domain = parameters.free_api ? 'api-free' : 'api' + try { + const params = stringify(parameters as any) + "auth_key=34dbf59f-adeb-1959-d906-502e0ec6afb8&free_api=false&name=pp&target_lang=DE&source_lang=EN&entries=Mould%2CKunststoffform%0D%0AShredder%2CGranulator%0D%0A&entries_format=csv" + const ret = await (axios.post( + `https://${sub_domain}.deepl.com/v2/glossaries`, + params) as any) + + return (ret as any).data + + } catch (error) { + //@todo : never called + console.error(error.response.data) + } +} + +export type DeepLLanguages = + | 'BG' + | 'CS' + | 'DA' + | 'DE' + | 'EL' + | 'EN-GB' + | 'EN-US' + | 'EN' + | 'ES' + | 'ET' + | 'FI' + | 'FR' + | 'HU' + | 'IT' + | 'JA' + | 'LT' + | 'LV' + | 'NL' + | 'PL' + | 'PT-PT' + | 'PT-BR' + | 'PT' + | 'RO' + | 'RU' + | 'SK' + | 'SL' + | 'SV' + | 'ZH' + diff --git a/packages/i18n/src/lib/filters.ts b/packages/i18n/src/lib/filters.ts new file mode 100644 index 00000000..ffa741c7 --- /dev/null +++ b/packages/i18n/src/lib/filters.ts @@ -0,0 +1,50 @@ +import { logger } from "../index" +import { sync as write } from "@plastichub/fs/write" + +const frontMatter = require('front-matter') +const YAML = require('json-to-pretty-yaml') + +const index = (attrs: any, key: string) => Object.keys(attrs).indexOf(key) + +export const Hugo = (raw: string, translated: string, file:string ="") => { + let fm = {} + if (!frontMatter.test(raw)) { + return translated + } + fm = frontMatter(raw).attributes + + let fmTranslated: any = {} + try { + fmTranslated = frontMatter(translated) + } catch (e) { + write(file + "_e.md", translated) + } + + const translatedKeys = {} + + const keys = [ + 'title' + ] + + keys.forEach((k) => { + const e = Object.entries(fmTranslated.attributes) + const s = Object.entries(fm).findIndex((v) => v[0] == k) + const v = e[s][1] + translatedKeys[k] = v + }) + + const fmPatch = { + ...fm, + ...translatedKeys + } + + try { + return `---\n${YAML.stringify(fmPatch)}---\n${fmTranslated.body}` + } catch (e) { + logger.error(`Error, `, e) + } +} + +export const Filters = { + Hugo +} \ No newline at end of file diff --git a/packages/i18n/src/lib/glossary.ts b/packages/i18n/src/lib/glossary.ts new file mode 100644 index 00000000..39e9ed3a --- /dev/null +++ b/packages/i18n/src/lib/glossary.ts @@ -0,0 +1,135 @@ + +import * as path from 'path' +import * as deeplN from 'deepl-node' +import { isFile, resolve } from "@plastichub/osr-commons" +import { sync as read } from "@plastichub/fs/read" +import { sync as exists } from "@plastichub/fs/exists" + +import * as deepl from './deepl' +import { sync as write } from "@plastichub/fs/write" +import { + GLOSSARY_INFO_FILE, + GLOSSARY_FILE_NAME +} from '../constants' + +import { IOptions } from '../types' +import { hash as md5 } from './strings' +import { logger } from '../' + +export const name = (srcLang, dstLang) => `OSR-${srcLang}-${dstLang}` + +export const glossaryMetaPath = (storeRoot, srcLang, dstLang) => + path.resolve(resolve(`${storeRoot}/glossary/${srcLang}/${dstLang}/${GLOSSARY_INFO_FILE}`)) + +export const glossaryPath = (storeRoot, srcLang, dstLang) => + path.resolve(resolve(`${storeRoot}/glossary/${srcLang}/${dstLang}/${GLOSSARY_FILE_NAME}`)) + +export const meta = (storeRoot: string, srcLang: string, dstLang: string): deepl.IGlossary | null => { + const filePath = glossaryMetaPath(storeRoot, srcLang, dstLang) + if (exists(filePath)) { + return (read(filePath, 'json') as deepl.IGlossary) + } + return null +} +export const data = (storeRoot: string, srcLang: string, dstLang: string): string | null => { + const filePath = glossaryPath(storeRoot, srcLang, dstLang) + if (exists(filePath)) { + return read(filePath, 'string') as string + } + return null +} +export const hash = (storeRoot: string, srcLang: string, dstLang: string) => { + const _data = data(storeRoot, srcLang, dstLang) + return _data ? md5(JSON.stringify(_data)) : null +} + +export const update_hash = (storeRoot: string, srcLang: string, dstLang: string) => { + const glossary_meta = glossaryMetaPath(storeRoot, srcLang, dstLang) + const glossary = meta(storeRoot, srcLang, dstLang) + if (glossary) { + glossary.hash = hash(storeRoot, srcLang, dstLang) + write(glossary_meta, glossary) + } +} + +export const id2 = async ( + options: IOptions, + dOptions: deepl.IDeepLOptions, + storeRoot: string, + srcLang: string, + dstLang: string): Promise => { + return (meta(storeRoot, srcLang, dstLang) as deepl.IGlossary)?.glossaryId +} +export const create = async ( + srcLang: string = 'EN', + dstLang: string = 'DE', + options: IOptions +): Promise => { + const _name = name(srcLang, dstLang) + const translator = new deeplN.Translator(options.api_key) + + const glossary_meta_path = glossaryMetaPath(options.storeRoot, srcLang, dstLang) + const glossary_data_path = glossaryPath(options.storeRoot, srcLang, dstLang) + const glossary_meta = meta(options.storeRoot, srcLang, dstLang) + if (!exists(glossary_data_path)) { + write(glossary_data_path, 'TEST,TEST') + } + if (exists(glossary_meta_path) && glossary_meta && glossary_meta.glossaryId) { + try { + await translator.deleteGlossary(glossary_meta.glossaryId) + } catch (e) { + logger.warn('Delete glossary failed:', _name, e.message) + } + } + const ret: any = await translator.createGlossaryWithCsv( + _name, + srcLang as deeplN.SourceGlossaryLanguageCode, + dstLang as deeplN.TargetGlossaryLanguageCode, + glossary_data_path) + + if (!ret) { + logger.error('Create glossary failed', glossary_data_path, options) + return null + } + write(glossary_meta_path, ret) + update_hash(options.storeRoot, srcLang, dstLang) + return ret +} +export const pairs = async ( + dOptions: deepl.IDeepLOptions, + file: string +) => { + const translator = new deeplN.Translator(dOptions.auth_key) + const ret = await translator.getGlossaryLanguagePairs() + + logger.info('Supported glossary pairs', ret) + write(file, ret) + return ret +} +export const update = async (srcLang: string, dstLang: string, options: IOptions): Promise => { + const metaPath = glossaryMetaPath(options.storeRoot, srcLang, dstLang) + const dataPath = glossaryPath(options.storeRoot, srcLang, dstLang) + let glossaryMeta = meta(options.storeRoot, srcLang, dstLang) + if (!glossaryMeta || !exists(metaPath) || !exists(dataPath)) { + glossaryMeta = await create(srcLang, dstLang, options) + return glossaryMeta + } + + if (glossaryMeta.hash !== hash(options.storeRoot, srcLang, dstLang)) { + glossaryMeta = await create(srcLang, dstLang, options) + } + return glossaryMeta +} +export const id = (root: string) => { + root = path.resolve(resolve(root)) + if (exists(root) && isFile(root)) { + return (read(root, 'json') as deeplN.GlossaryInfo || {}).glossaryId + } +} +export const _data = (storeRoot: string, srcLang: string, dstLang: string) => { + storeRoot = path.resolve(resolve(storeRoot)) + if (!id(storeRoot)) { + const filePath = glossaryMetaPath(storeRoot, srcLang, dstLang) + return read(filePath, 'string') + } +} \ No newline at end of file diff --git a/packages/i18n/src/lib/index.ts b/packages/i18n/src/lib/index.ts new file mode 100644 index 00000000..2c4dc385 --- /dev/null +++ b/packages/i18n/src/lib/index.ts @@ -0,0 +1,4 @@ +export * from './deepl' +export * from './codes' +export * from './filters' +export * from './store' diff --git a/packages/i18n/src/lib/store.ts b/packages/i18n/src/lib/store.ts new file mode 100644 index 00000000..db06ccb2 --- /dev/null +++ b/packages/i18n/src/lib/store.ts @@ -0,0 +1,41 @@ +import { sync as write } from '@plastichub/fs/write' +import { sync as read } from '@plastichub/fs/read' +import { resolve } from '@plastichub/osr-commons' +import * as path from 'path' + +const removeNonPrintableCharacters = (text: string): string => text.replace(/[^\x20-\x7E]/g, '') + +export const clean = (text: string = "") => text.trim() + +export const sortObjectKeysAlpha = (obj: Record): Record => { + const sortedKeys = Object.keys(obj).sort(); + const sortedObj: Record = {}; + sortedKeys.forEach((key) => { + sortedObj[key] = obj[key]; + }); + return sortedObj; +}; + +export const store = (storePath:string, text: string, translation:string, options:any = {}) => { + if (storePath && options && options.store) { + storePath = path.resolve(resolve(options.store, options.alt, { + DST_LANG: options.dstLang + })) + } + const store:any = read(storePath, 'json') || {} + store[text] = clean(translation) + write(storePath, sortObjectKeysAlpha(store)) + return translation +} + +export const get = (storePath:string, text: string, options:any = {}) => { + if (storePath && options && options.store) { + storePath = path.resolve(resolve(options.store, options.alt, { + DST_LANG: options.dstLang + })) + } + const store = read(storePath, 'json') || {} + if(store[text]){ + return store[text] + } +} \ No newline at end of file diff --git a/packages/i18n/src/lib/strings.ts b/packages/i18n/src/lib/strings.ts new file mode 100644 index 00000000..e3b1fae0 --- /dev/null +++ b/packages/i18n/src/lib/strings.ts @@ -0,0 +1,3 @@ +import { createHash } from 'crypto' +export const clean = (text: string = "") => text.trim() +export const hash = (text: string) => createHash('md5').update(clean(text)).digest('base64') \ No newline at end of file diff --git a/packages/i18n/src/lib/test_data.ts b/packages/i18n/src/lib/test_data.ts new file mode 100644 index 00000000..97b31750 --- /dev/null +++ b/packages/i18n/src/lib/test_data.ts @@ -0,0 +1,128 @@ +export const xls2Cols = () => { + return [ + [ + "", + "", + ], + [ + "Model Number", + "WSGP-230", + ], + [ + "Plastic Processed", + "HDPE/PP", + ], + [ + "Plastic Processed", + "PE/PP", + ], + [ + "Plastic Processed", + "LDPE", + ], + [ + "Plastic Processed", + "ABS", + ], + [ + "Condition", + "random2" + ], + [ + "Output (kg/h)", + "100 - 150 kg/h", + ], + [ + "Video outgoing-inspection", + "Provided", + ], + [ + "Machinery Test Report", + "Provided", + ], + [ + "Warranty of core components", + "1 Year", + ], + [ + "Core Components", + "PLC", + ], + [ + "Core Components", + "Motor", + ], + [ + "Place of Origin", + "Guangdong, China", + ], + [ + "Brand Name", + "Wensui", + ], + [ + "Type", + "Recycling Granulator", + ], + [ + "Screw Design", + "Single", + ], + [ + "Voltage", + "380V", + ], + [ + "Dimension(L*W*H)", + "97*61*120cm", + ], + [ + "Power (kW)", + "4kw", + ], + [ + "Weight", + "290", + ], + [ + "Warranty", + "1 Year", + ], + [ + "Showroom Location", + "Canada", + ], + [ + "Applicable Industries", + "Plastic Industry", + ], + [ + "Material Processed", + "PP/PE", + ], + [ + "Fixed Blade", + "2pcs", + ], + [ + "Rotary Blade", + "6pcs", + ], + [ + "Chamber Size", + "230*215 mm", + ], + [ + "Capacity", + "150 kg/h", + ], + [ + "Keywords", + "pe pipe recycling machine", + ], + [ + "Application", + "Recycling Extrusion Pelletizing", + ], + ] +} \ No newline at end of file diff --git a/packages/i18n/src/lib/translate.ts b/packages/i18n/src/lib/translate.ts new file mode 100644 index 00000000..a9a3cbab --- /dev/null +++ b/packages/i18n/src/lib/translate.ts @@ -0,0 +1,498 @@ +import * as path from 'path' +import { JSONPath } from 'jsonpath-plus' +import { createHash } from 'crypto' +import { get_cached, set_cached } from '@plastichub/osr-cache/lib' +import { OSR_CACHE } from '@plastichub/osr-commons' +import { CONFIG_DEFAULT } from '@plastichub/osr-commons' +import { resolve } from '@plastichub/osr-commons' +import { isString, isArray, isObject, isNumber } from '@plastichub/core/primitives' +import { sync as read } from "@plastichub/fs/read" +import { sync as write } from "@plastichub/fs/write" +import { sync as exists } from "@plastichub/fs/exists" +import { sync as mkdir } from "@plastichub/fs/dir" +import * as XLSX from 'xlsx' +import { parse, stringify } from 'yaml' +import * as pMap from 'p-map' +import { minify as minify_html } from 'html-minifier-terser' + +const TOML = require('@iarna/toml') +const globBase = require('glob-base') + +import { + targets, + parse as parseOptions +} from '../options' + +import { + MODULE_NAME} from '../constants' + +import { IOptions, TranslateFilter } from '../types' +import { store, get } from './store' +import * as deepl from './deepl' + +import { logger as loggerDefault } from '../' + +let logger = loggerDefault +const minify = false +const extension = (file: string) => path.parse(file).ext + +import { + defaultFilters, + defaultOptions, + transformObject, + TransformOptions, + testFilters +} from './async-iterator' + +import { update } from './glossary' + +export const clean = (text: string = "") => text.trim() +export const hash = (text: string) => createHash('md5').update(clean(text)).digest('base64') +export const translateObjectAIT = async (obj: any, src: string, options: IOptions) => { + const opts: TransformOptions = defaultOptions({ + throttleDelay: 100, + concurrentTasks: 1, + path: options.query, + filterCallback: testFilters( + defaultFilters([ + async (input) => !options.keys.includes(input) + ]) + ), + transform: async (input: string, path: string) => { + if((isNumber(input) || parseInt(input))){ + return input + } + const stored = get(options.store, input as string, options) + if (stored) { + return stored + } else { + const translated = await _translate(input, src, options) + if (translated) { + if (options.store) { + store(options.store, input, translated, options) + } + return translated + } + return input + } + }, + errorCallback: (path: string, value: string, error: any) => { + logger.error(`Error at path: ${path}, value: ${value}, error: ${error}`) + return value + } + } as TransformOptions) + try { + await transformObject(obj, opts.transform, opts.path, opts.throttleDelay, opts.concurrentTasks, opts.errorCallback, opts.filterCallback) + return obj + } catch (error) { + logger.error('Translation failed:', error) + } +} +export const translateXLS = async ( + src: string, + dst: string, + options: IOptions) => { + logger.debug(`Translating ${src} to ${dst}`) + if (!exists(src)) { + logger.error('File not found : ' + src) + return + } + const dstDir = path.parse(dst).dir + mkdir(dstDir) + const osr_cache = OSR_CACHE() + const cached = await get_cached(src, { + keys: options.keys + }, MODULE_NAME) + + if (osr_cache && cached && options.cache && exists(dst)) { + return cached + } + + const workbook = XLSX.readFile(src) + const worksheet = workbook.Sheets[workbook.SheetNames[0]]; + const raw_data: any[] = XLSX.utils.sheet_to_json(worksheet, { header: 1, blankrows: false, raw: false, skipHidden: true }); + const queryResult = JSONPath( + { + path: options.query, + json: raw_data, + + }) + let translated + try { + translated = await translateObjectAIT(raw_data, src, { + ...options, + keys: queryResult + }) + } catch (error) { + logger.error('Error translating XLSX', error) + return + } + if (!translated) { + logger.error('Error translating XLSX', src) + return + } + const sheetOut = XLSX.utils.json_to_sheet(translated, { skipHeader: true }) + const workbookOut = XLSX.utils.book_new() + XLSX.utils.book_append_sheet(workbookOut, sheetOut, workbook.SheetNames[0]) + XLSX.writeFileXLSX(workbookOut, dst) + if (osr_cache && options.cache) { + await set_cached(src, { keys: options.keys }, MODULE_NAME, translated) + } + + return translated +} +export const translateDeepL = async ( + text: string, + srcLang: string = 'EN', + dstLang: string = 'DE', + dOptions: deepl.IDeepLOptions, + options: IOptions = {}, + file: string = '') => { + + if (minify) { + text = await minify_html(text, { + collapseWhitespace: true + }) + } + const glossary = await update(srcLang.toLowerCase(), dstLang.toLowerCase(), options) + const deeplOptions = { + preserve_formatting: '1', + tag_handling: ["xml"], + ...dOptions, + text: text, + target_lang: dstLang as deepl.DeepLLanguages, + source_lang: srcLang as deepl.DeepLLanguages, + glossary_id: glossary?.glossaryId, + formality: options.formality || 'default', + } as deepl.IDeepLOptions + + let ret: any = await deepl.translate_deepl(deeplOptions) as deepl.IDeepLResponse + if (!ret) { + logger.error('Translate failed : ' + text, file) + return false + } + ret = ret?.data + if (options.filters) { + (ret.translations).forEach((t, i) => { + (options.filters as TranslateFilter[]).forEach((f) => { + ret.translations[i].text = f(text, t.text, file) + }) + }) + } + return ret.translations +} +const _translate = async (value: string, src: string, options: IOptions) => { + + const translations = await translateDeepL(value as string, options.srcLang, options.dstLang, + { + auth_key: options.api_key, + formality: options.formality || 'default', + free_api: false + } as any, options, src) + + return getTranslation(translations) +} +export const translateObject = async (obj: any, src: string, options: IOptions) => { + if (isNumber(obj)) { + return obj + } + if (isString(obj) && !obj.trim().length) { + return obj + } + + if (isString(obj) && options.store) { + const stored = get(options.store, obj as string, options) + if (stored && options.cache) { + return stored + } + const ret = await _translate(obj as string, src, options) + if (ret && options.store) { + store(options.store, obj, ret, options) + return ret + } else { + console.error('Error translating : ', obj) + } + return obj + } + if (isObject(obj) || isArray(obj)) { + for await (const [key, value] of Object.entries(obj)) { + if (!obj[key]) { + continue + } + if (!isString(key)) { + continue + } + if (isString(value) && options.keys && !options.keys.includes(key)) { + continue + } + if (isString(value)) { + const stored = get(options.store, value as string, options) + if (stored && options.cache) { + obj[key] = stored + } else { + obj[key] = await _translate(value as string, src, options) + if (options.store) { + store(options.store, value, obj[key], options) + } + } + } else if (isObject(value)) { + obj[key] = await translateObject(value, src, options) + } else if (isArray(value)) { + let i = 0 + for await (const v of value) { + if (!v) continue + value[i] = await translateObject(v, src, options) + i++ + } + } + } + } + return obj +} +export const getTranslation = (translations: any, all: boolean = false) => { + if (!all) { + if (translations && translations[0] && translations[0].text) { + return translations[0].text + } + } else { + return translations + } + return false +} +export const translateMarkup = async ( + src: string, + dst: string, + options: IOptions) => { + + logger.info(`Translating ${src} to ${dst}`); + + const osr_cache = OSR_CACHE() + const cached = await get_cached(src, { keys: options.keys, filters: options.filters }, MODULE_NAME); + if (osr_cache && cached && options.cache) { + return cached + } + const srcContent = read(src) as string + let translations = await translateDeepL(srcContent, + options.srcLang, + options.dstLang, + { + free_api: false, + auth_key: options.api_key + } as any, options, src) as any + + translations = getTranslation(translations) + if (osr_cache && options.cache) { + await set_cached(src, { keys: options.keys, filters: options.filters }, MODULE_NAME, translations) + } + if (translations) { + write(dst, translations) + } else { + return false + } + return translations +} +export const translateJSON = async ( + src: string, + dst: string, + options: IOptions) => { + + logger.info(`Translating ${src} to ${dst}`) + + const osr_cache = OSR_CACHE() + const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME) + if (osr_cache && cached && options.cache) { + return cached + } + + let object = read(src, 'json') as any + object = await translateObject(object, src, options) + + if (osr_cache && options.cache) { + await set_cached(src, { keys: options.keys }, MODULE_NAME, object) + } + write(dst, object) + return object +} +export const translateTOML = async ( + src: string, + dst: string, + options: IOptions) => { + + logger.info(`Translating ${src} to ${dst}`) + const osr_cache = OSR_CACHE() + const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME) + if (osr_cache && cached && options.cache) { + return cached + } + + let srcContent = read(src) as string + let toml = TOML.parse(srcContent) + + toml = await translateObject(toml, src, options) + + if (osr_cache && options.cache) { + try { + await set_cached(src, { keys: options.keys }, MODULE_NAME, TOML.stringify(toml)) + } catch (e) { + logger.error(`Error caching ${src} TOML : ${e.message}`, toml); + } + } + write(dst, TOML.stringify(toml)) +} +export const translateYAML = async (src: string, dst: string, options: IOptions) => { + logger.debug(`Translating ${src} to ${dst}`) + const osr_cache = OSR_CACHE() + const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME) + if (osr_cache && cached && options.cache) { + return TOML.parse(cached.translations) + } + let srcContent = read(src) as string + let yaml = parse(srcContent) + yaml = await translateObject(yaml, src, options) + // yaml = await translateObjectAIT(yaml, src, options) + if (osr_cache && options.cache) { + try { + await set_cached(src, { keys: options.keys }, MODULE_NAME, TOML.stringify({ translations: yaml })) + } catch (e) { + logger.error(`Error caching YAML ${src} : ${e.message}`, yaml); + } + } + const ret = stringify(yaml) + write(dst, ret) + options.stdout && process.stdout.write(ret) + return ret +} +export const translateFiles = async ( + file, targets: string[], options: IOptions) => { + const translator = getTranslator(file) + if (!translator) { + logger.error(`Can't find a translator for ${file}`) + return false + } + if (options.dry) { + logger.info(`Abort translating, dry option is on!`); + return Promise.resolve([]) + } + return await pMap(targets, async (target) => getTranslator(file)(file, target, options), { concurrency: 1 }) +} +export const translate = async (opts: IOptions) => { + opts = parseOptions(opts as any, {}) + logger = opts.logger || loggerDefault + logger.settings.minLevel = opts.logLevel as any || 'warn' + if (!opts.api_key) { + logger.error('i18n : No API key provided') + return + } + if (!opts.dstLang || !opts.srcLang) { + logger.error('i18n : No source or destination language provided') + return + } + if (opts.dstLang === opts.srcLang) { + logger.info(`Source and destination language are the same : ${opts.dstLang}`) + return + } + if (opts.srcInfo && opts.srcInfo.IS_GLOB) { + const glob_base = globBase(opts.src) + opts.pathVariables.ROOT = path.resolve(glob_base.base) + } else { + opts.pathVariables.ROOT = path.resolve(opts.cwd) + } + if (!opts.text && (opts.srcInfo && !opts.srcInfo.FILES)) { + logger.info(`Nothing to translate, --text or --src required`) + return + } + const translateLang = async (lang) => { + opts.dstLang = lang + opts.pathVariables['DST_LANG'] = opts.dstLang.toLowerCase() + opts.pathVariables['SRC_LANG'] = opts.srcLang.toLowerCase() + opts.pathVariables['CWD'] = path.resolve(opts.cwd) + if (opts.text) { + const ret = await translateDeepL( + opts.text, + opts.srcLang, + lang, + { + free_api: true, + auth_key: opts.api_key, + formality: opts.formality as any + } as any, opts, "") + + const translations = getTranslation((ret as any), opts.all) + process.stdout.write(opts.all ? JSON.stringify(translations, null, 2) : translations) + logger.info(`Translated ${opts.text} to ${lang}`, translations) + return ret + } + logger.debug(`Translate ${opts.src} to ${lang}`) + return pMap(opts.srcInfo.FILES, async (f) => translateFiles(f, targets(f, opts), opts), { concurrency: 1 }) + } + let languages = opts.dstLang.split(',') + const translated = await pMap(languages, async (lang) => translateLang(lang), { concurrency: 1 }) + logger.debug(`Translated all: ${opts.text ? opts.text : opts.src} to ${languages}`) + return translated +} +export const translateText = async (text: string, srcLang: string, dstLang: string, options: IOptions = {}) => { + if (!text || text.length === 0) { + return '' + } + if (srcLang === dstLang) { + return text + } + if (!options.store) { + logger.error('No store provided') + return text + } + const store = path.resolve(resolve(options.store, false)) + if (!exists(store)) { + logger.warn(`Invalid store root : ${store}`) + } + const config: any = CONFIG_DEFAULT() + text = clean(text) + + if (exists(options.store)) { + const stored = storeGet(options.store, text) + if (stored) { + return stored + } + } + if(!options.storeRoot){ + options.storeRoot = "${OSR_ROOT}/i18n-store" + } + if(!options.api_key){ + options.api_key = config.deepl.auth_key + } + const out: string[] = await translateDeepL(text, srcLang, dstLang, + { + ...config.deepl + }, options, "") + + const translation = getTranslation(out, false) + if (translation) { + storeSet(options.store, text, translation) + return translation + } else { + logger.warn('Error translating : ', text) + } + return text +} +export const storeSet = (storePath: string, text: string, translation: string, file: string = '') => { + const store = read(storePath, 'json') || {} + store[text] = clean(translation) + write(storePath, store) +} +export const storeGet = (storePath: string, text: string, file: string = '') => { + const db = read(storePath, 'json') || {} + if (db[text]) { + return db[text] + } +} +export const TRANSLATORS = +{ + '.md': translateMarkup, + '.html': translateMarkup, + '.json': translateJSON, + '.toml': translateTOML, + '.yaml': translateYAML, + '.xlsx': translateXLS, + '.xls': translateXLS +} +export const getTranslator = (file: string) => TRANSLATORS[extension(file)] diff --git a/packages/i18n/src/lib/types.ts b/packages/i18n/src/lib/types.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/i18n/src/main.ts b/packages/i18n/src/main.ts new file mode 100644 index 00000000..fae00345 --- /dev/null +++ b/packages/i18n/src/main.ts @@ -0,0 +1,15 @@ +#!/usr/bin/env node +import { defaults } from './_cli'; defaults() +import * as cli from 'yargs' +import { register as registerInfo } from './commands/info'; registerInfo(cli) +import { register as registerTranslate } from './commands/translate'; registerTranslate(cli) +import { register as registerGlossary } from './commands/glossary'; registerGlossary(cli) + +const argv: any = cli.argv + +if (argv.help) { + cli.showHelp(); + process.exit(); +} else if (argv.v || argv.version) { + process.exit(); +} diff --git a/packages/i18n/src/options.ts b/packages/i18n/src/options.ts new file mode 100644 index 00000000..faddcf19 --- /dev/null +++ b/packages/i18n/src/options.ts @@ -0,0 +1,156 @@ +import * as path from 'path' + +import { resolve } from '@plastichub/osr-commons' +import { resolveConfig } from '@plastichub/core' +import { isString } from '@plastichub/core/primitives' +import { pathInfo, DEFAULT_ROOTS } from '@plastichub/osr-commons' + +export * from './lib' + +import { IOptions, TranslateFilter } from './types' +import { Filters } from './lib/filters' + +export 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 targets = (f: string, options: IOptions) => { + const srcParts = path.parse(f) + const variables = { + ...clone(options.pathVariables), + ...DEFAULT_ROOTS + } + const targets = [] + + variables.SRC_NAME = srcParts.name + variables.SRC_DIR = srcParts.dir + variables.SRC_EXT = srcParts.ext + + if (variables.ROOT) { + variables.SRC_REL = path.relative(variables.ROOT, srcParts.dir) + } + + const dashed = srcParts.name.split('-') + if(dashed.length > 1){ + for (let i = 0; i < dashed.length; i++) { + variables[`SRC_NAME-${i}`] = dashed[i] + } + } + const dotted = srcParts.name.split('.') + if (dotted.length > 1) { + for (let i = 0; i < dotted.length; i++) { + variables[`SRC_NAME.${i}`] = dotted[i] + } + } + + const underscored = srcParts.name.split('_') + if(underscored.length > 1){ + for (let i = 0; i < underscored.length; i++) { + variables[`SRC_NAME_${i}`] = underscored[i] + } + } + + if (options.targetInfo.IS_GLOB) { + options.targetInfo.GLOB_EXTENSIONS.forEach((e) => { + let targetPath = resolve(options.pathVariables.DST_PATH, options.alt, variables) + targetPath = path.resolve(targetPath.replace(options.pathVariables.DST_FILE_EXT, '') + e) + targets.push(targetPath) + }) + } else { + let targetPath = resolve(options.pathVariables.DST_PATH, options.alt, variables); + //targetPath = path.resolve(targetPath.replace(options.pathVariables.DST_FILE_EXT, '')); + targets.push(targetPath) + } + return targets +} + + +export const parse = (options: IOptions, argv: any): IOptions => { + for (const k in argv) { + if (!(k in options.variables) && k !== '_' + && k !== '$0' + && k !== 'variables' + && k !== 'source' + && k !== 'language' + && k !== 'envVariables' + && k !== 'format' + && k !== 'profile' + && k !== 'output' + && k !== 'plugins' + && k !== 'dry' + && k !== 'stdout' + && k !== 'filters' + && k !== 'cache' + && k !== 'text' + && k !== 'keys' + && k !== 'glossary' + && k !== 'logLevel' + && k !== 'bootstrap') { + options.variables[k] = argv[k]; + } + } + + options.variables['cwd'] = path.resolve(options.variables['cwd'] ? options.variables['cwd'] : options.cwd) + resolveConfig(options.variables) + let variables = {} + let srcInfo + if (options.src) { + srcInfo = pathInfo(resolve(options.src, options.alt, options.variables)); + //we have glob patterns: + if (srcInfo && srcInfo.FILES && srcInfo.FILES.length) { + options.srcInfo = srcInfo; + for (const key in srcInfo) { + if (Object.prototype.hasOwnProperty.call(srcInfo, key)) { + variables['SRC_' + key] = srcInfo[key]; + } + } + } else { + options.src = resolve(options.src, options.alt, options.variables); + options.srcInfo = srcInfo + options.srcInfo.FILES = [options.src] + } + } + + if (options.dst) { + const out = resolve(options.dst, options.alt, options.variables) + let targetInfo = pathInfo(out) + //we have glob patterns: + if (options.srcInfo && targetInfo) { + targetInfo.PATH = options.dst as string; + for (const key in targetInfo) { + if (Object.prototype.hasOwnProperty.call(targetInfo, key)) { + variables['DST_' + key] = targetInfo[key] + } + } + options.targetInfo = targetInfo + + } else { + options.dst = resolve(options.dst || '', options.alt, options.variables) + } + } else { + options.stdout = true + } + + options.pathVariables = variables + + if (isString(argv.filters)) { + const filters = argv.filters.split(',') + options.filters = [] + filters.forEach((f) => { + if (Filters[f]) { + (options.filters as TranslateFilter[]).push(Filters[f]) + } + }) + } + if (isString(argv.keys)) { + options.keys = argv.keys.split(',') + } + options.logLevel = options.logLevel || 'warn' + options.storeRoot = options.storeRoot || '${OSR_ROOT}/i18n-store/' + return options; +} \ No newline at end of file diff --git a/packages/i18n/src/speech/google.ts b/packages/i18n/src/speech/google.ts new file mode 100644 index 00000000..cc5dda8a --- /dev/null +++ b/packages/i18n/src/speech/google.ts @@ -0,0 +1,80 @@ +// WIP - to be moved ... +// more samples : https://cloud.google.com/nodejs/docs/reference/speech/latest +// playground : https://cloud.google.com/text-to-speech +// api center : https://console.cloud.google.com/apis/library/speech.googleapis.com?project=shoposr&flow=gcp +// rest schema : https://speech.googleapis.com/$discovery/rest?version=v1 +// google api docs : https://cloud.google.com/apis/docs/client-libraries-explained +// pcm player example : https://gist.github.com/anaptfox/64951815358ba545f94ff864c02887da +// ssml specs: https://www.w3.org/TR/speech-synthesis11/ +// ssml specs@google: https://cloud.google.com/text-to-speech/docs/ssml + +// google - api - types: node_modules\@google-cloud\speech\build\protos\protos.d.ts +// google list of voices: https://cloud.google.com/text-to-speech/docs/voices | GET https://texttospeech.googleapis.com/v1beta1/voices + +// HTTP and gRPC Transcoding, https://google.aip.dev/127 + +// gg - auth flows : https://cloud.google.com/docs/authentication/ +// gg auth samples : https://cloud.google.com/text-to-speech/docs/libraries + + +// gg dialogflow, https://cloud.google.com/dialogflow/es/docs/video + + +const speech = require('@google-cloud/speech'); + +import { SpeechClient, v1p1beta1 } from '@google-cloud/speech'; + + +` Request Body, to https://texttospeech.googleapis.com/v1beta1/text:synthesize +{ + "audioConfig": { + "audioEncoding": "LINEAR16", + "pitch": 0, + "speakingRate": 1 + }, + "input": { + "text": "Google Cloud Text-to-Speech enables developers to synthesize natural-sounding speech with 100+ voices, available in multiple languages and variants. It applies DeepMind’s groundbreaking research in WaveNet and Google’s powerful neural networks to deliver the highest fidelity possible. As an easy-to-use API, you can create lifelike interactions with your users, across many applications and devices." + }, + "voice": { + "languageCode": "en-US", + "name": "en-US-Wavenet-D" + } + } +` + + +export const speak = (text: string, options: any) => { + //const client = new SpeechClient(); + const betaClient = new v1p1beta1.SpeechClient(); + +} + +// Creates a client +const client = new speech.SpeechClient(); + +async function quickstart() { + // The path to the remote LINEAR16 file + const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw'; + + // The audio file's encoding, sample rate in hertz, and BCP-47 language code + const audio = { + uri: gcsUri, + }; + const config = { + encoding: 'LINEAR16', + sampleRateHertz: 16000, + languageCode: 'en-US', + }; + const request = { + audio: audio, + config: config, + }; + + // Detects speech in the audio file + const [response] = await client.recognize(request); + const transcription = response.results + .map(result => result.alternatives[0].transcript) + .join('\n'); + console.log(`Transcription: ${transcription}`); +} +// quickstart(); \ No newline at end of file diff --git a/packages/i18n/src/types.ts b/packages/i18n/src/types.ts new file mode 100644 index 00000000..5143a8a7 --- /dev/null +++ b/packages/i18n/src/types.ts @@ -0,0 +1,39 @@ +import { Hash } from '@plastichub/core' +import { PATH_INFO } from '@plastichub/osr-commons' +import { Logger } from 'tslog' + +export type TranslateFilter = (raw: string, translated: string, file?: string) => string + +export type IOptions = { + src?: string + dst?: string + variables?: Hash + cwd?: string + env?: string + debug?: boolean + dry?: boolean + skip?: boolean + all?: boolean + alt?: boolean + stdout?: boolean + srcInfo?: PATH_INFO + targetInfo?: PATH_INFO + pathVariables?: Hash + dstLang?: string + srcLang?: string + config?: any + formality?: string + text?: string + filters?: TranslateFilter[] | string + keys?: string[] | string + query?: string + glossary?: string | boolean + createGlossary?: boolean + cache?: boolean + dumpJSON?: boolean + store?: string + storeRoot?: string + api_key?: string + logLevel?: string + logger?: Logger +} diff --git a/packages/i18n/src/zod_schema.ts b/packages/i18n/src/zod_schema.ts new file mode 100644 index 00000000..08d88e32 --- /dev/null +++ b/packages/i18n/src/zod_schema.ts @@ -0,0 +1,16 @@ +import { z } from 'zod' + +export const CommonLanguageCodeSchema = z.enum([ + 'en', 'pt', + 'bg', 'cs', 'da', 'de', 'el', 'es', 'et', 'fi', 'fr', + 'hu', 'id', 'it', 'ja', 'ko', 'lt', 'lv', 'nb', 'nl', + 'pl', 'ro', 'ru', 'sk', 'sl', 'sv', 'tr', 'uk', 'zh' +]) + +export type CommonLanguageCode = z.infer + +export const TargetLanguageCodeSchema = z.union([ CommonLanguageCodeSchema, z.enum(['en-GB', 'en-US', 'pt-BR', 'pt-PT'])]) +export type TargetLanguageCode = z.infer + +export const SourceGlossaryLanguageCode = z.enum(['de', 'en', 'es', 'fr', 'ja']) +export type SourceGlossaryLanguageCode = z.infer diff --git a/packages/i18n/src/zod_types.ts b/packages/i18n/src/zod_types.ts new file mode 100644 index 00000000..7212fb67 --- /dev/null +++ b/packages/i18n/src/zod_types.ts @@ -0,0 +1 @@ +export const foo = 'bar' \ No newline at end of file diff --git a/packages/i18n/tests/DE/EN/example.md b/packages/i18n/tests/DE/EN/example.md new file mode 100644 index 00000000..fca6b28a --- /dev/null +++ b/packages/i18n/tests/DE/EN/example.md @@ -0,0 +1,31 @@ +--- +id: "nerdy" +title: "How to pretend" +post_layout: "full" +categories: + - "plastic" +type: "regular" +draft: false +toc: true +nav: "kb" +menu: + kb: + parent: "schwindel" + weight: 140 +--- +Where is Bill? + +## Supported plastic types + +- [ ] PVC +- [ ] PET +- [ ] Clothes make the man +- [ ] It's the clothes we wear +- [ ] With fraud, swindle and impostor into the new freedom! + +Did you really believe that I make it so easy? + +```sh +# some code +ps -aux +``` diff --git a/packages/i18n/tests/DE/example.json b/packages/i18n/tests/DE/example.json new file mode 100644 index 00000000..e781ee6b --- /dev/null +++ b/packages/i18n/tests/DE/example.json @@ -0,0 +1,4 @@ +{ + "key": "Einige wichtige", + "cryptic": "Wenn Sie es richtig machen wollen, machen Sie es selbst!" +} \ No newline at end of file diff --git a/packages/i18n/tests/DE/example.md b/packages/i18n/tests/DE/example.md new file mode 100644 index 00000000..9f44ebf9 --- /dev/null +++ b/packages/i18n/tests/DE/example.md @@ -0,0 +1,32 @@ +--- +id: nerdy +title: Wie man so tut als ob +post_layout: "full" # layout value (full, grid or list) +#sidebar: "right" # sidebar value (left, right or false) +categories: ["plastic"] +type: "regular" # available type (regular or featured) +draft: false +toc: true +nav: kb +menu: + kb: + parent: schwindel + weight: 140 +--- + +Wo ist Bill? + +## Unterstützte Kunststofftypen + +- [ ] PVC +- [ ] PET +- [ ] Kleider machen Leute +- [ ] Es sind die Kleider die wir tragen +- [ ] Mit Betrug, Schwindlerei und Hochstapler in die neue Freiheit! + +Haben Sie wirklich geglaubt, dass ich es so einfach mache? + +```sh +# etwas Code +ps -aux +``` diff --git a/packages/i18n/tests/DE/menus.en.toml b/packages/i18n/tests/DE/menus.en.toml new file mode 100644 index 00000000..8a392eb1 --- /dev/null +++ b/packages/i18n/tests/DE/menus.en.toml @@ -0,0 +1,15 @@ +name = "Wenn Sie es nicht wollen, nehmen Sie es nicht" + +[[library]] +name = "Bibliothek" +weight = 1 +post = "break" +identifier = "library" +url = "/library/machines" + +[[library]] +name = "Einspritzung" +weight = 1 +post = "break" +identifier = "Injection" +url = "/library/injection" diff --git a/packages/i18n/tests/DE/sub/sub.md b/packages/i18n/tests/DE/sub/sub.md new file mode 100644 index 00000000..1a83f81a --- /dev/null +++ b/packages/i18n/tests/DE/sub/sub.md @@ -0,0 +1,8 @@ +Wo ist mein Engel ! + +## Unterstützte Kunststofftypen + +- [ ] PVC +- [ ] PET + +Haben Sie wirklich geglaubt, dass ich es so einfach mache? diff --git a/packages/i18n/tests/EN/_index.en.md b/packages/i18n/tests/EN/_index.en.md new file mode 100644 index 00000000..068e4e81 --- /dev/null +++ b/packages/i18n/tests/EN/_index.en.md @@ -0,0 +1,98 @@ ++++ +title = "Installation" +weight = 3 ++++ + +### Omron MX2 + +1. Please refer to the OmronMX2 - Modbus setup guide../vendor/omron/P641-E1-01_EGuide_CJ_Mod485_OMRON_3G3MX2-V1.pdf(Section 7.2.2) + +In case the terminal labels mismatch the documentation, please use `SN` for (A-) and `SP` for (B+) + +1.1 Set basic parameters + +- Max. Frequency, depending on gearbox, A004 = 75Hz +- Acceleration time, F02 = 2secs +- Deceleration time, F03 = 2secs +- Output current on AM terminal (connect L to circuit GND!) as 10V : C28=01 +- Enable Brake - A051 = 01 (../vendor/omron/I570-E2-02B.pdf : Page 105) + +2. The firmware expects the VFD at **Slave-Address 1** ! + +Additionally, please check the user manual../vendor/omron/I570-E2-02B.pdf) + +2.1 Modbus settings - Page 297 + +- Parity : None - `C74` = 00 +- Speed : 9600 - `C71` = 5 +- Slave Id : 1 - `C72` = 1 + +2.2 Control settings + +- Frequency selection - `A001` : 03 (Modbus) +- Command selection - `A002` : 03 (Modbus) + +**Please restart the inverter after changing those settings!** + +2.3 Test settings, using serial Modbus adapter CP2102 and Modbus poll (see ./tools/MbPoll_v9.4.0_cracked.exe) + +2.3.1 Wire the CP2102 USB adapter + +![](modbus-test.jpg) + +2.3.2 Connect + +![](modbus-connect.png) + +2.3.3 Function - Write Coil + +![](modbus-run-test.png) + +The 'Run' LED shoud now be on. + + +### Omron E5 - PID + +### TCP interface + +To set the target temperature to 100 Degc on PID1, the complete message for Modbus TCP would be + +![](setPID100.JPG) + +``` 01 06 00 11 00 64 D8 24 ``` + +- ```01``` : slave id +- ```06``` : Modbus verb / function code, in this case **WRITE HOLDING REGISTER** +- ```11``` : address (17) +- ```00 64``` : value (100), 2 bytes +- ```D8 24``` : CRC, 2 bytes. Since it's TCP, **this isn't evaluated and can be ignored** on the Controllino - PlasticHub firmware (see './firmware/Mudbus.cpp'](./firmware/Mudbus.cpp)). + +In order to fake a Modbus message, all we need is ``` 01 06 00 11 00 64``` but we also have to prefix it with the TCP overhead (d2 8d 00 00 00 06) + +|---- TCP Overhead----- | -------- Modbus ---- | + +```d2 8d 00 00 00 06 ``` | ```01 06 00 11 00 64``` + +In example, we can send this via Hercules : + +![](setPID100_TCP.JPG) + +The TCP overhead (```d2 8d 00 00 00 06```) is created as follow: + +- ```d2 8d``` : Transaction identifier, 2 bytes +- ```00 00``` : Protocol identifier, 2 bytes +- ```00 06``` : Length of the message, 2 bytes + +## Clearpath - Teknic Servo + +``` +-> White (Input A+) -> DIR -> (MB_STEPPER_DIR_0 -> CONTROLLINO_D18) +-> Black (Input B+) -> PULSE -> (MB_STEPPER_PULSE_0 -> CONTROLLINO_D17) +-> Blue (Enable +) -> 24V +-> YELLOW (Input B-) -> GND +-> Brown (Input A-) -> GND +-> Orrange (Enable B-) -> GND + +### Omron - Optional + +- [Brake Resistor](https://www.farnell.com/datasheets/2923188.pdf) diff --git a/packages/i18n/tests/EN/build/compression.md b/packages/i18n/tests/EN/build/compression.md new file mode 100644 index 00000000..2c6f2c45 --- /dev/null +++ b/packages/i18n/tests/EN/build/compression.md @@ -0,0 +1,157 @@ +--- +title: Compression Machine +categories: ["machines"] +tags: ["DIY"] +toc: true +nav: kb +menu: + kb: + parent: build + weight: 20 +--- + + +{{< youtube ogI8kt0w43Y >}} + + + +# Build a Compression Machine + +## What is this machine? + +The compression machine is basically an electric kitchen oven to heat the plastic, and a compression mechanism (a carjack) to apply pressure to your mould. The process is slower than the other Precious Plastic machines but it allows for larger moulds to be used. It can be used to create raw material, like sheets or shapes that can be further worked on to make new products and gives a specific flake-like look to the plastic (which looks amazing!). + + +Tip : The compression machine is good for testing and trying. But for steady production we advise an extrusion or injection machine + +## Video Chapters + +- 00:00 Introduction +- 00:39 Make the oven +- 03:51 Framework +- 04:55 Press system +- 08:02 Electronic +- 11:21 How it works + +# Technical information + +Type | Compression Machine +--- | --- + Version | 2.0 +Price new material in NL | +/- €350 +Price scrap material in NL | +/- €150 +Weight | 30 kg +Dimensions | 500 x 590 x 1590 mm +Compression | 2t car jack +Voltage | 220V +AMP | 2.6A +Input Flake Size | Medium, Small | + + +# 3D Model + + + + + + +# Required machinery & skills +Build Compression | Machines needed | Skills needed +--- | ---| --- + | - Drill press + - Welding machine (not specific) + - Angle grinder | - Welding (intermediate) + - Assembling (intermediate) + - Electronics (intermediate) + +# Electronic box + +Explanation of the electric components inside this machine. More information and schematics can be found in the download-kit. + +* PID Controller: the brains of the machine where you can set your desired temperatures. It will send power to the heaters until PV (point variable) matches the SV (set value). It does this using readings from the thermocouple and the SSR. +* SSR: the Solid State Relay is an electronic ‘switch’ that opens and closes depending on the signal it receives (from the PID). +* Thermocouple: basically a thermometer. +* Band heater: heating element that fits around a pipe. +* Power switch: mechanical switch. +* LED indicator: LED that will shine with power (often found with Power switch). +* Power cable: common household power cable. + +Tip : Here is a [good forum topic about electronics](https://forum.osr-plastic.org/t/the-big-electronics-topic/) + +# Tips & tricks while making + +- Look around for second hand or scrap ovens. +- Try to make the hole into the oven only as big as it needs to be. This will save on insulation. +- Have a look at the Compression v2.1 update before diving into these plans. + +# Input & Output + +Type: HDPE, LDPE, PP, PS + +Output: 1 part per 40 minutes. Depends largely on the mould. + +# Run & maintain + +The compression is simple to understand and very powerful if properly mastered. It can be operated by one person alone most of the time. Once again, the creation process is very connected with moulds and mould making. If you have a precise mould you can create beautiful products. The mould we provide is very basic so everyone can understand the pro- cess but we highly encourage you and the team to look into making new moulds that can be useful in your area. + +# How to operate the compression + +## Startup + +1. Turn the oven on and set the desired temperature. +2. Wait 20 minutes for the desired temperature to be reached. + +## Production + +1. Weigh the required amount of material for your moud + 20%. +2. Fill the mould with material. +3. Put the upper part of the mould on the plastic. +4. Put the mould in the oven. +5. Leave it for 15 minutes. +6. Turn the mould 180° in the oven. +7. Leave it for another 15 minutes. +8. Compress the mould. +9. Take the mould out of the oven. +10. Put clamps on the mould to keep the pressure. +11. Place another mould in the oven. + +## Cooldown + +1. Clean the inside of the oven from molten plastic. +2. Tips & tricks while using +3. It is advisable to heat up the plastic until melted and then apply pressure. +4. Don’t be hasty, make sure the plastic is fully melted in the mould. + +# Troubleshooting + +- Plastic over-flows from one side of the mould. This is often the result of misalignment between the mould, pressing plate or the oven itself. Make sure everything is as much as possible parallel to the ground. +- Product gets stuck to the mould. Try softly heating the mould to ease the release or try to apply a layer of mould-release to the mould. + +# Pros & cons + +Pros | Cons +--- | --- +Easy to manufacture | Process is slow +Can use found oven | Mould size limited to oven +Runs on 220V | Not energy efficient +Bigger products than injection | +Unique patterns | + +# Built by the community + +
+ +![Community Compression](/build/community/compression3.jpg) + +![Community Compression](/build/community/compression1.jpg) + +![Community Compression](/build/community/compression2.jpg) + +
+ + +## Related +- [Upgrade: Compression V2.1 - Library](/howtos/compression-machine-21) +- [Compression](https://forum.osr-plastic.org/t/machine-development-compression-oven/) +- [Solar Powered Melting Machine](https://forum.osr-plastic.org/t/solar-powered-melting-machine/) +- [How-to: Wall Clock- YouTube](https://www.youtube.com/watch?v=e_jqIvSFfI4) diff --git a/packages/i18n/tests/EN/build/extrusion.md b/packages/i18n/tests/EN/build/extrusion.md new file mode 100644 index 00000000..f293d723 --- /dev/null +++ b/packages/i18n/tests/EN/build/extrusion.md @@ -0,0 +1,170 @@ +--- +id: extrusion +title: Extrusion Machine +nav: kb +menu: + kb: + parent: build + weight: 20 +--- + +{{< youtube p4NoY33-Tfo>}} + +# Build an Extrusion Machine + +### What is this machine? + +Extrusion is a continuous process where shredded plastic enters the hopper, heated and pressed with a screw through a long barrel. The output is a steady line of plastic, and as this machine runs continuously, if you have enough plastic and a well-streamlined process you could (technically) be recycling 24/7 +Tip : to increase efficiency and diversity we recommend to [upgrade the extruder- YouTube](https://www.youtube.com/watch?v=zNGuuSKE1pY) with the compression screw. + + +### Video Chapters + +- 00:00 Introduction +- 00:46 Hopper +- 02:22 Barrel +- 04:48 Nozzle +- 07:05 Barrel holder +- 08:44 Framework +- 10:43 Electronics +- 15:03 How it works + +With this machine you can create filament (challenging but doable), granulate or get creative and spin this continuous line around a mould, and is great for educational purposes as the process is very straightforward and easy to understand. When plastic is extruded it nicely blends different colours together and produces a homogenous and clean colour. + +## Technical information + +Type | Extrusion Machine +--- | --- + Version | 2.0 +Price new material in NL | +/- €500 + motor +Price scrap material in NL | +/- €200 +Weight | 35 kg +Dimensions | 500 x 1020 x 1120 mm +Screw size | 26 x 600 mm wood auger + Max running time | 4H/Day +Voltage | 380V +AMP | 5.8A +Input Flake Size | Medium, Small +- Nominal Power | 1.5 kW minimum. +- Nominal Torque | 109 Nm +- Output Speed | 40-140 r/min + +![Extrusion v3](/build/extrusionv3.jpg) + +## 3D Model + + + + +# Required machinery & skills + +Build Extrusion | Machines needed | Skills needed +--- | ---| --- + | - Drill press + - Welding machine (not specific) + - Angle grinder | - Welding (intermediate) + - Assembling (intermediate) + - Electronics (intermediate) + +## Electronic box + +Explanation of the electric components inside this machine. More information and schematics can be found in the download-kit. + +* PID Controller: the brains of the machine where you can set your desired temperatures. It will send power to the heaters until PV (point variable) matches the SV (set value). It does this using readings from the thermocouple and the SSR. +* SSR: the Solid State Relay is an electronic ‘switch’ that opens and closes depending on the signal it receives (from the PID). +* Thermocouple: basically a thermometer. +* Band heater: heating element that fits around a pipe. +* Power switch: mechanical switch. +* LED indicator: LED that will shine with power (often found with Power switch). +* Power cable: common household power cable. + +Tip : Here is a [good forum topic about electronics](https://forum.osr-plastic.org/t/the-big-electronics-topic/) +### Tips & tricks while making + +- Alignment of the motor and couplings is key, any misalignment could cause future wear and tear. To do this we recommend drilling holes into the plates and attaching them to the motor. Align and then weld the plate in position to the frame. +- Any bolts used should be used in tandem with locking nuts to prevent them from loosening over time. +- When choosing a gearing system bear in mind that the extrusion screw applies lateral pressure into the gearbox. Avoid using linear systems that don't have a back plate such as motors found in garden mulchers. +- Choose bearings that can handle directional load (such as a tapered bearing) +- Installing a VFD with this machine makes using it a dream. + +## Input & Output + +Type: HDPE, LDPE, PP, PS + +Flake size: <5mm +Output: Depends on nozzle, ±5 kg/h + +## Run & maintain + +You can set the temperature from the controllers on the electronic box. The heating elements are wired into two groups - nozzle and barrel are marked on top of the controllers. The first three elements (barrel) should be set at a slightly lower temperature than the last one near the nozzle. This is to make sure the plastic gets a last boost of heat right before it comes out. Below you can see a diagram with the best settings for this machine based on our experiments (tip: you could your own to see what works best for you). The optimal temperatures below are drawn using a motor turning at 70rmp. If your motor turns faster you would need higher temperature as the plastic flows faster through the barrel and has less time to melt, vice-versa if the motor is slower. +Tip : Make a stand for your output/mould to stabilize it and make your life easier. + +### How to operate the extruder + +1. Heat the machine to the desired temperature. +2. Wait 20 minutes. +3. Add desired plastic in the hopper. +4. Turn on the motor. +5. The material that comes out of the machine for the first 2 minutes is to clean the machine from old plastics from previous sessions. +6. The machine is now ready for production! + +### Troubleshooting + +- PID settings for K-Type - Change to J-Type (Ask vincent) +- Machine Jams? Change the poles in motor wiring to reverse. +- The most common problem with the extrusion is having an output that is not uniform. There are a few reasons why this could happen: +1. The plastic can be dirty, clogging the nozzle and making it difficult for the plastic to get out. +2. Two different types of plastic are mixed together, common causes for this can be contamination in the sorting stage or plastic left in the barrel from previous activity. In this case, one plastic type melts while the other doesn’t obstructing the plastic flowing through the nozzle. +3. The temperature is not high enough and the plastic in the barrel does not manage to fully melt. +4. You can solve the above problems by checking the integrity and purity of the raw material or by raising the temperature. Upon adjusting your process make sure to empty the entire barrel before attempting to make a new product + +### Pros & cons + +Pros | Cons +--- | --- +Continuous output | Complex to build +Relatively cheap | Not built to run long +Large products possible | Output is low +User Friendly | + +# Built by the community + +
+ +![Community Extrusion](/build/community/community_extrusion.jpg) + +![Community Extrusion](/build/community/deskfactory.jpg) + +![Community Extrusion](/build/community/machinehack-ppukraine.jpg) + +![Community Extrusion](/build/community/machines-inajason.jpg) + +![Community Extrusion](/build/community/tableextrusion.jpg) + +
+ +## Related + +- [Shredder & Extruder - Industrial Electronics ](https://forum.osr-plastic.org/t/shredder-and-extrusion-industrial-electronics-2/) + +- [Extrusion Beam Tests](https://forum.osr-plastic.org/t/bean-extrusion-optimization/#post-131338) + +- [V4 Beam Production](https://forum.osr-plastic.org/t/beam-production-v4/) + +- [V4 Extrusion Products](https://forum.osr-plastic.org/t/extrusion-machine-products-v4/) + +- [V4 Tubes & Profiles](https://forum.osr-plastic.org/t/v4-extrusion-tubes-and-profiles/) + +- [V4 Extrusion Moulds](https://forum.osr-plastic.org/t/extrusion-moulds-v4/) + +- [How-to: Beam Mould - Library](https://osr-plastic.org/howtos/make-a-mould-to-extrude-beams) + +- [How-to: Flat Nozzle - Library](https://osr-plastic.org/howtos/make-a-flat-nozzle-for-the-extrusion-machine) + +- [How-to: Different Textures - Library](https://osr-plastic.org/howtos/extrude-different-textures) + +- [How-to: Bench - Library](https://osr-plastic.org/howtos/make-a-bench-with-beams) + +- [How-to: Shelf - Library](https://osr-plastic.org/howtos/make-a-shelf-with-sheets--beams) + +- [How-to: Glass Beams - Library](https://osr-plastic.org/howtos/make-glass-like-beams) diff --git a/packages/i18n/tests/EN/build/extrusionpro.md b/packages/i18n/tests/EN/build/extrusionpro.md new file mode 100644 index 00000000..9be3520f --- /dev/null +++ b/packages/i18n/tests/EN/build/extrusionpro.md @@ -0,0 +1,104 @@ +--- +id: extrusionpro +title: Extrusion Pro +nav: kb +menu: + kb: + parent: build + weight: 22 +--- + + +![Extruder Pro](/build/extruderpro.jpg) + +## Extrusion Pro information + +| Specification | | +|----------|-------------| +| Type | Single Screw | +| Version | 1.0 | +| Price new material in NL | +/- €2000 | +| Weight (inc frame) | 110 kg | +| Dimension | 1500 x 600 x 1550 mm| +| Power (W) | 5 kW| +| Voltage | 400V| +| AMP | 16A| +| Input Flake Size | Small | +|Screw diameter | 30mm| +|Length of screw (mm) | 790 mm | +|Effective screw length | 600 mm | +|Rated Motor Power | 3 kW | +| Motor Type | (check the build section for more details) | +| - Rated Motor output Torque | 109 Nm | +| - Rated Motor output speed | 263 RPM | +| - Max. Motor and Inverter power | 3 kW| +| - Recommended motor shaft | 30 mm| +| - Heating zones | 3 | +| - Heating power: max. | 2 kW| + + +# 3D Model + + + +## Pros & cons + +### Pros + +The extruder is one of the fastest and most efficient to melt plastic among Precious Plastic machines. It is a safe and reliable machine amongst our machine’s family! + +The Extruder Pro screw is designed to work with multiple types of plastics. Which will make you capable of working with different kind of plastic in small batches. Also this machine is conceived to be much more polyvalent than other industrial machines, allowing you to extrude into moulds, shapes, different nozzles… + +### Cons + +This machine requires a higher skill set of machining amongst Precious Plastic machines. It also requires a large motor and a specialized screw that make it a relatively expensive machine compare to other Precious Plastic machines. + +### Normal VS Pro + +Compared to smaller version of extruder, this machine: + +- Has a larger screw which gives a higher output +- Optimized screw design brings an homogeneous melt for a better quality plastic +- An improved bearing design to support axial and radial extrusion forces +- Is made to run for full days +- Easier assembly and servicing +- Overall stronger and tested components +- A safer and easier to build electronic box +- Has a larger insulated hopper allowing better fluidity + +## Input & output + +A variety of plastic types will be effective in this extruder. Each plastic type has its own properties and behaviours (flexible, hard, liquid etc.). Materials with a wide melting temperature range are easiest to work with. We suggest starting with PP, HDPE, LDPE or PS since they require less temperature precision. We do not recommend trying polymers with smaller melting temperature windows (such as PET), but if you decide to do so, please take safety precautions. + +You can set the temperature using the controllers on the electronic box. The heating elements are labeled and wired into three groups (nozzle, barrel and feeding). We recommend to use the temperatures from the table below as a general rule of thumb. This is to help make sure the plastic is fully melted right before it comes out. + +### Make sure the extruder is up to temperature before starting the motor! + +| Plastic Type | Feeding Zone (C°) | Barrel Zone (C°) | Nozzle Zone (C°) | +|--------------|-------------------|------------------|------------------| +| PP | 190 | 200 | 200 | +| PS | 200 | 210 | 210 | +| HDPE | 190 | 200 | 200 | +| LDPE | 190 | 200 | 200 | + +Some examples of extrusion times for some moulds: + +- Beam Mould (2000 mm x 40 mm x 40 mm): 8 Min +- Little Lego Brick Mould: 4 Min +- Big Lego Brick Mould: 6 Min +- Skateboard Mould: 20 Min + +![Image](/build/extruderpro-output.jpg) + +## Resources + +- [Buy or sell parts & machines on our bazar](https://shop.osr-plastic.org) +- [Find a local machine shop on our map](https://osr-plastic.org/users/Europe.html) +- [How-to: make light beams - Library](https://osr-plastic.org/howtos/make-a-lamp-with-beams) +- [How-to: make a T profile - Library](https://osr-plastic.org/howtos/make-a-tshape-beam-) +- [Quick release nozzle - Library](https://osr-plastic.org/howtos/make-a-quick-release-for-the-extrusion-machine) +- [Flat nozzle - Library](https://osr-plastic.org/howtos/make-a-flat-nozzle-for-the-extrusion-machine) +- [Documentation of screw](http://www.mie.uth.gr/ekp_yliko/_Chapter_5a.pdf) +- [Documentation](http://www.polydynamics.com/Rheology.pdf) +- [Documentation of hopper cones](http://craig-russell.co.uk/demos/cone_calculator/) +- [Documentation](http://www.mvt.ovgu.de/mvt_media/Vorlesungen/Lecture_SFPS/Folien_SFPS_4-p-2002.pdf) diff --git a/packages/i18n/tests/EN/build/extrusionprobuild.md b/packages/i18n/tests/EN/build/extrusionprobuild.md new file mode 100644 index 00000000..df83a497 --- /dev/null +++ b/packages/i18n/tests/EN/build/extrusionprobuild.md @@ -0,0 +1,146 @@ +--- +id: extrusionprobuild +title: Extrusion Pro - Build +nav: kb +menu: + kb: + parent: build + weight: 23 + +--- +{{< youtube 3-JFVo6BDA4>}} + +## Build an Extrusion Pro + +Welcome to the Extruder Pro! This is a stronger, bigger and more robust version of our V3 extruder so if you are looking for serious production and have advanced milling and lathing skills, continue on! If you are starting out, or looking for a smaller and easier machine to build, we advise you to start with the original extruder (which is still badass). + +Tip : Making the extruder requires fine precision and eye for tolerances, if you are not precise enough try to find complex parts on the bazar. They are small and easy to ship. + + +### Video Chapters + +- 00:07 Introduction +- 01:30 Bearing body and shaft +- 08:49 Barrel inlet +- 12:17 Barrel +- 15:13 Motor adapter +- 16:35 Hopper +- 17:39 Electronics +- 19:45 Frame +- 20:19 Final assembly +- 24:11 Maintenance and how to run + +## Required machinery & skills + +Build Extrusion Pro | Machines needed | Skills needed +--- | ---| --- + | - Lathe + +- Drill press +- Milling machine +- Welding machine (TIG or MIG/MAG recommended) +- Torq wrench| - Welding (advanced) +- Machining (advanced) +- Assembling (intermediate) +- Electronics (intermediate) + +## Materials and parts + +### Motor selection & explanation + +We recommend to use motor output torque in the range of 80-120 Nm, in which 120 Nm is the recommended Max. output torque value and 80 Nm the minimum value. We recommend to use a motor with a max. power output of 3 kW Which corresponds to a maximum (Output shaft) speed of 220 - 320 RPM (assuming 90% gearbox and motor efficiency). We recommend to avoid worm-type gearboxes due to their low efficiency. + +Before buying a motor, you need to be aware of the standard voltage and frequency of electricity in your country. These numbers vary worldwide and can make importing a motor complicated: + +![Voltage Map](/ex1_map.jpg) + +The coupling of your asynchronous motor (delta or star) depends on the mains voltage of your installation and the rated voltage of the motor. If your configuration is wrong the motor may run but with low torque, it may trip your building’s circuit breaker, or it could burn out your motor. + + + +Most Variable Frequency Drives (VFD’s) ore required to work with the motor connected in a Delta configuration, but check your VFD manual for more information. + +![Star Delta Connectiion](/ex3.jpg) + +### Coupling option & explanation + +A Shaft Lock Cone Clamping method was chosen to clamp the extrusion screw because it can handle large torques in a small amount of space. It is also designed for easy maintenance of the extruder’s components. It is easy to install and remove the coupling from the gearbox. Be sure to use a clamp that can support a minimum 250 Nm torque. + +### Hopper shape + +Square feed hoppers work well, except when there is a large variation in plastic particle size and shape. The choice of hopper bottom shape is influenced by many factors. Pyramid hoppers are typically used with relatively free flowing products that are stable with time and with bulk materials with uniform pellet size. Conical vessels are relatively simple to construct and have an excellent shape to sustain internal pressures. + +## Electronic box + +### Explanation of electric component roles + +![PID](/ex4_PID.jpg) + +### PID controllers + +The three PIDs control the temperature of the heating collars. Each is paired with a thermocouple that measures the temperature at a designated point in the process. These temperature sensors are extremely rugged, low-cost, and self-powered. You do need to be careful because there are many types of temperature sensors. The most common thermocouple models are J, T and K type thermocouples, which are available in pre-made forms. + +### Ensure your thermocouple sensor as the same type as your PID (J,T Or K). + + + +The majority of PIDs are type K by default, but it is sometimes possible to use other types by changing the initial setting through the initialization mode: + +- PID REX C100 Page 7 Chapter 7.1 https://www.mpja.com/download/rex-c100.pdf + +### Frequency Driver + + + +A VFD (Variable Frequency Drive) is a precision electronic device specifically designed and used to control the speed of AC induction motors without affecting the electric consumption, torque, impedance, etc. of the motor. + +## Tips & tricks while making + +### Mould + +At the nozzle of the machine, you can use different types of connections to attach your mold. Cam lock & dovetail are good for quick release applications, and a screw nozzle is great for products requiring high pressure output. + + + +You will obtain different surface finishes depending on the temperature of your mold. Preheated molds give you a very smooth finish and cold molds will be wavier. + + + +When using the machine to make beams, it is easy to see when the mold is full, but for other objects things get tricky. Here are a few tricks that we found: + +- Set a timer if you know the material flow rate and volume of mold, +- Tiny exit holes (1 mm) +- For the brick, we have been using vise grips on the dovetail connection. When the pressure gets high enough, the vise grips start to open and indicate completion. + +If you want to make bigger object, a technique that works well is to create back pressure in the mold so that the plastic fills the whole section. A plunger with a high temperature silicone seal is the cheapest and most simple solution we found up to now. If you want to augment the pressure, you can add weight to the plunger. + + + +When you want to make beams with a complex profile or with a plastic with a small shrink rate (such as PS) two part molds can be a good solution to facilitate the unmolding process. The photo below shows a screwed flat bar that will create a groove in the beam, and minimize additional machining for its designed purpose. This kind of design reduces post processing time and prevents the creation of microplastics. + + + +## Additional Options + +### Barrel support + +If you frequently use your machine with heavy moulds attached to it, you may need a barrel support to avoid bending the extruder from the repeated stresses. + +You can find the technical drawings in the download kit. + + + +### Heating protection option + +We recommend to cover the barrel of the extruder to prevent burning and minimize the thermal diffusion in the air of the heating collars. To build this protection, simply cut and fold a thin steel plate manually (a cylindrical object can be used to make the bending pattern). + +You can find the technical drawings in the download kit. + +It remains to use an insulating material to be inserted between the barrel and the steel plate. Different types of insulation can be used: + +- Ceramic wool (best option) +- Mineral wool +- Rockwool +- Glass wool + + diff --git a/packages/i18n/tests/EN/build/extrusionprorun.md b/packages/i18n/tests/EN/build/extrusionprorun.md new file mode 100644 index 00000000..bd47ab2e --- /dev/null +++ b/packages/i18n/tests/EN/build/extrusionprorun.md @@ -0,0 +1,105 @@ +--- +title: Extrusion Pro - Run +nav: kb +menu: + kb: + parent: build + weight: 24 +--- + +![Shredder](/build/extruderpro-run.jpg) + +# Run and Maintain the Extrusion Pro + +## How to Start + +1. Turn on the main switch +2. Select the desired temperature on the 3 PIDs +3. Pour the plastic inside the hopper +4. Wait until you reach the desired temperature (around 15/20 min) +5. Put your mask / put ventilation on +6. Turn on the motor at slow speed to check for plastic flow +7. (optional) If you change the material from the previous session, you need to clean the barrel from old plastics by letting it run until the old plastic is replaced by the new one. +8. The machine is now ready for production. + +## Production + +1. If a mould is required for the desired product, attach it to the nozzle +2. The flow can be adjusted by increasing or decreasing the speed on the VFD (0 to 50/60HZ) +3. You can start and press run on the VFD +4. Keep enough plastic flakes in the hopper while extruding to reduce chances of bubbles in the extruded plastic. + +## Tips & tricks while using + +Before setting up your mold, check the nozzle to see if the plastic looks homogeneous, fluid and check the viscosity and color. + +If you change plastic let the machine run for a minute to make sure the barrel is clean from the previous plastic type. + +Shredded flakes smaller than 7 mm and rounded feed through the hopper very well. Longer and thinner flakes tend to stay stuck in the hopper. You can either granulate them to smaller grains or install a hopper vibrator to improve the feeding. Plastic granules generally allow for better feeding. + +No plastic exiting the nozzle and abnormally high temperature readings means that a lot of friction is happening in the barrel and that the pressure is rising. Immediately shut off the machine as there is probably a clog somewhere preventing the plastic to flow out. + + +Make sure there is always plenty of plastic in the hopper. you can hear a high-pitched squeak noise or metal on metal rubbing sounds if the barrel is empty. In that case, refill the hopper of stop extrusion to prevent excess wear. + +# Maintain + +The extruder is a simple and robust machine. However, if you wish to keep it for a long time, we will now give you a few maintenance tips for your machine: + +## Bearing lubrication + +Make sure there is plenty of grease in the bearing housing. You can add a little grease with the greasing nozzle every month to make sure they are always well lubricated. + +## Gear box lubrification + +Depending on the type, the gear unit can be lubricated with grease or oil. Each gear unit is equipped with a lubrication plate. Check and follow the maintenance instructions from your motor and gearbox supplier. + +## Barrel maintenance + +Your barrel is made out of mild steel, and designed to be easy to build. You’ll want to avoid rust from getting on the inner part of the barrel. Letting the plastic cool down inside the barrel will prevent rust in the barrel. If you don’t use it for a long time, you can add a little silicon oil after having emptied plastic from the barrel to avoid rust. The screw is hardened and expected to last longer then the barrel. Make a new barrel if required. + +## Check the tightening torque of the screws + +Frequently check the tightening torque of the screws (coupler,motor adaptor etc) of the extruder. + +# Troubleshooting + +## 2 heating elements stopped working together + +If you notice that 2 heating elements wired together are not working anymore, chances are that your Solid State Relay (SSR) is the problem. Open the electronics box and verify that the wires are well connected. If the wiring is good and the LED light doesn’t turn ON on the relay, you probably need to change it. + +If you change it and it still doesn’t work with the new Solid State Relay, you need to change your PID controller. + +## A heating element stopped working + +If you notice that a heating element is not working anymore, open the electronics box and verify that the wires are well connected and that the SSR connected to it has his LED working when you start your extruder. If you checked that, the problem is therefore the heating collar and you need to change it. + +The heating collars may stop working if you bend them out of shape too much, be careful when putting them in or removing them from the barrel. +Also don’t go over the maximum temperature of the heating collar. + +## Engine overheating + +If you notice your engine overheating, test your motor in a warm surrounding environment or let it run for a long time on low speed ( <20 Hz). If the motor fan is then not sufficient to cool it an additional fan should be installed at the top of the motor. + +## Extrusion Screw doesn’t turn + +An overload of the motor is often the main cause of a motor malfunction. Checking the error message on the VFD will guide you to the reasons for the shutdown ( In the case of the bosch rexroth efc 5610 and a converter overload there will be the code OL-1) + +You can also check the conformity of the connection on the terminal plate, depending on your connection to the mains, you must connect your three-phase motor in Delta or Star mode. It affects the torque that the motor provides. Check the tightening torque of the extrusion screw coupler also if the shaft is turning and not the extrusion screw. + +It can be also the plastic you put in the hopper that didn’t melt enough and is still solid or has a too low MFI to be used by the machine. + +## Foreign object in the hopper + +If something falls in the hopper and blocks the screw, you should try to slowly reverse the motor : You can reverse the direction of the motor by physically swapping any two motor phases. Or by changing the frequency driver parameters. + +Be careful not to drop metal parts in the hopper. You can remove magnetic objects from your shredded plastic by probing with a magnet. Remove the barrel to take out any debris is necessary. + +## Output plastic not uniform + +The most common problem with the extrusion is having an output that is not uniform. There are a few reasons why this could happen : + +1. Dirty plastic may have clogged the nozzle making it difficult for the clean plastic to get out. +2. Two different types of plastic are mixed together, common causes for this can be contamination in the sorting stage or plastic left in the barrel from previous activity. In this case, one plastic type melts while the other doesn’t and obstructs the plastic flowing through the nozzle. +3. The temperature is not high enough and the plastic in the barrel does not manage to fully melt. +4. You can solve the above problems by checking the integrity and purity of the raw material or by raising the temperature. Upon adjusting your process make sure to empty the entire barrel before attempting to make a new product. diff --git a/packages/i18n/tests/EN/build/injection.md b/packages/i18n/tests/EN/build/injection.md new file mode 100644 index 00000000..3118cb41 --- /dev/null +++ b/packages/i18n/tests/EN/build/injection.md @@ -0,0 +1,214 @@ +--- +id: injection +title: Injection Machine +image: "/build/injection.jpg" +nav: kb +menu: + kb: + parent: build + weight: 15 +toc: true +--- + +{{% warning %}} +Warning / Remarks + +- This machine is known as rather disapointing and difficult to operate. Please consider an arbor injector instead. +- Plunger diameter should have a clearance of exactly 0.1mm to the barrel. +- If applicable, please use a brass or bronze tip for the plunger. This reduces contact to the barrel and friction. +- Using plumping connectors adds unheated 'dead zones'. In return, plunging becomes more difficult. +- The original v1 uses a too long plunger. Please use a 40 cm long plunger instead to ease the process. + + +{{% /warning %}} + +# Build an Injection Machine + +{{}} + + +### Video Chapters + +- 00:07 Introduction +- 00:43 Hopper +- 02:01 Barrel +- 03:58 Nozzle +- 04:53 Framework +- 06:55 Electronics +- 10:30 How it works + +## What is this machine? + +Shredded plastic enters the hopper and is heated and pressed through a long barrel into your mold. The output colour is often unpredictable when mixing colours in the barrel, allowing for beautiful (and surprising) patterns that can add to your one-of-a-kind products. + + +## Technical information + +Type | Injection +--- | --- + Version | 1.0 +Price new material in NL | +/- €300 +Price scrap material in NL | +/- €150 +Weight | 35 kg +Dimensions | 830 x 700 x 1300 mm +Barrel volume | 100 - 320 cm³ +Leverage | 3 +Injection pressure | 45 bars +Max mould size | 360 x 330 mm +Injections p/h | 10 - 30 +Voltage | 220V +AMP | 2.6A +| Input Flake Size | Medium, Small | + +![Injection machine](/build/injection.jpg) + +## 3D Model + + + + + +## Required machinery & skills + +Build Injection | Machines needed | Skills needed +--- | ---| --- + | - Drill press
- Welding machine (not specific)
- Angle grinder
| - Welding (intermediate)
- Welding (intermediate)
- Assembling (intermediate)
- Electronics (intermediate) + +## Electronic box + +Explanation of the electric components inside this machine. More information and schematics can be found in the download-kit. + +- PID Controller: the brains of the machine where you can set your desired temperatures. It will send power to the heaters until PV (point variable) matches the SV (set value). It does this using readings from the thermocouple and the SSR. +- SSR: the Solid State Relay is an electronic ‘switch’ that opens and closes depending on the signal it receives (from the PID). +- Thermocouple: basically a thermometer. +- Band heater: heating element that fits around a pipe. +- Power switch: mechanical switch. +- LED indicator: LED that will shine with power (often found with Power switch). +- Power cable: common household power cable. + +Tip : Here is a [good forum topic about electronics](https://forum.osr-plastic.org/t/the-big-electronics-topic/) + +## Tips & tricks while making + +- Take care welding around the hopper tabs. The heat can easily distort the barrel. +- Adding an insulated barrel cover will increase efficiency and reduce the chances of the user accidentally touching the barrel when hot. +- When building, the lever is stronger as a circular profile when compared to a square profile. Which will reduce the likelihood of bending it. +- Build the machine rigid and precise as possible. + + +## Input & Output + +Type: HDPE, LDPE, PP, PS + +Output: 10-30 injections per hour depending on mould + +## Run & maintain + +You can create beautiful, consistent products with the injection machine very efficiently, but it takes a little work upfront - making moulds, for example. The more precise the mould, the easier and more streamlined your production will be. Some quick tips: + +### Startup + +1. Turn the machine on and set the temperature to 20° more than the desired temperature. Make sure the lever is at its lowest position. +2. Wait for at least 20 minutes. +3. Turn the temperature down and fill the barrel with the desired plastic. +4. Wait another 15 minutes for the plastic to melt - the first batch of plastic is used to rinse the machine and to get rid of plastic from previous sessions. +5. Press the first batch of plastic out of the machine. +6. The machine is now ready for production! + +### Production + +1. The machine is now warm and ready to use with your moulds +2. Fill the barrel with your chosen plastic. +3. Press the lever in the barrel. +4. Pull the lever up every 5 to 10 minutes and add more plastic. +5. Wait at least 10 minutes. +6. Now for the mould - unscrew the brass screw at the bottom. +7. Screw in the mould (be quick or plastic will start to flow out!) +8. Once the mould is secured to the machine pull the lever down as far as possible, don’t be scared to give it a lot of pressure, it can easily hold 100kg. +9. Unscrew the mold from the machine. +10. Pull the lever up. +11. Screw the brass screw in place. +12. Fill the machine for a new product. +13. Let the mould cool. +14. Open the mould once it is cooled down. + +Tip : Depending on the plastic type, you’ll need one or sometimes two people to pull down the lever. +Before injecting into the mould, make sure the plastic in the barrel is completely melted in order to fill all areas of the mould. To achieve this, run the machine a few degrees higher than usual to ensure the plastic is fully molten. + +### Cooldown + +1. When you turn on the machine, empty the barrel completely - this makes it easier for the next person using the machine. +2. Leave the machine with the lever all the way down. +3. Turn the machine off. + +### Tips & Tricks while using + +1. The hotter the plastic the greater the sink marks on the final product. +2. Clean the mould from plastic when still warm, it will be harder to clean later. +3. Use mould release on the mould, it helps with release. +4. Keep the barrel full with plastic at all times, adding a bit of plastic with each injection. +5. When you are finished working with the injection machine, empty the plastic from the barrel. +6. To create an efficient process it is advisable to run the machine for a few hours once it is on - don’t start and stop the machine too often as the process will be very inefficient. + +## Troubleshooting + +- If the plastic is clogging at the end of the barrel and doesn’t come out even when applying higher pressure, raise the temperature of the nozzle heater to fully melt the plastic and release the block. + +The final product might get stuck to the mould making it hard to release, if this happens gently re-heat the mould to soften the plastic and help release. + +## Pros & cons + +Pros | Cons +--- | --- +Easy to manufacture | Process can be tedious| +Runs on 220V | Only a small amount of waste recycled| +Relatively cheap || +Batch production || + +## Example Builds + + +{{< gallery dir="build/machines/injection" class="" height="400" width="400" webp="false" command="Fit" options="" zoomable="true" >}} + + +## Opensource versions + +- [OSR - Plastic / Library / Injection](https://osr-plastic.org/library/#injection) +- [Gingery Injection Molder - OSE](https://wiki.opensourceecology.org/wiki/Injection_Molder) + +## Injection machines on Youtube + +- [Benchtop injection by *AndysMachines*](https://www.youtube.com/watch?v=nefLfhUaODM) +- [Automated injection by *AndysMachines](https://www.youtube.com/watch?v=WCEvjRdkjrU) + +## Moulds + +- [OSR - Plastic - Library / Moulds](https://osr-plastic.org/moulds/) + +## Howtos + +- [Upgrade: Make a Quick Release Mould - Library](https://osr-plastic.org/howtos/make-a-quick-release-opening-system-for-injection-moulds.html) +- [How-to: Carabiner - Library](https://osr-plastic.org/howtos/make-a-carabiner-cnc-vs-lasercut.html) +- [How-to: Quick Release - Library](https://osr-plastic.org/howtos/make-a-quick-release-for-the-extrusion-machine.html) +- [How-to: Cast Aluminium Moulds- YouTube](https://www.youtube.com/watch?v=5LhHUBz9uL0.html) +- [How-to: CNC iPhone Case Mould- YouTube](https://www.youtube.com/watch?v=ZYFoWP-3MYE.html) +- [How-to: Geodesic Dome - Library](https://osr-plastic.org/howtos/build-a-geodesic-dome.html) +- [How-to: Precious Plastic Monash Machine](https://www.preciousplasticmonash.com/download-kit.html) +- [How-to: Handplane - Library](https://osr-plastic.org/howtos/make-a-handplane-simple-mould.html) +- [How-to: Broom Hanger - Library](https://osr-plastic.org/howtos/make-a-broom-hanger.html) + +## Forum posts + +[% render "discourse-cat-items.osr" cat:"50" %] + +- [Development: The Story Behind the Piranhaclamp](https://forum.osr-plastic.org/t/the-story-behind-the-piranhaclamp/) +- [Benchtop Injector](https://forum.osr-plastic.org/t/benchtop-smaller-machines/) +- [Injection Moulding - Optimization & Speedup Tips](https://forum.osr-plastic.org/t/injection-moulding-optimization-speedup-tips/8451) +- [Firmware *PreciousPID*](https://forum.osr-plastic.org/t/pid-firmware-for-injection/6603) +- [Mould standards](https://forum.osr-plastic.org/t/pp-v4-mold-standard/6579) + + +## Commercial Options + +- [Clark - 25](http://www.crclarke.co.uk/products/25-injection-moulding-machine) +- [OSR - Plastic Shop](https://shop.osr-plastic.org/injection/) diff --git a/packages/i18n/tests/EN/build/sheetpress.md b/packages/i18n/tests/EN/build/sheetpress.md new file mode 100644 index 00000000..f1c5a03a --- /dev/null +++ b/packages/i18n/tests/EN/build/sheetpress.md @@ -0,0 +1,125 @@ +--- +id: sheetpress +title: Sheetpress +nav: kb +menu: + kb: + parent: build + weight: 30 +--- + + + +![Sheetpress](/build/sheetpress.jpg) + +## Sheetpress information + +| Specification | | +|--------------------------------------|-----------------------| +| Type | Sheetpress | +| Version | 1 | +| Price new material in NL | +/- €2.550 | +| Additional system (Cooling press + table) | +/- €860 | +| Weight | 450kg (Sheetpress) | +| Sheetpress Dimension | 1620 X 1620 X 1780 mm | +| Voltage | 400V | +| AMP | 32A | +| Power | 15kW | +| Input Flake Size | Large, Medium, Small | +| Max Running Time | 8 hours per day | +| Max temp | 300°C | +| Tested Plastics | HDPE, LDPE, PP, PS | +| Using foils? | Yes | +| Input Between Plates | 300mm | +| Size of Sheet | 1000 x 1000 mm | +| Range of Sheet Thickness | 4 - 35mm | +| Sheets Per Day (12mm) | 3 | +| Sheets Per Day with full system (12mm) | 10 | + + +## 3D Model + + + +## Pros & cons + +### Pros + +Low material cost in comparison with market machines, typically 10,000+ for systems that produce sheets greater or equal to 1mx1m. + +This is the first press we have seen that transfers heat through conduction alone, not convection or conduction and convection which is the typical heating technique. This makes the heating process faster and more energy efficient than the alternatives on the market. + +Can be run by one person, most other systems require two people to operate. No other systems on the market include usability tools meaning multiple people are needed at various steps of the sheet making process for sheets of this size. + +With the full system you can heat and press sheets simultaneously which allows you to produce sheets much faster than a standalone Sheetpress which is typically the type of system available on the market. + +Ease of build and diversity of molds, the molds we have developed are comparatively simpler and cheaper to make than molds from other systems. + +### Cons + +Sheet size 1m x 1m, many manufacturing processes have been designed to work with 1220mm x 1220mm and there are sheet pressing systems available on the market that can produce sheets larger than this system. + +Most mid-small workspace machinery only requires 16A but the Sheetpress requires 32A. +Compared with other Precious Plastic machines the Sheepress is significantly larger. It does not fit through a standard door or double doors like all the others and requires at least a small garage door to fit it inside. + +The machine does not have wheels and is not moveable by human power, so it requires a pallet/pump truck to move. Some other sheet pressing systems come with wheels but we opted not to for stability. + +# Input & output + +### Plastic Input + +We have successfully pressed sheets from clean HDPE, LDPE, PP and PS. The press can take any type of flakes (small, medium large). We recommend using the large flakes produced from the shredder pro using with the large sieve. Since it reduces the amount of shredding. We have had success in pressing sheets made from non-shredded bottle caps, the melting time just increases slightly with a larger size of input material. Here is a chart to give an overview in different thicknesses, times and temperatures. + + Important: you cannot press dirty plastic as it will leave burned residue on the mould which is very difficult to remove. + + | Sheet thickness | + HDPE 220° | PP 230° | PS 240° | + |------|----------------|------------|--------| + | 6MM | 6.5 KG + 40 Min | 6.5 KG + 40 Min | 6.5 KG + 40 Min | + | 8MM | 8.5 KG + 45 Min | 8.5 KG + 45 Min | 8.5 KG + 45 Min | + | 10MM | 11 KG + 50 Min | 11 KG + 50 Min | 11 KG + 50 Min | + | 12MM | 12 KG + 55 Min | 12 KG + 55 Min | 12 KG + 55 Min | + | 20MM | 22 KG + 60 Min | 22 KG + 60 Min | 22 KG + 60 Min | + + + +### Playing with colors +This is where there is room to play. You can basically mix any color as long as it is the same type of plastic. A few variables to play with, the size of the shredded plastic. Small, medium or large flakes will have a different effect. Also using transparent plastic in there gives an interesting layer of depth. More examples on the poster in the downloadkit + +![Sheetpress colors](/build/sheetpress-colors.jpg) +### How many sheets at a time? + +We recommend pressing only one sheet at a time. It may be possible to press more efficiently by melting multiple at a time but we have not figured out how to cool them evenly yet. If you figure out a way, please share it on our online community! + +### Sheet size + +The aluminum pressing plates are 1220x1220mm but there is often an overflow from the mould so we recommend making moulds of 1040mm so that once they have shrunk from cooling they are just over 1m, then the edges can be trimmed to make a perfect 1mx1m square. Thickness can be between 4 to 35 MM. + +![sheetpress](/build/sheetpress-sheets.jpg) + +## Related + +- [Buy or sell parts & machines on our bazar](https://shop.osr-plastic.org) +- [Find a local machine shop on our map](https://osr-plastic.org/users/Europe.html) +- [How to setup a full Sheetpress workspace](spaces/sheetpress.md) +- [How to make a chair with sheets - Library](https://osr-plastic.org/howtos/make-a-chair-with-bent-sheets) +- [Forum post about building the Sheetpress system](https://forum.osr-plastic.org/t/v4-sheet-press-system/) +- [Forum post about building a big oven](https://forum.osr-plastic.org/t/sheet-press-mould-oven/) +- [Forum post about an alternative version](https://forum.osr-plastic.org/t/v4-sheet-press-system/) +- [How to bend sheets - Library](https://osr-plastic.org/howtos/bend-plastic-sheets) +- [How to build a shelving system with sheets - Library](https://osr-plastic.org/howtos/make-a-shelving-system) diff --git a/packages/i18n/tests/EN/build/sheetpressbuild.md b/packages/i18n/tests/EN/build/sheetpressbuild.md new file mode 100644 index 00000000..33ba2b9d --- /dev/null +++ b/packages/i18n/tests/EN/build/sheetpressbuild.md @@ -0,0 +1,189 @@ +--- +id: sheetpressbuild +title: Sheetpress - Build +nav: kb +menu: + kb: + parent: build + weight: 31 +--- + +{{< youtube j3OctDe3xVk >}} + +# Build a Sheetpress + +Hi! It looks like you might want to build a Sheetpress? That is great! It's a very exciting machine that can recycle big amounts of plastic on a daily basis. And everytime you open up the machine it's a little suprise how the sheet comes out. But ok. Focus. We need to build it first. Watch this video to see how to make the machine in 20 minutes, or have a scroll down below to find out more about specific parts and machines you need to build it. + +> Pro tip: Before you build, make sure you to read all documentation. Its a big project so make sure you know where you're getting into. + + + + +### Video Chapters + +- 00:06 Introduction +- 01:07 Pressing Plates +- 02:46 Frame +- 04:43 Heating Elements +- 09:32 Pressing Mechanism +- 12:46 Extraction Hood +- 13:54 Electronics +- 15:35 Assembly +- 16:08 How to Use + + + + +# Required machinery & skills + +Build Sheetpress | Machines needed | Skills needed +--- | ---| --- + | - Drill press + - Welding machine (not specific) + - Lifting system (or some strong friends) | - Welding (expert) + - Machining (intermediate) + - Assembling (intermediate) + - Electronics (expert) + + + +# Materials and parts + +You need to make and buy parts. In the download-kit you can find the complete Bill of Materials. It's a list for the entire Sheetpress system. So it includes the Sheetpress, Cooling press and preparation table. Below you can find the commercial parts you need to buy and we go more in depth on where to look out for. + +### Jacks option & explanation + +The type of jack used for both presses is a long-ram hydraulic bottle jack with an eye connection (round, not plate) at the bottom that allows it to be mounted with a bolt. For the Sheetpress we recommend using a minimum 8 tons of pressure and for the cooling press we recommend using a minimum of 3 tons of pressure. Our CAD models and technical drawings are designed to fit a jack with a 28mm diameter ram which we found to be the most common. Note the tip of the ram is smaller than the rest, it is typical to list the diameter of the tip. + +### Slider and Spring Mechanism tube diameter + +The diameters of the tube for the slider and the spring mechanism are dependent on the diameter of the ram of the jack. The inner section of the spring mechanism and hence the rail for the pressing plates should be the same diameter as the ram. As the outer section of the spring mechanism and the rail need to run smoothly their inner dimension is also dependant on the dimension of the ram on the jack. Ideally the outer dimension should be as thick as possible for strength, as long as your spring fits accordingly. These dimensions are very similar to the Injection barrel and plunger. If you have them left over from building the injection, see if they fit your jack, or try and find a jack that fits them. Alternatively you can modify them on a lathe to fit the jack. + +### Spring choice + +We used a die spring but you could also use a racing motorbike spring or any other that has close dimensions to the one we used which can be found in the engineering drawings. We chose the firmest spring we could, the firmer the better, as long as it is possible to compress it with the jack you use. + +### Heating element option & explanation + +We chose 300W cartridge heaters as our heat source. Cartridge heaters allow the heat to be transferred through conduction, as opposed to radiation, which is much more energy efficient than the alternative. Using many small heat sources spread across the heating plates as opposed to a few large heat sources allows the heat to be distributed evenly. Despite being small, 300w in the quantity that we used is more than a sufficient amount of heat to efficiently melt the common types of plastic we are processing. + +If you are going to modify the size of the Sheetpress, we found that one 300W element can sufficiently heat a 240x240mm 10mm thick plate of aluminium. Just adjust the number of these heating elements accordingly. Also note, that we offset the heating elements on the upper and lower heating plates to achieve more even heating. + +### Aluminium sheet option & explanation + +Precision milled aluminium as opposed to rolled aluminium was used as it has several advantages over rolled aluminium. It is less prone to warping with heat, stronger, so less prone to bending from pressure and the surface has a smaller tolerance so it is flatter. + +### Mould Steel choice + +We recommend using either 2mm stainless steel sheet or 2mm galvanised steel sheet for the moulds. Any thinner is too prone to damage from pressing. These sheets are also resistant to corrosion and often come with a polished surface finish which is very favourable for this application. Mild steel sheets also work but have a shorter lifespan due to corrosion and increased tendency for plastic to stick to an unpolished surface. To ensure maximum lifespan of your moulds, keep the following points in mind; + +- Do not overload the jack while pressing (only press until the spring is fully compressed) +- Ensure you are using appropriate mould material +- Ensure the initial distribution of shredded plastic is even (not piled up in the centre) + +### Laser cut or not? + +If possible we recommend you laser cut all the sheet steel components, especially the support structure for the pressing plates. The advantages of laser cutting are both level of precision and dramatically reduced build time. If you are unable to get your parts laser cut you can cut the majority of them by hand from 100x6mm steel strip although some require a larger sheet such as the electronics box and the parts of the bottom support structure. + +### Laser Cut Steel Choice + +For the 6mm laser cut components we chose to use hot rolled (HRS 75F70) structural steel for its high tensile strength. This type of steel is hot rolled which also makes it less prone to warping when welding during construction and heating plastic during usage. + +For the 2mm laser cut components we used 2mm Cold Rolled steel (CRS CR4) as high strength is not required. + +### Mould release + +We found silicone oil to be the best performing mould release. There are many alternatives, if you find a more available or better performing solution please share it in our online community! + +### Cooling insulation interest and choice + +For the insulation material we chose mineral wool. Mineral wool is widely available, soft so it can be cut easily and packed into irregular shaped cavities. It could be substituted for similar types of soft insulation as long as the temperature resistance is enough to. Glass wool is the next closest substitute, it is commonly made from partly recycled material but it is more expensive, less widely available and more susceptible to damp and hence its life expectancy is shorter. + +# Electronic box + +![Sheetpress electronics](/build/sheetpress-electronics.jpg) + +### Explanation of electric component roles + +The core of the system runs on the typical PID-SSR-Thermocouple-Heatsync combination which features in all of our machines. + +The main difference is the addition of a mechanical relay, between the main power line in and the heating elements, triggered by the SSRs. This was added so that the current required to power the heating elements does not pass through the SSRs as during prototyping we have experienced them burning out despite being below the rated current. + +This is expected to be from the combination of current and heat conducting back down the cables. The mechanical relay provides a physical break and is larger preventing heat from building up inside the relays. + +There are two PID controllers, one for the top plate and one for the bottom plate. +The k-type thermocouples we used are 3M in length in order to reach the right position on the heating plates. + +Between the main power line and the PIDs there is a rotary switch to turn them on and off and an emergency stop. + +The heating elements are distributed evenly between each of the three phases. Each plates has one entire phase plus half of another which is shared by the two plates. E.g On the bottom plate ⅔ of the elements are on phase ⅓ of the elements are on phase two and on the top plate ⅓ of the elements are on phase 2 and ⅔ of the elements are on phase 3. The power supply from the control box enters the pressing plates and reaches a ceramic terminal, the ceramic terminal is used as it is capable of withstanding high temperatures. + +The heating elements are arranged in a 45° support structure array which is offset on the top and the bottom so that each the heating elements on one plate sit in the centre of the other plate. + +They are mounted inside an aluminium block which is mounted to the bottom of the aluminum plate to allow the heat to conduct easily. + +For the wiring inside the pressing plates we used ceramic insulated cable. Both when joining cables and attaching them to the terminals we used PTFE base heat shrink as it is capable of withstanding high temperatures. + +For any soldering we recommend using high temperature solder with a melting temperature >300°C. + +It is mandatory to ground every individual metal component, both pressing plates, both heating plates, the electronics control box and the front panel of the electronics control box. + +Cable glands are used whenever a cable passes between the inside and the outside of the body to prevent moisture entering the system and to protect the cable from physical damage. They should be face down on the enclosure to prevent liquid pooling inside the glands. + +When wiring the control box, when each wire is screwed to a terminal a crimp is used to secure the wires properly in place. + + +# Tips & tricks while making + +### Parallel build + +If you are building the Sheetpress and the Cooling Press the process is almost identical so you can build them in parallel to simplify the process. + +### Drilling jigs + +The purpose of the drilling Jigs is to both ensure that the two holes used to mount the aluminium blocks to the aluminium plate are spaced evenly so that they align properly and to ensure that the drill remains straight when drilling. + +### Welding Frame Sequence + +1. First weld the outside frames, then the bottom frame. (When mounting the jack mount plates to the bottom frame, weld the middle plate first as it is not possible to reach it once the outside plates are in place. Use the bolt to align all three plates.) + +2. Bolt the outside frames to the top pressing plate with the entire structure upside down. (Once welded turn over the structure) + +3. Take some offcuts from the beams to to position the bottom frame between the side frames. It should be 100mm from the ground to allow a pallet/pump truck to fit underneath when weld the bottom frame in place. + +### Welding Pressing Plate Sequence + +1. Tack weld the square frame that surrounds the support structure, It’s important these are the correct dimension and that holes are drilled and cable glands are attached before welding. + +2. Separate the parts for the top support structure and the bottom support structure. The pieces for the top support structure have a small notch in the laser cutting files. + +3. For each part: + * Slot the pieces together. + * Raise them on blocks so they can be clamped from underneath. + * Clamp each intersection as you tack weld it to ensure a flat surface. It is best to weld opposite points of the support structure to avoid warping from uneven tension. Tack all the intersections before fully welding them. + +4. For the bottom part weld the jack mount tabs in place. + +5. Position the support structures inside the square frames, make sure that the aluminium plate sits 3mm above the surface of the square frame. + +6. Tack weld several points where the support structure joins with the frame then fully weld them and finally the corners of the frame. + +>Tip: The most important part of the steel structure is that both sets of laser cut support structures are perfectly flat. Fortunately they’re slotted precisely to depth, so this can be done by clamping the two sections together. + +If you are building both the Sheetpress and Cooling Press make sure to weld the support structure for the Cooling Press before you install the aluminium plate in the Sheetpress pressing plates. + +# Additional Options + +### Integrated ventilation + +It is possible to run the system without the ventilation but for the safety of you and the people around you we recommend to only turn the machine on when the extraction hood is attached and the ventilation system is turned on. As well as using the ventilation hood we also recommend ventilating the ambient space around the press. The ideal environment to operate the press would be an industrial spray painting room. + +### Only Sheetpress or complete system + +You can make sheets with the Sheetpress alone but the process is slow. You have to wait for the Sheetpress to heat up and cool down for each sheet you make which means you can produce one or two sheets per day. For some people (e.g. craftsmen and artisans) this is acceptable but for many others a faster rate of production is desirable. + +To improve ease of use and efficiency we designed three tools to turn the Sheetpress in to a full-on production system. Adding a cooling press, prep table and sliding tool allows you to prepare, heat and cool sheets simultaneously. You are also able to transport them easily and safely between each three of these stages. This dramatically increases the rate of production. So if you are looking to setup an efficient production, build the whole system. If you don't have a lot of space or just want to make a few sheets, make the Sheetpress. + +![Sheetpress run](/build/sheetpress-system.jpg) + + diff --git a/packages/i18n/tests/EN/build/sheetpressrun.md b/packages/i18n/tests/EN/build/sheetpressrun.md new file mode 100644 index 00000000..12647947 --- /dev/null +++ b/packages/i18n/tests/EN/build/sheetpressrun.md @@ -0,0 +1,140 @@ +--- +id: sheetpressrun +title: Sheetpress - Run +nav: kb +menu: + kb: + parent: build + weight: 33 +--- + +![Sheetpress run](/build/sheetpress-run.jpg) + + + +# Run and Maintain the Sheetpress + +Hooray! You built yourself a Sheetpress! Let's have some fun and make sheets. Below we explain how to do this, which temperatures to use, how the workflow should be etc. But also the practical things to take in account like maintenance. + +# Make a sheet! + +## Run Standalone Sheetpress + +1. Plug in the Sheetpress, check the emergency stop is released and switch on the main power switch. + +2. Check the required temperature to melt your type of plastic and set the PID controller to this temperature. + +3. Close the pressing plates using the bottle jack and wait for them to heat up. + +4. Whilst waiting for the heating plates to warm up weigh the plastic. See the Datasheet for weights. + +5. When the Sheetpress is at the required temperature. Open the pressing plates of the Sheetpress by releasing pressure from the bottle jack. + +6. Place the bottom sheet of the mould on the bottom pressing plate and apply a layer of silicone oil. Make sure to remove any remnants of the previous sheet. + +7. Place the mould frame in the centre of the sheet and apply a layer of silicone oil to the top of the frame. + +8. Load the plastic it into the mould. + +9. Spread the plastic evenly across the area inside the mould frame with slightly less around a 100mm border offset on the inside of the edges. + +10. Oil the top sheet of the mould and place the oiled side face down on the bottom two sections of the mould. + +11. Close the pressing plates using the bottle jack until the spring is fully compressed. + +12. Whilst waiting for the plastic to melt. 2 mins before the recommended melting time close the pressing plates using the bottle jack until the jacks starts to give strong resistance. See the Datasheet (Appendix A) for melting temperatures and times. + +13. When the mould has been in the sheetpres for required melting time. Switch off the Sheetpress. + +14. Alternatively you can take out the mould and either weight it down or clamp it to allow the sheet to cool externally. + +## Run The Full Sheetpress System + +1. Plug in the Sheetpress, check the emergency stop is released and switch on the main power switch. + +2. Check the required temperature to melt your type of plastic and set the PID controller to this temperature. + +3. Close the pressing plates using the bottle jack and wait for them to heat up. + +4. Whilst waiting for the heating plates to warm up. Place the bottom sheet of the mould on the prep table and apply a layer of silicone oil. Make sure to remove any remnants of the previous sheet. + +5. Place the mould frame in the centre of the sheet and apply a layer of silicone oil to the top of the frame. + +6. Weigh the plastic and load it into the mould. See the Datasheet (Appendix A) for melting temperatures and times. See the Sheet Colour Examples poster (Appendix B). + +7. Spread the plastic evenly across the area inside the mould frame with slightly less around a 100mm border offset on the inside of the edges. + +8. Oil the top sheet of the mould and place the oiled side face down on the bottom two sections of the mould. + +9. When the Sheetpress is at the required temperature. Open the pressing plates of the Sheetpress by releasing pressure from the bottle jack. + +10. Position the prep table next to the open side of the Sheetpress. + +11. Use the sliding tool, push the mould from the prep table to the Sheetpress. + +12. Close the pressing plates using the bottle jack until the spring is fully compressed. + +13. Whilst waiting for the plastic to melt. Prepare the next mould and sheet on the prep table. (Steps 4-8). + +14. 2 mins before the recommended melting time. See the Datasheet (Appendix A) for melting temperatures and times. close the pressing plates using the bottle jack until the jacks starts to give strong resistance. + +15. When the mould has been in the sheetpres for required melting time. Open the pressing plates of the Cooling Press by releasing pressure from the bottle jack. + +16. Open the pressing plates of the Sheetpress by releasing pressure from the bottle jack. + +17. Use the sliding tool, push the mould from the Sheetpress to the Cooling Press. + +18. Close the pressing plates of the Cooling Press using the bottle jack. + +19. Load and press the next sheet in to the Sheetpress (Steps 10-13). This time stack it on top of the previous sheet. + +20. Repeat steps 13-20 until you workcycle is complete. Finished? Switch off and close the Sheetpress. + +21. Clean and apply a layer of silicone oil to the mould sheets to protect them for moisture between use. + +# Maintain + +## Weekly + +Clean the heating plates + +Use a trowel to scrape any remiant material from the heating plates. You may need to use a high volume alcohol if there is heavy corrosion + +Grease rails + +Use a wooden spatula to apply a liberal amount of grease to all the rails, we used engine grease. + +## Monthly + +Inspect and place mould sheets + +Inspect your mould sheets, if any of them are damaged beyond repair then they may need replacing. + +Grease spring mechanism + +Detach the spring mechanism and Use a wooden spatula to apply a liberal amount of grease to the touching faces. We used engine grease. + +Inspect and replace plywood sheets + +Inspect your plywood sheets, if they are damaged or significantly warped then they may need replacing. + +Check website for hacks/updates + +The community are continuously developing hacks, modifications and techniques which get shared on the internet, take a look to see what is there that can help or inspire you! + +## Yearly + +Deep clean heating plates + +Use a trowel to scrape any remiant material from the heating plates. You may need to use a high volume alcohol if there is heavy corrosion. You may also need to use a rotary sander to remove tough burnt on material but be gentle, use a high grit sandpaper (>220) to preserve the flatness of the sheet. + +Check oil in jacks + +Bleed and replace the oil in the jacks. + +Check electronics + +Check the resistance of your elements on each of the three phases is equal to the number of heating elements attached to each phase. If it does not one of your heating elements may be broken, use a thermal camera to check. +Check all the components inside the enclosure for visual signs of melting/burning and replace anything that appears damaged. +Re paint worn areas +Check the body panels and frame for signs of ware, repaint any exposed metal to protect it from corrosion. diff --git a/packages/i18n/tests/EN/build/shredder.md b/packages/i18n/tests/EN/build/shredder.md new file mode 100644 index 00000000..9eba03e3 --- /dev/null +++ b/packages/i18n/tests/EN/build/shredder.md @@ -0,0 +1,214 @@ +--- +id: shredder +title: Basic Shredder +image: "/build/machines/machine-shredder-p-500.png" +nav: kb +menu: + kb: + parent: build + weight: 10 +toc: true +--- + +{{< youtube VFIPXgrk7u0>}} + +# Video Chapters + +- 00:07 Introduction +- 00:46 Shredding box +- 04:18 Power supply +- 06:35 Framework +- 08:07 Hopper +- 09:31 How it works + +## Build a Shredder Machine + +### What is this machine? + +The shredder allows you to shred plastic into small flakes - you can easily wash and store shredded plastic and transport it to other workspaces to make into beautiful, valuable products. Of course you can also use the plastic yourself or sell clean, separated plastic within the industry (which buys it at 8-10 times higher than unshredded plastic!) + +> Pro Tip: If you shred plastic by colours you can have more control over the look and feel of your creations- adding value to the material. ` + + +{{% warning %}} + Warning / Remarks + - This machine requires a good assembly + - This is rather a disapointing and wasteful design (cutting diameter) and jams fast. Please consider adding 'auto reverse' also. + - As alternative, you can use a hand-cranked shredder. [Here a downsized version.](https://osr-plastic.org/machines/shredder_v31-light.html) + - Collecting, sorting, cleaning, shredding, ... involves a lot of resources and time. Please consider getting flakes instead from a nearby provider! +{{% /warning %}} + + +## Technical information + +Type | Single Shaft Shredder +--- | --- + Version | 2.0 +Price new material | +/- 1200 - 1800 Euro +Weight | 90 kg +Dimension | 280 x 600 x 1142 mm +Blade width | 5 mm, 6 mm +Voltage | 220 or 380V +AMP | 5.8A +- Nominal Power | 2.2 kW minimum +- Nominal Torque | 250 - 300 Nm minimum +- Speed | ±70 r/min + + +![Shredder V3](/build/shredderv3.jpg) + +# 3D Model + + + +## Required machinery & skills +Build Shredder | Machines needed | Skills needed +--- | ---| --- + | - Lathe
- Drill press
- Welding machine (not specific)
- Belt Sander | - Welding (intermediate)
- Machining (intermediate)
- Assembling (intermediate)
- Electronics (intermediate) + +## Electronic box + +Explanation of the electric components inside this machine. More information and schematics can be found in the download-kit. + +* Motor: The muscles of the machine - look for something with approx. 2.2kW that is geared down to 70rpm. +* LED indicator: LED that will shine with power (often found with Power switch). +* Power cable: Common household power cable. + +Tip : Here is a [good forum topic about electronics](https://forum.osr-plastic.org/t/the-big-electronics-topic/) + +## Tips & tricks while making + +- Take your time ensuring the box is square before any welding +- Use locknuts and ensure bearing bolts are tight + +## Input & Output + +Type: HDPE, LDPE, PP, PS + +Max thickness: 4mm + +Size of hopper input: 400 x 200 mm + +Output: ±10 kg/h + + +## Definition of our flakes sizes + +The shredded plastic can be used in three different machines: extruder, injector, and sheetpress. Thus, we have defined three different sizes of shredded plastic that work with each machine + +Name | Large | Medium | Small | +--- | ---| ---| ---| +Visual: | | | +Size: | 0-30 MM| 0-10 MM | 0-7 MM| +Works with: | Sheetpress| Sheetpress
Injection
Compression | Sheetpress
Injection
Compression
Extrusion| + +## Run & maintain + +1. First choose the plastic type - this usually depends on the quantities of plastic piling up in your sorting bags. Make sure you have enough of the same type of plastic, as the shredder has a process between cycles of different plastics (cleaning, for example). + +2. Got your plastic type? Great. Now it’s time to break up the bigger plastic objects into smaller chunks that can go in the hopper. This can be done with a hammer, scissors or a saw depending on the plastic. At this point you should also roughly clean the plastic from major dirt (don’t waste too much time on this though as the plastic will be washed shortly after). + +3. Let’s go - feed the plastic into the hopper. While shredding, you should regularly check the blades and push the plastic down towards the blades with the provided tool to make sure the blades are grabbing the plastic. When you finish working with the shredder, make sure to store and label the shredded plastic or the next person using the shredder won’t know what plastic type is in the bucket. + + +## Quick steps on operating the shredder + +1. Gather the sorted plastic you want to shred +2. Separate in colours +3. Check if the mesh is installed with the right hole size +4. Turn on the machine +5. Put in the plastic and wait +6. Store the shredded plastic +7. Clean the machine + +## Changing plastic type + +1. Stop the machine, take out the plug +2. Remove the mesh underneath with 4 screws +3. Remove the little shredded flakes in the machine with a brush. Optionally blow it out with pressured air +4. Put the mesh back in and shred another type of plastic + +>Tip: Clean the shredder blades and mesh every time you change plastic to avoid contamination of different plastic types. + +## Troubleshooting + +1. Sometimes the blades don’t grab the plastic. Try pushing the plastic towards the blades with the tool provided. Never attempt to do that with your hands. +2. If plastic resistance exceeds the maximum torque of the motor, the machine will stop. Basically, there is too much plastic to be cut and the motor can’t make it. Switch on the machine and remove some of the clogged plastic. + +## Pros & cons + +Pros | Cons +--- | --- +Small and lightweight | Processing load is small +Option to granulate small flakes | Granulating is slow +Relatively cheap | High in maintenance +Portable | + +## Examples + +{{< gallery dir="build/machines/shredder" class="" height="400" width="400" webp="true" command="Fit" options="" zoomable="true" >}} + +![](/build/community/machinehack-shredder-4.jpg) + +![](/build/community/machinehack-shredder-2.jpg) + +![](/build/community/communityshredder1.jpg) + +![](/build/community/shredder_community3.jpg) + +![](/build/community/shredder_opo.jpg) + +![](/build/community/shrednmould.jpg) + +![](/build/machines/asterix-pp.jpg) + + +## Opensource versions + +- [OSR Plastic / Library / Shredder](https://osr-plastic.org/library/#shredder) +- [Upgrade: Shredder 2.1 - Library](https://osr-plastic.org/howtos/shredder-21) +- [Upgrade: Shredder 3.3 - Library](https://osr-plastic.org/machines/pp-v3.3.html) +- [Upgrade: Shredder efficiency](https://forum.osr-plastic.org/t/shredder-efficiency/) +- [Shredder & Extruder industrial electronics](https://forum.osr-plastic.org/t/shredder-and-extrusion-industrial-electronics/6501) +- [Human Powered Shredder - Library](https://osr-plastic.org/howtos/human-powered-shredder) +- [Shredder & Extrusion Combo `Zoe` - Library](https://osr-plastic.org/machines/zoe.html) +- [Shredder v3.4 - `Asterix` Library](https://osr-plastic.org/machines/asterix-pp.html) +- [Shredder v3.1 light](https://osr-plastic.org/machines/shredder_v31-light.html) +- [Shredder v2.1 imperial](http://files.osr-plastic.org/files/machines/shredder/pp-v2.1/imperial/) | [Forum post](https://forum.osr-plastic.org/t/shredder-converted-to-imperial-system-inches/6483) + + +## Resources + +- 3D - Online - Preview + +- Open Source Ecology + +- Gearbox efficiency + +- Motor ratings | Will it shred calculator + +- Torque Calculator + +- Realistic costs + +- Remarks about using 120V and shredder motors + +## Low cost alternatives + +- [https://www.instructables.com/id/Low-Cost-Plastic-Shredder/](https://www.instructables.com/id/Low-Cost-Plastic-Shredder/) +- [https://www.instructables.com/id/Plastic-shredder-for-making-3D-printer-filament/](https://www.instructables.com/id/Plastic-shredder-for-making-3D-printer-filament/) + + +## Commercial options + +- [S200-OROTRIM](https://shop.osr-plastic.org/shredder-en/s200-orotrim/) +- [OSR Plastic Shop / Shredders](https://shop.osr-plastic.org/shredder-en/) +- [https://www.instructables.com/id/50-Plastic-Shredder-Grinder-Recycler/](https://www.instructables.com/id/50-Plastic-Shredder-Grinder-Recycler/) + +## References + +- [Development of a Plastic Shredder](http://files.osr-plastic.org/files/resources/papers/plastic/Development_of_a_Plastic_Shredder.pdf) + +## Forum posts + +[% render "discourse-cat-items.osr" cat:"52" -%] diff --git a/packages/i18n/tests/EN/build/shredderpro.md b/packages/i18n/tests/EN/build/shredderpro.md new file mode 100644 index 00000000..16df617c --- /dev/null +++ b/packages/i18n/tests/EN/build/shredderpro.md @@ -0,0 +1,104 @@ +--- +id: shredderpro +title: Shredder Pro +nav: kb +menu: + kb: + parent: build + weight: 40 +toc: true +--- + + +![Shredder Pro](/build/shredderpro.jpg) + +## Shredder Pro Specification + +| Name | Shredder Pro | +|----------|-------------| +| Type | Double Shaft Shredder | +| Version | 1.0 | +| Price new material in NL | +/- €2200 + motor | +| Weight | 340 kg | +| Dimension | 1205 x 550 x 1512 mm| +| Blade width | 6 mm| +| Voltage | 400V| +| AMP | 16A| +| Monitoring interval time | 1h| +| Geared Motor | | +| - Nominal Power | 2.2 kW minimum. 3-4 kW recommended | +| - Nominal Torque | 1100 Nm minimum - 3000 Nm max | +| - Output Speed | 15-25 r/min| +| - Minimum Service Factor | 1,5 (2,2kW) / 1,2 (3kW)| + + +# 3D Model + + + +## Pros & cons + +### Pros + +Compared to previous Precious Plastic machines, this shredder is very robust and reliable. Everything has been calculated and dimensioned to handle the high stresses required to shred plastic. + +Most industrial shredding systems require a shredding phase and a granulating phase. Thanks to the adjustable meshes, this machines is capable of carrying out both tasks! + +This machine is designed for relatively easy assembly. No welding is required for the core shredding box, and all further welds are straightforward. + +This shredder has also been designed to be easy to clean. In less than 30 minutes the shredder can be cleaned and ready for a different type of plastic, allowing community members to produce small batches of plastic. + +### Cons + +Granulating is possible with only this shredder, but this step will still be slightly slower than with a dedicated industrial granulator. This machine is mainly for shredding, polyvalence came with a price. + +Compared to original V3 Precious Plastic machines, this machine is harder to build even though we tried to keep things simple. You’ll need proper machines and skills. + +This machine also requires specific equipment and a high powered motor making it a little harder to build from scrap. Be sure to fully read the bill of material to procure your components as your machine reliability depends of it. + +## Input & output + +The machine can shred any plastic in any shape that fits between the blades. We have tested it with HDPE, PP, and PS. There is no limit of thickness that the shredder can handle. If the plastic piece is too thick, the blades will not shred as it has been designed so that plastic cannot jam the machine (depends on the motor power). PP, HDPE, PS from 0.7mm to 12mm have been tested successfully. Films are too thin and will slide in between the blades. Rubber, tires, and thermoset plastics have not been tested. + +![Shredder Pro](/build/shredder_output.jpg) + +## Definition of our flakes sizes + +The shredded plastic can be used in three different Precious Plastic machines: extruder, injector, and Sheetpress. Thus, we have defined three different sizes of shredded plastic that work with each machine + +Name: | Large | Medium | Small | +--- | ---| ---| ---| +Visual: | | | +Size: | 0-30 MM| 0-10 MM | 0-7 MM| +Works with: | Sheetpress| Sheetpress + Injection + Compression | Sheetpress + Injection + Compression + Extrusion| + + +To obtain these sizes, you need to use the right mesh. Install a 7mm sieve on the shredder to get small flakes or a 10mm sieve to get medium size. You can get the larger size without the use of a sieve. Depending on the size of the input material, you might need to shred several times to get the desired size. + + +### Output and speed + +| Material | Description | Times shredded | Output (Kg/h) | Sieve | Size | +|---|---|---|---|---|---| +| HDPE | Shampoo bottles | 1st time | 36,7 | No | Too big | +| | | 2nd time | 375 | No | Large | +| | | **Total** | **30.9** | | **Large** | +| PS | Transparent CD cases | 1st time | 9.8 | No | Medium | +| | | 2nd time | 86.5 | 7 mm sieve | Small | +| | | **Total** | **8.8** | | **Small** | +| PP | Bottle caps | 1st time | 76.7 | No | Large | +| | | 2nd time | 92 | 10 mm sieve | Medium | +| | | **Total** | **41.8** | | **Medium** | + + +![Shredder Pro](/build/shredderpro-output.jpg) + +## Related +* [Buy or sell parts & machines on our bazar](https://shop.osr-plastic.org) +* [Find a local machine shop on our map](https://osr-plastic.org/users/Europe.html) +* [How to setup a full Shredder workspace](spaces/shredder.md) diff --git a/packages/i18n/tests/EN/build/shredderprobuild.md b/packages/i18n/tests/EN/build/shredderprobuild.md new file mode 100644 index 00000000..631c3956 --- /dev/null +++ b/packages/i18n/tests/EN/build/shredderprobuild.md @@ -0,0 +1,228 @@ +--- +id: shredderprobuild +title: Shredder Pro - Build +nav: kb +menu: + kb: + parent: build + weight: 50 +--- + +{{< youtube 4GWYJhAd-R0>}} + + +# Build a Shredder Pro + +So you want to shred plastic? Cool! We have 2 different shredders: the original small Shredder, and the Shredder Pro. This is the Pro - it's more robust, advanced and productive than the smaller one, but also more complex to build. But if you're familiar with building machines it's very doable, and you can also buy parts on the bazar. Or the whole machine! You could even sell them yourself. The Shredder is actually the most requested machine around the world! + +>Tip: Building a Shredder Pro requires a bit more advanced tools and skills than the normal shredder. The tools itself are still relative basic techniques and can be found anywhere in the world. But the tolerances are definitely tighter. So you need to make sure your tools and skills are up for the job + +### Video Chapters + +- 00:07 - Intro +- 01:34 - Frame +- 03:45 - Shafts +- 08:16 - Hopper +- 08:57 - Sieve +- 10:44 - Electronics +- 11:50 - Motor and gearing +- 13:15 - Full assembly +- 16:16 - How to run + +## Required machinery & skills +Build Shredder Pro | Machines needed | Skills needed +--- | ---| --- + | - Lathe + - Drill press +- Milling machine + - Welding machine (not specific) + - Torq wrench + - M16 hand tap | - Welding (intermediate) + - Machining (expert) + - Assembling (expert) + - Electronics (expert) + + +## Materials and parts + +You need to make and buy parts. In the download-kit you can find the complete Bill of Materials. It's a list for the entire Shredder Pro. Below you can find the commercial parts you need to buy and we go more in depth on where to look out for. + +### Motor option & explanation + +All the energy to shred the plastic comes from the electric motor. More energy means more productivity and smaller flakes. A double shaft shredder works at a low speed and a high torque, so the motor needs to have these requirements. + +To choose a 3-phase geared motor, you need to check: + +- Nominal Power +- Output speed +- Torque +- Service factor + +### Nominal Power + +Nominal power is a value directly linked to nominal current. On most motors, you will be able to run at this power continuously (depending on your safety factor, ambient temperature, humidity, etc). + +However, for a short amount of time, your motor will be able to deliver a higher power by having a higher current. This can be typically observed at the start of the rotation or when you encounter harder pieces to shred. + +But if the motor is capable of running at a higher power, this will damage it. +We found that no motor should be run at more than 1,6 times their nominal current/power, and this will be controlled by the electronics box. See the recommendation paragraph for which power will work for your needs. + +### Speed and torque + +In a 3-phase motor, the motor speed depends on the frequency and the number of poles of the motor. +- Theoretical speed (rpm) +- 2 - 12 are number of poles of the motor + +| Frequency (Hz) | 2 | 4 | 6 | 8 | 10 | 12 | +|----------------|------|------|------|-----|-----|-----| +| 50 | 3000 | 1500 | 1000 | 750 | 600 | 500 | +| 60 | 3600 | 1800 | 1200 | 900 | 720 | 600 | + +Motor Synchronous Speeds (RPM) + +*The real speed will likely be less due to loads, friction...* + +Speed can be then reduced through a gearbox, which is defined by a gearbox ratio. Ratio = input speed / output speed. The higher the speed will be, the higher the productivity will be. +A double axis shredder is a shredder that runs at a low speed. We recommend looking for a gearbox that will bring the output speed between 15 and 25 revolutions per minute. + +Torque is a relation between the output speed obtained and the motor’s power. The higher the torque will be, the tougher the shredder will be. To get a high torque you can increase the power of the motor or increase the gearbox ratio. Know that increasing gearbox ratio will lower the speed and productivity. +For this shredder, we recommend a nominal torque of 1100N.m as a minimum and 2000N.m as a solid goal. + +### Service Factor + +The service factor is the percentage of overloading what the motor can handle for short periods when operating normally within the correct voltage tolerances. Both your gearbox and your motor have a service factor, these can be different. In any case, make sure that the service factor of both elements is at least 1, or your motor reductor is downgraded. + +Having a higher motor service factor can be useful for: + +- Inaccuracy in predicting intermittent system horsepower needs +- Longer insulation life by lowering the temperature at rated load +- Intermittent or occasional overloads +- Ambient temperature above 40°C +- Low or unbalanced supply voltages + +Having a higher gearbox service factor can be useful for: + +- Elevated temperatures +- Extreme shock loads or vibrations +- Non-uniform loads +- Cyclic loads + +The higher the safety factor, the higher the lifetime. You might as well compensate and have a lower-powered motor for this reason. + +### Motor proposals + +**2.2kW - 16rpm - 1200N.m**: smallest suggested motor, will be fine for small household plastic, but the motor will limit the operation of the shredder and so it will never operate at its full capacity + +**3kW - 18rpm - 1500N.m**: probably a good price/efficiency compromise + +**4kW - 18rpm - 2000N.m**: you will be able to operate the shredder to its full capacity + +**5,5kW - 22rpm - 2300N.m**: very long life motor as you will be running the motor under its capacity; might be worth it for a high productivity shredder (higher speed to limit the torque) + +### Coupling option & explanation + +Couplings usually have a nominal torque and a maximum torque they can manage. Nominal torque is the torque value that the coupling can handle without damage. The coupling may handle a higher torque for a short period, but always keep things under the maximum torque. The component life will be reduced if the coupling operates frequently over the nominal torque. + +If our motor has around 2000 Nm of nominal torque, an HRC 230 Coupling will work properly. Even if you choose a motor with lower torque, we recommend to slightly oversize the coupling for increased durability. + +| Reference | Nominal Torque (Nm) | Max Torque (Nm) | Notes | +|--------------------|---------------------|-----------------|---------------------------------------------------| +| HRC 230 Coupling | 2000 | 5000 | Pros: cheap +Cons: smaller misalignments | +| F140 Tyre coupling | 2325 | 5642 | Pros: higher misalignment +Cons: more expensive | + +We recommend following the assembly instructions of the manufacturer. Not following this requirement can lead to damage or early wear. + +### Gears choice + +The gears transmit the power between the two shafts. Double shaft shredders work with low speed and high torque, so the gears need to be calculated for that torque. We recommended the following gear specs: + +| Gear type | Module | No of teeth | Width (mm) | Hole diam. (mm) | Keyway (mm) | +|-----------|--------|-------------|------------|-----------------|-------------| +| Spur gear | 6 | 18 | 60 | 45 | 14 x 9 | +| Spur gear | 6 | 20 | 60 | 45 | 14 x 9 | + +We recommend to use gears with hardened teeth. + +The distance between them has to be 114mm. Many components, like the blades or the box, depend on that distance. If the gear specs change, the distance shall be kept fixed or a redesign of the blades and box will be required. + +### Shaft specifications +The shaft is made by a 50mm hexagon bar milled to a 45mm diameter. We recommend using mid-high quality steel with a minimum yield strength of 350 Mpa (we used C45 steel). + +### Bearing specifications + +We used UCFL209: + +- Shaft size 45 mm +- Fixing Spacing 148 mm +- Fixing hole diameter 19mm + +We use an M16 bolt to fix them: an adaptor is required + +### Laser cut parts + +All the laser cut parts are made with mild steel. They don’t require a specific material. However, we used wear-resistant steel (Hardox 400) for the blades and fixed blades (not the spacers), to make them more durable. + +# Electronic box + +### Electric components +- 1 x 3 phase general switch +- 1 x Emergency stop switch with 3 NC connections +- 1 x 3 phase current limiter, 6,8 Amps +- 2 x 3 phase contactors, 3 NO and 1 NC connections +- 1 x 5V 500mA power supply + +### Schematic link + +https://github.com/davehakkens/shredder-reverse/blob/master/Schematic.pdf + +### Electronic components + +- 1 x Arduino nano +- 1 x 5V 2 channels relay module 250VAC +- 1 x ACS712 30A hall effect sensor module +- 1 x full bridge rectifier 1A (DF10-G) +- 1 x 100uF capacitor 10V +- 2 x 10k resistors 1/4W +- 1 x 100k resistor 1/4W +- 1 x 2.2mF capacitor 10V +- 1 x 3 position toggle switch + +### Arduino code link + +https://github.com/davehakkens/shredder-reverse + +# Tips & tricks while making + +There are two different types of blades. 13 teeth blades require more motor power but they produce smaller flakes, whereas, 6 teeth blades require less power but produce longer flakes. The grip should be slightly better with 6 teeth blades, but it depends on the shape and material. + +| Blade | Required power | Flake size | Grip | Output | +|----------|----------------|------------|--------|-----------------| +| 6 teeth | Lower | Longer | Better | Slightly Lower | +| 13 teeth | Higher | Smaller | Good | Slightly Higher | + +- To have a good balance in the shredder’s performance, we recommend to use 13 teeth blades on the shaft connected to the motor and 6 teeth blades on the opposite shaft. But you can choose and set up the shredder as you want. + +- The gap between the blades is 0,25mm. To reach that level of precision, it is good to keep all the parts clean while the machine is being assembled. + +- The blades are fixed to the shaft by two nuts on each side. It is recommended to tighten the nuts (100Nm at least) to prevent the plastic from entering between the blades and spacers. + +- The shafts are quite long and heavy. If you cannot use a good lathe, we recommend you to order them from a professional. +Order multiple spacers for assembly adjustment. + +- Weld the tubes of the box, for faster cleaning (non structural weld) + +- Attach the moter: You will probably use a different motor than the one in the 3D model. So you will need to modify the frame. + +# Additional Options + +### Safety Hopper + +We designed a fully closed version of the hopper to prevent the plastic from jumping out and make it safer for people to use. The drawings are accessible in the download kit to laser cut. Make sure to choose the hopper you want before sending the files to laser cut. + +### Different sieves + +You could use the shredder with no sieve, but in order to achieve different flake size standards - see input & output chapter - we provided different sieve designs to be cut. You can get your own drilled hole plates, but we designed these sieves to be the perfect sizes for our standards, with a denser holes concentration for efficiency and with a line for easy welding. + + diff --git a/packages/i18n/tests/EN/build/shredderprorun.md b/packages/i18n/tests/EN/build/shredderprorun.md new file mode 100644 index 00000000..50fc50d2 --- /dev/null +++ b/packages/i18n/tests/EN/build/shredderprorun.md @@ -0,0 +1,95 @@ +--- +id: shredderprorun +title: Shredder Pro - Run +nav: kb +menu: + kb: + parent: build + weight: 52 +--- + +![Shredder](/build/shredderpro-run1.jpg) + +# Run and Maintain the Shredder Pro +Congrats, you've built a Shredder Pro! Time to chop some plastic. Below we explain how to do this, the settings to use, and an ideal workflow. Remember that maintenance is also important! + +## Time to shred some plastic! + +### How to Start + +1. With the main switch off, the emergency stops off, and the direction switch in the stop position plug in the shredder (if it was not plugged in) to a 16A three-phase plug. +2. Check that the hopper and the sieve (if it is needed) are mounted properly. +3. Check the hopper is empty of parts that could damage the machine. +4. Turn on the main switch, then the display will turn on. +5. If the display reads “READY”, turn on the emergency stop. +6. Run the shredder in reverse mode for a few seconds to check everything works properly. The display should show “REVERSING”. +7. Run the shredder in shredding/forward mode. The display should show “SHREDDING”. +8. The machine is ready to use. + +>If you hear or see something unexpected, stop the machine immediately and check what the issue is. The machine has enough power to damage the components by itself if they are not assembled properly. + +### Pour plastic + +The output of the shredder depends on, among other things, the shape of the plastic. CD cases, sheets, bottle caps, extrusion/injection leftovers… are easy to shred. Round shapes or big pieces are hard for the blades to grab. To increase the productivity of the shredder, try to pour the plastic in a way that the shredder can grab it. For example, for most of the bottles, a good way is to pour them upside down, so they can be grabbed from the nozzle. + +For a second shred, just fill the hopper with the shredded plastic. + +### Run + +Depending on the motor’s power, you may need to check the load of the motor (shown on the display while the machine is shredding). The motor load also depends on the material, shape, and thickness of the pieces to be shred. + +For example, PS CD Cases (brittle plastic) don’t require much power. Big bottles of HDPE (elastic-plastic) require much more power. + +Depending on your motor, you may be running at different nominal power / amperage. Make sure that you always run your motor under its rated amperage on average. If your motor is under dimensioned for the work and your shredding amperage is above its rated power, ensure enough break time to let it cool down. + +During the shredding process, we recommend keeping an eye on the temperature of the blades, bearings, box, and motor with a temperature gun. The temperature will depend on the load of the motor and the running time. Stop the machine if the temperature of the blades exceeds 90 ºC or your plastic will start melting. The other components shouldn’t heat up too much unless you're doing very intense shredding or the weather is fairly hot. Check manufacturer recommended temperature, but in general don’t let other components go over 55°C. + +### Deep clean + +It is recommended to do the following cleaning steps if you are going to change the material. It is not necessary to clean if you change the color but not material type (as always, this depends on your desired output). + +1. Before cleaning the machine, push the emergency stop and turn off the main switch. +2. Remove the sieve (if it is mounted). +3. Remove the hopper. +4. Remove the top plate of the box. +5. Remove the fixed blades. +6. Clean between the blades. The bottom of the machine has to be cleaned as well. +7. Clean the hopper, fixed blades, sieve and the interior of the box. +8. Mount the fixed blades, top plate, hopper and sieve (if required). + +### Change the material or color to shred + +Shredding plastic of the same material and color is recommended. If you want to change the material or color, you will need to clean the machine. Follow the steps about “Deep clean”. +If you want to change only the color, but you don’t mind if there are some flakes with a different color, you could clean the shredder, lightly, with a brush and a flat screwdriver to remove the plastic between the static blades. + +# Troubleshooting +Arduino or the display doesn’t works properly + +1. Check the wiring. +2. Connect the arduino board to a computer and upload the code. Set up the code. + +# Maintain + +### Before starting + +Check the oil level of the motor gearbox. Usually, the quantity of oil depends on the mount position of the motor. Check the manufacturer's instructions. + +Ensure bearing and gears are greased properly. + +![Shredder](/build/shredderpro-maintain.jpg) + +### Weekly + +- Deep clean the shredder +- Once you remove all the blade, inspect both fixed and moving blade : they should not have any scratches. If you see scratches, dismantle the shredder and sand / sharpen damaged blades. +- Check for plastic stuck in between blade. If this is the case, disassemble the axis, clean blade and reassemble. + +### Monthly + +- Disassemble gears, clean them and reassemble with new grease. +- Inspect bearings looking for any cracks and add extra grease if needed. +- Disassemble the box, sand or sharpen damaged part and oil all plates. If teeth are too damaged, replace them. We recommend ordering extra blades to allow this maintenance easily. +- Depending on the coupling that the machine uses, you may need to replace some rubber components. Check the manufacturer’s instructions. +- Check the paint, and repaint damage to prevent long term corrosion issues. + + diff --git a/packages/i18n/tests/EN/de/glossary-test.md b/packages/i18n/tests/EN/de/glossary-test.md new file mode 100644 index 00000000..46e46158 --- /dev/null +++ b/packages/i18n/tests/EN/de/glossary-test.md @@ -0,0 +1,7 @@ +Das ist eine Plattenpresse und eine Spritzgießmaschine (Sie brauchen auch einen Granulator), und wenn Sie nett zu uns sind, geben wir Ihnen noch ein paar Spritzgussformen obendrauf, kostenlos und Open Source - weil wir Sie so sehr lieben! Sehen Sie sich mehr unserer Plattenpressen an. + +Die Abmessungen des Pakets sind ein Meter mal ein Meter. + +Nachstehend finden Sie die aktuellen Optionen für Plattenpressen, Extruder und Injektoren. Sie können uns während der Bürozeiten unter [[TELEFON]] oder per E-Mail unter [[EMAIL]] erreichen + +Cassandra 45 cm diff --git a/packages/i18n/tests/EN/es/specs-grinder-test-test.xlsx.json b/packages/i18n/tests/EN/es/specs-grinder-test-test.xlsx.json new file mode 100644 index 00000000..1e00b9da --- /dev/null +++ b/packages/i18n/tests/EN/es/specs-grinder-test-test.xlsx.json @@ -0,0 +1,18 @@ +[ + { + "src": 1, + "translation": 1 + }, + { + "src": true, + "translation": true + }, + { + "src": "foo", + "translation": "foo" + }, + { + "src": "baz", + "translation": "baz" + } +] \ No newline at end of file diff --git a/packages/i18n/tests/EN/es/specs-grinder-test.xlsx.json b/packages/i18n/tests/EN/es/specs-grinder-test.xlsx.json new file mode 100644 index 00000000..1e00b9da --- /dev/null +++ b/packages/i18n/tests/EN/es/specs-grinder-test.xlsx.json @@ -0,0 +1,18 @@ +[ + { + "src": 1, + "translation": 1 + }, + { + "src": true, + "translation": true + }, + { + "src": "foo", + "translation": "foo" + }, + { + "src": "baz", + "translation": "baz" + } +] \ No newline at end of file diff --git a/packages/i18n/tests/EN/es/specs-grinder.xlsx.json b/packages/i18n/tests/EN/es/specs-grinder.xlsx.json new file mode 100644 index 00000000..76b0f937 --- /dev/null +++ b/packages/i18n/tests/EN/es/specs-grinder.xlsx.json @@ -0,0 +1,122 @@ +[ + { + "src": "Model Number", + "translation": "Número de modelo" + }, + { + "src": "Plastic Processed", + "translation": "Plástico procesado" + }, + { + "src": "Plastic Processed", + "translation": "Plástico procesado" + }, + { + "src": "Plastic Processed", + "translation": "Plástico procesado" + }, + { + "src": "Plastic Processed", + "translation": "Plástico procesado" + }, + { + "src": "Condition", + "translation": "Condición" + }, + { + "src": "Output (kg/h)", + "translation": "Producción (kg/h)" + }, + { + "src": "Video outgoing-inspection", + "translation": "Vídeo de la inspección de salida" + }, + { + "src": "Machinery Test Report", + "translation": "Informe de ensayo de maquinaria" + }, + { + "src": "Warranty of core components", + "translation": "Garantía de los componentes principales" + }, + { + "src": "Core Components", + "translation": "Componentes básicos" + }, + { + "src": "Place of Origin", + "translation": "Lugar de origen" + }, + { + "src": "Brand Name", + "translation": "Marca" + }, + { + "src": "Type", + "translation": "Tipo" + }, + { + "src": "Screw Design", + "translation": "Diseño de tornillos" + }, + { + "src": "Voltage", + "translation": "Tensión" + }, + { + "src": "Dimension(L*W*H)", + "translation": "Dimensiones (largo*ancho*alto)" + }, + { + "src": "Power (kW)", + "translation": "Potencia (kW)" + }, + { + "src": "Weight", + "translation": "Peso" + }, + { + "src": "Warranty", + "translation": "Garantía" + }, + { + "src": "Showroom Location", + "translation": "Ubicación de la sala de exposiciones" + }, + { + "src": "Applicable Industries", + "translation": "Industrias aplicables" + }, + { + "src": "After-sales Service Provided", + "translation": "Servicio posventa" + }, + { + "src": "Material", + "translation": "Material" + }, + { + "src": "Fixed Blade", + "translation": "Hoja fija" + }, + { + "src": "Rotary Blade", + "translation": "Cuchilla giratoria" + }, + { + "src": "Chamber Size", + "translation": "Tamaño de la cámara" + }, + { + "src": "After Warranty Service", + "translation": "Servicio post garantía" + }, + { + "src": "Certification", + "translation": "Certificación" + }, + { + "src": "Name", + "translation": "Nombre" + } +] \ No newline at end of file diff --git a/packages/i18n/tests/EN/es/specs-test-test.xlsx.json b/packages/i18n/tests/EN/es/specs-test-test.xlsx.json new file mode 100644 index 00000000..1e00b9da --- /dev/null +++ b/packages/i18n/tests/EN/es/specs-test-test.xlsx.json @@ -0,0 +1,18 @@ +[ + { + "src": 1, + "translation": 1 + }, + { + "src": true, + "translation": true + }, + { + "src": "foo", + "translation": "foo" + }, + { + "src": "baz", + "translation": "baz" + } +] \ No newline at end of file diff --git a/packages/i18n/tests/EN/es/specs-test.xlsx.json b/packages/i18n/tests/EN/es/specs-test.xlsx.json new file mode 100644 index 00000000..1e00b9da --- /dev/null +++ b/packages/i18n/tests/EN/es/specs-test.xlsx.json @@ -0,0 +1,18 @@ +[ + { + "src": 1, + "translation": 1 + }, + { + "src": true, + "translation": true + }, + { + "src": "foo", + "translation": "foo" + }, + { + "src": "baz", + "translation": "baz" + } +] \ No newline at end of file diff --git a/packages/i18n/tests/EN/es/specs.xlsx.json b/packages/i18n/tests/EN/es/specs.xlsx.json new file mode 100644 index 00000000..d9b5678f --- /dev/null +++ b/packages/i18n/tests/EN/es/specs.xlsx.json @@ -0,0 +1,18 @@ +[ + { + "src": "Model Number", + "translation": "Número de modelo" + }, + { + "src": "Plastic Processed", + "translation": "Plástico procesado" + }, + { + "src": "Condition", + "translation": "Condición" + }, + { + "src": "Output (kg/h)", + "translation": "Producción (kg/h)" + } +] \ No newline at end of file diff --git a/packages/i18n/tests/EN/glossary-test.md b/packages/i18n/tests/EN/glossary-test.md new file mode 100644 index 00000000..c0ba40cb --- /dev/null +++ b/packages/i18n/tests/EN/glossary-test.md @@ -0,0 +1,7 @@ +Thats a Sheetpress and an injection machine (you need a shredder as well), and if you're nice with us, we give you some moulds on top, for free, and opensource - cuz we love you so much ! Check out more of our Sheetpresses. + +The Package Dimensions are one meter by one meter. + +Please find below the current options for sheetpresses, extruders and injectors. You can reach us during office times at [[PHONE]] or by email at [[EMAIL]] + +Cassandra 45 cm diff --git a/packages/i18n/tests/EN/styles.md b/packages/i18n/tests/EN/styles.md new file mode 100644 index 00000000..b72223f4 --- /dev/null +++ b/packages/i18n/tests/EN/styles.md @@ -0,0 +1,216 @@ +--- +id: styles +title: Styles +sidebar_label: Styles (temp) +--- + + + + + +# Styles (to delete) + +
+
+ +## Build shredder (it's bloody easy) + +Hallward glanced round him with a puzzled expression. The room looked as if it had not been lived in for years. A faded Flemish tapestry, a curtained picture, an old Italian cassone, and an almost empty book-case--that was all that it seemed to contain, besides a chair and a table. As Dorian Gray was lighting a half-burned candle that was standing on the mantelshelf, he saw that the whole place was covered with dust and that the carpet was in holes. A mouse ran scuffling behind the wainscoting. There was a damp odour of mildew. + +
+
+ +### Video Chapters + +- 0:11 Introduction +- 00:18 What is plastic? +- 01:15 Different types +- 02:45 Recognize plastics +- 05:18 Transform plastics + +
+
+ +# title 1 + +## title 2 + +### title 3 + +`This is a quote.` + +This is a link to [another document.](intro.md) +This is a link to an [external page.](http://www.example.com) + +Button + +## Image + +To add images in markdown use: + +```markdown +![Background](/academy/img/menu-selection-bg.jpg) +``` + +
Will produce 👇
+ +![Background](/academy/img/menu-selection-bg.jpg) + +If you need to specify the size of the image use an `` tag + +When using imagery and icons that we have produced add them to the `docs/assets` folder and include them with the url prefix `assets/`. +Example: +"Saskia wants to add an image `fancy-plastic.jpg` to the folder `docs/assets/fancy-plastic.jpg` and then she uses it in the docs like this: + +```markdown +![Fancy Plastic is Fancy](assets/fancy-plastic.jpg) +``` + +Produces this image below: + +![Fancy Plastic is Fancy](assets/fancy-plastic.jpg) + +(🤫 She would never do that of course) + +#### Example with ``: + +```html + +``` + +
Will produce 👇
+ + + +## Icons are included in the same way as images + +
+ +![machine](https://preciousplastic.com/images/Community-machine-3.jpg) + +![machine](https://preciousplastic.com/images/Community-machine-1-p-1600.jpeg) + +![machine](https://preciousplastic.com/images/Community-machine-6.jpg) + +![machine](https://preciousplastic.com/images/Community-machine-5.jpg) + +![machine](https://preciousplastic.com/images/Community-machine-2.jpg) + +
+ +# Icon list with labels + +
+ +
+ +![Weight](assets/icons/weight.svg) + +
+
+ +![Money](assets/icons/money.svg) + +
+
+ +![Difficulty](assets/icons/difficulty.svg) + +
+
+ +![Time](assets/icons/time-needed.svg) + +
+ +
+ +# Icon list with labels and one without + +
+ +
+ +![hdpe](assets/plastic/type-hdpe.svg) + +
+
+ +![ldpe](assets/plastic/type-ldpe.svg) + +
+
+ +![other](assets/plastic/type-other.svg) + +
+
+ +![pet](assets/plastic/type-pet.svg) + +
+
+ +![pp](assets/plastic/type-pp.svg) + +
+
+ +![ps](assets/plastic/type-ps.svg) + +
+
+ +![pvc](assets/plastic/type-pvc.svg) + +
+ +
+ +## The icon without a label + +![pet](assets/plastic/type-pet.svg) + +Since this is a Vector graphic it will fill up the available space in the document so it MUST BE CONSTRAINED! + +Use the img tag instead: + + + + +Or: + + + +- Search: what to think about when choosing your space +- Plan: how to plan your space effectively +- Build: transforming an empty room into a injection workspace + +1. **Lorem ipsum** dolor sit amet, consectetur adipiscing elit. Sed in neque a risus dignissim cursus id et nisi. Sed dignissim, leo et semper fermentum, justo ligula dictum massa, ac ornare arcu felis ut urna. Duis sodales massa ut pharetra tempus. Etiam eu fringilla nisl. Nullam rhoncus et elit a consectetur. Duis nec auctor tellus, ut varius urna. In nunc quam, ornare in suscipit a, iaculis eu tellus. Nunc et vestibulum neque. Sed laoreet justo a magna hendrerit ornare. Nulla facilisi. In sodales, purus in maximus consequat, eros purus sollicitudin purus, sed sagittis libero nunc vel lectus. +1. **Lorem** ipsum dolor sit amet, consectetur adipiscing elit. Sed in neque a risus dignissim cursus id et nisi. Sed dignissim, leo et semper fermentum, justo ligula dictum massa, ac ornare arcu felis ut urna. Duis sodales massa ut pharetra tempus. Etiam eu fringilla nisl. Nullam rhoncus et elit a consectetur. Duis nec auctor tellus, ut varius urna. In nunc quam, ornare in suscipit a, iaculis eu tellus. Nunc et vestibulum neque. Sed laoreet justo a magna hendrerit ornare. Nulla facilisi. In sodales, purus in maximus consequat, eros purus sollicitudin purus, sed sagittis libero nunc vel lectus. +1. **Lorem ipsum dolor** sit amet, consectetur adipiscing elit. Sed in neque a risus dignissim cursus id et nisi. Sed dignissim, leo et semper fermentum, justo ligula dictum massa, ac ornare arcu felis ut urna. Duis sodales massa ut pharetra tempus. Etiam eu fringilla nisl. Nullam rhoncus et elit a consectetur. Duis nec auctor tellus, ut varius urna. In nunc quam, ornare in suscipit a, iaculis eu tellus. Nunc et vestibulum neque. Sed laoreet justo a magna hendrerit ornare. Nulla facilisi. In sodales, purus in maximus consequat, eros purus sollicitudin purus, sed sagittis libero nunc vel lectus. + +## Tips and notes + +`> Pro-tip: will show up in yellow` will show up like this: + +> Pro-tip: will show up in yellow + +`

Note: will show up in blue

` will show up like this: + +

Note: will show up in blue

+ +## Download Button + +`↳ DOWNLOAD HERE` + +Will produce: + +↳ DOWNLOAD HERE + diff --git a/packages/i18n/tests/EN/xls/de/specs-shredder.xlsx b/packages/i18n/tests/EN/xls/de/specs-shredder.xlsx new file mode 100644 index 00000000..5731572a Binary files /dev/null and b/packages/i18n/tests/EN/xls/de/specs-shredder.xlsx differ diff --git a/packages/i18n/tests/EN/xls/es/specs-shredder.xlsx b/packages/i18n/tests/EN/xls/es/specs-shredder.xlsx new file mode 100644 index 00000000..0e133144 Binary files /dev/null and b/packages/i18n/tests/EN/xls/es/specs-shredder.xlsx differ diff --git a/packages/i18n/tests/EN/xls/es/specs.xlsx b/packages/i18n/tests/EN/xls/es/specs.xlsx new file mode 100644 index 00000000..9f8d5ea9 Binary files /dev/null and b/packages/i18n/tests/EN/xls/es/specs.xlsx differ diff --git a/packages/i18n/tests/EN/xls/specs-shredder.xlsx b/packages/i18n/tests/EN/xls/specs-shredder.xlsx new file mode 100644 index 00000000..5c32aadb Binary files /dev/null and b/packages/i18n/tests/EN/xls/specs-shredder.xlsx differ diff --git a/packages/i18n/tests/EN/xls/specs.xlsx b/packages/i18n/tests/EN/xls/specs.xlsx new file mode 100644 index 00000000..bb14e984 Binary files /dev/null and b/packages/i18n/tests/EN/xls/specs.xlsx differ diff --git a/packages/i18n/tests/_toml/menus.en.toml b/packages/i18n/tests/_toml/menus.en.toml new file mode 100644 index 00000000..fdaa99db --- /dev/null +++ b/packages/i18n/tests/_toml/menus.en.toml @@ -0,0 +1,37 @@ +# main menu +[[main]] +name = "About" +url = "about/" +weight = 5 +hidden= true + +[[main]] +name = "Products" +url = "product/" +weight = 1 + +[[main]] +name = "Projects" +url = "project/" +weight = 2 + +[[main]] +name = "Services" +url = "service/" +weight = 3 + +[[main]] +name = "Contact" +url = "contact/" +weight = 7 + +# footer menu +[[footer]] +name = "Terms of Service" +url = "terms/" +weight = 1 + +[[footer]] +name = "Privacy Policy" +url = "privacy-policy/" +weight = 2 diff --git a/packages/i18n/tests/_toml/menus.fr.toml b/packages/i18n/tests/_toml/menus.fr.toml new file mode 100644 index 00000000..c3c10797 --- /dev/null +++ b/packages/i18n/tests/_toml/menus.fr.toml @@ -0,0 +1,35 @@ +[[main]] +name = "A propos de" +url = "about/" +weight = 5 +hidden = true + +[[main]] +name = "Produits" +url = "product/" +weight = 1 + +[[main]] +name = "Projets" +url = "project/" +weight = 2 + +[[main]] +name = "Services" +url = "service/" +weight = 3 + +[[main]] +name = "Contact" +url = "contact/" +weight = 7 + +[[footer]] +name = "Conditions d'utilisation" +url = "terms/" +weight = 1 + +[[footer]] +name = "Politique de confidentialité" +url = "privacy-policy/" +weight = 2 diff --git a/packages/i18n/tests/academy-de.sh b/packages/i18n/tests/academy-de.sh new file mode 100644 index 00000000..5d30905b --- /dev/null +++ b/packages/i18n/tests/academy-de.sh @@ -0,0 +1,9 @@ +node ./dist/main.js translate \ +--cwd='../../ph3/academy' \ +--dry=false \ +--sourceLang='EN' \ +--targetLang='DE' \ +--debug \ +--src='./../../ph3/academy/docs/**/*.md' \ +--dst='../osr-kb/academy-DE/docs/${SRC_REL}/${SRC_NAME}${SRC_EXT}' + diff --git a/packages/i18n/tests/academy-fr.sh b/packages/i18n/tests/academy-fr.sh new file mode 100644 index 00000000..611845a7 --- /dev/null +++ b/packages/i18n/tests/academy-fr.sh @@ -0,0 +1,8 @@ +node ./dist/main.js translate \ +--cwd='../../ph3/academy' \ +--dry=false \ +--sourceLang='EN' \ +--targetLang='FR' \ +--debug \ +--src='./../../ph3/academy/docs/**/*.md' \ +--dst='../osr-kb/academy-fr/docs/${SRC_REL}/${SRC_NAME}${SRC_EXT}' diff --git a/packages/i18n/tests/audio/rec.ts b/packages/i18n/tests/audio/rec.ts new file mode 100644 index 00000000..e4985b1b --- /dev/null +++ b/packages/i18n/tests/audio/rec.ts @@ -0,0 +1,112 @@ + +// create a nodejs app, typescript, recording audio from mic, output as wav file +Sure! Here's an example of a Node.js app using TypeScript that records audio from the microphone and outputs it as a WAV file: + +First, make sure you have Node.js and npm (Node Package Manager) installed on your machine. Then, follow these steps: + +Step 1: Set up a new TypeScript project +Create a new directory for your project and navigate into it using the terminal. Then, run the following command to initialize a new TypeScript project: + +``` +npm init -y +``` + +This will create a `package.json` file in your project directory. + +Step 2: Install required dependencies +Run the following command to install the necessary dependencies: + +``` +npm install typescript @types/node mic wav +``` +Step 3: Configure TypeScript +Create a `tsconfig.json` file in your project directory with the following content: + +```json +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "outDir": "dist", + "strict": true, + "esModuleInterop": true + }, + "include": ["src"] +} +``` + +Step 4: Create the app code +Create a new `src` folder in your project directory, and inside it, create a `index.ts` file. Replace the content with the following code: + +```typescript +import * as fs from 'fs'; +import { MicRecorder } from 'mic-recorder-to-mp3'; +import { Readable } from 'stream'; + +const mic = require('mic'); +const wav = require('wav'); + +const outputFile = '.wav'; +const durationInSeconds = 10; + +async function startRecording(): Promise { + const micInstance = mic({ rate: '44100', channels: '2', debug: false }); + const micInputStream = micInstance.getAudioStream(); + + const outputFileStream = fs.createWriteStream(outputFile); + const wavWriter = new wav.FileWriter({ + channels: 2, + sampleRate: 44100, + bitDepth: 16, + }); + + micInputStream.pipe(wavWriter).pipe(outputFileStream); + + micInputStream.on('startComplete', () => { + console.log('Recording audio for', durationInSeconds, 'seconds...'); + setTimeout(() => { + micInstance.stop(); + }, durationInSeconds * 1000); + }); + + micInputStream.on('error', (err: any) => { + console.error('Error capturing audio:', err); + }); + + micInstance.start(); +} + +async function main(): Promise { + try { + await startRecording(); + console.log('Audio recorded and saved to', outputFile); + } catch (error) { + console.error('Error:', error); + } +} + +main(); +``` + +Replace `` with the desired path and filename for the WAV file. + +Step 5: Build and run the app +Compile the TypeScript code to JavaScript using the following command: + +``` +npx tsc +``` + +This will generate the built JavaScript code in the `dist` folder. + +To run the app, execute the following command: + +``` +node dist/index.js +``` + +The app will start recording audio from the microphone for the specified duration (in seconds). After the duration is reached, the recording will stop, and the WAV file will be saved to the specified output file path. + +Note: The length of the recorded audio and the quality may vary based on the hardware and system configuration. + +That's it! You now have a Node.js app in TypeScript that records audio from the microphone and saves it as a WAV file. \ No newline at end of file diff --git a/packages/i18n/tests/audio/tap.ts b/packages/i18n/tests/audio/tap.ts new file mode 100644 index 00000000..2d599af9 --- /dev/null +++ b/packages/i18n/tests/audio/tap.ts @@ -0,0 +1,38 @@ + +// create a nodejs app, typescript, calling a function start as soon i press the keys Alt+S, and another one, a function stop, as soon i press the keys ALT-T +Sure! Here's an example of a Node.js app written in TypeScript that listens for keyboard shortcuts and executes the corresponding functions: + +```typescript +import readline from 'readline'; + +function start() { + console.log('Starting the app...'); + // Add your code for starting the app here +} + +function stop() { + console.log('Stopping the app...'); + // Add your code for stopping the app here +} + +readline.emitKeypressEvents(process.stdin); +process.stdin.setRawMode(true); + +process.stdin.on('keypress', (str, key) => { + const { alt, name } = key; + + if (alt && name === 's') { + start(); + } + + if (alt && name === 't') { + stop(); + } +}); + +console.log('Listening for keyboard shortcuts (Alt + S to start, Alt + T to stop)...'); +``` + +To run this code, make sure you have Node.js and TypeScript installed. Save the code to a file, e.g., `app.ts`, and compile it using the TypeScript compiler (`tsc app.ts`). Then, run the compiled JavaScript file using Node.js (`node app.js`). + +Once the app is running, you can press Alt + S to call the `start` function, and Alt + T to call the `stop` function. \ No newline at end of file diff --git a/packages/i18n/tests/cs_cart/cs_categories.json b/packages/i18n/tests/cs_cart/cs_categories.json new file mode 100644 index 00000000..f81bc54b --- /dev/null +++ b/packages/i18n/tests/cs_cart/cs_categories.json @@ -0,0 +1,57 @@ +[ + { + "category_id": "26", + "parent_id": "0", + "id_path": "26", + "category": "Plastic", + "position": "140", + "status": "A", + "company_id": "0", + "storefront_id": "0", + "product_count": "0", + "seo_name": "plastic", + "seo_path": "", + "description": "" + }, { + "category_id": "25", + "parent_id": "0", + "id_path": "25", + "category": "Moulds", + "position": "130", + "status": "A", + "company_id": "0", + "storefront_id": "0", + "product_count": "1", + "seo_name": "moulds-en", + "seo_path": "", + "description": "" + }, + { + "category_id": "23", + "parent_id": "0", + "id_path": "23", + "category": "Shredder", + "position": "110", + "status": "A", + "company_id": "0", + "storefront_id": "0", + "product_count": "9", + "seo_name": "discontinued", + "seo_path": "", + "description": "" + }, + { + "category_id": "23", + "parent_id": "0", + "id_path": "23", + "category": "Extrusion", + "position": "110", + "status": "A", + "company_id": "0", + "storefront_id": "0", + "product_count": "9", + "seo_name": "discontinued", + "seo_path": "", + "description": "" + } +] \ No newline at end of file diff --git a/packages/i18n/tests/cs_cart/de/cs_categories.json b/packages/i18n/tests/cs_cart/de/cs_categories.json new file mode 100644 index 00000000..a437a2ae --- /dev/null +++ b/packages/i18n/tests/cs_cart/de/cs_categories.json @@ -0,0 +1,58 @@ +[ + { + "category_id": "26", + "parent_id": "0", + "id_path": "26", + "category": "Kunststoff", + "position": "140", + "status": "A", + "company_id": "0", + "storefront_id": "0", + "product_count": "0", + "seo_name": "plastic", + "seo_path": "", + "description": "" + }, + { + "category_id": "25", + "parent_id": "0", + "id_path": "25", + "category": "Spritzgussformen", + "position": "130", + "status": "A", + "company_id": "0", + "storefront_id": "0", + "product_count": "1", + "seo_name": "moulds-en", + "seo_path": "", + "description": "" + }, + { + "category_id": "23", + "parent_id": "0", + "id_path": "23", + "category": "Granulator", + "position": "110", + "status": "A", + "company_id": "0", + "storefront_id": "0", + "product_count": "9", + "seo_name": "discontinued", + "seo_path": "", + "description": "" + }, + { + "category_id": "23", + "parent_id": "0", + "id_path": "23", + "category": "Extrusion", + "position": "110", + "status": "A", + "company_id": "0", + "storefront_id": "0", + "product_count": "9", + "seo_name": "discontinued", + "seo_path": "", + "description": "" + } +] \ No newline at end of file diff --git a/packages/i18n/tests/example.json b/packages/i18n/tests/example.json new file mode 100644 index 00000000..aa75c11d --- /dev/null +++ b/packages/i18n/tests/example.json @@ -0,0 +1,4 @@ +{ + "key":"Some key", + "cryptic":"If you want it done right, do it yourself!" +} \ No newline at end of file diff --git a/packages/i18n/tests/example.md b/packages/i18n/tests/example.md new file mode 100644 index 00000000..5bc737f2 --- /dev/null +++ b/packages/i18n/tests/example.md @@ -0,0 +1,13 @@ +Where is Bill? + +## Supported plastic types + +- [ ] PVC +- [ ] PET + +Did you really think I make it that easy? + +```sh +# some code +ps -aux +``` diff --git a/packages/i18n/tests/glossary/en/de/index.csv b/packages/i18n/tests/glossary/en/de/index.csv new file mode 100644 index 00000000..9431a293 --- /dev/null +++ b/packages/i18n/tests/glossary/en/de/index.csv @@ -0,0 +1,7 @@ +Plastic,Kunststoff +Shredder,Granulator +Mould,Spritzgussform +Precious – Plastic,Precious - Plastic +Sheetpress,Plattenpresse +Injection,Spritzgießmaschine +Injection Kits,Injection Kits diff --git a/packages/i18n/tests/glossary/en/de/index_glossary.json b/packages/i18n/tests/glossary/en/de/index_glossary.json new file mode 100644 index 00000000..b4540aff --- /dev/null +++ b/packages/i18n/tests/glossary/en/de/index_glossary.json @@ -0,0 +1,9 @@ +{ + "glossaryId": "60c0b19b-27f0-45ab-a375-feaef2b85b92", + "name": "pp", + "ready": true, + "sourceLang": "en", + "targetLang": "de", + "creationTime": "2023-02-18T17:25:37.800Z", + "entryCount": 7 +} \ No newline at end of file diff --git a/packages/i18n/tests/hugo/extruders-de.xlsx b/packages/i18n/tests/hugo/extruders-de.xlsx new file mode 100644 index 00000000..aa2631b8 Binary files /dev/null and b/packages/i18n/tests/hugo/extruders-de.xlsx differ diff --git a/packages/i18n/tests/hugo/extruders-en.xlsx b/packages/i18n/tests/hugo/extruders-en.xlsx new file mode 100644 index 00000000..35dc1b44 Binary files /dev/null and b/packages/i18n/tests/hugo/extruders-en.xlsx differ diff --git a/packages/i18n/tests/hugo/extruders-es.xlsx b/packages/i18n/tests/hugo/extruders-es.xlsx new file mode 100644 index 00000000..b6e34266 Binary files /dev/null and b/packages/i18n/tests/hugo/extruders-es.xlsx differ diff --git a/packages/i18n/tests/hugo/extruders-fr.xlsx b/packages/i18n/tests/hugo/extruders-fr.xlsx new file mode 100644 index 00000000..41240d68 Binary files /dev/null and b/packages/i18n/tests/hugo/extruders-fr.xlsx differ diff --git a/packages/i18n/tests/hugo/extruders-it.xlsx b/packages/i18n/tests/hugo/extruders-it.xlsx new file mode 100644 index 00000000..a8978c8b Binary files /dev/null and b/packages/i18n/tests/hugo/extruders-it.xlsx differ diff --git a/packages/i18n/tests/test-academy-alt.sh b/packages/i18n/tests/test-academy-alt.sh new file mode 100644 index 00000000..19bd40ab --- /dev/null +++ b/packages/i18n/tests/test-academy-alt.sh @@ -0,0 +1,9 @@ +node ./dist/main.js translate \ +--cwd='../pp-academy/academy/docs' \ +--dry=false \ +--alt=true \ +--sourceLang='EN' \ +--targetLang='DE' \ +--debug \ +--src='./tests/EN/**/*.md' \ +--dst='../i18-tests/academy-de/&{SRC_REL}/&{SRC_NAME}&{SRC_EXT}' diff --git a/packages/i18n/tests/test-academy.sh b/packages/i18n/tests/test-academy.sh new file mode 100644 index 00000000..dd77abee --- /dev/null +++ b/packages/i18n/tests/test-academy.sh @@ -0,0 +1,7 @@ +node ./dist/main.js translate --cwd='../../ph3/academy' \ +--dry=false \ +--sourceLang='EN' \ +--targetLang='DE' \ +--debug \ +--src='./tests/EN/**/*.md' \ +--dst='../i18-tests/academy-de/${SRC_REL}/${SRC_NAME}${SRC_EXT}' diff --git a/packages/i18n/tests/yml/en.yaml b/packages/i18n/tests/yml/en.yaml new file mode 100644 index 00000000..ac8837a7 --- /dev/null +++ b/packages/i18n/tests/yml/en.yaml @@ -0,0 +1,80 @@ +- id: read_more + translation: Read More + +- id: address + translation: Our Address + +- id: phone + translation: Phone Number + +- id: email + translation: Message Us + +- id: contact_form + translation: Contact Form + +- id: send + translation: send message + +- id: follow + translation: FOLLOW US ON + +- id: services + translation: Services + +- id: contact_info + translation: Contact Info + +- id: subscribe_newsletter + translation: Subscribe Newsletter + +- id: subscribe + translation: Subscribe + +- id: connect_with_us + translation: Connect With Us + +- id: call_now + translation: Call Now + +- id: search_placeholder + translation: Type & Hit Enter... + +- id: quick_contact + translation: Quick Contact + +- id: latest_article + translation: Latest Article + +- id: category + translation: Category + +- id: tags + translation: Tags + +- id: all + translation: ALL + +- id: client + translation: client + +- id: clients + translation: clients + +- id: date + translation: date + +- id: status + translation: status + +- id: our_services + translation: Our Services + +- id: prices + translation: Prices + +- id: built + translation: Built + +- id: duration + translation: Duration diff --git a/packages/i18n/tests/yml/en2.yaml b/packages/i18n/tests/yml/en2.yaml new file mode 100644 index 00000000..4a4c36b9 --- /dev/null +++ b/packages/i18n/tests/yml/en2.yaml @@ -0,0 +1,9 @@ +- id: read_more + translation: Chamber Size + +- id: address + translation: Capacity + +- id: injection_machine + translation: Injection Machine + diff --git a/packages/i18n/tests/yml/fr.yaml b/packages/i18n/tests/yml/fr.yaml new file mode 100644 index 00000000..558c5c3b --- /dev/null +++ b/packages/i18n/tests/yml/fr.yaml @@ -0,0 +1,54 @@ +- id: read_more + translation: Lire la suite +- id: address + translation: Notre adresse +- id: phone + translation: Numéro de téléphone +- id: email + translation: Nous envoyer un message +- id: contact_form + translation: Formulaire de contact +- id: send + translation: envoyer un message +- id: follow + translation: SUIVEZ-NOUS SUR +- id: services + translation: Services +- id: contact_info + translation: Contact +- id: subscribe_newsletter + translation: S'abonner à la lettre d'information +- id: subscribe + translation: S'abonner +- id: connect_with_us + translation: Connectez-vous avec nous +- id: call_now + translation: Appeler maintenant +- id: search_placeholder + translation: Tapez et appuyez sur Entrée... +- id: quick_contact + translation: Contact rapide +- id: latest_article + translation: Dernier article +- id: category + translation: Catégorie +- id: tags + translation: Tags +- id: all + translation: TOUS +- id: client + translation: client +- id: clients + translation: clients +- id: date + translation: date +- id: status + translation: statut +- id: our_services + translation: Nos services +- id: prices + translation: Prix +- id: built + translation: Construit +- id: duration + translation: Durée de l'accord diff --git a/packages/i18n/tests/yml/it2.yaml b/packages/i18n/tests/yml/it2.yaml new file mode 100644 index 00000000..41084911 --- /dev/null +++ b/packages/i18n/tests/yml/it2.yaml @@ -0,0 +1,6 @@ +- id: read_more + translation: Dimensione della camera +- id: address + translation: Capacità +- id: injection_machine + translation: Macchina a iniezione diff --git a/packages/i18n/tsconfig.json b/packages/i18n/tsconfig.json new file mode 100644 index 00000000..ae5672d0 --- /dev/null +++ b/packages/i18n/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../typescript-config/base.json", + "include": [ + "src/**/*.ts" + ], + "files": [ + "src/index.ts" + ], + "compilerOptions": { + "strictNullChecks": false, + "allowJs": true, + "baseUrl": ".", + "declarationDir": "./dist", + "outDir": "./dist", + "inlineSourceMap": true, + "preserveConstEnums": true, + "paths": { + "@/*": [ + "src/*" + ] + } + }, + } \ No newline at end of file diff --git a/packages/i18n/tsup.config.ts b/packages/i18n/tsup.config.ts new file mode 100644 index 00000000..03b4a81f --- /dev/null +++ b/packages/i18n/tsup.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "tsup"; + +export default defineConfig((options) => ({ + entryPoints: [ + "src/*.ts" + ], + format: ["cjs", "esm"], + dts: true, + sourcemap: true, + ...options, + bundle: false +}));