one-way-git-sync 6.0.39 → 6.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +2 -2
  2. package/package.json +15 -15
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import e from"node:fs";import t from"node:path";import{hideBin as i}from"yargs/helpers";import o from"yargs/yargs";import{pino as r}from"pino";import a from"node:child_process";import n from"node:fs/promises";import{copy as s}from"fs-extra";import c from"micromatch";import{simpleGit as d}from"simple-git";const m=r({transport:{target:"pino-pretty",options:{colorize:!0}}});const l=t.join("node_modules",".temp","sync-git-repo");const g={dest:{type:"string",alias:"d",describe:"A URL of a destination git repository.",demand:!0},prefix:{type:"string",alias:"p",describe:"A prefix of a commit hash used to generate a commit title, e.g. 'sync <prefix>/<hash>'.\n A typical value is like 'https://github.com/WillBooster/one-way-git-sync/commits'"},branch:{type:"string",alias:"b",describe:"Specify branch of destination repo."},tag:{type:"string",alias:"t",describe:"Specify tag to be created in destination repo."},"tag-hash":{type:"boolean",describe:"Create version+hash tag (e.g. v1.31.5-2-gcdde507). It should be a unique tag."},"tag-version":{type:"boolean",describe:"Create version tag (e.g. v1.31.5). It could be a non-unique tag."},"ignore-patterns":{type:"array",alias:"i",describe:"Exclude the files whose path matches one of the given patterns.\n The patterns are processed by micromatch (https://github.com/micromatch/micromatch).\n You may specify the option multiple times. Default value is \"-i .git -i .github -i node_modules -i '.renovaterc.*' -i '.renovate.*'\"",default:[".git",".github","node_modules",".renovaterc.*","renovate.*"]},dry:{type:"boolean",describe:"Enable dry-run mode."},force:{type:"boolean",describe:"Force to overwrite the destination git repository."},verbose:{type:"boolean",alias:"v",describe:"Show details logs."}},p=await o(i(process.argv)).scriptName("one-way-git-sync").options(g).middleware(e=>{m.level=e.verbose?"trace":"info"}).strict().version(function(){let i=t.dirname(new URL(import.meta.url).pathname);for(;!e.existsSync(t.join(i,"package.json"));)i=t.dirname(i);return JSON.parse(e.readFileSync(t.join(i,"package.json"),"utf8")).version}()).help().argv;await async function(e){await n.mkdir(l,{recursive:!0});const i=await n.mkdtemp(t.join(l,"repo-")),o=await async function(e,i,o=process.cwd()){const r={"--single-branch":null};i.force||(r["--depth"]=1);i.branch&&(r["--branch"]=i.branch);try{await d(o).clone(i.dest,e,r)}catch{delete r["--branch"],delete r["--single-branch"],await d(o).clone(i.dest,e,r),await d(e).checkout(["-b",i.branch])}m.debug(`Cloned destination repo on ${e}`);const l=d(e);let g=[];try{g=function(e){if(0===e.all.length)return m.debug("No commit history"),[];for(const t of e.all){const[e,...i]=t.message.replaceAll(/[()]/g,"").split(/[\s/]/);if("sync"===e&&i.length>0)return[t.message,i.at(-1)]}const[t]=e.all;t&&m.debug(`No sync commit: ${t.message}`);return[]}(await l.log())}catch{}const[p,h]=g;if(h)m.debug(`Extracted a valid commit: ${h}`),m.debug(`(${p})`);else if(!i.force)return m.error("No valid commit in destination repo"),!1;const u=d(o);let f;try{f=await u.log(h?{from:h,to:"HEAD","--first-parent":void 0}:void 0)}catch(e){return m.error(`Failed to get source commit history: ${e.stack}`),!1}const b=f.latest?.hash;if(!b)return m.info("No synchronizable commit"),!0;const y=[...new Set([...i["ignore-patterns"].map(String),".git"])];let[w,v]=await Promise.all([n.readdir(e),n.readdir(o)]);w=c.not(w,y),v=c.not(v,y),m.debug("destFiles: %o",w),m.debug("srcFiles: %o",v);for(const i of w)await n.rm(t.join(e,i),{recursive:!0,force:!0});for(const i of v)await s(t.join(o,i),t.join(e,i));await l.add("-A");let $="";if(i["tag-hash"]||i["tag-version"]){const e="git describe --tags --always "+(i["tag-version"]?"--abbrev=0":"");$=a.execSync(e,{cwd:o}).toString().trim()}let j=i.prefix??await async function(e){const t=(await e.getRemotes(!0)).find(e=>"origin"===e.name);if(!t)return;let i=t.refs.fetch;if(i||(i=t.refs.push),"string"==typeof i&&i.includes("github.com")){const e=i.split("/"),t=e.at(-2),o=e.at(-1)?.replace(/.git$/,"");if(t&&o)return`https://github.com/${t}/${o}/commits`}}(u)??"";j&&!j.endsWith("/")&&(j+="/");const x=`${j}${b}`,S=$?`sync ${$} (${x})`:`sync ${x}`,k=h?f.all.map(e=>`* ${e.message}`).join("\n\n"):`Replace all the files with those of ${i.dest} due to missing sync commit.`;try{const e=await l.commit(`${S}\n\n${k}`);m.debug("Created a commit: %o",e),m.debug(S),m.debug(` with body: ${k}`)}catch(e){return m.error(`Failed to commit changes: ${e.stack}`),!1}const F=$||i.tag;if(F)try{await l.addTag(F),m.debug(`Created a tag: ${F}`)}catch{m.warn(`Failed to create a tag: ${F}`)}if(i.dry)return m.debug("Finished dry run"),!0;try{await(i.branch?l.push("origin",i.branch):l.push()),F&&await l.push({"--tags":null})}catch(e){return m.error(`Failed to push the commit: ${e.stack}`),!1}return m.debug("Pushed the commit"),!0}(i,e);process.exit(o?0:1)}(p);
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2dnZXIudHMiLCIuLi9zcmMvc3luYy50cyIsIi4uL3NyYy95YXJnc09wdGlvbnMudHMiLCIuLi9zcmMvaW5kZXgudHMiLCIuLi9zcmMvZ2l0SHViLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBpbm8gfSBmcm9tICdwaW5vJztcblxuZXhwb3J0IGNvbnN0IGxvZ2dlciA9IHBpbm8oe1xuICB0cmFuc3BvcnQ6IHtcbiAgICB0YXJnZXQ6ICdwaW5vLXByZXR0eScsXG4gICAgb3B0aW9uczoge1xuICAgICAgY29sb3JpemU6IHRydWUsXG4gICAgfSxcbiAgfSxcbn0pO1xuIiwiaW1wb3J0IGNoaWxkX3Byb2Nlc3MgZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBmcyBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGNvcHkgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgbWljcm9tYXRjaCBmcm9tICdtaWNyb21hdGNoJztcbmltcG9ydCB0eXBlIHsgTG9nUmVzdWx0LCBPcHRpb25zLCBTaW1wbGVHaXQsIFRhc2tPcHRpb25zIH0gZnJvbSAnc2ltcGxlLWdpdCc7XG5pbXBvcnQgeyBzaW1wbGVHaXQgfSBmcm9tICdzaW1wbGUtZ2l0JztcbmltcG9ydCB0eXBlIHsgSW5mZXJyZWRPcHRpb25UeXBlcyB9IGZyb20gJ3lhcmdzJztcblxuaW1wb3J0IHsgZ2V0R2l0SHViQ29tbWl0c1VybCB9IGZyb20gJy4vZ2l0SHViLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgeWFyZ3NPcHRpb25zIH0gZnJvbSAnLi95YXJnc09wdGlvbnMuanMnO1xuXG5jb25zdCBzeW5jRGlyUGF0aCA9IHBhdGguam9pbignbm9kZV9tb2R1bGVzJywgJy50ZW1wJywgJ3N5bmMtZ2l0LXJlcG8nKTtcblxuZXhwb3J0IHR5cGUgWWFyZ3NPcHRpb25zID0gSW5mZXJyZWRPcHRpb25UeXBlczx0eXBlb2YgeWFyZ3NPcHRpb25zPjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN5bmMob3B0czogWWFyZ3NPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGZzLm1rZGlyKHN5bmNEaXJQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgZGlyUGF0aCA9IGF3YWl0IGZzLm1rZHRlbXAocGF0aC5qb2luKHN5bmNEaXJQYXRoLCAncmVwby0nKSk7XG4gIGNvbnN0IHJldCA9IGF3YWl0IHN5bmNDb3JlKGRpclBhdGgsIG9wdHMpO1xuICAvLyBhd2FpdCBmcy5ybShkaXJQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIHByb2Nlc3MuZXhpdChyZXQgPyAwIDogMSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzeW5jQ29yZShcbiAgZGVzdFJlcG9QYXRoOiBzdHJpbmcsXG4gIG9wdHM6IFlhcmdzT3B0aW9ucyxcbiAgc3JjUmVwb1BhdGggPSBwcm9jZXNzLmN3ZCgpXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tbnVsbFxuICBjb25zdCBjbG9uZU9wdHM6IE9wdGlvbnMgPSB7ICctLXNpbmdsZS1icmFuY2gnOiBudWxsIH07XG4gIGlmICghb3B0cy5mb3JjZSkge1xuICAgIGNsb25lT3B0c1snLS1kZXB0aCddID0gMTtcbiAgfVxuICBpZiAob3B0cy5icmFuY2gpIHtcbiAgICBjbG9uZU9wdHNbJy0tYnJhbmNoJ10gPSBvcHRzLmJyYW5jaDtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IHNpbXBsZUdpdChzcmNSZXBvUGF0aCkuY2xvbmUob3B0cy5kZXN0LCBkZXN0UmVwb1BhdGgsIGNsb25lT3B0cyk7XG4gIH0gY2F0Y2gge1xuICAgIGRlbGV0ZSBjbG9uZU9wdHNbJy0tYnJhbmNoJ107XG4gICAgZGVsZXRlIGNsb25lT3B0c1snLS1zaW5nbGUtYnJhbmNoJ107XG4gICAgYXdhaXQgc2ltcGxlR2l0KHNyY1JlcG9QYXRoKS5jbG9uZShvcHRzLmRlc3QsIGRlc3RSZXBvUGF0aCwgY2xvbmVPcHRzKTtcbiAgICBhd2FpdCBzaW1wbGVHaXQoZGVzdFJlcG9QYXRoKS5jaGVja291dChbJy1iJywgb3B0cy5icmFuY2hdIGFzIFRhc2tPcHRpb25zKTtcbiAgfVxuICBsb2dnZXIuZGVidWcoYENsb25lZCBkZXN0aW5hdGlvbiByZXBvIG9uICR7ZGVzdFJlcG9QYXRofWApO1xuXG4gIGNvbnN0IGRzdEdpdDogU2ltcGxlR2l0ID0gc2ltcGxlR2l0KGRlc3RSZXBvUGF0aCk7XG4gIGxldCBjb21taXRIYXNoUmVzdWx0OiBbc3RyaW5nLCBzdHJpbmddIHwgW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCBkc3RMb2cgPSBhd2FpdCBkc3RHaXQubG9nKCk7XG4gICAgY29tbWl0SGFzaFJlc3VsdCA9IGV4dHJhY3RDb21taXRIYXNoKGRzdExvZyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuICBjb25zdCBbaGVhZCwgZnJvbV0gPSBjb21taXRIYXNoUmVzdWx0O1xuICBpZiAoZnJvbSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgRXh0cmFjdGVkIGEgdmFsaWQgY29tbWl0OiAke2Zyb219YCk7XG4gICAgbG9nZ2VyLmRlYnVnKGAoJHtoZWFkfSlgKTtcbiAgfSBlbHNlIGlmICghb3B0cy5mb3JjZSkge1xuICAgIGxvZ2dlci5lcnJvcignTm8gdmFsaWQgY29tbWl0IGluIGRlc3RpbmF0aW9uIHJlcG8nKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzcmNHaXQ6IFNpbXBsZUdpdCA9IHNpbXBsZUdpdChzcmNSZXBvUGF0aCk7XG4gIGxldCBzcmNMb2c6IExvZ1Jlc3VsdDtcbiAgdHJ5IHtcbiAgICAvLyAnLS1maXJzdC1wYXJlbnQnIGhpZGVzIGNoaWxkcmVuIGNvbW1pdHMgb2YgbWVyZ2UgY29tbWl0c1xuICAgIHNyY0xvZyA9IGF3YWl0IHNyY0dpdC5sb2coZnJvbSA/IHsgZnJvbSwgdG86ICdIRUFEJywgJy0tZmlyc3QtcGFyZW50JzogdW5kZWZpbmVkIH0gOiB1bmRlZmluZWQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGdldCBzb3VyY2UgY29tbWl0IGhpc3Rvcnk6ICR7KGVycm9yIGFzIEVycm9yKS5zdGFja31gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBsYXRlc3RIYXNoID0gc3JjTG9nLmxhdGVzdD8uaGFzaDtcbiAgaWYgKCFsYXRlc3RIYXNoKSB7XG4gICAgbG9nZ2VyLmluZm8oJ05vIHN5bmNocm9uaXphYmxlIGNvbW1pdCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gRm9yY2UgdG8gaWdub3JlIC5naXQgZGlyZWN0b3J5XG4gIGNvbnN0IGlnbm9yZVBhdHRlcm5zID0gWy4uLm5ldyBTZXQoWy4uLm9wdHNbJ2lnbm9yZS1wYXR0ZXJucyddLm1hcChTdHJpbmcpLCAnLmdpdCddKV07XG4gIGxldCBbZGVzdEZpbGVzLCBzcmNGaWxlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbZnMucmVhZGRpcihkZXN0UmVwb1BhdGgpLCBmcy5yZWFkZGlyKHNyY1JlcG9QYXRoKV0pO1xuICBkZXN0RmlsZXMgPSBtaWNyb21hdGNoLm5vdChkZXN0RmlsZXMsIGlnbm9yZVBhdHRlcm5zKTtcbiAgc3JjRmlsZXMgPSBtaWNyb21hdGNoLm5vdChzcmNGaWxlcywgaWdub3JlUGF0dGVybnMpO1xuICBsb2dnZXIuZGVidWcoJ2Rlc3RGaWxlczogJW8nLCBkZXN0RmlsZXMpO1xuICBsb2dnZXIuZGVidWcoJ3NyY0ZpbGVzOiAlbycsIHNyY0ZpbGVzKTtcbiAgZm9yIChjb25zdCBkZXN0RmlsZSBvZiBkZXN0RmlsZXMpIHtcbiAgICBhd2FpdCBmcy5ybShwYXRoLmpvaW4oZGVzdFJlcG9QYXRoLCBkZXN0RmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxuICBmb3IgKGNvbnN0IHNyY0ZpbGUgb2Ygc3JjRmlsZXMpIHtcbiAgICBhd2FpdCBjb3B5KHBhdGguam9pbihzcmNSZXBvUGF0aCwgc3JjRmlsZSksIHBhdGguam9pbihkZXN0UmVwb1BhdGgsIHNyY0ZpbGUpKTtcbiAgfVxuICBhd2FpdCBkc3RHaXQuYWRkKCctQScpO1xuXG4gIGxldCBzcmNUYWcgPSAnJztcbiAgaWYgKG9wdHNbJ3RhZy1oYXNoJ10gfHwgb3B0c1sndGFnLXZlcnNpb24nXSkge1xuICAgIC8vIGUuZy4gYC0tYWJicmV2PTBgIGNoYW5nZXMgYHYxLjMxLjUtMi1nY2RkZTUwN2AgdG8gYHYxLjMxLjVgXG4gICAgY29uc3QgZGVzY3JpYmVDb21tYW5kID0gYGdpdCBkZXNjcmliZSAtLXRhZ3MgLS1hbHdheXMgJHtvcHRzWyd0YWctdmVyc2lvbiddID8gJy0tYWJicmV2PTAnIDogJyd9YDtcbiAgICBzcmNUYWcgPSBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKGRlc2NyaWJlQ29tbWFuZCwgeyBjd2Q6IHNyY1JlcG9QYXRoIH0pLnRvU3RyaW5nKCkudHJpbSgpO1xuICB9XG4gIGxldCBwcmVmaXggPSBvcHRzLnByZWZpeCA/PyAoYXdhaXQgZ2V0R2l0SHViQ29tbWl0c1VybChzcmNHaXQpKSA/PyAnJztcbiAgaWYgKHByZWZpeCAmJiAhcHJlZml4LmVuZHNXaXRoKCcvJykpIHtcbiAgICBwcmVmaXggKz0gJy8nO1xuICB9XG4gIGNvbnN0IGxpbmsgPSBgJHtwcmVmaXh9JHtsYXRlc3RIYXNofWA7XG4gIGNvbnN0IHRpdGxlID0gc3JjVGFnID8gYHN5bmMgJHtzcmNUYWd9ICgke2xpbmt9KWAgOiBgc3luYyAke2xpbmt9YDtcbiAgY29uc3QgYm9keSA9IGZyb21cbiAgICA/IHNyY0xvZy5hbGwubWFwKChsKSA9PiBgKiAke2wubWVzc2FnZX1gKS5qb2luKCdcXG5cXG4nKVxuICAgIDogYFJlcGxhY2UgYWxsIHRoZSBmaWxlcyB3aXRoIHRob3NlIG9mICR7b3B0cy5kZXN0fSBkdWUgdG8gbWlzc2luZyBzeW5jIGNvbW1pdC5gO1xuICB0cnkge1xuICAgIGNvbnN0IHJldCA9IGF3YWl0IGRzdEdpdC5jb21taXQoYCR7dGl0bGV9XFxuXFxuJHtib2R5fWApO1xuICAgIGxvZ2dlci5kZWJ1ZyhgQ3JlYXRlZCBhIGNvbW1pdDogJW9gLCByZXQpO1xuICAgIGxvZ2dlci5kZWJ1Zyh0aXRsZSk7XG4gICAgbG9nZ2VyLmRlYnVnKGAgIHdpdGggYm9keTogJHtib2R5fWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNvbW1pdCBjaGFuZ2VzOiAkeyhlcnJvciBhcyBFcnJvcikuc3RhY2t9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGVzdFRhZyA9IHNyY1RhZyB8fCBvcHRzLnRhZztcbiAgaWYgKGRlc3RUYWcpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZHN0R2l0LmFkZFRhZyhkZXN0VGFnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ3JlYXRlZCBhIHRhZzogJHtkZXN0VGFnfWApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JlIHRoZSBlcnJvciBzaW5jZSBgLS1hYmJyZXY9MGAgbWF5IHlpZWxkIGEgdGFnIHRoYXQgYWxyZWFkeSBleGlzdHNcbiAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gY3JlYXRlIGEgdGFnOiAke2Rlc3RUYWd9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMuZHJ5KSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdGaW5pc2hlZCBkcnkgcnVuJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IChvcHRzLmJyYW5jaCA/IGRzdEdpdC5wdXNoKCdvcmlnaW4nLCBvcHRzLmJyYW5jaCkgOiBkc3RHaXQucHVzaCgpKTtcbiAgICBpZiAoZGVzdFRhZykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tbnVsbFxuICAgICAgYXdhaXQgZHN0R2l0LnB1c2goeyAnLS10YWdzJzogbnVsbCB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gcHVzaCB0aGUgY29tbWl0OiAkeyhlcnJvciBhcyBFcnJvcikuc3RhY2t9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKCdQdXNoZWQgdGhlIGNvbW1pdCcpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdENvbW1pdEhhc2gobG9nUmVzdWx0OiBMb2dSZXN1bHQpOiBbc3RyaW5nLCBzdHJpbmddIHwgW10ge1xuICBpZiAobG9nUmVzdWx0LmFsbC5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIuZGVidWcoJ05vIGNvbW1pdCBoaXN0b3J5Jyk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZm9yIChjb25zdCBsb2cgb2YgbG9nUmVzdWx0LmFsbCkge1xuICAgIGNvbnN0IFtoZWFkLCAuLi53b3Jkc10gPSBsb2cubWVzc2FnZS5yZXBsYWNlQWxsKC9bKCldL2csICcnKS5zcGxpdCgvW1xccy9dLyk7XG4gICAgaWYgKGhlYWQgPT09ICdzeW5jJyAmJiB3b3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gW2xvZy5tZXNzYWdlLCB3b3Jkcy5hdCgtMSkgYXMgc3RyaW5nXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW2ZpcnN0TG9nXSA9IGxvZ1Jlc3VsdC5hbGw7XG4gIGlmIChmaXJzdExvZykge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gc3luYyBjb21taXQ6ICR7Zmlyc3RMb2cubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gW107XG59XG4iLCJleHBvcnQgY29uc3QgeWFyZ3NPcHRpb25zID0ge1xuICBkZXN0OiB7XG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgYWxpYXM6ICdkJyxcbiAgICBkZXNjcmliZTogJ0EgVVJMIG9mIGEgZGVzdGluYXRpb24gZ2l0IHJlcG9zaXRvcnkuJyxcbiAgICBkZW1hbmQ6IHRydWUsXG4gIH0sXG4gIHByZWZpeDoge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGFsaWFzOiAncCcsXG4gICAgZGVzY3JpYmU6IGBBIHByZWZpeCBvZiBhIGNvbW1pdCBoYXNoIHVzZWQgdG8gZ2VuZXJhdGUgYSBjb21taXQgdGl0bGUsIGUuZy4gJ3N5bmMgPHByZWZpeD4vPGhhc2g+Jy5cbiAgICAgICAgICAgICAgIEEgdHlwaWNhbCB2YWx1ZSBpcyBsaWtlICdodHRwczovL2dpdGh1Yi5jb20vV2lsbEJvb3N0ZXIvb25lLXdheS1naXQtc3luYy9jb21taXRzJ2AsXG4gIH0sXG4gIGJyYW5jaDoge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGFsaWFzOiAnYicsXG4gICAgZGVzY3JpYmU6ICdTcGVjaWZ5IGJyYW5jaCBvZiBkZXN0aW5hdGlvbiByZXBvLicsXG4gIH0sXG4gIHRhZzoge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGFsaWFzOiAndCcsXG4gICAgZGVzY3JpYmU6ICdTcGVjaWZ5IHRhZyB0byBiZSBjcmVhdGVkIGluIGRlc3RpbmF0aW9uIHJlcG8uJyxcbiAgfSxcbiAgJ3RhZy1oYXNoJzoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZXNjcmliZTogJ0NyZWF0ZSB2ZXJzaW9uK2hhc2ggdGFnIChlLmcuIHYxLjMxLjUtMi1nY2RkZTUwNykuIEl0IHNob3VsZCBiZSBhIHVuaXF1ZSB0YWcuJyxcbiAgfSxcbiAgJ3RhZy12ZXJzaW9uJzoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZXNjcmliZTogJ0NyZWF0ZSB2ZXJzaW9uIHRhZyAoZS5nLiB2MS4zMS41KS4gSXQgY291bGQgYmUgYSBub24tdW5pcXVlIHRhZy4nLFxuICB9LFxuICAnaWdub3JlLXBhdHRlcm5zJzoge1xuICAgIHR5cGU6ICdhcnJheScsXG4gICAgYWxpYXM6ICdpJyxcbiAgICBkZXNjcmliZTogYEV4Y2x1ZGUgdGhlIGZpbGVzIHdob3NlIHBhdGggbWF0Y2hlcyBvbmUgb2YgdGhlIGdpdmVuIHBhdHRlcm5zLlxuICAgICAgICAgICAgICAgVGhlIHBhdHRlcm5zIGFyZSBwcm9jZXNzZWQgYnkgbWljcm9tYXRjaCAoaHR0cHM6Ly9naXRodWIuY29tL21pY3JvbWF0Y2gvbWljcm9tYXRjaCkuXG4gICAgICAgICAgICAgICBZb3UgbWF5IHNwZWNpZnkgdGhlIG9wdGlvbiBtdWx0aXBsZSB0aW1lcy4gRGVmYXVsdCB2YWx1ZSBpcyBcIi1pIC5naXQgLWkgLmdpdGh1YiAtaSBub2RlX21vZHVsZXMgLWkgJy5yZW5vdmF0ZXJjLionIC1pICcucmVub3ZhdGUuKidcImAsXG4gICAgZGVmYXVsdDogWycuZ2l0JywgJy5naXRodWInLCAnbm9kZV9tb2R1bGVzJywgJy5yZW5vdmF0ZXJjLionLCAncmVub3ZhdGUuKiddLFxuICB9LFxuICBkcnk6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVzY3JpYmU6ICdFbmFibGUgZHJ5LXJ1biBtb2RlLicsXG4gIH0sXG4gIGZvcmNlOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlc2NyaWJlOiAnRm9yY2UgdG8gb3ZlcndyaXRlIHRoZSBkZXN0aW5hdGlvbiBnaXQgcmVwb3NpdG9yeS4nLFxuICB9LFxuICB2ZXJib3NlOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGFsaWFzOiAndicsXG4gICAgZGVzY3JpYmU6ICdTaG93IGRldGFpbHMgbG9ncy4nLFxuICB9LFxufSBhcyBjb25zdDtcbiIsImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGhpZGVCaW4gfSBmcm9tICd5YXJncy9oZWxwZXJzJztcbmltcG9ydCB5YXJncyBmcm9tICd5YXJncy95YXJncyc7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IHN5bmMgfSBmcm9tICcuL3N5bmMuanMnO1xuaW1wb3J0IHsgeWFyZ3NPcHRpb25zIH0gZnJvbSAnLi95YXJnc09wdGlvbnMuanMnO1xuXG5jb25zdCBhcmd2ID0gYXdhaXQgeWFyZ3MoaGlkZUJpbihwcm9jZXNzLmFyZ3YpKVxuICAuc2NyaXB0TmFtZSgnb25lLXdheS1naXQtc3luYycpXG4gIC5vcHRpb25zKHlhcmdzT3B0aW9ucylcbiAgLm1pZGRsZXdhcmUoKGFyZ3YpID0+IHtcbiAgICBsb2dnZXIubGV2ZWwgPSBhcmd2LnZlcmJvc2UgPyAndHJhY2UnIDogJ2luZm8nO1xuICB9KVxuICAuc3RyaWN0KClcbiAgLnZlcnNpb24oZ2V0VmVyc2lvbigpKVxuICAuaGVscCgpLmFyZ3Y7XG5cbmZ1bmN0aW9uIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgbGV0IHBhY2thZ2VKc29uRGlyID0gcGF0aC5kaXJuYW1lKG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZSk7XG4gIHdoaWxlICghZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocGFja2FnZUpzb25EaXIsICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICBwYWNrYWdlSnNvbkRpciA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvbkRpcik7XG4gIH1cbiAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocGFja2FnZUpzb25EaXIsICdwYWNrYWdlLmpzb24nKSwgJ3V0ZjgnKSkgYXMge1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgfTtcbiAgcmV0dXJuIHBhY2thZ2VKc29uLnZlcnNpb247XG59XG5cbmF3YWl0IHN5bmMoYXJndik7XG4iLCJpbXBvcnQgdHlwZSB7IFNpbXBsZUdpdCB9IGZyb20gJ3NpbXBsZS1naXQnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0R2l0SHViQ29tbWl0c1VybChnaXQ6IFNpbXBsZUdpdCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHJlbW90ZXMgPSBhd2FpdCBnaXQuZ2V0UmVtb3Rlcyh0cnVlKTtcbiAgY29uc3Qgb3JpZ2luID0gcmVtb3Rlcy5maW5kKChyKSA9PiByLm5hbWUgPT09ICdvcmlnaW4nKTtcbiAgaWYgKCFvcmlnaW4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHJlbW90ZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3JpZ2luLnJlZnMuZmV0Y2g7XG4gIGlmICghcmVtb3RlVXJsKSB7XG4gICAgcmVtb3RlVXJsID0gb3JpZ2luLnJlZnMucHVzaDtcbiAgfVxuICBpZiAodHlwZW9mIHJlbW90ZVVybCA9PT0gJ3N0cmluZycgJiYgcmVtb3RlVXJsLmluY2x1ZGVzKCdnaXRodWIuY29tJykpIHtcbiAgICBjb25zdCB3b3JkcyA9IHJlbW90ZVVybC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IG9yZyA9IHdvcmRzLmF0KC0yKTtcbiAgICBjb25zdCBuYW1lID0gd29yZHMuYXQoLTEpPy5yZXBsYWNlKC8uZ2l0JC8sICcnKTtcbiAgICBpZiAob3JnICYmIG5hbWUpIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7b3JnfS8ke25hbWV9L2NvbW1pdHNgO1xuICB9XG59XG4iXSwibmFtZXMiOlsibG9nZ2VyIiwicGlubyIsInRyYW5zcG9ydCIsInRhcmdldCIsIm9wdGlvbnMiLCJjb2xvcml6ZSIsInN5bmNEaXJQYXRoIiwicGF0aCIsImpvaW4iLCJ5YXJnc09wdGlvbnMiLCJkZXN0IiwidHlwZSIsImFsaWFzIiwiZGVzY3JpYmUiLCJkZW1hbmQiLCJwcmVmaXgiLCJicmFuY2giLCJ0YWciLCJkZWZhdWx0IiwiZHJ5IiwiZm9yY2UiLCJ2ZXJib3NlIiwiYXJndiIsInlhcmdzIiwiaGlkZUJpbiIsInByb2Nlc3MiLCJzY3JpcHROYW1lIiwibWlkZGxld2FyZSIsImxldmVsIiwic3RyaWN0IiwidmVyc2lvbiIsInBhY2thZ2VKc29uRGlyIiwiZGlybmFtZSIsIlVSTCIsInVybCIsInBhdGhuYW1lIiwiZnMiLCJleGlzdHNTeW5jIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGVTeW5jIiwiZ2V0VmVyc2lvbiIsImhlbHAiLCJhc3luYyIsIm9wdHMiLCJta2RpciIsInJlY3Vyc2l2ZSIsImRpclBhdGgiLCJta2R0ZW1wIiwicmV0IiwiZGVzdFJlcG9QYXRoIiwic3JjUmVwb1BhdGgiLCJjd2QiLCJjbG9uZU9wdHMiLCJzaW1wbGVHaXQiLCJjbG9uZSIsImNoZWNrb3V0IiwiZGVidWciLCJkc3RHaXQiLCJjb21taXRIYXNoUmVzdWx0IiwibG9nUmVzdWx0IiwiYWxsIiwibGVuZ3RoIiwibG9nIiwiaGVhZCIsIndvcmRzIiwibWVzc2FnZSIsInJlcGxhY2VBbGwiLCJzcGxpdCIsImF0IiwiZmlyc3RMb2ciLCJleHRyYWN0Q29tbWl0SGFzaCIsImZyb20iLCJlcnJvciIsInNyY0dpdCIsInNyY0xvZyIsInRvIiwidW5kZWZpbmVkIiwic3RhY2siLCJsYXRlc3RIYXNoIiwibGF0ZXN0IiwiaGFzaCIsImluZm8iLCJpZ25vcmVQYXR0ZXJucyIsIlNldCIsIm1hcCIsIlN0cmluZyIsImRlc3RGaWxlcyIsInNyY0ZpbGVzIiwiUHJvbWlzZSIsInJlYWRkaXIiLCJtaWNyb21hdGNoIiwibm90IiwiZGVzdEZpbGUiLCJybSIsInNyY0ZpbGUiLCJjb3B5IiwiYWRkIiwic3JjVGFnIiwiZGVzY3JpYmVDb21tYW5kIiwiY2hpbGRfcHJvY2VzcyIsImV4ZWNTeW5jIiwidG9TdHJpbmciLCJ0cmltIiwiZ2l0Iiwib3JpZ2luIiwiZ2V0UmVtb3RlcyIsImZpbmQiLCJyIiwibmFtZSIsInJlbW90ZVVybCIsInJlZnMiLCJmZXRjaCIsInB1c2giLCJpbmNsdWRlcyIsIm9yZyIsInJlcGxhY2UiLCJnZXRHaXRIdWJDb21taXRzVXJsIiwiZW5kc1dpdGgiLCJsaW5rIiwidGl0bGUiLCJib2R5IiwibCIsImNvbW1pdCIsImRlc3RUYWciLCJhZGRUYWci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
1
+ import e from"node:fs";import t from"node:path";import{hideBin as o}from"yargs/helpers";import i from"yargs/yargs";import{pino as r}from"pino";import a from"node:child_process";import n from"node:fs/promises";import{copy as s}from"fs-extra";import c from"micromatch";import{simpleGit as d}from"simple-git";const l=r({transport:{target:"pino-pretty",options:{colorize:!0}}});const m=t.join("node_modules",".temp","sync-git-repo");const g={dest:{type:"string",alias:"d",describe:"A URL of a destination git repository.",demand:!0},prefix:{type:"string",alias:"p",describe:"A prefix of a commit hash used to generate a commit title, e.g. 'sync <prefix>/<hash>'.\n A typical value is like 'https://github.com/WillBooster/one-way-git-sync/commits'"},branch:{type:"string",alias:"b",describe:"Specify branch of destination repo."},tag:{type:"string",alias:"t",describe:"Specify tag to be created in destination repo."},"tag-hash":{type:"boolean",describe:"Create version+hash tag (e.g. v1.31.5-2-gcdde507). It should be a unique tag."},"tag-version":{type:"boolean",describe:"Create version tag (e.g. v1.31.5). It could be a non-unique tag."},"ignore-patterns":{type:"array",alias:"i",describe:"Exclude the files whose path matches one of the given patterns.\n The patterns are processed by micromatch (https://github.com/micromatch/micromatch).\n You may specify the option multiple times. Default value is \"-i .git -i .github -i node_modules -i '.renovaterc.*' -i '.renovate.*'\"",default:[".git",".github","node_modules",".renovaterc.*","renovate.*"]},dry:{type:"boolean",describe:"Enable dry-run mode."},force:{type:"boolean",describe:"Force to overwrite the destination git repository."},verbose:{type:"boolean",alias:"v",describe:"Show details logs."}},p=await i(o(process.argv)).scriptName("one-way-git-sync").options(g).middleware(e=>{l.level=e.verbose?"trace":"info"}).strict().version(function(){let o=t.dirname(new URL(import.meta.url).pathname);for(;!e.existsSync(t.join(o,"package.json"));)o=t.dirname(o);return JSON.parse(e.readFileSync(t.join(o,"package.json"),"utf8")).version}()).help().argv;await async function(e){await n.mkdir(m,{recursive:!0});const o=await n.mkdtemp(t.join(m,"repo-")),i=await async function(e,o,i=process.cwd()){const r={"--single-branch":null};o.force||(r["--depth"]=1);o.branch&&(r["--branch"]=o.branch);try{await d(i).clone(o.dest,e,r)}catch{delete r["--branch"],delete r["--single-branch"],await d(i).clone(o.dest,e,r),await d(e).checkout(["-b",o.branch])}l.debug(`Cloned destination repo on ${e}`);const m=d(e);let g=[];try{g=function(e){if(0===e.all.length)return l.debug("No commit history"),[];for(const t of e.all){const[e,...o]=t.message.replaceAll(/[()]/g,"").split(/[\s/]/);if("sync"===e&&o.length>0)return[t.message,o.at(-1)]}const[t]=e.all;t&&l.debug(`No sync commit: ${t.message}`);return[]}(await m.log())}catch{}const[p,h]=g;let u=h;if(h)l.debug(`Extracted a valid commit: ${h}`),l.debug(`(${p})`);else if(!o.force)return l.error("No valid commit in destination repo"),!1;const f=d(i);let b;try{b=await f.log(u?{from:u,to:"HEAD","--first-parent":void 0}:void 0)}catch(e){if(!o.force)return l.error(`Failed to get source commit history: ${e.stack}`),!1;l.warn(`Failed to get source commit history from ${h}; falling back to full sync`),b=await f.log(),u=void 0}const y=b.latest?.hash;if(!y)return l.info("No synchronizable commit"),!0;const w=[...new Set([...o["ignore-patterns"].map(String),".git"])];let[v,$]=await Promise.all([n.readdir(e),n.readdir(i)]);v=c.not(v,w),$=c.not($,w),l.debug("destFiles: %o",v),l.debug("srcFiles: %o",$);for(const o of v)await n.rm(t.join(e,o),{recursive:!0,force:!0});for(const o of $)await s(t.join(i,o),t.join(e,o));await m.add("-A");let j="";if(o["tag-hash"]||o["tag-version"]){const e="git describe --tags --always "+(o["tag-version"]?"--abbrev=0":"");j=a.execSync(e,{cwd:i}).toString().trim()}let k=o.prefix??await async function(e){const t=(await e.getRemotes(!0)).find(e=>"origin"===e.name);if(!t)return;let o=t.refs.fetch;if(o||(o=t.refs.push),"string"==typeof o&&o.includes("github.com")){const e=o.split("/"),t=e.at(-2),i=e.at(-1)?.replace(/.git$/,"");if(t&&i)return`https://github.com/${t}/${i}/commits`}}(f)??"";k&&!k.endsWith("/")&&(k+="/");const x=`${k}${y}`,F=j?`sync ${j} (${x})`:`sync ${x}`,S=u?b.all.map(e=>`* ${e.message}`).join("\n\n"):`Replace all the files with those of ${o.dest} due to missing sync commit.`;try{const e=await m.commit(`${F}\n\n${S}`);l.debug("Created a commit: %o",e),l.debug(F),l.debug(` with body: ${S}`)}catch(e){return l.error(`Failed to commit changes: ${e.stack}`),!1}const A=j||o.tag;if(A)try{await m.addTag(A),l.debug(`Created a tag: ${A}`)}catch{l.warn(`Failed to create a tag: ${A}`)}if(o.dry)return l.debug("Finished dry run"),!0;try{await(o.branch?m.push("origin",o.branch):m.push()),A&&await m.push({"--tags":null})}catch(e){return l.error(`Failed to push the commit: ${e.stack}`),!1}return l.debug("Pushed the commit"),!0}(o,e);process.exit(i?0:1)}(p);
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2dnZXIudHMiLCIuLi9zcmMvc3luYy50cyIsIi4uL3NyYy95YXJnc09wdGlvbnMudHMiLCIuLi9zcmMvaW5kZXgudHMiLCIuLi9zcmMvZ2l0SHViLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBpbm8gfSBmcm9tICdwaW5vJztcblxuZXhwb3J0IGNvbnN0IGxvZ2dlciA9IHBpbm8oe1xuICB0cmFuc3BvcnQ6IHtcbiAgICB0YXJnZXQ6ICdwaW5vLXByZXR0eScsXG4gICAgb3B0aW9uczoge1xuICAgICAgY29sb3JpemU6IHRydWUsXG4gICAgfSxcbiAgfSxcbn0pO1xuIiwiaW1wb3J0IGNoaWxkX3Byb2Nlc3MgZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBmcyBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGNvcHkgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgbWljcm9tYXRjaCBmcm9tICdtaWNyb21hdGNoJztcbmltcG9ydCB0eXBlIHsgTG9nUmVzdWx0LCBPcHRpb25zLCBTaW1wbGVHaXQsIFRhc2tPcHRpb25zIH0gZnJvbSAnc2ltcGxlLWdpdCc7XG5pbXBvcnQgeyBzaW1wbGVHaXQgfSBmcm9tICdzaW1wbGUtZ2l0JztcbmltcG9ydCB0eXBlIHsgSW5mZXJyZWRPcHRpb25UeXBlcyB9IGZyb20gJ3lhcmdzJztcblxuaW1wb3J0IHsgZ2V0R2l0SHViQ29tbWl0c1VybCB9IGZyb20gJy4vZ2l0SHViLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgeWFyZ3NPcHRpb25zIH0gZnJvbSAnLi95YXJnc09wdGlvbnMuanMnO1xuXG5jb25zdCBzeW5jRGlyUGF0aCA9IHBhdGguam9pbignbm9kZV9tb2R1bGVzJywgJy50ZW1wJywgJ3N5bmMtZ2l0LXJlcG8nKTtcblxuZXhwb3J0IHR5cGUgWWFyZ3NPcHRpb25zID0gSW5mZXJyZWRPcHRpb25UeXBlczx0eXBlb2YgeWFyZ3NPcHRpb25zPjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN5bmMob3B0czogWWFyZ3NPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGZzLm1rZGlyKHN5bmNEaXJQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgZGlyUGF0aCA9IGF3YWl0IGZzLm1rZHRlbXAocGF0aC5qb2luKHN5bmNEaXJQYXRoLCAncmVwby0nKSk7XG4gIGNvbnN0IHJldCA9IGF3YWl0IHN5bmNDb3JlKGRpclBhdGgsIG9wdHMpO1xuICAvLyBhd2FpdCBmcy5ybShkaXJQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIHByb2Nlc3MuZXhpdChyZXQgPyAwIDogMSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzeW5jQ29yZShcbiAgZGVzdFJlcG9QYXRoOiBzdHJpbmcsXG4gIG9wdHM6IFlhcmdzT3B0aW9ucyxcbiAgc3JjUmVwb1BhdGggPSBwcm9jZXNzLmN3ZCgpXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tbnVsbFxuICBjb25zdCBjbG9uZU9wdHM6IE9wdGlvbnMgPSB7ICctLXNpbmdsZS1icmFuY2gnOiBudWxsIH07XG4gIGlmICghb3B0cy5mb3JjZSkge1xuICAgIGNsb25lT3B0c1snLS1kZXB0aCddID0gMTtcbiAgfVxuICBpZiAob3B0cy5icmFuY2gpIHtcbiAgICBjbG9uZU9wdHNbJy0tYnJhbmNoJ10gPSBvcHRzLmJyYW5jaDtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IHNpbXBsZUdpdChzcmNSZXBvUGF0aCkuY2xvbmUob3B0cy5kZXN0LCBkZXN0UmVwb1BhdGgsIGNsb25lT3B0cyk7XG4gIH0gY2F0Y2gge1xuICAgIGRlbGV0ZSBjbG9uZU9wdHNbJy0tYnJhbmNoJ107XG4gICAgZGVsZXRlIGNsb25lT3B0c1snLS1zaW5nbGUtYnJhbmNoJ107XG4gICAgYXdhaXQgc2ltcGxlR2l0KHNyY1JlcG9QYXRoKS5jbG9uZShvcHRzLmRlc3QsIGRlc3RSZXBvUGF0aCwgY2xvbmVPcHRzKTtcbiAgICBhd2FpdCBzaW1wbGVHaXQoZGVzdFJlcG9QYXRoKS5jaGVja291dChbJy1iJywgb3B0cy5icmFuY2hdIGFzIFRhc2tPcHRpb25zKTtcbiAgfVxuICBsb2dnZXIuZGVidWcoYENsb25lZCBkZXN0aW5hdGlvbiByZXBvIG9uICR7ZGVzdFJlcG9QYXRofWApO1xuXG4gIGNvbnN0IGRzdEdpdDogU2ltcGxlR2l0ID0gc2ltcGxlR2l0KGRlc3RSZXBvUGF0aCk7XG4gIGxldCBjb21taXRIYXNoUmVzdWx0OiBbc3RyaW5nLCBzdHJpbmddIHwgW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCBkc3RMb2cgPSBhd2FpdCBkc3RHaXQubG9nKCk7XG4gICAgY29tbWl0SGFzaFJlc3VsdCA9IGV4dHJhY3RDb21taXRIYXNoKGRzdExvZyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuICBjb25zdCBbaGVhZCwgZnJvbV0gPSBjb21taXRIYXNoUmVzdWx0O1xuICBsZXQgbG9nRnJvbSA9IGZyb207XG4gIGlmIChmcm9tKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBFeHRyYWN0ZWQgYSB2YWxpZCBjb21taXQ6ICR7ZnJvbX1gKTtcbiAgICBsb2dnZXIuZGVidWcoYCgke2hlYWR9KWApO1xuICB9IGVsc2UgaWYgKCFvcHRzLmZvcmNlKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdObyB2YWxpZCBjb21taXQgaW4gZGVzdGluYXRpb24gcmVwbycpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHNyY0dpdDogU2ltcGxlR2l0ID0gc2ltcGxlR2l0KHNyY1JlcG9QYXRoKTtcbiAgbGV0IHNyY0xvZzogTG9nUmVzdWx0O1xuICB0cnkge1xuICAgIC8vICctLWZpcnN0LXBhcmVudCcgaGlkZXMgY2hpbGRyZW4gY29tbWl0cyBvZiBtZXJnZSBjb21taXRzXG4gICAgc3JjTG9nID0gYXdhaXQgc3JjR2l0LmxvZyhsb2dGcm9tID8geyBmcm9tOiBsb2dGcm9tLCB0bzogJ0hFQUQnLCAnLS1maXJzdC1wYXJlbnQnOiB1bmRlZmluZWQgfSA6IHVuZGVmaW5lZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKG9wdHMuZm9yY2UpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gZ2V0IHNvdXJjZSBjb21taXQgaGlzdG9yeSBmcm9tICR7ZnJvbX07IGZhbGxpbmcgYmFjayB0byBmdWxsIHN5bmNgKTtcbiAgICAgIHNyY0xvZyA9IGF3YWl0IHNyY0dpdC5sb2coKTtcbiAgICAgIGxvZ0Zyb20gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGdldCBzb3VyY2UgY29tbWl0IGhpc3Rvcnk6ICR7KGVycm9yIGFzIEVycm9yKS5zdGFja31gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBsYXRlc3RIYXNoID0gc3JjTG9nLmxhdGVzdD8uaGFzaDtcbiAgaWYgKCFsYXRlc3RIYXNoKSB7XG4gICAgbG9nZ2VyLmluZm8oJ05vIHN5bmNocm9uaXphYmxlIGNvbW1pdCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gRm9yY2UgdG8gaWdub3JlIC5naXQgZGlyZWN0b3J5XG4gIGNvbnN0IGlnbm9yZVBhdHRlcm5zID0gWy4uLm5ldyBTZXQoWy4uLm9wdHNbJ2lnbm9yZS1wYXR0ZXJucyddLm1hcChTdHJpbmcpLCAnLmdpdCddKV07XG4gIGxldCBbZGVzdEZpbGVzLCBzcmNGaWxlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbZnMucmVhZGRpcihkZXN0UmVwb1BhdGgpLCBmcy5yZWFkZGlyKHNyY1JlcG9QYXRoKV0pO1xuICBkZXN0RmlsZXMgPSBtaWNyb21hdGNoLm5vdChkZXN0RmlsZXMsIGlnbm9yZVBhdHRlcm5zKTtcbiAgc3JjRmlsZXMgPSBtaWNyb21hdGNoLm5vdChzcmNGaWxlcywgaWdub3JlUGF0dGVybnMpO1xuICBsb2dnZXIuZGVidWcoJ2Rlc3RGaWxlczogJW8nLCBkZXN0RmlsZXMpO1xuICBsb2dnZXIuZGVidWcoJ3NyY0ZpbGVzOiAlbycsIHNyY0ZpbGVzKTtcbiAgZm9yIChjb25zdCBkZXN0RmlsZSBvZiBkZXN0RmlsZXMpIHtcbiAgICBhd2FpdCBmcy5ybShwYXRoLmpvaW4oZGVzdFJlcG9QYXRoLCBkZXN0RmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxuICBmb3IgKGNvbnN0IHNyY0ZpbGUgb2Ygc3JjRmlsZXMpIHtcbiAgICBhd2FpdCBjb3B5KHBhdGguam9pbihzcmNSZXBvUGF0aCwgc3JjRmlsZSksIHBhdGguam9pbihkZXN0UmVwb1BhdGgsIHNyY0ZpbGUpKTtcbiAgfVxuICBhd2FpdCBkc3RHaXQuYWRkKCctQScpO1xuXG4gIGxldCBzcmNUYWcgPSAnJztcbiAgaWYgKG9wdHNbJ3RhZy1oYXNoJ10gfHwgb3B0c1sndGFnLXZlcnNpb24nXSkge1xuICAgIC8vIGUuZy4gYC0tYWJicmV2PTBgIGNoYW5nZXMgYHYxLjMxLjUtMi1nY2RkZTUwN2AgdG8gYHYxLjMxLjVgXG4gICAgY29uc3QgZGVzY3JpYmVDb21tYW5kID0gYGdpdCBkZXNjcmliZSAtLXRhZ3MgLS1hbHdheXMgJHtvcHRzWyd0YWctdmVyc2lvbiddID8gJy0tYWJicmV2PTAnIDogJyd9YDtcbiAgICBzcmNUYWcgPSBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKGRlc2NyaWJlQ29tbWFuZCwgeyBjd2Q6IHNyY1JlcG9QYXRoIH0pLnRvU3RyaW5nKCkudHJpbSgpO1xuICB9XG4gIGxldCBwcmVmaXggPSBvcHRzLnByZWZpeCA/PyAoYXdhaXQgZ2V0R2l0SHViQ29tbWl0c1VybChzcmNHaXQpKSA/PyAnJztcbiAgaWYgKHByZWZpeCAmJiAhcHJlZml4LmVuZHNXaXRoKCcvJykpIHtcbiAgICBwcmVmaXggKz0gJy8nO1xuICB9XG4gIGNvbnN0IGxpbmsgPSBgJHtwcmVmaXh9JHtsYXRlc3RIYXNofWA7XG4gIGNvbnN0IHRpdGxlID0gc3JjVGFnID8gYHN5bmMgJHtzcmNUYWd9ICgke2xpbmt9KWAgOiBgc3luYyAke2xpbmt9YDtcbiAgY29uc3QgYm9keSA9IGxvZ0Zyb21cbiAgICA/IHNyY0xvZy5hbGwubWFwKChsKSA9PiBgKiAke2wubWVzc2FnZX1gKS5qb2luKCdcXG5cXG4nKVxuICAgIDogYFJlcGxhY2UgYWxsIHRoZSBmaWxlcyB3aXRoIHRob3NlIG9mICR7b3B0cy5kZXN0fSBkdWUgdG8gbWlzc2luZyBzeW5jIGNvbW1pdC5gO1xuICB0cnkge1xuICAgIGNvbnN0IHJldCA9IGF3YWl0IGRzdEdpdC5jb21taXQoYCR7dGl0bGV9XFxuXFxuJHtib2R5fWApO1xuICAgIGxvZ2dlci5kZWJ1ZyhgQ3JlYXRlZCBhIGNvbW1pdDogJW9gLCByZXQpO1xuICAgIGxvZ2dlci5kZWJ1Zyh0aXRsZSk7XG4gICAgbG9nZ2VyLmRlYnVnKGAgIHdpdGggYm9keTogJHtib2R5fWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNvbW1pdCBjaGFuZ2VzOiAkeyhlcnJvciBhcyBFcnJvcikuc3RhY2t9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGVzdFRhZyA9IHNyY1RhZyB8fCBvcHRzLnRhZztcbiAgaWYgKGRlc3RUYWcpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZHN0R2l0LmFkZFRhZyhkZXN0VGFnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ3JlYXRlZCBhIHRhZzogJHtkZXN0VGFnfWApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JlIHRoZSBlcnJvciBzaW5jZSBgLS1hYmJyZXY9MGAgbWF5IHlpZWxkIGEgdGFnIHRoYXQgYWxyZWFkeSBleGlzdHNcbiAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gY3JlYXRlIGEgdGFnOiAke2Rlc3RUYWd9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMuZHJ5KSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdGaW5pc2hlZCBkcnkgcnVuJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IChvcHRzLmJyYW5jaCA/IGRzdEdpdC5wdXNoKCdvcmlnaW4nLCBvcHRzLmJyYW5jaCkgOiBkc3RHaXQucHVzaCgpKTtcbiAgICBpZiAoZGVzdFRhZykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tbnVsbFxuICAgICAgYXdhaXQgZHN0R2l0LnB1c2goeyAnLS10YWdzJzogbnVsbCB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gcHVzaCB0aGUgY29tbWl0OiAkeyhlcnJvciBhcyBFcnJvcikuc3RhY2t9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKCdQdXNoZWQgdGhlIGNvbW1pdCcpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdENvbW1pdEhhc2gobG9nUmVzdWx0OiBMb2dSZXN1bHQpOiBbc3RyaW5nLCBzdHJpbmddIHwgW10ge1xuICBpZiAobG9nUmVzdWx0LmFsbC5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIuZGVidWcoJ05vIGNvbW1pdCBoaXN0b3J5Jyk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZm9yIChjb25zdCBsb2cgb2YgbG9nUmVzdWx0LmFsbCkge1xuICAgIGNvbnN0IFtoZWFkLCAuLi53b3Jkc10gPSBsb2cubWVzc2FnZS5yZXBsYWNlQWxsKC9bKCldL2csICcnKS5zcGxpdCgvW1xccy9dLyk7XG4gICAgaWYgKGhlYWQgPT09ICdzeW5jJyAmJiB3b3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gW2xvZy5tZXNzYWdlLCB3b3Jkcy5hdCgtMSkgYXMgc3RyaW5nXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW2ZpcnN0TG9nXSA9IGxvZ1Jlc3VsdC5hbGw7XG4gIGlmIChmaXJzdExvZykge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gc3luYyBjb21taXQ6ICR7Zmlyc3RMb2cubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gW107XG59XG4iLCJleHBvcnQgY29uc3QgeWFyZ3NPcHRpb25zID0ge1xuICBkZXN0OiB7XG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgYWxpYXM6ICdkJyxcbiAgICBkZXNjcmliZTogJ0EgVVJMIG9mIGEgZGVzdGluYXRpb24gZ2l0IHJlcG9zaXRvcnkuJyxcbiAgICBkZW1hbmQ6IHRydWUsXG4gIH0sXG4gIHByZWZpeDoge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGFsaWFzOiAncCcsXG4gICAgZGVzY3JpYmU6IGBBIHByZWZpeCBvZiBhIGNvbW1pdCBoYXNoIHVzZWQgdG8gZ2VuZXJhdGUgYSBjb21taXQgdGl0bGUsIGUuZy4gJ3N5bmMgPHByZWZpeD4vPGhhc2g+Jy5cbiAgICAgICAgICAgICAgIEEgdHlwaWNhbCB2YWx1ZSBpcyBsaWtlICdodHRwczovL2dpdGh1Yi5jb20vV2lsbEJvb3N0ZXIvb25lLXdheS1naXQtc3luYy9jb21taXRzJ2AsXG4gIH0sXG4gIGJyYW5jaDoge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGFsaWFzOiAnYicsXG4gICAgZGVzY3JpYmU6ICdTcGVjaWZ5IGJyYW5jaCBvZiBkZXN0aW5hdGlvbiByZXBvLicsXG4gIH0sXG4gIHRhZzoge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGFsaWFzOiAndCcsXG4gICAgZGVzY3JpYmU6ICdTcGVjaWZ5IHRhZyB0byBiZSBjcmVhdGVkIGluIGRlc3RpbmF0aW9uIHJlcG8uJyxcbiAgfSxcbiAgJ3RhZy1oYXNoJzoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZXNjcmliZTogJ0NyZWF0ZSB2ZXJzaW9uK2hhc2ggdGFnIChlLmcuIHYxLjMxLjUtMi1nY2RkZTUwNykuIEl0IHNob3VsZCBiZSBhIHVuaXF1ZSB0YWcuJyxcbiAgfSxcbiAgJ3RhZy12ZXJzaW9uJzoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZXNjcmliZTogJ0NyZWF0ZSB2ZXJzaW9uIHRhZyAoZS5nLiB2MS4zMS41KS4gSXQgY291bGQgYmUgYSBub24tdW5pcXVlIHRhZy4nLFxuICB9LFxuICAnaWdub3JlLXBhdHRlcm5zJzoge1xuICAgIHR5cGU6ICdhcnJheScsXG4gICAgYWxpYXM6ICdpJyxcbiAgICBkZXNjcmliZTogYEV4Y2x1ZGUgdGhlIGZpbGVzIHdob3NlIHBhdGggbWF0Y2hlcyBvbmUgb2YgdGhlIGdpdmVuIHBhdHRlcm5zLlxuICAgICAgICAgICAgICAgVGhlIHBhdHRlcm5zIGFyZSBwcm9jZXNzZWQgYnkgbWljcm9tYXRjaCAoaHR0cHM6Ly9naXRodWIuY29tL21pY3JvbWF0Y2gvbWljcm9tYXRjaCkuXG4gICAgICAgICAgICAgICBZb3UgbWF5IHNwZWNpZnkgdGhlIG9wdGlvbiBtdWx0aXBsZSB0aW1lcy4gRGVmYXVsdCB2YWx1ZSBpcyBcIi1pIC5naXQgLWkgLmdpdGh1YiAtaSBub2RlX21vZHVsZXMgLWkgJy5yZW5vdmF0ZXJjLionIC1pICcucmVub3ZhdGUuKidcImAsXG4gICAgZGVmYXVsdDogWycuZ2l0JywgJy5naXRodWInLCAnbm9kZV9tb2R1bGVzJywgJy5yZW5vdmF0ZXJjLionLCAncmVub3ZhdGUuKiddLFxuICB9LFxuICBkcnk6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVzY3JpYmU6ICdFbmFibGUgZHJ5LXJ1biBtb2RlLicsXG4gIH0sXG4gIGZvcmNlOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlc2NyaWJlOiAnRm9yY2UgdG8gb3ZlcndyaXRlIHRoZSBkZXN0aW5hdGlvbiBnaXQgcmVwb3NpdG9yeS4nLFxuICB9LFxuICB2ZXJib3NlOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGFsaWFzOiAndicsXG4gICAgZGVzY3JpYmU6ICdTaG93IGRldGFpbHMgbG9ncy4nLFxuICB9LFxufSBhcyBjb25zdDtcbiIsImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGhpZGVCaW4gfSBmcm9tICd5YXJncy9oZWxwZXJzJztcbmltcG9ydCB5YXJncyBmcm9tICd5YXJncy95YXJncyc7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IHN5bmMgfSBmcm9tICcuL3N5bmMuanMnO1xuaW1wb3J0IHsgeWFyZ3NPcHRpb25zIH0gZnJvbSAnLi95YXJnc09wdGlvbnMuanMnO1xuXG5jb25zdCBhcmd2ID0gYXdhaXQgeWFyZ3MoaGlkZUJpbihwcm9jZXNzLmFyZ3YpKVxuICAuc2NyaXB0TmFtZSgnb25lLXdheS1naXQtc3luYycpXG4gIC5vcHRpb25zKHlhcmdzT3B0aW9ucylcbiAgLm1pZGRsZXdhcmUoKGFyZ3YpID0+IHtcbiAgICBsb2dnZXIubGV2ZWwgPSBhcmd2LnZlcmJvc2UgPyAndHJhY2UnIDogJ2luZm8nO1xuICB9KVxuICAuc3RyaWN0KClcbiAgLnZlcnNpb24oZ2V0VmVyc2lvbigpKVxuICAuaGVscCgpLmFyZ3Y7XG5cbmZ1bmN0aW9uIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgbGV0IHBhY2thZ2VKc29uRGlyID0gcGF0aC5kaXJuYW1lKG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZSk7XG4gIHdoaWxlICghZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocGFja2FnZUpzb25EaXIsICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICBwYWNrYWdlSnNvbkRpciA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvbkRpcik7XG4gIH1cbiAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocGFja2FnZUpzb25EaXIsICdwYWNrYWdlLmpzb24nKSwgJ3V0ZjgnKSkgYXMge1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgfTtcbiAgcmV0dXJuIHBhY2thZ2VKc29uLnZlcnNpb247XG59XG5cbmF3YWl0IHN5bmMoYXJndik7XG4iLCJpbXBvcnQgdHlwZSB7IFNpbXBsZUdpdCB9IGZyb20gJ3NpbXBsZS1naXQnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0R2l0SHViQ29tbWl0c1VybChnaXQ6IFNpbXBsZUdpdCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHJlbW90ZXMgPSBhd2FpdCBnaXQuZ2V0UmVtb3Rlcyh0cnVlKTtcbiAgY29uc3Qgb3JpZ2luID0gcmVtb3Rlcy5maW5kKChyKSA9PiByLm5hbWUgPT09ICdvcmlnaW4nKTtcbiAgaWYgKCFvcmlnaW4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHJlbW90ZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3JpZ2luLnJlZnMuZmV0Y2g7XG4gIGlmICghcmVtb3RlVXJsKSB7XG4gICAgcmVtb3RlVXJsID0gb3JpZ2luLnJlZnMucHVzaDtcbiAgfVxuICBpZiAodHlwZW9mIHJlbW90ZVVybCA9PT0gJ3N0cmluZycgJiYgcmVtb3RlVXJsLmluY2x1ZGVzKCdnaXRodWIuY29tJykpIHtcbiAgICBjb25zdCB3b3JkcyA9IHJlbW90ZVVybC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IG9yZyA9IHdvcmRzLmF0KC0yKTtcbiAgICBjb25zdCBuYW1lID0gd29yZHMuYXQoLTEpPy5yZXBsYWNlKC8uZ2l0JC8sICcnKTtcbiAgICBpZiAob3JnICYmIG5hbWUpIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7b3JnfS8ke25hbWV9L2NvbW1pdHNgO1xuICB9XG59XG4iXSwibmFtZXMiOlsibG9nZ2VyIiwicGlubyIsInRyYW5zcG9ydCIsInRhcmdldCIsIm9wdGlvbnMiLCJjb2xvcml6ZSIsInN5bmNEaXJQYXRoIiwicGF0aCIsImpvaW4iLCJ5YXJnc09wdGlvbnMiLCJkZXN0IiwidHlwZSIsImFsaWFzIiwiZGVzY3JpYmUiLCJkZW1hbmQiLCJwcmVmaXgiLCJicmFuY2giLCJ0YWciLCJkZWZhdWx0IiwiZHJ5IiwiZm9yY2UiLCJ2ZXJib3NlIiwiYXJndiIsInlhcmdzIiwiaGlkZUJpbiIsInByb2Nlc3MiLCJzY3JpcHROYW1lIiwibWlkZGxld2FyZSIsImxldmVsIiwic3RyaWN0IiwidmVyc2lvbiIsInBhY2thZ2VKc29uRGlyIiwiZGlybmFtZSIsIlVSTCIsInVybCIsInBhdGhuYW1lIiwiZnMiLCJleGlzdHNTeW5jIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGVTeW5jIiwiZ2V0VmVyc2lvbiIsImhlbHAiLCJhc3luYyIsIm9wdHMiLCJta2RpciIsInJlY3Vyc2l2ZSIsImRpclBhdGgiLCJta2R0ZW1wIiwicmV0IiwiZGVzdFJlcG9QYXRoIiwic3JjUmVwb1BhdGgiLCJjd2QiLCJjbG9uZU9wdHMiLCJzaW1wbGVHaXQiLCJjbG9uZSIsImNoZWNrb3V0IiwiZGVidWciLCJkc3RHaXQiLCJjb21taXRIYXNoUmVzdWx0IiwibG9nUmVzdWx0IiwiYWxsIiwibGVuZ3RoIiwibG9nIiwiaGVhZCIsIndvcmRzIiwibWVzc2FnZSIsInJlcGxhY2VBbGwiLCJzcGxpdCIsImF0IiwiZmlyc3RMb2ciLCJleHRyYWN0Q29tbWl0SGFzaCIsImZyb20iLCJsb2dGcm9tIiwiZXJyb3IiLCJzcmNHaXQiLCJzcmNMb2ciLCJ0byIsInVuZGVmaW5lZCIsInN0YWNrIiwid2FybiIsImxhdGVzdEhhc2giLCJsYXRlc3QiLCJoYXNoIiwiaW5mbyIsImlnbm9yZVBhdHRlcm5zIiwiU2V0IiwibWFwIiwiU3RyaW5nIiwiZGVzdEZpbGVzIiwic3JjRmlsZXMiLCJQcm9taXNlIiwicmVhZGRpciIsIm1pY3JvbWF0Y2giLCJub3QiLCJkZXN0RmlsZSIsInJtIiwic3JjRmlsZSIsImNvcHkiLCJhZGQiLCJzcmNUYWciLCJkZXNjcmliZUNvbW1hbmQiLCJjaGlsZF9wcm9jZXNzIiwiZXhlY1N5bmMiLCJ0b1N0cmluZyIsInRyaW0iLCJnaXQiLCJvcmlnaW4iLCJnZXRSZW1vdGVzIiwiZmluZCIsInIiLCJuYW1lIiwicmVtb3RlVXJsIiwicmVmcyIsImZldGNoIiwicHVzaCIsImluY2x1ZGVzIiwib3JnIiwicmVwbGFjZSIsImdldEdpdEh1YkNvbW1pdHNVcmwiLCJlbmRzV2l0aCIsImxpbmsiLCJ0aXRsZSIsImJvZHkiLCJsIiwiY29tbWl0IiwiZGVzdFRhZyIsImFkZFRhZyIsInN5bmNDb3JlIiwiZXhpdCIsInN5bmMiXSwibWFwcGluZ3MiOiJrVEFFTyxNQUFNQSxFQUFTQyxFQUFLLENBQ3pCQyxVQUFXLENBQ1RDLE9BQVEsY0FDUkMsUUFBUyxDQUNQQyxVQUFVLE1DUWhCLE1BQU1DLEVBQWNDLEVBQUtDLEtBQUssZUFBZ0IsUUFBUyxpQkNkaEQsTUFBTUMsRUFBZSxDQUMxQkMsS0FBTSxDQUNKQyxLQUFNLFNBQ05DLE1BQU8sSUFDUEMsU0FBVSx5Q0FDVkMsUUFBUSxHQUVWQyxPQUFRLENBQ05KLEtBQU0sU0FDTkMsTUFBTyxJQUNQQyxTQUFVLDZMQUdaRyxPQUFRLENBQ05MLEtBQU0sU0FDTkMsTUFBTyxJQUNQQyxTQUFVLHVDQUVaSSxJQUFLLENBQ0hOLEtBQU0sU0FDTkMsTUFBTyxJQUNQQyxTQUFVLGtEQUVaLFdBQVksQ0FDVkYsS0FBTSxVQUNORSxTQUFVLGlGQUVaLGNBQWUsQ0FDYkYsS0FBTSxVQUNORSxTQUFVLG9FQUVaLGtCQUFtQixDQUNqQkYsS0FBTSxRQUNOQyxNQUFPLElBQ1BDLFNBQVUsOFRBR1ZLLFFBQVMsQ0FBQyxPQUFRLFVBQVcsZUFBZ0IsZ0JBQWlCLGVBRWhFQyxJQUFLLENBQ0hSLEtBQU0sVUFDTkUsU0FBVSx3QkFFWk8sTUFBTyxDQUNMVCxLQUFNLFVBQ05FLFNBQVUsc0RBRVpRLFFBQVMsQ0FDUFYsS0FBTSxVQUNOQyxNQUFPLElBQ1BDLFNBQVUsdUJDeENSUyxRQUFh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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "one-way-git-sync",
3
- "version": "6.0.39",
3
+ "version": "6.0.41",
4
4
  "description": "A tool for synchronizing a destination git repository with a source git repository SAFELY.",
