@adviser/cement 0.4.51 → 0.4.53

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.
Files changed (237) hide show
  1. package/cjs/cli/generate-version-ts-cmd.cjs +79 -0
  2. package/cjs/cli/generate-version-ts-cmd.cjs.map +1 -0
  3. package/cjs/cli/generate-version-ts-cmd.d.ts +3 -0
  4. package/cjs/cli/generate-version-ts-cmd.d.ts.map +1 -0
  5. package/cjs/cli/main.cjs +8 -3
  6. package/cjs/cli/main.cjs.map +1 -1
  7. package/cjs/cli/patch-version-cmd.cjs +3 -226
  8. package/cjs/cli/patch-version-cmd.cjs.map +1 -1
  9. package/cjs/cli/patch-version-cmd.d.ts +0 -4
  10. package/cjs/cli/patch-version-cmd.d.ts.map +1 -1
  11. package/cjs/cli/prepare-pubdir-cmd.cjs +150 -0
  12. package/cjs/cli/prepare-pubdir-cmd.cjs.map +1 -0
  13. package/cjs/cli/prepare-pubdir-cmd.d.ts +4 -0
  14. package/cjs/cli/prepare-pubdir-cmd.d.ts.map +1 -0
  15. package/cjs/cli/publish-tags-cmd.cjs +94 -0
  16. package/cjs/cli/publish-tags-cmd.cjs.map +1 -0
  17. package/cjs/cli/publish-tags-cmd.d.ts +3 -0
  18. package/cjs/cli/publish-tags-cmd.d.ts.map +1 -0
  19. package/cjs/cli/setup-deno-json-cmd.cjs +77 -0
  20. package/cjs/cli/setup-deno-json-cmd.cjs.map +1 -0
  21. package/cjs/cli/setup-deno-json-cmd.d.ts +3 -0
  22. package/cjs/cli/setup-deno-json-cmd.d.ts.map +1 -0
  23. package/cjs/cli/utils.cjs +93 -0
  24. package/cjs/cli/utils.cjs.map +1 -0
  25. package/cjs/cli/utils.d.ts +6 -0
  26. package/cjs/cli/utils.d.ts.map +1 -0
  27. package/cjs/future.cjs +3 -1
  28. package/cjs/future.cjs.map +1 -1
  29. package/cjs/future.d.ts +3 -2
  30. package/cjs/future.d.ts.map +1 -1
  31. package/cjs/future.test.cjs +4 -0
  32. package/cjs/future.test.cjs.map +1 -1
  33. package/cjs/index.cjs +1 -0
  34. package/cjs/index.cjs.map +1 -1
  35. package/cjs/index.d.ts +1 -0
  36. package/cjs/index.d.ts.map +1 -1
  37. package/cjs/poller.cjs +46 -0
  38. package/cjs/poller.cjs.map +1 -0
  39. package/cjs/poller.d.ts +19 -0
  40. package/cjs/poller.d.ts.map +1 -0
  41. package/cjs/poller.test.cjs +95 -0
  42. package/cjs/poller.test.cjs.map +1 -0
  43. package/cjs/poller.test.d.ts +2 -0
  44. package/cjs/poller.test.d.ts.map +1 -0
  45. package/cjs/resolve-once.d.ts +4 -4
  46. package/cjs/resolve-once.d.ts.map +1 -1
  47. package/cjs/utils/index.cjs +1 -0
  48. package/cjs/utils/index.cjs.map +1 -1
  49. package/cjs/utils/index.d.ts +1 -0
  50. package/cjs/utils/index.d.ts.map +1 -1
  51. package/cjs/utils/promise-sleep.cjs +33 -0
  52. package/cjs/utils/promise-sleep.cjs.map +1 -0
  53. package/cjs/utils/promise-sleep.d.ts +2 -0
  54. package/cjs/utils/promise-sleep.d.ts.map +1 -0
  55. package/cjs/version.cjs +1 -1
  56. package/deno.json +1 -1
  57. package/esm/cli/generate-version-ts-cmd.d.ts +3 -0
  58. package/esm/cli/generate-version-ts-cmd.d.ts.map +1 -0
  59. package/esm/cli/generate-version-ts-cmd.js +43 -0
  60. package/esm/cli/generate-version-ts-cmd.js.map +1 -0
  61. package/esm/cli/main.js +6 -1
  62. package/esm/cli/main.js.map +1 -1
  63. package/esm/cli/patch-version-cmd.d.ts +0 -4
  64. package/esm/cli/patch-version-cmd.d.ts.map +1 -1
  65. package/esm/cli/patch-version-cmd.js +1 -220
  66. package/esm/cli/patch-version-cmd.js.map +1 -1
  67. package/esm/cli/prepare-pubdir-cmd.d.ts +4 -0
  68. package/esm/cli/prepare-pubdir-cmd.d.ts.map +1 -0
  69. package/esm/cli/prepare-pubdir-cmd.js +113 -0
  70. package/esm/cli/prepare-pubdir-cmd.js.map +1 -0
  71. package/esm/cli/publish-tags-cmd.d.ts +3 -0
  72. package/esm/cli/publish-tags-cmd.d.ts.map +1 -0
  73. package/esm/cli/publish-tags-cmd.js +58 -0
  74. package/esm/cli/publish-tags-cmd.js.map +1 -0
  75. package/esm/cli/setup-deno-json-cmd.d.ts +3 -0
  76. package/esm/cli/setup-deno-json-cmd.d.ts.map +1 -0
  77. package/esm/cli/setup-deno-json-cmd.js +41 -0
  78. package/esm/cli/setup-deno-json-cmd.js.map +1 -0
  79. package/esm/cli/utils.d.ts +6 -0
  80. package/esm/cli/utils.d.ts.map +1 -0
  81. package/esm/cli/utils.js +54 -0
  82. package/esm/cli/utils.js.map +1 -0
  83. package/esm/future.d.ts +3 -2
  84. package/esm/future.d.ts.map +1 -1
  85. package/esm/future.js +3 -1
  86. package/esm/future.js.map +1 -1
  87. package/esm/future.test.js +4 -0
  88. package/esm/future.test.js.map +1 -1
  89. package/esm/index.d.ts +1 -0
  90. package/esm/index.d.ts.map +1 -1
  91. package/esm/index.js +1 -0
  92. package/esm/index.js.map +1 -1
  93. package/esm/poller.d.ts +19 -0
  94. package/esm/poller.d.ts.map +1 -0
  95. package/esm/poller.js +43 -0
  96. package/esm/poller.js.map +1 -0
  97. package/esm/poller.test.d.ts +2 -0
  98. package/esm/poller.test.d.ts.map +1 -0
  99. package/esm/poller.test.js +93 -0
  100. package/esm/poller.test.js.map +1 -0
  101. package/esm/resolve-once.d.ts +4 -4
  102. package/esm/resolve-once.d.ts.map +1 -1
  103. package/esm/utils/index.d.ts +1 -0
  104. package/esm/utils/index.d.ts.map +1 -1
  105. package/esm/utils/index.js +1 -0
  106. package/esm/utils/index.js.map +1 -1
  107. package/esm/utils/promise-sleep.d.ts +2 -0
  108. package/esm/utils/promise-sleep.d.ts.map +1 -0
  109. package/esm/utils/promise-sleep.js +30 -0
  110. package/esm/utils/promise-sleep.js.map +1 -0
  111. package/esm/version.js +1 -1
  112. package/package.json +43 -26
  113. package/src/cli/generate-version-ts-cmd.ts +43 -0
  114. package/src/cli/main.ts +6 -1
  115. package/src/cli/patch-version-cmd.ts +1 -289
  116. package/src/cli/prepare-pubdir-cmd.ts +156 -0
  117. package/src/cli/publish-tags-cmd.ts +67 -0
  118. package/src/cli/run.sh +10 -1
  119. package/src/cli/setup-deno-json-cmd.ts +51 -0
  120. package/src/cli/utils.ts +70 -0
  121. package/src/future.ts +4 -2
  122. package/src/index.ts +1 -0
  123. package/src/poller.ts +68 -0
  124. package/src/resolve-once.ts +4 -4
  125. package/src/utils/index.ts +1 -0
  126. package/src/utils/promise-sleep.ts +42 -0
  127. package/ts/cjs/cli/generate-version-ts-cmd.d.ts +3 -0
  128. package/ts/cjs/cli/generate-version-ts-cmd.d.ts.map +1 -0
  129. package/ts/cjs/cli/generate-version-ts-cmd.js +79 -0
  130. package/ts/cjs/cli/generate-version-ts-cmd.js.map +1 -0
  131. package/ts/cjs/cli/main.js +8 -3
  132. package/ts/cjs/cli/main.js.map +1 -1
  133. package/ts/cjs/cli/patch-version-cmd.d.ts +0 -4
  134. package/ts/cjs/cli/patch-version-cmd.d.ts.map +1 -1
  135. package/ts/cjs/cli/patch-version-cmd.js +3 -226
  136. package/ts/cjs/cli/patch-version-cmd.js.map +1 -1
  137. package/ts/cjs/cli/prepare-pubdir-cmd.d.ts +4 -0
  138. package/ts/cjs/cli/prepare-pubdir-cmd.d.ts.map +1 -0
  139. package/ts/cjs/cli/prepare-pubdir-cmd.js +150 -0
  140. package/ts/cjs/cli/prepare-pubdir-cmd.js.map +1 -0
  141. package/ts/cjs/cli/publish-tags-cmd.d.ts +3 -0
  142. package/ts/cjs/cli/publish-tags-cmd.d.ts.map +1 -0
  143. package/ts/cjs/cli/publish-tags-cmd.js +94 -0
  144. package/ts/cjs/cli/publish-tags-cmd.js.map +1 -0
  145. package/ts/cjs/cli/setup-deno-json-cmd.d.ts +3 -0
  146. package/ts/cjs/cli/setup-deno-json-cmd.d.ts.map +1 -0
  147. package/ts/cjs/cli/setup-deno-json-cmd.js +77 -0
  148. package/ts/cjs/cli/setup-deno-json-cmd.js.map +1 -0
  149. package/ts/cjs/cli/utils.d.ts +6 -0
  150. package/ts/cjs/cli/utils.d.ts.map +1 -0
  151. package/ts/cjs/cli/utils.js +93 -0
  152. package/ts/cjs/cli/utils.js.map +1 -0
  153. package/ts/cjs/future.d.ts +3 -2
  154. package/ts/cjs/future.d.ts.map +1 -1
  155. package/ts/cjs/future.js +3 -1
  156. package/ts/cjs/future.js.map +1 -1
  157. package/ts/cjs/future.test.js +4 -0
  158. package/ts/cjs/future.test.js.map +1 -1
  159. package/ts/cjs/index.d.ts +1 -0
  160. package/ts/cjs/index.d.ts.map +1 -1
  161. package/ts/cjs/index.js +1 -0
  162. package/ts/cjs/index.js.map +1 -1
  163. package/ts/cjs/poller.d.ts +19 -0
  164. package/ts/cjs/poller.d.ts.map +1 -0
  165. package/ts/cjs/poller.js +46 -0
  166. package/ts/cjs/poller.js.map +1 -0
  167. package/ts/cjs/poller.test.d.ts +2 -0
  168. package/ts/cjs/poller.test.d.ts.map +1 -0
  169. package/ts/cjs/poller.test.js +95 -0
  170. package/ts/cjs/poller.test.js.map +1 -0
  171. package/ts/cjs/resolve-once.d.ts +4 -4
  172. package/ts/cjs/resolve-once.d.ts.map +1 -1
  173. package/ts/cjs/utils/index.d.ts +1 -0
  174. package/ts/cjs/utils/index.d.ts.map +1 -1
  175. package/ts/cjs/utils/index.js +1 -0
  176. package/ts/cjs/utils/index.js.map +1 -1
  177. package/ts/cjs/utils/promise-sleep.d.ts +2 -0
  178. package/ts/cjs/utils/promise-sleep.d.ts.map +1 -0
  179. package/ts/cjs/utils/promise-sleep.js +33 -0
  180. package/ts/cjs/utils/promise-sleep.js.map +1 -0
  181. package/ts/cjs/version.js +1 -1
  182. package/ts/esm/cli/generate-version-ts-cmd.d.ts +3 -0
  183. package/ts/esm/cli/generate-version-ts-cmd.d.ts.map +1 -0
  184. package/ts/esm/cli/generate-version-ts-cmd.js +43 -0
  185. package/ts/esm/cli/generate-version-ts-cmd.js.map +1 -0
  186. package/ts/esm/cli/main.js +6 -1
  187. package/ts/esm/cli/main.js.map +1 -1
  188. package/ts/esm/cli/patch-version-cmd.d.ts +0 -4
  189. package/ts/esm/cli/patch-version-cmd.d.ts.map +1 -1
  190. package/ts/esm/cli/patch-version-cmd.js +1 -220
  191. package/ts/esm/cli/patch-version-cmd.js.map +1 -1
  192. package/ts/esm/cli/prepare-pubdir-cmd.d.ts +4 -0
  193. package/ts/esm/cli/prepare-pubdir-cmd.d.ts.map +1 -0
  194. package/ts/esm/cli/prepare-pubdir-cmd.js +113 -0
  195. package/ts/esm/cli/prepare-pubdir-cmd.js.map +1 -0
  196. package/ts/esm/cli/publish-tags-cmd.d.ts +3 -0
  197. package/ts/esm/cli/publish-tags-cmd.d.ts.map +1 -0
  198. package/ts/esm/cli/publish-tags-cmd.js +58 -0
  199. package/ts/esm/cli/publish-tags-cmd.js.map +1 -0
  200. package/ts/esm/cli/setup-deno-json-cmd.d.ts +3 -0
  201. package/ts/esm/cli/setup-deno-json-cmd.d.ts.map +1 -0
  202. package/ts/esm/cli/setup-deno-json-cmd.js +41 -0
  203. package/ts/esm/cli/setup-deno-json-cmd.js.map +1 -0
  204. package/ts/esm/cli/utils.d.ts +6 -0
  205. package/ts/esm/cli/utils.d.ts.map +1 -0
  206. package/ts/esm/cli/utils.js +54 -0
  207. package/ts/esm/cli/utils.js.map +1 -0
  208. package/ts/esm/future.d.ts +3 -2
  209. package/ts/esm/future.d.ts.map +1 -1
  210. package/ts/esm/future.js +3 -1
  211. package/ts/esm/future.js.map +1 -1
  212. package/ts/esm/future.test.js +4 -0
  213. package/ts/esm/future.test.js.map +1 -1
  214. package/ts/esm/index.d.ts +1 -0
  215. package/ts/esm/index.d.ts.map +1 -1
  216. package/ts/esm/index.js +1 -0
  217. package/ts/esm/index.js.map +1 -1
  218. package/ts/esm/poller.d.ts +19 -0
  219. package/ts/esm/poller.d.ts.map +1 -0
  220. package/ts/esm/poller.js +43 -0
  221. package/ts/esm/poller.js.map +1 -0
  222. package/ts/esm/poller.test.d.ts +2 -0
  223. package/ts/esm/poller.test.d.ts.map +1 -0
  224. package/ts/esm/poller.test.js +93 -0
  225. package/ts/esm/poller.test.js.map +1 -0
  226. package/ts/esm/resolve-once.d.ts +4 -4
  227. package/ts/esm/resolve-once.d.ts.map +1 -1
  228. package/ts/esm/utils/index.d.ts +1 -0
  229. package/ts/esm/utils/index.d.ts.map +1 -1
  230. package/ts/esm/utils/index.js +1 -0
  231. package/ts/esm/utils/index.js.map +1 -1
  232. package/ts/esm/utils/promise-sleep.d.ts +2 -0
  233. package/ts/esm/utils/promise-sleep.d.ts.map +1 -0
  234. package/ts/esm/utils/promise-sleep.js +30 -0
  235. package/ts/esm/utils/promise-sleep.js.map +1 -0
  236. package/ts/esm/version.js +1 -1
  237. package/tsconfig.json +25 -0
