copy-folder-util 1.1.6 → 1.2.0

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.
package/README.md CHANGED
@@ -54,7 +54,7 @@ Command-line flags:
54
54
  | `--quiet` | Suppress informational messages. | N/A |
55
55
  | `--summary` | Only print out the single line summary message. | N/A |
56
56
 
57
- Examples:
57
+ ### 4. Examples
58
58
  - `copy-folder build --basename=index dist` <br>
59
59
  Only copies files with filenames matching `index.*`.
60
60
 
package/bin/cli.js CHANGED
@@ -4,45 +4,6 @@
4
4
  // MIT License //
5
5
  //////////////////////
6
6
 
7
- // Usage in package.json:
8
- // "scripts": {
9
- // "make-dist": "copy-folder build dist"
10
- // },
11
- //
12
- // Usage from command line:
13
- // $ npm install --save-dev copy-folder-util
14
- // $ copy-folder build dist
15
- // $ copy-folder src/web --ext=.js,.html docs
16
- //
17
- // Contributors to this project:
18
- // $ cd copy-folder-util
19
- // $ npm install
20
- // $ npm test
21
- // $ node bin/cli.js --cd=spec/fixtures source --ext=.js target/ext-js
22
-
23
- // Imports
24
- import { cliArgvUtil } from 'cli-argv-util';
25
7
  import { copyFolder } from '../dist/copy-folder.js';
26
8
 
27
- // Parameters and flags
28
- const validFlags = ['cd', 'ext', 'note', 'quiet', 'summary'];
29
- const cli = cliArgvUtil.parse(validFlags);
30
- const source = cli.params[0];
31
- const target = cli.params[1];
32
-
33
- // Copy Folder
34
- const error =
35
- cli.invalidFlag ? cli.invalidFlagMsg :
36
- !source ? 'Missing source folder.' :
37
- !target ? 'Missing target folder.' :
38
- cli.paramCount > 2 ? 'Extraneous parameter: ' + cli.params[2] :
39
- null;
40
- if (error)
41
- throw new Error('[copy-folder-util] ' + error);
42
- const options = {
43
- cd: cli.flagMap.cd ?? null,
44
- fileExtensions: cli.flagMap.ext?.split(',') ?? [],
45
- };
46
- const results = copyFolder.cp(source, target, options);
47
- if (!cli.flagOn.quiet)
48
- copyFolder.reporter(results, { summaryOnly: cli.flagOn.summary });
9
+ copyFolder.cli();
@@ -1,8 +1,8 @@
1
- //! copy-folder-util v1.1.6 ~~ https://github.com/center-key/copy-folder-util ~~ MIT License
1
+ //! copy-folder-util v1.2.0 ~~ https://github.com/center-key/copy-folder-util ~~ MIT License
2
2
 
3
3
  export type Settings = {
4
- basename: string;
5
- cd: string;
4
+ basename: string | null;
5
+ cd: string | null;
6
6
  fileExtensions: string[];
7
7
  };
