monocrate 0.3.0 → 0.4.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.
Files changed (67) hide show
  1. package/dist/assemble.d.ts +3 -2
  2. package/dist/assemble.d.ts.map +1 -1
  3. package/dist/assemble.js +16 -6
  4. package/dist/assemble.js.map +1 -1
  5. package/dist/collect-package-locations.d.ts +48 -0
  6. package/dist/collect-package-locations.d.ts.map +1 -0
  7. package/dist/collect-package-locations.js +49 -0
  8. package/dist/collect-package-locations.js.map +1 -0
  9. package/dist/compute-package-closure.d.ts +3 -0
  10. package/dist/compute-package-closure.d.ts.map +1 -0
  11. package/dist/{build-dependency-graph.js → compute-package-closure.js} +5 -4
  12. package/dist/compute-package-closure.js.map +1 -0
  13. package/dist/{dist-copier.d.ts → file-copier.d.ts} +2 -3
  14. package/dist/file-copier.d.ts.map +1 -0
  15. package/dist/file-copier.js +38 -0
  16. package/dist/file-copier.js.map +1 -0
  17. package/dist/get-files-to-pack.d.ts +10 -0
  18. package/dist/get-files-to-pack.d.ts.map +1 -0
  19. package/dist/get-files-to-pack.js +46 -0
  20. package/dist/get-files-to-pack.js.map +1 -0
  21. package/dist/import-rewriter.d.ts.map +1 -1
  22. package/dist/import-rewriter.js +2 -3
  23. package/dist/import-rewriter.js.map +1 -1
  24. package/dist/monocrate.d.ts.map +1 -1
  25. package/dist/monocrate.js +8 -58
  26. package/dist/monocrate.js.map +1 -1
  27. package/dist/package-closure.d.ts +14 -0
  28. package/dist/package-closure.d.ts.map +1 -0
  29. package/dist/package-closure.js +2 -0
  30. package/dist/package-closure.js.map +1 -0
  31. package/dist/package-json.d.ts +1 -0
  32. package/dist/package-json.d.ts.map +1 -1
  33. package/dist/package-json.js +1 -0
  34. package/dist/package-json.js.map +1 -1
  35. package/dist/package-map.d.ts +30 -6
  36. package/dist/package-map.d.ts.map +1 -1
  37. package/dist/publish.d.ts +2 -0
  38. package/dist/publish.d.ts.map +1 -0
  39. package/dist/publish.js +8 -0
  40. package/dist/publish.js.map +1 -0
  41. package/dist/resolve-version.d.ts +3 -0
  42. package/dist/resolve-version.d.ts.map +1 -0
  43. package/dist/resolve-version.js +40 -0
  44. package/dist/resolve-version.js.map +1 -0
  45. package/dist/rewrite-package-json.d.ts +3 -0
  46. package/dist/rewrite-package-json.d.ts.map +1 -0
  47. package/dist/rewrite-package-json.js +21 -0
  48. package/dist/rewrite-package-json.js.map +1 -0
  49. package/dist/version-specifier.d.ts +8 -0
  50. package/dist/version-specifier.d.ts.map +1 -0
  51. package/dist/version-specifier.js +17 -0
  52. package/dist/version-specifier.js.map +1 -0
  53. package/package.json +2 -1
  54. package/dist/build-dependency-graph.d.ts +0 -8
  55. package/dist/build-dependency-graph.d.ts.map +0 -1
  56. package/dist/build-dependency-graph.js.map +0 -1
  57. package/dist/build-package-map.d.ts +0 -4
  58. package/dist/build-package-map.d.ts.map +0 -1
  59. package/dist/build-package-map.js +0 -43
  60. package/dist/build-package-map.js.map +0 -1
  61. package/dist/dist-copier.d.ts.map +0 -1
  62. package/dist/dist-copier.js +0 -44
  63. package/dist/dist-copier.js.map +0 -1
  64. package/dist/transform-package-json.d.ts +0 -5
  65. package/dist/transform-package-json.d.ts.map +0 -1
  66. package/dist/transform-package-json.js +0 -19
  67. package/dist/transform-package-json.js.map +0 -1
@@ -1,3 +1,4 @@
1
- import type { DependencyGraph } from './build-dependency-graph.js';
2
- export declare function assemble(graph: DependencyGraph, monorepoRoot: string, outputDir: string): Promise<void>;
1
+ import type { PackageClosure } from './package-closure.js';
2
+ import type { VersionSpecifier } from './version-specifier.js';
3
+ export declare function assemble(closure: PackageClosure, monorepoRoot: string, outputDir: string, versionSpecifier: VersionSpecifier | undefined): Promise<void>;
3
4
  //# sourceMappingURL=assemble.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../src/assemble.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAElE,wBAAsB,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7G"}
1
+ {"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../src/assemble.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,GAC7C,OAAO,CAAC,IAAI,CAAC,CAcf"}
package/dist/assemble.js CHANGED
@@ -1,11 +1,21 @@
1
1
  import * as fsPromises from 'node:fs/promises';
2
- import { buildPackageMap } from './build-package-map.js';
3
- import { DistCopier } from './dist-copier.js';
2
+ import { collectPackageLocations } from './collect-package-locations.js';
3
+ import { FileCopier } from './file-copier.js';
4
4
  import { ImportRewriter } from './import-rewriter.js';
