Skip to content

Commit

Permalink
updated transformer syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
viaszkadi committed Oct 15, 2024
1 parent 0a34002 commit b283fdb
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 34 deletions.
49 changes: 38 additions & 11 deletions Sources/ToucanSDK/Config/Config.swift
Original file line number Diff line number Diff line change
Expand Up @@ -175,23 +175,45 @@ struct Config {
}

struct Pipeline {
let types: [String]
let run: [String]

enum Keys {
static let run = "run"
static let render = "render"
}

struct Run {

enum Keys {
static let name = "name"
}

let name: String

init?(_ dict: [String: Any]) {
guard let name = dict.string(Keys.name) else {
return nil
}
self.name = name
}
}

let run: [Run]
let render: Bool

init(_ dict: [String: Any]) {
self.types = dict.array("types", as: String.self)
self.run = dict.array("run", as: String.self)
self.render = dict.bool("render") ?? false
self.run = dict
.array(Keys.run, as: [String: Any].self)
.map { Run($0)! }
self.render = dict.bool(Keys.render) ?? true
}
}

let folder: String
let pipelines: [Pipeline]
let pipelines: [String: Pipeline]

init(
folder: String,
pipelines: [Pipeline]
pipelines: [String: Pipeline]
) {
self.folder = folder
self.pipelines = pipelines
Expand All @@ -201,9 +223,14 @@ struct Config {
self.folder =
dict.string(Location.Keys.folder)
?? Config.defaults.transformers.folder

self.pipelines = dict.array(Keys.pipelines, as: [String: Any].self)
.map { .init($0) }
self.pipelines = dict
.dict(Keys.pipelines)
.compactMapValues { (item: Any) -> Pipeline? in
guard let dict = item as? [String: Any] else {
return nil
}
return Pipeline(dict)
}
}
}

Expand Down Expand Up @@ -263,7 +290,7 @@ extension Config {
),
transformers: .init(
folder: "transformers",
pipelines: []
pipelines: [:]
)
)
}
16 changes: 8 additions & 8 deletions Sources/ToucanSDK/ContextStore/ContextStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,12 @@ struct ContextStore {
pageBundle: pageBundle
)
)
let pipelines = sourceConfig.config.transformers.pipelines.filter {
$0.types.contains(pageBundle.contentType.id) && !$0.run.isEmpty
}

for pipeline in pipelines {

let pipelines = sourceConfig.config.transformers.pipelines
let pipeline = pipelines[pageBundle.contentType.id]
var didRenderHTML = false

if let pipeline, !pipeline.run.isEmpty {
let executor = PipelineExecutor(
pipeline: pipeline,
pageBundle: pageBundle,
Expand All @@ -171,14 +172,13 @@ struct ContextStore {
)
do {
contents = try executor.execute()
didRenderHTML = true
}
catch {
logger.error("\(String(describing: error))")
}
}

let didRenderHTML = pipelines.map { $0.render }.contains(true)


if didRenderHTML {
let tocElements = htmlToCParser.parse(from: contents) ?? []
return [
Expand Down
4 changes: 1 addition & 3 deletions Sources/ToucanSDK/Transformers/PipelineExecutor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,7 @@ struct PipelineExecutor {

for run in pipeline.run {
let runUrl = sourceConfig.transformersUrl
.appendingPathComponent(
run
)
.appendingPathComponent(run.name)
guard fileManager.fileExists(at: runUrl) else {
continue
}
Expand Down
17 changes: 9 additions & 8 deletions Sources/toucan-cli/Commands/Generate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,15 @@ extension Entrypoint {
baseUrl: baseUrl,
logger: logger
)
generator.generateAndLogErrors(logger)

let metadata: Logger.Metadata = [
"input": "\(input)",
"output": "\(output)",
"baseUrl": "\(String(describing: baseUrl?.description))",
]
logger.info("Site generated successfully.", metadata: metadata)

if generator.generateAndLogErrors(logger) {
let metadata: Logger.Metadata = [
"input": "\(input)",
"output": "\(output)",
"baseUrl": "\(String(describing: baseUrl?.description))",
]
logger.info("Site generated successfully.", metadata: metadata)
}
}
}
}
9 changes: 6 additions & 3 deletions Sources/toucan-cli/Commands/Watch.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ extension Entrypoint {
logger: logger
)
generator.generateAndLogErrors(logger)

#if os(macOS)
let eventStream = try EonilFSEventStream(
pathsToWatch: [input],
Expand All @@ -66,8 +66,11 @@ extension Entrypoint {
}

logger.info("Generating site...")
generator.generateAndLogErrors(logger)
logger.info("Site re-generated.")
if generator.generateAndLogErrors(logger) {
logger.info("Site re-generated.")
} else {
logger.info("Site generation failed.")
}
}
)

Expand Down
14 changes: 13 additions & 1 deletion Sources/toucan-cli/Extensions/Toucan+UserErrors.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ import Logging

extension Toucan {

func generateAndLogErrors(_ logger: Logger) {
@discardableResult
func generateAndLogErrors(_ logger: Logger) -> Bool {
do {
try generate()
return true
}
catch let error as FileLoader.Error {
switch error {
Expand Down Expand Up @@ -69,8 +71,18 @@ extension Toucan {
)
}
}
catch let error as SiteLoader.Error {
switch error {
case .missing(let url):
logger.error(
"Missing site file at: `\(url.absoluteString)`."
)
}
}
catch {
logger.error("\(String(describing: error))")
}

return false
}
}

0 comments on commit b283fdb

Please sign in to comment.