screw-up 1.14.1 → 1.16.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.14.1
4
+ * version: 1.16.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: e56be312448cbae9f30fa0841439ee856f93d60e
9
+ * git.commit.hash: 1074e4634f2c667f15188d4a95db0f30a96a6497
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-DOqeCvCs.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-CYZtTJqC.js";
20
20
  /*!
21
21
  * name: tar-vern
22
22
  * version: 1.3.0
@@ -811,7 +811,7 @@ const parseArgs = (args, argOptionMap2) => {
811
811
  result.options[optionName] = true;
812
812
  } else {
813
813
  const argOptions = argOptionMap2.get(result.command);
814
- if (argOptions.has(optionName)) {
814
+ if (argOptions == null ? void 0 : argOptions.has(optionName)) {
815
815
  i++;
816
816
  result.options[optionName] = args[i];
817
817
  } else {
@@ -821,7 +821,13 @@ const parseArgs = (args, argOptionMap2) => {
821
821
  } else if (arg.startsWith("-")) {
822
822
  const optionName = arg.slice(1);
823
823
  if (optionName.length == 1) {
824
- 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
+ }
825
831
  }
826
832
  } else if (!result.command) {
827
833
  result.command = arg;
@@ -853,6 +859,165 @@ const parseInheritableFields = (inheritableFieldsOption) => {
853
859
  inheritableFieldsOption.split(",").map((field) => field.trim()).filter((field) => field.length > 0)
854
860
  );
855
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
+ };
856
1021
  const showDumpHelp = () => {
857
1022
  console.info(`Usage: screw-up dump [options] [directory]
858
1023
 
@@ -1162,7 +1327,7 @@ const publishCommand = async (args, logger2) => {
1162
1327
  }
1163
1328
  };
1164
1329
  const showHelp = async () => {
1165
- const { author, license, repository_url, version, git_commit_hash } = await import("./packageMetadata-DOqeCvCs.js").then((n) => n.p);
1330
+ const { author, license, repository_url, version, git_commit_hash } = await import("./packageMetadata-CYZtTJqC.js").then((n) => n.p);
1166
1331
  console.info(`screw-up [${version}-${git_commit_hash}]
1167
1332
  Easy package metadata inserter CLI
1168
1333
  Copyright (c) ${author}
@@ -1172,6 +1337,7 @@ License: ${license}
1172
1337
  Usage: screw-up <command> [options]
1173
1338
 
1174
1339
  Commands:
1340
+ format [output] Format text by replacing metadata placeholders
1175
1341
  dump [directory] Dump computed package.json as JSON
1176
1342
  pack [directory] Pack the project into a tar archive
1177
1343
  publish [directory|package.tgz] Publish the project
@@ -1180,6 +1346,7 @@ Options:
1180
1346
  -h, --help Show help
1181
1347
 
1182
1348
  Examples:
1349
+ screw-up format output.txt # Format stdin template and write to file
1183
1350
  screw-up dump # Dump computed package.json as JSON
1184
1351
  screw-up pack # Pack current directory
1185
1352
  screw-up pack --pack-destination ./dist # Pack to specific output directory
@@ -1198,6 +1365,7 @@ const argOptionMap = /* @__PURE__ */ new Map([
1198
1365
  "peer-deps-prefix"
1199
1366
  ])
1200
1367
  ],
1368
+ ["format", /* @__PURE__ */ new Set(["input", "i", "bracket", "b", "inheritable-fields"])],
1201
1369
  ["publish", /* @__PURE__ */ new Set(["inheritable-fields", "peer-deps-prefix"])]
1202
1370
  ]);
1203
1371
  const cliMain = async (args, logger2) => {
@@ -1207,6 +1375,8 @@ const cliMain = async (args, logger2) => {
1207
1375
  return 1;
1208
1376
  }
1209
1377
  switch (parsedArgs.command) {
1378
+ case "format":
1379
+ return await formatCommand(parsedArgs, logger2);
1210
1380
  case "dump":
1211
1381
  return await dumpCommand(parsedArgs, logger2);
1212
1382
  case "pack":