Outerfaces.Odd.Plugs.OddCDNRoflJSPlug (Outerfaces Dependency Distribution (ODD) v0.2.5)

View Source

Transforms JavaScript import/export statements by rewriting CDN and SPA tokens.

Supports both legacy and new token patterns:

  • [OUTERFACES_LOCAL_CDN] - DEPRECATED, aliased to [OUTERFACES_ODD_CDN]
  • [OUTERFACES_ODD_CDN] - Dual-mode: rev-pinned or absolute URLs
  • [OUTERFACES_ODD_SPA] - Always rev-pinned

Dual-mode behavior:

  • When conn.assigns.outerfaces_rev is present: rev-pinned URLs (/__rev/<rev>/cdn/...)
  • Otherwise: absolute URLs (http://localhost:60032/...)

Summary

Functions

normalize_newlines(content)

@spec normalize_newlines(String.t()) :: String.t()

replace_cdn_exports(file_body, cdn_protocol, cdn_host, cdn_port)

@spec replace_cdn_exports(
  file_body :: String.t(),
  cdn_protocol :: String.t(),
  cdn_host :: String.t(),
  cdn_port :: integer()
) :: String.t()

replace_cdn_exports_with_base_url(file_body, cdn_base_url)

@spec replace_cdn_exports_with_base_url(
  file_body :: String.t(),
  cdn_base_url :: String.t()
) ::
  String.t()

replace_cdn_imports(file_body, cdn_protocol, cdn_host, cdn_port)

@spec replace_cdn_imports(
  file_body :: String.t(),
  cdn_protocol :: String.t(),
  cdn_host :: String.t(),
  cdn_port :: integer()
) :: String.t()

replace_cdn_imports_with_base_url(file_body, cdn_base_url)

@spec replace_cdn_imports_with_base_url(
  file_body :: String.t(),
  cdn_base_url :: String.t()
) ::
  String.t()

transform_javascript_cdn_imports_and_exports(file_content, cdn_service_host_name, cdn_service_host_port, url_scheme)

@spec transform_javascript_cdn_imports_and_exports(
  file_content :: String.t(),
  cdn_service_host_name :: String.t(),
  cdn_service_host_port :: integer(),
  url_scheme :: String.t()
) :: String.t()

transform_javascript_cdn_imports_and_exports_with_base_url(file_content, cdn_base_url)

@spec transform_javascript_cdn_imports_and_exports_with_base_url(
  file_content :: String.t(),
  cdn_base_url :: String.t()
) :: String.t()

transform_javascript_with_conn(file_content, conn, cdn_origin)

@spec transform_javascript_with_conn(String.t(), Plug.Conn.t(), String.t()) ::
  String.t()

Transforms JavaScript imports/exports with rev-pinned URLs.

This function always emits rev-pinned URLs in the canonical format:

  • CDN: <cdn_origin>/__rev/<rev>/cdn/<path>
  • SPA: /__rev/<rev>/spa/<path>

Parameters

  • file_content - JavaScript file content
  • conn - Plug.Conn struct (used to get rev)
  • cdn_origin - Origin for CDN assets:

Returns

Transformed JavaScript content with all tokens replaced

Examples

# Unified proxy mode (cdn_origin = "")
transform_javascript_with_conn(content, conn, "")
# Emits: /__rev/abc123/cdn/foo.js

# Direct CDN mode (cdn_origin = "http://localhost:60032")
transform_javascript_with_conn(content, conn, "http://localhost:60032")
# Emits: http://localhost:60032/__rev/abc123/cdn/foo.js