npmdata 0.1.6-beta.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 +46 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +207 -0
- package/dist/cli.js.map +1 -0
- package/dist/consumer.d.ts +14 -0
- package/dist/consumer.d.ts.map +1 -0
- package/dist/consumer.js +478 -0
- package/dist/consumer.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +20 -0
- package/dist/main.js.map +1 -0
- package/dist/npmdata-0.0.1.tgz +0 -0
- package/dist/publisher.d.ts +17 -0
- package/dist/publisher.d.ts.map +1 -0
- package/dist/publisher.js +112 -0
- package/dist/publisher.js.map +1 -0
- package/dist/runner.d.ts +6 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +65 -0
- package/dist/runner.js.map +1 -0
- package/dist/types.d.ts +130 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +51 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +196 -0
- package/dist/utils.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.initPublisher = initPublisher;
|
|
7
|
+
/* eslint-disable functional/immutable-data */
|
|
8
|
+
/* eslint-disable no-restricted-syntax */
|
|
9
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const utils_1 = require("./utils");
|
|
12
|
+
function validateFolders(folders, workingDir) {
|
|
13
|
+
const errors = [];
|
|
14
|
+
for (const folder of folders) {
|
|
15
|
+
const folderPath = node_path_1.default.join(workingDir, folder);
|
|
16
|
+
if (!node_fs_1.default.existsSync(folderPath)) {
|
|
17
|
+
errors.push(`Folder not found: ${folder}`);
|
|
18
|
+
}
|
|
19
|
+
else if (!node_fs_1.default.statSync(folderPath).isDirectory()) {
|
|
20
|
+
errors.push(`Not a directory: ${folder}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return { valid: errors.length === 0, errors };
|
|
24
|
+
}
|
|
25
|
+
function generateCliScript() {
|
|
26
|
+
return `#!/usr/bin/env node
|
|
27
|
+
|
|
28
|
+
// DON'T EDIT THIS FILE MANUALLY - this script is generated by "npmdata init" command
|
|
29
|
+
require('npmdata/dist/runner.js').run(__dirname);
|
|
30
|
+
`;
|
|
31
|
+
}
|
|
32
|
+
function preparePackageJson(folders, workingDir) {
|
|
33
|
+
const packageJsonPath = node_path_1.default.join(workingDir, 'package.json');
|
|
34
|
+
// eslint-disable-next-line functional/no-let
|
|
35
|
+
let packageJson;
|
|
36
|
+
if (node_fs_1.default.existsSync(packageJsonPath)) {
|
|
37
|
+
packageJson = (0, utils_1.readJsonFile)(packageJsonPath);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
packageJson = {
|
|
41
|
+
name: node_path_1.default.basename(workingDir),
|
|
42
|
+
version: '1.0.0',
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
if (!packageJson.name)
|
|
46
|
+
packageJson.name = node_path_1.default.basename(workingDir);
|
|
47
|
+
if (!packageJson.version)
|
|
48
|
+
packageJson.version = '1.0.0';
|
|
49
|
+
// eslint-disable-next-line unicorn/no-keyword-prefix
|
|
50
|
+
const newFolderPatterns = folders.map((folder) => `${folder}/**`);
|
|
51
|
+
const existingPatterns = packageJson.files ?? [];
|
|
52
|
+
const existingFolderPatterns = existingPatterns.filter((p) => p.endsWith('/**'));
|
|
53
|
+
const existingNonFolderPatterns = existingPatterns.filter((p) => !p.endsWith('/**'));
|
|
54
|
+
packageJson.files = Array.from(new Set([
|
|
55
|
+
// eslint-disable-next-line unicorn/no-keyword-prefix
|
|
56
|
+
...newFolderPatterns,
|
|
57
|
+
...existingFolderPatterns,
|
|
58
|
+
...existingNonFolderPatterns,
|
|
59
|
+
'package.json',
|
|
60
|
+
'bin/npmdata.js',
|
|
61
|
+
]));
|
|
62
|
+
if (!packageJson.dependencies) {
|
|
63
|
+
packageJson.dependencies = {};
|
|
64
|
+
}
|
|
65
|
+
packageJson.dependencies.npmdata = 'latest';
|
|
66
|
+
if (!packageJson.bin) {
|
|
67
|
+
packageJson.bin = 'bin/npmdata.js';
|
|
68
|
+
}
|
|
69
|
+
return packageJson;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Initialize publisher configuration with specified folders
|
|
73
|
+
*/
|
|
74
|
+
async function initPublisher(folders, options = {}) {
|
|
75
|
+
const workingDir = options.workingDir ?? process.cwd();
|
|
76
|
+
// eslint-disable-next-line functional/no-try-statements
|
|
77
|
+
try {
|
|
78
|
+
if (!folders || folders.length === 0) {
|
|
79
|
+
return {
|
|
80
|
+
success: false,
|
|
81
|
+
message: 'npmdata: no folders specified. Usage: npmdata init <folder1> <folder2> ...',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const validation = validateFolders(folders, workingDir);
|
|
85
|
+
if (!validation.valid) {
|
|
86
|
+
return {
|
|
87
|
+
success: false,
|
|
88
|
+
message: `npmdata: folder validation failed:\n${validation.errors.join('\n')}`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const packageJson = preparePackageJson(folders, workingDir);
|
|
92
|
+
const packageJsonPath = node_path_1.default.join(workingDir, 'package.json');
|
|
93
|
+
(0, utils_1.writeJsonFile)(packageJsonPath, packageJson);
|
|
94
|
+
const cliScriptPath = node_path_1.default.join(workingDir, 'bin', 'npmdata.js');
|
|
95
|
+
node_fs_1.default.mkdirSync(node_path_1.default.dirname(cliScriptPath), { recursive: true });
|
|
96
|
+
node_fs_1.default.writeFileSync(cliScriptPath, generateCliScript(), 'utf8');
|
|
97
|
+
node_fs_1.default.chmodSync(cliScriptPath, 0o755);
|
|
98
|
+
return {
|
|
99
|
+
success: true,
|
|
100
|
+
message: 'npmdata: project initialization completed successfully',
|
|
101
|
+
publishedFolders: folders,
|
|
102
|
+
packageJsonPath,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
return {
|
|
107
|
+
success: false,
|
|
108
|
+
message: `npmdata: initialization failed: ${String(error)}`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=publisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher.js","sourceRoot":"","sources":["../src/publisher.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAmDxC"}
|
package/dist/runner.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.run = run;
|
|
7
|
+
/* eslint-disable functional/no-let */
|
|
8
|
+
const node_child_process_1 = require("node:child_process");
|
|
9
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
/**
|
|
12
|
+
* Runs the npmdata CLI (extract or check) on behalf of a publishable package.
|
|
13
|
+
* Called from the minimal generated bin script with its own __dirname as binDir.
|
|
14
|
+
*/
|
|
15
|
+
function run(binDir) {
|
|
16
|
+
const pkgJsonPath = node_path_1.default.join(binDir, '../package.json');
|
|
17
|
+
const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgJsonPath).toString());
|
|
18
|
+
const fpCliPath = require.resolve('npmdata/dist/main.js', {
|
|
19
|
+
paths: [binDir],
|
|
20
|
+
});
|
|
21
|
+
const action = process.argv[2] ?? 'extract';
|
|
22
|
+
if (action !== 'extract' && action !== 'check') {
|
|
23
|
+
process.stderr.write(`Invalid action: "${action}". Must be "extract" or "check".\n`);
|
|
24
|
+
// eslint-disable-next-line unicorn/no-process-exit
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
// Parse --output / -o, --force, --files, --content-regex from argv
|
|
28
|
+
let outputDir;
|
|
29
|
+
let force = false;
|
|
30
|
+
let gitignore = false;
|
|
31
|
+
let files;
|
|
32
|
+
let contentRegex;
|
|
33
|
+
const extraArgs = process.argv.slice(3);
|
|
34
|
+
for (let i = 0; i < extraArgs.length; i += 1) {
|
|
35
|
+
if (extraArgs[i] === '--output' || extraArgs[i] === '-o') {
|
|
36
|
+
outputDir = extraArgs[i + 1];
|
|
37
|
+
i += 1;
|
|
38
|
+
}
|
|
39
|
+
else if (extraArgs[i] === '--force') {
|
|
40
|
+
force = true;
|
|
41
|
+
}
|
|
42
|
+
else if (extraArgs[i] === '--gitignore') {
|
|
43
|
+
gitignore = true;
|
|
44
|
+
}
|
|
45
|
+
else if (extraArgs[i] === '--files') {
|
|
46
|
+
files = extraArgs[i + 1];
|
|
47
|
+
i += 1;
|
|
48
|
+
}
|
|
49
|
+
else if (extraArgs[i] === '--content-regex') {
|
|
50
|
+
contentRegex = extraArgs[i + 1];
|
|
51
|
+
i += 1;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const outputFlag = outputDir ? ` --output "${outputDir}"` : '';
|
|
55
|
+
const forceFlag = force ? ' --force' : '';
|
|
56
|
+
const gitignoreFlag = gitignore ? ' --gitignore' : '';
|
|
57
|
+
const filesFlag = files ? ` --files "${files}"` : '';
|
|
58
|
+
const contentRegexFlag = contentRegex ? ` --content-regex "${contentRegex}"` : '';
|
|
59
|
+
const command = `node "${fpCliPath}" ${action} --package "${pkg.name}"${outputFlag}${forceFlag}${gitignoreFlag}${filesFlag}${contentRegexFlag}`;
|
|
60
|
+
process.on('uncaughtException', () => {
|
|
61
|
+
process.exit(3);
|
|
62
|
+
});
|
|
63
|
+
(0, node_child_process_1.execSync)(command, { stdio: 'inherit' });
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default filename patterns applied when no filenamePatterns are specified.
|
|
3
|
+
* Excludes common package metadata files that are not meant to be extracted by consumers.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEFAULT_FILENAME_PATTERNS: string[];
|
|
6
|
+
/**
|
|
7
|
+
* Configuration for filtering which files to include/exclude
|
|
8
|
+
*/
|
|
9
|
+
export type FileFilterConfig = {
|
|
10
|
+
/**
|
|
11
|
+
* Glob patterns to match filenames (e.g., "*.md", "src/**\/*.ts")
|
|
12
|
+
*/
|
|
13
|
+
filenamePatterns?: string[];
|
|
14
|
+
/**
|
|
15
|
+
* Regex patterns to match file contents (files must contain at least one match)
|
|
16
|
+
*/
|
|
17
|
+
contentRegexes?: RegExp[];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Configuration for the consumer
|
|
21
|
+
*/
|
|
22
|
+
export type ConsumerConfig = FileFilterConfig & {
|
|
23
|
+
/**
|
|
24
|
+
* Package name to install from registry
|
|
25
|
+
*/
|
|
26
|
+
packageName: string;
|
|
27
|
+
/**
|
|
28
|
+
* Optional version constraint (semver pattern)
|
|
29
|
+
*/
|
|
30
|
+
version?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Output directory where files will be extracted
|
|
33
|
+
*/
|
|
34
|
+
outputDir: string;
|
|
35
|
+
/**
|
|
36
|
+
* Package manager type (auto-detect if not specified)
|
|
37
|
+
*/
|
|
38
|
+
packageManager?: 'pnpm' | 'yarn' | 'npm';
|
|
39
|
+
/**
|
|
40
|
+
* Allow creating conflicting files (default: false, will error)
|
|
41
|
+
*/
|
|
42
|
+
force?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Working directory from which to run package manager install commands (e.g. pnpm add).
|
|
45
|
+
* Defaults to process.cwd() if not specified.
|
|
46
|
+
*/
|
|
47
|
+
cwd?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Automatically create/update a .gitignore file alongside each .publisher marker file,
|
|
50
|
+
* adding the managed files and the .publisher file itself to be ignored by git.
|
|
51
|
+
*/
|
|
52
|
+
gitignore?: boolean;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Metadata about managed files
|
|
56
|
+
*/
|
|
57
|
+
export type ManagedFileMetadata = {
|
|
58
|
+
/**
|
|
59
|
+
* Path to the managed file (relative to marker file directory)
|
|
60
|
+
*/
|
|
61
|
+
path: string;
|
|
62
|
+
/**
|
|
63
|
+
* Package name that created this file
|
|
64
|
+
*/
|
|
65
|
+
packageName: string;
|
|
66
|
+
/**
|
|
67
|
+
* Package version that created this file
|
|
68
|
+
*/
|
|
69
|
+
packageVersion: string;
|
|
70
|
+
/**
|
|
71
|
+
* Whether the file was written replacing an existing unmanaged file (via force flag)
|
|
72
|
+
*/
|
|
73
|
+
force?: boolean;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Result of a consumer operation
|
|
77
|
+
*/
|
|
78
|
+
export type ConsumerResult = {
|
|
79
|
+
added: string[];
|
|
80
|
+
modified: string[];
|
|
81
|
+
deleted: string[];
|
|
82
|
+
skipped: string[];
|
|
83
|
+
sourcePackage: {
|
|
84
|
+
name: string;
|
|
85
|
+
version: string;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Result of a check operation
|
|
90
|
+
*/
|
|
91
|
+
export type CheckResult = {
|
|
92
|
+
/**
|
|
93
|
+
* Whether all files are in sync
|
|
94
|
+
*/
|
|
95
|
+
ok: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Files that differ from source
|
|
98
|
+
*/
|
|
99
|
+
differences: {
|
|
100
|
+
/**
|
|
101
|
+
* Files that are in the .publisher marker but missing from the output directory
|
|
102
|
+
*/
|
|
103
|
+
missing: string[];
|
|
104
|
+
/**
|
|
105
|
+
* Files whose contents differ from the package source
|
|
106
|
+
*/
|
|
107
|
+
modified: string[];
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Package information
|
|
111
|
+
*/
|
|
112
|
+
sourcePackage: {
|
|
113
|
+
name: string;
|
|
114
|
+
version: string;
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Package.json for a publishable project
|
|
119
|
+
*/
|
|
120
|
+
export type PublishablePackageJson = {
|
|
121
|
+
name: string;
|
|
122
|
+
version: string;
|
|
123
|
+
description?: string;
|
|
124
|
+
main?: string;
|
|
125
|
+
bin?: string;
|
|
126
|
+
files?: string[];
|
|
127
|
+
dependencies?: Record<string, string>;
|
|
128
|
+
[key: string]: unknown;
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,yBAAyB,UAMrC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG;IAC9C;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAEzC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,EAAE,EAAE,OAAO,CAAC;IAEZ;;OAEG;IACH,WAAW,EAAE;QACX;;WAEG;QACH,OAAO,EAAE,MAAM,EAAE,CAAC;QAElB;;WAEG;QACH,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IAEF;;OAEG;IACH,aAAa,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_FILENAME_PATTERNS = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Default filename patterns applied when no filenamePatterns are specified.
|
|
6
|
+
* Excludes common package metadata files that are not meant to be extracted by consumers.
|
|
7
|
+
*/
|
|
8
|
+
exports.DEFAULT_FILENAME_PATTERNS = [
|
|
9
|
+
'**',
|
|
10
|
+
'!package.json',
|
|
11
|
+
'!bin/**',
|
|
12
|
+
'!README.md',
|
|
13
|
+
'!node_modules/**',
|
|
14
|
+
];
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,yBAAyB,GAAG;IACvC,IAAI;IACJ,eAAe;IACf,SAAS;IACT,YAAY;IACZ,kBAAkB;CACnB,CAAC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ManagedFileMetadata } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Get hash of file contents
|
|
4
|
+
*/
|
|
5
|
+
export declare function calculateFileHash(filePath: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Check if file contents match regex patterns
|
|
8
|
+
*/
|
|
9
|
+
export declare function matchesContentRegex(filePath: string, patterns?: RegExp[]): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Recursively find all files in directory matching filters
|
|
12
|
+
*/
|
|
13
|
+
export declare function findMatchingFiles(dir: string, filenamePatterns?: string[], contentRegexes?: RegExp[]): string[];
|
|
14
|
+
export declare const matchesFilenamePattern: (filename: string, patterns?: string[]) => boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Create directory recursively
|
|
17
|
+
*/
|
|
18
|
+
export declare function ensureDir(dir: string): void;
|
|
19
|
+
/**
|
|
20
|
+
* Remove file with error handling
|
|
21
|
+
*/
|
|
22
|
+
export declare function removeFile(filePath: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Copy file preserving directory structure
|
|
25
|
+
*/
|
|
26
|
+
export declare function copyFile(src: string, dest: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Detect package manager type
|
|
29
|
+
*/
|
|
30
|
+
export declare function detectPackageManager(): 'npm' | 'yarn' | 'pnpm';
|
|
31
|
+
/**
|
|
32
|
+
* Get package info from installed package
|
|
33
|
+
*/
|
|
34
|
+
export declare function getInstalledPackageVersion(packageName: string, cwd?: string): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* Read JSON file safely
|
|
37
|
+
*/
|
|
38
|
+
export declare function readJsonFile<T>(filePath: string): T;
|
|
39
|
+
/**
|
|
40
|
+
* Write JSON file
|
|
41
|
+
*/
|
|
42
|
+
export declare function writeJsonFile(filePath: string, data: unknown): void;
|
|
43
|
+
/**
|
|
44
|
+
* Read the .publisher CSV marker file
|
|
45
|
+
*/
|
|
46
|
+
export declare function readCsvMarker(filePath: string): ManagedFileMetadata[];
|
|
47
|
+
/**
|
|
48
|
+
* Write the .publisher CSV marker file
|
|
49
|
+
*/
|
|
50
|
+
export declare function writeCsvMarker(filePath: string, data: ManagedFileMetadata[]): void;
|
|
51
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAIlF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,MAAM,EAAE,CA8BV;AAED,eAAO,MAAM,sBAAsB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,EAAE,KAAG,OAW9E,CAAC;AAEF;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAGjD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAOxD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM,CAkB9D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe3F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAGnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAQnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAYrE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAUlF"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.matchesFilenamePattern = void 0;
|
|
7
|
+
exports.calculateFileHash = calculateFileHash;
|
|
8
|
+
exports.matchesContentRegex = matchesContentRegex;
|
|
9
|
+
exports.findMatchingFiles = findMatchingFiles;
|
|
10
|
+
exports.ensureDir = ensureDir;
|
|
11
|
+
exports.removeFile = removeFile;
|
|
12
|
+
exports.copyFile = copyFile;
|
|
13
|
+
exports.detectPackageManager = detectPackageManager;
|
|
14
|
+
exports.getInstalledPackageVersion = getInstalledPackageVersion;
|
|
15
|
+
exports.readJsonFile = readJsonFile;
|
|
16
|
+
exports.writeJsonFile = writeJsonFile;
|
|
17
|
+
exports.readCsvMarker = readCsvMarker;
|
|
18
|
+
exports.writeCsvMarker = writeCsvMarker;
|
|
19
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
20
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
21
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
22
|
+
const minimatch_1 = require("minimatch");
|
|
23
|
+
/**
|
|
24
|
+
* Get hash of file contents
|
|
25
|
+
*/
|
|
26
|
+
function calculateFileHash(filePath) {
|
|
27
|
+
const content = node_fs_1.default.readFileSync(filePath);
|
|
28
|
+
return node_crypto_1.default.createHash('sha256').update(content).digest('hex');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Check if file contents match regex patterns
|
|
32
|
+
*/
|
|
33
|
+
function matchesContentRegex(filePath, patterns) {
|
|
34
|
+
if (!patterns)
|
|
35
|
+
return true;
|
|
36
|
+
const content = node_fs_1.default.readFileSync(filePath, 'utf8');
|
|
37
|
+
return patterns.some((pattern) => pattern.test(content));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Recursively find all files in directory matching filters
|
|
41
|
+
*/
|
|
42
|
+
function findMatchingFiles(dir, filenamePatterns, contentRegexes) {
|
|
43
|
+
const results = [];
|
|
44
|
+
function walkDir(currentDir) {
|
|
45
|
+
const files = node_fs_1.default.readdirSync(currentDir);
|
|
46
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
47
|
+
for (const file of files) {
|
|
48
|
+
const fullPath = node_path_1.default.join(currentDir, file);
|
|
49
|
+
const stat = node_fs_1.default.statSync(fullPath);
|
|
50
|
+
if (stat.isDirectory()) {
|
|
51
|
+
walkDir(fullPath);
|
|
52
|
+
// eslint-disable-next-line no-continue
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (
|
|
56
|
+
// Check if file matches include patterns and does not match exclude patterns, and matches content regex
|
|
57
|
+
(0, exports.matchesFilenamePattern)(fullPath, filenamePatterns) &&
|
|
58
|
+
matchesContentRegex(fullPath, contentRegexes)) {
|
|
59
|
+
// eslint-disable-next-line functional/immutable-data
|
|
60
|
+
results.push(fullPath);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
walkDir(dir);
|
|
65
|
+
return results;
|
|
66
|
+
}
|
|
67
|
+
const matchesFilenamePattern = (filename, patterns) => {
|
|
68
|
+
if (!patterns)
|
|
69
|
+
return true;
|
|
70
|
+
// Separate include and exclude patterns (exclude patterns start with '!')
|
|
71
|
+
const includes = patterns.filter((p) => !p.startsWith('!'));
|
|
72
|
+
const excludes = patterns.filter((p) => p.startsWith('!')).map((p) => p.slice(1));
|
|
73
|
+
return (includes.some((pattern) => (0, minimatch_1.minimatch)(filename, pattern)) &&
|
|
74
|
+
!excludes.some((pattern) => (0, minimatch_1.minimatch)(filename, pattern)));
|
|
75
|
+
};
|
|
76
|
+
exports.matchesFilenamePattern = matchesFilenamePattern;
|
|
77
|
+
/**
|
|
78
|
+
* Create directory recursively
|
|
79
|
+
*/
|
|
80
|
+
function ensureDir(dir) {
|
|
81
|
+
if (!node_fs_1.default.existsSync(dir)) {
|
|
82
|
+
node_fs_1.default.mkdirSync(dir, { recursive: true });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Remove file with error handling
|
|
87
|
+
*/
|
|
88
|
+
function removeFile(filePath) {
|
|
89
|
+
node_fs_1.default.chmodSync(filePath, 0o644); // Make writable before deleting
|
|
90
|
+
node_fs_1.default.unlinkSync(filePath);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Copy file preserving directory structure
|
|
94
|
+
*/
|
|
95
|
+
function copyFile(src, dest) {
|
|
96
|
+
ensureDir(node_path_1.default.dirname(dest));
|
|
97
|
+
// Make destination writable if it exists (e.g., from previous extraction)
|
|
98
|
+
if (node_fs_1.default.existsSync(dest)) {
|
|
99
|
+
node_fs_1.default.chmodSync(dest, 0o644);
|
|
100
|
+
}
|
|
101
|
+
node_fs_1.default.copyFileSync(src, dest);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Detect package manager type
|
|
105
|
+
*/
|
|
106
|
+
function detectPackageManager() {
|
|
107
|
+
// eslint-disable-next-line functional/no-try-statements
|
|
108
|
+
try {
|
|
109
|
+
const lockFiles = node_fs_1.default.readdirSync('.');
|
|
110
|
+
if (lockFiles.includes('pnpm-lock.yaml'))
|
|
111
|
+
return 'pnpm';
|
|
112
|
+
if (lockFiles.includes('yarn.lock'))
|
|
113
|
+
return 'yarn';
|
|
114
|
+
if (lockFiles.includes('package-lock.json'))
|
|
115
|
+
return 'npm';
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Continue to env check
|
|
119
|
+
}
|
|
120
|
+
// Check npm_config_user_agent environment variable
|
|
121
|
+
// eslint-disable-next-line no-process-env
|
|
122
|
+
const userAgent = process.env.npm_config_user_agent || '';
|
|
123
|
+
if (userAgent.includes('yarn'))
|
|
124
|
+
return 'yarn';
|
|
125
|
+
if (userAgent.includes('pnpm'))
|
|
126
|
+
return 'pnpm';
|
|
127
|
+
return 'npm'; // Default fallback
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get package info from installed package
|
|
131
|
+
*/
|
|
132
|
+
function getInstalledPackageVersion(packageName, cwd) {
|
|
133
|
+
// eslint-disable-next-line functional/no-try-statements
|
|
134
|
+
try {
|
|
135
|
+
if (cwd) {
|
|
136
|
+
const pkgPath = node_path_1.default.join(cwd, 'node_modules', packageName, 'package.json');
|
|
137
|
+
const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgPath).toString());
|
|
138
|
+
return pkg.version;
|
|
139
|
+
}
|
|
140
|
+
const pkgPath = require.resolve(`${packageName}/package.json`);
|
|
141
|
+
const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgPath).toString());
|
|
142
|
+
return pkg.version;
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// eslint-disable-next-line unicorn/no-null
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Read JSON file safely
|
|
151
|
+
*/
|
|
152
|
+
function readJsonFile(filePath) {
|
|
153
|
+
const content = node_fs_1.default.readFileSync(filePath).toString();
|
|
154
|
+
return JSON.parse(content);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Write JSON file
|
|
158
|
+
*/
|
|
159
|
+
function writeJsonFile(filePath, data) {
|
|
160
|
+
ensureDir(node_path_1.default.dirname(filePath));
|
|
161
|
+
// Make file writable if it exists (e.g., marker file from previous extraction)
|
|
162
|
+
if (node_fs_1.default.existsSync(filePath)) {
|
|
163
|
+
node_fs_1.default.chmodSync(filePath, 0o644);
|
|
164
|
+
}
|
|
165
|
+
// eslint-disable-next-line unicorn/no-null
|
|
166
|
+
node_fs_1.default.writeFileSync(filePath, `${JSON.stringify(data, null, 2)}\n`, 'utf8');
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Read the .publisher CSV marker file
|
|
170
|
+
*/
|
|
171
|
+
function readCsvMarker(filePath) {
|
|
172
|
+
const content = node_fs_1.default.readFileSync(filePath, 'utf8');
|
|
173
|
+
const lines = content.split('\n').filter((line) => line.trim() !== '');
|
|
174
|
+
return lines.map((line) => {
|
|
175
|
+
const fields = line.split(',');
|
|
176
|
+
return {
|
|
177
|
+
path: fields[0],
|
|
178
|
+
packageName: fields[1],
|
|
179
|
+
packageVersion: fields[2],
|
|
180
|
+
force: fields[3] === 'true',
|
|
181
|
+
};
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Write the .publisher CSV marker file
|
|
186
|
+
*/
|
|
187
|
+
function writeCsvMarker(filePath, data) {
|
|
188
|
+
ensureDir(node_path_1.default.dirname(filePath));
|
|
189
|
+
if (node_fs_1.default.existsSync(filePath)) {
|
|
190
|
+
node_fs_1.default.chmodSync(filePath, 0o644);
|
|
191
|
+
}
|
|
192
|
+
const rows = data.map((m) => [m.path, m.packageName, m.packageVersion, m.force ? 'true' : 'false'].join(','));
|
|
193
|
+
node_fs_1.default.writeFileSync(filePath, `${rows.join('\n')}\n`, 'utf8');
|
|
194
|
+
node_fs_1.default.chmodSync(filePath, 0o444);
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|