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.
@@ -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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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Runs the npmdata CLI (extract or check) on behalf of a publishable package.
3
+ * Called from the minimal generated bin script with its own __dirname as binDir.
4
+ */
5
+ export declare function run(binDir: string): void;
6
+ //# sourceMappingURL=runner.d.ts.map
@@ -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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"}
@@ -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"}
@@ -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":";;;;;;AAWA,8CAGC;AAKD,kDAIC;AAKD,8CAkCC;AAkBD,8BAIC;AAKD,gCAGC;AAKD,4BAOC;AAKD,oDAkBC;AAKD,gEAeC;AAKD,oCAGC;AAKD,sCAQC;AAKD,sCAYC;AAKD,wCAUC;AAxMD,sDAAyB;AACzB,0DAA6B;AAC7B,8DAAiC;AAEjC,yCAAsC;AAItC;;GAEG;AACH,SAAgB,iBAAiB,CAAC,QAAgB;IAChD,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,qBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,QAAgB,EAAE,QAAmB;IACvE,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,GAAW,EACX,gBAA2B,EAC3B,cAAyB;IAEzB,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,SAAS,OAAO,CAAC,UAAkB;QACjC,MAAM,KAAK,GAAG,iBAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAEzC,gDAAgD;QAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,iBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEnC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAClB,uCAAuC;gBACvC,SAAS;YACX,CAAC;YAED;YACE,wGAAwG;YACxG,IAAA,8BAAsB,EAAC,QAAQ,EAAE,gBAAgB,CAAC;gBAClD,mBAAmB,CAAC,QAAQ,EAAE,cAAc,CAAC,EAC7C,CAAC;gBACD,qDAAqD;gBACrD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,MAAM,sBAAsB,GAAG,CAAC,QAAgB,EAAE,QAAmB,EAAW,EAAE;IACvF,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAElF,OAAO,CACL,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,qBAAS,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,qBAAS,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAC1D,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,sBAAsB,0BAWjC;AAEF;;GAEG;AACH,SAAgB,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,iBAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,QAAgB;IACzC,iBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,gCAAgC;IAC/D,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,QAAQ,CAAC,GAAW,EAAE,IAAY;IAChD,SAAS,CAAC,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B,0EAA0E;IAC1E,IAAI,iBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,iBAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,iBAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAClC,wDAAwD;IACxD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,iBAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAAE,OAAO,MAAM,CAAC;QACxD,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,MAAM,CAAC;QACnD,IAAI,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAAE,OAAO,KAAK,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IAED,mDAAmD;IACnD,0CAA0C;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC;IAC1D,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAE9C,OAAO,KAAK,CAAC,CAAC,mBAAmB;AACnC,CAAC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CAAC,WAAmB,EAAE,GAAY;IAC1E,wDAAwD;IACxD,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;YAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5D,OAAO,GAAG,CAAC,OAAO,CAAC;QACrB,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5D,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAI,QAAgB;IAC9C,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,QAAgB,EAAE,IAAa;IAC3D,SAAS,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,+EAA+E;IAC/E,IAAI,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,iBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,2CAA2C;IAC3C,iBAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,QAAgB;IAC5C,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACf,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;YACtB,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;YACzB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM;SAC5B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,QAAgB,EAAE,IAA2B;IAC1E,SAAS,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,IAAI,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,iBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAChF,CAAC;IACF,iBAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3D,iBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC"}