screw-up 1.13.0 → 1.15.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/main.js CHANGED
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  /*!
3
3
  * name: screw-up
4
- * version: 1.13.0
4
+ * version: 1.15.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: d789a54f80dbff99d97cf2a263aadedfb8b0621d
9
+ * git.commit.hash: 6342e8bf692322743d3cdc8d8815c1ae45b7162d
10
10
  */
11
11
  import { join, dirname, resolve } from "path";
12
12
  import { createWriteStream, createReadStream, existsSync } from "fs";
13
- import { mkdir, writeFile, stat, readdir, mkdtemp, copyFile, rm } from "fs/promises";
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 { b as resolveRawPackageJsonObject, f as findWorkspaceRoot, d as collectWorkspaceSiblings, e as replacePeerDependenciesWildcards, g as getFetchGitMetadata, c as createConsoleLogger, n as name } from "./packageMetadata-CbtDrpYF.js";
19
+ import { b as resolveRawPackageJsonObject, f as findWorkspaceRoot, d as collectWorkspaceSiblings, e as replacePeerDependenciesWildcards, g as getFetchGitMetadata, c as createConsoleLogger, n as name } from "./packageMetadata-DFL693kZ.js";
20
20
  /*!
21
21
  * name: tar-vern
22
22
  * version: 1.3.0
@@ -783,7 +783,7 @@ const packAssets = async (targetDir, outputDir, checkWorkingDirectoryStatus, alw
783
783
  await rm(baseTempDir, { recursive: true, force: true });
784
784
  }
785
785
  };
786
- const getComputedPackageJsonObject = async (targetDir, fetchGitMetadata, alwaysOverrideVersionFromGit, inheritableFields, logger2) => {
786
+ const getComputedPackageJsonObject = async (targetDir, fetchGitMetadata, alwaysOverrideVersionFromGit, inheritableFields, logger2, ignoreNotExist = false) => {
787
787
  if (!existsSync(targetDir)) {
788
788
  return void 0;
789
789
  }
@@ -792,7 +792,8 @@ const getComputedPackageJsonObject = async (targetDir, fetchGitMetadata, alwaysO
792
792
  fetchGitMetadata,
793
793
  alwaysOverrideVersionFromGit,
794
794
  inheritableFields,
795
- logger2
795
+ logger2,
796
+ ignoreNotExist
796
797
  );
797
798
  return result.metadata;
798
799
  };
@@ -810,7 +811,7 @@ const parseArgs = (args, argOptionMap2) => {
810
811
  result.options[optionName] = true;
811
812
  } else {
812
813
  const argOptions = argOptionMap2.get(result.command);
813
- if (argOptions.has(optionName)) {
814
+ if (argOptions == null ? void 0 : argOptions.has(optionName)) {
814
815
  i++;
815
816
  result.options[optionName] = args[i];
816
817
  } else {
@@ -820,7 +821,13 @@ const parseArgs = (args, argOptionMap2) => {
820
821
  } else if (arg.startsWith("-")) {
821
822
  const optionName = arg.slice(1);
822
823
  if (optionName.length == 1) {
823
- result.options[optionName] = true;
824
+ const argOptions = result.command ? argOptionMap2.get(result.command) : void 0;
825
+ if (argOptions == null ? void 0 : argOptions.has(optionName)) {
826
+ i++;
827
+ result.options[optionName] = args[i];
828
+ } else {
829
+ result.options[optionName] = true;
830
+ }
824
831
  }
825
832
  } else if (!result.command) {
826
833
  result.command = arg;
@@ -852,6 +859,165 @@ const parseInheritableFields = (inheritableFieldsOption) => {
852
859
  inheritableFieldsOption.split(",").map((field) => field.trim()).filter((field) => field.length > 0)
853
860
  );
854
861
  };
862
+ const readInputText = async (inputPath) => {
863
+ if (inputPath) {
864
+ const resolvedPath = resolve(inputPath);
865
+ return await readFile(resolvedPath, "utf-8");
866
+ }
867
+ return await new Promise((resolvePromise, rejectPromise) => {
868
+ let data = "";
869
+ process.stdin.setEncoding("utf-8");
870
+ process.stdin.on("data", (chunk) => {
871
+ data += chunk;
872
+ });
873
+ process.stdin.on("end", () => resolvePromise(data));
874
+ process.stdin.on("error", (err) => rejectPromise(err));
875
+ });
876
+ };
877
+ const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
878
+ const getValueByPath = (source, path) => {
879
+ return path.split(".").reduce((current, key) => {
880
+ if (current === void 0 || current === null) {
881
+ return void 0;
882
+ }
883
+ if (typeof current !== "object" && !Array.isArray(current)) {
884
+ return void 0;
885
+ }
886
+ return current[key];
887
+ }, source);
888
+ };
889
+ const stringifyValue = (value) => {
890
+ if (value === void 0) {
891
+ return void 0;
892
+ }
893
+ if (value === null) {
894
+ return "null";
895
+ }
896
+ if (typeof value === "object") {
897
+ try {
898
+ return JSON.stringify(value);
899
+ } catch (e) {
900
+ return String(value);
901
+ }
902
+ }
903
+ return String(value);
904
+ };
905
+ const replacePlaceholders = (text, values, openBracket, closeBracket) => {
906
+ const pattern = new RegExp(
907
+ `${escapeRegExp(openBracket)}(.*?)${escapeRegExp(closeBracket)}`,
908
+ "g"
909
+ );
910
+ return text.replace(pattern, (match, key) => {
911
+ const trimmedKey = String(key).trim();
912
+ const resolvedValue = stringifyValue(getValueByPath(values, trimmedKey));
913
+ return resolvedValue !== void 0 ? resolvedValue : match;
914
+ });
915
+ };
916
+ const showFormatHelp = () => {
917
+ console.info(`Usage: screw-up format [options] [output]
918
+
919
+ Format input text by replacing placeholders with package metadata
920
+
921
+ Arguments:
922
+ output Optional output file path (default: stdout)
923
+
924
+ Options:
925
+ -i, --input <path> Input template file (default: stdin)
926
+ -b, --bracket <open,close> Placeholder brackets (default: {,})
927
+ --inheritable-fields <list> Comma-separated list of fields to inherit from parent
928
+ --no-wds Do not check working directory status to increase version
929
+ --no-git-version-override Do not override version from Git (use package.json version)
930
+ -f, --force Allow formatting even if package.json does not exist
931
+ -h, --help Show help for format command
932
+ `);
933
+ };
934
+ const parseBracketOption = (bracketOption) => {
935
+ if (!bracketOption) {
936
+ return { openBracket: "{", closeBracket: "}" };
937
+ }
938
+ const delimiterIndex = bracketOption.indexOf(",");
939
+ if (delimiterIndex === -1) {
940
+ return void 0;
941
+ }
942
+ const openBracket = bracketOption.slice(0, delimiterIndex);
943
+ const closeBracket = bracketOption.slice(delimiterIndex + 1);
944
+ if (!openBracket || !closeBracket) {
945
+ return void 0;
946
+ }
947
+ return { openBracket, closeBracket };
948
+ };
949
+ const formatCommand = async (args, logger2) => {
950
+ var _a, _b;
951
+ if (args.options.help || args.options.h) {
952
+ showFormatHelp();
953
+ return 1;
954
+ }
955
+ const outputPath = args.positional[0];
956
+ const inputPathOption = (_a = args.options["input"]) != null ? _a : args.options["i"];
957
+ const bracketOption = (_b = args.options["bracket"]) != null ? _b : args.options["b"];
958
+ const inheritableFieldsOption = args.options["inheritable-fields"];
959
+ const alwaysOverrideVersionFromGit = !args.options["no-git-version-override"];
960
+ const checkWorkingDirectoryStatus = args.options["no-wds"] ? false : true;
961
+ const ignorePackageJsonNotExist = args.options["force"] || args.options["f"] ? true : false;
962
+ const bracket = parseBracketOption(
963
+ typeof bracketOption === "string" ? bracketOption : void 0
964
+ );
965
+ if (!bracket) {
966
+ logger2.error(
967
+ 'format: Invalid bracket option, expected "open,close" pattern.'
968
+ );
969
+ return 1;
970
+ }
971
+ const { openBracket, closeBracket } = bracket;
972
+ const targetDir = resolve(process.cwd());
973
+ const inheritableFields = parseInheritableFields(inheritableFieldsOption);
974
+ const _logger = {
975
+ debug: (msg) => {
976
+ },
977
+ info: (msg) => {
978
+ },
979
+ warn: (msg) => {
980
+ },
981
+ error: logger2.error
982
+ };
983
+ try {
984
+ const fetchGitMetadata = getFetchGitMetadata(
985
+ targetDir,
986
+ checkWorkingDirectoryStatus,
987
+ _logger
988
+ );
989
+ const computedPackageJson = await getComputedPackageJsonObject(
990
+ targetDir,
991
+ fetchGitMetadata,
992
+ alwaysOverrideVersionFromGit,
993
+ inheritableFields,
994
+ _logger,
995
+ ignorePackageJsonNotExist
996
+ );
997
+ if (!computedPackageJson) {
998
+ _logger.error(`format: Unable to read package.json from: ${targetDir}`);
999
+ return 1;
1000
+ }
1001
+ const inputText = await readInputText(
1002
+ typeof inputPathOption === "string" ? inputPathOption : void 0
1003
+ );
1004
+ const formattedText = replacePlaceholders(
1005
+ inputText,
1006
+ computedPackageJson,
1007
+ openBracket,
1008
+ closeBracket
1009
+ );
1010
+ if (outputPath) {
1011
+ const resolvedOutputPath = resolve(outputPath);
1012
+ await writeFile(resolvedOutputPath, formattedText);
1013
+ }
1014
+ process.stdout.write(formattedText);
1015
+ } catch (error) {
1016
+ _logger.error(`format: Failed to format text: ${error}`);
1017
+ return 1;
1018
+ }
1019
+ return 0;
1020
+ };
855
1021
  const showDumpHelp = () => {
856
1022
  console.info(`Usage: screw-up dump [options] [directory]
857
1023
 
@@ -864,6 +1030,7 @@ Options:
864
1030
  --inheritable-fields <list> Comma-separated list of fields to inherit from parent
865
1031
  --no-wds Do not check working directory status to increase version
866
1032
  --no-git-version-override Do not override version from Git (use package.json version)
1033
+ -f, --force Allow dumping even if package.json does not exist
867
1034
  -h, --help Show help for dump command
868
1035
  `);
869
1036
  };
@@ -876,6 +1043,7 @@ const dumpCommand = async (args, logger2) => {
876
1043
  const inheritableFieldsOption = args.options["inheritable-fields"];
877
1044
  const alwaysOverrideVersionFromGit = !args.options["no-git-version-override"];
878
1045
  const checkWorkingDirectoryStatus = args.options["no-wds"] ? false : true;
1046
+ const ignorePackageJsonNotExist = args.options["force"] || args.options["f"] ? true : false;
879
1047
  const inheritableFields = parseInheritableFields(inheritableFieldsOption);
880
1048
  const targetDir = resolve(directory != null ? directory : process.cwd());
881
1049
  const _logger = {
@@ -898,7 +1066,8 @@ const dumpCommand = async (args, logger2) => {
898
1066
  fetchGitMetadata,
899
1067
  alwaysOverrideVersionFromGit,
900
1068
  inheritableFields,
901
- _logger
1069
+ _logger,
1070
+ ignorePackageJsonNotExist
902
1071
  );
903
1072
  if (computedPackageJson) {
904
1073
  console.info(JSON.stringify(computedPackageJson, null, 2));
@@ -1158,7 +1327,7 @@ const publishCommand = async (args, logger2) => {
1158
1327
  }
1159
1328
  };
1160
1329
  const showHelp = async () => {
1161
- const { author, license, repository_url, version, git_commit_hash } = await import("./packageMetadata-CbtDrpYF.js").then((n) => n.p);
1330
+ const { author, license, repository_url, version, git_commit_hash } = await import("./packageMetadata-DFL693kZ.js").then((n) => n.p);
1162
1331
  console.info(`screw-up [${version}-${git_commit_hash}]
1163
1332
  Easy package metadata inserter CLI
1164
1333
  Copyright (c) ${author}
@@ -1168,6 +1337,7 @@ License: ${license}
1168
1337
  Usage: screw-up <command> [options]
1169
1338
 
1170
1339
  Commands:
1340
+ format [output] Format text by replacing metadata placeholders
1171
1341
  dump [directory] Dump computed package.json as JSON
1172
1342
  pack [directory] Pack the project into a tar archive
1173
1343
  publish [directory|package.tgz] Publish the project
@@ -1176,6 +1346,7 @@ Options:
1176
1346
  -h, --help Show help
1177
1347
 
1178
1348
  Examples:
1349
+ screw-up format output.txt # Format stdin template and write to file
1179
1350
  screw-up dump # Dump computed package.json as JSON
1180
1351
  screw-up pack # Pack current directory
1181
1352
  screw-up pack --pack-destination ./dist # Pack to specific output directory
@@ -1194,6 +1365,7 @@ const argOptionMap = /* @__PURE__ */ new Map([
1194
1365
  "peer-deps-prefix"
1195
1366
  ])
1196
1367
  ],
1368
+ ["format", /* @__PURE__ */ new Set(["input", "i", "bracket", "b", "inheritable-fields"])],
1197
1369
  ["publish", /* @__PURE__ */ new Set(["inheritable-fields", "peer-deps-prefix"])]
1198
1370
  ]);
1199
1371
  const cliMain = async (args, logger2) => {
@@ -1203,6 +1375,8 @@ const cliMain = async (args, logger2) => {
1203
1375
  return 1;
1204
1376
  }
1205
1377
  switch (parsedArgs.command) {
1378
+ case "format":
1379
+ return await formatCommand(parsedArgs, logger2);
1206
1380
  case "dump":
1207
1381
  return await dumpCommand(parsedArgs, logger2);
1208
1382
  case "pack":