@bananacool467/pt 0.1.0-beta.1

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 (3) hide show
  1. package/README.md +3 -0
  2. package/package.json +25 -0
  3. package/pt.js +188 -0
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Package Testr (PT)
2
+
3
+ Test your NPM packages before publishing...
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@bananacool467/pt",
3
+ "version": "0.1.0-beta.1",
4
+ "description": "Test your NPM packages without publishing them.",
5
+ "keywords": [
6
+ "test",
7
+ "package"
8
+ ],
9
+ "license": "MIT",
10
+ "author": "bananacool467",
11
+ "type": "module",
12
+ "main": "pt.js",
13
+ "bin": {
14
+ "pt": "./pt.js"
15
+ },
16
+ "scripts": {
17
+ "test": "npm link && pt-build && pt-link"
18
+ },
19
+ "dependencies": {
20
+ "chokidar": "^4.0.0"
21
+ },
22
+ "engines": {
23
+ "node": ">=18.0.0"
24
+ }
25
+ }
package/pt.js ADDED
@@ -0,0 +1,188 @@
1
+ #!/usr/bin/env node
2
+
3
+ import * as fs from 'node:fs';
4
+ import * as path from 'node:path';
5
+ import * as child_process from 'node:child_process';
6
+ import { fileURLToPath } from 'url';
7
+
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = path.dirname(__filename);
10
+
11
+ async function __loadPackage () {
12
+ const __resolved = path.resolve('package.json');
13
+ if (!fs.existsSync(__resolved))
14
+ return "No package";
15
+ try {
16
+ const rawData = fs.readFileSync(__resolved, 'utf8');
17
+ const data = JSON.parse(rawData);
18
+ return data;
19
+ } catch (error) {
20
+ console.error("Error reading file:", error);
21
+ return {};
22
+ }
23
+ }
24
+
25
+ async function __pkgExists () {
26
+ return ((await __loadPackage()) == "No package" ? false : true);
27
+ }
28
+
29
+ async function __generatePackageTestName () {
30
+ const __name = (await __loadPackage()).name || "Unnamed";
31
+ if (__name.startsWith("@")) {
32
+ let __new = __name;
33
+ __new = __new.replace("@", "&");
34
+ __new = __new.replace("/", ":");
35
+ __new = `pack${__new}`
36
+ return __new;
37
+ } else {
38
+ let __new = `pack${__name}`;
39
+ return __new;
40
+ }
41
+ }
42
+
43
+ async function __parseIgnore (name) {
44
+ const __resolved = path.resolve('.npmignore');
45
+ const __resolved2 = path.resolve('.gitignore');
46
+ let __1 = true;
47
+ let __2 = true;
48
+ if (!fs.existsSync(__resolved))
49
+ __1 = false;
50
+ if (!fs.existsSync(__resolved2))
51
+ __2 = false;
52
+ if (!__1 && !__2)
53
+ return [
54
+ {
55
+ 'dI': false,
56
+ 'iD': true,
57
+ 'v': '.git'
58
+ },
59
+ {
60
+ 'dI': false,
61
+ 'iD': true,
62
+ 'v': name
63
+ }
64
+ ];
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
+ }
119
+ }
120
+
121
+ async function build () {
122
+ const __testName = await __generatePackageTestName();
123
+ console.log(` [|] New testing folder: \`${__testName}\``);
124
+ const __testPath = path.join(__dirname, __testName);
125
+ fs.mkdirSync(__testPath, { recursive: true });
126
+ const parsedIgnore = await __parseIgnore(__testName);
127
+ 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
+ }
135
+ }
136
+ const s = files == 1 ? "file" : "files";
137
+ const s2 = dirs == 1 ? "directory" : "directories";
138
+ console.log(` [|] Ignoring ${files} ${s} and ${dirs} ${s2}`);
139
+ const pkg = await __loadPackage();
140
+ const prepublishOnly = pkg.scripts.prepublishOnly;
141
+ const prepare = pkg.scripts.prepare;
142
+ const script = prepublishOnly ? prepublishOnly : (prepare ? prepare : null);
143
+ if (script) {
144
+ console.log(` [|] Running \`${script}\` before copying files...`);
145
+ child_process.exec(script, (error, stdout, stderr) => {
146
+ if (error || stderr) {
147
+ const err = error ? error : (stderr ? stderr : "an unknown error");
148
+ throw new Error(` [X] Failed to run script. Got: \n${err}\n Stopping...`);
149
+ }
150
+ console.log(` [i] ${stdout.trim()}`);
151
+ });
152
+ }
153
+ const __files = fs.readdirSync('.', { recursive: true });
154
+ for (const file of __files) {
155
+ let skip = false;
156
+ for (const item of parsedIgnore) {
157
+ if (item.iD && !item.dI) {
158
+ if (file.startsWith(item.v)) {
159
+ skip = true;
160
+ }
161
+ } else if (!item.iD && !item.dI) {
162
+ if (file == item.v) {
163
+ skip = true;
164
+ }
165
+ }
166
+ }
167
+ if (skip) {
168
+ continue;
169
+ } else {
170
+ fs.cpSync(file, path.join(__testPath, file), { recursive: true/*, filter: (src) => { return !src.includes('.git') && !src.includes(__testName); }*/ });
171
+ }
172
+ }
173
+ }
174
+
175
+ async function main () {
176
+ const args = process.argv.slice(2);
177
+ const command = args[0];
178
+ if (!(await __pkgExists()))
179
+ throw new Error("The package.json was not found. Try moving to the root directory of your project or run: npm init -y");
180
+ if (command)
181
+ console.log(" [|] Checking for `package.json...`");
182
+ if (command == "build")
183
+ build();
184
+ if (!command)
185
+ console.log("Usage:\n build - Builds the NPM package");
186
+ }
187
+
188
+ main();