5
- export async function assemble(graph, monorepoRoot, outputDir) {
6
- const packageMap = buildPackageMap(graph, monorepoRoot);
5
+ import { resolveVersion } from './resolve-version.js';
6
+ import { rewritePackageJson } from './rewrite-package-json.js';
7
+ export async function assemble(closure, monorepoRoot, outputDir, versionSpecifier) {
8
+ const locations = await collectPackageLocations(closure, monorepoRoot);
9
+ const packageMap = new Map(locations.map((at) => [at.name, at]));
7
10
  await fsPromises.mkdir(outputDir, { recursive: true });
8
- const copiedFiles = await new DistCopier(packageMap, outputDir).copy();
9
- await new ImportRewriter(packageMap, outputDir).rewriteAll(copiedFiles);
11
+ const [newVersion] = await Promise.all([
12
+ versionSpecifier ? await resolveVersion(closure.subjectPackageName, versionSpecifier) : Promise.resolve(undefined),
13
+ (async () => {
14
+ const copiedFiles = await new FileCopier(packageMap, outputDir).copy();
15
+ await new ImportRewriter(packageMap, outputDir).rewriteAll(copiedFiles);
16
+ })(),
17
+ ]);
18
+ // This must happen after file copying completes (otherwise the rewritten package.json could be overwritten)
19
+ rewritePackageJson(closure, newVersion, outputDir);
10
20
  }
11
21
  //# sourceMappingURL=assemble.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../src/assemble.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGrD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAsB,EAAE,YAAoB,EAAE,SAAiB;IAC5F,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAEvD,MAAM,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEtD,MAAM,WAAW,GAAG,MAAM,IAAI,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAA;IACtE,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;AACzE,CAAC"}
1
+ {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../src/assemble.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAG9D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAuB,EACvB,YAAoB,EACpB,SAAiB,EACjB,gBAA8C;IAE9C,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACtE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAU,CAAC,CAAC,CAAA;IAEzE,MAAM,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACtD,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrC,gBAAgB,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QAClH,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,WAAW,GAAG,MAAM,IAAI,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAA;YACtE,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;QACzE,CAAC,CAAC,EAAE;KACL,CAAC,CAAA;IACF,4GAA4G;IAC5G,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;AACpD,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { PackageLocation } from './package-map.js';
2
+ import type { PackageClosure } from './package-closure.js';
3
+ /**
4
+ * Resolves an import specifier to a file path using Node.js resolution semantics.
5
+ * Handles both bare imports (subpath='') and subpath imports (subpath='utils/helper').
6
+ */
7
+ export declare function resolveImport(location: PackageLocation, subpath: string): string;
8
+ export declare function collectPackageLocations(closure: PackageClosure, monorepoRoot: string): Promise<{
9
+ name: string;
10
+ packageDir: string;
11
+ outputPrefix: string;
12
+ filesToCopy: string[];
13
+ packageJson: {
14
+ [x: string]: unknown;
15
+ name: string;
16
+ version?: string | undefined;
17
+ main?: string | undefined;
18
+ source?: string | undefined;
19
+ types?: string | undefined;
20
+ dependencies?: Partial<Record<string, string>> | undefined;
21
+ devDependencies?: Partial<Record<string, string>> | undefined;
22
+ peerDependencies?: Partial<Record<string, string>> | undefined;
23
+ description?: string | undefined;
24
+ keywords?: string[] | undefined;
25
+ author?: string | {
26
+ name: string;
27
+ email?: string | undefined;
28
+ } | undefined;
29
+ license?: string | undefined;
30
+ repository?: string | {
31
+ type: string;
32
+ url: string;
33
+ } | undefined;
34
+ homepage?: string | undefined;
35
+ bugs?: string | {
36
+ url?: string | undefined;
37
+ email?: string | undefined;
38
+ } | undefined;
39
+ engines?: Partial<Record<string, string>> | undefined;
40
+ bin?: string | Partial<Record<string, string>> | undefined;
41
+ type?: "module" | "commonjs" | undefined;
42
+ workspaces?: string[] | {
43
+ packages: string[];
44
+ } | undefined;
45
+ files?: string[] | undefined;
46
+ };
47
+ }[]>;
48
+ //# sourceMappingURL=collect-package-locations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-package-locations.d.ts","sourceRoot":"","sources":["../src/collect-package-locations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAyBhF;AAkBD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAU1F"}
@@ -0,0 +1,49 @@
1
+ import * as path from 'node:path';
2
+ import * as ResolveExports from 'resolve.exports';
3
+ import { getFilesToPack } from './get-files-to-pack.js';
4
+ /**
5
+ * Resolves an import specifier to a file path using Node.js resolution semantics.
6
+ * Handles both bare imports (subpath='') and subpath imports (subpath='utils/helper').
7
+ */
8
+ export function resolveImport(location, subpath) {
9
+ const entry = subpath === '' ? '.' : `./${subpath}`;
10
+ // Try exports field resolution (resolve.exports only handles the exports field, not main)
11
+ const resolved = ResolveExports.resolve(location.packageJson, entry);
12
+ if (resolved) {
13
+ // The exports field can map to an array of fallback paths. Node.js tries them in order and uses
14
+ // the first "processable" path (e.g., skips unsupported protocols), but does NOT fall back if the
15
+ // file is missing. Picking the first entry matches Node.js behavior.
16
+ // See: https://nodejs.org/api/packages.html#package-entry-points
17
+ const resolvedPath = Array.isArray(resolved) ? resolved[0] : resolved;
18
+ if (resolvedPath !== undefined) {
19
+ // The resolved path starts with './', remove it
20
+ const cleanPath = resolvedPath.startsWith('./') ? resolvedPath.slice(2) : resolvedPath;
21
+ return path.join(location.outputPrefix, cleanPath);
22
+ }
23
+ }
24
+ // No exports field or no matching export
25
+ if (subpath === '') {
26
+ // Bare import (e.g., import ... from '@myorg/pkg'): use main field, then index.js (Node.js default)
27
+ return path.join(location.outputPrefix, location.packageJson.main ?? 'index.js');
28
+ }
29
+ // Subpath import (e.g., import ... from '@myorg/pkg/utils/helper'): subpath relative to package root
30
+ return path.join(location.outputPrefix, `${subpath}.js`);
31
+ }
32
+ async function createPackageLocation(pkg, outputPrefix) {
33
+ const filesToCopy = await getFilesToPack(pkg.path);
34
+ return {
35
+ name: pkg.name,
36
+ packageDir: pkg.path,
37
+ outputPrefix,
38
+ filesToCopy,
39
+ packageJson: pkg.packageJson,
40
+ };
41
+ }
42
+ function computeDepOutputPrefix(dep, monorepoRoot) {
43
+ return path.join('deps', path.relative(monorepoRoot, dep.path));
44
+ }
45
+ export async function collectPackageLocations(closure, monorepoRoot) {
46
+ // TODO(imaman): use promises()
47
+ return Promise.all(closure.members.map((dep) => createPackageLocation(dep, dep.name === closure.subjectPackageName ? '' : computeDepOutputPrefix(dep, monorepoRoot))));
48
+ }
49
+ //# sourceMappingURL=collect-package-locations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-package-locations.js","sourceRoot":"","sources":["../src/collect-package-locations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,cAAc,MAAM,iBAAiB,CAAA;AAIjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAyB,EAAE,OAAe;IACtE,MAAM,KAAK,GAAG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAA;IAEnD,0FAA0F;IAC1F,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IACpE,IAAI,QAAQ,EAAE,CAAC;QACb,gGAAgG;QAChG,kGAAkG;QAClG,qEAAqE;QACrE,iEAAiE;QACjE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;QACrE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,gDAAgD;YAChD,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;YACtF,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,oGAAoG;QACpG,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,UAAU,CAAC,CAAA;IAClF,CAAC;IACD,qGAAqG;IACrG,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,OAAO,KAAK,CAAC,CAAA;AAC1D,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,GAAoB,EAAE,YAAoB;IAC7E,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAElD,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,UAAU,EAAE,GAAG,CAAC,IAAI;QACpB,YAAY;QACZ,WAAW;QACX,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAA;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAoB,EAAE,YAAoB;IACxE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAuB,EAAE,YAAoB;IACzF,+BAA+B;IAC/B,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC1B,qBAAqB,CACnB,GAAG,EACH,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,GAAG,EAAE,YAAY,CAAC,CACzF,CACF,CACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PackageClosure } from './package-closure.js';
2
+ export declare function computePackageClosure(sourceDir: string, monorepoRoot: string): Promise<PackageClosure>;
3
+ //# sourceMappingURL=compute-package-closure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-package-closure.d.ts","sourceRoot":"","sources":["../src/compute-package-closure.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwC5G"}
@@ -1,5 +1,5 @@
1
1
  import { discoverMonorepoPackages } from './monorepo.js';
2
- export async function buildDependencyGraph(sourceDir, monorepoRoot) {
2
+ export async function computePackageClosure(sourceDir, monorepoRoot) {
3
3
  const allRepoPackages = await discoverMonorepoPackages(monorepoRoot);
4
4
  const subjectPackage = [...allRepoPackages.values()].find((at) => at.path === sourceDir);
5
5
  if (!subjectPackage) {
@@ -23,6 +23,7 @@ export async function buildDependencyGraph(sourceDir, monorepoRoot) {
23
23
  }
24
24
  else {
25
25
  if (!(depName in allThirdPartyDeps)) {
26
+ // TODO(imaman): validate consistency of versions
26
27
  allThirdPartyDeps[depName] = depVersion;
27
28
  }
28
29
  }
@@ -30,9 +31,9 @@ export async function buildDependencyGraph(sourceDir, monorepoRoot) {
30
31
  }
31
32
  collectDeps(subjectPackage);
32
33
  return {
33
- subjectPackage,
34
- inRepoDeps: [...visited.values()].filter((at) => at !== subjectPackage),
34
+ subjectPackageName: subjectPackage.name,
35
+ members: [...visited.values()],
35
36
  allThirdPartyDeps,
36
37
  };
37
38
  }
38
- //# sourceMappingURL=build-dependency-graph.js.map
39
+ //# sourceMappingURL=compute-package-closure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-package-closure.js","sourceRoot":"","sources":["../src/compute-package-closure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAGxD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,SAAiB,EAAE,YAAoB;IACjF,MAAM,eAAe,GAAG,MAAM,wBAAwB,CAAC,YAAY,CAAC,CAAA;IACpE,MAAM,cAAc,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;IACxF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAA;IACtE,CAAC;IAED,MAAM,iBAAiB,GAAoC,EAAE,CAAA;IAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAA;IAElD,SAAS,WAAW,CAAC,GAAoB;QACvC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAM;QACR,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAE1B,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;YACvF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;YACjE,CAAC;YACD,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC/C,IAAI,UAAU,EAAE,CAAC;gBACf,oBAAoB;gBACpB,WAAW,CAAC,UAAU,CAAC,CAAA;YACzB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,CAAC,OAAO,IAAI,iBAAiB,CAAC,EAAE,CAAC;oBACpC,iDAAiD;oBACjD,iBAAiB,CAAC,OAAO,CAAC,GAAG,UAAU,CAAA;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW,CAAC,cAAc,CAAC,CAAA;IAE3B,OAAO;QACL,kBAAkB,EAAE,cAAc,CAAC,IAAI;QACvC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC9B,iBAAiB;KAClB,CAAA;AACH,CAAC"}
@@ -1,10 +1,9 @@
1
1
  import type { PackageMap } from './package-map.js';
2
- export declare class DistCopier {
2
+ export declare class FileCopier {
3
3
  private packageMap;
4
4
  private outputDir;
5
5
  constructor(packageMap: PackageMap, outputDir: string);
6
6
  copy(): Promise<string[]>;
7
7
  private collectCopyOperations;
8
- private copyDir;
9
8
  }
10
- //# sourceMappingURL=dist-copier.d.ts.map
9
+ //# sourceMappingURL=file-copier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-copier.d.ts","sourceRoot":"","sources":["../src/file-copier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAOlD,qBAAa,UAAU;IAEnB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;gBADT,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM;IAGrB,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAkB/B,OAAO,CAAC,qBAAqB;CAc9B"}
@@ -0,0 +1,38 @@
1
+ import * as fsPromises from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ export class FileCopier {
4
+ packageMap;
5
+ outputDir;
6
+ constructor(packageMap, outputDir) {
7
+ this.packageMap = packageMap;
8
+ this.outputDir = outputDir;
9
+ }
10
+ async copy() {
11
+ const operations = this.collectCopyOperations();
12
+ // Phase 1: Collect and create unique directories
13
+ const directories = new Set(operations.map((op) => path.dirname(op.destination)));
14
+ for (const dir of directories) {
15
+ await fsPromises.mkdir(dir, { recursive: true });
16
+ }
17
+ // Phase 2: Copy all files
18
+ const copiedFiles = [];
19
+ for (const op of operations) {
20
+ await fsPromises.copyFile(op.source, op.destination);
21
+ copiedFiles.push(op.destination);
22
+ }
23
+ return copiedFiles;
24
+ }
25
+ collectCopyOperations() {
26
+ const operations = [];
27
+ for (const location of this.packageMap.values()) {
28
+ for (const filePath of location.filesToCopy) {
29
+ operations.push({
30
+ source: path.join(location.packageDir, filePath),
31
+ destination: path.join(this.outputDir, location.outputPrefix, filePath),
32
+ });
33
+ }
34
+ }
35
+ return operations;
36
+ }
37
+ }
38
+ //# sourceMappingURL=file-copier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-copier.js","sourceRoot":"","sources":["../src/file-copier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAQjC,MAAM,OAAO,UAAU;IAEX;IACA;IAFV,YACU,UAAsB,EACtB,SAAiB;QADjB,eAAU,GAAV,UAAU,CAAY;QACtB,cAAS,GAAT,SAAS,CAAQ;IACxB,CAAC;IAEJ,KAAK,CAAC,IAAI;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAE/C,iDAAiD;QACjD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QACjF,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,CAAC;QAED,0BAA0B;QAC1B,MAAM,WAAW,GAAa,EAAE,CAAA;QAChC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,CAAA;YACpD,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;QAClC,CAAC;QACD,OAAO,WAAW,CAAA;IACpB,CAAC;IAEO,qBAAqB;QAC3B,MAAM,UAAU,GAAoB,EAAE,CAAA;QAEtC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAChD,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC5C,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;oBAChD,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC;iBACxE,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAA;IACnB,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Gets the list of files that npm would include in a package tarball.
3
+ * Uses `npm pack --dry-run --json` to get npm's exact file selection.
4
+ *
5
+ * @param packageDir - Absolute path to the package directory
6
+ * @returns Array of relative file paths that npm would include
7
+ * @example getFilesToPack("/home/user/my-package") => ["dist/index.js", "README.md", "package.json"]
8
+ */
9
+ export declare function getFilesToPack(packageDir: string): Promise<string[]>;
10
+ //# sourceMappingURL=get-files-to-pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-files-to-pack.d.ts","sourceRoot":"","sources":["../src/get-files-to-pack.ts"],"names":[],"mappings":"AAsBA;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyB1E"}
@@ -0,0 +1,46 @@
1
+ import { exec } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import { z } from 'zod';
4
+ const execAsync = promisify(exec);
5
+ const NpmPackFile = z.object({
6
+ path: z.string(),
7
+ });
8
+ const NpmPackResult = z.object({
9
+ files: z.array(NpmPackFile),
10
+ });
11
+ const NpmPackOutput = z.array(NpmPackResult);
12
+ const NpmPackError = z.object({
13
+ error: z.object({
14
+ summary: z.string(),
15
+ }),
16
+ });
17
+ /**
18
+ * Gets the list of files that npm would include in a package tarball.
19
+ * Uses `npm pack --dry-run --json` to get npm's exact file selection.
20
+ *
21
+ * @param packageDir - Absolute path to the package directory
22
+ * @returns Array of relative file paths that npm would include
23
+ * @example getFilesToPack("/home/user/my-package") => ["dist/index.js", "README.md", "package.json"]
24
+ */
25
+ export async function getFilesToPack(packageDir) {
26
+ const { stdout } = await execAsync('npm pack --dry-run --json', {
27
+ cwd: packageDir,
28
+ encoding: 'utf-8',
29
+ });
30
+ const json = JSON.parse(stdout);
31
+ // Check if npm returned an error
32
+ const errorResult = NpmPackError.safeParse(json);
33
+ if (errorResult.success) {
34
+ throw new Error(`npm pack failed: ${errorResult.data.error.summary}`);
35
+ }
36
+ const parsed = NpmPackOutput.safeParse(json);
37
+ if (!parsed.success) {
38
+ throw new Error(`Failed to parse npm pack output: ${parsed.error.message}`);
39
+ }
40
+ const packOutput = parsed.data[0];
41
+ if (packOutput === undefined) {
42
+ throw new Error('npm pack returned empty output');
43
+ }
44
+ return packOutput.files.map((f) => f.path);
45
+ }
46
+ //# sourceMappingURL=get-files-to-pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-files-to-pack.js","sourceRoot":"","sources":["../src/get-files-to-pack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;AAEjC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;CAC5B,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;AAE5C,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB,CAAC;CACH,CAAC,CAAA;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACrD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,2BAA2B,EAAE;QAC9D,GAAG,EAAE,UAAU;QACf,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAA;IAEF,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAExC,iCAAiC;IACjC,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAChD,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAC5C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"import-rewriter.d.ts","sourceRoot":"","sources":["../src/import-rewriter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,qBAAa,cAAc;IAEvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;gBADT,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM;IAGrB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAOlC,WAAW;IAqDzB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,mBAAmB;CAQ5B"}
1
+ {"version":3,"file":"import-rewriter.d.ts","sourceRoot":"","sources":["../src/import-rewriter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGlD,qBAAa,cAAc;IAEvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;gBADT,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM;IAGrB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAOlC,WAAW;IAqDzB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,mBAAmB;CAQ5B"}
@@ -1,5 +1,6 @@
1
1
  import * as path from 'node:path';
2
2
  import { Project, SyntaxKind } from 'ts-morph';
3
+ import { resolveImport } from './collect-package-locations.js';
3
4
  export class ImportRewriter {
4
5
  packageMap;
5
6
  outputDir;
@@ -66,9 +67,7 @@ export class ImportRewriter {
66
67
  if (!importeeLocation) {
67
68
  return undefined;
68
69
  }
69
- // Empty subpath means bare package import (e.g., '@myorg/utils' -> 'dist/index.js')
70
- // Non-empty subpath means subpath import (e.g., '@myorg/utils/foo' -> 'dist/foo')
71
- const pathAtImportee = subPath === '' ? importeeLocation.outputEntryPoint : importeeLocation.resolveSubpath(subPath);
70
+ const pathAtImportee = resolveImport(importeeLocation, subPath);
72
71
  return this.computeRelativePath(pathToImporter, pathAtImportee);
73
72
  }
74
73
  extractPackageName(specifier) {
@@ -1 +1 @@
1
- {"version":3,"file":"import-rewriter.js","sourceRoot":"","sources":["../src/import-rewriter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import-rewriter.js","sourceRoot":"","sources":["../src/import-rewriter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"monocrate.d.ts","sourceRoot":"","sources":["../src/monocrate.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAA;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;CACZ;AA2BD;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkE1E"}
1
+ {"version":3,"file":"monocrate.d.ts","sourceRoot":"","sources":["../src/monocrate.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAA;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B1E"}
package/dist/monocrate.js CHANGED
@@ -1,31 +1,11 @@
1
- import { spawnSync } from 'node:child_process';
2
1
  import * as fs from 'node:fs/promises';
3
2
  import * as os from 'node:os';
4
3
  import * as path from 'node:path';
5
- import { z } from 'zod';
6
4
  import { findMonorepoRoot } from './monorepo.js';
7
- import { buildDependencyGraph } from './build-dependency-graph.js';
5
+ import { computePackageClosure } from './compute-package-closure.js';
8
6
  import { assemble } from './assemble.js';
9
- import { transformPackageJson, writePackageJson } from './transform-package-json.js';
10
- const explicitVersionRegex = /^\d+\.\d+\.\d+$/;
11
- const VersionSpecifier = z.union([
12
- z.literal('patch'),
13
- z.literal('minor'),
14
- z.literal('major'),
15
- z.string().regex(explicitVersionRegex, 'Must be x.y.z format'),
16
- ]);
17
- function isExplicitVersion(value) {
18
- return explicitVersionRegex.test(value);
19
- }
20
- function getCurrentPublishedVersion(packageName) {
21
- const result = spawnSync('npm', ['view', packageName, 'version'], {
22
- encoding: 'utf-8',
23
- });
24
- if (result.status !== 0 || !result.stdout.trim()) {
25
- return '0.0.0';
26
- }
27
- return result.stdout.trim();
28
- }
7
+ import { publish } from './publish.js';
8
+ import { parseVersionSpecifier } from './version-specifier.js';
29
9
  /**
30
10
  * Assembles a monorepo package and its in-repo dependencies for npm publishing.
31
11
  * @param options - Configuration options for the assembly process
@@ -45,44 +25,14 @@ export async function monocrate(options) {
45
25
  const sourceDir = path.resolve(cwd, options.pathToSubjectPackage);
46
26
  const monorepoRoot = options.monorepoRoot ? path.resolve(cwd, options.monorepoRoot) : findMonorepoRoot(sourceDir);
47
27
  // Validate publish argument before any side effects
48
- let versionSpecifier;
49
- if (options.publishToVersion !== undefined) {
50
- const parseResult = VersionSpecifier.safeParse(options.publishToVersion);
51
- if (!parseResult.success) {
52
- throw new Error(`Invalid publish value: "${options.publishToVersion}". Expected "patch", "minor", "major" or an explicit version such as "1.2.3"`);
53
- }
54
- versionSpecifier = parseResult.data;
55
- }
28
+ const versionSpecifier = parseVersionSpecifier(options.publishToVersion);
56
29
  const outputDir = options.outputDir
57
30
  ? path.resolve(cwd, options.outputDir)
58
31
  : await fs.mkdtemp(path.join(os.tmpdir(), 'monocrate-'));
59
- const graph = await buildDependencyGraph(sourceDir, monorepoRoot);
60
- await assemble(graph, monorepoRoot, outputDir);
61
- const packageJson = transformPackageJson(graph);
62
- if (!versionSpecifier) {
63
- await writePackageJson(packageJson, outputDir);
64
- return outputDir;
65
- }
66
- // Publishing flow
67
- const packageName = graph.subjectPackage.packageJson.name;
68
- if (isExplicitVersion(versionSpecifier)) {
69
- await writePackageJson({ ...packageJson, version: versionSpecifier }, outputDir);
70
- }
71
- else {
72
- const currentVersion = getCurrentPublishedVersion(packageName);
73
- await writePackageJson({ ...packageJson, version: currentVersion }, outputDir);
74
- // --no-git-tag-version: bump version in package.json only, without creating a git tag (we're in a temp directory, not a git repo)
75
- const npmVersionResult = spawnSync('npm', ['version', versionSpecifier, '--no-git-tag-version'], {
76
- cwd: outputDir,
77
- stdio: 'inherit',
78
- });
79
- if (npmVersionResult.status !== 0) {
80
- throw new Error(`npm version failed with exit code ${String(npmVersionResult.status ?? 1)}`);
81
- }
82
- }
83
- const npmPublishResult = spawnSync('npm', ['publish'], { cwd: outputDir, stdio: 'inherit' });
84
- if (npmPublishResult.status !== 0) {
85
- throw new Error(`npm publish failed with exit code ${String(npmPublishResult.status ?? 1)}`);
32
+ const closure = await computePackageClosure(sourceDir, monorepoRoot);
33
+ await assemble(closure, monorepoRoot, outputDir, versionSpecifier);
34
+ if (versionSpecifier) {
35
+ publish(outputDir);
86
36
  }
87
37
  return outputDir;
88
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"monocrate.js","sourceRoot":"","sources":["../src/monocrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"monocrate.js","sourceRoot":"","sources":["../src/monocrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAiC9D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAyB;IACvD,yEAAyE;IACzE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACrC,MAAM,SAAS,GAAG,MAAM,EAAE;SACvB,IAAI,CAAC,GAAG,CAAC;SACT,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;IACrB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACjE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;IAEjH,oDAAoD;IACpD,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAExE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;QACjC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC;QACtC,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;IAE1D,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACpE,MAAM,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAA;IAElE,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,SAAS,CAAC,CAAA;IACpB,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { MonorepoPackage } from './monorepo.js';
2
+ /**
3
+ * The transitive closure of packages needed to publish a monorepo package. Computed by traversing dependencies
4
+ * starting from a subject package.
5
+ */
6
+ export interface PackageClosure {
7
+ /** The name of package we care about (the root of the closure). */
8
+ subjectPackageName: string;
9
+ /** The subject package all in-repo dependencies (direct or indirect dependencies). */
10
+ members: MonorepoPackage[];
11
+ /** Merged third-party dependencies from all packages in the closure. */
12
+ allThirdPartyDeps: Partial<Record<string, string>>;
13
+ }
14
+ //# sourceMappingURL=package-closure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-closure.d.ts","sourceRoot":"","sources":["../src/package-closure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,kBAAkB,EAAE,MAAM,CAAA;IAC1B,sFAAsF;IACtF,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,wEAAwE;IACxE,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACnD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=package-closure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-closure.js","sourceRoot":"","sources":["../src/package-closure.ts"],"names":[],"mappings":""}
@@ -33,6 +33,7 @@ export declare const PackageJson: z.ZodObject<{
33
33
  workspaces: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodObject<{
34
34
  packages: z.ZodArray<z.ZodString>;
35
35
  }, z.core.$strip>]>>;
36
+ files: z.ZodOptional<z.ZodArray<z.ZodString>>;
36
37
  }, z.core.$loose>;
37
38
  export type PackageJson = z.infer<typeof PackageJson>;
38
39
  //# sourceMappingURL=package-json.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsBd,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA"}
1
+ {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuBd,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA"}
@@ -20,6 +20,7 @@ export const PackageJson = z
20
20
  bin: z.union([z.string(), z.partialRecord(z.string(), z.string())]).optional(),
21
21
  type: z.enum(['module', 'commonjs']).optional(),
22
22
  workspaces: z.union([z.array(z.string()), z.object({ packages: z.array(z.string()) })]).optional(),
23
+ files: z.array(z.string()).optional(),
23
24
  })
24
25
  .loose();
25
26
  //# sourceMappingURL=package-json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,32 @@
1
- export type PackageMap = Map<string, {
1
+ import type { PackageJson } from './package-json.js';
2
+ export interface PackageLocation {
3
+ /**
4
+ * The package name from package.json
5
+ * @example "@myorg/utils"
6
+ */
2
7
  name: string;
3
- sourceDistDir: string;
4
- outputDistDir: string;
5
- outputEntryPoint: string;
6
- resolveSubpath(subpath: string): string;
7
- }>;
8
+ /**
9
+ * Absolute path to the source package directory
10
+ * @example "/home/user/monorepo/packages/utils"
11
+ */
12
+ packageDir: string;
13
+ /**
14
+ * Prefix for the output location. Empty string for the subject package,
15
+ * relative path under deps/ for in-repo dependencies
16
+ * @example "" (subject package)
17
+ * @example "deps/packages/utils" (in-repo dependency)
18
+ */
19
+ outputPrefix: string;
20
+ /**
21
+ * Individual file paths to copy, as determined by `npm pack --dry-run`.
22
+ * These are the exact files npm would include in the published tarball.
23
+ * @example ["dist/index.js", "dist/utils.js", "package.json"]
24
+ */
25
+ filesToCopy: string[];
26
+ /**
27
+ * The package.json contents, used for import resolution
28
+ */
29
+ packageJson: PackageJson;
30
+ }
31
+ export type PackageMap = Map<string, PackageLocation>;
8
32
  //# sourceMappingURL=package-map.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-map.d.ts","sourceRoot":"","sources":["../src/package-map.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,GAAG,CAC1B,MAAM,EACN;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CACxC,CACF,CAAA"}
1
+ {"version":3,"file":"package-map.d.ts","sourceRoot":"","sources":["../src/package-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;;;OAIG;IACH,WAAW,EAAE,MAAM,EAAE,CAAA;IAErB;;OAEG;IACH,WAAW,EAAE,WAAW,CAAA;CACzB;AAED,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function publish(outputDir: string): void;
2
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAEA,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,QAKxC"}
@@ -0,0 +1,8 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ export function publish(outputDir) {
3
+ const npmPublishResult = spawnSync('npm', ['publish'], { cwd: outputDir, stdio: 'inherit' });
4
+ if (npmPublishResult.status !== 0) {
5
+ throw new Error(`npm publish failed with exit code ${String(npmPublishResult.status ?? 1)}`);
6
+ }
7
+ }
8
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C,MAAM,UAAU,OAAO,CAAC,SAAiB;IACvC,MAAM,gBAAgB,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IAC5F,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;IAC9F,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { VersionSpecifier } from './version-specifier.js';
2
+ export declare function resolveVersion(packageName: string, versionSpecifier: VersionSpecifier): Promise<string>;
3
+ //# sourceMappingURL=resolve-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-version.d.ts","sourceRoot":"","sources":["../src/resolve-version.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAgC9D,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,mBAe3F"}
@@ -0,0 +1,40 @@
1
+ import { exec } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import { z } from 'zod';
4
+ const execAsync = promisify(exec);
5
+ const NpmErrorResponse = z.object({
6
+ error: z.object({
7
+ code: z.string().optional(),
8
+ detail: z.string().optional(),
9
+ }),
10
+ });
11
+ async function getCurrentPublishedVersion(packageName) {
12
+ const { stdout } = await execAsync(`npm view -s --json ${packageName} version`);
13
+ const parsed = JSON.parse(stdout);
14
+ const errorResult = NpmErrorResponse.safeParse(parsed);
15
+ if (errorResult.success) {
16
+ if (errorResult.data.error.code === 'E404') {
17
+ return '0.0.0';
18
+ }
19
+ throw new Error(`npm view failed (${errorResult.data.error.code ?? '<No Error Code>'}): ${errorResult.data.error.detail ?? '<No Further Details>'}`);
20
+ }
21
+ if (typeof parsed !== 'string') {
22
+ throw new Error(`Unexpected response from npm view: ${stdout}`);
23
+ }
24
+ return parsed;
25
+ }
26
+ export async function resolveVersion(packageName, versionSpecifier) {
27
+ if (versionSpecifier.tag === 'explicit') {
28
+ return versionSpecifier.value;
29
+ }
30
+ const currentVersion = await getCurrentPublishedVersion(packageName);
31
+ const nums = currentVersion.split('.').slice(0, 3).map(Number);
32
+ const index = { major: 0, minor: 1, patch: 2 }[versionSpecifier.tag];
33
+ const n = nums[index];
34
+ if (n === undefined) {
35
+ throw new Error(`Bad versionSpecifier: ${versionSpecifier.tag}`);
36
+ }
37
+ nums[index] = n + 1;
38
+ return nums.join('.');
39
+ }
40
+ //# sourceMappingURL=resolve-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-version.js","sourceRoot":"","sources":["../src/resolve-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;AAEjC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC;CACH,CAAC,CAAA;AAEF,KAAK,UAAU,0BAA0B,CAAC,WAAmB;IAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,sBAAsB,WAAW,UAAU,CAAC,CAAA;IAC/E,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAE1C,MAAM,WAAW,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACtD,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,oBAAoB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,iBAAiB,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,sBAAsB,EAAE,CACpI,CAAA;IACH,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,EAAE,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,gBAAkC;IAC1F,IAAI,gBAAgB,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;QACxC,OAAO,gBAAgB,CAAC,KAAK,CAAA;IAC/B,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,0BAA0B,CAAC,WAAW,CAAC,CAAA;IACpE,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAE9D,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACpE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IACrB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAA;IAClE,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACvB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PackageClosure } from './package-closure.js';
2
+ export declare function rewritePackageJson(closure: PackageClosure, version: string | undefined, outputDir: string): void;
3
+ //# sourceMappingURL=rewrite-package-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewrite-package-json.d.ts","sourceRoot":"","sources":["../src/rewrite-package-json.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,QAsBzG"}
@@ -0,0 +1,21 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ export function rewritePackageJson(closure, version, outputDir) {
4
+ const subject = closure.members.find((at) => at.name === closure.subjectPackageName);
5
+ if (!subject) {
6
+ throw new Error(`Incosistency in subject package name: "${closure.subjectPackageName}"`);
7
+ }
8
+ const { dependencies: _1, devDependencies: _2, ...rest } = subject.packageJson;
9
+ const rewritten = {
10
+ ...rest,
11
+ };
12
+ if (version) {
13
+ rewritten.version = version;
14
+ }
15
+ // Replace dependencies with flattened third-party deps (no workspace deps)
16
+ if (Object.keys(closure.allThirdPartyDeps).length > 0) {
17
+ rewritten.dependencies = closure.allThirdPartyDeps;
18
+ }
19
+ fs.writeFileSync(path.join(outputDir, 'package.json'), JSON.stringify(rewritten, null, 2) + '\n');
20
+ }
21
+ //# sourceMappingURL=rewrite-package-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewrite-package-json.js","sourceRoot":"","sources":["../src/rewrite-package-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAIjC,MAAM,UAAU,kBAAkB,CAAC,OAAuB,EAAE,OAA2B,EAAE,SAAiB;IACxG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAAA;IAC1F,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,CAAA;IAE9E,MAAM,SAAS,GAAgB;QAC7B,GAAG,IAAI;KACR,CAAA;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,SAAS,CAAC,OAAO,GAAG,OAAO,CAAA;IAC7B,CAAC;IAED,2EAA2E;IAC3E,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,SAAS,CAAC,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAA;IACpD,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AACnG,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type VersionSpecifier = {
2
+ tag: 'major' | 'minor' | 'patch';
3
+ } | {
4
+ tag: 'explicit';
5
+ value: string;
6
+ };
7
+ export declare function parseVersionSpecifier(value: string | undefined): VersionSpecifier | undefined;
8
+ //# sourceMappingURL=version-specifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-specifier.d.ts","sourceRoot":"","sources":["../src/version-specifier.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GAAG;IAAE,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AACxG,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAkB7F"}
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ const SemVerPart = z.union([z.literal('patch'), z.literal('minor'), z.literal('major')]);
3
+ export function parseVersionSpecifier(value) {
4
+ if (value === undefined) {
5
+ return undefined;
6
+ }
7
+ const parsedPart = SemVerPart.safeParse(value);
8
+ if (parsedPart.success) {
9
+ return { tag: parsedPart.data };
10
+ }
11
+ const isSemver = /^\d+\.\d+\.\d+(-[\w.-]+)?(\+[\w.-]+)?$/.test(value);
12
+ if (!isSemver) {
13
+ throw new Error(`Invalid publish value: "${value}". Expected "patch", "minor", "major" or an explicit version such as "1.2.3"`);
14
+ }
15
+ return { tag: 'explicit', value };
16
+ }
17
+ //# sourceMappingURL=version-specifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-specifier.js","sourceRoot":"","sources":["../src/version-specifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAExF,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC9C,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE,CAAA;IACjC,CAAC;IAED,MAAM,QAAQ,GAAG,wCAAwC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,2BAA2B,KAAK,8EAA8E,CAC/G,CAAA;IACH,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monocrate",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "From monorepo to npm in one command",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -68,6 +68,7 @@
68
68
  "citty": "^0.1.6",
69
69
  "esbuild": "^0.24.0",
70
70
  "glob": "^13.0.0",
71
+ "resolve.exports": "^2.0.3",
71
72
  "ts-morph": "^27.0.2",
72
73
  "zod": "^4.3.5"
73
74
  }
@@ -1,8 +0,0 @@
1
- import type { MonorepoPackage } from './monorepo.js';
2
- export interface DependencyGraph {
3
- subjectPackage: MonorepoPackage;
4
- inRepoDeps: MonorepoPackage[];
5
- allThirdPartyDeps: Partial<Record<string, string>>;
6
- }
7
- export declare function buildDependencyGraph(sourceDir: string, monorepoRoot: string): Promise<DependencyGraph>;
8
- //# sourceMappingURL=build-dependency-graph.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-dependency-graph.d.ts","sourceRoot":"","sources":["../src/build-dependency-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGpD,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,eAAe,CAAA;IAC/B,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACnD;AAED,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAuC5G"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-dependency-graph.js","sourceRoot":"","sources":["../src/build-dependency-graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAQxD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,SAAiB,EAAE,YAAoB;IAChF,MAAM,eAAe,GAAG,MAAM,wBAAwB,CAAC,YAAY,CAAC,CAAA;IACpE,MAAM,cAAc,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;IACxF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAA;IACtE,CAAC;IAED,MAAM,iBAAiB,GAAoC,EAAE,CAAA;IAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAA;IAElD,SAAS,WAAW,CAAC,GAAoB;QACvC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAM;QACR,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAE1B,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;YACvF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;YACjE,CAAC;YACD,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC/C,IAAI,UAAU,EAAE,CAAC;gBACf,oBAAoB;gBACpB,WAAW,CAAC,UAAU,CAAC,CAAA;YACzB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,CAAC,OAAO,IAAI,iBAAiB,CAAC,EAAE,CAAC;oBACpC,iBAAiB,CAAC,OAAO,CAAC,GAAG,UAAU,CAAA;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW,CAAC,cAAc,CAAC,CAAA;IAE3B,OAAO;QACL,cAAc;QACd,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,cAAc,CAAC;QACvE,iBAAiB;KAClB,CAAA;AACH,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { PackageMap } from './package-map.js';
2
- import type { DependencyGraph } from './build-dependency-graph.js';
3
- export declare function buildPackageMap(graph: DependencyGraph, monorepoRoot: string): PackageMap;
4
- //# sourceMappingURL=build-package-map.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-package-map.d.ts","sourceRoot":"","sources":["../src/build-package-map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AA2ClE,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,CAUxF"}
@@ -1,43 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as path from 'node:path';
3
- const DEFAULT_DIST_DIR = 'dist';
4
- const DEFAULT_ENTRY_POINT = 'dist/index.js';
5
- function resolveDistDir(main) {
6
- if (main === undefined) {
7
- return DEFAULT_DIST_DIR;
8
- }
9
- const dir = path.dirname(main);
10
- return dir === '' || dir === '.' ? DEFAULT_DIST_DIR : dir;
11
- }
12
- function resolveEntryPoint(main) {
13
- return main ?? DEFAULT_ENTRY_POINT;
14
- }
15
- function registerPackageLocation(packageMap, pkg, outputPrefix) {
16
- const distDir = resolveDistDir(pkg.packageJson.main);
17
- const sourceDistDir = path.resolve(pkg.path, distDir);
18
- if (!fs.existsSync(sourceDistDir)) {
19
- throw new Error(`dist directory not found at ${sourceDistDir}. Did you run the build for ${pkg.name}?`);
20
- }
21
- const outputDistDir = path.join(outputPrefix, distDir);
22
- packageMap.set(pkg.name, {
23
- name: pkg.name,
24
- sourceDistDir,
25
- outputDistDir,
26
- outputEntryPoint: path.join(outputPrefix, resolveEntryPoint(pkg.packageJson.main)),
27
- resolveSubpath(subpath) {
28
- return path.join(outputDistDir, subpath);
29
- },
30
- });
31
- }
32
- function computeDepOutputPrefix(dep, monorepoRoot) {
33
- return path.join('deps', path.relative(monorepoRoot, dep.path));
34
- }
35
- export function buildPackageMap(graph, monorepoRoot) {
36
- const packageMap = new Map();
37
- registerPackageLocation(packageMap, graph.subjectPackage, '');
38
- for (const dep of graph.inRepoDeps) {
39
- registerPackageLocation(packageMap, dep, computeDepOutputPrefix(dep, monorepoRoot));
40
- }
41
- return packageMap;
42
- }
43
- //# sourceMappingURL=build-package-map.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-package-map.js","sourceRoot":"","sources":["../src/build-package-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAKjC,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAC/B,MAAM,mBAAmB,GAAG,eAAe,CAAA;AAE3C,SAAS,cAAc,CAAC,IAAwB;IAC9C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,gBAAgB,CAAA;IACzB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,OAAO,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAA;AAC3D,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAwB;IACjD,OAAO,IAAI,IAAI,mBAAmB,CAAA;AACpC,CAAC;AAED,SAAS,uBAAuB,CAAC,UAAsB,EAAE,GAAoB,EAAE,YAAoB;IACjG,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAErD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,aAAa,+BAA+B,GAAG,CAAC,IAAI,GAAG,CAAC,CAAA;IACzG,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAEtD,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;QACvB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,aAAa;QACb,aAAa;QACb,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAClF,cAAc,CAAC,OAAe;YAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QAC1C,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAoB,EAAE,YAAoB;IACxE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAsB,EAAE,YAAoB;IAC1E,MAAM,UAAU,GAAe,IAAI,GAAG,EAAE,CAAA;IAExC,uBAAuB,CAAC,UAAU,EAAE,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAE7D,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACnC,uBAAuB,CAAC,UAAU,EAAE,GAAG,EAAE,sBAAsB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAA;IACrF,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dist-copier.d.ts","sourceRoot":"","sources":["../src/dist-copier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAOlD,qBAAa,UAAU;IAEnB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;gBADT,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM;IAGrB,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAS/B,OAAO,CAAC,qBAAqB;YAaf,OAAO;CAgBtB"}
@@ -1,44 +0,0 @@
1
- import * as fsPromises from 'node:fs/promises';
2
- import * as path from 'node:path';
3
- export class DistCopier {
4
- packageMap;
5
- outputDir;
6
- constructor(packageMap, outputDir) {
7
- this.packageMap = packageMap;
8
- this.outputDir = outputDir;
9
- }
10
- async copy() {
11
- const operations = this.collectCopyOperations();
12
- const copiedFiles = [];
13
- for (const op of operations) {
14
- await this.copyDir(op.source, op.destination, copiedFiles);
15
- }
16
- return copiedFiles;
17
- }
18
- collectCopyOperations() {
19
- const operations = [];
20
- for (const location of this.packageMap.values()) {
21
- operations.push({
22
- source: location.sourceDistDir,
23
- destination: path.join(this.outputDir, location.outputDistDir),
24
- });
25
- }
26
- return operations;
27
- }
28
- async copyDir(src, dest, copiedFiles) {
29
- await fsPromises.mkdir(dest, { recursive: true });
30
- const entries = await fsPromises.readdir(src, { withFileTypes: true });
31
- for (const entry of entries) {
32
- const srcPath = path.join(src, entry.name);
33
- const destPath = path.join(dest, entry.name);
34
- if (entry.isDirectory()) {
35
- await this.copyDir(srcPath, destPath, copiedFiles);
36
- }
37
- else {
38
- await fsPromises.copyFile(srcPath, destPath);
39
- copiedFiles.push(destPath);
40
- }
41
- }
42
- }
43
- }
44
- //# sourceMappingURL=dist-copier.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dist-copier.js","sourceRoot":"","sources":["../src/dist-copier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAQjC,MAAM,OAAO,UAAU;IAEX;IACA;IAFV,YACU,UAAsB,EACtB,SAAiB;QADjB,eAAU,GAAV,UAAU,CAAY;QACtB,cAAS,GAAT,SAAS,CAAQ;IACxB,CAAC;IAEJ,KAAK,CAAC,IAAI;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAC/C,MAAM,WAAW,GAAa,EAAE,CAAA;QAChC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QAC5D,CAAC;QACD,OAAO,WAAW,CAAA;IACpB,CAAC;IAEO,qBAAqB;QAC3B,MAAM,UAAU,GAAoB,EAAE,CAAA;QAEtC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAChD,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,QAAQ,CAAC,aAAa;gBAC9B,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC;aAC/D,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,UAAU,CAAA;IACnB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,IAAY,EAAE,WAAqB;QACpE,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAEtE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;YACpD,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;gBAC5C,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -1,5 +0,0 @@
1
- import type { PackageJson } from './package-json.js';
2
- import type { DependencyGraph } from './build-dependency-graph.js';
3
- export declare function transformPackageJson(graph: DependencyGraph): PackageJson;
4
- export declare function writePackageJson(packageJson: PackageJson, outputDir: string): Promise<void>;
5
- //# sourceMappingURL=transform-package-json.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform-package-json.d.ts","sourceRoot":"","sources":["../src/transform-package-json.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAElE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,WAAW,CAexE;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjG"}
@@ -1,19 +0,0 @@
1
- import * as fs from 'node:fs/promises';
2
- import * as path from 'node:path';
3
- export function transformPackageJson(graph) {
4
- const source = graph.subjectPackage.packageJson;
5
- const { dependencies: _1, devDependencies: _2, ...rest } = source;
6
- const transformed = {
7
- ...rest,
8
- };
9
- // Replace dependencies with flattened third-party deps (no workspace deps)
10
- if (Object.keys(graph.allThirdPartyDeps).length > 0) {
11
- transformed.dependencies = graph.allThirdPartyDeps;
12
- }
13
- return transformed;
14
- }
15
- export async function writePackageJson(packageJson, outputDir) {
16
- const outputPath = path.join(outputDir, 'package.json');
17
- await fs.writeFile(outputPath, JSON.stringify(packageJson, null, 2) + '\n');
18
- }
19
- //# sourceMappingURL=transform-package-json.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform-package-json.js","sourceRoot":"","sources":["../src/transform-package-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAIjC,MAAM,UAAU,oBAAoB,CAAC,KAAsB;IACzD,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAA;IAE/C,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;IAEjE,MAAM,WAAW,GAAgB;QAC/B,GAAG,IAAI;KACR,CAAA;IAED,2EAA2E;IAC3E,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,WAAW,CAAC,YAAY,GAAG,KAAK,CAAC,iBAAiB,CAAA;IACpD,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAwB,EAAE,SAAiB;IAChF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IACvD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AAC7E,CAAC"}