@bananacool467/pt 0.1.0-beta.3 → 0.1.0-beta.4

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
@@ -1,3 +1,16 @@
1
1
  # Package Testr (PT)
2
2
 
3
3
  Test your NPM packages before publishing...
4
+
5
+ ## How to use
6
+
7
+ Run into your project's root for NPM and install it:
8
+ ```bash
9
+ npm @bananacool467/pt
10
+ ```
11
+ It may create a command named `pt` if scripts is allowed or something like that.
12
+
13
+ Then literally just build the package:
14
+ ```bash
15
+ pt build
16
+ ```
package/glob-ignore.js ADDED
@@ -0,0 +1,60 @@
1
+ export function compilePattern(rawPattern) {
2
+ let pattern = rawPattern;
3
+ let negate = false;
4
+
5
+ if (pattern.startsWith('\\!') || pattern.startsWith('\\#')) {
6
+ pattern = pattern.slice(1);
7
+ } else if (pattern.startsWith('!')) {
8
+ negate = true;
9
+ pattern = pattern.slice(1);
10
+ }
11
+
12
+ let dirOnly = false;
13
+ if (pattern.endsWith('/')) {
14
+ dirOnly = true;
15
+ pattern = pattern.slice(0, -1);
16
+ }
17
+
18
+ let anchored = false;
19
+ if (pattern.startsWith('/')) {
20
+ anchored = true;
21
+ pattern = pattern.slice(1);
22
+ } else if (pattern.includes('/')) {
23
+ anchored = true;
24
+ }
25
+
26
+ let re = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
27
+
28
+ re = re
29
+ .replace(/\*\*\//g, '\u0000DSTAR_SLASH\u0000')
30
+ .replace(/\*\*/g, '\u0000DSTAR\u0000')
31
+ .replace(/\*/g, '[^/]*')
32
+ .replace(/\?/g, '[^/]')
33
+ .replace(/\u0000DSTAR_SLASH\u0000/g, '(?:.*/)?')
34
+ .replace(/\u0000DSTAR\u0000/g, '.*');
35
+
36
+ const body = anchored ? `^${re}` : `(?:^|.*/)${re}`;
37
+ const full = dirOnly ? `${body}(?:/.*)?$` : `${body}$`;
38
+
39
+ return { regex: new RegExp(full), negate, dirOnly };
40
+ }
41
+
42
+ export function parsePatterns(rawText) {
43
+ return rawText
44
+ .split('\n')
45
+ .map(l => l.trim())
46
+ .filter(l => l !== '' && !l.startsWith('#'))
47
+ .map(compilePattern);
48
+ }
49
+
50
+ export function isIgnored(filePath, compiledPatterns) {
51
+ let ignored = false;
52
+ for (const { regex, negate } of compiledPatterns) {
53
+ if (regex.test(filePath)) {
54
+ ignored = !negate;
55
+ }
56
+ }
57
+ return ignored;
58
+ }
59
+
60
+ //module.exports = { compilePattern, parsePatterns, isIgnored };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bananacool467/pt",
3
- "version": "0.1.0-beta.3",
3
+ "version": "0.1.0-beta.4",
4
4
  "description": "Test your NPM packages without publishing them.",
5
5
  "keywords": [
6
6
  "test",
@@ -18,7 +18,7 @@
18
18
  "pt": "pt.js"
19
19
  },
20
20
  "scripts": {
21
- "test": "npm link && pt-build && pt-link",
21
+ "test": "npm link && pt build && pt link",
22
22
  "prepublishOnly": "echo -e \"test\n\nnewline\""
23
23
  },
24
24
  "engines": {
package/pt.js CHANGED
@@ -4,6 +4,7 @@ import * as fs from 'node:fs';
4
4
  import * as path from 'node:path';
5
5
  import * as child_process from 'node:child_process';
6
6
  import { fileURLToPath } from 'url';
7
+ import { parsePatterns, isIgnored } from './glob-ignore.js';
7
8
 
8
9
  const __filename = fileURLToPath(import.meta.url);
9
10
  const __dirname = path.dirname(__filename);
@@ -17,7 +18,7 @@ async function __loadPackage () {
17
18
  const data = JSON.parse(rawData);
18
19
  return data;
19
20
  } catch (error) {
20
- console.error("Error reading file:", error);
21
+ console.error("Error reading file: ", error);
21
22
  return {};
22
23
  }
23
24
  }
@@ -35,7 +36,7 @@ async function __generatePackageTestName () {
35
36
  __new = `pack${__new}`
36
37
  return __new;
37
38
  } else {
38
- let __new = `pack${__name}`;
39
+ let __new = `pack:${__name}`;
39
40
  return __new;
40
41
  }
41
42
  }
@@ -62,83 +63,29 @@ async function __parseIgnore (name) {
62
63
  'v': name
63
64
  }
64
65
  ];
