@invarn/cibuild 1.6.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +1 -1
- package/dist/src/commands/edit.d.ts +9 -0
- package/dist/src/commands/edit.d.ts.map +1 -1
- package/dist/src/commands/edit.js +5 -4
- package/dist/src/commands/edit.test.d.ts +6 -0
- package/dist/src/commands/edit.test.d.ts.map +1 -0
- package/dist/src/commands/edit.test.js +45 -0
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +2 -1
- package/dist/src/yaml/converter.d.ts.map +1 -1
- package/dist/src/yaml/converter.js +5 -4
- package/dist/src/yaml/converter.test.js +51 -0
- package/dist/src/yaml/meta-helpers.d.ts +19 -0
- package/dist/src/yaml/meta-helpers.d.ts.map +1 -0
- package/dist/src/yaml/meta-helpers.js +20 -0
- package/dist/src/yaml/parser.d.ts.map +1 -1
- package/dist/src/yaml/parser.js +23 -20
- package/dist/src/yaml/parser.test.d.ts +5 -0
- package/dist/src/yaml/parser.test.d.ts.map +1 -0
- package/dist/src/yaml/parser.test.js +83 -0
- package/dist/src/yaml/platform-detector.d.ts +1 -1
- package/dist/src/yaml/platform-detector.d.ts.map +1 -1
- package/dist/src/yaml/platform-detector.js +7 -6
- package/dist/src/yaml/platform-detector.test.js +111 -0
- package/dist/src/yaml/steps/xcode.d.ts.map +1 -1
- package/dist/src/yaml/steps/xcode.js +17 -0
- package/dist/src/yaml/types.d.ts +1 -0
- package/dist/src/yaml/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import type { YAMLPipeline } from '../yaml/types.js';
|
|
1
2
|
import '../yaml/steps/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Detects the target platform of a workflow.
|
|
5
|
+
* Checks (in order):
|
|
6
|
+
* 1. meta.invarn.platform (preferred), falling back to meta.cibuild.io.platform
|
|
7
|
+
* 2. Existing steps in the workflow — fallback
|
|
8
|
+
* Returns 'ios' or 'android', or null if platform cannot be determined.
|
|
9
|
+
*/
|
|
10
|
+
export declare function detectWorkflowPlatform(pipeline: YAMLPipeline, workflowName: string): 'ios' | 'android' | null;
|
|
2
11
|
export declare function handleEditCommand(pipelinePath: string, workflowName?: string): Promise<void>;
|
|
3
12
|
//# sourceMappingURL=edit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/commands/edit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/commands/edit.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,kBAAkB,CAAC;AAE/D,OAAO,wBAAwB,CAAC;AAsShC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,IAAI,CAgB7G;AAqED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CA+Sf"}
|
|
@@ -4,6 +4,7 @@ import { resolve, basename } from 'node:path';
|
|
|
4
4
|
import * as yaml from 'js-yaml';
|
|
5
5
|
import prompts from 'prompts';
|
|
6
6
|
import { loadYAMLPipeline } from '../yaml/parser.js';
|
|
7
|
+
import { getInvarnMeta } from '../yaml/meta-helpers.js';
|
|
7
8
|
import { SecretsManager } from '../yaml/secrets-manager.js';
|
|
8
9
|
import { getAvailableSteps, getStepMetadata } from '../yaml/steps/registry.js';
|
|
9
10
|
// Ensure the step registry is populated
|
|
@@ -286,13 +287,13 @@ async function handleAddRegisteredStep(pipelinePath, workflowName, _pipeline, st
|
|
|
286
287
|
/**
|
|
287
288
|
* Detects the target platform of a workflow.
|
|
288
289
|
* Checks (in order):
|
|
289
|
-
* 1. meta.
|
|
290
|
+
* 1. meta.invarn.platform (preferred), falling back to meta.cibuild.io.platform
|
|
290
291
|
* 2. Existing steps in the workflow — fallback
|
|
291
292
|
* Returns 'ios' or 'android', or null if platform cannot be determined.
|
|
292
293
|
*/
|
|
293
|
-
function detectWorkflowPlatform(pipeline, workflowName) {
|
|
294
|
-
// 1. Explicit platform declaration
|
|
295
|
-
const metaPlatform = pipeline
|
|
294
|
+
export function detectWorkflowPlatform(pipeline, workflowName) {
|
|
295
|
+
// 1. Explicit platform declaration on the Invarn-owned meta block
|
|
296
|
+
const metaPlatform = getInvarnMeta(pipeline)?.platform;
|
|
296
297
|
if (metaPlatform === 'ios' || metaPlatform === 'android' || metaPlatform === 'kmm')
|
|
297
298
|
return metaPlatform === 'kmm' ? 'ios' : metaPlatform;
|
|
298
299
|
// 2. Scan existing steps as fallback
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.test.d.ts","sourceRoot":"","sources":["../../../src/commands/edit.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for edit-command helpers.
|
|
3
|
+
* Focused on the dual-read of meta.invarn + meta.cibuild.io for the platform hint.
|
|
4
|
+
*/
|
|
5
|
+
import { describe, test, expect } from '@jest/globals';
|
|
6
|
+
import { detectWorkflowPlatform } from './edit.js';
|
|
7
|
+
describe('detectWorkflowPlatform — meta dual-read', () => {
|
|
8
|
+
function pipelineWithMeta(meta) {
|
|
9
|
+
return {
|
|
10
|
+
format_version: '4',
|
|
11
|
+
meta,
|
|
12
|
+
workflows: {
|
|
13
|
+
primary: {
|
|
14
|
+
steps: [{ 'script@1.0.0': { inputs: {} } }],
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
test('reads platform from meta.invarn when only invarn is present', () => {
|
|
20
|
+
const pipeline = pipelineWithMeta({
|
|
21
|
+
invarn: { platform: 'ios' },
|
|
22
|
+
});
|
|
23
|
+
expect(detectWorkflowPlatform(pipeline, 'primary')).toBe('ios');
|
|
24
|
+
});
|
|
25
|
+
test('prefers meta.invarn.platform over meta.cibuild.io.platform when both are present', () => {
|
|
26
|
+
const pipeline = pipelineWithMeta({
|
|
27
|
+
invarn: { platform: 'ios' },
|
|
28
|
+
'cibuild.io': { platform: 'android' },
|
|
29
|
+
});
|
|
30
|
+
expect(detectWorkflowPlatform(pipeline, 'primary')).toBe('ios');
|
|
31
|
+
});
|
|
32
|
+
test('falls back to meta.cibuild.io.platform when meta.invarn is absent', () => {
|
|
33
|
+
const pipeline = pipelineWithMeta({
|
|
34
|
+
'cibuild.io': { platform: 'android' },
|
|
35
|
+
});
|
|
36
|
+
expect(detectWorkflowPlatform(pipeline, 'primary')).toBe('android');
|
|
37
|
+
});
|
|
38
|
+
test('maps kmm to ios from meta.invarn', () => {
|
|
39
|
+
const pipeline = pipelineWithMeta({
|
|
40
|
+
invarn: { platform: 'kmm' },
|
|
41
|
+
});
|
|
42
|
+
expect(detectWorkflowPlatform(pipeline, 'primary')).toBe('ios');
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=edit.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAUD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0Q7E"}
|
|
@@ -5,6 +5,7 @@ import { resolve } from "node:path";
|
|
|
5
5
|
import prompts from "prompts";
|
|
6
6
|
import { detectMobileProjectRoot } from "../shared/detect-project.js";
|
|
7
7
|
import { ensureCiBuildGitignoreEntries } from "../shared/gitignore.js";
|
|
8
|
+
import { getInvarnMeta } from "../yaml/meta-helpers.js";
|
|
8
9
|
import { loadYAMLPipeline } from "../yaml/parser.js";
|
|
9
10
|
import { handleBuildCommand } from "./build.js";
|
|
10
11
|
import { generateGitHubActionsWorkflow } from "./github-workflow.js";
|
|
@@ -238,7 +239,7 @@ export async function handleInitCommand(opts = {}) {
|
|
|
238
239
|
let importedPlatform = null;
|
|
239
240
|
try {
|
|
240
241
|
const yamlPipeline = loadYAMLPipeline(destPath);
|
|
241
|
-
const meta = yamlPipeline
|
|
242
|
+
const meta = getInvarnMeta(yamlPipeline);
|
|
242
243
|
if (meta?.platform === "ios" || meta?.platform === "android" || meta?.platform === "kmm") {
|
|
243
244
|
importedPlatform = meta.platform === "kmm" ? "ios" : meta.platform;
|
|
244
245
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../../src/yaml/converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAW,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../../src/yaml/converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAW,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;AAMzE,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAkCD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,QAAQ,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,CAAC,CA0I3B;AAwGD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CAEtE"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Converts YAML pipeline workflows to PipelineDef format
|
|
3
3
|
* This bridges the YAML configuration with the existing runner engine
|
|
4
4
|
*/
|
|
5
|
+
import { getInvarnMeta } from './meta-helpers.js';
|
|
5
6
|
import { detectPlatformInfo } from './platform-detector.js';
|
|
6
7
|
import { EnvResolver } from './env-resolver.js';
|
|
7
8
|
import { getStepExecutor, UnrecognizedStepError } from './steps/registry.js';
|
|
@@ -61,16 +62,16 @@ export async function convertYAMLToPipelineDef(pipeline, config, workflowName, y
|
|
|
61
62
|
// Step 3: Environment variable resolution
|
|
62
63
|
const envResolver = new EnvResolver(pipeline, selectedWorkflow, selectedWorkflowName, platformInfo.platform, platformInfo.stack, yamlFilePath);
|
|
63
64
|
// Step 3.5: Auto-inject cache steps if cachedBuild is enabled
|
|
64
|
-
const
|
|
65
|
-
const cachedBuild =
|
|
65
|
+
const invarnMeta = getInvarnMeta(pipeline);
|
|
66
|
+
const cachedBuild = invarnMeta?.cachedBuild === true;
|
|
66
67
|
let workflowSteps = [...selectedWorkflow.steps];
|
|
67
|
-
if (cachedBuild &&
|
|
68
|
+
if (cachedBuild && invarnMeta?.platform) {
|
|
68
69
|
const platformToCacheTechnology = {
|
|
69
70
|
ios: 'ios',
|
|
70
71
|
android: 'gradle',
|
|
71
72
|
kmm: 'kmm',
|
|
72
73
|
};
|
|
73
|
-
const technology = platformToCacheTechnology[
|
|
74
|
+
const technology = platformToCacheTechnology[invarnMeta.platform];
|
|
74
75
|
if (technology) {
|
|
75
76
|
// Remove any manually written cache-pull/cache-push steps
|
|
76
77
|
workflowSteps = workflowSteps.filter(step => {
|
|
@@ -492,6 +492,57 @@ describe('convertYAMLToPipelineDef - Warning System', () => {
|
|
|
492
492
|
expect(result.pipeline.steps[2].name).toBe('cache-push');
|
|
493
493
|
expect(result.pipeline.steps[2].script).toContain('kmm-');
|
|
494
494
|
});
|
|
495
|
+
test('should inject cache steps when cachedBuild + platform live under meta.invarn', async () => {
|
|
496
|
+
const pipeline = {
|
|
497
|
+
format_version: '1',
|
|
498
|
+
meta: {
|
|
499
|
+
invarn: {
|
|
500
|
+
stack: 'macos-xcode-26.4',
|
|
501
|
+
platform: 'kmm',
|
|
502
|
+
cachedBuild: true,
|
|
503
|
+
},
|
|
504
|
+
},
|
|
505
|
+
workflows: {
|
|
506
|
+
build: {
|
|
507
|
+
steps: [
|
|
508
|
+
{ 'script@1.0.0': { inputs: { content: 'echo "building"' } } },
|
|
509
|
+
],
|
|
510
|
+
},
|
|
511
|
+
},
|
|
512
|
+
};
|
|
513
|
+
const result = await convertYAMLToPipelineDef(pipeline, mockConfig, 'build');
|
|
514
|
+
expect(result.pipeline.steps.length).toBe(3);
|
|
515
|
+
expect(result.pipeline.steps[0].name).toBe('cache-pull');
|
|
516
|
+
expect(result.pipeline.steps[1].name).toBe('script');
|
|
517
|
+
expect(result.pipeline.steps[2].name).toBe('cache-push');
|
|
518
|
+
});
|
|
519
|
+
test('should prefer meta.invarn cachedBuild over meta.cibuild.io when both are present', async () => {
|
|
520
|
+
const pipeline = {
|
|
521
|
+
format_version: '1',
|
|
522
|
+
meta: {
|
|
523
|
+
invarn: {
|
|
524
|
+
stack: 'macos-xcode-26.4',
|
|
525
|
+
platform: 'kmm',
|
|
526
|
+
cachedBuild: true,
|
|
527
|
+
},
|
|
528
|
+
'cibuild.io': {
|
|
529
|
+
stack: 'macos-xcode-26.4',
|
|
530
|
+
platform: 'kmm',
|
|
531
|
+
cachedBuild: false,
|
|
532
|
+
},
|
|
533
|
+
},
|
|
534
|
+
workflows: {
|
|
535
|
+
build: {
|
|
536
|
+
steps: [
|
|
537
|
+
{ 'script@1.0.0': { inputs: { content: 'echo "building"' } } },
|
|
538
|
+
],
|
|
539
|
+
},
|
|
540
|
+
},
|
|
541
|
+
};
|
|
542
|
+
const result = await convertYAMLToPipelineDef(pipeline, mockConfig, 'build');
|
|
543
|
+
expect(result.pipeline.steps.length).toBe(3);
|
|
544
|
+
expect(result.pipeline.steps[0].name).toBe('cache-pull');
|
|
545
|
+
});
|
|
495
546
|
});
|
|
496
547
|
});
|
|
497
548
|
//# sourceMappingURL=converter.test.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for reading the Invarn-owned metadata block from a parsed YAML pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Invarn-owned configuration historically lived under `meta.cibuild.io` and is
|
|
5
|
+
* being migrated to `meta.invarn`. Both keys share the same shape (YAMLCIBuildMeta).
|
|
6
|
+
* Readers should always go through `getInvarnMeta()` so that:
|
|
7
|
+
*
|
|
8
|
+
* 1. New YAMLs that emit `meta.invarn` are read directly.
|
|
9
|
+
* 2. Legacy YAMLs that still carry `meta.cibuild.io` continue to work.
|
|
10
|
+
* 3. When both blocks are present, `meta.invarn` wins as a whole — the legacy
|
|
11
|
+
* block is treated as stale and ignored field-by-field, matching the
|
|
12
|
+
* migration plan in `.scratch/cibuild-io-namespace-rename/PRD.md`.
|
|
13
|
+
*
|
|
14
|
+
* Removing the `meta.cibuild.io` fallback is the last step of that migration; it
|
|
15
|
+
* happens in a single place once usage of the legacy namespace drops to zero.
|
|
16
|
+
*/
|
|
17
|
+
import type { YAMLCIBuildMeta, YAMLPipeline } from './types.js';
|
|
18
|
+
export declare function getInvarnMeta(pipeline: YAMLPipeline): YAMLCIBuildMeta | undefined;
|
|
19
|
+
//# sourceMappingURL=meta-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-helpers.d.ts","sourceRoot":"","sources":["../../../src/yaml/meta-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,eAAe,GAAG,SAAS,CAEjF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for reading the Invarn-owned metadata block from a parsed YAML pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Invarn-owned configuration historically lived under `meta.cibuild.io` and is
|
|
5
|
+
* being migrated to `meta.invarn`. Both keys share the same shape (YAMLCIBuildMeta).
|
|
6
|
+
* Readers should always go through `getInvarnMeta()` so that:
|
|
7
|
+
*
|
|
8
|
+
* 1. New YAMLs that emit `meta.invarn` are read directly.
|
|
9
|
+
* 2. Legacy YAMLs that still carry `meta.cibuild.io` continue to work.
|
|
10
|
+
* 3. When both blocks are present, `meta.invarn` wins as a whole — the legacy
|
|
11
|
+
* block is treated as stale and ignored field-by-field, matching the
|
|
12
|
+
* migration plan in `.scratch/cibuild-io-namespace-rename/PRD.md`.
|
|
13
|
+
*
|
|
14
|
+
* Removing the `meta.cibuild.io` fallback is the last step of that migration; it
|
|
15
|
+
* happens in a single place once usage of the legacy namespace drops to zero.
|
|
16
|
+
*/
|
|
17
|
+
export function getInvarnMeta(pipeline) {
|
|
18
|
+
return pipeline.meta?.invarn ?? pipeline.meta?.['cibuild.io'];
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=meta-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/yaml/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,qBAAa,cAAe,SAAQ,KAAK;aACM,QAAQ,CAAC,EAAE,MAAM;gBAAlD,OAAO,EAAE,MAAM,EAAkB,QAAQ,CAAC,EAAE,MAAM,YAAA;CAI/D;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CA0C/D;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/yaml/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,qBAAa,cAAe,SAAQ,KAAK;aACM,QAAQ,CAAC,EAAE,MAAM;gBAAlD,OAAO,EAAE,MAAM,EAAkB,QAAQ,CAAC,EAAE,MAAM,YAAA;CAI/D;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CA0C/D;AAkHD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAEjF"}
|
package/dist/src/yaml/parser.js
CHANGED
|
@@ -102,26 +102,29 @@ function validateYAMLPipeline(parsed, filePath) {
|
|
|
102
102
|
throw new YAMLValidationError(`Invalid platform '${parsed.meta.platform}' in ${filePath}. Must be one of: ${validPlatforms.join(', ')}`);
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
|
-
// Validate
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
105
|
+
// Validate the Invarn-owned metadata block under either namespace.
|
|
106
|
+
// Both `meta.invarn` (preferred) and `meta.cibuild.io` (legacy) share the same shape.
|
|
107
|
+
validateInvarnMetaBlock(parsed.meta.invarn, 'meta.invarn', filePath);
|
|
108
|
+
validateInvarnMetaBlock(parsed.meta['cibuild.io'], 'meta.cibuild.io', filePath);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function validateInvarnMetaBlock(block, blockName, filePath) {
|
|
112
|
+
if (block === undefined || block === null) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (typeof block !== 'object') {
|
|
116
|
+
throw new YAMLValidationError(`Invalid '${blockName}' section in ${filePath}: Expected an object`);
|
|
117
|
+
}
|
|
118
|
+
if (block.stack && typeof block.stack === 'string') {
|
|
119
|
+
const stackPattern = /^(macos|linux)-/;
|
|
120
|
+
if (block.stack !== 'local' && !stackPattern.test(block.stack)) {
|
|
121
|
+
throw new YAMLValidationError(`Invalid stack '${block.stack}' in ${filePath}. Stack must be 'local' or start with 'macos-' or 'linux-'`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (block.machine_type) {
|
|
125
|
+
const validMachineTypes = ['standard', 'performance'];
|
|
126
|
+
if (!validMachineTypes.includes(block.machine_type)) {
|
|
127
|
+
throw new YAMLValidationError(`Invalid machine_type '${block.machine_type}' in ${filePath}. Must be one of: ${validMachineTypes.join(', ')}`);
|
|
125
128
|
}
|
|
126
129
|
}
|
|
127
130
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.test.d.ts","sourceRoot":"","sources":["../../../src/yaml/parser.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for parser validation of the meta.invarn / meta.cibuild.io blocks.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, test, expect, beforeEach, afterEach } from '@jest/globals';
|
|
5
|
+
import { writeFileSync, mkdtempSync, rmSync } from 'fs';
|
|
6
|
+
import { tmpdir } from 'os';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { loadYAMLPipeline, YAMLValidationError } from './parser.js';
|
|
9
|
+
describe('parser validation — meta.invarn block', () => {
|
|
10
|
+
let workDir;
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
workDir = mkdtempSync(join(tmpdir(), 'cibuild-parser-test-'));
|
|
13
|
+
});
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
rmSync(workDir, { recursive: true, force: true });
|
|
16
|
+
});
|
|
17
|
+
function writeYaml(name, content) {
|
|
18
|
+
const path = join(workDir, name);
|
|
19
|
+
writeFileSync(path, content, 'utf-8');
|
|
20
|
+
return path;
|
|
21
|
+
}
|
|
22
|
+
test('accepts a well-formed meta.invarn block', () => {
|
|
23
|
+
const path = writeYaml('good.yml', `format_version: '4'
|
|
24
|
+
meta:
|
|
25
|
+
invarn:
|
|
26
|
+
stack: macos-xcode-26.4
|
|
27
|
+
machine_type: standard
|
|
28
|
+
workflows:
|
|
29
|
+
primary:
|
|
30
|
+
steps:
|
|
31
|
+
- script@1.0.0:
|
|
32
|
+
inputs:
|
|
33
|
+
content: echo "test"
|
|
34
|
+
`);
|
|
35
|
+
expect(() => loadYAMLPipeline(path)).not.toThrow();
|
|
36
|
+
});
|
|
37
|
+
test('rejects a meta.invarn block with an invalid stack pattern', () => {
|
|
38
|
+
const path = writeYaml('bad-stack.yml', `format_version: '4'
|
|
39
|
+
meta:
|
|
40
|
+
invarn:
|
|
41
|
+
stack: windows-fancy-1.0
|
|
42
|
+
workflows:
|
|
43
|
+
primary:
|
|
44
|
+
steps:
|
|
45
|
+
- script@1.0.0:
|
|
46
|
+
inputs:
|
|
47
|
+
content: echo
|
|
48
|
+
`);
|
|
49
|
+
expect(() => loadYAMLPipeline(path)).toThrow(YAMLValidationError);
|
|
50
|
+
expect(() => loadYAMLPipeline(path)).toThrow(/Invalid stack 'windows-fancy-1.0'/);
|
|
51
|
+
});
|
|
52
|
+
test('rejects a meta.invarn block with an invalid machine_type', () => {
|
|
53
|
+
const path = writeYaml('bad-machine.yml', `format_version: '4'
|
|
54
|
+
meta:
|
|
55
|
+
invarn:
|
|
56
|
+
stack: linux-docker-android-22.04
|
|
57
|
+
machine_type: turbo
|
|
58
|
+
workflows:
|
|
59
|
+
primary:
|
|
60
|
+
steps:
|
|
61
|
+
- script@1.0.0:
|
|
62
|
+
inputs:
|
|
63
|
+
content: echo
|
|
64
|
+
`);
|
|
65
|
+
expect(() => loadYAMLPipeline(path)).toThrow(YAMLValidationError);
|
|
66
|
+
expect(() => loadYAMLPipeline(path)).toThrow(/Invalid machine_type 'turbo'/);
|
|
67
|
+
});
|
|
68
|
+
test('still rejects malformed meta.cibuild.io for backward compat', () => {
|
|
69
|
+
const path = writeYaml('legacy-bad.yml', `format_version: '4'
|
|
70
|
+
meta:
|
|
71
|
+
cibuild.io:
|
|
72
|
+
stack: bsd-something
|
|
73
|
+
workflows:
|
|
74
|
+
primary:
|
|
75
|
+
steps:
|
|
76
|
+
- script@1.0.0:
|
|
77
|
+
inputs:
|
|
78
|
+
content: echo
|
|
79
|
+
`);
|
|
80
|
+
expect(() => loadYAMLPipeline(path)).toThrow(/Invalid stack 'bsd-something'/);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=parser.test.js.map
|
|
@@ -16,7 +16,7 @@ export declare class PlatformDetector {
|
|
|
16
16
|
constructor(pipeline: YAMLPipeline, workflow: YAMLWorkflow, workflowName: string);
|
|
17
17
|
/**
|
|
18
18
|
* Detects the platform using 3-tier priority detection
|
|
19
|
-
* Priority 1: meta.cibuild.io.stack
|
|
19
|
+
* Priority 1: meta.invarn.stack (preferred), falling back to meta.cibuild.io.stack
|
|
20
20
|
* Priority 2: meta.platform
|
|
21
21
|
* Priority 3: auto-detect from workflow steps
|
|
22
22
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-detector.d.ts","sourceRoot":"","sources":["../../../src/yaml/platform-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"platform-detector.d.ts","sourceRoot":"","sources":["../../../src/yaml/platform-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlG,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAMD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,YAAY,CAAS;gBAEjB,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM;IAMhF;;;;;;;;OAQG;IACH,WAAW,IAAI,QAAQ;IAmBvB;;;OAGG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;;OAGG;IACH,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC;;;OAGG;IACH,eAAe,IAAI,YAAY;IAQ/B;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAchC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;;;OAIG;IACH,OAAO,CAAC,aAAa;CAOtB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,CAQrF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,YAAY,CAQ7F"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Platform detection logic for YAML pipelines
|
|
3
3
|
* Implements 3-tier priority detection: stack → platform → auto-detect from steps
|
|
4
4
|
*/
|
|
5
|
+
import { getInvarnMeta } from './meta-helpers.js';
|
|
5
6
|
export class PlatformDetectionError extends Error {
|
|
6
7
|
constructor(message) {
|
|
7
8
|
super(message);
|
|
@@ -25,7 +26,7 @@ export class PlatformDetector {
|
|
|
25
26
|
}
|
|
26
27
|
/**
|
|
27
28
|
* Detects the platform using 3-tier priority detection
|
|
28
|
-
* Priority 1: meta.cibuild.io.stack
|
|
29
|
+
* Priority 1: meta.invarn.stack (preferred), falling back to meta.cibuild.io.stack
|
|
29
30
|
* Priority 2: meta.platform
|
|
30
31
|
* Priority 3: auto-detect from workflow steps
|
|
31
32
|
*
|
|
@@ -33,9 +34,9 @@ export class PlatformDetector {
|
|
|
33
34
|
* @throws PlatformDetectionError if detection fails or mixed platforms detected
|
|
34
35
|
*/
|
|
35
36
|
getPlatform() {
|
|
36
|
-
// Priority 1: Extract from meta
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
// Priority 1: Extract from stack on the Invarn-owned meta block
|
|
38
|
+
const stack = getInvarnMeta(this.pipeline)?.stack;
|
|
39
|
+
if (stack) {
|
|
39
40
|
const platform = this.extractPlatformFromStack(stack);
|
|
40
41
|
if (platform) {
|
|
41
42
|
return platform;
|
|
@@ -53,14 +54,14 @@ export class PlatformDetector {
|
|
|
53
54
|
* @returns Stack identifier (e.g., 'macos-xcode-26.4') or null
|
|
54
55
|
*/
|
|
55
56
|
getStack() {
|
|
56
|
-
return this.pipeline
|
|
57
|
+
return getInvarnMeta(this.pipeline)?.stack ?? null;
|
|
57
58
|
}
|
|
58
59
|
/**
|
|
59
60
|
* Gets the machine type if specified
|
|
60
61
|
* @returns Machine type ('standard' or 'performance') or null
|
|
61
62
|
*/
|
|
62
63
|
getMachineType() {
|
|
63
|
-
return this.pipeline
|
|
64
|
+
return getInvarnMeta(this.pipeline)?.machine_type ?? null;
|
|
64
65
|
}
|
|
65
66
|
/**
|
|
66
67
|
* Gets complete platform information
|
|
@@ -46,6 +46,117 @@ describe('PlatformDetector', () => {
|
|
|
46
46
|
expect(detector.getMachineType()).toBe('standard');
|
|
47
47
|
});
|
|
48
48
|
});
|
|
49
|
+
describe('Priority 1: Extract from meta.invarn.stack', () => {
|
|
50
|
+
test('should detect macOS from meta.invarn stack when only invarn is present', () => {
|
|
51
|
+
const pipeline = {
|
|
52
|
+
format_version: '4',
|
|
53
|
+
meta: {
|
|
54
|
+
invarn: {
|
|
55
|
+
stack: 'macos-xcode-26.4',
|
|
56
|
+
machine_type: 'standard',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
workflows: {
|
|
60
|
+
primary: {
|
|
61
|
+
steps: [{ 'script@1.0.0': { inputs: { content: 'echo "test"' } } }],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
const detector = new PlatformDetector(pipeline, pipeline.workflows.primary, 'primary');
|
|
66
|
+
expect(detector.getPlatform()).toBe('macos');
|
|
67
|
+
expect(detector.getStack()).toBe('macos-xcode-26.4');
|
|
68
|
+
expect(detector.getMachineType()).toBe('standard');
|
|
69
|
+
});
|
|
70
|
+
test('should prefer meta.invarn over meta.cibuild.io when both are present', () => {
|
|
71
|
+
const pipeline = {
|
|
72
|
+
format_version: '4',
|
|
73
|
+
meta: {
|
|
74
|
+
invarn: {
|
|
75
|
+
stack: 'macos-xcode-26.4',
|
|
76
|
+
machine_type: 'performance',
|
|
77
|
+
},
|
|
78
|
+
'cibuild.io': {
|
|
79
|
+
stack: 'linux-docker-android-22.04',
|
|
80
|
+
machine_type: 'standard',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
workflows: {
|
|
84
|
+
primary: {
|
|
85
|
+
steps: [{ 'script@1.0.0': { inputs: {} } }],
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
const detector = new PlatformDetector(pipeline, pipeline.workflows.primary, 'primary');
|
|
90
|
+
expect(detector.getPlatform()).toBe('macos');
|
|
91
|
+
expect(detector.getStack()).toBe('macos-xcode-26.4');
|
|
92
|
+
expect(detector.getMachineType()).toBe('performance');
|
|
93
|
+
});
|
|
94
|
+
test('should expose meta.invarn fields via getPlatformInfo()', () => {
|
|
95
|
+
const pipeline = {
|
|
96
|
+
format_version: '4',
|
|
97
|
+
meta: {
|
|
98
|
+
invarn: {
|
|
99
|
+
stack: 'linux-docker-android-22.04',
|
|
100
|
+
machine_type: 'performance',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
workflows: {
|
|
104
|
+
primary: {
|
|
105
|
+
steps: [{ 'script@1.0.0': { inputs: {} } }],
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
const detector = new PlatformDetector(pipeline, pipeline.workflows.primary, 'primary');
|
|
110
|
+
const info = detector.getPlatformInfo();
|
|
111
|
+
expect(info.platform).toBe('linux');
|
|
112
|
+
expect(info.stack).toBe('linux-docker-android-22.04');
|
|
113
|
+
expect(info.machineType).toBe('performance');
|
|
114
|
+
});
|
|
115
|
+
test('should treat a partial meta.invarn block as the sole source — meta.cibuild.io is ignored field-by-field', () => {
|
|
116
|
+
// PRD: "When both are present, meta.invarn wins." Block-level precedence — once
|
|
117
|
+
// meta.invarn appears, the legacy meta.cibuild.io block is treated as stale and ignored.
|
|
118
|
+
const pipeline = {
|
|
119
|
+
format_version: '4',
|
|
120
|
+
meta: {
|
|
121
|
+
invarn: {
|
|
122
|
+
stack: 'macos-xcode-26.4',
|
|
123
|
+
},
|
|
124
|
+
'cibuild.io': {
|
|
125
|
+
stack: 'linux-docker-android-22.04',
|
|
126
|
+
machine_type: 'performance',
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
workflows: {
|
|
130
|
+
primary: {
|
|
131
|
+
steps: [{ 'script@1.0.0': { inputs: {} } }],
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
const detector = new PlatformDetector(pipeline, pipeline.workflows.primary, 'primary');
|
|
136
|
+
expect(detector.getStack()).toBe('macos-xcode-26.4');
|
|
137
|
+
expect(detector.getMachineType()).toBeNull();
|
|
138
|
+
});
|
|
139
|
+
test('should fall back to meta.cibuild.io when meta.invarn is absent (backward-compat lock-in)', () => {
|
|
140
|
+
const pipeline = {
|
|
141
|
+
format_version: '4',
|
|
142
|
+
meta: {
|
|
143
|
+
'cibuild.io': {
|
|
144
|
+
stack: 'macos-xcode-26.4',
|
|
145
|
+
machine_type: 'performance',
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
workflows: {
|
|
149
|
+
primary: {
|
|
150
|
+
steps: [{ 'script@1.0.0': { inputs: {} } }],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
const detector = new PlatformDetector(pipeline, pipeline.workflows.primary, 'primary');
|
|
155
|
+
expect(detector.getPlatform()).toBe('macos');
|
|
156
|
+
expect(detector.getStack()).toBe('macos-xcode-26.4');
|
|
157
|
+
expect(detector.getMachineType()).toBe('performance');
|
|
158
|
+
});
|
|
159
|
+
});
|
|
49
160
|
describe('Priority 2: Use meta.platform field', () => {
|
|
50
161
|
test('should use meta.platform when stack not specified', () => {
|
|
51
162
|
const pipeline = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xcode.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/xcode.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"xcode.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/xcode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,gBAAgB;IAC1D,yBAAyB,CACvB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAyCpB,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAuGzG;AAED;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,gBAAgB;IACzD,yBAAyB,CACvB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAyCpB,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAwExG;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oDAAoD;IACpD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC;iEAC6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;qDAGiD;IACjD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,yBAAyB,CACvB,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IA6B1B,UAAU,IAAI,UAAU,EAAE;IASpB,OAAO,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CA6U3G;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,gBAAgB;IAC1D,yBAAyB,CACvB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IA4BpB,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAyEzG;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;sDACkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,gBAAgB;IAC1D,yBAAyB,CACvB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAS1B,UAAU;;;;;IAUJ,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAuH3G;AAMD,MAAM,WAAW,uBAAuB;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,6BAA8B,SAAQ,gBAAgB;IACjE,yBAAyB,CACvB,MAAM,EAAE,uBAAuB,EAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAa1B,UAAU,IAAI,UAAU,EAAE;IAOpB,OAAO,CAAC,MAAM,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAyFlH;AAMD,MAAM,WAAW,8BAA8B;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,oCAAqC,SAAQ,gBAAgB;IACxE,yBAAyB,CACvB,OAAO,EAAE,8BAA8B,EACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAM1B,UAAU,IAAI,UAAU,EAAE;IAMpB,OAAO,CAAC,MAAM,EAAE,8BAA8B,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CA+EzH;AAMD,MAAM,WAAW,4BAA4B;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,kCAAmC,SAAQ,gBAAgB;IACtE,yBAAyB,CACvB,MAAM,EAAE,4BAA4B,EACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAa1B,UAAU,IAAI,UAAU,EAAE;IAMpB,OAAO,CAAC,MAAM,EAAE,4BAA4B,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAuFvH;AAMD,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,gBAAgB;IAC/D,yBAAyB,CACvB,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAM1B,UAAU,IAAI,UAAU,EAAE;IAOpB,OAAO,CAAC,MAAM,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAkHhH"}
|