monocrate 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -149
- package/dist/collect-package-locations.d.ts +7 -43
- package/dist/collect-package-locations.d.ts.map +1 -1
- package/dist/collect-package-locations.js +23 -19
- package/dist/collect-package-locations.js.map +1 -1
- package/dist/compute-package-closure.d.ts +2 -1
- package/dist/compute-package-closure.d.ts.map +1 -1
- package/dist/compute-package-closure.js +37 -12
- package/dist/compute-package-closure.js.map +1 -1
- package/dist/file-copier.d.ts +4 -4
- package/dist/file-copier.d.ts.map +1 -1
- package/dist/file-copier.js +5 -6
- package/dist/file-copier.js.map +1 -1
- package/dist/get-files-to-pack.d.ts +3 -1
- package/dist/get-files-to-pack.d.ts.map +1 -1
- package/dist/get-files-to-pack.js +7 -33
- package/dist/get-files-to-pack.js.map +1 -1
- package/dist/import-rewriter.d.ts +4 -4
- package/dist/import-rewriter.d.ts.map +1 -1
- package/dist/import-rewriter.js +5 -7
- package/dist/import-rewriter.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mirror-sources.d.ts +11 -0
- package/dist/mirror-sources.d.ts.map +1 -0
- package/dist/mirror-sources.js +90 -0
- package/dist/mirror-sources.js.map +1 -0
- package/dist/monocrate-cli.d.ts.map +1 -1
- package/dist/monocrate-cli.js +74 -38
- package/dist/monocrate-cli.js.map +1 -1
- package/dist/monocrate-options.d.ts +67 -0
- package/dist/monocrate-options.d.ts.map +1 -0
- package/dist/monocrate-options.js +2 -0
- package/dist/monocrate-options.js.map +1 -0
- package/dist/monocrate-result.d.ts +18 -0
- package/dist/monocrate-result.d.ts.map +1 -0
- package/dist/monocrate-result.js +2 -0
- package/dist/monocrate-result.js.map +1 -0
- package/dist/monocrate.d.ts +6 -32
- package/dist/monocrate.d.ts.map +1 -1
- package/dist/monocrate.js +64 -18
- package/dist/monocrate.js.map +1 -1
- package/dist/name-mangler.d.ts +2 -0
- package/dist/name-mangler.d.ts.map +1 -0
- package/dist/name-mangler.js +4 -0
- package/dist/name-mangler.js.map +1 -0
- package/dist/npm-client.d.ts +29 -0
- package/dist/npm-client.d.ts.map +1 -0
- package/dist/npm-client.js +83 -0
- package/dist/npm-client.js.map +1 -0
- package/dist/package-assembler.d.ts +16 -0
- package/dist/package-assembler.d.ts.map +1 -0
- package/dist/package-assembler.js +52 -0
- package/dist/package-assembler.js.map +1 -0
- package/dist/package-closure.d.ts +1 -1
- package/dist/package-closure.d.ts.map +1 -1
- package/dist/{package-map.d.ts → package-location.d.ts} +9 -10
- package/dist/package-location.d.ts.map +1 -0
- package/dist/package-location.js +2 -0
- package/dist/package-location.js.map +1 -0
- package/dist/paths.d.ts +37 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +59 -0
- package/dist/paths.js.map +1 -0
- package/dist/publish.d.ts +3 -1
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +2 -6
- package/dist/publish.js.map +1 -1
- package/dist/repo-explorer.d.ts +23 -0
- package/dist/repo-explorer.d.ts.map +1 -0
- package/dist/repo-explorer.js +121 -0
- package/dist/repo-explorer.js.map +1 -0
- package/dist/resolve-version.d.ts +4 -1
- package/dist/resolve-version.d.ts.map +1 -1
- package/dist/resolve-version.js +31 -33
- package/dist/resolve-version.js.map +1 -1
- package/dist/rewrite-package-json.d.ts +2 -1
- package/dist/rewrite-package-json.d.ts.map +1 -1
- package/dist/rewrite-package-json.js.map +1 -1
- package/dist/run-npm.d.ts +36 -0
- package/dist/run-npm.d.ts.map +1 -0
- package/dist/run-npm.js +35 -0
- package/dist/run-npm.js.map +1 -0
- package/package.json +10 -3
- package/dist/assemble.d.ts +0 -4
- package/dist/assemble.d.ts.map +0 -1
- package/dist/assemble.js +0 -21
- package/dist/assemble.js.map +0 -1
- package/dist/monorepo.d.ts +0 -9
- package/dist/monorepo.d.ts.map +0 -1
- package/dist/monorepo.js +0 -82
- package/dist/monorepo.js.map +0 -1
- package/dist/package-map.d.ts.map +0 -1
- package/dist/package-map.js +0 -2
- package/dist/package-map.js.map +0 -1
package/dist/monocrate.js
CHANGED
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as fsSync from 'node:fs';
|
|
2
3
|
import * as os from 'node:os';
|
|
3
4
|
import * as path from 'node:path';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { assemble } from './assemble.js';
|
|
5
|
+
import { RepoExplorer } from './repo-explorer.js';
|
|
6
|
+
import { PackageAssembler } from './package-assembler.js';
|
|
7
7
|
import { publish } from './publish.js';
|
|
8
8
|
import { parseVersionSpecifier } from './version-specifier.js';
|
|
9
|
+
import { AbsolutePath } from './paths.js';
|
|
10
|
+
import { maxVersion } from './resolve-version.js';
|
|
11
|
+
import { NpmClient } from './npm-client.js';
|
|
12
|
+
import { mirrorSources } from './mirror-sources.js';
|
|
9
13
|
/**
|
|
10
14
|
* Assembles a monorepo package and its in-repo dependencies for npm publishing.
|
|
11
15
|
* @param options - Configuration options for the assembly process
|
|
12
|
-
* @returns The
|
|
16
|
+
* @returns The result of the assembly operation
|
|
13
17
|
* @throws Error if assembly or publishing fails
|
|
14
18
|
*/
|
|
15
19
|
export async function monocrate(options) {
|
|
16
20
|
// Resolve and validate cwd first, then use it to resolve all other paths
|
|
17
|
-
const cwd = path.resolve(options.cwd);
|
|
21
|
+
const cwd = AbsolutePath(path.resolve(options.cwd));
|
|
18
22
|
const cwdExists = await fs
|
|
19
23
|
.stat(cwd)
|
|
20
24
|
.then(() => true)
|
|
@@ -22,18 +26,60 @@ export async function monocrate(options) {
|
|
|
22
26
|
if (!cwdExists) {
|
|
23
27
|
throw new Error(`cwd does not exist: ${cwd}`);
|
|
24
28
|
}
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
const outputRoot = AbsolutePath(options.outputRoot ? path.resolve(cwd, options.outputRoot) : await fs.mkdtemp(path.join(os.tmpdir(), 'monocrate-')));
|
|
30
|
+
// Validate bump argument before any side effects (defaults to 'minor')
|
|
31
|
+
const versionSpecifier = parseVersionSpecifier(options.bump ?? 'minor');
|
|
32
|
+
const sources = Array.isArray(options.pathToSubjectPackages)
|
|
33
|
+
? options.pathToSubjectPackages
|
|
34
|
+
: [options.pathToSubjectPackages];
|
|
35
|
+
const sourceDirs = sources.map((at) => AbsolutePath(path.resolve(cwd, at)));
|
|
36
|
+
const sourceDir0 = sourceDirs.at(0);
|
|
37
|
+
if (!sourceDir0) {
|
|
38
|
+
throw new Error(`At least one package must be specified`);
|
|
39
|
+
}
|
|
40
|
+
const monorepoRoot = options.monorepoRoot
|
|
41
|
+
? AbsolutePath(path.resolve(cwd, options.monorepoRoot))
|
|
42
|
+
: RepoExplorer.findMonorepoRoot(sourceDir0);
|
|
43
|
+
const explorer = await RepoExplorer.create(monorepoRoot);
|
|
44
|
+
const npmClient = new NpmClient({ userconfig: options.npmrcPath });
|
|
45
|
+
const assemblers = sourceDirs.map((at) => new PackageAssembler(npmClient, explorer, at, outputRoot));
|
|
46
|
+
const a0 = assemblers.at(0);
|
|
47
|
+
if (!a0) {
|
|
48
|
+
throw new Error(`Incosistency - could not find an assembler for the first package`);
|
|
49
|
+
}
|
|
50
|
+
// versionSpecifier is always defined (defaults to 'minor'), so computeNewVersion always returns a string
|
|
51
|
+
const versions = (await Promise.all(assemblers.map((a) => a.computeNewVersion(versionSpecifier)))).flatMap((v) => v ? [v] : []);
|
|
52
|
+
const v = versions.at(0);
|
|
53
|
+
if (!v) {
|
|
54
|
+
throw new Error('Inconsistency - no versions computed');
|
|
55
|
+
}
|
|
56
|
+
const resolvedVersion = versions.reduce((soFar, curr) => maxVersion(soFar, curr), v);
|
|
57
|
+
const allPackages = new Map();
|
|
58
|
+
for (const assembler of assemblers) {
|
|
59
|
+
const members = await assembler.assemble(resolvedVersion);
|
|
60
|
+
for (const pkg of members) {
|
|
61
|
+
allPackages.set(pkg.name, pkg);
|
|
62
|
+
}
|
|
63
|
+
if (options.publish) {
|
|
64
|
+
await publish(npmClient, assembler.getOutputDir());
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Mirror source files if mirrorTo is specified
|
|
68
|
+
if (options.mirrorTo) {
|
|
69
|
+
const mirrorDir = AbsolutePath(path.resolve(cwd, options.mirrorTo));
|
|
70
|
+
await mirrorSources([...allPackages.values()], mirrorDir);
|
|
71
|
+
}
|
|
72
|
+
if (options.report) {
|
|
73
|
+
const outputFilePath = path.resolve(cwd, options.report);
|
|
74
|
+
fsSync.writeFileSync(outputFilePath, resolvedVersion);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log(resolvedVersion);
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
outputDir: a0.getOutputDir(),
|
|
81
|
+
resolvedVersion,
|
|
82
|
+
summaries: assemblers.map((at) => ({ outputDir: at.getOutputDir(), packageName: at.pkgName })),
|
|
83
|
+
};
|
|
38
84
|
}
|
|
39
85
|
//# sourceMappingURL=monocrate.js.map
|
package/dist/monocrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"monocrate.js","sourceRoot":"","sources":["../src/monocrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-mangler.d.ts","sourceRoot":"","sources":["../src/name-mangler.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-mangler.js","sourceRoot":"","sources":["../src/name-mangler.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACpC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AbsolutePath } from './paths.js';
|
|
2
|
+
import type { NpmOptionsBase } from './run-npm.js';
|
|
3
|
+
export declare class NpmClient {
|
|
4
|
+
private readonly npmOptions?;
|
|
5
|
+
constructor(npmOptions?: NpmOptionsBase | undefined);
|
|
6
|
+
publish(dir: AbsolutePath): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* @param packageName
|
|
9
|
+
* @param cwd
|
|
10
|
+
* @returns the version of `packageName` or undefined (if not found)
|
|
11
|
+
*/
|
|
12
|
+
viewVersion(packageName: string, cwd: AbsolutePath): Promise<string | undefined>;
|
|
13
|
+
pack(dir: AbsolutePath, options?: {
|
|
14
|
+
dryRun?: boolean;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
version: string;
|
|
19
|
+
size: number;
|
|
20
|
+
unpackedSize: number;
|
|
21
|
+
shasum: string;
|
|
22
|
+
integrity: string;
|
|
23
|
+
filename: string;
|
|
24
|
+
files: {
|
|
25
|
+
path: string;
|
|
26
|
+
}[];
|
|
27
|
+
}[]>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=npm-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-client.d.ts","sourceRoot":"","sources":["../src/npm-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAC,MAAM,cAAc,CAAC;AAWlD,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAX,UAAU,CAAC,EAAE,cAAc,YAAA;IAElD,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;;;OAIG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA4BhF,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;;;;;;;CA2C7D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { runNpm } from './run-npm.js';
|
|
3
|
+
const NpmErrorResponse = z.object({
|
|
4
|
+
error: z.object({
|
|
5
|
+
code: z.string().optional(),
|
|
6
|
+
summary: z.string().optional(),
|
|
7
|
+
detail: z.string().optional(),
|
|
8
|
+
}),
|
|
9
|
+
});
|
|
10
|
+
export class NpmClient {
|
|
11
|
+
npmOptions;
|
|
12
|
+
constructor(npmOptions) {
|
|
13
|
+
this.npmOptions = npmOptions;
|
|
14
|
+
}
|
|
15
|
+
async publish(dir) {
|
|
16
|
+
await runNpm('publish', [], dir, { ...this.npmOptions, stdio: 'inherit' });
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @param packageName
|
|
20
|
+
* @param cwd
|
|
21
|
+
* @returns the version of `packageName` or undefined (if not found)
|
|
22
|
+
*/
|
|
23
|
+
async viewVersion(packageName, cwd) {
|
|
24
|
+
const { ok, stdout } = await runNpm('view', ['-s', '--json', packageName, 'version'], cwd, {
|
|
25
|
+
...this.npmOptions,
|
|
26
|
+
stdio: 'pipe',
|
|
27
|
+
nonZeroExitCodePolicy: 'return',
|
|
28
|
+
});
|
|
29
|
+
if (!ok) {
|
|
30
|
+
const parsed = NpmErrorResponse.safeParse(JSON.parse(stdout));
|
|
31
|
+
if (!parsed.success) {
|
|
32
|
+
throw new Error(`Error response of 'npm view' could not be parsed: ${stdout}`);
|
|
33
|
+
}
|
|
34
|
+
const code = parsed.data.error.code ?? 'UNKNOWN';
|
|
35
|
+
if (code !== 'E404') {
|
|
36
|
+
const detail = parsed.data.error.detail ?? parsed.data.error.summary ?? '<No Further Details>';
|
|
37
|
+
throw new Error(`npm view failed (${code}): ${detail}`);
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
const parsed = z.string().safeParse(JSON.parse(stdout));
|
|
42
|
+
if (!parsed.success) {
|
|
43
|
+
throw new Error(`Response of 'npm view' could not be parsed: ${stdout}`);
|
|
44
|
+
}
|
|
45
|
+
return parsed.data;
|
|
46
|
+
}
|
|
47
|
+
async pack(dir, options) {
|
|
48
|
+
const { stdout, ok } = await runNpm('pack', ['--json', ...(options?.dryRun ? ['--dry-run'] : [])], dir, {
|
|
49
|
+
...this.npmOptions,
|
|
50
|
+
stdio: 'pipe',
|
|
51
|
+
nonZeroExitCodePolicy: 'return',
|
|
52
|
+
});
|
|
53
|
+
if (!ok) {
|
|
54
|
+
const parsed = NpmErrorResponse.safeParse(JSON.parse(stdout));
|
|
55
|
+
if (!parsed.success) {
|
|
56
|
+
throw new Error(`Error response of 'npm pack' could not be parsed: ${stdout}`);
|
|
57
|
+
}
|
|
58
|
+
const code = parsed.data.error.code ?? 'UNKNOWN';
|
|
59
|
+
const detail = parsed.data.error.detail ?? parsed.data.error.summary ?? '<No Further Details>';
|
|
60
|
+
throw new Error(`The 'npm view' command failed (code: ${code}): ${detail}`);
|
|
61
|
+
}
|
|
62
|
+
const parsed = z
|
|
63
|
+
.array(z.object({
|
|
64
|
+
id: z.string(),
|
|
65
|
+
name: z.string(),
|
|
66
|
+
version: z.string(),
|
|
67
|
+
size: z.number(),
|
|
68
|
+
unpackedSize: z.number(),
|
|
69
|
+
shasum: z.string(),
|
|
70
|
+
integrity: z.string(),
|
|
71
|
+
filename: z.string(),
|
|
72
|
+
files: z.array(z.object({
|
|
73
|
+
path: z.string(),
|
|
74
|
+
})),
|
|
75
|
+
}))
|
|
76
|
+
.safeParse(JSON.parse(stdout));
|
|
77
|
+
if (!parsed.success) {
|
|
78
|
+
throw new Error(`Response of 'npm pack' could not be parsed: ${parsed.error.message}`);
|
|
79
|
+
}
|
|
80
|
+
return parsed.data;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=npm-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-client.js","sourceRoot":"","sources":["../src/npm-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { VersionSpecifier } from './version-specifier.js';
|
|
2
|
+
import { AbsolutePath } from './paths.js';
|
|
3
|
+
import type { RepoExplorer, MonorepoPackage } from './repo-explorer.js';
|
|
4
|
+
import type { NpmClient } from './npm-client.js';
|
|
5
|
+
export declare class PackageAssembler {
|
|
6
|
+
private readonly npmClient;
|
|
7
|
+
private readonly explorer;
|
|
8
|
+
private readonly fromDir;
|
|
9
|
+
private readonly outputRoot;
|
|
10
|
+
readonly pkgName: string;
|
|
11
|
+
constructor(npmClient: NpmClient, explorer: RepoExplorer, fromDir: AbsolutePath, outputRoot: AbsolutePath);
|
|
12
|
+
getOutputDir(): AbsolutePath;
|
|
13
|
+
computeNewVersion(versionSpecifier: VersionSpecifier | undefined): Promise<string | undefined>;
|
|
14
|
+
assemble(newVersion: string | undefined): Promise<MonorepoPackage[]>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=package-assembler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-assembler.d.ts","sourceRoot":"","sources":["../src/package-assembler.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAgB,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,qBAAa,gBAAgB;IAGzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,QAAQ,CAAC,OAAO,SAAA;gBAEG,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,YAAY;IAS3C,YAAY;IAIN,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,SAAS;IAMhE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAoB3E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as fsPromises from 'node:fs/promises';
|
|
2
|
+
import { collectPackageLocations } from './collect-package-locations.js';
|
|
3
|
+
import { FileCopier } from './file-copier.js';
|
|
4
|
+
import { ImportRewriter } from './import-rewriter.js';
|
|
5
|
+
import { resolveVersion } from './resolve-version.js';
|
|
6
|
+
import { rewritePackageJson } from './rewrite-package-json.js';
|
|
7
|
+
import { AbsolutePath, RelativePath } from './paths.js';
|
|
8
|
+
import { computePackageClosure } from './compute-package-closure.js';
|
|
9
|
+
import { manglePackageName } from './name-mangler.js';
|
|
10
|
+
export class PackageAssembler {
|
|
11
|
+
npmClient;
|
|
12
|
+
explorer;
|
|
13
|
+
fromDir;
|
|
14
|
+
outputRoot;
|
|
15
|
+
pkgName;
|
|
16
|
+
constructor(npmClient, explorer, fromDir, outputRoot) {
|
|
17
|
+
this.npmClient = npmClient;
|
|
18
|
+
this.explorer = explorer;
|
|
19
|
+
this.fromDir = fromDir;
|
|
20
|
+
this.outputRoot = outputRoot;
|
|
21
|
+
const found = this.explorer.listPackages().find((at) => at.fromDir === fromDir);
|
|
22
|
+
if (!found) {
|
|
23
|
+
throw new Error(`Unrecognized package source dir: "${this.fromDir}"`);
|
|
24
|
+
}
|
|
25
|
+
this.pkgName = found.name;
|
|
26
|
+
}
|
|
27
|
+
getOutputDir() {
|
|
28
|
+
return AbsolutePath.join(this.outputRoot, RelativePath(manglePackageName(this.pkgName)));
|
|
29
|
+
}
|
|
30
|
+
async computeNewVersion(versionSpecifier) {
|
|
31
|
+
return versionSpecifier
|
|
32
|
+
? await resolveVersion(this.npmClient, this.fromDir, this.pkgName, versionSpecifier)
|
|
33
|
+
: Promise.resolve(undefined);
|
|
34
|
+
}
|
|
35
|
+
async assemble(newVersion) {
|
|
36
|
+
const closure = computePackageClosure(this.pkgName, this.explorer);
|
|
37
|
+
const outputDir = this.getOutputDir();
|
|
38
|
+
const locations = await collectPackageLocations(this.npmClient, closure, outputDir);
|
|
39
|
+
const packageMap = new Map(locations.map((at) => [at.name, at]));
|
|
40
|
+
const subject = packageMap.get(closure.subjectPackageName);
|
|
41
|
+
if (!subject) {
|
|
42
|
+
throw new Error(`Internal mismatch: could not find location data of "${closure.subjectPackageName}"`);
|
|
43
|
+
}
|
|
44
|
+
await fsPromises.mkdir(outputDir, { recursive: true });
|
|
45
|
+
const copiedFiles = await new FileCopier(packageMap).copy();
|
|
46
|
+
await new ImportRewriter(packageMap).rewriteAll(copiedFiles);
|
|
47
|
+
// This must happen after file copying completes (otherwise the rewritten package.json could be overwritten)
|
|
48
|
+
rewritePackageJson(closure, newVersion, outputDir);
|
|
49
|
+
return closure.members;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=package-assembler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-assembler.js","sourceRoot":"","sources":["../src/package-assembler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-closure.d.ts","sourceRoot":"","sources":["../src/package-closure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"package-closure.d.ts","sourceRoot":"","sources":["../src/package-closure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD;;;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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { PackageJson } from './package-json.js';
|
|
2
|
+
import type { AbsolutePath } from './paths.js';
|
|
2
3
|
export interface PackageLocation {
|
|
3
4
|
/**
|
|
4
5
|
* The package name from package.json
|
|
@@ -6,19 +7,17 @@ export interface PackageLocation {
|
|
|
6
7
|
*/
|
|
7
8
|
name: string;
|
|
8
9
|
/**
|
|
9
|
-
* Absolute path to the
|
|
10
|
-
* @example "/home/user/monorepo/packages/
|
|
10
|
+
* Absolute path to the package's directory in the repo.
|
|
11
|
+
* @example "/home/user/monorepo/packages/my-package"
|
|
11
12
|
*/
|
|
12
|
-
|
|
13
|
+
fromDir: AbsolutePath;
|
|
13
14
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* @example "" (subject package)
|
|
17
|
-
* @example "deps/packages/utils" (in-repo dependency)
|
|
15
|
+
* Absolute path to the the package's output directory
|
|
16
|
+
* @example "/tmp/monocrate-ab00003/deps/packages/my-package" (in-repo dependency)
|
|
18
17
|
*/
|
|
19
|
-
|
|
18
|
+
toDir: AbsolutePath;
|
|
20
19
|
/**
|
|
21
|
-
* Individual file paths to copy, as determined by `npm pack --dry-run`.
|
|
20
|
+
* Individual file paths (relative to the package dir) to copy, as determined by `npm pack --dry-run`.
|
|
22
21
|
* These are the exact files npm would include in the published tarball.
|
|
23
22
|
* @example ["dist/index.js", "dist/utils.js", "package.json"]
|
|
24
23
|
*/
|
|
@@ -29,4 +28,4 @@ export interface PackageLocation {
|
|
|
29
28
|
packageJson: PackageJson;
|
|
30
29
|
}
|
|
31
30
|
export type PackageMap = Map<string, PackageLocation>;
|
|
32
|
-
//# sourceMappingURL=package-
|
|
31
|
+
//# sourceMappingURL=package-location.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-location.d.ts","sourceRoot":"","sources":["../src/package-location.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;;OAGG;IACH,OAAO,EAAE,YAAY,CAAA;IAErB;;;OAGG;IACH,KAAK,EAAE,YAAY,CAAA;IAEnB;;;;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 @@
|
|
|
1
|
+
{"version":3,"file":"package-location.js","sourceRoot":"","sources":["../src/package-location.ts"],"names":[],"mappings":""}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branded type for absolute file system paths.
|
|
3
|
+
* Use AbsolutePath(s) to create, AbsolutePath.join() and AbsolutePath.dirname() for manipulation.
|
|
4
|
+
*/
|
|
5
|
+
export type AbsolutePath = string & {
|
|
6
|
+
readonly __brand: 'AbsolutePath';
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Creates an AbsolutePath from a string. Normalizes the input.
|
|
10
|
+
* @throws if the path is not absolute
|
|
11
|
+
*/
|
|
12
|
+
export declare function AbsolutePath(s: string): AbsolutePath;
|
|
13
|
+
export declare namespace AbsolutePath {
|
|
14
|
+
function join(base: AbsolutePath, p: RelativePath, ...paths: string[]): AbsolutePath;
|
|
15
|
+
function dirname(p: AbsolutePath): AbsolutePath;
|
|
16
|
+
/**
|
|
17
|
+
* Checks if `parent` contains `child` (or they are equal).
|
|
18
|
+
*/
|
|
19
|
+
function contains(parent: AbsolutePath, child: AbsolutePath): boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Branded type for paths relative to the monorepo root.
|
|
23
|
+
* Use RelativePath(s) to create, RelativePath.join() and RelativePath.dirname() for manipulation.
|
|
24
|
+
*/
|
|
25
|
+
export type RelativePath = string & {
|
|
26
|
+
readonly __brand: 'RelativePath';
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Creates a RelativePath from a string. Normalizes the input.
|
|
30
|
+
* @throws if the path is absolute
|
|
31
|
+
*/
|
|
32
|
+
export declare function RelativePath(s: string): RelativePath;
|
|
33
|
+
export declare namespace RelativePath {
|
|
34
|
+
function join(base: RelativePath, ...paths: string[]): RelativePath;
|
|
35
|
+
function dirname(p: RelativePath): RelativePath;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAAA;AAExE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAMpD;AAGD,yBAAiB,YAAY,CAAC;IAC5B,SAAgB,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAE1F;IAED,SAAgB,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAErD;IAED;;OAEG;IACH,SAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAG3E;CACF;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAAA;AAExE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAMpD;AAGD,yBAAiB,YAAY,CAAC;IAC5B,SAAgB,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAOzE;IAED,SAAgB,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAErD;CACF"}
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an AbsolutePath from a string. Normalizes the input.
|
|
4
|
+
* @throws if the path is not absolute
|
|
5
|
+
*/
|
|
6
|
+
export function AbsolutePath(s) {
|
|
7
|
+
const normalized = path.normalize(s);
|
|
8
|
+
if (!path.isAbsolute(normalized)) {
|
|
9
|
+
throw new Error(`Expected absolute path, got: ${s}`);
|
|
10
|
+
}
|
|
11
|
+
return normalized;
|
|
12
|
+
}
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
14
|
+
(function (AbsolutePath) {
|
|
15
|
+
function join(base, p, ...paths) {
|
|
16
|
+
return AbsolutePath(path.join(base, RelativePath.join(p, ...paths)));
|
|
17
|
+
}
|
|
18
|
+
AbsolutePath.join = join;
|
|
19
|
+
function dirname(p) {
|
|
20
|
+
return AbsolutePath(path.dirname(p));
|
|
21
|
+
}
|
|
22
|
+
AbsolutePath.dirname = dirname;
|
|
23
|
+
/**
|
|
24
|
+
* Checks if `parent` contains `child` (or they are equal).
|
|
25
|
+
*/
|
|
26
|
+
function contains(parent, child) {
|
|
27
|
+
const relative = path.relative(parent, child);
|
|
28
|
+
return !relative.startsWith('..') && !path.isAbsolute(relative);
|
|
29
|
+
}
|
|
30
|
+
AbsolutePath.contains = contains;
|
|
31
|
+
})(AbsolutePath || (AbsolutePath = {}));
|
|
32
|
+
/**
|
|
33
|
+
* Creates a RelativePath from a string. Normalizes the input.
|
|
34
|
+
* @throws if the path is absolute
|
|
35
|
+
*/
|
|
36
|
+
export function RelativePath(s) {
|
|
37
|
+
const normalized = path.normalize(s);
|
|
38
|
+
if (path.isAbsolute(normalized)) {
|
|
39
|
+
throw new Error(`Expected relative path, got: ${s}`);
|
|
40
|
+
}
|
|
41
|
+
return normalized;
|
|
42
|
+
}
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
44
|
+
(function (RelativePath) {
|
|
45
|
+
function join(base, ...paths) {
|
|
46
|
+
for (const at of paths) {
|
|
47
|
+
if (path.isAbsolute(at)) {
|
|
48
|
+
throw new Error(`Cannot join absolute path ${at} to RelativePath`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return RelativePath(path.join(base, ...paths));
|
|
52
|
+
}
|
|
53
|
+
RelativePath.join = join;
|
|
54
|
+
function dirname(p) {
|
|
55
|
+
return RelativePath(path.dirname(p));
|
|
56
|
+
}
|
|
57
|
+
RelativePath.dirname = dirname;
|
|
58
|
+
})(RelativePath || (RelativePath = {}));
|
|
59
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAQ5B;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACpC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,UAA0B,CAAA;AACnC,CAAC;AAED,2DAA2D;AAC3D,WAAiB,YAAY;IAC3B,SAAgB,IAAI,CAAC,IAAkB,EAAE,CAAe,EAAE,GAAG,KAAe;QAC1E,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACtE,CAAC;IAFe,iBAAI,OAEnB,CAAA;IAED,SAAgB,OAAO,CAAC,CAAe;QACrC,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IACtC,CAAC;IAFe,oBAAO,UAEtB,CAAA;IAED;;OAEG;IACH,SAAgB,QAAQ,CAAC,MAAoB,EAAE,KAAmB;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IACjE,CAAC;IAHe,qBAAQ,WAGvB,CAAA;AACH,CAAC,EAhBgB,YAAY,KAAZ,YAAY,QAgB5B;AAQD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACpC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,UAA0B,CAAA;AACnC,CAAC;AAED,2DAA2D;AAC3D,WAAiB,YAAY;IAC3B,SAAgB,IAAI,CAAC,IAAkB,EAAE,GAAG,KAAe;QACzD,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,6BAA6B,EAAE,kBAAkB,CAAC,CAAA;YACpE,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAA;IAChD,CAAC;IAPe,iBAAI,OAOnB,CAAA;IAED,SAAgB,OAAO,CAAC,CAAe;QACrC,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IACtC,CAAC;IAFe,oBAAO,UAEtB,CAAA;AACH,CAAC,EAbgB,YAAY,KAAZ,YAAY,QAa5B"}
|
package/dist/publish.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import type { AbsolutePath } from './paths.js';
|
|
2
|
+
import type { NpmClient } from './npm-client.js';
|
|
3
|
+
export declare function publish(npmClient: NpmClient, outputDir: AbsolutePath): Promise<void>;
|
|
2
4
|
//# sourceMappingURL=publish.d.ts.map
|
package/dist/publish.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,wBAAsB,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,iBAE1E"}
|
package/dist/publish.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
}
|
|
1
|
+
export async function publish(npmClient, outputDir) {
|
|
2
|
+
await npmClient.publish(outputDir);
|
|
7
3
|
}
|
|
8
4
|
//# sourceMappingURL=publish.js.map
|
package/dist/publish.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,SAAoB,EAAE,SAAuB;IACzE,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACpC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { PackageJson } from './package-json.js';
|
|
2
|
+
import { AbsolutePath, RelativePath } from './paths.js';
|
|
3
|
+
export interface MonorepoPackage {
|
|
4
|
+
name: string;
|
|
5
|
+
fromDir: AbsolutePath;
|
|
6
|
+
pathInRepo: RelativePath;
|
|
7
|
+
packageJson: PackageJson;
|
|
8
|
+
}
|
|
9
|
+
export declare class RepoExplorer {
|
|
10
|
+
readonly repoRootDir: AbsolutePath;
|
|
11
|
+
private readonly map;
|
|
12
|
+
constructor(repoRootDir: AbsolutePath, map: Map<string, MonorepoPackage>);
|
|
13
|
+
static create(monorepoRoot: AbsolutePath): Promise<RepoExplorer>;
|
|
14
|
+
listNames(): string[];
|
|
15
|
+
listPackages(): MonorepoPackage[];
|
|
16
|
+
getPackage(pkgName: string): MonorepoPackage;
|
|
17
|
+
lookupPackage(pkgName: string): MonorepoPackage | undefined;
|
|
18
|
+
static findMonorepoRoot(startDir: AbsolutePath): AbsolutePath;
|
|
19
|
+
private static readPackageJson;
|
|
20
|
+
private static parseWorkspacePatterns;
|
|
21
|
+
static discover(monorepoRoot: AbsolutePath): Promise<Map<string, MonorepoPackage>>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=repo-explorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-explorer.d.ts","sourceRoot":"","sources":["../src/repo-explorer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEvD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,EAAE,YAAY,CAAA;IACxB,WAAW,EAAE,WAAW,CAAA;CACzB;AAED,qBAAa,YAAY;IAErB,QAAQ,CAAC,WAAW,EAAE,YAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG;gBADX,WAAW,EAAE,YAAY,EACjB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;WAGvC,MAAM,CAAC,YAAY,EAAE,YAAY;IAkB9C,SAAS;IAGT,YAAY;IAIZ,UAAU,CAAC,OAAO,EAAE,MAAM;IAQ1B,aAAa,CAAC,OAAO,EAAE,MAAM;IAI7B,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY;IAuB7D,OAAO,CAAC,MAAM,CAAC,eAAe;IAa9B,OAAO,CAAC,MAAM,CAAC,sBAAsB;WA8BxB,QAAQ,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAyBzF"}
|