Rename all 1,169 components to path-based names with namespace support
Component names now reflect filesystem location using / as path separator and : as namespace separator for shared components: ~sx-header → ~layouts/header ~layout-app-body → ~shared:layout/app-body ~blog-admin-dashboard → ~admin/dashboard 209 files, 4,941 replacements across all services. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
:path "/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/" (~sx-home-content)))
|
||||
:content (~layouts/doc :path "/" (~docs-content/home-content)))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Language section (parent of Docs, Specs, Bootstrappers, Testing)
|
||||
@@ -21,7 +21,7 @@
|
||||
:path "/language/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(language)"))
|
||||
:content (~layouts/doc :path "/sx/(language)"))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Docs section (under Language)
|
||||
@@ -31,24 +31,24 @@
|
||||
:path "/language/docs/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(language.(doc))" (~docs-introduction-content)))
|
||||
:content (~layouts/doc :path "/sx/(language.(doc))" (~docs-content/docs-introduction-content)))
|
||||
|
||||
(defpage docs-page
|
||||
:path "/language/docs/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path (str "/sx/(language.(doc." slug "))")
|
||||
:content (~layouts/doc :path (str "/sx/(language.(doc." slug "))")
|
||||
(case slug
|
||||
"introduction" (~docs-introduction-content)
|
||||
"getting-started" (~docs-getting-started-content)
|
||||
"components" (~docs-components-content)
|
||||
"evaluator" (~docs-evaluator-content)
|
||||
"primitives" (~docs-primitives-content
|
||||
:prims (~doc-primitives-tables :primitives (primitives-data)))
|
||||
"special-forms" (~docs-special-forms-content
|
||||
:forms (~doc-special-forms-tables :forms (special-forms-data)))
|
||||
"server-rendering" (~docs-server-rendering-content)
|
||||
:else (~docs-introduction-content))))
|
||||
"introduction" (~docs-content/docs-introduction-content)
|
||||
"getting-started" (~docs-content/docs-getting-started-content)
|
||||
"components" (~docs-content/docs-components-content)
|
||||
"evaluator" (~docs-content/docs-evaluator-content)
|
||||
"primitives" (~docs-content/docs-primitives-content
|
||||
:prims (~docs/primitives-tables :primitives (primitives-data)))
|
||||
"special-forms" (~docs-content/docs-special-forms-content
|
||||
:forms (~docs/special-forms-tables :forms (special-forms-data)))
|
||||
"server-rendering" (~docs-content/docs-server-rendering-content)
|
||||
:else (~docs-content/docs-introduction-content))))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Reference section
|
||||
@@ -58,50 +58,50 @@
|
||||
:path "/geography/hypermedia/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(geography.(hypermedia))"))
|
||||
:content (~layouts/doc :path "/sx/(geography.(hypermedia))"))
|
||||
|
||||
(defpage reference-index
|
||||
:path "/geography/hypermedia/reference/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(geography.(hypermedia.(reference)))" (~reference-index-content)))
|
||||
:content (~layouts/doc :path "/sx/(geography.(hypermedia.(reference)))" (~examples/reference-index-content)))
|
||||
|
||||
(defpage reference-page
|
||||
:path "/geography/hypermedia/reference/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (reference-data slug)
|
||||
:content (~sx-doc :path (str "/sx/(geography.(hypermedia.(reference." slug ")))")
|
||||
:content (~layouts/doc :path (str "/sx/(geography.(hypermedia.(reference." slug ")))")
|
||||
(case slug
|
||||
"attributes" (~reference-attrs-content
|
||||
:req-table (~doc-attr-table-from-data :title "Request Attributes" :attrs req-attrs)
|
||||
:beh-table (~doc-attr-table-from-data :title "Behavior Attributes" :attrs beh-attrs)
|
||||
:uniq-table (~doc-attr-table-from-data :title "Unique to sx" :attrs uniq-attrs))
|
||||
"headers" (~reference-headers-content
|
||||
:req-table (~doc-headers-table-from-data :title "Request Headers" :headers req-headers)
|
||||
:resp-table (~doc-headers-table-from-data :title "Response Headers" :headers resp-headers))
|
||||
"events" (~reference-events-content
|
||||
:table (~doc-two-col-table-from-data
|
||||
"attributes" (~reference/attrs-content
|
||||
:req-table (~docs/attr-table-from-data :title "Request Attributes" :attrs req-attrs)
|
||||
:beh-table (~docs/attr-table-from-data :title "Behavior Attributes" :attrs beh-attrs)
|
||||
:uniq-table (~docs/attr-table-from-data :title "Unique to sx" :attrs uniq-attrs))
|
||||
"headers" (~reference/headers-content
|
||||
:req-table (~docs/headers-table-from-data :title "Request Headers" :headers req-headers)
|
||||
:resp-table (~docs/headers-table-from-data :title "Response Headers" :headers resp-headers))
|
||||
"events" (~reference/events-content
|
||||
:table (~docs/two-col-table-from-data
|
||||
:intro "sx fires custom DOM events at various points in the request lifecycle."
|
||||
:col1 "Event" :col2 "Description" :items events-list))
|
||||
"js-api" (~reference-js-api-content
|
||||
:table (~doc-two-col-table-from-data
|
||||
"js-api" (~reference/js-api-content
|
||||
:table (~docs/two-col-table-from-data
|
||||
:intro "The client-side sx.js library exposes a public API for programmatic use."
|
||||
:col1 "Method" :col2 "Description" :items js-api-list))
|
||||
:else (~reference-attrs-content
|
||||
:req-table (~doc-attr-table-from-data :title "Request Attributes" :attrs req-attrs)
|
||||
:beh-table (~doc-attr-table-from-data :title "Behavior Attributes" :attrs beh-attrs)
|
||||
:uniq-table (~doc-attr-table-from-data :title "Unique to sx" :attrs uniq-attrs)))))
|
||||
:else (~reference/attrs-content
|
||||
:req-table (~docs/attr-table-from-data :title "Request Attributes" :attrs req-attrs)
|
||||
:beh-table (~docs/attr-table-from-data :title "Behavior Attributes" :attrs beh-attrs)
|
||||
:uniq-table (~docs/attr-table-from-data :title "Unique to sx" :attrs uniq-attrs)))))
|
||||
|
||||
(defpage reference-attr-detail
|
||||
:path "/geography/hypermedia/reference/attributes/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (attr-detail-data slug)
|
||||
:content (~sx-doc :path (str "/sx/(geography.(hypermedia.(reference-detail.attributes." slug ")))")
|
||||
:content (~layouts/doc :path (str "/sx/(geography.(hypermedia.(reference-detail.attributes." slug ")))")
|
||||
(if attr-not-found
|
||||
(~reference-attr-not-found :slug slug)
|
||||
(~reference-attr-detail-content
|
||||
(~reference/attr-not-found :slug slug)
|
||||
(~reference/attr-detail-content
|
||||
:title attr-title
|
||||
:description attr-description
|
||||
:demo attr-demo
|
||||
@@ -114,10 +114,10 @@
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (header-detail-data slug)
|
||||
:content (~sx-doc :path (str "/sx/(geography.(hypermedia.(reference-detail.headers." slug ")))")
|
||||
:content (~layouts/doc :path (str "/sx/(geography.(hypermedia.(reference-detail.headers." slug ")))")
|
||||
(if header-not-found
|
||||
(~reference-attr-not-found :slug slug)
|
||||
(~reference-header-detail-content
|
||||
(~reference/attr-not-found :slug slug)
|
||||
(~reference/header-detail-content
|
||||
:title header-title
|
||||
:direction header-direction
|
||||
:description header-description
|
||||
@@ -129,10 +129,10 @@
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (event-detail-data slug)
|
||||
:content (~sx-doc :path (str "/sx/(geography.(hypermedia.(reference-detail.events." slug ")))")
|
||||
:content (~layouts/doc :path (str "/sx/(geography.(hypermedia.(reference-detail.events." slug ")))")
|
||||
(if event-not-found
|
||||
(~reference-attr-not-found :slug slug)
|
||||
(~reference-event-detail-content
|
||||
(~reference/attr-not-found :slug slug)
|
||||
(~reference/event-detail-content
|
||||
:title event-title
|
||||
:description event-description
|
||||
:example-code event-example
|
||||
@@ -146,7 +146,7 @@
|
||||
:path "/applications/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(applications)"))
|
||||
:content (~layouts/doc :path "/sx/(applications)"))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Protocols section (under Applications)
|
||||
@@ -156,21 +156,21 @@
|
||||
:path "/applications/protocols/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(applications.(protocol))" (~protocol-wire-format-content)))
|
||||
:content (~layouts/doc :path "/sx/(applications.(protocol))" (~protocols/wire-format-content)))
|
||||
|
||||
(defpage protocol-page
|
||||
:path "/applications/protocols/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path (str "/sx/(applications.(protocol." slug "))")
|
||||
:content (~layouts/doc :path (str "/sx/(applications.(protocol." slug "))")
|
||||
(case slug
|
||||
"wire-format" (~protocol-wire-format-content)
|
||||
"fragments" (~protocol-fragments-content)
|
||||
"resolver-io" (~protocol-resolver-io-content)
|
||||
"internal-services" (~protocol-internal-services-content)
|
||||
"activitypub" (~protocol-activitypub-content)
|
||||
"future" (~protocol-future-content)
|
||||
:else (~protocol-wire-format-content))))
|
||||
"wire-format" (~protocols/wire-format-content)
|
||||
"fragments" (~protocols/fragments-content)
|
||||
"resolver-io" (~protocols/resolver-io-content)
|
||||
"internal-services" (~protocols/internal-services-content)
|
||||
"activitypub" (~protocols/activitypub-content)
|
||||
"future" (~protocols/future-content)
|
||||
:else (~protocols/wire-format-content))))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Examples section
|
||||
@@ -180,42 +180,42 @@
|
||||
:path "/geography/hypermedia/examples/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(geography.(hypermedia.(example)))"))
|
||||
:content (~layouts/doc :path "/sx/(geography.(hypermedia.(example)))"))
|
||||
|
||||
(defpage examples-page
|
||||
:path "/geography/hypermedia/examples/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path (str "/sx/(geography.(hypermedia.(example." slug ")))")
|
||||
:content (~layouts/doc :path (str "/sx/(geography.(hypermedia.(example." slug ")))")
|
||||
(case slug
|
||||
"click-to-load" (~example-click-to-load)
|
||||
"form-submission" (~example-form-submission)
|
||||
"polling" (~example-polling)
|
||||
"delete-row" (~example-delete-row)
|
||||
"inline-edit" (~example-inline-edit)
|
||||
"oob-swaps" (~example-oob-swaps)
|
||||
"lazy-loading" (~example-lazy-loading)
|
||||
"infinite-scroll" (~example-infinite-scroll)
|
||||
"progress-bar" (~example-progress-bar)
|
||||
"active-search" (~example-active-search)
|
||||
"inline-validation" (~example-inline-validation)
|
||||
"value-select" (~example-value-select)
|
||||
"reset-on-submit" (~example-reset-on-submit)
|
||||
"edit-row" (~example-edit-row)
|
||||
"bulk-update" (~example-bulk-update)
|
||||
"swap-positions" (~example-swap-positions)
|
||||
"select-filter" (~example-select-filter)
|
||||
"tabs" (~example-tabs)
|
||||
"animations" (~example-animations)
|
||||
"dialogs" (~example-dialogs)
|
||||
"keyboard-shortcuts" (~example-keyboard-shortcuts)
|
||||
"put-patch" (~example-put-patch)
|
||||
"json-encoding" (~example-json-encoding)
|
||||
"vals-and-headers" (~example-vals-and-headers)
|
||||
"loading-states" (~example-loading-states)
|
||||
"sync-replace" (~example-sync-replace)
|
||||
"retry" (~example-retry)
|
||||
:else (~example-click-to-load))))
|
||||
"click-to-load" (~examples-content/example-click-to-load)
|
||||
"form-submission" (~examples-content/example-form-submission)
|
||||
"polling" (~examples-content/example-polling)
|
||||
"delete-row" (~examples-content/example-delete-row)
|
||||
"inline-edit" (~examples-content/example-inline-edit)
|
||||
"oob-swaps" (~examples-content/example-oob-swaps)
|
||||
"lazy-loading" (~examples-content/example-lazy-loading)
|
||||
"infinite-scroll" (~examples-content/example-infinite-scroll)
|
||||
"progress-bar" (~examples-content/example-progress-bar)
|
||||
"active-search" (~examples-content/example-active-search)
|
||||
"inline-validation" (~examples-content/example-inline-validation)
|
||||
"value-select" (~examples-content/example-value-select)
|
||||
"reset-on-submit" (~examples-content/example-reset-on-submit)
|
||||
"edit-row" (~examples-content/example-edit-row)
|
||||
"bulk-update" (~examples-content/example-bulk-update)
|
||||
"swap-positions" (~examples-content/example-swap-positions)
|
||||
"select-filter" (~examples-content/example-select-filter)
|
||||
"tabs" (~examples-content/example-tabs)
|
||||
"animations" (~examples-content/example-animations)
|
||||
"dialogs" (~examples-content/example-dialogs)
|
||||
"keyboard-shortcuts" (~examples-content/example-keyboard-shortcuts)
|
||||
"put-patch" (~examples-content/example-put-patch)
|
||||
"json-encoding" (~examples-content/example-json-encoding)
|
||||
"vals-and-headers" (~examples-content/example-vals-and-headers)
|
||||
"loading-states" (~examples-content/example-loading-states)
|
||||
"sync-replace" (~examples-content/example-sync-replace)
|
||||
"retry" (~examples-content/example-retry)
|
||||
:else (~examples-content/example-click-to-load))))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Etc section (parent of Essays, Philosophy, Plans)
|
||||
@@ -225,7 +225,7 @@
|
||||
:path "/etc/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(etc)"))
|
||||
:content (~layouts/doc :path "/sx/(etc)"))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Essays section (under Etc)
|
||||
@@ -235,33 +235,33 @@
|
||||
:path "/etc/essays/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(etc.(essay))" (~essays-index-content)))
|
||||
:content (~layouts/doc :path "/sx/(etc.(essay))" (~essays/index/essays-index-content)))
|
||||
|
||||
(defpage essay-page
|
||||
:path "/etc/essays/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path (str "/sx/(etc.(essay." slug "))")
|
||||
:content (~layouts/doc :path (str "/sx/(etc.(essay." slug "))")
|
||||
(case slug
|
||||
"sx-sucks" (~essay-sx-sucks)
|
||||
"why-sexps" (~essay-why-sexps)
|
||||
"htmx-react-hybrid" (~essay-htmx-react-hybrid)
|
||||
"on-demand-css" (~essay-on-demand-css)
|
||||
"client-reactivity" (~essay-client-reactivity)
|
||||
"sx-native" (~essay-sx-native)
|
||||
"tail-call-optimization" (~essay-tail-call-optimization)
|
||||
"continuations" (~essay-continuations)
|
||||
"reflexive-web" (~essay-reflexive-web)
|
||||
"server-architecture" (~essay-server-architecture)
|
||||
"separation-of-concerns" (~essay-separation-of-concerns)
|
||||
"sx-and-ai" (~essay-sx-and-ai)
|
||||
"no-alternative" (~essay-no-alternative)
|
||||
"zero-tooling" (~essay-zero-tooling)
|
||||
"react-is-hypermedia" (~essay-react-is-hypermedia)
|
||||
"hegelian-synthesis" (~essay-hegelian-synthesis)
|
||||
"the-art-chain" (~essay-the-art-chain)
|
||||
"self-defining-medium" (~essay-self-defining-medium)
|
||||
:else (~essays-index-content))))
|
||||
"sx-sucks" (~essays/sx-sucks/essay-sx-sucks)
|
||||
"why-sexps" (~essays/why-sexps/essay-why-sexps)
|
||||
"htmx-react-hybrid" (~essays/htmx-react-hybrid/essay-htmx-react-hybrid)
|
||||
"on-demand-css" (~essays/on-demand-css/essay-on-demand-css)
|
||||
"client-reactivity" (~essays/client-reactivity/essay-client-reactivity)
|
||||
"sx-native" (~essays/sx-native/essay-sx-native)
|
||||
"tail-call-optimization" (~essays/tail-call-optimization/essay-tail-call-optimization)
|
||||
"continuations" (~essays/continuations/essay-continuations)
|
||||
"reflexive-web" (~essays/reflexive-web/essay-reflexive-web)
|
||||
"server-architecture" (~essays/server-architecture/essay-server-architecture)
|
||||
"separation-of-concerns" (~essays/separation-of-concerns/essay-separation-of-concerns)
|
||||
"sx-and-ai" (~essays/sx-and-ai/essay-sx-and-ai)
|
||||
"no-alternative" (~essays/no-alternative/essay-no-alternative)
|
||||
"zero-tooling" (~essays/zero-tooling/essay-zero-tooling)
|
||||
"react-is-hypermedia" (~essays/react-is-hypermedia/essay-react-is-hypermedia)
|
||||
"hegelian-synthesis" (~essays/hegelian-synthesis/essay-hegelian-synthesis)
|
||||
"the-art-chain" (~essays/the-art-chain/essay-the-art-chain)
|
||||
"self-defining-medium" (~essays/self-defining-medium/essay-self-defining-medium)
|
||||
:else (~essays/index/essays-index-content))))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Philosophy section
|
||||
@@ -271,20 +271,20 @@
|
||||
:path "/etc/philosophy/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(etc.(philosophy))" (~philosophy-index-content)))
|
||||
:content (~layouts/doc :path "/sx/(etc.(philosophy))" (~essays/philosophy-index/content)))
|
||||
|
||||
(defpage philosophy-page
|
||||
:path "/etc/philosophy/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path (str "/sx/(etc.(philosophy." slug "))")
|
||||
:content (~layouts/doc :path (str "/sx/(etc.(philosophy." slug "))")
|
||||
(case slug
|
||||
"sx-manifesto" (~essay-sx-manifesto)
|
||||
"godel-escher-bach" (~essay-godel-escher-bach)
|
||||
"wittgenstein" (~essay-sx-and-wittgenstein)
|
||||
"dennett" (~essay-sx-and-dennett)
|
||||
"existentialism" (~essay-s-existentialism)
|
||||
:else (~philosophy-index-content))))
|
||||
"godel-escher-bach" (~essays/godel-escher-bach/essay-godel-escher-bach)
|
||||
"wittgenstein" (~essays/sx-and-wittgenstein/essay-sx-and-wittgenstein)
|
||||
"dennett" (~essays/sx-and-dennett/essay-sx-and-dennett)
|
||||
"existentialism" (~essays/s-existentialism/essay-s-existentialism)
|
||||
:else (~essays/philosophy-index/content))))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; CSSX section
|
||||
@@ -294,21 +294,21 @@
|
||||
:path "/applications/cssx/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(applications.(cssx))" (~cssx-overview-content)))
|
||||
:content (~layouts/doc :path "/sx/(applications.(cssx))" (~cssx/overview-content)))
|
||||
|
||||
(defpage cssx-page
|
||||
:path "/applications/cssx/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path (str "/sx/(applications.(cssx." slug "))")
|
||||
:content (~layouts/doc :path (str "/sx/(applications.(cssx." slug "))")
|
||||
(case slug
|
||||
"patterns" (~cssx-patterns-content)
|
||||
"delivery" (~cssx-delivery-content)
|
||||
"async" (~cssx-async-content)
|
||||
"live" (~cssx-live-content)
|
||||
"comparisons" (~cssx-comparison-content)
|
||||
"philosophy" (~cssx-philosophy-content)
|
||||
:else (~cssx-overview-content))))
|
||||
"patterns" (~cssx/patterns-content)
|
||||
"delivery" (~cssx/delivery-content)
|
||||
"async" (~cssx/async-content)
|
||||
"live" (~cssx/live-content)
|
||||
"comparisons" (~cssx/comparison-content)
|
||||
"philosophy" (~cssx/philosophy-content)
|
||||
:else (~cssx/overview-content))))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Specs section
|
||||
@@ -318,13 +318,13 @@
|
||||
:path "/language/specs/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(language.(spec))" (~spec-architecture-content)))
|
||||
:content (~layouts/doc :path "/sx/(language.(spec))" (~specs/architecture-content)))
|
||||
|
||||
(defpage specs-page
|
||||
:path "/language/specs/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path (str "/sx/(language.(spec." slug "))")
|
||||
:content (~layouts/doc :path (str "/sx/(language.(spec." slug "))")
|
||||
(let ((make-spec-files (fn (items)
|
||||
(map (fn (item)
|
||||
(dict :title (get item "title") :desc (get item "desc")
|
||||
@@ -333,33 +333,33 @@
|
||||
:source (read-spec-file (get item "filename"))))
|
||||
items))))
|
||||
(case slug
|
||||
"core" (~spec-overview-content
|
||||
"core" (~specs/overview-content
|
||||
:spec-title "Core Language"
|
||||
:spec-files (make-spec-files core-spec-items))
|
||||
"adapters" (~spec-overview-content
|
||||
"adapters" (~specs/overview-content
|
||||
:spec-title "Adapters"
|
||||
:spec-files (make-spec-files adapter-spec-items))
|
||||
"browser" (~spec-overview-content
|
||||
"browser" (~specs/overview-content
|
||||
:spec-title "Browser Runtime"
|
||||
:spec-files (make-spec-files browser-spec-items))
|
||||
"reactive" (~spec-overview-content
|
||||
"reactive" (~specs/overview-content
|
||||
:spec-title "Reactive System"
|
||||
:spec-files (make-spec-files reactive-spec-items))
|
||||
"host" (~spec-overview-content
|
||||
"host" (~specs/overview-content
|
||||
:spec-title "Host Interface"
|
||||
:spec-files (make-spec-files host-spec-items))
|
||||
"extensions" (~spec-overview-content
|
||||
"extensions" (~specs/overview-content
|
||||
:spec-title "Extensions"
|
||||
:spec-files (make-spec-files extension-spec-items))
|
||||
:else (let ((spec (find-spec slug)))
|
||||
(if spec
|
||||
(~spec-detail-content
|
||||
(~specs/detail-content
|
||||
:spec-title (get spec "title")
|
||||
:spec-desc (get spec "desc")
|
||||
:spec-filename (get spec "filename")
|
||||
:spec-source (read-spec-file (get spec "filename"))
|
||||
:spec-prose (get spec "prose"))
|
||||
(~spec-not-found :slug slug)))))))
|
||||
(~specs/not-found :slug slug)))))))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Spec Explorer — structured interactive view of spec files
|
||||
@@ -369,7 +369,7 @@
|
||||
:path "/language/specs/explore/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path (str "/sx/(language.(spec.(explore." slug ")))")
|
||||
:content (~layouts/doc :path (str "/sx/(language.(spec.(explore." slug ")))")
|
||||
(let ((spec (find-spec slug)))
|
||||
(if spec
|
||||
(let ((data (spec-explorer-data
|
||||
@@ -377,9 +377,9 @@
|
||||
(get spec "title")
|
||||
(get spec "desc"))))
|
||||
(if data
|
||||
(~spec-explorer-content :data data)
|
||||
(~spec-not-found :slug slug)))
|
||||
(~spec-not-found :slug slug)))))
|
||||
(~specs-explorer/spec-explorer-content :data data)
|
||||
(~specs/not-found :slug slug)))
|
||||
(~specs/not-found :slug slug)))))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Bootstrappers section
|
||||
@@ -389,19 +389,19 @@
|
||||
:path "/language/bootstrappers/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(language.(bootstrapper))" (~bootstrappers-index-content)))
|
||||
:content (~layouts/doc :path "/sx/(language.(bootstrapper))" (~specs/bootstrappers-index-content)))
|
||||
|
||||
(defpage bootstrapper-page
|
||||
:path "/language/bootstrappers/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (bootstrapper-data slug)
|
||||
:content (~sx-doc :path (str "/sx/(language.(bootstrapper." slug "))")
|
||||
:content (~layouts/doc :path (str "/sx/(language.(bootstrapper." slug "))")
|
||||
(if bootstrapper-not-found
|
||||
(~spec-not-found :slug slug)
|
||||
(~specs/not-found :slug slug)
|
||||
(case slug
|
||||
"self-hosting"
|
||||
(~bootstrapper-self-hosting-content
|
||||
(~specs/bootstrapper-self-hosting-content
|
||||
:py-sx-source py-sx-source
|
||||
:g0-output g0-output
|
||||
:g1-output g1-output
|
||||
@@ -411,18 +411,18 @@
|
||||
:g0-bytes g0-bytes
|
||||
:verification-status verification-status)
|
||||
"self-hosting-js"
|
||||
(~bootstrapper-self-hosting-js-content
|
||||
(~specs/bootstrapper-self-hosting-js-content
|
||||
:js-sx-source js-sx-source
|
||||
:defines-matched defines-matched
|
||||
:defines-total defines-total
|
||||
:js-sx-lines js-sx-lines
|
||||
:verification-status verification-status)
|
||||
"python"
|
||||
(~bootstrapper-py-content
|
||||
(~specs/bootstrapper-py-content
|
||||
:bootstrapper-source bootstrapper-source
|
||||
:bootstrapped-output bootstrapped-output)
|
||||
:else
|
||||
(~bootstrapper-js-content
|
||||
(~specs/bootstrapper-js-content
|
||||
:bootstrapper-source bootstrapper-source
|
||||
:bootstrapped-output bootstrapped-output)))))
|
||||
|
||||
@@ -434,15 +434,15 @@
|
||||
:path "/geography/isomorphism/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(geography.(isomorphism))" (~plan-isomorphic-content)))
|
||||
:content (~layouts/doc :path "/sx/(geography.(isomorphism))" (~plans/isomorphic/plan-isomorphic-content)))
|
||||
|
||||
(defpage bundle-analyzer
|
||||
:path "/geography/isomorphism/bundle-analyzer"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (bundle-analyzer-data)
|
||||
:content (~sx-doc :path "/sx/(geography.(isomorphism.bundle-analyzer))"
|
||||
(~bundle-analyzer-content
|
||||
:content (~layouts/doc :path "/sx/(geography.(isomorphism.bundle-analyzer))"
|
||||
(~analyzer/bundle-analyzer-content
|
||||
:pages pages :total-components total-components :total-macros total-macros
|
||||
:pure-count pure-count :io-count io-count)))
|
||||
|
||||
@@ -451,8 +451,8 @@
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (routing-analyzer-data)
|
||||
:content (~sx-doc :path "/sx/(geography.(isomorphism.routing-analyzer))"
|
||||
(~routing-analyzer-content
|
||||
:content (~layouts/doc :path "/sx/(geography.(isomorphism.routing-analyzer))"
|
||||
(~routing-analyzer/content
|
||||
:pages pages :total-pages total-pages :client-count client-count
|
||||
:server-count server-count :registry-sample registry-sample)))
|
||||
|
||||
@@ -461,8 +461,8 @@
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (data-test-data)
|
||||
:content (~sx-doc :path "/sx/(geography.(isomorphism.data-test))"
|
||||
(~data-test-content
|
||||
:content (~layouts/doc :path "/sx/(geography.(isomorphism.data-test))"
|
||||
(~data-test/content
|
||||
:server-time server-time :items items
|
||||
:phase phase :transport transport)))
|
||||
|
||||
@@ -470,20 +470,20 @@
|
||||
:path "/geography/isomorphism/async-io"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(geography.(isomorphism.async-io))" (~async-io-demo-content)))
|
||||
:content (~layouts/doc :path "/sx/(geography.(isomorphism.async-io))" (~async-io-demo/content)))
|
||||
|
||||
(defpage streaming-demo
|
||||
:path "/geography/isomorphism/streaming"
|
||||
:auth :public
|
||||
:stream true
|
||||
:layout :sx-docs
|
||||
:shell (~sx-doc :path "/sx/(geography.(isomorphism.streaming))"
|
||||
(~streaming-demo-layout
|
||||
(~suspense :id "stream-fast" :fallback (~stream-skeleton))
|
||||
(~suspense :id "stream-medium" :fallback (~stream-skeleton))
|
||||
(~suspense :id "stream-slow" :fallback (~stream-skeleton))))
|
||||
:shell (~layouts/doc :path "/sx/(geography.(isomorphism.streaming))"
|
||||
(~streaming-demo/layout
|
||||
(~shared:pages/suspense :id "stream-fast" :fallback (~streaming-demo/stream-skeleton))
|
||||
(~shared:pages/suspense :id "stream-medium" :fallback (~streaming-demo/stream-skeleton))
|
||||
(~shared:pages/suspense :id "stream-slow" :fallback (~streaming-demo/stream-skeleton))))
|
||||
:data (streaming-demo-data)
|
||||
:content (~streaming-demo-chunk
|
||||
:content (~streaming-demo/chunk
|
||||
:stream-label stream-label
|
||||
:stream-color stream-color
|
||||
:stream-message stream-message
|
||||
@@ -494,39 +494,39 @@
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (affinity-demo-data)
|
||||
:content (~sx-doc :path "/sx/(geography.(isomorphism.affinity))"
|
||||
(~affinity-demo-content :components components :page-plans page-plans)))
|
||||
:content (~layouts/doc :path "/sx/(geography.(isomorphism.affinity))"
|
||||
(~affinity-demo/content :components components :page-plans page-plans)))
|
||||
|
||||
(defpage optimistic-demo
|
||||
:path "/geography/isomorphism/optimistic"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (optimistic-demo-data)
|
||||
:content (~sx-doc :path "/sx/(geography.(isomorphism.optimistic))"
|
||||
(~optimistic-demo-content :items items :server-time server-time)))
|
||||
:content (~layouts/doc :path "/sx/(geography.(isomorphism.optimistic))"
|
||||
(~optimistic-demo/content :items items :server-time server-time)))
|
||||
|
||||
(defpage offline-demo
|
||||
:path "/geography/isomorphism/offline"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (offline-demo-data)
|
||||
:content (~sx-doc :path "/sx/(geography.(isomorphism.offline))"
|
||||
(~offline-demo-content :notes notes :server-time server-time)))
|
||||
:content (~layouts/doc :path "/sx/(geography.(isomorphism.offline))"
|
||||
(~offline-demo/content :notes notes :server-time server-time)))
|
||||
|
||||
;; Wildcard must come AFTER specific routes (first-match routing)
|
||||
(defpage isomorphism-page
|
||||
:path "/geography/isomorphism/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path (str "/sx/(geography.(isomorphism." slug "))")
|
||||
:content (~layouts/doc :path (str "/sx/(geography.(isomorphism." slug "))")
|
||||
(case slug
|
||||
"bundle-analyzer" (~bundle-analyzer-content
|
||||
"bundle-analyzer" (~analyzer/bundle-analyzer-content
|
||||
:pages pages :total-components total-components :total-macros total-macros
|
||||
:pure-count pure-count :io-count io-count)
|
||||
"routing-analyzer" (~routing-analyzer-content
|
||||
"routing-analyzer" (~routing-analyzer/content
|
||||
:pages pages :total-pages total-pages :client-count client-count
|
||||
:server-count server-count :registry-sample registry-sample)
|
||||
:else (~plan-isomorphic-content))))
|
||||
:else (~plans/isomorphic/plan-isomorphic-content))))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Plans section
|
||||
@@ -536,7 +536,7 @@
|
||||
:path "/etc/plans/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(etc.(plan))" (~plans-index-content)))
|
||||
:content (~layouts/doc :path "/sx/(etc.(plan))" (~plans/index/plans-index-content)))
|
||||
|
||||
(defpage plan-page
|
||||
:path "/etc/plans/<slug>"
|
||||
@@ -545,38 +545,38 @@
|
||||
:data (case slug
|
||||
"theorem-prover" (prove-data)
|
||||
:else nil)
|
||||
:content (~sx-doc :path (str "/sx/(etc.(plan." slug "))")
|
||||
:content (~layouts/doc :path (str "/sx/(etc.(plan." slug "))")
|
||||
(case slug
|
||||
"status" (~plan-status-content)
|
||||
"reader-macros" (~plan-reader-macros-content)
|
||||
"reader-macro-demo" (~plan-reader-macro-demo-content)
|
||||
"theorem-prover" (~plan-theorem-prover-content)
|
||||
"self-hosting-bootstrapper" (~plan-self-hosting-bootstrapper-content)
|
||||
"js-bootstrapper" (~plan-js-bootstrapper-content)
|
||||
"sx-activity" (~plan-sx-activity-content)
|
||||
"predictive-prefetch" (~plan-predictive-prefetch-content)
|
||||
"content-addressed-components" (~plan-content-addressed-components-content)
|
||||
"environment-images" (~plan-environment-images-content)
|
||||
"runtime-slicing" (~plan-runtime-slicing-content)
|
||||
"typed-sx" (~plan-typed-sx-content)
|
||||
"nav-redesign" (~plan-nav-redesign-content)
|
||||
"fragment-protocol" (~plan-fragment-protocol-content)
|
||||
"glue-decoupling" (~plan-glue-decoupling-content)
|
||||
"social-sharing" (~plan-social-sharing-content)
|
||||
"sx-ci" (~plan-sx-ci-content)
|
||||
"live-streaming" (~plan-live-streaming-content)
|
||||
"sx-web-platform" (~plan-sx-web-platform-content)
|
||||
"sx-forge" (~plan-sx-forge-content)
|
||||
"sx-swarm" (~plan-sx-swarm-content)
|
||||
"sx-proxy" (~plan-sx-proxy-content)
|
||||
"async-eval-convergence" (~plan-async-eval-convergence-content)
|
||||
"wasm-bytecode-vm" (~plan-wasm-bytecode-vm-content)
|
||||
"generative-sx" (~plan-generative-sx-content)
|
||||
"art-dag-sx" (~plan-art-dag-sx-content)
|
||||
"spec-explorer" (~plan-spec-explorer-content)
|
||||
"sx-urls" (~plan-sx-urls-content)
|
||||
"sx-protocol" (~plan-sx-protocol-content)
|
||||
:else (~plans-index-content))))
|
||||
"status" (~plans/status/plan-status-content)
|
||||
"reader-macros" (~plans/reader-macros/plan-reader-macros-content)
|
||||
"reader-macro-demo" (~plans/reader-macro-demo/plan-reader-macro-demo-content)
|
||||
"theorem-prover" (~plans/theorem-prover/plan-theorem-prover-content)
|
||||
"self-hosting-bootstrapper" (~plans/self-hosting-bootstrapper/plan-self-hosting-bootstrapper-content)
|
||||
"js-bootstrapper" (~plans/js-bootstrapper/plan-js-bootstrapper-content)
|
||||
"sx-activity" (~plans/sx-activity/plan-sx-activity-content)
|
||||
"predictive-prefetch" (~plans/predictive-prefetch/plan-predictive-prefetch-content)
|
||||
"content-addressed-components" (~plans/content-addressed-components/plan-content-addressed-components-content)
|
||||
"environment-images" (~plans/environment-images/plan-environment-images-content)
|
||||
"runtime-slicing" (~plans/runtime-slicing/plan-runtime-slicing-content)
|
||||
"typed-sx" (~plans/typed-sx/plan-typed-sx-content)
|
||||
"nav-redesign" (~plans/nav-redesign/plan-nav-redesign-content)
|
||||
"fragment-protocol" (~plans/fragment-protocol/plan-fragment-protocol-content)
|
||||
"glue-decoupling" (~plans/glue-decoupling/plan-glue-decoupling-content)
|
||||
"social-sharing" (~plans/social-sharing/plan-social-sharing-content)
|
||||
"sx-ci" (~plans/sx-ci/plan-sx-ci-content)
|
||||
"live-streaming" (~plans/live-streaming/plan-live-streaming-content)
|
||||
"sx-web-platform" (~plans/sx-web-platform/plan-sx-web-platform-content)
|
||||
"sx-forge" (~plans/sx-forge/plan-sx-forge-content)
|
||||
"sx-swarm" (~plans/sx-swarm/plan-sx-swarm-content)
|
||||
"sx-proxy" (~plans/sx-proxy/plan-sx-proxy-content)
|
||||
"async-eval-convergence" (~plans/async-eval-convergence/plan-async-eval-convergence-content)
|
||||
"wasm-bytecode-vm" (~plans/wasm-bytecode-vm/plan-wasm-bytecode-vm-content)
|
||||
"generative-sx" (~plans/generative-sx/plan-generative-sx-content)
|
||||
"art-dag-sx" (~plans/art-dag-sx/plan-art-dag-sx-content)
|
||||
"spec-explorer" (~plans/spec-explorer/plan-spec-explorer-content)
|
||||
"sx-urls" (~plans/sx-urls/plan-sx-urls-content)
|
||||
"sx-protocol" (~plans/sx-protocol/plan-sx-protocol-content)
|
||||
:else (~plans/index/plans-index-content))))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Geography section (parent of Reactive Islands, Hypermedia Lakes, Marshes)
|
||||
@@ -586,7 +586,7 @@
|
||||
:path "/geography/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(geography)"))
|
||||
:content (~layouts/doc :path "/sx/(geography)"))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Reactive Islands section (under Geography)
|
||||
@@ -596,20 +596,20 @@
|
||||
:path "/geography/reactive/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(geography.(reactive))" (~reactive-islands-index-content)))
|
||||
:content (~layouts/doc :path "/sx/(geography.(reactive))" (~reactive-islands/index/reactive-islands-index-content)))
|
||||
|
||||
(defpage reactive-islands-page
|
||||
:path "/geography/reactive/<slug>"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path (str "/sx/(geography.(reactive." slug "))")
|
||||
:content (~layouts/doc :path (str "/sx/(geography.(reactive." slug "))")
|
||||
(case slug
|
||||
"demo" (~reactive-islands-demo-content)
|
||||
"event-bridge" (~reactive-islands-event-bridge-content)
|
||||
"named-stores" (~reactive-islands-named-stores-content)
|
||||
"plan" (~reactive-islands-plan-content)
|
||||
"phase2" (~reactive-islands-phase2-content)
|
||||
:else (~reactive-islands-index-content))))
|
||||
"demo" (~reactive-islands/demo/reactive-islands-demo-content)
|
||||
"event-bridge" (~reactive-islands/event-bridge/reactive-islands-event-bridge-content)
|
||||
"named-stores" (~reactive-islands/named-stores/reactive-islands-named-stores-content)
|
||||
"plan" (~reactive-islands/plan/reactive-islands-plan-content)
|
||||
"phase2" (~reactive-islands/phase2/reactive-islands-phase2-content)
|
||||
:else (~reactive-islands/index/reactive-islands-index-content))))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Marshes section (under Geography)
|
||||
@@ -619,7 +619,7 @@
|
||||
:path "/geography/marshes/"
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:content (~sx-doc :path "/sx/(geography.(marshes))" (~reactive-islands-marshes-content)))
|
||||
:content (~layouts/doc :path "/sx/(geography.(marshes))" (~reactive-islands/marshes/reactive-islands-marshes-content)))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Bootstrapped page helpers demo
|
||||
@@ -630,8 +630,8 @@
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (page-helpers-demo-data)
|
||||
:content (~sx-doc :path "/sx/(language.(bootstrapper.page-helpers))"
|
||||
(~page-helpers-demo-content
|
||||
:content (~layouts/doc :path "/sx/(language.(bootstrapper.page-helpers))"
|
||||
(~page-helpers-demo/content
|
||||
:sf-categories sf-categories :sf-total sf-total :sf-ms sf-ms
|
||||
:ref-sample ref-sample :ref-ms ref-ms
|
||||
:attr-result attr-result :attr-ms attr-ms
|
||||
@@ -652,8 +652,8 @@
|
||||
:auth :public
|
||||
:layout :sx-docs
|
||||
:data (run-modular-tests "all")
|
||||
:content (~sx-doc :path "/sx/(language.(test))"
|
||||
(~testing-overview-content
|
||||
:content (~layouts/doc :path "/sx/(language.(test))"
|
||||
(~testing/overview-content
|
||||
:server-results server-results
|
||||
:framework-source framework-source
|
||||
:eval-source eval-source
|
||||
@@ -676,57 +676,57 @@
|
||||
"engine" (run-modular-tests "engine")
|
||||
"orchestration" (run-modular-tests "orchestration")
|
||||
:else (dict))
|
||||
:content (~sx-doc :path (str "/sx/(language.(test." slug "))")
|
||||
:content (~layouts/doc :path (str "/sx/(language.(test." slug "))")
|
||||
(case slug
|
||||
"eval" (~testing-spec-content
|
||||
"eval" (~testing/spec-content
|
||||
:spec-name "eval"
|
||||
:spec-title "Evaluator Tests"
|
||||
:spec-desc "81 tests covering the core evaluator and all primitives — literals, arithmetic, comparison, strings, lists, dicts, predicates, special forms, lambdas, higher-order functions, components, macros, threading, and edge cases."
|
||||
:spec-source spec-source
|
||||
:framework-source framework-source
|
||||
:server-results server-results)
|
||||
"parser" (~testing-spec-content
|
||||
"parser" (~testing/spec-content
|
||||
:spec-name "parser"
|
||||
:spec-title "Parser Tests"
|
||||
:spec-desc "39 tests covering tokenization and parsing — integers, floats, strings, escape sequences, booleans, nil, keywords, symbols, lists, dicts, whitespace, comments, quote sugar, serialization, and round-trips."
|
||||
:spec-source spec-source
|
||||
:framework-source framework-source
|
||||
:server-results server-results)
|
||||
"router" (~testing-spec-content
|
||||
"router" (~testing/spec-content
|
||||
:spec-name "router"
|
||||
:spec-title "Router Tests"
|
||||
:spec-desc "18 tests covering client-side route matching — path splitting, pattern parsing, segment matching, parameter extraction, and route table search."
|
||||
:spec-source spec-source
|
||||
:framework-source framework-source
|
||||
:server-results server-results)
|
||||
"render" (~testing-spec-content
|
||||
"render" (~testing/spec-content
|
||||
:spec-name "render"
|
||||
:spec-title "Renderer Tests"
|
||||
:spec-desc "23 tests covering HTML rendering — elements, attributes, void elements, boolean attributes, fragments, escaping, control flow, and component rendering."
|
||||
:spec-source spec-source
|
||||
:framework-source framework-source
|
||||
:server-results server-results)
|
||||
"deps" (~testing-spec-content
|
||||
"deps" (~testing/spec-content
|
||||
:spec-name "deps"
|
||||
:spec-title "Dependency Analysis Tests"
|
||||
:spec-desc "33 tests covering component dependency analysis — scan-refs, scan-components-from-source, transitive-deps, components-needed, scan-io-refs, and component-pure? classification."
|
||||
:spec-source spec-source
|
||||
:framework-source framework-source
|
||||
:server-results server-results)
|
||||
"engine" (~testing-spec-content
|
||||
"engine" (~testing/spec-content
|
||||
:spec-name "engine"
|
||||
:spec-title "Engine Tests"
|
||||
:spec-desc "37 tests covering engine pure functions — parse-time, parse-trigger-spec, default-trigger, parse-swap-spec, parse-retry-spec, next-retry-ms, and filter-params."
|
||||
:spec-source spec-source
|
||||
:framework-source framework-source
|
||||
:server-results server-results)
|
||||
"orchestration" (~testing-spec-content
|
||||
"orchestration" (~testing/spec-content
|
||||
:spec-name "orchestration"
|
||||
:spec-title "Orchestration Tests"
|
||||
:spec-desc "17 tests covering Phase 7c+7d orchestration — page data cache, optimistic cache update/revert/confirm, offline connectivity, offline queue mutation, and offline-aware routing."
|
||||
:spec-source spec-source
|
||||
:framework-source framework-source
|
||||
:server-results server-results)
|
||||
"runners" (~testing-runners-content)
|
||||
:else (~testing-overview-content
|
||||
"runners" (~testing/runners-content)
|
||||
:else (~testing/overview-content
|
||||
:server-results server-results))))
|
||||
|
||||
@@ -1372,7 +1372,7 @@ def _data_test_data() -> dict:
|
||||
async def _streaming_demo_data():
|
||||
"""Multi-stream demo — yields three chunks at staggered intervals.
|
||||
|
||||
Each yield is a dict with _stream_id (matching a ~suspense :id in the
|
||||
Each yield is a dict with _stream_id (matching a ~shared:pages/suspense :id in the
|
||||
shell) plus bindings for the :content expression. The streaming
|
||||
infrastructure detects the async generator and resolves each suspense
|
||||
placeholder as each chunk arrives.
|
||||
@@ -1418,8 +1418,8 @@ def _affinity_demo_data() -> dict:
|
||||
# I/O edge: extract component data and page render plans
|
||||
env = get_component_env()
|
||||
demo_names = [
|
||||
"~aff-demo-auto", "~aff-demo-client", "~aff-demo-server",
|
||||
"~aff-demo-io-auto", "~aff-demo-io-client",
|
||||
"~affinity-demo/aff-demo-auto", "~affinity-demo/aff-demo-client", "~affinity-demo/aff-demo-server",
|
||||
"~affinity-demo/aff-demo-io-auto", "~affinity-demo/aff-demo-io-client",
|
||||
]
|
||||
components = []
|
||||
for name in demo_names:
|
||||
|
||||
@@ -5,7 +5,7 @@ Handles URLs like /(language.(doc.introduction)) by:
|
||||
2. Parsing the path as an SX expression
|
||||
3. Auto-quoting unknown symbols to strings (slugs)
|
||||
4. Evaluating the expression against page functions
|
||||
5. Wrapping the result in (~sx-doc :path "..." content)
|
||||
5. Wrapping the result in (~layouts/doc :path "..." content)
|
||||
6. Returning full page or OOB response
|
||||
|
||||
Special cases:
|
||||
@@ -217,7 +217,7 @@ async def eval_sx_url(raw_path: str) -> Any:
|
||||
# Nav hrefs use /sx/ prefix — reconstruct the full path for nav matching
|
||||
path_str = f"/sx{raw_path}" if raw_path != "/" else "/sx/"
|
||||
|
||||
# Check if expression head is a component (~name) — if so, skip
|
||||
# Check if expression head is a component (~plans/content-addressed-components/name) — if so, skip
|
||||
# async_eval and pass directly to _eval_slot. Components contain HTML
|
||||
# tags that only the aser path can handle, not eval_expr.
|
||||
head = quoted_expr[0] if isinstance(quoted_expr, list) and quoted_expr else None
|
||||
@@ -227,7 +227,7 @@ async def eval_sx_url(raw_path: str) -> Any:
|
||||
)
|
||||
|
||||
if is_component_call:
|
||||
# Direct component URL: /(~essay-sx-sucks) or /(~comp :key val)
|
||||
# Direct component URL: /(~essays/sx-sucks/essay-sx-sucks) or /(~comp :key val)
|
||||
# Pass straight to _eval_slot — aser handles component expansion.
|
||||
page_ast = quoted_expr
|
||||
else:
|
||||
@@ -237,7 +237,7 @@ async def eval_sx_url(raw_path: str) -> Any:
|
||||
# [Symbol("~docs-intro-content")] or quasiquoted trees with data).
|
||||
# This phase resolves routing + fetches data, but does NOT expand
|
||||
# components or handle HTML tags (eval_expr can't do that).
|
||||
# Phase 2: Wrap the returned AST in (~sx-doc :path "..." <ast>) and
|
||||
# Phase 2: Wrap the returned AST in (~layouts/doc :path "..." <ast>) and
|
||||
# pass to _eval_slot (aser), which expands components and handles
|
||||
# HTML tags correctly.
|
||||
import os
|
||||
@@ -257,7 +257,7 @@ async def eval_sx_url(raw_path: str) -> Any:
|
||||
page_ast = [] # empty content for sections with no index
|
||||
|
||||
wrapped_ast = [
|
||||
Symbol("~sx-doc"), Keyword("path"), path_str,
|
||||
Symbol("~layouts/doc"), Keyword("path"), path_str,
|
||||
page_ast,
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user