@@ -0,0 +1,67 @@
1
+ import { command, option, string } from "cmd-ts";
2
+ import * as process from "node:process";
3
+ import { SemVer } from "semver";
4
+ import { versionFromPackageJson } from "./utils.js";
5
+
6
+ // Regex patterns for version parsing
7
+ const reVersionAlphaStart = /^[a-z](\d+\.\d+\.\d+.*)$/;
8
+ // const reVersionOptionalAlphaStart = /^[a-z]?(\d+\.\d+\.\d+.*)$/;
9
+ const reScopedVersion = /^[^@]+@(.*)$/;
10
+ const reEndVersion = /.*\/([^/]+)$/;
11
+
12
+ function getEnvVersion(version?: string, xenv = process.env): string {
13
+ let wversion = version || xenv.GITHUB_REF || versionFromPackageJson();
14
+ if (reEndVersion.test(wversion)) {
15
+ wversion = wversion.match(reEndVersion)[1];
16
+ }
17
+ const calculatedVersion = wversion.replace(reScopedVersion, "$1").replace(reVersionAlphaStart, "$1");
18
+ try {
19
+ new SemVer(calculatedVersion);
20
+ return calculatedVersion;
21
+ } catch (e) {
22
+ // Fallback to package.json version if parsing fails
23
+ return versionFromPackageJson();
24
+ }
25
+ }
26
+
27
+ export function publishTagsCmd(): ReturnType<typeof command> {
28
+ return command({
29
+ name: "publish-tags",
30
+ description: "Calculate npm publish tags based on version",
31
+ version: "1.0.0",
32
+ args: {
33
+ releaseVersion: option({
34
+ long: "release-version",
35
+ short: "r",
36
+ defaultValue: () => undefined,
37
+ defaultValueIsSerializable: true,
38
+ type: string,
39
+ description: "Version string to analyze, defaults to GITHUB_REF or package.json version.",
40
+ }),
41
+ },
42
+ handler: (args) => {
43
+ const calculatedVersion = getEnvVersion(args.releaseVersion);
44
+ const tags: string[] = [];
45
+
46
+ try {
47
+ const semVer = new SemVer(calculatedVersion);
48
+ // Check if the last prerelease identifier is a string
49
+ if (semVer.prerelease.length > 0) {
50
+ const lastIdentifier = semVer.prerelease[semVer.prerelease.length - 1];
51
+ if (typeof lastIdentifier === "string") {
52
+ tags.push("dev");
53
+ }
54
+ }
55
+ } catch (e) {
56
+ // eslint-disable-next-line no-console
57
+ console.warn(`Warn parsing version ${calculatedVersion}:`, e);
58
+ }
59
+
60
+ // Output the --tag options if there are tags
61
+ if (tags.length > 0) {
62
+ // eslint-disable-next-line no-console
63
+ console.log(tags.map((tag) => `--tag ${tag}`).join(" "));
64
+ }
65
+ },
66
+ }) as ReturnType<typeof command>;
67
+ }
package/src/cli/run.sh CHANGED
@@ -1,2 +1,11 @@
1
1
  #!/bin/bash