65
- try {
66
- const rawData = fs.readFileSync(__1 ? __resolved : __resolved2, 'utf8');
67
- const data = rawData.split("\n");
68
- let filteredData = [];
69
- for (const ignored of data) {
70
- if (ignored == '')
71
- continue;
72
- filteredData.push(ignored);
73
- }
74
- let parsed = [
75
- {
76
- 'dI': false,
77
- 'iD': true,
78
- 'v': '.git'
79
- },
80
- {
81
- 'dI': false,
82
- 'iD': true,
83
- 'v': name
84
- }
85
- ];
86
- for (const item of filteredData) {
87
- let __dontIgnore = false;
88
- let __isDir = false;
89
- if (item.startsWith("!"))
90
- __dontIgnore = true;
91
- let __ = item.replace("!", "");
92
- let __resolved3 = path.resolve(__);
93
- if (fs.existsSync(__resolved3)) {
94
- const stats = fs.statSync(__resolved3);
95
- __isDir = stats.isDirectory();
96
- }
97
- parsed.push({
98
- "dI": __dontIgnore,
99
- "iD": __isDir,
100
- "v": __
101
- })
102
- }
103
- return parsed;
104
- } catch (error) {
105
- console.error("Error reading file:", error);
106
- return [
107
- {
108
- 'dI': false,
109
- 'iD': true,
110
- 'v': '.git'
111
- },
112
- {
113
- 'dI': false,
114
- 'iD': true,
115
- 'v': name
116
- }
117
- ];
118
- }
66
+ const patterns = parsePatterns(fs.readFileSync(__1 ? __resolved : __resolved2, 'utf8'));
67
+ patterns.push(...parsePatterns('.git\n' + name));
68
+ return patterns;
119
69
  }
120
70
 
121
71
  async function build () {
122
72
  const __testName = await __generatePackageTestName();
123
73
  console.log(` [|] New testing folder: \`${__testName}\``);
124
- const __testPath = path.join(__dirname, __testName);
74
+ const __testPath = path.join(process.cwd(), __testName);
125
75
  fs.mkdirSync(__testPath, { recursive: true });
126
76
  const parsedIgnore = await __parseIgnore(__testName);
77
+ const patterns = parsedIgnore;
127
78
  let files = 0;
128
- let dirs = 0;
129
- for (const item of parsedIgnore) {
130
- if (item.iD && !item.dI) {
131
- dirs++;
132
- } else if (!item.iD && !item.dI) {
133
- files++;
134
- }
79
+ //let dirs = 0;
80
+ for (const item of patterns) {
81
+ files++;
135
82
  }
136
- const s = files == 1 ? "file" : "files";
137
- const s2 = dirs == 1 ? "directory" : "directories";
138
- console.log(` [|] Ignoring ${files} ${s} and ${dirs} ${s2}`);
83
+ const s = files == 1 ? "item" : "items";
84
+ //const s2 = dirs == 1 ? "directory" : "directories";
85
+ console.log(` [|] Ignoring ${files} ${s}`); // and ${dirs} ${s2}`);
139
86
  const pkg = await __loadPackage();
140
- const prepublishOnly = pkg.scripts.prepublishOnly;
141
- const prepare = pkg.scripts.prepare;
87
+ const prepublishOnly = pkg.scripts?.prepublishOnly;
88
+ const prepare = pkg.scripts?.prepare;
142
89
  const script = prepublishOnly ? prepublishOnly : (prepare ? prepare : null);
143
90
  if (script) {
144
91
  console.log(` [|] Running script for \`prepublishOnly\`/\`prepare\` before copying files...`);
@@ -155,26 +102,31 @@ async function build () {
155
102
  }
156
103
  }
157
104
  const __files = fs.readdirSync('.', { recursive: true });
105
+ const ignoredDirs = [];
106
+ let i = 0;
107
+ if (fs.existsSync(__testPath)) {
108
+ fs.rmSync(__testPath, { recursive: true, force: true });
109
+ console.log(" [-] Deleted cached package");
110
+ }
111
+ console.log(" [|] Copying...");
158
112
  for (const file of __files) {
159
- let skip = false;
160
- for (const item of parsedIgnore) {
161
- if (item.iD && !item.dI) {
162
- if (file.startsWith(item.v)) {
163
- skip = true;
164
- }
165
- } else if (!item.iD && !item.dI) {
166
- if (file == item.v) {
167
- skip = true;
168
- }
169
- }
170
- }
171
- if (skip) {
113
+ const posixFile = file.split(path.sep).join('/');
114
+
115
+ if (ignoredDirs.some(dir => posixFile.startsWith(dir + '/'))) continue;
116
+
117
+ if (isIgnored(posixFile, patterns)) {
118
+ const full = path.join(process.cwd(), file);
119
+ let isDir = false;
120
+ try { isDir = fs.statSync(full).isDirectory(); } catch {}
121
+ if (isDir) ignoredDirs.push(posixFile);
172
122
  continue;
173
- } else {
174
- fs.cpSync(file, path.join(__testPath, file), { recursive: true/*, filter: (src) => { return !src.includes('.git') && !src.includes(__testName); }*/ });
175
123
  }
124
+
125
+ fs.cpSync(file, path.join(__testPath, file), { recursive: true });
126
+ console.log(" [|] " + file);
127
+ i++;
176
128
  }
177
- console.log(" [+] Successfully built package!");
129
+ console.log(` [+] Successfully built package! Copied ${i} files.`);
178
130
  }
179
131
 
180
132
  async function main () {
@@ -184,8 +136,16 @@ async function main () {
184
136
  throw new Error("The package.json was not found. Try moving to the root directory of your project or run: npm init -y");
185
137
  if (command)
186
138
  console.log(" [|] Checking for `package.json...`");
187
- if (command == "build")
188
- build();
139
+ if (command == "build") {
140
+ build().catch(err => {
141
+ console.error(" [X] Build failed, error:");
142
+ const lines = err.message ? err.message.split('\n') : err.split('\n');
143
+ for (const line of lines) {
144
+ console.error(" " + line);
145
+ }
146
+ process.exit(1);
147
+ });
148
+ }
189
149
  if (!command)
190
150
  console.log("Usage:\n build - Builds the NPM package");
191
151
  }