screw-up 1.18.0 → 1.19.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/dist/analyzer.d.ts +2 -2
- package/dist/cli-internal.d.ts +10 -3
- package/dist/cli-internal.d.ts.map +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/fast-tags.d.ts +2 -2
- package/dist/generated/packageMetadata.d.ts +4 -4
- package/dist/git-operations.d.ts +2 -2
- package/dist/index.cjs +17 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +17 -7
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +2 -2
- package/dist/main.cjs +168 -14
- package/dist/main.cjs.map +1 -1
- package/dist/main.d.ts +2 -2
- package/dist/main.js +170 -16
- package/dist/main.js.map +1 -1
- package/dist/metadata-file.d.ts +2 -2
- package/dist/{packageMetadata-B-eWBZ6y.cjs → packageMetadata-DXwK6bb8.cjs} +6 -5
- package/dist/{packageMetadata-B-eWBZ6y.cjs.map → packageMetadata-DXwK6bb8.cjs.map} +1 -1
- package/dist/{packageMetadata-BtM7pxOK.js → packageMetadata-DlkAQe0j.js} +6 -5
- package/dist/{packageMetadata-BtM7pxOK.js.map → packageMetadata-DlkAQe0j.js.map} +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/vite-plugin.d.ts +2 -2
- package/package.json +8 -8
package/dist/main.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/*!
|
|
3
3
|
* name: screw-up
|
|
4
|
-
* version: 1.
|
|
4
|
+
* version: 1.19.0
|
|
5
5
|
* description: Simply package metadata inserter on Vite plugin
|
|
6
6
|
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
7
7
|
* license: MIT
|
|
8
8
|
* repository.url: https://github.com/kekyo/screw-up.git
|
|
9
|
-
* git.commit.hash:
|
|
9
|
+
* git.commit.hash: b86321865390ff8dc11c118f46a8e0ba8b67aa9c
|
|
10
10
|
*/
|
|
11
|
-
import { join, dirname, resolve } from "path";
|
|
12
|
-
import { createWriteStream, createReadStream, existsSync } from "fs";
|
|
11
|
+
import { join, dirname, resolve, isAbsolute } from "path";
|
|
12
|
+
import { createWriteStream, createReadStream, existsSync, statSync } from "fs";
|
|
13
13
|
import { mkdir, writeFile, stat, readdir, mkdtemp, copyFile, rm, readFile } from "fs/promises";
|
|
14
14
|
import { spawn } from "child_process";
|
|
15
15
|
import { tmpdir } from "os";
|
|
16
16
|
import { Readable } from "stream";
|
|
17
17
|
import { createGunzip, createGzip } from "zlib";
|
|
18
18
|
import { pipeline } from "stream/promises";
|
|
19
|
-
import {
|
|
19
|
+
import { glob } from "glob";
|
|
20
|
+
import { d as resolveRawPackageJsonObject, f as findWorkspaceRoot, h as collectWorkspaceSiblings, i as replacePeerDependenciesWildcards, g as getFetchGitMetadata, l as lib, r as resolvePackageMetadata, b as generateMetadataFileContent, w as writeFileIfChanged, e as ensureMetadataGitignore, c as createConsoleLogger, n as name } from "./packageMetadata-DlkAQe0j.js";
|
|
20
21
|
/*!
|
|
21
22
|
* name: tar-vern
|
|
22
23
|
* version: 1.3.0
|
|
@@ -642,6 +643,118 @@ const createTarExtractor = async function* (readable, compressionType, signal) {
|
|
|
642
643
|
}
|
|
643
644
|
}
|
|
644
645
|
};
|
|
646
|
+
const readPackageJsonFile = async (packageJsonPath) => {
|
|
647
|
+
const content = await readFile(packageJsonPath, "utf-8");
|
|
648
|
+
return lib.parse(content);
|
|
649
|
+
};
|
|
650
|
+
const getFilesArray = (packageJson) => {
|
|
651
|
+
if (!packageJson || !Array.isArray(packageJson.files)) {
|
|
652
|
+
return void 0;
|
|
653
|
+
}
|
|
654
|
+
const entries = packageJson.files.filter(
|
|
655
|
+
(entry) => typeof entry === "string"
|
|
656
|
+
);
|
|
657
|
+
return entries.length > 0 ? entries : void 0;
|
|
658
|
+
};
|
|
659
|
+
const isGlobPattern = (pattern) => /[*?[\]{}()]/.test(pattern);
|
|
660
|
+
const normalizeFilesPattern = (pattern, cwd) => {
|
|
661
|
+
const trimmed = pattern.trim();
|
|
662
|
+
if (!trimmed) {
|
|
663
|
+
return void 0;
|
|
664
|
+
}
|
|
665
|
+
const isNegated = trimmed.startsWith("!");
|
|
666
|
+
const raw = isNegated ? trimmed.slice(1) : trimmed;
|
|
667
|
+
if (!raw) {
|
|
668
|
+
return void 0;
|
|
669
|
+
}
|
|
670
|
+
if (isGlobPattern(raw)) {
|
|
671
|
+
return trimmed;
|
|
672
|
+
}
|
|
673
|
+
const fullPath = join(cwd, raw);
|
|
674
|
+
if (existsSync(fullPath) && statSync(fullPath).isDirectory()) {
|
|
675
|
+
const dirPattern = `${raw.replace(/\/+$/, "")}/**`;
|
|
676
|
+
return isNegated ? `!${dirPattern}` : dirPattern;
|
|
677
|
+
}
|
|
678
|
+
return trimmed;
|
|
679
|
+
};
|
|
680
|
+
const isSafeRelativePath = (value) => {
|
|
681
|
+
if (isAbsolute(value)) {
|
|
682
|
+
return false;
|
|
683
|
+
}
|
|
684
|
+
const segments = value.split(/[\\/]+/);
|
|
685
|
+
if (segments.some((segment) => segment === "..")) {
|
|
686
|
+
return false;
|
|
687
|
+
}
|
|
688
|
+
return true;
|
|
689
|
+
};
|
|
690
|
+
const expandFilesPatterns = async (patterns, cwd) => {
|
|
691
|
+
const includePatterns = [];
|
|
692
|
+
const excludePatterns = [];
|
|
693
|
+
for (const pattern of patterns) {
|
|
694
|
+
const normalized = normalizeFilesPattern(pattern, cwd);
|
|
695
|
+
if (!normalized) {
|
|
696
|
+
continue;
|
|
697
|
+
}
|
|
698
|
+
if (normalized.startsWith("!")) {
|
|
699
|
+
excludePatterns.push(normalized.slice(1));
|
|
700
|
+
} else {
|
|
701
|
+
includePatterns.push(normalized);
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
const result = /* @__PURE__ */ new Set();
|
|
705
|
+
for (const pattern of includePatterns) {
|
|
706
|
+
const matches = await glob(pattern, { cwd, nodir: true });
|
|
707
|
+
for (const match of matches) {
|
|
708
|
+
if (isSafeRelativePath(match)) {
|
|
709
|
+
result.add(match);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
for (const pattern of excludePatterns) {
|
|
714
|
+
const matches = await glob(pattern, { cwd, nodir: true });
|
|
715
|
+
for (const match of matches) {
|
|
716
|
+
result.delete(match);
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
return result;
|
|
720
|
+
};
|
|
721
|
+
const mergeFilesPatterns = (parentFiles, childFiles) => {
|
|
722
|
+
const merged = [];
|
|
723
|
+
if (parentFiles == null ? void 0 : parentFiles.length) {
|
|
724
|
+
merged.push(...parentFiles);
|
|
725
|
+
}
|
|
726
|
+
if (childFiles == null ? void 0 : childFiles.length) {
|
|
727
|
+
merged.push(...childFiles);
|
|
728
|
+
}
|
|
729
|
+
return merged.length > 0 ? merged : void 0;
|
|
730
|
+
};
|
|
731
|
+
const resolveWorkspaceFilesMerge = async (targetDir, logger2) => {
|
|
732
|
+
const workspaceRoot = await findWorkspaceRoot(targetDir, logger2);
|
|
733
|
+
if (!workspaceRoot) {
|
|
734
|
+
return void 0;
|
|
735
|
+
}
|
|
736
|
+
const rootPackagePath = join(workspaceRoot, "package.json");
|
|
737
|
+
const targetPackagePath = join(targetDir, "package.json");
|
|
738
|
+
if (resolve(rootPackagePath) === resolve(targetPackagePath)) {
|
|
739
|
+
return void 0;
|
|
740
|
+
}
|
|
741
|
+
const [rootPackageJson, childPackageJson] = await Promise.all([
|
|
742
|
+
readPackageJsonFile(rootPackagePath),
|
|
743
|
+
readPackageJsonFile(targetPackagePath)
|
|
744
|
+
]);
|
|
745
|
+
const parentFiles = getFilesArray(rootPackageJson);
|
|
746
|
+
const childFiles = getFilesArray(childPackageJson);
|
|
747
|
+
const mergedFiles = mergeFilesPatterns(parentFiles, childFiles);
|
|
748
|
+
if (!parentFiles && !childFiles) {
|
|
749
|
+
return void 0;
|
|
750
|
+
}
|
|
751
|
+
return {
|
|
752
|
+
workspaceRoot,
|
|
753
|
+
parentFiles,
|
|
754
|
+
childFiles,
|
|
755
|
+
mergedFiles
|
|
756
|
+
};
|
|
757
|
+
};
|
|
645
758
|
const runNpmPack = async (targetDir, packDestDir) => {
|
|
646
759
|
return new Promise((res, rej) => {
|
|
647
760
|
const npmProcess = spawn(
|
|
@@ -687,8 +800,8 @@ stdout: ${stdout}`));
|
|
|
687
800
|
});
|
|
688
801
|
});
|
|
689
802
|
};
|
|
690
|
-
const packAssets = async (targetDir, outputDir, checkWorkingDirectoryStatus, alwaysOverrideVersionFromGit, inheritableFields, readmeReplacementPath, replacePeerDepsWildcards, peerDepsVersionPrefix, logger2) => {
|
|
691
|
-
var _a, _b, _c;
|
|
803
|
+
const packAssets = async (targetDir, outputDir, checkWorkingDirectoryStatus, alwaysOverrideVersionFromGit, inheritableFields, readmeReplacementPath, replacePeerDepsWildcards, peerDepsVersionPrefix, logger2, mergeFiles = true) => {
|
|
804
|
+
var _a, _b, _c, _d;
|
|
692
805
|
if (!existsSync(targetDir)) {
|
|
693
806
|
throw new Error(`Target directory is not found: ${targetDir}`);
|
|
694
807
|
}
|
|
@@ -750,6 +863,11 @@ const packAssets = async (targetDir, outputDir, checkWorkingDirectoryStatus, alw
|
|
|
750
863
|
}
|
|
751
864
|
}
|
|
752
865
|
}
|
|
866
|
+
const filesMergeEnabled = mergeFiles && inheritableFields.has("files");
|
|
867
|
+
const workspaceFilesMerge = filesMergeEnabled ? await resolveWorkspaceFilesMerge(targetDir, logger2) : void 0;
|
|
868
|
+
if (filesMergeEnabled && (workspaceFilesMerge == null ? void 0 : workspaceFilesMerge.mergedFiles)) {
|
|
869
|
+
resolvedPackageJson.files = workspaceFilesMerge.mergedFiles;
|
|
870
|
+
}
|
|
753
871
|
const baseTempDir = await mkdtemp(join(tmpdir(), "screw-up-npm-pack-"));
|
|
754
872
|
await mkdir(baseTempDir, { recursive: true });
|
|
755
873
|
try {
|
|
@@ -758,7 +876,25 @@ const packAssets = async (targetDir, outputDir, checkWorkingDirectoryStatus, alw
|
|
|
758
876
|
await mkdir(stagingDir, { recursive: true });
|
|
759
877
|
const stream = createReadStream(npmTarballPath);
|
|
760
878
|
await extractTo(createTarExtractor(stream, "gzip"), stagingDir);
|
|
761
|
-
const
|
|
879
|
+
const packageRoot = join(stagingDir, "package");
|
|
880
|
+
if (filesMergeEnabled && ((_a = workspaceFilesMerge == null ? void 0 : workspaceFilesMerge.parentFiles) == null ? void 0 : _a.length)) {
|
|
881
|
+
const parentFiles = await expandFilesPatterns(
|
|
882
|
+
workspaceFilesMerge.parentFiles,
|
|
883
|
+
workspaceFilesMerge.workspaceRoot
|
|
884
|
+
);
|
|
885
|
+
for (const parentFile of parentFiles) {
|
|
886
|
+
const destPath = join(packageRoot, parentFile);
|
|
887
|
+
if (existsSync(destPath)) {
|
|
888
|
+
continue;
|
|
889
|
+
}
|
|
890
|
+
await mkdir(dirname(destPath), { recursive: true });
|
|
891
|
+
await copyFile(
|
|
892
|
+
join(workspaceFilesMerge.workspaceRoot, parentFile),
|
|
893
|
+
destPath
|
|
894
|
+
);
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
const packageJsonPath = join(packageRoot, "package.json");
|
|
762
898
|
if (existsSync(packageJsonPath)) {
|
|
763
899
|
await writeFile(
|
|
764
900
|
packageJsonPath,
|
|
@@ -766,10 +902,10 @@ const packAssets = async (targetDir, outputDir, checkWorkingDirectoryStatus, alw
|
|
|
766
902
|
);
|
|
767
903
|
}
|
|
768
904
|
if (readmeReplacementCandidatePath) {
|
|
769
|
-
const readmeDestPath = join(
|
|
905
|
+
const readmeDestPath = join(packageRoot, "README.md");
|
|
770
906
|
await copyFile(readmeReplacementCandidatePath, readmeDestPath);
|
|
771
907
|
}
|
|
772
|
-
const outputFileName = `${(
|
|
908
|
+
const outputFileName = `${(_c = (_b = resolvedPackageJson == null ? void 0 : resolvedPackageJson.name) == null ? void 0 : _b.replace("/", "-")) != null ? _c : "package"}-${(_d = resolvedPackageJson == null ? void 0 : resolvedPackageJson.version) != null ? _d : "0.0.0"}.tgz`;
|
|
773
909
|
await mkdir(outputDir, { recursive: true });
|
|
774
910
|
const outputFile = join(outputDir, outputFileName);
|
|
775
911
|
const itemGenerator = createEntryItemGenerator(stagingDir);
|
|
@@ -846,7 +982,8 @@ const defaultInheritableFields = /* @__PURE__ */ new Set([
|
|
|
846
982
|
"keywords",
|
|
847
983
|
"homepage",
|
|
848
984
|
"bugs",
|
|
849
|
-
"readme"
|
|
985
|
+
"readme",
|
|
986
|
+
"files"
|
|
850
987
|
]);
|
|
851
988
|
const defaultOutputMetadataKeys = [
|
|
852
989
|
"name",
|
|
@@ -1048,6 +1185,7 @@ Options:
|
|
|
1048
1185
|
--inheritable-fields <list> Comma-separated list of fields to inherit from parent
|
|
1049
1186
|
--no-wds Do not check working directory status to increase version
|
|
1050
1187
|
--no-git-version-override Do not override version from Git (use package.json version)
|
|
1188
|
+
--no-merge-files Do not merge files from parent package.json
|
|
1051
1189
|
-f, --force Allow dumping even if package.json does not exist
|
|
1052
1190
|
-h, --help Show help for dump command
|
|
1053
1191
|
`);
|
|
@@ -1061,6 +1199,7 @@ const dumpCommand = async (args, logger2) => {
|
|
|
1061
1199
|
const inheritableFieldsOption = args.options["inheritable-fields"];
|
|
1062
1200
|
const alwaysOverrideVersionFromGit = !args.options["no-git-version-override"];
|
|
1063
1201
|
const checkWorkingDirectoryStatus = args.options["no-wds"] ? false : true;
|
|
1202
|
+
const mergeFiles = !args.options["no-merge-files"];
|
|
1064
1203
|
const ignorePackageJsonNotExist = args.options["force"] || args.options["f"] ? true : false;
|
|
1065
1204
|
const inheritableFields = parseInheritableFields(inheritableFieldsOption);
|
|
1066
1205
|
const targetDir = resolve(directory != null ? directory : process.cwd());
|
|
@@ -1088,6 +1227,15 @@ const dumpCommand = async (args, logger2) => {
|
|
|
1088
1227
|
ignorePackageJsonNotExist
|
|
1089
1228
|
);
|
|
1090
1229
|
if (computedPackageJson) {
|
|
1230
|
+
if (mergeFiles && inheritableFields.has("files") && existsSync(join(targetDir, "package.json"))) {
|
|
1231
|
+
const workspaceFilesMerge = await resolveWorkspaceFilesMerge(
|
|
1232
|
+
targetDir,
|
|
1233
|
+
_logger
|
|
1234
|
+
);
|
|
1235
|
+
if (workspaceFilesMerge == null ? void 0 : workspaceFilesMerge.mergedFiles) {
|
|
1236
|
+
computedPackageJson.files = workspaceFilesMerge.mergedFiles;
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1091
1239
|
console.info(JSON.stringify(computedPackageJson, null, 2));
|
|
1092
1240
|
} else {
|
|
1093
1241
|
_logger.error(`dump: Unable to read package.json from: ${targetDir}`);
|
|
@@ -1199,6 +1347,7 @@ Options:
|
|
|
1199
1347
|
--inheritable-fields <list> Comma-separated list of fields to inherit from parent
|
|
1200
1348
|
--no-wds Do not check working directory status to increase version
|
|
1201
1349
|
--no-git-version-override Do not override version from Git (use package.json version)
|
|
1350
|
+
--no-merge-files Do not merge files from parent package.json
|
|
1202
1351
|
--no-replace-peer-deps Disable replacing "*" in peerDependencies with actual versions
|
|
1203
1352
|
--peer-deps-prefix <prefix> Version prefix for replaced peerDependencies (default: "^")
|
|
1204
1353
|
--verbose Print verbose log
|
|
@@ -1217,6 +1366,7 @@ const packCommand = async (args, logger2) => {
|
|
|
1217
1366
|
const inheritableFieldsOption = args.options["inheritable-fields"];
|
|
1218
1367
|
const checkWorkingDirectoryStatus = args.options["no-wds"] ? false : true;
|
|
1219
1368
|
const alwaysOverrideVersionFromGit = !args.options["no-git-version-override"];
|
|
1369
|
+
const mergeFiles = !args.options["no-merge-files"];
|
|
1220
1370
|
const replacePeerDepsWildcards = !args.options["no-replace-peer-deps"];
|
|
1221
1371
|
const peerDepsVersionPrefix = (_a = args.options["peer-deps-prefix"]) != null ? _a : "^";
|
|
1222
1372
|
const verbose = args.options["verbose"] ? true : false;
|
|
@@ -1237,7 +1387,8 @@ const packCommand = async (args, logger2) => {
|
|
|
1237
1387
|
readmeReplacementPath,
|
|
1238
1388
|
replacePeerDepsWildcards,
|
|
1239
1389
|
peerDepsVersionPrefix,
|
|
1240
|
-
logger2
|
|
1390
|
+
logger2,
|
|
1391
|
+
mergeFiles
|
|
1241
1392
|
);
|
|
1242
1393
|
if (result) {
|
|
1243
1394
|
if (verbose) {
|
|
@@ -1319,6 +1470,7 @@ const publishCommand = async (args, logger2) => {
|
|
|
1319
1470
|
const inheritableFieldsOption = args.options["inheritable-fields"];
|
|
1320
1471
|
const checkWorkingDirectoryStatus = args.options["no-wds"] ? false : true;
|
|
1321
1472
|
const alwaysOverrideVersionFromGit = !args.options["no-git-version-override"];
|
|
1473
|
+
const mergeFiles = !args.options["no-merge-files"];
|
|
1322
1474
|
const replacePeerDepsWildcards = !args.options["no-replace-peer-deps"];
|
|
1323
1475
|
const peerDepsVersionPrefix = (_a = args.options["peer-deps-prefix"]) != null ? _a : "^";
|
|
1324
1476
|
const verbose = args.options["verbose"] ? true : false;
|
|
@@ -1328,7 +1480,7 @@ const publishCommand = async (args, logger2) => {
|
|
|
1328
1480
|
for (let i = 0; i < args.argv.length; i++) {
|
|
1329
1481
|
const arg = args.argv[i];
|
|
1330
1482
|
if (arg === "publish") ;
|
|
1331
|
-
else if (arg === "--help" || arg === "--verbose" || arg === "-h" || arg === "--no-wds" || arg === "--no-git-version-override" || arg === "--no-replace-peer-deps") ;
|
|
1483
|
+
else if (arg === "--help" || arg === "--verbose" || arg === "-h" || arg === "--no-wds" || arg === "--no-git-version-override" || arg === "--no-merge-files" || arg === "--no-replace-peer-deps") ;
|
|
1332
1484
|
else if (arg === "--readme" || arg === "--inheritable-fields" || arg === "--peer-deps-prefix") {
|
|
1333
1485
|
i++;
|
|
1334
1486
|
} else {
|
|
@@ -1352,7 +1504,8 @@ const publishCommand = async (args, logger2) => {
|
|
|
1352
1504
|
readmeReplacementPath,
|
|
1353
1505
|
replacePeerDepsWildcards,
|
|
1354
1506
|
peerDepsVersionPrefix,
|
|
1355
|
-
logger2
|
|
1507
|
+
logger2,
|
|
1508
|
+
mergeFiles
|
|
1356
1509
|
);
|
|
1357
1510
|
if (result == null ? void 0 : result.metadata) {
|
|
1358
1511
|
if (verbose) {
|
|
@@ -1391,7 +1544,8 @@ const publishCommand = async (args, logger2) => {
|
|
|
1391
1544
|
readmeReplacementPath,
|
|
1392
1545
|
replacePeerDepsWildcards,
|
|
1393
1546
|
peerDepsVersionPrefix,
|
|
1394
|
-
logger2
|
|
1547
|
+
logger2,
|
|
1548
|
+
mergeFiles
|
|
1395
1549
|
);
|
|
1396
1550
|
if (result == null ? void 0 : result.metadata) {
|
|
1397
1551
|
if (verbose) {
|
|
@@ -1431,7 +1585,7 @@ const publishCommand = async (args, logger2) => {
|
|
|
1431
1585
|
}
|
|
1432
1586
|
};
|
|
1433
1587
|
const showHelp = async () => {
|
|
1434
|
-
const { author, license, repository_url, version, git_commit_hash } = await import("./packageMetadata-
|
|
1588
|
+
const { author, license, repository_url, version, git_commit_hash } = await import("./packageMetadata-DlkAQe0j.js").then((n) => n.p);
|
|
1435
1589
|
console.info(`screw-up [${version}-${git_commit_hash}]
|
|
1436
1590
|
Easy package metadata inserter CLI
|
|
1437
1591
|
Copyright (c) ${author}
|