@smoothbricks/cli 0.1.1 → 0.2.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 +155 -30
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +91 -7
- package/dist/devenv/index.d.ts +10 -0
- package/dist/devenv/index.d.ts.map +1 -0
- package/dist/devenv/index.js +27 -0
- package/dist/lib/cli-package.d.ts +4 -0
- package/dist/lib/cli-package.d.ts.map +1 -0
- package/dist/lib/cli-package.js +15 -0
- package/dist/lib/run.d.ts +5 -0
- package/dist/lib/run.d.ts.map +1 -1
- package/dist/lib/run.js +13 -0
- package/dist/lib/workspace.d.ts +15 -1
- package/dist/lib/workspace.d.ts.map +1 -1
- package/dist/lib/workspace.js +25 -2
- package/dist/monorepo/commit-msg.d.ts +8 -1
- package/dist/monorepo/commit-msg.d.ts.map +1 -1
- package/dist/monorepo/commit-msg.js +85 -7
- package/dist/monorepo/index.d.ts +19 -2
- package/dist/monorepo/index.d.ts.map +1 -1
- package/dist/monorepo/index.js +104 -16
- package/dist/monorepo/managed-files.js +1 -1
- package/dist/monorepo/nx-sync.d.ts +2 -1
- package/dist/monorepo/nx-sync.d.ts.map +1 -1
- package/dist/monorepo/nx-sync.js +8 -2
- package/dist/monorepo/package-hygiene.d.ts +6 -2
- package/dist/monorepo/package-hygiene.d.ts.map +1 -1
- package/dist/monorepo/package-hygiene.js +12 -4
- package/dist/monorepo/package-policy.d.ts +22 -2
- package/dist/monorepo/package-policy.d.ts.map +1 -1
- package/dist/monorepo/package-policy.js +1167 -8
- package/dist/monorepo/packed-package.d.ts +3 -0
- package/dist/monorepo/packed-package.d.ts.map +1 -1
- package/dist/monorepo/packed-package.js +68 -36
- package/dist/monorepo/packs/index.d.ts +20 -1
- package/dist/monorepo/packs/index.d.ts.map +1 -1
- package/dist/monorepo/packs/index.js +238 -19
- package/dist/monorepo/publish-workflow.d.ts +0 -4
- package/dist/monorepo/publish-workflow.d.ts.map +1 -1
- package/dist/monorepo/publish-workflow.js +5 -12
- package/dist/monorepo/tool-validation.d.ts +22 -0
- package/dist/monorepo/tool-validation.d.ts.map +1 -0
- package/dist/monorepo/tool-validation.js +399 -0
- package/dist/nx/index.d.ts +24 -0
- package/dist/nx/index.d.ts.map +1 -0
- package/dist/nx/index.js +94 -0
- package/dist/release/bootstrap-npm-packages.d.ts +19 -0
- package/dist/release/bootstrap-npm-packages.d.ts.map +1 -0
- package/dist/release/bootstrap-npm-packages.js +58 -0
- package/dist/release/candidates.d.ts +11 -0
- package/dist/release/candidates.d.ts.map +1 -0
- package/dist/release/candidates.js +181 -0
- package/dist/release/core.d.ts +1 -0
- package/dist/release/core.d.ts.map +1 -1
- package/dist/release/github-release.js +2 -2
- package/dist/release/index.d.ts +25 -0
- package/dist/release/index.d.ts.map +1 -1
- package/dist/release/index.js +247 -49
- package/dist/release/npm-auth.d.ts +0 -1
- package/dist/release/npm-auth.d.ts.map +1 -1
- package/dist/release/npm-auth.js +4 -16
- package/dist/release/orchestration.d.ts +2 -1
- package/dist/release/orchestration.d.ts.map +1 -1
- package/dist/release/orchestration.js +9 -1
- package/dist/release/publish-plan.js +1 -1
- package/managed/raw/git-format-staged.yml +54 -0
- package/managed/raw/tooling/git-hooks/commit-msg.sh +1 -1
- package/managed/templates/github/actions/setup-devenv/action.yml +1 -7
- package/managed/templates/github/workflows/ci.yml +1 -0
- package/package.json +15 -3
- package/src/cli.ts +134 -20
- package/src/devenv/index.test.ts +49 -0
- package/src/devenv/index.ts +38 -0
- package/src/lib/cli-package.ts +18 -0
- package/src/lib/run.ts +19 -0
- package/src/lib/workspace.ts +41 -2
- package/src/monorepo/__tests__/publish-workflow.test.ts +16 -9
- package/src/monorepo/commit-msg.test.ts +45 -0
- package/src/monorepo/commit-msg.ts +107 -7
- package/src/monorepo/index.ts +142 -16
- package/src/monorepo/managed-files.ts +1 -1
- package/src/monorepo/nx-sync.ts +9 -2
- package/src/monorepo/package-hygiene.test.ts +34 -0
- package/src/monorepo/package-hygiene.ts +26 -4
- package/src/monorepo/package-policy.test.ts +902 -0
- package/src/monorepo/package-policy.ts +1393 -7
- package/src/monorepo/packed-package.ts +89 -37
- package/src/monorepo/packs/index.test.ts +189 -0
- package/src/monorepo/packs/index.ts +311 -20
- package/src/monorepo/publish-workflow.ts +8 -16
- package/src/monorepo/setup-test-tracing.test.ts +120 -0
- package/src/monorepo/tool-validation.test.ts +261 -0
- package/src/monorepo/tool-validation.ts +462 -0
- package/src/nx/index.test.ts +64 -0
- package/src/nx/index.ts +119 -0
- package/src/release/__tests__/bootstrap-npm-packages.test.ts +127 -0
- package/src/release/__tests__/candidates.test.ts +217 -0
- package/src/release/__tests__/core-properties.test.ts +4 -4
- package/src/release/__tests__/core-scenarios.test.ts +15 -5
- package/src/release/__tests__/core.test.ts +2 -2
- package/src/release/__tests__/fixture-repo.test.ts +22 -13
- package/src/release/__tests__/github-release.test.ts +13 -8
- package/src/release/__tests__/helpers/fixture-repo.ts +1 -0
- package/src/release/__tests__/npm-auth.test.ts +12 -21
- package/src/release/__tests__/orchestration.test.ts +51 -7
- package/src/release/__tests__/publish-plan.test.ts +9 -3
- package/src/release/__tests__/retag-unpublished.test.ts +1 -1
- package/src/release/__tests__/trust-publisher.test.ts +133 -0
- package/src/release/bootstrap-npm-packages.ts +88 -0
- package/src/release/candidates.ts +225 -0
- package/src/release/core.ts +1 -0
- package/src/release/github-release.ts +2 -2
- package/src/release/index.ts +346 -56
- package/src/release/npm-auth.ts +4 -33
- package/src/release/orchestration.ts +12 -2
- package/src/release/publish-plan.ts +1 -1
- package/managed/raw/.git-format-staged.yml +0 -47
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
export declare function validatePackedPublicPackages(root: string): Promise<number>;
|
|
2
|
+
export declare function validatePackedPublicPackagePublint(root: string): Promise<number>;
|
|
3
|
+
export declare function validatePackedPublicPackageManifest(root: string): Promise<number>;
|
|
4
|
+
export declare function validatePackedPublicPackageTypes(root: string): Promise<number>;
|
|
2
5
|
//# sourceMappingURL=packed-package.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packed-package.d.ts","sourceRoot":"","sources":["../../src/monorepo/packed-package.ts"],"names":[],"mappings":"AAUA,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhF"}
|
|
1
|
+
{"version":3,"file":"packed-package.d.ts","sourceRoot":"","sources":["../../src/monorepo/packed-package.ts"],"names":[],"mappings":"AAUA,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhF;AAED,wBAAsB,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMtF;AAED,wBAAsB,mCAAmC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMvF;AAED,wBAAsB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMpF"}
|
|
@@ -3,64 +3,96 @@ import { join } from 'node:path';
|
|
|
3
3
|
import { publint } from 'publint';
|
|
4
4
|
import { formatMessage } from 'publint/utils';
|
|
5
5
|
import { isRecord } from '../lib/json.js';
|
|
6
|
-
import { runStatus } from '../lib/run.js';
|
|
6
|
+
import { runResult, runStatus } from '../lib/run.js';
|
|
7
7
|
import { listPublicPackages } from '../lib/workspace.js';
|
|
8
8
|
import { readPackedPackageJson, validatePackedWorkspaceDependencies } from './packed-manifest.js';
|
|
9
9
|
export async function validatePackedPublicPackages(root) {
|
|
10
|
+
return ((await validatePackedPublicPackagePublint(root)) +
|
|
11
|
+
(await validatePackedPublicPackageManifest(root)) +
|
|
12
|
+
(await validatePackedPublicPackageTypes(root)));
|
|
13
|
+
}
|
|
14
|
+
export async function validatePackedPublicPackagePublint(root) {
|
|
10
15
|
let failures = 0;
|
|
11
16
|
for (const pkg of listPublicPackages(root)) {
|
|
12
|
-
failures += await
|
|
17
|
+
failures += await validatePackedPublicPackageTool(root, pkg, validatePublint);
|
|
13
18
|
}
|
|
14
19
|
return failures;
|
|
15
20
|
}
|
|
16
|
-
async function
|
|
21
|
+
export async function validatePackedPublicPackageManifest(root) {
|
|
17
22
|
let failures = 0;
|
|
23
|
+
for (const pkg of listPublicPackages(root)) {
|
|
24
|
+
failures += await validatePackedPublicPackageTool(root, pkg, validatePackedManifest);
|
|
25
|
+
}
|
|
26
|
+
return failures;
|
|
27
|
+
}
|
|
28
|
+
export async function validatePackedPublicPackageTypes(root) {
|
|
29
|
+
let failures = 0;
|
|
30
|
+
for (const pkg of listPublicPackages(root)) {
|
|
31
|
+
failures += await validatePackedPublicPackageTool(root, pkg, validateAttw);
|
|
32
|
+
}
|
|
33
|
+
return failures;
|
|
34
|
+
}
|
|
35
|
+
async function validatePackedPublicPackageTool(root, pkg, validate) {
|
|
18
36
|
const packed = await packPackage(root, pkg);
|
|
19
37
|
try {
|
|
20
|
-
|
|
21
|
-
for (const message of lint.messages) {
|
|
22
|
-
console.error(`${pkg.path}: publint ${message.type} ${message.code}: ${formatMessage(message, lint.pkg)}`);
|
|
23
|
-
failures++;
|
|
24
|
-
}
|
|
25
|
-
const packedPackage = await readPackedPackageJson(root, packed.path, pkg.name);
|
|
26
|
-
for (const message of validatePackedWorkspaceDependencies(root, pkg, packedPackage)) {
|
|
27
|
-
console.error(message);
|
|
28
|
-
failures++;
|
|
29
|
-
}
|
|
30
|
-
const attwArgs = [
|
|
31
|
-
packed.path,
|
|
32
|
-
'--format',
|
|
33
|
-
'ascii',
|
|
34
|
-
'--no-color',
|
|
35
|
-
'--profile',
|
|
36
|
-
'node16',
|
|
37
|
-
'--ignore-rules',
|
|
38
|
-
'cjs-resolves-to-esm',
|
|
39
|
-
...attwExcludedEntrypointArgs(pkg),
|
|
40
|
-
];
|
|
41
|
-
const attwStatus = await runStatus('attw', ['--quiet', ...attwArgs], root, true);
|
|
42
|
-
if (attwStatus !== 0) {
|
|
43
|
-
await runStatus('attw', attwArgs, root);
|
|
44
|
-
console.error(`${pkg.path}: are-the-types-wrong validation failed`);
|
|
45
|
-
failures++;
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
console.log(`${pkg.path}: are-the-types-wrong valid.`);
|
|
49
|
-
}
|
|
38
|
+
return await validate(root, pkg, packed);
|
|
50
39
|
}
|
|
51
40
|
catch (error) {
|
|
52
41
|
const message = error instanceof Error ? error.message : String(error);
|
|
53
42
|
console.error(`${pkg.path}: packed package validation failed: ${message}`);
|
|
54
|
-
|
|
43
|
+
return 1;
|
|
55
44
|
}
|
|
56
45
|
finally {
|
|
57
46
|
unlinkSync(packed.path);
|
|
58
47
|
}
|
|
59
|
-
|
|
60
|
-
|
|
48
|
+
}
|
|
49
|
+
async function validatePublint(_root, pkg, packed) {
|
|
50
|
+
let failures = 0;
|
|
51
|
+
const lint = await publint({ pack: { tarball: packed.arrayBuffer }, level: 'warning', strict: true });
|
|
52
|
+
for (const message of lint.messages) {
|
|
53
|
+
console.error(`${pkg.path}: publint ${message.type} ${message.code}: ${formatMessage(message, lint.pkg)}`);
|
|
54
|
+
failures++;
|
|
55
|
+
}
|
|
56
|
+
return failures;
|
|
57
|
+
}
|
|
58
|
+
async function validatePackedManifest(root, pkg, packed) {
|
|
59
|
+
let failures = 0;
|
|
60
|
+
const packedPackage = await readPackedPackageJson(root, packed.path, pkg.name);
|
|
61
|
+
for (const message of validatePackedWorkspaceDependencies(root, pkg, packedPackage)) {
|
|
62
|
+
console.error(message);
|
|
63
|
+
failures++;
|
|
61
64
|
}
|
|
62
65
|
return failures;
|
|
63
66
|
}
|
|
67
|
+
async function validateAttw(root, pkg, packed) {
|
|
68
|
+
const attwArgs = [
|
|
69
|
+
packed.path,
|
|
70
|
+
'--format',
|
|
71
|
+
'ascii',
|
|
72
|
+
'--no-color',
|
|
73
|
+
'--profile',
|
|
74
|
+
'node16',
|
|
75
|
+
'--ignore-rules',
|
|
76
|
+
'cjs-resolves-to-esm',
|
|
77
|
+
...attwExcludedEntrypointArgs(pkg),
|
|
78
|
+
];
|
|
79
|
+
const attw = await runResult('attw', attwArgs, root);
|
|
80
|
+
if (attw.exitCode === 0) {
|
|
81
|
+
return 0;
|
|
82
|
+
}
|
|
83
|
+
printAttwOutput(attw.stdout);
|
|
84
|
+
printAttwOutput(attw.stderr);
|
|
85
|
+
console.error(`${pkg.path}: are-the-types-wrong validation failed`);
|
|
86
|
+
return 1;
|
|
87
|
+
}
|
|
88
|
+
function printAttwOutput(output) {
|
|
89
|
+
for (const line of output.split('\n')) {
|
|
90
|
+
if (!line || line.includes('(ignored)')) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
console.error(line);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
64
96
|
function attwExcludedEntrypointArgs(pkg) {
|
|
65
97
|
const excluded = wasmExportEntrypoints(pkg.json.exports);
|
|
66
98
|
return excluded.length === 0 ? [] : ['--exclude-entrypoints', ...excluded];
|
|
@@ -1,10 +1,29 @@
|
|
|
1
1
|
export interface MonorepoContext {
|
|
2
2
|
root: string;
|
|
3
3
|
syncRuntime: boolean;
|
|
4
|
+
verbose?: boolean;
|
|
4
5
|
}
|
|
5
6
|
export interface ValidatePackOptions {
|
|
6
7
|
failFast?: boolean;
|
|
8
|
+
fix?: boolean;
|
|
9
|
+
verbose?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface MonorepoPack {
|
|
12
|
+
name: string;
|
|
13
|
+
init?(ctx: MonorepoContext): Promise<void> | void;
|
|
14
|
+
fixPreBuild?(ctx: MonorepoContext): Promise<void> | void;
|
|
15
|
+
fixPostBuild?(ctx: MonorepoContext): Promise<void> | void;
|
|
16
|
+
validatePreBuild?(ctx: MonorepoContext): Promise<number> | number;
|
|
17
|
+
validatePostBuild?(ctx: MonorepoContext): Promise<number> | number;
|
|
18
|
+
}
|
|
19
|
+
export interface ValidatePackRunHooks {
|
|
20
|
+
packs?: readonly MonorepoPack[];
|
|
21
|
+
runBuild?: (ctx: MonorepoContext, options?: ValidatePackOptions) => Promise<number> | number;
|
|
22
|
+
}
|
|
23
|
+
export interface ValidatePackResult {
|
|
24
|
+
failures: number;
|
|
25
|
+
failedChecks: number;
|
|
7
26
|
}
|
|
8
27
|
export declare function runInitPacks(ctx: MonorepoContext): Promise<void>;
|
|
9
|
-
export declare function runValidatePacks(ctx: MonorepoContext, options?: ValidatePackOptions): Promise<
|
|
28
|
+
export declare function runValidatePacks(ctx: MonorepoContext, options?: ValidatePackOptions, hooks?: ValidatePackRunHooks): Promise<ValidatePackResult>;
|
|
10
29
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/monorepo/packs/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/monorepo/packs/index.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClD,WAAW,CAAC,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzD,YAAY,CAAC,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,gBAAgB,CAAC,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAClE,iBAAiB,CAAC,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACpE;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CAC9F;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAgGD,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAItE;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,mBAAwB,EACjC,KAAK,GAAE,oBAAyB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CA0B7B"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { chmodSync, existsSync, statSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
import {
|
|
3
|
+
import { runStatus } from '../../lib/run.js';
|
|
4
|
+
import { readProjectTargets } from '../../nx/index.js';
|
|
5
|
+
import { syncBunLockfileVersions, validateBunLockfileVersions } from '../lockfile.js';
|
|
4
6
|
import { validateManagedFiles } from '../managed-files.js';
|
|
5
|
-
import { validateNxSync } from '../nx-sync.js';
|
|
7
|
+
import { fixNxSync, validateNxSync } from '../nx-sync.js';
|
|
6
8
|
import { fixPackageHygiene, validatePackageHygiene } from '../package-hygiene.js';
|
|
7
|
-
import { applyNxReleaseDefaults, applyPublicPackageDefaults, applyWorkspaceDependencyDefaults, validateNxReleaseConfig, validatePublicPackageMetadata, validatePublicTags, validateRootPackagePolicy, validateWorkspaceDependencies, } from '../package-policy.js';
|
|
8
|
-
import {
|
|
9
|
+
import { applyFixableMonorepoDefaults, applyNxReleaseDefaults, applyPublicPackageDefaults, applyWorkspaceDependencyDefaults, validateNxProjectNames, validateNxReleaseConfig, validatePublicPackageMetadata, validatePublicTags, validateRootPackagePolicy, validateWorkspaceDependencies, } from '../package-policy.js';
|
|
10
|
+
import { validatePackedPublicPackageManifest, validatePackedPublicPackagePublint, validatePackedPublicPackageTypes, } from '../packed-package.js';
|
|
9
11
|
import { syncRootRuntimeVersions } from '../runtime.js';
|
|
12
|
+
import { applyToolConfigDefaults, validateToolConfig } from '../tool-validation.js';
|
|
10
13
|
const packs = [
|
|
11
14
|
{
|
|
12
15
|
name: 'core',
|
|
@@ -20,12 +23,21 @@ const packs = [
|
|
|
20
23
|
console.log('skip root runtime versions (outside devenv; pass --sync-runtime to force)');
|
|
21
24
|
}
|
|
22
25
|
},
|
|
23
|
-
async
|
|
26
|
+
async fixPreBuild(ctx) {
|
|
27
|
+
applyFixableMonorepoDefaults(ctx.root);
|
|
28
|
+
await applyToolConfigDefaults(ctx.root);
|
|
29
|
+
syncBunLockfileVersions(ctx.root);
|
|
30
|
+
await fixNxSync(ctx.root, ctx.verbose === true);
|
|
31
|
+
applyWorkspaceDependencyDefaults(ctx.root, { resolvedTargetsByProject: await readResolvedTargetsByProject(ctx) });
|
|
32
|
+
},
|
|
33
|
+
async validatePreBuild(ctx) {
|
|
24
34
|
return (validateManagedFiles(ctx.root) +
|
|
25
35
|
validateRootPackagePolicy(ctx.root) +
|
|
36
|
+
validateToolConfig(ctx.root) +
|
|
37
|
+
validateNxProjectNames(ctx.root) +
|
|
26
38
|
validateNxReleaseConfig(ctx.root) +
|
|
27
39
|
validateBunLockfileVersions(ctx.root) +
|
|
28
|
-
(await validateNxSync(ctx.root)));
|
|
40
|
+
(await validateNxSync(ctx.root, ctx.verbose === true)));
|
|
29
41
|
},
|
|
30
42
|
},
|
|
31
43
|
{
|
|
@@ -33,24 +45,55 @@ const packs = [
|
|
|
33
45
|
init(ctx) {
|
|
34
46
|
applyPublicPackageDefaults(ctx.root);
|
|
35
47
|
},
|
|
36
|
-
|
|
48
|
+
fixPreBuild(ctx) {
|
|
49
|
+
applyPublicPackageDefaults(ctx.root);
|
|
50
|
+
},
|
|
51
|
+
validatePreBuild(ctx) {
|
|
37
52
|
return validatePublicTags(ctx.root) + validatePublicPackageMetadata(ctx.root);
|
|
38
53
|
},
|
|
39
54
|
},
|
|
40
55
|
{
|
|
41
56
|
name: 'workspace-dependencies',
|
|
42
|
-
|
|
57
|
+
init(ctx) {
|
|
43
58
|
applyWorkspaceDependencyDefaults(ctx.root);
|
|
59
|
+
},
|
|
60
|
+
async fixPostBuild(ctx) {
|
|
61
|
+
applyWorkspaceDependencyDefaults(ctx.root, { resolvedTargetsByProject: await readResolvedTargetsByProject(ctx) });
|
|
62
|
+
},
|
|
63
|
+
async validatePostBuild(ctx) {
|
|
64
|
+
return validateWorkspaceDependencies(ctx.root, {
|
|
65
|
+
resolvedTargetsByProject: await readResolvedTargetsByProject(ctx),
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'package-hygiene',
|
|
71
|
+
async init(ctx) {
|
|
72
|
+
await fixPackageHygiene(ctx.root, ctx.verbose === true);
|
|
73
|
+
},
|
|
74
|
+
async fixPostBuild(ctx) {
|
|
44
75
|
await fixPackageHygiene(ctx.root);
|
|
45
76
|
},
|
|
46
|
-
async
|
|
47
|
-
return
|
|
77
|
+
async validatePostBuild(ctx) {
|
|
78
|
+
return validatePackageHygiene(ctx.root, ctx.verbose === true);
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'packed-package-publint',
|
|
83
|
+
validatePostBuild(ctx) {
|
|
84
|
+
return validatePackedPublicPackagePublint(ctx.root);
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'packed-package-manifest',
|
|
89
|
+
validatePostBuild(ctx) {
|
|
90
|
+
return validatePackedPublicPackageManifest(ctx.root);
|
|
48
91
|
},
|
|
49
92
|
},
|
|
50
93
|
{
|
|
51
|
-
name: 'packed-
|
|
52
|
-
|
|
53
|
-
return
|
|
94
|
+
name: 'packed-package-types',
|
|
95
|
+
validatePostBuild(ctx) {
|
|
96
|
+
return validatePackedPublicPackageTypes(ctx.root);
|
|
54
97
|
},
|
|
55
98
|
},
|
|
56
99
|
];
|
|
@@ -59,22 +102,198 @@ export async function runInitPacks(ctx) {
|
|
|
59
102
|
await pack.init?.(ctx);
|
|
60
103
|
}
|
|
61
104
|
}
|
|
62
|
-
export async function runValidatePacks(ctx, options = {}) {
|
|
105
|
+
export async function runValidatePacks(ctx, options = {}, hooks = {}) {
|
|
106
|
+
const selectedPacks = hooks.packs ?? packs;
|
|
107
|
+
const build = hooks.runBuild ?? runBuild;
|
|
108
|
+
if (options.fix) {
|
|
109
|
+
await runFixPhase(ctx, selectedPacks, 'pre-build', 'fixPreBuild');
|
|
110
|
+
const buildFailures = await build(ctx, options);
|
|
111
|
+
if (buildFailures > 0) {
|
|
112
|
+
return { failures: buildFailures, failedChecks: 1 };
|
|
113
|
+
}
|
|
114
|
+
await runFixPhase(ctx, selectedPacks, 'post-build', 'fixPostBuild');
|
|
115
|
+
return runValidationPhases(ctx, selectedPacks, options, false);
|
|
116
|
+
}
|
|
117
|
+
const preBuild = await runValidationPhase(ctx, selectedPacks, options, 'pre-build', 'validatePreBuild', false);
|
|
118
|
+
if (preBuild.failures > 0 && options.failFast) {
|
|
119
|
+
return preBuild;
|
|
120
|
+
}
|
|
121
|
+
const buildFailures = await build(ctx, options);
|
|
122
|
+
if (buildFailures > 0) {
|
|
123
|
+
return { failures: preBuild.failures + buildFailures, failedChecks: preBuild.failedChecks + 1 };
|
|
124
|
+
}
|
|
125
|
+
return sumResults(preBuild, await runValidationPhase(ctx, selectedPacks, options, 'post-build', 'validatePostBuild', true));
|
|
126
|
+
}
|
|
127
|
+
async function runValidationPhases(ctx, selectedPacks, options, printedBefore) {
|
|
128
|
+
const preBuild = await runValidationPhase(ctx, selectedPacks, options, 'pre-build', 'validatePreBuild', printedBefore);
|
|
129
|
+
if (preBuild.failures > 0 && options.failFast) {
|
|
130
|
+
return preBuild;
|
|
131
|
+
}
|
|
132
|
+
return sumResults(preBuild, await runValidationPhase(ctx, selectedPacks, options, 'post-build', 'validatePostBuild', true));
|
|
133
|
+
}
|
|
134
|
+
async function runValidationPhase(ctx, selectedPacks, options, phase, method, printedBefore) {
|
|
63
135
|
let failures = 0;
|
|
136
|
+
let failedChecks = 0;
|
|
64
137
|
let checkedPacks = 0;
|
|
65
|
-
|
|
66
|
-
|
|
138
|
+
let hasPrinted = printedBefore;
|
|
139
|
+
for (const pack of selectedPacks) {
|
|
140
|
+
const validate = pack[method];
|
|
141
|
+
if (!validate) {
|
|
67
142
|
continue;
|
|
68
143
|
}
|
|
69
|
-
|
|
144
|
+
const label = `${pack.name} (${phase})`;
|
|
145
|
+
if (options.verbose) {
|
|
146
|
+
printCheckHeading(label, hasPrinted || checkedPacks > 0);
|
|
147
|
+
}
|
|
148
|
+
hasPrinted = true;
|
|
70
149
|
checkedPacks++;
|
|
71
|
-
|
|
150
|
+
let packFailures;
|
|
151
|
+
let output = emptyCapturedOutput();
|
|
152
|
+
try {
|
|
153
|
+
if (options.verbose) {
|
|
154
|
+
packFailures = await validate(ctx);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const captured = await captureConsoleOutput(() => validate(ctx));
|
|
158
|
+
packFailures = captured.result;
|
|
159
|
+
output = captured.output;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
if (!options.verbose) {
|
|
164
|
+
printCheckHeading(label, true);
|
|
165
|
+
if (error instanceof CapturedConsoleError) {
|
|
166
|
+
output = error.output;
|
|
167
|
+
}
|
|
168
|
+
printCapturedOutput(output);
|
|
169
|
+
}
|
|
170
|
+
throw error instanceof CapturedConsoleError ? error.cause : error;
|
|
171
|
+
}
|
|
72
172
|
failures += packFailures;
|
|
173
|
+
if (packFailures > 0) {
|
|
174
|
+
failedChecks++;
|
|
175
|
+
}
|
|
176
|
+
if (!options.verbose && packFailures > 0) {
|
|
177
|
+
printCheckHeading(label, true);
|
|
178
|
+
printCapturedOutput(output);
|
|
179
|
+
}
|
|
180
|
+
printCheckStatus(label, packFailures);
|
|
73
181
|
if (packFailures > 0 && options.failFast) {
|
|
74
182
|
break;
|
|
75
183
|
}
|
|
76
184
|
}
|
|
77
|
-
return failures;
|
|
185
|
+
return { failures, failedChecks };
|
|
186
|
+
}
|
|
187
|
+
function sumResults(left, right) {
|
|
188
|
+
return { failures: left.failures + right.failures, failedChecks: left.failedChecks + right.failedChecks };
|
|
189
|
+
}
|
|
190
|
+
async function runFixPhase(ctx, selectedPacks, phase, method) {
|
|
191
|
+
let checkedPacks = 0;
|
|
192
|
+
for (const pack of selectedPacks) {
|
|
193
|
+
const fix = pack[method];
|
|
194
|
+
if (!fix) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const label = `${pack.name} (${phase} fix)`;
|
|
198
|
+
if (ctx.verbose) {
|
|
199
|
+
printCheckHeading(label, checkedPacks > 0);
|
|
200
|
+
}
|
|
201
|
+
checkedPacks++;
|
|
202
|
+
if (ctx.verbose) {
|
|
203
|
+
await fix(ctx);
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
let output = emptyCapturedOutput();
|
|
207
|
+
try {
|
|
208
|
+
output = (await captureConsoleOutput(() => fix(ctx))).output;
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
if (error instanceof CapturedConsoleError) {
|
|
212
|
+
output = error.output;
|
|
213
|
+
}
|
|
214
|
+
printCheckHeading(label, true);
|
|
215
|
+
printCapturedOutput(output);
|
|
216
|
+
throw error instanceof CapturedConsoleError ? error.cause : error;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async function runBuild(ctx, options = {}) {
|
|
221
|
+
if (options.verbose) {
|
|
222
|
+
printCheckHeading('build', true);
|
|
223
|
+
}
|
|
224
|
+
const status = await runStatus('nx', ['run-many', '-t', 'build'], ctx.root, options.verbose !== true);
|
|
225
|
+
if (status !== 0) {
|
|
226
|
+
if (!options.verbose) {
|
|
227
|
+
printCheckHeading('build', true);
|
|
228
|
+
}
|
|
229
|
+
console.error('nx run-many -t build failed');
|
|
230
|
+
printCheckStatus('build', 1);
|
|
231
|
+
return 1;
|
|
232
|
+
}
|
|
233
|
+
printCheckStatus('build', 0);
|
|
234
|
+
return 0;
|
|
235
|
+
}
|
|
236
|
+
function printCheckStatus(label, failures) {
|
|
237
|
+
if (failures === 0) {
|
|
238
|
+
console.log(`🆗 ${label}`);
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
const noun = failures === 1 ? 'problem' : 'problems';
|
|
242
|
+
console.log(`👎 ${label} (${failures} ${noun})\n`);
|
|
243
|
+
}
|
|
244
|
+
function printCheckHeading(label, separate) {
|
|
245
|
+
console.log(`${separate ? '\n' : ''}== ${label} ==`);
|
|
246
|
+
}
|
|
247
|
+
function emptyCapturedOutput() {
|
|
248
|
+
return { logs: [], errors: [] };
|
|
249
|
+
}
|
|
250
|
+
async function captureConsoleOutput(fn) {
|
|
251
|
+
const output = emptyCapturedOutput();
|
|
252
|
+
const originalLog = console.log;
|
|
253
|
+
const originalError = console.error;
|
|
254
|
+
console.log = (...args) => {
|
|
255
|
+
output.logs.push(args.join(' '));
|
|
256
|
+
};
|
|
257
|
+
console.error = (...args) => {
|
|
258
|
+
output.errors.push(args.join(' '));
|
|
259
|
+
};
|
|
260
|
+
try {
|
|
261
|
+
return { result: await fn(), output };
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
throw new CapturedConsoleError(error, output);
|
|
265
|
+
}
|
|
266
|
+
finally {
|
|
267
|
+
console.log = originalLog;
|
|
268
|
+
console.error = originalError;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
class CapturedConsoleError extends Error {
|
|
272
|
+
cause;
|
|
273
|
+
output;
|
|
274
|
+
constructor(cause, output) {
|
|
275
|
+
super(cause instanceof Error ? cause.message : String(cause));
|
|
276
|
+
this.cause = cause;
|
|
277
|
+
this.output = output;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function printCapturedOutput(output) {
|
|
281
|
+
for (const line of output.logs) {
|
|
282
|
+
console.log(line);
|
|
283
|
+
}
|
|
284
|
+
for (const line of output.errors) {
|
|
285
|
+
console.log(line);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
async function readResolvedTargetsByProject(ctx) {
|
|
289
|
+
const projects = await readProjectTargets(ctx.root);
|
|
290
|
+
return new Map(projects.map((project) => [
|
|
291
|
+
project.project,
|
|
292
|
+
{
|
|
293
|
+
targets: new Set(project.targets),
|
|
294
|
+
...(project.buildDependsOn ? { buildDependsOn: project.buildDependsOn } : {}),
|
|
295
|
+
},
|
|
296
|
+
]));
|
|
78
297
|
}
|
|
79
298
|
function ensureLocalSmooShim(root) {
|
|
80
299
|
const shim = join(root, 'tooling', 'smoo');
|
|
@@ -24,7 +24,6 @@ export interface PublishWorkflowStep {
|
|
|
24
24
|
id?: string;
|
|
25
25
|
condition?: PublishWorkflowCondition;
|
|
26
26
|
nxTarget?: PublishWorkflowNxTarget;
|
|
27
|
-
needsNodeAuthToken?: boolean;
|
|
28
27
|
}
|
|
29
28
|
export interface PublishWorkflowDefinition {
|
|
30
29
|
steps: PublishWorkflowStep[];
|
|
@@ -51,7 +50,6 @@ export interface PublishWorkflowCallbacks {
|
|
|
51
50
|
buildSelfHostedCli(): Promise<void>;
|
|
52
51
|
repairPendingReleases(input: {
|
|
53
52
|
dryRun: boolean;
|
|
54
|
-
nodeAuthToken: boolean;
|
|
55
53
|
}): Promise<void>;
|
|
56
54
|
versionRelease(input: {
|
|
57
55
|
bump: PublishWorkflowBump;
|
|
@@ -67,13 +65,11 @@ export interface PublishWorkflowCallbacks {
|
|
|
67
65
|
publishRelease(input: {
|
|
68
66
|
bump: PublishWorkflowBump;
|
|
69
67
|
dryRun: boolean;
|
|
70
|
-
nodeAuthToken: boolean;
|
|
71
68
|
}): Promise<void>;
|
|
72
69
|
saveNixDevenv(input: PublishWorkflowSetupOutputs): Promise<void>;
|
|
73
70
|
}
|
|
74
71
|
export interface PublishWorkflowRunContext {
|
|
75
72
|
inputs: PublishWorkflowInputs;
|
|
76
|
-
nodeAuthToken: boolean;
|
|
77
73
|
callbacks: PublishWorkflowCallbacks;
|
|
78
74
|
}
|
|
79
75
|
export interface PublishWorkflowRunResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-workflow.d.ts","sourceRoot":"","sources":["../../src/monorepo/publish-workflow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publish-workflow.d.ts","sourceRoot":"","sources":["../../src/monorepo/publish-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isSmoothBricksCodebasePackageName } from '../lib/cli-package.js';
|
|
1
2
|
export var PublishWorkflowStepKind;
|
|
2
3
|
(function (PublishWorkflowStepKind) {
|
|
3
4
|
PublishWorkflowStepKind["Checkout"] = "checkout";
|
|
@@ -22,7 +23,7 @@ export function definePublishWorkflow(options = {}) {
|
|
|
22
23
|
{ kind: PublishWorkflowStepKind.SetupDevenv, name: '🧱 Setup Nix/devenv', id: 'setup' },
|
|
23
24
|
{ kind: PublishWorkflowStepKind.ConfigureReleaseAuthor, name: '🤖 Configure release author' },
|
|
24
25
|
];
|
|
25
|
-
if (options.repoName
|
|
26
|
+
if (isSmoothBricksCodebasePackageName(options.repoName)) {
|
|
26
27
|
setupSteps.push({ kind: PublishWorkflowStepKind.BuildSelfHostedCli, name: '🏗️ Build self-hosted smoo' });
|
|
27
28
|
}
|
|
28
29
|
return {
|
|
@@ -31,7 +32,6 @@ export function definePublishWorkflow(options = {}) {
|
|
|
31
32
|
{
|
|
32
33
|
kind: PublishWorkflowStepKind.RepairPendingReleases,
|
|
33
34
|
name: '🧯 Repair pending releases',
|
|
34
|
-
needsNodeAuthToken: true,
|
|
35
35
|
},
|
|
36
36
|
{ kind: PublishWorkflowStepKind.VersionRelease, name: '🏷️ Version release', id: 'version' },
|
|
37
37
|
{
|
|
@@ -66,7 +66,6 @@ export function definePublishWorkflow(options = {}) {
|
|
|
66
66
|
{
|
|
67
67
|
kind: PublishWorkflowStepKind.PublishRelease,
|
|
68
68
|
name: `📦 Publish release (${versionMode})`,
|
|
69
|
-
needsNodeAuthToken: true,
|
|
70
69
|
},
|
|
71
70
|
{
|
|
72
71
|
kind: PublishWorkflowStepKind.SaveNixDevenv,
|
|
@@ -105,7 +104,6 @@ export async function runPublishWorkflow(workflow, context) {
|
|
|
105
104
|
case PublishWorkflowStepKind.RepairPendingReleases:
|
|
106
105
|
await context.callbacks.repairPendingReleases({
|
|
107
106
|
dryRun: context.inputs.dryRun,
|
|
108
|
-
nodeAuthToken: context.nodeAuthToken,
|
|
109
107
|
});
|
|
110
108
|
break;
|
|
111
109
|
case PublishWorkflowStepKind.VersionRelease:
|
|
@@ -132,7 +130,6 @@ export async function runPublishWorkflow(workflow, context) {
|
|
|
132
130
|
await context.callbacks.publishRelease({
|
|
133
131
|
bump: context.inputs.bump,
|
|
134
132
|
dryRun: context.inputs.dryRun,
|
|
135
|
-
nodeAuthToken: context.nodeAuthToken,
|
|
136
133
|
});
|
|
137
134
|
break;
|
|
138
135
|
case PublishWorkflowStepKind.SaveNixDevenv:
|
|
@@ -271,13 +268,11 @@ function yamlLinesForStep(step) {
|
|
|
271
268
|
` - name: ${step.name}`,
|
|
272
269
|
' # SmoothBricks self-hosts smoo from source, but Nx release loads',
|
|
273
270
|
' # @smoothbricks/cli/nx-version-actions through the built package export.',
|
|
274
|
-
' run: nx build
|
|
271
|
+
' run: nx build cli',
|
|
275
272
|
];
|
|
276
273
|
case PublishWorkflowStepKind.RepairPendingReleases:
|
|
277
274
|
return [
|
|
278
275
|
` - name: ${step.name}`,
|
|
279
|
-
' env:',
|
|
280
|
-
` NODE_AUTH_TOKEN: ${githubExpression('secrets.NPM_TOKEN')}`,
|
|
281
276
|
` run: smoo release repair-pending --dry-run "${githubExpression('inputs.dry_run')}"`,
|
|
282
277
|
];
|
|
283
278
|
case PublishWorkflowStepKind.VersionRelease:
|
|
@@ -314,10 +309,8 @@ function yamlLinesForStep(step) {
|
|
|
314
309
|
return [
|
|
315
310
|
` - name: ${step.name}`,
|
|
316
311
|
' # smoo packs with Bun, then publishes tarballs with npm. Existing',
|
|
317
|
-
' # packages use trusted publishing/OIDC
|
|
318
|
-
' #
|
|
319
|
-
' env:',
|
|
320
|
-
` NODE_AUTH_TOKEN: ${githubExpression('secrets.NPM_TOKEN')}`,
|
|
312
|
+
' # packages must already exist on npm and use trusted publishing/OIDC.',
|
|
313
|
+
' # Missing package names are bootstrapped locally before trust setup.',
|
|
321
314
|
` run: smoo release publish --bump "${githubExpression('inputs.bump')}" --dry-run "${githubExpression('inputs.dry_run')}"`,
|
|
322
315
|
];
|
|
323
316
|
case PublishWorkflowStepKind.SaveNixDevenv:
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type PackageJson } from '../lib/workspace.js';
|
|
2
|
+
export interface ToolPolicy {
|
|
3
|
+
isSmoothBricksCodebase: boolean;
|
|
4
|
+
toolingPackageName: string;
|
|
5
|
+
cliDependencyRange: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ToolContext {
|
|
8
|
+
rootPackage: PackageJson | null;
|
|
9
|
+
policy: ToolPolicy;
|
|
10
|
+
}
|
|
11
|
+
export declare function applyToolConfigDefaults(root: string): Promise<void>;
|
|
12
|
+
export declare function validateToolConfig(root: string): number;
|
|
13
|
+
export declare function applyRootDevDependencyDefaults(root: string, context: ToolContext): Promise<void>;
|
|
14
|
+
export declare function applyToolingPackageDefaults(root: string, policy: ToolPolicy): void;
|
|
15
|
+
export declare function applyToolingWorkspaceDefault(root: string): void;
|
|
16
|
+
export declare function applyDevenvPackageDefaults(root: string): void;
|
|
17
|
+
export declare function validateRootDevDependencies(policy: ToolPolicy, rootPackage: PackageJson | null): number;
|
|
18
|
+
export declare function validateToolingPackage(root: string, policy: ToolPolicy): number;
|
|
19
|
+
export declare function validateToolingWorkspace(rootPackage: PackageJson | null): number;
|
|
20
|
+
export declare function validateDevenvPackages(root: string): number;
|
|
21
|
+
export declare function readToolContext(root: string): ToolContext;
|
|
22
|
+
//# sourceMappingURL=tool-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-validation.d.ts","sourceRoot":"","sources":["../../src/monorepo/tool-validation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAyB,MAAM,qBAAqB,CAAC;AAU9E,MAAM,WAAW,UAAU;IACzB,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC;CACpB;AA8BD,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED,wBAAsB,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBtG;AAoCD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAkBlF;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAY/D;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA0B7D;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,CAyBvG;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAoB/E;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,CAWhF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmB3D;AA0DD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAGzD"}
|