2
- exec pnpm exec tsx $(dirname $0)/main.ts $@
2
+ TSX="npx tsx"
3
+ if [ -x ./node_modules/.bin/tsx ]
4
+ then
5
+ TSX=./node_modules/.bin/tsx
6
+ fi
7
+ if [ -x ../node_modules/.bin/tsx ]
8
+ then
9
+ TSX=../node_modules/.bin/tsx
10
+ fi
11
+ exec $TSX $(dirname $0)/main.ts $@
@@ -0,0 +1,51 @@
1
+ import { command, option, string } from "cmd-ts";
2
+ import * as path from "node:path";
3
+ import * as fs from "node:fs";
4
+
5
+ // node ./setup-jsr-json.cjs ./pubdir/deno.json
6
+ function setupDenoJson(packageJsonFile: string, jsrJsonFile: string): void {
7
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonFile).toString()) as { dependencies: Record<string, string> };
8
+ const jsrJson = JSON.parse(fs.readFileSync(jsrJsonFile).toString()) as {
9
+ name: string;
10
+ exports: Record<string, string>;
11
+ imports: Record<string, string>;
12
+ };
13
+ // self imports
14
+ const jsrJsonImports = Object.fromEntries(Object.entries(jsrJson.exports ?? {}).map(([k, v]) => [path.join(jsrJson.name, k), v]));
15
+ const nodeJsonImports = Object.fromEntries(
16
+ Array.from(Object.entries(packageJson.dependencies ?? {})).map(([k, v]) => [k, `npm:${k}@${v.replace(/^npm:/, "")}`]),
17
+ );
18
+ jsrJson.imports = { ...jsrJson.imports, ...jsrJsonImports, ...nodeJsonImports };
19
+ fs.writeFileSync(jsrJsonFile, JSON.stringify(jsrJson, undefined, 2) + "\n");
20
+ }
21
+
22
+ export function setUpDenoJsonCmd(): ReturnType<typeof command> {
23
+ return command({
24
+ name: "setup-deno-json",
25
+ description: "setup deno.json",
26
+ version: "1.0.0",
27
+ args: {
28
+ packageJson: option({
29
+ long: "packageJson",
30
+ short: "p",
31
+ defaultValue: () => "package.json",
32
+ defaultValueIsSerializable: true,
33
+ type: string,
34
+ description: "Path to the package.json file, defaults to './package.json'.",
35
+ }),
36
+ jsrJson: option({
37
+ long: "jsrJson",
38
+ short: "j",
39
+ defaultValue: () => "deno.json",
40
+ defaultValueIsSerializable: true,
41
+ type: string,
42
+ description: "Path to the deno.json file, defaults to './deno.json'.",
43
+ }),
44
+ },
45
+ handler: (args) => {
46
+ // eslint-disable-next-line no-console
47
+ console.log(`Setup deno.json ${args.jsrJson} from ${args.packageJson}`);
48
+ setupDenoJson(args.packageJson, args.jsrJson);
49
+ },
50
+ }) as ReturnType<typeof command>;
51
+ }
@@ -0,0 +1,70 @@
1
+ import * as ts from "typescript";
2
+ import * as path from "node:path";
3
+ import * as fs from "node:fs";
4
+ import * as process from "node:process";
5
+ import { $ } from "zx";
6
+
7
+ // Custom compiler host
8
+ export function createCompilerHost(options: ts.CompilerOptions, version: string): ts.CompilerHost {
9
+ const host = ts.createCompilerHost(options);
10
+ // eslint-disable-next-line @typescript-eslint/unbound-method
11
+ const myGetSourceFile = host.getSourceFile;
12
+
13
+ host.getSourceFile = (fileName, languageVersion, onError, shouldCreateNewSourceFile): ts.SourceFile => {
14
+ const sourceFile = myGetSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile);
15
+ if (!sourceFile) {
16
+ throw new Error("getSourceFile is not defined");
17
+ }
18
+
19
+ // Patch version.ts during compilation
20
+ if (fileName.endsWith("version.ts") && sourceFile) {
21
+ const newText = `export const VERSION: string = "${version}";`;
22
+ return ts.createSourceFile(fileName, newText, languageVersion);
23
+ }
24
+
25
+ return sourceFile;
26
+ };
27
+ return host;
28
+ }
29
+
30
+ export function readTSConfig(configPath = "./tsconfig.json"): ts.CompilerOptions {
31
+ // Read the config file
32
+ // eslint-disable-next-line @typescript-eslint/unbound-method
33
+ const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
34
+
35
+ if (configFile.error) {
36
+ throw new Error(`Error reading tsconfig: ${configFile.error.messageText as string}`);
37
+ }
38
+
39
+ // Parse and resolve the config
40
+ const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(configPath), undefined, configPath);
41
+
42
+ if (parsedConfig.errors.length > 0) {
43
+ const errors = parsedConfig.errors.map((err) => err.messageText as string).join("\n");
44
+ throw new Error(`Error parsing tsconfig: ${errors}`);
45
+ }
46
+
47
+ return parsedConfig.options; // This is CompilerOptions
48
+ }
49
+
50
+ export function versionFromPackageJson(): string {
51
+ const packageJson = JSON.parse(fs.readFileSync("package.json").toString()) as { version: string };
52
+ return packageJson.version;
53
+ }
54
+
55
+ export function getVersion(iversion?: string): string {
56
+ const ghref = iversion || process.env.GITHUB_REF || versionFromPackageJson() || "a/v0.0.0-smoke";
57
+ let lastPart = ghref.split("/").slice(-1)[0];
58
+ if (iversion) {
59
+ return iversion.replace(/^[vdsp]/, "");
60
+ }
61
+ const short = $.sync`git rev-parse --short HEAD`.stdout.trim();
62
+ if (process.env.GITHUB_REF) {
63
+ lastPart = lastPart.replace(/^[vdsp]/, "");
64
+ if (lastPart.match(/^\d+\.\d+\.\d+/)) {
65
+ return lastPart;
66
+ }
67
+ return `0.0.0-dev-ci-${short}`;
68
+ }
69
+ return `0.0.0-dev-local-${Date.now()}`;
70
+ }
package/src/future.ts CHANGED
@@ -1,4 +1,4 @@
1
- export class Future<T> {
1
+ export class Future<T, CTX = void> {
2
2
  // readonly id = Math.random();
3
3
  readonly #promise: Promise<T>;
4
4
  #resolveFn: (value: T) => void = () => {
@@ -8,7 +8,9 @@ export class Future<T> {
8
8
  throw new Error("This Promise is not working as expected.");
9
9
  };
10
10
 
11
- constructor() {
11
+ readonly ctx: CTX;
12
+ constructor(ctx?: CTX) {
13
+ this.ctx = ctx;
12
14
  this.#promise = new Promise<T>((resolve, reject) => {
13
15
  this.#resolveFn = resolve;
14
16
  this.#rejectFn = reject;
package/src/index.ts CHANGED
@@ -28,6 +28,7 @@ export * from "./is-promise.js";
28
28
  export * from "./app-context.js";
29
29
  export * from "./load-asset.js";
30
30
  export * from "./mutable-url.js";
31
+ export * from "./poller.js";
31
32
 
32
33
  // ugly
33
34
  export * as utils from "./utils/index.js";
package/src/poller.ts ADDED
@@ -0,0 +1,68 @@
1
+ import { sleep } from "./utils/promise-sleep.js";
2
+
3
+ export interface PollWaitingActionResult {
4
+ readonly state: "waiting";
5
+ }
6
+
7
+ export interface PollSuccessActionResult<T> {
8
+ readonly state: "success";
9
+ readonly result: T;
10
+ }
11
+
12
+ export interface PollErrorActionResult {
13
+ readonly state: "error";
14
+ readonly error: Error;
15
+ }
16
+
17
+ export type PollActionResult<T> = PollWaitingActionResult | PollSuccessActionResult<T> | PollErrorActionResult;
18
+ export interface PollerOptions {
19
+ readonly intervalMs: number;
20
+ readonly timeoutMs: number;
21
+ }
22
+
23
+ export type PollerResult<T> = PollSuccessActionResult<T> | PollErrorActionResult;
24
+
25
+ async function interPoller<T>(fn: () => Promise<PollActionResult<T>>, options: PollerOptions): Promise<PollerResult<T>> {
26
+ do {
27
+ let result: PollActionResult<T>;
28
+ try {
29
+ result = await fn();
30
+ switch (result.state) {
31
+ case "waiting":
32
+ await sleep(options.intervalMs);
33
+ break;
34
+ case "success":
35
+ return result;
36
+ case "error":
37
+ return result;
38
+ }
39
+ } catch (err) {
40
+ return {
41
+ state: "error",
42
+ error: err as Error,
43
+ };
44
+ }
45
+ // eslint-disable-next-line no-constant-condition
46
+ } while (true);
47
+ }
48
+
49
+ export async function poller<T>(
50
+ fn: () => Promise<PollActionResult<T>>,
51
+ ioptions: Partial<PollerOptions> = {},
52
+ ): Promise<PollerResult<T>> {
53
+ const options = {
54
+ intervalMs: 1000,
55
+ timeoutMs: 30000,
56
+ ...ioptions,
57
+ };
58
+ return Promise.race([
59
+ interPoller(fn, options),
60
+ (async (): Promise<PollErrorActionResult> => {
61
+ await sleep(options.timeoutMs);
62
+ return {
63
+ state: "error",
64
+ error: new Error("Polling timed out"),
65
+ };
66
+ })(),
67
+ ]);
68
+ }
@@ -81,7 +81,7 @@ type ResolveState = "initial" | "processed" | "waiting" | "processing";
81
81
  // export type VoidEqualUndefined<T> = T extends undefined ? void : T
82
82
  export type ResultOnce<R> = R extends Promise<infer T> ? Promise<T> : R;
83
83
 
84
- interface ResolveOnceIf<R, CTX = void> {
84
+ export interface ResolveOnceIf<R, CTX = void> {
85
85
  get ready(): boolean;
86
86
  get value(): UnPromisify<R> | undefined;
87
87
  get error(): Error | undefined;
@@ -398,7 +398,7 @@ export interface KeyedParam<K, V> {
398
398
  readonly lru: Partial<LRUParam<V, K>>;
399
399
  }
400
400
 
401
- type AddKeyedParam<K, V, CTX extends NonNullable<object>> = KeyedParam<K, V> & { readonly ctx: CTX };
401
+ export type AddKeyedParam<K, V, CTX extends NonNullable<object>> = KeyedParam<K, V> & { readonly ctx: CTX };
402
402
 
403
403
  export class Keyed<T extends { reset: () => void }, K = string, CTX extends NonNullable<object> = object> {
404
404
  protected readonly _map: LRUMap<K, T>;
@@ -468,7 +468,7 @@ export class Keyed<T extends { reset: () => void }, K = string, CTX extends NonN
468
468
  }
469
469
  }
470
470
 
471
- interface KeyItem<K, V> {
471
+ export interface KeyItem<K, V> {
472
472
  readonly key: K;
473
473
  readonly value: Result<V>;
474
474
  }
@@ -505,7 +505,7 @@ export class KeyedResolvOnce<T, K = string, CTX extends NonNullable<object> = ob
505
505
  }
506
506
  }
507
507
 
508
- type AddKey<X extends NonNullable<object>, K> = X & { key: K };
508
+ export type AddKey<X extends NonNullable<object>, K> = X & { key: K };
509
509
  type WithCTX<K, T, CTX extends NonNullable<object>> = KeyedParam<K, ResolveSeq<T, AddKey<CTX, K>>> & { readonly ctx: CTX };
510
510
 
511
511
  export class KeyedResolvSeq<T extends NonNullable<unknown>, K = string, CTX extends NonNullable<object> = object> extends Keyed<
@@ -11,3 +11,4 @@ export * from "./uint8array-equal.js";
11
11
  export * from "./coerce-uint8.js";
12
12
  export * from "./consume.js";
13
13
  export * from "./to-sorted.js";
14
+ export * from "./promise-sleep.js";
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Pause execution for the given number of milliseconds.
3
+ *
4
+ * Example:
5
+ * await sleep(500);
6
+ *
7
+ * Optionally accepts an AbortSignal to cancel the sleep (will reject with an AbortError).
8
+ */
9
+ export function sleep(ms: number, signal?: AbortSignal): Promise<void> {
10
+ return new Promise<void>((resolve, reject) => {
11
+ if (ms <= 0) {
12
+ resolve();
13
+ return;
14
+ }
15
+
16
+ if (signal?.aborted) {
17
+ const err = new Error("Aborted");
18
+ (err as { name: string }).name = "AbortError";
19
+ reject(err);
20
+ return;
21
+ }
22
+
23
+ const id = setTimeout(() => {
24
+ cleanup();
25
+ resolve();
26
+ }, ms);
27
+
28
+ const onAbort = (): void => {
29
+ cleanup();
30
+ const err = new Error("Aborted");
31
+ (err as { name: string }).name = "AbortError";
32
+ reject(err);
33
+ };
34
+
35
+ function cleanup(): void {
36
+ clearTimeout(id);
37
+ signal?.removeEventListener("abort", onAbort);
38
+ }
39
+
40
+ signal?.addEventListener("abort", onAbort, { once: true });
41
+ });
42
+ }
@@ -0,0 +1,3 @@
1
+ import { command } from "cmd-ts";
2
+ export declare function generateVersionTsCmd(): ReturnType<typeof command>;
3
+ //# sourceMappingURL=generate-version-ts-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-version-ts-cmd.d.ts","sourceRoot":"","sources":["../../../../src/cli/generate-version-ts-cmd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAkB,MAAM,QAAQ,CAAC;AAGjD,wBAAgB,oBAAoB,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC,CAsCjE"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateVersionTsCmd = generateVersionTsCmd;
37
+ const ts = __importStar(require("typescript"));
38
+ const cmd_ts_1 = require("cmd-ts");
39
+ const utils_js_1 = require("./utils.js");
40
+ function generateVersionTsCmd() {
41
+ return (0, cmd_ts_1.command)({
42
+ name: "fireproof build cli",
43
+ description: "helps to build fp",
44
+ version: "1.0.0",
45
+ args: {
46
+ version: (0, cmd_ts_1.option)({
47
+ long: "version",
48
+ short: "v",
49
+ defaultValue: () => (0, utils_js_1.getVersion)(),
50
+ defaultValueIsSerializable: true,
51
+ type: cmd_ts_1.string,
52
+ description: "Version to patch in, defaults to reading from package.json.",
53
+ }),
54
+ versionFile: (0, cmd_ts_1.option)({
55
+ long: "versionFile",
56
+ short: "f",
57
+ defaultValue: () => "src/version.ts",
58
+ defaultValueIsSerializable: true,
59
+ type: cmd_ts_1.string,
60
+ description: "Path to the file containing the version, defaults to './src/version.ts'.",
61
+ }),
62
+ tsconfig: (0, cmd_ts_1.option)({
63
+ long: "tsconfig",
64
+ short: "t",
65
+ defaultValue: () => "tsconfig.json",
66
+ defaultValueIsSerializable: true,
67
+ type: cmd_ts_1.string,
68
+ description: "Path to the tsconfig.json file, defaults to './tsconfig.json'.",
69
+ }),
70
+ },
71
+ handler: (args) => {
72
+ const options = (0, utils_js_1.readTSConfig)(args.tsconfig);
73
+ const host = (0, utils_js_1.createCompilerHost)(options, args.version);
74
+ const program = ts.createProgram([args.versionFile], options, host);
75
+ program.emit();
76
+ },
77
+ });
78
+ }
79
+ //# sourceMappingURL=generate-version-ts-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-version-ts-cmd.js","sourceRoot":"","sources":["../../../../src/cli/generate-version-ts-cmd.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAY,EAAE,uCAAmB;AACjC,mCAAiD;AACjD,yCAA0E;AAE1E,gCAAmE;IACjE,OAAO,IAAA,gBAAO,EAAC;QACb,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,mBAAmB;QAChC,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,OAAO,EAAE,IAAA,eAAM,EAAC;gBACd,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,GAAG;gBACV,YAAY,EAAE,GAAG,EAAE,CAAC,IAAA,qBAAU,GAAE;gBAChC,0BAA0B,EAAE,IAAI;gBAChC,IAAI,EAAE,eAAM;gBACZ,WAAW,EAAE,6DAA6D;aAC3E,CAAC;YACF,WAAW,EAAE,IAAA,eAAM,EAAC;gBAClB,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,GAAG;gBACV,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB;gBACpC,0BAA0B,EAAE,IAAI;gBAChC,IAAI,EAAE,eAAM;gBACZ,WAAW,EAAE,0EAA0E;aACxF,CAAC;YACF,QAAQ,EAAE,IAAA,eAAM,EAAC;gBACf,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,GAAG;gBACV,YAAY,EAAE,GAAG,EAAE,CAAC,eAAe;gBACnC,0BAA0B,EAAE,IAAI;gBAChC,IAAI,EAAE,eAAM;gBACZ,WAAW,EAAE,gEAAgE;aAC9E,CAAC;SACH;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAA,6BAAkB,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,EAAE,CAAC;QAAA,CAChB;KACF,CAA+B,CAAC;AAAA,CAClC"}
@@ -2,6 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const cmd_ts_1 = require("cmd-ts");
4
4
  const patch_version_cmd_js_1 = require("./patch-version-cmd.js");
5
+ const generate_version_ts_cmd_js_1 = require("./generate-version-ts-cmd.js");
6
+ const setup_deno_json_cmd_js_1 = require("./setup-deno-json-cmd.js");
7
+ const prepare_pubdir_cmd_js_1 = require("./prepare-pubdir-cmd.js");
8
+ const publish_tags_cmd_js_1 = require("./publish-tags-cmd.js");
5
9
  (async () => {
6
10
  const cmd = (0, cmd_ts_1.subcommands)({
7
11
  name: "cement",
@@ -9,9 +13,10 @@ const patch_version_cmd_js_1 = require("./patch-version-cmd.js");
9
13
  version: "1.0.0",
10
14
  cmds: {
11
15
  patchVersion: (0, patch_version_cmd_js_1.patchVersionCmd)(),
12
- generateVersionTs: (0, patch_version_cmd_js_1.generateVersionTsCmd)(),
13
- setUpDenoJson: (0, patch_version_cmd_js_1.setUpDenoJsonCmd)(),
14
- preparePubdir: (0, patch_version_cmd_js_1.preparePubdirCmd)(),
16
+ generateVersionTs: (0, generate_version_ts_cmd_js_1.generateVersionTsCmd)(),
17
+ setUpDenoJson: (0, setup_deno_json_cmd_js_1.setUpDenoJsonCmd)(),
18
+ preparePubdir: (0, prepare_pubdir_cmd_js_1.preparePubdirCmd)(),
19
+ publishTags: (0, publish_tags_cmd_js_1.publishTagsCmd)(),
15
20
  },
16
21
  });
17
22
  await (0, cmd_ts_1.run)(cmd, process.argv.slice(2));
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/cli/main.ts"],"names":[],"mappings":";;AAAA,mCAA0C;AAC1C,iEAAmH;AAEnH,CAAC,KAAK,IAAmB,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAA,oBAAW,EAAC;QACtB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,YAAY,EAAE,IAAA,sCAAe,GAAE;YAC/B,iBAAiB,EAAE,IAAA,2CAAoB,GAAE;YACzC,aAAa,EAAE,IAAA,uCAAgB,GAAE;YACjC,aAAa,EAAE,IAAA,uCAAgB,GAAE;SAClC;KACF,CAAC,CAAC;IAEH,MAAM,IAAA,YAAG,EAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,CAEvC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/cli/main.ts"],"names":[],"mappings":";;AAAA,mCAA0C;AAC1C,iEAAyD;AACzD,6EAAoE;AACpE,qEAA4D;AAC5D,mEAA2D;AAC3D,+DAAuD;AAEvD,CAAC,KAAK,IAAmB,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAA,oBAAW,EAAC;QACtB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,YAAY,EAAE,IAAA,sCAAe,GAAE;YAC/B,iBAAiB,EAAE,IAAA,iDAAoB,GAAE;YACzC,aAAa,EAAE,IAAA,yCAAgB,GAAE;YACjC,aAAa,EAAE,IAAA,wCAAgB,GAAE;YACjC,WAAW,EAAE,IAAA,oCAAc,GAAE;SAC9B;KACF,CAAC,CAAC;IAEH,MAAM,IAAA,YAAG,EAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,CAEvC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1,7 +1,3 @@
1
1
  import { command } from "cmd-ts";
2
- export declare function generateVersionTsCmd(): ReturnType<typeof command>;
3
2
  export declare function patchVersionCmd(): ReturnType<typeof command>;
4
- export declare function setUpDenoJsonCmd(): ReturnType<typeof command>;
5
- export declare function preparePubdir(pubdir: string, version: string, baseDir: string, srcDir: string): Promise<void>;
6
- export declare function preparePubdirCmd(): ReturnType<typeof command>;
7
3
  //# sourceMappingURL=patch-version-cmd.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"patch-version-cmd.d.ts","sourceRoot":"","sources":["../../../../src/cli/patch-version-cmd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAmC,MAAM,QAAQ,CAAC;AAkFlE,wBAAgB,oBAAoB,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC,CAajE;AAmBD,wBAAgB,eAAe,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC,CA+B5D;AAmBD,wBAAgB,gBAAgB,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC,CA6B7D;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFnH;AAED,wBAAgB,gBAAgB,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC,CA2C7D"}
1
+ {"version":3,"file":"patch-version-cmd.d.ts","sourceRoot":"","sources":["../../../../src/cli/patch-version-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAmC,MAAM,QAAQ,CAAC;AAKlE,wBAAgB,eAAe,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC,CA+B5D"}