` - The same IR if valid || **Location** | `C:/Users/chris/git/archlette/src/validators/builtin/base-validator.ts:26` |
**Parameters:**
@@ -116,3 +67,4 @@ Validates the IR against the Zod schema. Throws if invalid.
+
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_astro.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_astro.mmd
index 60c02be..ba304dc 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_astro.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_astro.mmd
@@ -1,62 +1,62 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
- 100("basic-astro.createSyntheticRenderFunction
[Component: function]
Create a synthetic render
function for an Astro
component Every Astro
component is fundamentally a
server-side render function
that: 1. Receives props (if
Props interface is defined)
2. Processes the component
logic (frontmatter code) 3.
Renders the template to HTML
4. Returns an HTML string
Since Astro's compiler
doesn't explicitly define
this, we create a synthetic
function to represent the
component's executable
behavior in the IR. The
function is named after the
file (without .astro
extension): - Button.astro →
function Button() -
index.astro → function
index() -
settings/Profile.astro →
function Profile()
")
- style 100 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 101("basic-astro.extractJSDocBlocks
[Component: function]
Extract all JSDoc comment
blocks from source code
Matches /** ... *\\/ style
comments and parses their
tags
")
- style 101 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 102("basic-astro.parseJSDocBlock
[Component: function]
Parse a single JSDoc comment
block into description and
tags
")
- style 102 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 103("basic-astro.extractFileComponent
[Component: function]
Extract component information
from frontmatter JSDoc
Attempts to identify the
component in this file using
JSDoc tags: 1. Checks for
")
- style 103 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 104("basic-astro.extractComponentName
[Component: function]
Extract component name from a
JSDoc tag value Parses the
tag value to extract the
component name, handling
various formats: - Simple
name: ComponentName - With
description: ComponentName -
Description - Module path:
path/to/module (extracts last
directory component) - Dashes
preserved: My-Component-Name
For module paths like
"utils/helpers", extracts
"utils" (the last directory
before the filename) to
enable component grouping.
")
- style 104 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 105("basic-astro.extractFileActors
[Component: function]
Extract actors from
frontmatter JSDoc Identifies
external actors (users,
systems) that interact with
the component. Actors are
specified using
")
- style 105 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 106("basic-astro.parseActorTag
[Component: function]
Parse an
")
- style 106 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 107("basic-astro.extractFileRelationships
[Component: function]
Extract relationships from
frontmatter JSDoc Identifies
component dependencies using
")
- style 107 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 108("basic-astro.parseUsesTag
[Component: function]
Parse a
")
- style 108 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 109("basic-astro.inferComponentFromPath
[Component: function]
Infer component name from
file path When no explicit
")
- style 109 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 110("basic-astro.findSourceFiles
[Component: function]
Find Astro source files
matching the given patterns
Locates all .astro files in
the workspace using glob
patterns. Returns absolute
paths to enable downstream
processing. Default patterns
include src directory and
exclude node_modules, dist,
build, and .astro.
")
- style 110 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 111("basic-astro.findPackageJsonFiles
[Component: function]
Find all package.json files
in the workspace Extracts
base directories from include
patterns and searches
multiple directory levels to
locate all package.json
files. Useful for identifying
container boundaries and
package metadata (name,
version, description).
")
- style 111 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 112("basic-astro.readPackageInfo
[Component: function]
Read package.json and extract
metadata Parses a
package.json file and
extracts key metadata fields:
name, version, and
description. Returns null on
read or parse errors (logged
as warnings).
")
- style 112 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 113("basic-astro.findNearestPackage
[Component: function]
Find the nearest package.json
for a given file Searches
through all known packages
and finds the one whose
directory is the closest
parent of the given file.
Packages are sorted by depth
(deepest first) to prioritize
monorepo sub-packages over
workspace root packages.
")
- style 113 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 114("basic-astro.parseFiles
[Component: function]
Parse Astro files using
")
- style 114 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 115("basic-astro.extractFrontmatter
[Component: function]
Extract frontmatter content
from Astro file Astro files
have two sections separated
by --- markers: -
Frontmatter:
TypeScript/JavaScript code at
the top (server-side) -
Template: HTML markup and
component usage (client-side)
This function extracts only
the frontmatter section.
Returns empty string if no
frontmatter. Handles both
Unix and Windows line endings
for cross-platform
compatibility.
")
- style 115 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 116("basic-astro.extractImports
[Component: function]
Extract import statements
from frontmatter Parses all
import declarations using
regex and categorizes them: -
Default imports: import Foo
from 'bar' - Named imports:
import { Foo, Bar } from
'baz' - Namespace imports:
import * as Foo from 'bar'
Also handles aliased imports
like: import { Foo as F }
from 'bar'
")
- style 116 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 117("basic-astro.findSlots
[Component: function]
Find slot tags in the
template Astro components can
define slots to allow content
projection: - Default slot:
(unnamed) - Named
slot:
Returns location information
(line number) for each slot
found.
")
- style 117 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 118("basic-astro.findClientDirective
[Component: function]
Find client directive in
component usage Astro allows
hydration directives to run
components on the client: -
client:load - Eager hydration
- client:idle - Hydrate when
browser is idle -
client:visible - Hydrate when
component enters viewport -
client:media - Hydrate when
media query matches -
client:only - Hydrate only on
client (no SSR) Returns the
first directive found. Used
to indicate interactive
components.
")
- style 118 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 119("basic-astro.extractComponentUsage
[Component: function]
Extract component usage from
template Identifies which
imported components are
actually used in the template
markup. Only includes
components that: 1. Start
with an uppercase letter (C4
naming convention) 2. Are
found in the import
statements 3. Appear in the
template markup Component
names in Astro are PascalCase
by convention (e.g., Header,
Footer). This function uses
the import list to avoid
false positives from HTML
elements.
")
- style 119 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 120("basic-astro.mapToIR
[Component: function]
Map file extractions to
ArchletteIR Transforms
extracted Astro component
data into standardized
ArchletteIR format. This is
the final step before DSL
generation and diagram
rendering. Algorithm (4 main
steps): 1. **Aggregation** -
Combine all file extractions:
- Register components,
actors, code items from all
files - Detect and merge
duplicates (same component in
multiple files) - Build
relationship graph from
")
- style 120 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 121("basic-astro.mapClassToCodeItems
[Component: function]
Map a class to code items
(class + methods)
")
- style 121 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 122("basic-astro.mapFunctionToCodeItem
[Component: function]
Map a function to a code item
")
- style 122 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 81("basic-astro.basicAstroExtractor
[Component: function]
Extract architecture
information from an Astro
codebase
")
- style 81 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 99("basic-astro.extractCodeFromFrontmatter
[Component: function]
Extract TypeScript/JavaScript
code from Astro frontmatter
Parses the frontmatter
section (code between ---
markers) as TypeScript and
extracts code elements using
the basic-node AST
extractors: - Classes and
their methods - Functions
(both regular and arrow
functions) - Type aliases
(type X = ...) - TypeScript
interfaces Returns empty
result if frontmatter is
empty or parsing fails
(errors are logged). Graceful
error handling ensures one
malformed Astro file doesn't
break the extraction
pipeline.
")
- style 99 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ 112("basic-astro.extractCodeFromFrontmatter
[Component: function]
Extract TypeScript/JavaScript
code from Astro frontmatter
Parses the frontmatter
section (code between ---
markers) as TypeScript and
extracts code elements using
the basic-node AST
extractors: - Classes and
their methods - Functions
(both regular and arrow
functions) - Type aliases
(type X = ...) - TypeScript
interfaces Returns empty
result if frontmatter is
empty or parsing fails
(errors are logged). Graceful
error handling ensures one
malformed Astro file doesn't
break the extraction
pipeline.
")
+ style 112 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 113("basic-astro.createSyntheticRenderFunction
[Component: function]
Create a synthetic render
function for an Astro
component Every Astro
component is fundamentally a
server-side render function
that: 1. Receives props (if
Props interface is defined)
2. Processes the component
logic (frontmatter code) 3.
Renders the template to HTML
4. Returns an HTML string
Since Astro's compiler
doesn't explicitly define
this, we create a synthetic
function to represent the
component's executable
behavior in the IR. The
function is named after the
file (without .astro
extension): - Button.astro →
function Button() -
index.astro → function
index() -
settings/Profile.astro →
function Profile()
")
+ style 113 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 114("basic-astro.extractJSDocBlocks
[Component: function]
Extract all JSDoc comment
blocks from source code
Matches /** ... *\\/ style
comments and parses their
tags
")
+ style 114 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 115("basic-astro.parseJSDocBlock
[Component: function]
Parse a single JSDoc comment
block into description and
tags
")
+ style 115 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 116("basic-astro.extractFileComponent
[Component: function]
Extract component information
from frontmatter JSDoc
Attempts to identify the
component in this file using
JSDoc tags: 1. Checks for
")
+ style 116 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 117("basic-astro.extractComponentName
[Component: function]
Extract component name from a
JSDoc tag value Parses the
tag value to extract the
component name, handling
various formats: - Simple
name: ComponentName - With
description: ComponentName -
Description - Module path:
path/to/module (extracts last
directory component) - Dashes
preserved: My-Component-Name
For module paths like
"utils/helpers", extracts
"utils" (the last directory
before the filename) to
enable component grouping.
")
+ style 117 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 118("basic-astro.extractFileActors
[Component: function]
Extract actors from
frontmatter JSDoc Identifies
external actors (users,
systems) that interact with
the component. Actors are
specified using
")
+ style 118 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 119("basic-astro.parseActorTag
[Component: function]
Parse an
")
+ style 119 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 120("basic-astro.extractFileRelationships
[Component: function]
Extract relationships from
frontmatter JSDoc Identifies
component dependencies using
")
+ style 120 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 121("basic-astro.parseUsesTag
[Component: function]
Parse a
")
+ style 121 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 122("basic-astro.inferComponentFromPath
[Component: function]
Infer component name from
file path When no explicit
")
+ style 122 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 123("basic-astro.findSourceFiles
[Component: function]
Find Astro source files
matching the given patterns
Locates all .astro files in
the workspace using glob
patterns. Returns absolute
paths to enable downstream
processing. Default patterns
include src directory and
exclude node_modules, dist,
build, and .astro.
")
+ style 123 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 124("basic-astro.findPackageJsonFiles
[Component: function]
Find all package.json files
in the workspace Extracts
base directories from include
patterns and searches
multiple directory levels to
locate all package.json
files. Useful for identifying
container boundaries and
package metadata (name,
version, description).
")
+ style 124 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 125("basic-astro.readPackageInfo
[Component: function]
Read package.json and extract
metadata Parses a
package.json file and
extracts key metadata fields:
name, version, and
description. Returns null on
read or parse errors (logged
as warnings).
")
+ style 125 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 126("basic-astro.findNearestPackage
[Component: function]
Find the nearest package.json
for a given file Searches
through all known packages
and finds the one whose
directory is the closest
parent of the given file.
Packages are sorted by depth
(deepest first) to prioritize
monorepo sub-packages over
workspace root packages.
")
+ style 126 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 127("basic-astro.parseFiles
[Component: function]
Parse Astro files using
")
+ style 127 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 128("basic-astro.extractFrontmatter
[Component: function]
Extract frontmatter content
from Astro file Astro files
have two sections separated
by --- markers: -
Frontmatter:
TypeScript/JavaScript code at
the top (server-side) -
Template: HTML markup and
component usage (client-side)
This function extracts only
the frontmatter section.
Returns empty string if no
frontmatter. Handles both
Unix and Windows line endings
for cross-platform
compatibility.
")
+ style 128 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 129("basic-astro.extractImports
[Component: function]
Extract import statements
from frontmatter Parses all
import declarations using
regex and categorizes them: -
Default imports: import Foo
from 'bar' - Named imports:
import { Foo, Bar } from
'baz' - Namespace imports:
import * as Foo from 'bar'
Also handles aliased imports
like: import { Foo as F }
from 'bar'
")
+ style 129 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 130("basic-astro.findSlots
[Component: function]
Find slot tags in the
template Astro components can
define slots to allow content
projection: - Default slot:
(unnamed) - Named
slot:
Returns location information
(line number) for each slot
found.
")
+ style 130 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 131("basic-astro.findClientDirective
[Component: function]
Find client directive in
component usage Astro allows
hydration directives to run
components on the client: -
client:load - Eager hydration
- client:idle - Hydrate when
browser is idle -
client:visible - Hydrate when
component enters viewport -
client:media - Hydrate when
media query matches -
client:only - Hydrate only on
client (no SSR) Returns the
first directive found. Used
to indicate interactive
components.
")
+ style 131 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 132("basic-astro.extractComponentUsage
[Component: function]
Extract component usage from
template Identifies which
imported components are
actually used in the template
markup. Only includes
components that: 1. Start
with an uppercase letter (C4
naming convention) 2. Are
found in the import
statements 3. Appear in the
template markup Component
names in Astro are PascalCase
by convention (e.g., Header,
Footer). This function uses
the import list to avoid
false positives from HTML
elements.
")
+ style 132 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 133("basic-astro.mapToIR
[Component: function]
Map file extractions to
ArchletteIR Transforms
extracted Astro component
data into standardized
ArchletteIR format. This is
the final step before DSL
generation and diagram
rendering. Algorithm (4 main
steps): 1. **Aggregation** -
Combine all file extractions:
- Register components,
actors, code items from all
files - Detect and merge
duplicates (same component in
multiple files) - Build
relationship graph from
")
+ style 133 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 134("basic-astro.mapClassToCodeItems
[Component: function]
Map a class to code items
(class + methods)
")
+ style 134 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 135("basic-astro.mapFunctionToCodeItem
[Component: function]
Map a function to a code item
")
+ style 135 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 84("basic-astro.basicAstroExtractor
[Component: function]
Extract architecture
information from an Astro
codebase
")
+ style 84 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_node.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_node.mmd
index 561cc4c..b488b50 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_node.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_node.mmd
@@ -1,100 +1,100 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
- 123("basic_node.extractClasses
[Component: function]
Extract all class
declarations from a source
file
")
- style 123 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 124("basic_node.extractClass
[Component: function]
Extract information from a
single class declaration
")
- style 124 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 125("basic_node.extractMethod
[Component: function]
Extract method information
from a class
")
- style 125 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 126("basic_node.extractProperty
[Component: function]
Extract property information
from a class
")
- style 126 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 127("basic_node.extractMethodParameter
[Component: function]
Extract parameter information
")
- style 127 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 128("basic_node.mapVisibility
[Component: function]
Map ts-morph Scope to our
visibility string
")
- style 128 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 129("basic_node.getFileJsDocs
[Component: function]
Get JSDoc comments from a
source file Checks both the
first statement and
module-level JSDoc
")
- style 129 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 130("basic_node.extractFileComponent
[Component: function]
Extract component information
from file-level JSDoc Checks
the first JSDoc comment in
the file for
")
- style 130 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 131("basic_node.extractFileActors
[Component: function]
Extract actors from
file-level JSDoc Looks for
")
- style 131 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 132("basic_node.extractFileRelationships
[Component: function]
Extract relationships from
file-level JSDoc Looks for
")
- style 132 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 133("basic_node.extractComponentFromJsDoc
[Component: function]
Extract component info from a
JSDoc node
")
- style 133 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 134("basic_node.extractActorsFromJsDoc
[Component: function]
Extract actors from a JSDoc
node Parses
")
- style 134 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 135("basic_node.parseActorTag
[Component: function]
Parse an
")
- style 135 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 136("basic_node.extractRelationshipsFromJsDoc
[Component: function]
Extract relationships from a
JSDoc node Parses
")
- style 136 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 137("basic_node.parseUsesTag
[Component: function]
Parse a
")
- style 137 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 138("basic_node.extractComponentName
[Component: function]
Extract component name from a
JSDoc tag Handles formats
like: -
")
- style 138 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 139("basic_node.inferComponentFromPath
[Component: function]
Infer component name from
file path - Files in
subdirectories use the
immediate parent folder name
- Files in root directory use
a special marker that will be
replaced with container name
Examples: -
/path/to/project/src/utils/helper.ts
-> 'utils' -
/path/to/project/src/index.ts
-> ROOT_COMPONENT_MARKER -
/path/to/project/services/api/client.ts
-> 'api'
")
- style 139 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 140("basic_node.extractDocumentation
[Component: function]
Extract documentation
information from JSDoc
")
- style 140 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 141("basic_node.extractDeprecation
[Component: function]
Extract deprecation
information from JSDoc
")
- style 141 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 142("basic_node.extractParameterDescriptions
[Component: function]
Extract parameter
descriptions from JSDoc
")
- style 142 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 143("basic_node.extractReturnDescription
[Component: function]
Extract return description
from JSDoc
")
- style 143 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 144("basic_node.extractParameterName
[Component: function]
Extract parameter name from
")
- style 144 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 145("basic_node.findSourceFiles
[Component: function]
Find source files matching
include/exclude patterns
")
- style 145 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 146("basic_node.findPackageJsonFiles
[Component: function]
Find package.json files
within the search paths
")
- style 146 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 147("basic_node.readPackageInfo
[Component: function]
Read and parse package.json
file
")
- style 147 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 148("basic_node.findNearestPackage
[Component: function]
Find the nearest parent
package.json for a given file
")
- style 148 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 149("basic_node.parseFiles
[Component: function]
Parse and extract information
from source files
")
- style 149 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 150("basic_node.extractFunctions
[Component: function]
Extract all function
declarations from a source
file
")
- style 150 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 151("basic_node.extractFunction
[Component: function]
Extract information from a
single function declaration
")
- style 151 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 152("basic_node.extractFunctionParameter
[Component: function]
Extract parameter information
")
- style 152 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 153("basic_node.extractArrowFunctions
[Component: function]
Extract arrow functions
assigned to const/let/var
Examples: const handleClick =
() => {} export const
createUser = async (data) =>
{}
")
- style 153 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 154("basic_node.extractImports
[Component: function]
Extract all import
declarations from a source
file
")
- style 154 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 155("basic_node.mapToIR
[Component: function]
Map file extractions to
ArchletteIR
")
- style 155 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 156("basic_node.mapFunction
[Component: function]
Map a function to a CodeItem
")
- style 156 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 157("basic_node.mapClass
[Component: function]
Map a class to a CodeItem
")
- style 157 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 158("basic_node.mapMethod
[Component: function]
Map a class method to a
CodeItem
")
- style 158 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 159("basic_node.resolveImportPath
[Component: function]
Resolve an import path to an
absolute file path Handles
relative imports (./file,
../file) and resolves to
actual file paths Returns
undefined for node_modules
imports or unresolvable paths
")
- style 159 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 160("basic_node.mapImportToComponentRelationships
[Component: function]
Map imports to component
relationships
(component-level
dependencies)
")
- style 160 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 161("basic_node.mapImportRelationships
[Component: function]
Map imports to relationships
(original code-level format
for backward compatibility)
")
- style 161 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 162("basic_node.generateId
[Component: function]
Generate a unique ID for a
code element Format:
filePath:symbolName
")
- style 162 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 163("basic_node.getDefaultSystem
[Component: function]
Get default system info from
package.json if available
")
- style 163 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 164("basic_node.extractTypeAliases
[Component: function]
Extract type aliases from a
source file Examples: type
UserRole = 'admin' | 'user' |
'guest' export type
ApiResponse = { data: T;
status: number }
")
- style 164 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 165("basic_node.extractInterfaces
[Component: function]
Extract interfaces from a
source file Examples:
interface User { id: string;
name: string } export
interface ApiClient {
get(url: string):
Promise }
")
- style 165 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 82("basic_node.basicNodeExtractor
[Component: function]
Extract architecture
information from a
Node.js/TypeScript codebase
")
- style 82 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ 136("basic_node.extractClasses
[Component: function]
Extract all class
declarations from a source
file
")
+ style 136 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 137("basic_node.extractClass
[Component: function]
Extract information from a
single class declaration
")
+ style 137 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 138("basic_node.extractMethod
[Component: function]
Extract method information
from a class
")
+ style 138 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 139("basic_node.extractProperty
[Component: function]
Extract property information
from a class
")
+ style 139 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 140("basic_node.extractMethodParameter
[Component: function]
Extract parameter information
")
+ style 140 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 141("basic_node.mapVisibility
[Component: function]
Map ts-morph Scope to our
visibility string
")
+ style 141 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 142("basic_node.getFileJsDocs
[Component: function]
Get JSDoc comments from a
source file Checks both the
first statement and
module-level JSDoc
")
+ style 142 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 143("basic_node.extractFileComponent
[Component: function]
Extract component information
from file-level JSDoc Checks
the first JSDoc comment in
the file for
")
+ style 143 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 144("basic_node.extractFileActors
[Component: function]
Extract actors from
file-level JSDoc Looks for
")
+ style 144 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 145("basic_node.extractFileRelationships
[Component: function]
Extract relationships from
file-level JSDoc Looks for
")
+ style 145 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 146("basic_node.extractComponentFromJsDoc
[Component: function]
Extract component info from a
JSDoc node
")
+ style 146 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 147("basic_node.extractActorsFromJsDoc
[Component: function]
Extract actors from a JSDoc
node Parses
")
+ style 147 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 148("basic_node.parseActorTag
[Component: function]
Parse an
")
+ style 148 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 149("basic_node.extractRelationshipsFromJsDoc
[Component: function]
Extract relationships from a
JSDoc node Parses
")
+ style 149 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 150("basic_node.parseUsesTag
[Component: function]
Parse a
")
+ style 150 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 151("basic_node.extractComponentName
[Component: function]
Extract component name from a
JSDoc tag Handles formats
like: -
")
+ style 151 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 152("basic_node.inferComponentFromPath
[Component: function]
Infer component name from
file path - Files in
subdirectories use the
immediate parent folder name
- Files in root directory use
a special marker that will be
replaced with container name
Examples: -
/path/to/project/src/utils/helper.ts
-> 'utils' -
/path/to/project/src/index.ts
-> ROOT_COMPONENT_MARKER -
/path/to/project/services/api/client.ts
-> 'api'
")
+ style 152 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 153("basic_node.extractDocumentation
[Component: function]
Extract documentation
information from JSDoc
")
+ style 153 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 154("basic_node.extractDeprecation
[Component: function]
Extract deprecation
information from JSDoc
")
+ style 154 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 155("basic_node.extractParameterDescriptions
[Component: function]
Extract parameter
descriptions from JSDoc
")
+ style 155 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 156("basic_node.extractReturnDescription
[Component: function]
Extract return description
from JSDoc
")
+ style 156 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 157("basic_node.extractParameterName
[Component: function]
Extract parameter name from
")
+ style 157 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 158("basic_node.findSourceFiles
[Component: function]
Find source files matching
include/exclude patterns
")
+ style 158 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 159("basic_node.findPackageJsonFiles
[Component: function]
Find package.json files
within the search paths
")
+ style 159 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 160("basic_node.readPackageInfo
[Component: function]
Read and parse package.json
file
")
+ style 160 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 161("basic_node.findNearestPackage
[Component: function]
Find the nearest parent
package.json for a given file
")
+ style 161 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 162("basic_node.parseFiles
[Component: function]
Parse and extract information
from source files
")
+ style 162 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 163("basic_node.extractFunctions
[Component: function]
Extract all function
declarations from a source
file
")
+ style 163 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 164("basic_node.extractFunction
[Component: function]
Extract information from a
single function declaration
")
+ style 164 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 165("basic_node.extractFunctionParameter
[Component: function]
Extract parameter information
")
+ style 165 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 166("basic_node.extractArrowFunctions
[Component: function]
Extract arrow functions
assigned to const/let/var
Examples: const handleClick =
() => {} export const
createUser = async (data) =>
{}
")
+ style 166 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 167("basic_node.extractImports
[Component: function]
Extract all import
declarations from a source
file
")
+ style 167 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 168("basic_node.mapToIR
[Component: function]
Map file extractions to
ArchletteIR
")
+ style 168 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 169("basic_node.mapFunction
[Component: function]
Map a function to a CodeItem
")
+ style 169 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 170("basic_node.mapClass
[Component: function]
Map a class to a CodeItem
")
+ style 170 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 171("basic_node.mapMethod
[Component: function]
Map a class method to a
CodeItem
")
+ style 171 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 172("basic_node.resolveImportPath
[Component: function]
Resolve an import path to an
absolute file path Handles
relative imports (./file,
../file) and resolves to
actual file paths Returns
undefined for node_modules
imports or unresolvable paths
")
+ style 172 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 173("basic_node.mapImportToComponentRelationships
[Component: function]
Map imports to component
relationships
(component-level
dependencies)
")
+ style 173 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 174("basic_node.mapImportRelationships
[Component: function]
Map imports to relationships
(original code-level format
for backward compatibility)
")
+ style 174 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 175("basic_node.generateId
[Component: function]
Generate a unique ID for a
code element Format:
filePath:symbolName
")
+ style 175 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 176("basic_node.getDefaultSystem
[Component: function]
Get default system info from
package.json if available
")
+ style 176 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 177("basic_node.extractTypeAliases
[Component: function]
Extract type aliases from a
source file Examples: type
UserRole = 'admin' | 'user' |
'guest' export type
ApiResponse = { data: T;
status: number }
")
+ style 177 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 178("basic_node.extractInterfaces
[Component: function]
Extract interfaces from a
source file Examples:
interface User { id: string;
name: string } export
interface ApiClient {
get(url: string):
Promise }
")
+ style 178 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 85("basic_node.basicNodeExtractor
[Component: function]
Extract architecture
information from a
Node.js/TypeScript codebase
")
+ style 85 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_python.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_python.mmd
index 3f8c24f..5df0813 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_python.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_python.mmd
@@ -1,68 +1,68 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
- 166("basic-python.findSourceFiles
[Component: function]
Find source files matching
include/exclude patterns
")
- style 166 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 167("basic-python.findPyProjectFiles
[Component: function]
Find pyproject.toml files
within the search paths
")
- style 167 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 168("basic-python.readPyProjectInfo
[Component: function]
Read and parse pyproject.toml
file
")
- style 168 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 169("basic-python.parsePyProjectToml
[Component: function]
Parse pyproject.toml using
smol-toml library Handles
full TOML spec including
multiline strings, arrays,
and nested tables
")
- style 169 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 170("basic-python.findNearestPyProject
[Component: function]
Find the nearest parent
pyproject.toml for a given
file
")
- style 170 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 171("basic-python.parseFiles
[Component: function]
Parse Python files using
Python AST parser script
")
- style 171 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 172("basic-python.runPythonParser
[Component: function]
Run Python parser script and
return JSON output
")
- style 172 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 173("basic-python.mapToFileExtraction
[Component: function]
Map Python parser output to
FileExtraction format
")
- style 173 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 174("basic-python.mapClass
[Component: function]
Map Python class to
ExtractedClass
")
- style 174 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 175("basic-python.mapMethod
[Component: function]
Map Python method to
ExtractedMethod
")
- style 175 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 176("basic-python.mapProperty
[Component: function]
Map Python property to
ExtractedProperty
")
- style 176 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 177("basic-python.mapFunction
[Component: function]
Map Python function to
ExtractedFunction
")
- style 177 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 178("basic-python.mapType
[Component: function]
Map Python type definition to
ExtractedType
")
- style 178 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 179("basic-python.mapParameter
[Component: function]
Map Python parameter to
ParameterInfo
")
- style 179 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 180("basic-python.parseDocstring
[Component: function]
Parse Python docstring into
DocInfo Enhanced in Phase 2
to use parsed
Google/NumPy/Sphinx
docstrings
")
- style 180 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 181("basic-python.extractDeprecation
[Component: function]
Extract deprecation info from
docstring
")
- style 181 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 182("basic-python.extractReturnDescription
[Component: function]
Extract return description
from docstring
")
- style 182 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 183("basic-python.getVisibility
[Component: function]
Determine visibility from
Python name convention -
__name: private - _name:
protected - name: public
")
- style 183 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 184("basic-python.mapToIR
[Component: function]
Map file extractions to
ArchletteIR
")
- style 184 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 185("basic-python.mapActorToIR
[Component: function]
Map ActorInfo to Actor
")
- style 185 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 186("basic-python.mapRelationshipsToIR
[Component: function]
Map relationships to
Relationship[] Creates
bidirectional actor
relationships
")
- style 186 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 187("basic-python.mapImportToComponentRelationships
[Component: function]
Map Python imports to
component relationships
(component-level
dependencies) Resolves local
imports to component IDs when
possible
")
- style 187 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 188("basic-python.mapClassToCodeItem
[Component: function]
Map ExtractedClass to
CodeItem
")
- style 188 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 189("basic-python.mapMethodToCodeItem
[Component: function]
Map ExtractedMethod to
CodeItem
")
- style 189 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 190("basic-python.mapFunctionToCodeItem
[Component: function]
Map ExtractedFunction to
CodeItem
")
- style 190 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 191("basic-python.mapTypeToCodeItem
[Component: function]
Map ExtractedType to CodeItem
")
- style 191 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 83("basic-python.createEmptyIR
[Component: function]
Create empty IR when no files
found
")
- style 83 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 84("basic-python.basicPython
[Component: function]
Basic Python extractor
Analyzes Python source code
and extracts architectural
components
")
- style 84 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ 179("basic-python.findSourceFiles
[Component: function]
Find source files matching
include/exclude patterns
")
+ style 179 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 180("basic-python.findPyProjectFiles
[Component: function]
Find pyproject.toml files
within the search paths
")
+ style 180 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 181("basic-python.readPyProjectInfo
[Component: function]
Read and parse pyproject.toml
file
")
+ style 181 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 182("basic-python.parsePyProjectToml
[Component: function]
Parse pyproject.toml using
smol-toml library Handles
full TOML spec including
multiline strings, arrays,
and nested tables
")
+ style 182 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 183("basic-python.findNearestPyProject
[Component: function]
Find the nearest parent
pyproject.toml for a given
file
")
+ style 183 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 184("basic-python.parseFiles
[Component: function]
Parse Python files using
Python AST parser script
")
+ style 184 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 185("basic-python.runPythonParser
[Component: function]
Run Python parser script and
return JSON output
")
+ style 185 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 186("basic-python.mapToFileExtraction
[Component: function]
Map Python parser output to
FileExtraction format
")
+ style 186 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 187("basic-python.mapClass
[Component: function]
Map Python class to
ExtractedClass
")
+ style 187 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 188("basic-python.mapMethod
[Component: function]
Map Python method to
ExtractedMethod
")
+ style 188 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 189("basic-python.mapProperty
[Component: function]
Map Python property to
ExtractedProperty
")
+ style 189 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 190("basic-python.mapFunction
[Component: function]
Map Python function to
ExtractedFunction
")
+ style 190 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 191("basic-python.mapType
[Component: function]
Map Python type definition to
ExtractedType
")
+ style 191 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 192("basic-python.mapParameter
[Component: function]
Map Python parameter to
ParameterInfo
")
+ style 192 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 193("basic-python.parseDocstring
[Component: function]
Parse Python docstring into
DocInfo Enhanced in Phase 2
to use parsed
Google/NumPy/Sphinx
docstrings
")
+ style 193 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 194("basic-python.extractDeprecation
[Component: function]
Extract deprecation info from
docstring
")
+ style 194 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 195("basic-python.extractReturnDescription
[Component: function]
Extract return description
from docstring
")
+ style 195 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 196("basic-python.getVisibility
[Component: function]
Determine visibility from
Python name convention -
__name: private - _name:
protected - name: public
")
+ style 196 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 197("basic-python.mapToIR
[Component: function]
Map file extractions to
ArchletteIR
")
+ style 197 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 198("basic-python.mapActorToIR
[Component: function]
Map ActorInfo to Actor
")
+ style 198 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 199("basic-python.mapRelationshipsToIR
[Component: function]
Map relationships to
Relationship[] Creates
bidirectional actor
relationships
")
+ style 199 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 200("basic-python.mapImportToComponentRelationships
[Component: function]
Map Python imports to
component relationships
(component-level
dependencies) Resolves local
imports to component IDs when
possible
")
+ style 200 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 201("basic-python.mapClassToCodeItem
[Component: function]
Map ExtractedClass to
CodeItem
")
+ style 201 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 202("basic-python.mapMethodToCodeItem
[Component: function]
Map ExtractedMethod to
CodeItem
")
+ style 202 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 203("basic-python.mapFunctionToCodeItem
[Component: function]
Map ExtractedFunction to
CodeItem
")
+ style 203 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 204("basic-python.mapTypeToCodeItem
[Component: function]
Map ExtractedType to CodeItem
")
+ style 204 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 86("basic-python.createEmptyIR
[Component: function]
Create empty IR when no files
found
")
+ style 86 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 87("basic-python.basicPython
[Component: function]
Basic Python extractor
Analyzes Python source code
and extracts architectural
components
")
+ style 87 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_wrangler.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_wrangler.mmd
index 4650dc3..24e724d 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_wrangler.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__basic_wrangler.mmd
@@ -1,38 +1,40 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
- 192("basic_wrangler.findWranglerFiles
[Component: function]
Find wrangler.toml files
based on include/exclude
patterns
")
- style 192 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 193("basic_wrangler.mapToIR
[Component: function]
Map wrangler configurations
to ArchletteIR This creates:
- Containers: One per
wrangler.toml file -
Deployments: One per
environment (production, dev,
preview, etc.) - Container
Instances: One per container
per environment - Container
Relationships: Logical
dependencies from service
bindings - Deployment
Relationships: Physical
instance-to-instance
connections
")
- style 193 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 194("basic_wrangler.extractContainers
[Component: function]
Extract containers from
wrangler configurations
Creates one container per
wrangler.toml file. Each
container represents a
Cloudflare Worker (if main
exists) or other Cloudflare
service.
")
- style 194 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 195("basic_wrangler.deriveContainerType
[Component: function]
Derive container type from
wrangler configuration Logic:
- If 'main' field exists →
Cloudflare Worker - Otherwise
→ Cloudflare Service
(generic)
")
- style 195 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 196("basic_wrangler.extractDeploymentsAndInstances
[Component: function]
Extract deployments and
container instances Creates:
- One deployment per
environment - Container
instances for each container
in each environment
")
- style 196 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 197("basic_wrangler.extractContainerRelationships
[Component: function]
Extract container
relationships from service
bindings Creates logical
dependencies between
containers based on service
bindings. Deduplicates
relationships across all
environments.
")
- style 197 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 198("basic_wrangler.extractDeploymentRelationships
[Component: function]
Extract deployment
relationships from container
instances Creates physical
instance-to-instance
relationships based on
service bindings. Each
relationship represents an
actual runtime dependency in
a specific environment.
")
- style 198 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 199("basic_wrangler.extractDescription
[Component: function]
Extract description from
")
- style 199 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 200("basic_wrangler.parseWranglerFile
[Component: function]
Parse a wrangler.toml file
")
- style 200 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 201("basic_wrangler.normalizeServiceBindings
[Component: function]
Normalize service bindings
from various formats Wrangler
supports multiple binding
formats: - [[services]] array
(TOML array of tables) -
services = [{ binding =
"...", service = "..." }]
")
- style 201 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 202("basic_wrangler.getEnvironments
[Component: function]
Get all environments from a
wrangler config Returns a
list of environment names,
including: - "production"
(from root-level config if it
has deployable content) - All
keys from env.* sections
")
- style 202 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 203("basic_wrangler.getEnvironmentConfig
[Component: function]
Get configuration for a
specific environment Merges
root-level config with
environment-specific
overrides. Environment config
takes precedence.
")
- style 203 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 85("basic_wrangler.basicWranglerExtractor
[Component: function]
Extract deployment topology
from Cloudflare Wrangler
configuration files
")
- style 85 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ 205("basic_wrangler.findWranglerFiles
[Component: function]
Find wrangler.toml files
based on include/exclude
patterns
")
+ style 205 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 206("basic_wrangler.mapToIR
[Component: function]
Map wrangler configurations
to ArchletteIR This creates:
- Containers: One per
wrangler.toml file -
Deployments: One per
environment (production, dev,
preview, etc.) - Container
Instances: One per container
per environment - Container
Relationships: Logical
dependencies from service
bindings - Deployment
Relationships: Physical
instance-to-instance
connections
")
+ style 206 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 207("basic_wrangler.extractContainers
[Component: function]
Extract containers from
wrangler configurations
Creates one container per
wrangler.toml file. Each
container represents a
Cloudflare Worker (if main
exists) or other Cloudflare
service.
")
+ style 207 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 208("basic_wrangler.deriveContainerType
[Component: function]
Derive container type from
wrangler configuration Logic:
- If 'main' field exists →
Cloudflare Worker - Otherwise
→ Cloudflare Service
(generic)
")
+ style 208 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 209("basic_wrangler.extractDeploymentsAndInstances
[Component: function]
Extract deployments and
container instances Creates:
- One deployment per
environment - Container
instances for each container
in each environment
")
+ style 209 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 210("basic_wrangler.findMatchingContainer
[Component: function]
Smart lookup to find matching
container for a service name
Tries exact match first, then
fuzzy matching with common
environment suffix removal.
")
+ style 210 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 211("basic_wrangler.extractContainerRelationships
[Component: function]
Extract container
relationships from service
bindings Creates logical
dependencies between
containers based on service
bindings. Uses smart lookup
to match service names to
actual containers.
Deduplicates relationships
across all environments.
")
+ style 211 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 212("basic_wrangler.extractDeploymentRelationships
[Component: function]
Extract deployment
relationships from container
instances Creates physical
instance-to-instance
relationships based on
service bindings. Each
relationship represents an
actual runtime dependency in
a specific environment.
")
+ style 212 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 213("basic_wrangler.extractDescription
[Component: function]
Extract description from
")
+ style 213 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 214("basic_wrangler.parseWranglerFile
[Component: function]
Parse a wrangler.toml file
")
+ style 214 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 215("basic_wrangler.normalizeServiceBindings
[Component: function]
Normalize service bindings
from various formats Wrangler
supports multiple binding
formats: - [[services]] array
(TOML array of tables) -
services = [{ binding =
"...", service = "..." }]
")
+ style 215 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 216("basic_wrangler.getEnvironments
[Component: function]
Get all environments from a
wrangler config Returns a
list of environment names,
including: - "production"
(from root-level config if it
has deployable content) - All
keys from env.* sections
")
+ style 216 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 217("basic_wrangler.getEnvironmentConfig
[Component: function]
Get configuration for a
specific environment Merges
root-level config with
environment-specific
overrides. Environment config
takes precedence.
")
+ style 217 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 88("basic_wrangler.basicWranglerExtractor
[Component: function]
Extract deployment topology
from Cloudflare Wrangler
configuration files
")
+ style 88 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__cli.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__cli.mmd
index 9404a48..30c1b30 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__cli.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__cli.mmd
@@ -1,20 +1,20 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
21("CLI.usageAndExit
[Component: function]
")
- style 21 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 21 fill:#d4e8fc,stroke:#94a2b0,color:#000000
22("CLI.parseArgs
[Component: function]
")
- style 22 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 22 fill:#d4e8fc,stroke:#94a2b0,color:#000000
23("CLI.stageListFromArg
[Component: function]
")
- style 23 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 23 fill:#d4e8fc,stroke:#94a2b0,color:#000000
24("CLI.run
[Component: function]
")
- style 24 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 24 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__core.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__core.mmd
index 87f0440..3e9bd25 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__core.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__core.mmd
@@ -1,96 +1,102 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
34("core.resolveConfigFilePath
[Component: function]
Resolve config file path from
CLI arguments
")
- style 34 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 34 fill:#d4e8fc,stroke:#94a2b0,color:#000000
35("core.resolveConfigBaseDir
[Component: function]
Determine base directory for
resolving config-relative
paths Logic: - If using
default template: CWD (user's
project directory) - If user
provided config file: config
file's directory - Fallback:
CWD
")
- style 35 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 35 fill:#d4e8fc,stroke:#94a2b0,color:#000000
36("core.loadYamlFile
[Component: function]
Load and parse YAML config
file
")
- style 36 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 36 fill:#d4e8fc,stroke:#94a2b0,color:#000000
37("core.createDefaultConfig
[Component: function]
Create minimal default
configuration when no config
file is found
")
- style 37 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 37 fill:#d4e8fc,stroke:#94a2b0,color:#000000
38("core.loadConfig
[Component: function]
Load configuration from file
path (high-level API) This is
the main entry point for
config loading. It handles:
1. Config file path
resolution (default vs
user-provided) 2. Base
directory determination 3.
YAML parsing 4. Config
validation and resolution 5.
Fallback to default config
")
- style 38 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 38 fill:#d4e8fc,stroke:#94a2b0,color:#000000
39("core.nameToId
[Component: function]
Convert a name to a
normalized ID Used for
consistent ID generation
across extractors and mappers
")
- style 39 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 39 fill:#d4e8fc,stroke:#94a2b0,color:#000000
40("core.sanitizeId
[Component: function]
Sanitize ID for DSL and code
identifiers (preserves
underscores) Used for Python
code identifiers where
underscores are significant
")
- style 40 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 40 fill:#d4e8fc,stroke:#94a2b0,color:#000000
41("core.isTTY
[Component: function]
Determine if we're in a TTY
environment (for pretty
printing)
")
- style 41 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 41 fill:#d4e8fc,stroke:#94a2b0,color:#000000
42("core.getDefaultLogLevel
[Component: function]
Get default log level from
environment or fallback to
'info'
")
- style 42 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 42 fill:#d4e8fc,stroke:#94a2b0,color:#000000
43("core.createPinoLogger
[Component: function]
Create a Pino logger instance
with optional pretty printing
")
- style 43 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 43 fill:#d4e8fc,stroke:#94a2b0,color:#000000
44("core.createLogger
[Component: function]
Create a logger instance
")
- style 44 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 44 fill:#d4e8fc,stroke:#94a2b0,color:#000000
45("core.getDefaultUserPluginDir
[Component: function]
Default base directory for
user plugins:
~/.archlette/mods This
provides a standard location
for external plugins and
custom modules
")
- style 45 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 45 fill:#d4e8fc,stroke:#94a2b0,color:#000000
46("core.loadModuleFromPath
[Component: function]
Dynamically load an ESM
module from a path or module
specifier with security
validation
")
- style 46 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 46 fill:#d4e8fc,stroke:#94a2b0,color:#000000
47("core.getCliDir
[Component: function]
")
- style 47 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 47 fill:#d4e8fc,stroke:#94a2b0,color:#000000
48("core.expandTilde
[Component: function]
")
- style 48 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 48 fill:#d4e8fc,stroke:#94a2b0,color:#000000
49("core.resolveArchlettePath
[Component: function]
Core path resolver honoring
Archlette rules (no file
existence checks). - "~" ->
user home - "/" -> absolute -
else -> relative to CLI dir
")
- style 49 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 49 fill:#d4e8fc,stroke:#94a2b0,color:#000000
50("core.resolveModuleEntry
[Component: function]
Resolve a module entry by
probing: 1) Exact path 2)
With extensions: .ts then .js
3) If directory: index.ts
then index.js
")
- style 50 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 50 fill:#d4e8fc,stroke:#94a2b0,color:#000000
51("core.toFileUrl
[Component: function]
")
- style 51 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 51 fill:#d4e8fc,stroke:#94a2b0,color:#000000
52("core.writeFile
[Component: function]
Write content to a file,
creating parent directories
if needed.
")
- style 52 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 52 fill:#d4e8fc,stroke:#94a2b0,color:#000000
53("core.validatePathSecurity
[Component: function]
Validate path for security
issues
")
- style 53 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 53 fill:#d4e8fc,stroke:#94a2b0,color:#000000
54("core.resolveSecurePath
[Component: function]
Securely resolve a
user-provided path with
validation
")
- style 54 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 54 fill:#d4e8fc,stroke:#94a2b0,color:#000000
55("core.resolveUserContentPath
[Component: function]
Convenience function for
resolving user content paths
(themes, input files) Uses
'config-relative' strategy by
default
")
- style 55 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 55 fill:#d4e8fc,stroke:#94a2b0,color:#000000
56("core.resolvePluginPath
[Component: function]
Convenience function for
resolving plugin paths Uses
'cli-relative' strategy by
default
")
- style 56 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 56 fill:#d4e8fc,stroke:#94a2b0,color:#000000
57("core.getStageEntry
[Component: function]
")
- style 57 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 57 fill:#d4e8fc,stroke:#94a2b0,color:#000000
58("core.loadExtractorModule
[Component: function]
")
- style 58 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 58 fill:#d4e8fc,stroke:#94a2b0,color:#000000
59("core.loadValidatorModule
[Component: function]
")
- style 59 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 59 fill:#d4e8fc,stroke:#94a2b0,color:#000000
60("core.loadGeneratorModule
[Component: function]
")
- style 60 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 60 fill:#d4e8fc,stroke:#94a2b0,color:#000000
61("core.loadRendererModule
[Component: function]
")
- style 61 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 61 fill:#d4e8fc,stroke:#94a2b0,color:#000000
62("core.loadDocModule
[Component: function]
")
- style 62 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 62 fill:#d4e8fc,stroke:#94a2b0,color:#000000
63("core.getCacheDir
[Component: function]
Get the Archlette cache
directory
")
- style 63 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 63 fill:#d4e8fc,stroke:#94a2b0,color:#000000
64("core.ensureCacheDir
[Component: function]
Ensure cache directory exists
")
- style 64 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 65("core.commandExistsInPath
[Component: function]
Check if a command exists in
PATH
")
- style 65 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 64 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 65("core.commandExistsInPath
[Component: function]
Check if a command exists in
PATH Returns the full path if
found, null otherwise
")
+ style 65 fill:#d4e8fc,stroke:#94a2b0,color:#000000
66("core.downloadFile
[Component: function]
Download a file from URL to
destination
")
- style 66 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 66 fill:#d4e8fc,stroke:#94a2b0,color:#000000
67("core.extractZip
[Component: function]
Extract a ZIP file (simple
extraction for Structurizr
CLI)
")
- style 67 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 67 fill:#d4e8fc,stroke:#94a2b0,color:#000000
68("core.makeExecutable
[Component: function]
Make file executable (Unix
only)
")
- style 68 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 68 fill:#d4e8fc,stroke:#94a2b0,color:#000000
69("core.downloadStructurizr
[Component: function]
Download and install
Structurizr CLI to cache
")
- style 69 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 69 fill:#d4e8fc,stroke:#94a2b0,color:#000000
70("core.downloadPlantUML
[Component: function]
Download and install PlantUML
to cache
")
- style 70 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 70 fill:#d4e8fc,stroke:#94a2b0,color:#000000
71("core.findStructurizrCLI
[Component: function]
Find or download Structurizr
CLI
")
- style 71 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 72("core.findPlantUML
[Component: function]
Find or download PlantUML JAR
")
- style 72 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 73("core.checkJava
[Component: function]
Verify Java is available
")
- style 73 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 74("core.requireJava
[Component: function]
Validate Java is installed
(throw if not)
")
- style 74 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 75("core.resolveConfig
[Component: function]
For each stage, resolve
includes/excludes for each
node: - If node omits
includes/excludes, inherit
from defaults. - Add
configBaseDir for resolving
config-relative paths
")
- style 75 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 71 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 72("core.downloadStructurizrLite
[Component: function]
Download and install
Structurizr Lite to cache
")
+ style 72 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 73("core.findStructurizrLite
[Component: function]
Find or download Structurizr
Lite WAR file
")
+ style 73 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 74("core.findPlantUML
[Component: function]
Find or download PlantUML JAR
")
+ style 74 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 75("core.checkJava
[Component: function]
Verify Java is available
")
+ style 75 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 76("core.requireJava
[Component: function]
Validate Java is installed
(throw if not)
")
+ style 76 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 77("core.findMermaidCLI
[Component: function]
Find Mermaid CLI in system
PATH Note: Mermaid CLI is not
auto-downloaded. Users should
install it via npm: - Global:
npm install -g
")
+ style 77 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 78("core.resolveConfig
[Component: function]
For each stage, resolve
includes/excludes for each
node: - If node omits
includes/excludes, inherit
from defaults. - Add
configBaseDir for resolving
config-relative paths
")
+ style 78 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__docs.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__docs.mmd
index 558cebe..69f2cd3 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__docs.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__docs.mmd
@@ -1,24 +1,24 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
33("docs.run
[Component: function]
Execute the documentation
stage
")
- style 33 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 76("docs.markdownDocs
[Component: function]
Generate markdown
documentation
")
- style 76 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 77("docs.findDiagramsForView
[Component: function]
Find diagram files for a
specific view type
")
- style 77 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 78("docs.findDiagramsForContainer
[Component: function]
Find component diagrams for a
specific container
")
- style 78 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 79("docs.findClassDiagramsForComponent
[Component: function]
Find class diagrams for a
specific component
")
- style 79 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 80("docs.sanitizeFileName
[Component: function]
")
- style 80 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 33 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 79("docs.markdownDocs
[Component: function]
Generate markdown
documentation
")
+ style 79 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 80("docs.findDiagramsForView
[Component: function]
Find diagram files for a
specific view type
")
+ style 80 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 81("docs.findDiagramsForContainer
[Component: function]
Find component diagrams for a
specific container
")
+ style 81 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 82("docs.findClassDiagramsForComponent
[Component: function]
Find class diagrams for a
specific component
")
+ style 82 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 83("docs.sanitizeFileName
[Component: function]
")
+ style 83 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__extractors.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__extractors.mmd
index 7110363..beb1383 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__extractors.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__extractors.mmd
@@ -1,22 +1,22 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
25("extractors.aggregateIRs
[Component: function]
Aggregate multiple
ArchletteIR objects into a
single unified IR
")
- style 25 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 25 fill:#d4e8fc,stroke:#94a2b0,color:#000000
26("extractors.deduplicateById
[Component: function]
Deduplicate array of entities
by their ID field
")
- style 26 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 26 fill:#d4e8fc,stroke:#94a2b0,color:#000000
27("extractors.deduplicateByName
[Component: function]
Deduplicate array of entities
by their name field
")
- style 27 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 27 fill:#d4e8fc,stroke:#94a2b0,color:#000000
28("extractors.deduplicateRelationships
[Component: function]
Deduplicate relationships by
source+destination+stereotype
combination
")
- style 28 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 28 fill:#d4e8fc,stroke:#94a2b0,color:#000000
29("extractors.run
[Component: function]
Execute the extraction stage
")
- style 29 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 29 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__generators.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__generators.mmd
index ced59eb..59de9f8 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__generators.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__generators.mmd
@@ -1,34 +1,34 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
31("generators.run
[Component: function]
Execute the generation stage
")
- style 31 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 86("generators.loadDefaultTheme
[Component: function]
Load the default Structurizr
theme from templates
directory
")
- style 86 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 87("generators.structurizrGenerator
[Component: function]
Generate Structurizr DSL from
ArchletteIR
")
- style 87 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 88("generators.prepareContainerData
[Component: function]
Prepare container data with
components, code, and
relationships for template
")
- style 88 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 89("generators.prepareComponentView
[Component: function]
Prepare component view data
for template
")
- style 89 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 90("generators.prepareClassView
[Component: function]
Prepare class view data for
template
")
- style 90 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 91("generators.generateAllActorRelationships
[Component: function]
Generate all actor-related
relationships
")
- style 91 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 92("generators.generateUniqueCodeName
[Component: function]
Generate a unique name for a
code item to avoid naming
collisions
")
- style 92 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 93("generators.buildTechnologyString
[Component: function]
Build technology string from
relationship metadata
")
- style 93 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 94("generators.sanitizeId
[Component: function]
Sanitize ID for DSL (remove
special characters, convert
to valid identifier)
")
- style 94 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 95("generators.escapeString
[Component: function]
Escape special characters in
strings for DSL Structurizr
DSL doesn't support \ escape
sequences in strings, so we
replace newlines with spaces
for cleaner output.
")
- style 95 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 31 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 89("generators.loadDefaultTheme
[Component: function]
Load the default Structurizr
theme from templates
directory
")
+ style 89 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 90("generators.structurizrGenerator
[Component: function]
Generate Structurizr DSL from
ArchletteIR
")
+ style 90 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 91("generators.prepareContainerData
[Component: function]
Prepare container data with
components, code, and
relationships for template
")
+ style 91 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 92("generators.prepareComponentView
[Component: function]
Prepare component view data
for template
")
+ style 92 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 93("generators.prepareClassView
[Component: function]
Prepare class view data for
template
")
+ style 93 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 94("generators.generateAllActorRelationships
[Component: function]
Generate all actor-related
relationships
")
+ style 94 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 95("generators.generateUniqueCodeName
[Component: function]
Generate a unique name for a
code item to avoid naming
collisions
")
+ style 95 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 96("generators.buildTechnologyString
[Component: function]
Build technology string from
relationship metadata
")
+ style 96 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 97("generators.sanitizeId
[Component: function]
Sanitize ID for DSL (remove
special characters, convert
to valid identifier)
")
+ style 97 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 98("generators.escapeString
[Component: function]
Escape special characters in
strings for DSL Structurizr
DSL doesn't support \ escape
sequences in strings, so we
replace newlines with spaces
for cleaner output.
")
+ style 98 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__renderers.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__renderers.mmd
index eedb810..0d8e01e 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__renderers.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__renderers.mmd
@@ -1,18 +1,38 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
+ 100("renderers.plantumlRender
[Component: function]
Render PlantUML files to PNG
images
")
+ style 100 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 101("renderers.structurizrExport
[Component: function]
Export Structurizr DSL to
PlantUML and/or Mermaid
formats
")
+ style 101 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 102("renderers.findGraphviz
[Component: function]
Find Graphviz dot command in
PATH
")
+ style 102 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 103("renderers.structurizrRender
[Component: function]
Render Structurizr DSL to
images using CLI DOT export +
Graphviz
")
+ style 103 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 104("renderers.extractStylesBlock
[Component: function]
Extract styles block from
theme content using brace
counting
")
+ style 104 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 105("renderers.removeBlock
[Component: function]
Remove a block from DSL
content using brace counting
")
+ style 105 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 106("renderers.removeStylesBlock
[Component: function]
")
+ style 106 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 107("renderers.removeBrandingBlock
[Component: function]
")
+ style 107 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 108("renderers.escapeInvalidHtmlTags
[Component: function]
Escape all angle brackets
that aren't part of valid DOT
HTML tags. Handles cases
where Structurizr inserts
/> for word-wrapping inside
other tag-like content (e.g.,
Strategy: 1. Find all valid
HTML tags using regex 2.
Escape all < and > that are
NOT part of those tags
")
+ style 108 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 109("renderers.sanitizeDotContent
[Component: function]
Sanitize DOT file content for
Graphviz compatibility
Applies string replacements
only within label=<<...>>
content, preserving the DOT
structural syntax.
")
+ style 109 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 110("renderers.sanitizeDotFiles
[Component: function]
Sanitize all DOT files in a
directory
")
+ style 110 fill:#d4e8fc,stroke:#94a2b0,color:#000000
32("renderers.run
[Component: function]
Execute the rendering stage
")
- style 32 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 96("renderers.plantumlRender
[Component: function]
Render PlantUML files to PNG
images
")
- style 96 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 97("renderers.structurizrExport
[Component: function]
Export Structurizr DSL to
PlantUML and Mermaid formats
")
- style 97 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 32 fill:#d4e8fc,stroke:#94a2b0,color:#000000
+ 99("renderers.mermaidRender
[Component: function]
Render Mermaid files to
images
")
+ style 99 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__shared.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__shared.mmd
index 30509e0..df7ff87 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__shared.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__shared.mmd
@@ -1,14 +1,14 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
- 204("shared.deduplicateRelationships
[Component: function]
Deduplicate relationships by
source+destination
combination - Excludes
self-referential
relationships (source ===
destination) - Merges
descriptions and stereotypes
with " | " separator when
duplicates are found -
Extracts imported names from
descriptions (removes
"imports " prefix) and keeps
only unique names - Returns
one relationship per unique
source+destination pair
")
- style 204 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ 218("shared.deduplicateRelationships
[Component: function]
Deduplicate relationships by
source+destination
combination - Excludes
self-referential
relationships (source ===
destination) - Merges
descriptions and stereotypes
with " | " separator when
duplicates are found -
Extracts imported names from
descriptions (removes
"imports " prefix) and keeps
only unique names - Returns
one relationship per unique
source+destination pair
")
+ style 218 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__validators.mmd b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__validators.mmd
index 3d010d9..85909cc 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__validators.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Classes_default_container__validators.mmd
@@ -1,16 +1,16 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
+ 111("validators.baseValidator
[Component: function]
Validates the IR against the
Zod schema. Throws if
invalid.
")
+ style 111 fill:#d4e8fc,stroke:#94a2b0,color:#000000
30("validators.run
[Component: function]
Execute the validation stage
")
- style 30 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 98("validators.baseValidator
[Component: function]
Validates the IR against the
Zod schema. Throws if
invalid.
")
- style 98 fill:#85bbf0,stroke:#5d82a8,color:#000000
+ style 30 fill:#d4e8fc,stroke:#94a2b0,color:#000000
end
end
\ No newline at end of file
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Components_Application.mmd b/docs/architecture/diagrams/mermaid/structurizr-Components_Application.mmd
index 96f1914..51946a7 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Components_Application.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Components_Application.mmd
@@ -1,7 +1,7 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Application - Components"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
1["User
[Person]
End user who runs archlette
commands
"]
@@ -17,7 +17,7 @@ graph TB
6("File System
[Software System]
The local file system for
caching downloaded tools.
")
style 6 fill:#999999,stroke:#6b6b6b,color:#ffffff
- subgraph 8 ["Application"]
+ subgraph 8 [" "]
style 8 fill:#ffffff,stroke:#2e6295,color:#2e6295
10("extractors
[Component: module]
ArchletteIR aggregation
utilities | Extraction stage
of the AAC pipeline
")
@@ -26,7 +26,7 @@ graph TB
style 11 fill:#85bbf0,stroke:#5d82a8,color:#000000
12("generators
[Component: module]
Generation stage of the AAC
pipeline | Structurizr DSL
Generator (Template-based)
")
style 12 fill:#85bbf0,stroke:#5d82a8,color:#000000
- 13("renderers
[Component: module]
Render stage of the AAC
pipeline | PlantUML image
renderer | Structurizr DSL
export renderer
")
+ 13("renderers
[Component: module]
Render stage of the AAC
pipeline | Mermaid image
renderer | PlantUML image
renderer | Structurizr DSL
export renderer | Structurizr
direct image renderer
")
style 13 fill:#85bbf0,stroke:#5d82a8,color:#000000
14("docs
[Component: module]
Documentation stage of the
AAC pipeline | Markdown
documentation generator
")
style 14 fill:#85bbf0,stroke:#5d82a8,color:#000000
@@ -58,7 +58,7 @@ graph TB
10-- "composed of cloudflare
wrangler extractor
" -->19
11-- "Provides IR types, validation
schemas, and module loading |
zArchletteIR |
ArchletteValidator
" -->15
12-- "Provides IR types, path
resolution, and module
loading | ArchletteIR |
Container | Component |
CodeItem | Relationship |
ResolvedStageNode |
VIEW_NAMES |
resolveUserContentPath
" -->15
- 13-- "Provides types, module
loading, and tool management
| PipelineContext |
findPlantUML | requireJava |
resolveArchlettePath |
findStructurizrCLI
" -->15
+ 13-- "Provides types, module
loading, and tool management
| PipelineContext |
ResolvedStageNode |
findMermaidCLI |
resolveArchlettePath |
findPlantUML | requireJava |
findStructurizrCLI |
commandExistsInPath
" -->15
14-- "Provides types, module
loading, and path resolution
| PipelineContext | Logger |
RendererOutput | Component |
resolveArchlettePath
" -->15
16-- "ResolvedStageNode |
ArchletteIR | PipelineContext
| IR_VERSION |
resolveSecurePath |
createLogger | sanitizeId |
CodeItem | System |
Relationship | Component |
Actor | Container | TAGS |
DEFAULT_CONTAINER_ID |
nameToId
" -->15
17-- "ResolvedStageNode |
ArchletteIR | PipelineContext
| resolveSecurePath |
createLogger | sanitizeId |
CodeItem | System |
Relationship | Component |
Actor | TAGS |
DEFAULT_CONTAINER_ID |
IR_VERSION | nameToId
" -->15
diff --git a/docs/architecture/diagrams/mermaid/structurizr-Containers.mmd b/docs/architecture/diagrams/mermaid/structurizr-Containers.mmd
index 9bd0c1b..127c237 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-Containers.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-Containers.mmd
@@ -1,7 +1,7 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - Containers"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
1["User
[Person]
End user who runs archlette
commands
"]
@@ -17,7 +17,7 @@ graph TB
6("File System
[Software System]
The local file system for
caching downloaded tools.
")
style 6 fill:#999999,stroke:#6b6b6b,color:#ffffff
- subgraph 7 ["Application"]
+ subgraph 7 [" "]
style 7 fill:#ffffff,stroke:#0b4884,color:#0b4884
8("Application
[Container: Application]
Main application container
")
diff --git a/docs/architecture/diagrams/mermaid/structurizr-SystemContext.mmd b/docs/architecture/diagrams/mermaid/structurizr-SystemContext.mmd
index 4179476..2c51573 100644
--- a/docs/architecture/diagrams/mermaid/structurizr-SystemContext.mmd
+++ b/docs/architecture/diagrams/mermaid/structurizr-SystemContext.mmd
@@ -1,7 +1,7 @@
-graph TB
+graph LR
linkStyle default fill:#ffffff
- subgraph diagram ["Application - System Context"]
+ subgraph diagram [" "]
style diagram fill:#ffffff,stroke:#ffffff
1["User
[Person]
End user who runs archlette
commands
"]
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_astro-key.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_astro-key.puml
index da75bcd..d2ad682 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_astro-key.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_astro-key.puml
@@ -18,12 +18,12 @@ skinparam rectangle<<_transparent>> {
}
skinparam rectangle<<1>> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
}
-rectangle "==Component" <<1>>
+rectangle "==Component, Code" <<1>>
@enduml
\ No newline at end of file
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_astro.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_astro.puml
index 36957a9..6e3503c 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_astro.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_astro.puml
@@ -2,9 +2,9 @@
set separator none
title Application - Application - Components
-top to bottom direction
-skinparam ranksep 60
-skinparam nodesep 30
+left to right direction
+skinparam ranksep 20
+skinparam nodesep 10
skinparam {
arrowFontSize 10
@@ -17,177 +17,177 @@ skinparam {
hide stereotype
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
@@ -198,6 +198,7 @@ skinparam rectangle<> {
}
rectangle "Application\n[Container: Application]" <> {
+ rectangle "==basic-astro.extractCodeFromFrontmatter\n[Component: function]\n\nExtract TypeScript/JavaScript code from Astro frontmatter Parses the frontmatter section (code between --- markers) as TypeScript and extracts code elements using the basic-node AST extractors: - Classes and their methods - Functions (both regular and arrow functions) - Type aliases (type X = ...) - TypeScript interfaces Returns empty result if frontmatter is empty or parsing fails (errors are logged). Graceful error handling ensures one malformed Astro file doesn't break the extraction pipeline." <> as Application.Application.basicastroextractCodeFromFrontmatter
rectangle "==basic-astro.createSyntheticRenderFunction\n[Component: function]\n\nCreate a synthetic render function for an Astro component Every Astro component is fundamentally a server-side render function that: 1. Receives props (if Props interface is defined) 2. Processes the component logic (frontmatter code) 3. Renders the template to HTML 4. Returns an HTML string Since Astro's compiler doesn't explicitly define this, we create a synthetic function to represent the component's executable behavior in the IR. The function is named after the file (without .astro extension): - Button.astro → function Button() - index.astro → function index() - settings/Profile.astro → function Profile()" <> as Application.Application.basicastrocreateSyntheticRenderFunction
rectangle "==basic-astro.extractJSDocBlocks\n[Component: function]\n\nExtract all JSDoc comment blocks from source code Matches /** ... *\\/ style comments and parses their tags" <> as Application.Application.basicastroextractJSDocBlocks
rectangle "==basic-astro.parseJSDocBlock\n[Component: function]\n\nParse a single JSDoc comment block into description and tags" <> as Application.Application.basicastroparseJSDocBlock
@@ -222,7 +223,6 @@ rectangle "Application\n[Container: Application]" <[Component: function]\n\nMap a class to code items (class + methods)" <> as Application.Application.basicastromapClassToCodeItems
rectangle "==basic-astro.mapFunctionToCodeItem\n[Component: function]\n\nMap a function to a code item" <> as Application.Application.basicastromapFunctionToCodeItem
rectangle "==basic-astro.basicAstroExtractor\n[Component: function]\n\nExtract architecture information from an Astro codebase" <> as Application.Application.basicastrobasicAstroExtractor
- rectangle "==basic-astro.extractCodeFromFrontmatter\n[Component: function]\n\nExtract TypeScript/JavaScript code from Astro frontmatter Parses the frontmatter section (code between --- markers) as TypeScript and extracts code elements using the basic-node AST extractors: - Classes and their methods - Functions (both regular and arrow functions) - Type aliases (type X = ...) - TypeScript interfaces Returns empty result if frontmatter is empty or parsing fails (errors are logged). Graceful error handling ensures one malformed Astro file doesn't break the extraction pipeline." <> as Application.Application.basicastroextractCodeFromFrontmatter
}
@enduml
\ No newline at end of file
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_node-key.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_node-key.puml
index da75bcd..d2ad682 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_node-key.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_node-key.puml
@@ -18,12 +18,12 @@ skinparam rectangle<<_transparent>> {
}
skinparam rectangle<<1>> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
}
-rectangle "==Component" <<1>>
+rectangle "==Component, Code" <<1>>
@enduml
\ No newline at end of file
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_node.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_node.puml
index d1420e7..d3021b9 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_node.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_node.puml
@@ -2,9 +2,9 @@
set separator none
title Application - Application - Components
-top to bottom direction
-skinparam ranksep 60
-skinparam nodesep 30
+left to right direction
+skinparam ranksep 20
+skinparam nodesep 10
skinparam {
arrowFontSize 10
@@ -17,310 +17,310 @@ skinparam {
hide stereotype
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_python-key.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_python-key.puml
index da75bcd..d2ad682 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_python-key.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_python-key.puml
@@ -18,12 +18,12 @@ skinparam rectangle<<_transparent>> {
}
skinparam rectangle<<1>> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
}
-rectangle "==Component" <<1>>
+rectangle "==Component, Code" <<1>>
@enduml
\ No newline at end of file
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_python.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_python.puml
index 80d6cab..8cb4da3 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_python.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_python.puml
@@ -2,9 +2,9 @@
set separator none
title Application - Application - Components
-top to bottom direction
-skinparam ranksep 60
-skinparam nodesep 30
+left to right direction
+skinparam ranksep 20
+skinparam nodesep 10
skinparam {
arrowFontSize 10
@@ -17,198 +17,198 @@ skinparam {
hide stereotype
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_wrangler-key.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_wrangler-key.puml
index da75bcd..d2ad682 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_wrangler-key.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_wrangler-key.puml
@@ -18,12 +18,12 @@ skinparam rectangle<<_transparent>> {
}
skinparam rectangle<<1>> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
}
-rectangle "==Component" <<1>>
+rectangle "==Component, Code" <<1>>
@enduml
\ No newline at end of file
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_wrangler.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_wrangler.puml
index 6cb2755..4d48d44 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_wrangler.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__basic_wrangler.puml
@@ -2,9 +2,9 @@
set separator none
title Application - Application - Components
-top to bottom direction
-skinparam ranksep 60
-skinparam nodesep 30
+left to right direction
+skinparam ranksep 20
+skinparam nodesep 10
skinparam {
arrowFontSize 10
@@ -17,93 +17,100 @@ skinparam {
hide stereotype
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
+ roundCorner 20
+ shadowing false
+}
+skinparam rectangle<> {
+ BackgroundColor #d4e8fc
+ FontColor #000000
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
@@ -119,7 +126,8 @@ rectangle "Application\n[Container: Application]" <[Component: function]\n\nExtract containers from wrangler configurations Creates one container per wrangler.toml file. Each container represents a Cloudflare Worker (if main exists) or other Cloudflare service." <> as Application.Application.basic_wranglerextractContainers
rectangle "==basic_wrangler.deriveContainerType\n[Component: function]\n\nDerive container type from wrangler configuration Logic: - If 'main' field exists → Cloudflare Worker - Otherwise → Cloudflare Service (generic)" <> as Application.Application.basic_wranglerderiveContainerType
rectangle "==basic_wrangler.extractDeploymentsAndInstances\n[Component: function]\n\nExtract deployments and container instances Creates: - One deployment per environment - Container instances for each container in each environment" <> as Application.Application.basic_wranglerextractDeploymentsAndInstances
- rectangle "==basic_wrangler.extractContainerRelationships\n[Component: function]\n\nExtract container relationships from service bindings Creates logical dependencies between containers based on service bindings. Deduplicates relationships across all environments." <> as Application.Application.basic_wranglerextractContainerRelationships
+ rectangle "==basic_wrangler.findMatchingContainer\n[Component: function]\n\nSmart lookup to find matching container for a service name Tries exact match first, then fuzzy matching with common environment suffix removal." <> as Application.Application.basic_wranglerfindMatchingContainer
+ rectangle "==basic_wrangler.extractContainerRelationships\n[Component: function]\n\nExtract container relationships from service bindings Creates logical dependencies between containers based on service bindings. Uses smart lookup to match service names to actual containers. Deduplicates relationships across all environments." <> as Application.Application.basic_wranglerextractContainerRelationships
rectangle "==basic_wrangler.extractDeploymentRelationships\n[Component: function]\n\nExtract deployment relationships from container instances Creates physical instance-to-instance relationships based on service bindings. Each relationship represents an actual runtime dependency in a specific environment." <> as Application.Application.basic_wranglerextractDeploymentRelationships
rectangle "==basic_wrangler.extractDescription\n[Component: function]\n\nExtract description from" <> as Application.Application.basic_wranglerextractDescription
rectangle "==basic_wrangler.parseWranglerFile\n[Component: function]\n\nParse a wrangler.toml file" <> as Application.Application.basic_wranglerparseWranglerFile
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__cli-key.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__cli-key.puml
index da75bcd..d2ad682 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__cli-key.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__cli-key.puml
@@ -18,12 +18,12 @@ skinparam rectangle<<_transparent>> {
}
skinparam rectangle<<1>> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
}
-rectangle "==Component" <<1>>
+rectangle "==Component, Code" <<1>>
@enduml
\ No newline at end of file
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__cli.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__cli.puml
index d9ca253..f8c9b26 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__cli.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__cli.puml
@@ -2,9 +2,9 @@
set separator none
title Application - Application - Components
-top to bottom direction
-skinparam ranksep 60
-skinparam nodesep 30
+left to right direction
+skinparam ranksep 20
+skinparam nodesep 10
skinparam {
arrowFontSize 10
@@ -17,30 +17,30 @@ skinparam {
hide stereotype
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__core-key.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__core-key.puml
index da75bcd..d2ad682 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__core-key.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__core-key.puml
@@ -18,12 +18,12 @@ skinparam rectangle<<_transparent>> {
}
skinparam rectangle<<1>> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
}
-rectangle "==Component" <<1>>
+rectangle "==Component, Code" <<1>>
@enduml
\ No newline at end of file
diff --git a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__core.puml b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__core.puml
index 0498458..7d7b3a3 100644
--- a/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__core.puml
+++ b/docs/architecture/diagrams/plantuml/structurizr-Classes_default_container__core.puml
@@ -2,9 +2,9 @@
set separator none
title Application - Application - Components
-top to bottom direction
-skinparam ranksep 60
-skinparam nodesep 30
+left to right direction
+skinparam ranksep 20
+skinparam nodesep 10
skinparam {
arrowFontSize 10
@@ -17,296 +17,317 @@ skinparam {
hide stereotype
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
+ roundCorner 20
+ shadowing false
+}
+skinparam rectangle<> {
+ BackgroundColor #d4e8fc
+ FontColor #000000
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<> {
- BackgroundColor #85bbf0
+ BackgroundColor #d4e8fc
+ FontColor #000000
+ BorderColor #94a2b0
+ roundCorner 20
+ shadowing false
+}
+skinparam rectangle<> {
+ BackgroundColor #d4e8fc
FontColor #000000
- BorderColor #5d82a8
+ BorderColor #94a2b0
roundCorner 20
shadowing false
}
skinparam rectangle<