summaryrefslogtreecommitdiff
path: root/desktop/node_modules/dir-compare/build/src/statistics
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/node_modules/dir-compare/build/src/statistics')
-rw-r--r--desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.d.ts69
-rw-r--r--desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.d.ts.map1
-rw-r--r--desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.js65
-rw-r--r--desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.js.map1
-rw-r--r--desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.d.ts7
-rw-r--r--desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.d.ts.map1
-rw-r--r--desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.js84
-rw-r--r--desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.js.map1
8 files changed, 229 insertions, 0 deletions
diff --git a/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.d.ts b/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.d.ts
new file mode 100644
index 0000000..42f6c68
--- /dev/null
+++ b/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.d.ts
@@ -0,0 +1,69 @@
+export function initStats(options: any): {
+ distinct: number;
+ equal: number;
+ left: number;
+ right: number;
+ distinctFiles: number;
+ equalFiles: number;
+ leftFiles: number;
+ rightFiles: number;
+ distinctDirs: number;
+ equalDirs: number;
+ leftDirs: number;
+ rightDirs: number;
+ brokenLinks: {
+ leftBrokenLinks: number;
+ rightBrokenLinks: number;
+ distinctBrokenLinks: number;
+ };
+ symlinks: {
+ distinctSymlinks: number;
+ equalSymlinks: number;
+ leftSymlinks: number;
+ rightSymlinks: number;
+ differencesSymlinks: number;
+ totalSymlinks: number;
+ } | undefined;
+ permissionDenied: {
+ leftPermissionDenied: number;
+ rightPermissionDenied: number;
+ distinctPermissionDenied: number;
+ };
+ same: undefined;
+};
+export function initStats(options: any): {
+ distinct: number;
+ equal: number;
+ left: number;
+ right: number;
+ distinctFiles: number;
+ equalFiles: number;
+ leftFiles: number;
+ rightFiles: number;
+ distinctDirs: number;
+ equalDirs: number;
+ leftDirs: number;
+ rightDirs: number;
+ brokenLinks: {
+ leftBrokenLinks: number;
+ rightBrokenLinks: number;
+ distinctBrokenLinks: number;
+ };
+ symlinks: {
+ distinctSymlinks: number;
+ equalSymlinks: number;
+ leftSymlinks: number;
+ rightSymlinks: number;
+ differencesSymlinks: number;
+ totalSymlinks: number;
+ } | undefined;
+ permissionDenied: {
+ leftPermissionDenied: number;
+ rightPermissionDenied: number;
+ distinctPermissionDenied: number;
+ };
+ same: undefined;
+};
+export function completeStatistics(statistics: any, options: any): void;
+export function completeStatistics(statistics: any, options: any): void;
+//# sourceMappingURL=statisticsLifecycle.d.ts.map \ No newline at end of file
diff --git a/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.d.ts.map b/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.d.ts.map
new file mode 100644
index 0000000..ee8c1ae
--- /dev/null
+++ b/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"statisticsLifecycle.d.ts","sourceRoot":"","sources":["../../../src/statistics/statisticsLifecycle.js"],"names":[],"mappings":"AAII;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwCC;AAxCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwCC;AAED,wEAkBC;AAlBD,wEAkBC"} \ No newline at end of file
diff --git a/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.js b/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.js
new file mode 100644
index 0000000..b12843d
--- /dev/null
+++ b/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.js
@@ -0,0 +1,65 @@
+/**
+ * Controls creation/completion of global statistics object.
+ */
+module.exports = {
+ initStats(options) {
+ let symlinkStatistics = undefined;
+ if (options.compareSymlink) {
+ symlinkStatistics = {
+ distinctSymlinks: 0,
+ equalSymlinks: 0,
+ leftSymlinks: 0,
+ rightSymlinks: 0,
+ differencesSymlinks: 0,
+ totalSymlinks: 0,
+ };
+ }
+ const brokenLinksStatistics = {
+ leftBrokenLinks: 0,
+ rightBrokenLinks: 0,
+ distinctBrokenLinks: 0,
+ };
+ const permissionDeniedStatistics = {
+ leftPermissionDenied: 0,
+ rightPermissionDenied: 0,
+ distinctPermissionDenied: 0,
+ };
+ return {
+ distinct: 0,
+ equal: 0,
+ left: 0,
+ right: 0,
+ distinctFiles: 0,
+ equalFiles: 0,
+ leftFiles: 0,
+ rightFiles: 0,
+ distinctDirs: 0,
+ equalDirs: 0,
+ leftDirs: 0,
+ rightDirs: 0,
+ brokenLinks: brokenLinksStatistics,
+ symlinks: symlinkStatistics,
+ permissionDenied: permissionDeniedStatistics,
+ same: undefined
+ };
+ },
+ completeStatistics(statistics, options) {
+ statistics.differences = statistics.distinct + statistics.left + statistics.right;
+ statistics.differencesFiles = statistics.distinctFiles + statistics.leftFiles + statistics.rightFiles;
+ statistics.differencesDirs = statistics.distinctDirs + statistics.leftDirs + statistics.rightDirs;
+ statistics.total = statistics.equal + statistics.differences;
+ statistics.totalFiles = statistics.equalFiles + statistics.differencesFiles;
+ statistics.totalDirs = statistics.equalDirs + statistics.differencesDirs;
+ const brokenLInksStats = statistics.brokenLinks;
+ brokenLInksStats.totalBrokenLinks = brokenLInksStats.leftBrokenLinks + brokenLInksStats.rightBrokenLinks + brokenLInksStats.distinctBrokenLinks;
+ const permissionDeniedStats = statistics.permissionDenied;
+ permissionDeniedStats.totalPermissionDenied = permissionDeniedStats.leftPermissionDenied + permissionDeniedStats.rightPermissionDenied + permissionDeniedStats.distinctPermissionDenied;
+ statistics.same = statistics.differences ? false : true;
+ if (options.compareSymlink) {
+ statistics.symlinks.differencesSymlinks = statistics.symlinks.distinctSymlinks +
+ statistics.symlinks.leftSymlinks + statistics.symlinks.rightSymlinks;
+ statistics.symlinks.totalSymlinks = statistics.symlinks.differencesSymlinks + statistics.symlinks.equalSymlinks;
+ }
+ }
+};
+//# sourceMappingURL=statisticsLifecycle.js.map \ No newline at end of file
diff --git a/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.js.map b/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.js.map
new file mode 100644
index 0000000..4e46f81
--- /dev/null
+++ b/desktop/node_modules/dir-compare/build/src/statistics/statisticsLifecycle.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"statisticsLifecycle.js","sourceRoot":"","sources":["../../../src/statistics/statisticsLifecycle.js"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.d.ts b/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.d.ts
new file mode 100644
index 0000000..66e85c3
--- /dev/null
+++ b/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.d.ts
@@ -0,0 +1,7 @@
+export function updateStatisticsBoth(entry1: any, entry2: any, same: any, reason: any, type: any, permissionDeniedState: any, statistics: any, options: any): void;
+export function updateStatisticsBoth(entry1: any, entry2: any, same: any, reason: any, type: any, permissionDeniedState: any, statistics: any, options: any): void;
+export function updateStatisticsLeft(entry1: any, type: any, permissionDeniedState: any, statistics: any, options: any): void;
+export function updateStatisticsLeft(entry1: any, type: any, permissionDeniedState: any, statistics: any, options: any): void;
+export function updateStatisticsRight(entry2: any, type: any, permissionDeniedState: any, statistics: any, options: any): void;
+export function updateStatisticsRight(entry2: any, type: any, permissionDeniedState: any, statistics: any, options: any): void;
+//# sourceMappingURL=statisticsUpdate.d.ts.map \ No newline at end of file
diff --git a/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.d.ts.map b/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.d.ts.map
new file mode 100644
index 0000000..4d5c89e
--- /dev/null
+++ b/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"statisticsUpdate.d.ts","sourceRoot":"","sources":["../../../src/statistics/statisticsUpdate.js"],"names":[],"mappings":"AAII,mKA+BC;AA/BD,mKA+BC;AACD,8HAmBC;AAnBD,8HAmBC;AACD,+HAmBC;AAnBD,+HAmBC"} \ No newline at end of file
diff --git a/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.js b/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.js
new file mode 100644
index 0000000..cfcb36b
--- /dev/null
+++ b/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.js
@@ -0,0 +1,84 @@
+/**
+ * Calculates comparison statistics.
+ */
+module.exports = {
+ updateStatisticsBoth(entry1, entry2, same, reason, type, permissionDeniedState, statistics, options) {
+ same ? statistics.equal++ : statistics.distinct++;
+ if (type === 'file') {
+ same ? statistics.equalFiles++ : statistics.distinctFiles++;
+ }
+ else if (type === 'directory') {
+ same ? statistics.equalDirs++ : statistics.distinctDirs++;
+ }
+ else if (type === 'broken-link') {
+ statistics.brokenLinks.distinctBrokenLinks++;
+ }
+ else {
+ throw new Error('Unexpected type ' + type);
+ }
+ const isSymlink1 = entry1 ? entry1.isSymlink : false;
+ const isSymlink2 = entry2 ? entry2.isSymlink : false;
+ const isSymlink = isSymlink1 || isSymlink2;
+ if (options.compareSymlink && isSymlink) {
+ const symlinks = statistics.symlinks;
+ if (reason === 'different-symlink') {
+ symlinks.distinctSymlinks++;
+ }
+ else {
+ symlinks.equalSymlinks++;
+ }
+ }
+ if (permissionDeniedState === "access-error-left") {
+ statistics.permissionDenied.leftPermissionDenied++;
+ }
+ else if (permissionDeniedState === "access-error-right") {
+ statistics.permissionDenied.rightPermissionDenied++;
+ }
+ else if (permissionDeniedState === "access-error-both") {
+ statistics.permissionDenied.distinctPermissionDenied++;
+ }
+ },
+ updateStatisticsLeft(entry1, type, permissionDeniedState, statistics, options) {
+ statistics.left++;
+ if (type === 'file') {
+ statistics.leftFiles++;
+ }
+ else if (type === 'directory') {
+ statistics.leftDirs++;
+ }
+ else if (type === 'broken-link') {
+ statistics.brokenLinks.leftBrokenLinks++;
+ }
+ else {
+ throw new Error('Unexpected type ' + type);
+ }
+ if (options.compareSymlink && entry1.isSymlink) {
+ statistics.symlinks.leftSymlinks++;
+ }
+ if (permissionDeniedState === "access-error-left") {
+ statistics.permissionDenied.leftPermissionDenied++;
+ }
+ },
+ updateStatisticsRight(entry2, type, permissionDeniedState, statistics, options) {
+ statistics.right++;
+ if (type === 'file') {
+ statistics.rightFiles++;
+ }
+ else if (type === 'directory') {
+ statistics.rightDirs++;
+ }
+ else if (type === 'broken-link') {
+ statistics.brokenLinks.rightBrokenLinks++;
+ }
+ else {
+ throw new Error('Unexpected type ' + type);
+ }
+ if (options.compareSymlink && entry2.isSymlink) {
+ statistics.symlinks.rightSymlinks++;
+ }
+ if (permissionDeniedState === "access-error-right") {
+ statistics.permissionDenied.rightPermissionDenied++;
+ }
+ },
+};
+//# sourceMappingURL=statisticsUpdate.js.map \ No newline at end of file
diff --git a/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.js.map b/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.js.map
new file mode 100644
index 0000000..667a8f2
--- /dev/null
+++ b/desktop/node_modules/dir-compare/build/src/statistics/statisticsUpdate.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"statisticsUpdate.js","sourceRoot":"","sources":["../../../src/statistics/statisticsUpdate.js"],"names":[],"mappings":"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"} \ No newline at end of file