// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This is a v2 component manifest.
{
    include: [
        // See: https://bugs.fuchsia.dev/p/fuchsia/issues/detail?id=99631#c16
        "//sdk/lib/sys/testing/coverage.shard.cml",
        "inspect/offer.shard.cml",
        "syslog/client.shard.cml",
    ],
    program: {
        runner: "elf",
        binary: "bin/example",
        lifecycle: { stop_event: "notify" },
    },
    children: [
        {
            name: "logger",
            url: "fuchsia-pkg://fuchsia.com/logger/stable#meta/logger.cm",
            environment: "#env_one",
        },
    ],
    collections: [
        {
            name: "modular",
            durability: "transient",
        },
        {
            name: "explicit_static",
            durability: "transient",
            allowed_offers: "static_only",
        },
        {
            name: "explicit_dynamic",
            durability: "transient",
            allowed_offers: "static_and_dynamic",
        },
        {
            name: "long_child_names",
            durability: "transient",
            allow_long_names: true,
        },
    ],
    capabilities: [
        {
            service: "fuchsia.logger.Log",
            path: "/svc/fuchsia.logger.Log",
        },
        {
            protocol: "fuchsia.logger.Log2",
            path: "/svc/fuchsia.logger.Log2",
        },
        {
            directory: "blobfs",
            rights: [ "rw*" ],
            path: "/volumes/blobfs",
        },
        {
            storage: "minfs",
            from: "parent",
            backing_dir: "data",
            storage_id: "static_instance_id_or_moniker",
        },
        {
            runner: "dart_runner",
            path: "/svc/fuchsia.sys2.Runner",
        },
        {
            resolver: "pkg_resolver",
            path: "/svc/fuchsia.pkg.Resolver",
        },
    ],
    use: [
        { service: "fuchsia.fonts.Provider" },
        {
            protocol: "fuchsia.fonts.LegacyProvider",
            path: "/svc/fuchsia.fonts.OldProvider",
            availability: "optional",
        },
        {
            protocol: "fuchsia.log.LegacyLog",
            from: "debug",
        },
        {
            event_stream: [
                "events",
                "other",
                "some",
            ],
            from: "parent",
            path: "/testdir/my_stream",
            scope: [ "#logger" ],
        },
        {
            event_stream: "filtered",
            from: "parent",
        },
    ],
    offer: [
        {
            service: "fuchsia.logger.Log",
            from: "#logger",
            to: "#modular",
        },
        {
            protocol: "fuchsia.logger.LegacyLog",
            from: "#logger",
            as: "fuchsia.logger.OldLog",
            to: "#modular",
        },
        {
            event_stream: [
                "started",
                "stopped",
            ],
            from: "parent",
            to: "#logger",
            scope: [ "#logger" ],
        },
        {
            protocol: "fuchsia.logger.LegacyLog2",
            from: "#non-existant",
            as: "fuchsia.logger.OldLog2",
            to: "#modular",
            source_availability: "unknown",
        },
        {
            protocol: "fuchsia.logger.LegacyLog3",
            from: "#logger",
            as: "fuchsia.logger.OldLog3",
            to: "#modular",
            source_availability: "unknown",
        },
        {
            protocol: "fuchsia.logger.LegacyLog4",
            from: "parent",
            as: "fuchsia.logger.OldLog4",
            to: "#modular",
            availability: "optional",
        },
    ],
    expose: [
        {
            service: "fuchsia.logger.Log",
            from: "#logger",
        },
        {
            protocol: "fuchsia.logger.LegacyLog",
            from: "#logger",
            as: "fuchsia.logger.OldLog",
            to: "parent",
        },
        {
            directory: "blobfs",
            from: "self",
            to: "parent",
            subdir: "blob",
        },
        {
            directory: "blobfs",
            from: "self",
            as: "optional_dir",
            to: "parent",
            subdir: "blob",
            availability: "optional",
        },
        {
            protocol: "fuchsia.logger.LegacyLog",
            from: "#logger",
            as: "fuchsia.logger.OldLog_same_as_target",
            to: "parent",
            availability: "same_as_target",
        },
        {
            protocol: "fuchsia.logger.LegacyLog",
            from: "void",
            as: "fuchsia.logger.OldLog_void",
            to: "parent",
            availability: "optional",
        },
        {
            protocol: "fuchsia.logger.LegacyLog",
            from: "#this-child-does-not-exist",
            as: "fuchsia.logger.OldLog_absent_child",
            to: "parent",
            source_availability: "unknown",
        },
    ],
    environments: [
        {
            name: "env_one",
            extends: "none",
            __stop_timeout_ms: 1337,
        },
        {
            name: "env_two",
            extends: "realm",
            debug: [
                {
                    protocol: "fuchsia.logger.LegacyLog",
                    from: "#logger",
                },
                {
                    protocol: "fuchsia.logger.OtherLog",
                    from: "parent",
                },
                {
                    protocol: "fuchsia.logger.Log2",
                    from: "self",
                },
            ],
        },
    ],
    facets: {
        author: "Fuchsia",
        year: "2018",
        metadata: { publisher: "The Books Publisher" },
    },
    config: {
        my_flag: { type: "bool" },
        my_uint8: { type: "uint8" },
        my_string: {
            type: "string",
            max_size: 100,
        },
        my_vector_of_string: {
            type: "vector",
            max_count: 100,
            element: {
                type: "string",
                max_size: 50,
            },
        },
    },
}