8
8
  export type Results = {
@@ -19,6 +19,12 @@ export type ReporterSettings = {
19
19
  summaryOnly: boolean;
20
20
  };
21
21
  declare const copyFolder: {
22
+ extraneous: {
23
+ files: string[];
24
+ folders: string[];
25
+ };
26
+ assert(ok: unknown, message: string | null): void;
27
+ cli(): void;
22
28
  cp(sourceFolder: string, targetFolder: string, options?: Partial<Settings>): Results;
23
29
  reporter(results: Results, options?: Partial<ReporterSettings>): Results;
24
30
  };
@@ -1,13 +1,40 @@
1
- //! copy-folder-util v1.1.6 ~~ https://github.com/center-key/copy-folder-util ~~ MIT License
1
+ //! copy-folder-util v1.2.0 ~~ https://github.com/center-key/copy-folder-util ~~ MIT License
2
2
 
3
+ import { cliArgvUtil } from 'cli-argv-util';
3
4
  import chalk from 'chalk';
4
5
  import fs from 'fs';
5
6
  import log from 'fancy-log';
6
7
  import path from 'path';
7
8
  import slash from 'slash';
8
- const extraneousFiles = ['.DS_Store', 'Thumbs.db', 'desktop.ini'];
9
- const extraneousFolders = ['.git', 'node_modules'];
10
9
  const copyFolder = {
10
+ extraneous: {
11
+ files: ['.DS_Store', 'Thumbs.db', 'desktop.ini'],
12
+ folders: ['.git', 'node_modules'],
13
+ },
14
+ assert(ok, message) {
15
+ if (!ok)
16
+ throw new Error(`[copy-folder-util] ${message}`);
17
+ },
18
+ cli() {
19
+ const validFlags = ['basename', 'cd', 'ext', 'note', 'quiet', 'summary'];
20
+ const cli = cliArgvUtil.parse(validFlags);
21
+ const source = cli.params[0];
22
+ const target = cli.params[1];
23
+ const error = cli.invalidFlag ? cli.invalidFlagMsg :
24
+ !source ? 'Missing source folder.' :
25
+ !target ? 'Missing target folder.' :
26
+ cli.paramCount > 2 ? 'Extraneous parameter: ' + cli.params[2] :
27
+ null;
28
+ copyFolder.assert(!error, error);
29
+ const options = {
30
+ basename: cli.flagMap.basename ?? null,
31
+ cd: cli.flagMap.cd ?? null,
32
+ fileExtensions: cli.flagMap.ext?.split(',') ?? [],
33
+ };
34
+ const results = copyFolder.cp(source, target, options);
35
+ if (!cli.flagOn.quiet)
36
+ copyFolder.reporter(results, { summaryOnly: cli.flagOn.summary });
37
+ },
11
38
  cp(sourceFolder, targetFolder, options) {
12
39
  const defaults = {
13
40
  basename: null,
@@ -16,21 +43,20 @@ const copyFolder = {
16
43
  };
17
44
  const settings = { ...defaults, ...options };
18
45
  const startTime = Date.now();
19
- const normalize = (folder) => !folder ? '' : slash(path.normalize(folder)).replace(/\/$/, '');
20
- const startFolder = settings.cd ? normalize(settings.cd) + '/' : '';
21
- const source = normalize(startFolder + sourceFolder);
22
- const target = normalize(startFolder + targetFolder);
46
+ const cleanPath = (folder) => !folder ? '' : slash(path.normalize(folder)).replace(/\/$/, '');
47
+ const startFolder = settings.cd ? cleanPath(settings.cd) + '/' : '';
48
+ const source = cleanPath(startFolder + sourceFolder);
49
+ const target = cleanPath(startFolder + targetFolder);
23
50
  if (targetFolder)
24
51
  fs.mkdirSync(target, { recursive: true });
25
- const errorMessage = !sourceFolder ? 'Must specify the source folder path.' :
52
+ const error = !sourceFolder ? 'Must specify the source folder path.' :
26
53
  !targetFolder ? 'Must specify the target folder path.' :
27
54
  !fs.existsSync(source) ? 'Source folder does not exist: ' + source :
28
55
  !fs.existsSync(target) ? 'Target folder cannot be created: ' + target :
29
56
  !fs.statSync(source).isDirectory() ? 'Source is not a folder: ' + source :
30
57
  !fs.statSync(target).isDirectory() ? 'Target is not a folder: ' + target :
31
58
  null;
32
- if (errorMessage)
33
- throw new Error('[copy-folder-util] ' + errorMessage);
59
+ copyFolder.assert(!error, error);
34
60
  const filterOff = {
35
61
  base: !settings.basename,
36
62
  ext: !Array.isArray(settings.fileExtensions) || !settings.fileExtensions.length,
@@ -42,11 +68,11 @@ const copyFolder = {
42
68
  const isFile = fs.statSync(origin).isFile();
43
69
  const name = path.basename(origin);
44
70
  const ext = path.extname(origin);
45
- const keepFolder = !isFile && !extraneousFolders.includes(name);
71
+ const keepFolder = !isFile && !copyFolder.extraneous.folders.includes(name);
46
72
  const keepFile = isFile &&
47
73
  (filterOff.base || name.replace(/[.].*/, '') === settings.basename) &&
48
74
  (filterOff.ext || settings.fileExtensions.includes(ext)) &&
49
- !extraneousFiles.includes(name);
75
+ !copyFolder.extraneous.files.includes(name);
50
76
  if (keepFile)
51
77
  files.push({
52
78
  origin: relativePath(posixPath(origin), source),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "copy-folder-util",
3
- "version": "1.1.6",
3
+ "version": "1.2.0",
4
4
  "description": "Recursively copy files from one folder to another folder (CLI tool designed for use in npm package.json scripts)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -45,7 +45,7 @@
45
45
  },
46
46
  "runScriptsConfig": {
47
47
  "clean": [
48
- "rimraf build dist spec/fixtures/target"
48
+ "rimraf build dist spec/target"
49
49
  ],
50
50
  "lint": [
51
51
  "jshint . --exclude-path .gitignore",
@@ -67,18 +67,18 @@
67
67
  "slash": "~5.1"
68
68
  },
69
69
  "devDependencies": {
70
- "@eslint/js": "~9.36",
70
+ "@eslint/js": "~9.39",
71
71
  "@types/fancy-log": "~2.0",
72
- "@types/node": "~24.5",
73
- "add-dist-header": "~1.5",
72
+ "@types/node": "~24.10",
73
+ "add-dist-header": "~1.6",
74
74
  "assert-deep-strict-equal": "~1.2",
75
75
  "copy-file-util": "~1.3",
76
- "eslint": "~9.36",
76
+ "eslint": "~9.39",
77
77
  "jshint": "~2.13",
78
78
  "mocha": "~11.7",
79
- "rimraf": "~6.0",
79
+ "rimraf": "~6.1",
80
80
  "run-scripts-util": "~1.3",
81
81
  "typescript": "~5.9",
82
- "typescript-eslint": "~8.44"
82
+ "typescript-eslint": "~8.46"
83
83
  }
84
84
  }