5
5
  "keywords": [
6
6
  "git",
@@ -40,7 +40,7 @@
40
40
  "micromatch": "4.0.8",
41
41
  "pino": "10.3.1",
42
42
  "pino-pretty": "13.1.3",
43
- "simple-git": "3.32.3",
43
+ "simple-git": "3.35.2",
44
44
  "yargs": "18.0.0"
45
45
  },
46
46
  "devDependencies": {
@@ -48,32 +48,32 @@
48
48
  "@types/fs-extra": "11.0.4",
49
49
  "@types/micromatch": "4.0.10",
50
50
  "@types/yargs": "17.0.35",
51
- "@willbooster/eslint-config-ts": "11.4.12",
52
- "@willbooster/prettier-config": "10.2.4",
53
- "build-ts": "17.0.21",
54
- "conventional-changelog-conventionalcommits": "9.2.0",
51
+ "@willbooster/eslint-config-ts": "11.5.0",
52
+ "@willbooster/prettier-config": "10.3.0",
53
+ "build-ts": "17.0.26",
54
+ "conventional-changelog-conventionalcommits": "9.3.1",
55
55
  "eslint": "9.39.1",
56
- "eslint-config-flat-gitignore": "2.2.1",
56
+ "eslint-config-flat-gitignore": "2.3.0",
57
57
  "eslint-config-prettier": "10.1.8",
58
58
  "eslint-import-resolver-typescript": "4.4.4",
59
- "eslint-plugin-import-x": "4.16.1",
60
- "eslint-plugin-sort-class-members": "1.21.0",
59
+ "eslint-plugin-import-x": "4.16.2",
60
+ "eslint-plugin-sort-class-members": "1.22.1",
61
61
  "eslint-plugin-sort-destructure-keys": "3.0.0",
62
- "eslint-plugin-unicorn": "63.0.0",
62
+ "eslint-plugin-unicorn": "64.0.0",
63
63
  "eslint-plugin-unused-imports": "4.4.1",
64
64
  "globals": "17.4.0",
65
65
  "husky": "9.1.7",
66
- "lint-staged": "16.3.2",
66
+ "lint-staged": "16.4.0",
67
67
  "pinst": "3.0.0",
68
- "prettier": "3.8.1",
68
+ "prettier": "3.8.2",
69
69
  "prettier-plugin-java": "2.8.1",
70
70
  "semantic-release": "25.0.3",
71
71
  "sort-package-json": "3.6.1",
72
72
  "typescript": "5.9.3",
73
- "typescript-eslint": "8.56.1",
74
- "vitest": "4.0.18"
73
+ "typescript-eslint": "8.58.1",
74
+ "vitest": "4.1.2"
75
75
  },
76
- "packageManager": "yarn@4.12.0",
76
+ "packageManager": "yarn@4.13.0",
77
77
  "engines": {
78
78
  "node": ">=24"
79
79
  },