@SuppressWarnings("unchecked")
    @Override
    public Concat.Output run(RunContext runContext) throws Exception {
        File tempFile = runContext.workingDir().createTempFile(extension).toFile();
        try (FileOutputStream fileOutputStream = new FileOutputStream(tempFile)) {
            List<String> finalFiles;
            if (this.files instanceof List) {
                finalFiles = (List<String>) this.files;
            } else if (this.files instanceof String) {
                final TypeReference<List<String>> reference = new TypeReference<>() {};

                finalFiles = JacksonMapper.ofJson(false).readValue(
                    runContext.render((String) this.files),
                    reference
                );
            } else {
                throw new Exception("Invalid `files` properties with type '" + this.files.getClass() + "'");
            }

            finalFiles.forEach(throwConsumer(s -> {
                URI from = new URI(runContext.render(s));
                try (InputStream inputStream = runContext.storage().getFile(from)) {
                    IOUtils.copyLarge(inputStream, fileOutputStream);
                }

                if (separator != null) {
                    IOUtils.copy(new ByteArrayInputStream(this.separator.getBytes()), fileOutputStream);
                }
            }));
        }

        return Concat.Output.builder()
            .uri(runContext.storage().putFile(tempFile))
            .build();
    }
@Test
    void list() throws Exception {
        this.run(false);
    }