Full build functionality is obsolete now as workers run single-page mode renders. Remove some unused paths.

This commit is contained in:
Dillon Kearns 2021-07-07 21:13:17 -07:00
parent 30d92da3f7
commit ffb9484332
6 changed files with 25 additions and 205 deletions

View File

@ -22,6 +22,15 @@ async function tryMkdir(dirName) {
}
}
/**
* @param {string} filePath
* @param {string} data
*/
function writeFileSyncSafe(filePath, data) {
fsSync.mkdirSync(path.dirname(filePath), { recursive: true });
fs.writeFileSync(filePath, data);
}
const path = require("path");
/**
@ -67,6 +76,7 @@ module.exports = {
readFileSync: fsSync.readFileSync,
copyFile: fs.copyFile,
exists: fs.exists,
writeFileSyncSafe,
tryMkdir,
copyDirFlat,
copyDirNested,

View File

@ -69,7 +69,7 @@ async function outputString(
case "api-response": {
const body = fromElm.body;
console.log(`Generated ${pathname}`);
fs.writeFileSync(path.join("dist", pathname), body);
fs.writeFileSyncSafe(path.join("dist", pathname), body);
if (pathname === "/all-paths.json") {
parentPort.postMessage(body);
} else {

View File

@ -75,10 +75,6 @@ function runElmApp(elmModule, pagePath, request, addDataSourceWatcher) {
async function portHandler(/** @type { FromElm } */ fromElm) {
if (fromElm.command === "log") {
console.log(fromElm.value);
} else if (fromElm.tag === "InitialData") {
const args = fromElm.args[0];
// console.log(`InitialData`, args);
writeGeneratedFiles(args.filesToGenerate);
} else if (fromElm.tag === "ApiResponse") {
const args = fromElm.args[0];
global.staticHttpCache = args.staticHttpCache;

View File

@ -89,7 +89,7 @@ cliApplication config =
renderRequest : RenderRequest (Maybe route)
renderRequest =
Decode.decodeValue (RenderRequest.decoder config) flags
|> Result.withDefault RenderRequest.FullBuild
|> Result.withDefault RenderRequest.default
in
init renderRequest contentCache config flags
|> Tuple.mapSecond (perform renderRequest config config.toJsPort)
@ -409,9 +409,6 @@ initLegacy renderRequest { secrets, mode, staticHttpCache } contentCache config
StaticResponses.renderApiRequest
(DataSource.succeed [])
RenderRequest.FullBuild ->
StaticResponses.init config
unprocessedPages : List ( Path, route )
unprocessedPages =
case renderRequest of
@ -426,9 +423,6 @@ initLegacy renderRequest { secrets, mode, staticHttpCache } contentCache config
RenderRequest.NotFound path ->
[]
RenderRequest.FullBuild ->
[]
unprocessedPagesState : Maybe (List ( Path, route ))
unprocessedPagesState =
case renderRequest of
@ -443,9 +437,6 @@ initLegacy renderRequest { secrets, mode, staticHttpCache } contentCache config
RenderRequest.NotFound path ->
Just []
RenderRequest.FullBuild ->
Nothing
initialModel : Model route
initialModel =
{ staticResponses = staticResponses
@ -769,35 +760,6 @@ nextStepToEffect contentCache config model ( updatedStaticResponsesModel, nextSt
StaticResponses.Finish toJsPayload ->
case model.mode of
Mode.ElmToHtmlBeta ->
let
sendManifestIfNeeded : Effect
sendManifestIfNeeded =
if
List.length model.unprocessedPages
== (model.staticRoutes
|> Maybe.map List.length
|> Maybe.withDefault -1
)
&& model.maybeRequestJson
== RenderRequest.FullBuild
then
case toJsPayload of
ToJsPayload.Success value ->
Effect.SendSinglePage True
(ToJsPayload.InitialData
{ filesToGenerate = value.filesToGenerate
}
)
ToJsPayload.Errors _ ->
Effect.SendJsData toJsPayload
ToJsPayload.ApiResponse ->
Effect.NoEffect
else
Effect.NoEffect
in
case toJsPayload of
ToJsPayload.ApiResponse ->
let
@ -971,9 +933,6 @@ nextStepToEffect contentCache config model ( updatedStaticResponsesModel, nextSt
RenderRequest.NotFound path ->
render404Page config model path NotFoundReason.NoMatchingRoute
RenderRequest.FullBuild ->
[] |> ToJsPayload.Errors |> Effect.SendJsData
in
( { model | staticRoutes = Just [] }
, apiResponse
@ -998,10 +957,7 @@ nextStepToEffect contentCache config model ( updatedStaticResponsesModel, nextSt
|> (\cmds ->
( model
|> popProcessedRequest
, Effect.Batch
(sendManifestIfNeeded
:: cmds
)
, Effect.Batch cmds
)
)
@ -1142,104 +1098,6 @@ sendSinglePageProgress toJsPayload config model =
|> ToJsPayload.Errors
|> Effect.SendJsData
RenderRequest.FullBuild ->
let
staticData : Dict String String
staticData =
toJsPayload.pages
|> Dict.get (Path.toRelative page)
|> Maybe.withDefault Dict.empty
currentPage : { path : Path, frontmatter : route }
currentPage =
{ path = page, frontmatter = config.urlToRoute currentUrl }
pageDataResult : Result BuildError pageData
pageDataResult =
StaticHttpRequest.resolve ApplicationType.Browser
(config.data (config.urlToRoute currentUrl))
(staticData |> Dict.map (\_ v -> Just v))
|> Result.mapError (StaticHttpRequest.toBuildError currentUrl.path)
sharedDataResult : Result BuildError sharedData
sharedDataResult =
StaticHttpRequest.resolve ApplicationType.Browser
config.sharedData
(staticData |> Dict.map (\_ v -> Just v))
|> Result.mapError (StaticHttpRequest.toBuildError currentUrl.path)
allRoutes : List route
allRoutes =
-- TODO
[]
currentUrl : { protocol : Url.Protocol, host : String, port_ : Maybe Int, path : String, query : Maybe String, fragment : Maybe String }
currentUrl =
{ protocol = Url.Https
, host = config.site allRoutes |> .canonicalUrl
, port_ = Nothing
, path = page |> Path.toRelative
, query = Nothing
, fragment = Nothing
}
siteDataResult : Result BuildError siteData
siteDataResult =
StaticHttpRequest.resolve ApplicationType.Cli
(config.site allRoutes |> .data)
(staticData |> Dict.map (\_ v -> Just v))
|> Result.mapError (StaticHttpRequest.toBuildError "Site.elm")
in
case Result.map3 (\a b c -> ( a, b, c )) sharedDataResult pageDataResult siteDataResult of
Ok ( sharedData, pageData, siteData ) ->
let
pageModel : userModel
pageModel =
config.init
Pages.Flags.PreRenderFlags
sharedData
pageData
Nothing
(Just
{ path =
{ path = currentPage.path
, query = Nothing
, fragment = Nothing
}
, metadata = currentPage.frontmatter
, pageUrl = Nothing
}
)
|> Tuple.first
viewValue : { title : String, body : Html userMsg }
viewValue =
(config.view currentPage Nothing sharedData pageData |> .view) pageModel
headTags : List Head.Tag
headTags =
(config.view currentPage Nothing sharedData pageData |> .head)
++ (siteData |> (config.site allRoutes |> .head))
in
{ route = page |> Path.toRelative
, contentJson =
toJsPayload.pages
|> Dict.get (Path.toRelative page)
|> Maybe.withDefault Dict.empty
, html = viewValue.body |> HtmlPrinter.htmlToString
, errors = []
, head = headTags
, title = viewValue.title
, staticHttpCache = model.allRawResponses |> Dict.Extra.filterMap (\_ v -> v)
, is404 = False
}
|> sendProgress
Err error ->
[ error ]
|> ToJsPayload.Errors
|> Effect.SendJsData
popProcessedRequest : Model route -> Model route
popProcessedRequest model =

View File

@ -1,6 +1,5 @@
module Pages.Internal.Platform.ToJsPayload exposing
( FileToGenerate
, InitialDataRecord
, ToJsPayload(..)
, ToJsSuccessPayload
, ToJsSuccessPayloadNew
@ -181,7 +180,6 @@ headCodec canonicalSiteUrl currentPagePath =
type ToJsSuccessPayloadNewCombined
= PageProgress ToJsSuccessPayloadNew
| InitialData InitialDataRecord
| SendApiResponse { body : String, staticHttpCache : Dict String String, statusCode : Int }
| ReadFile String
| Glob String
@ -189,22 +187,14 @@ type ToJsSuccessPayloadNewCombined
| Port String
type alias InitialDataRecord =
{ filesToGenerate : List FileToGenerate
}
successCodecNew2 : String -> String -> Codec ToJsSuccessPayloadNewCombined
successCodecNew2 canonicalSiteUrl currentPagePath =
Codec.custom
(\success initialData vReadFile vGlob vDoHttp vSendApiResponse vPort value ->
(\success vReadFile vGlob vDoHttp vSendApiResponse vPort value ->
case value of
PageProgress payload ->
success payload
InitialData payload ->
initialData payload
ReadFile filePath ->
vReadFile filePath
@ -221,7 +211,6 @@ successCodecNew2 canonicalSiteUrl currentPagePath =
vPort string
)
|> Codec.variant1 "PageProgress" PageProgress (successCodecNew canonicalSiteUrl currentPagePath)
|> Codec.variant1 "InitialData" InitialData initialDataCodec
|> Codec.variant1 "ReadFile" ReadFile Codec.string
|> Codec.variant1 "Glob" Glob Codec.string
|> Codec.variant1 "DoHttp"
@ -243,33 +232,3 @@ successCodecNew2 canonicalSiteUrl currentPagePath =
)
|> Codec.variant1 "Port" Port Codec.string
|> Codec.buildCustom
filesToGenerateCodec : Codec (List { path : List String, content : String })
filesToGenerateCodec =
Codec.build
(\list ->
list
|> Json.Encode.list
(\item ->
Json.Encode.object
[ ( "path", item.path |> String.join "/" |> Json.Encode.string )
, ( "content", item.content |> Json.Encode.string )
]
)
)
(Decode.list
(Decode.map2 (\path content -> { path = path, content = content })
(Decode.string |> Decode.map (String.split "/") |> Decode.field "path")
(Decode.string |> Decode.field "content")
)
)
initialDataCodec : Codec InitialDataRecord
initialDataCodec =
Codec.object InitialDataRecord
|> Codec.field "filesToGenerate"
.filesToGenerate
filesToGenerateCodec
|> Codec.buildObject

View File

@ -3,6 +3,7 @@ module RenderRequest exposing
, RenderRequest(..)
, RequestPayload(..)
, decoder
, default
, maybeRequestPayload
)
@ -10,6 +11,7 @@ import ApiRoute
import HtmlPrinter
import Internal.ApiRoute
import Json.Decode as Decode
import Json.Encode as Encode
import Pages.ProgramConfig exposing (ProgramConfig)
import Path exposing (Path)
import Regex
@ -24,15 +26,19 @@ type RequestPayload route
type RenderRequest route
= SinglePage IncludeHtml (RequestPayload route) Decode.Value
| FullBuild
default : RenderRequest route
default =
SinglePage
HtmlAndJson
(NotFound (Path.fromString "/error"))
Encode.null
maybeRequestPayload : RenderRequest route -> Maybe Decode.Value
maybeRequestPayload renderRequest =
case renderRequest of
FullBuild ->
Nothing
SinglePage _ _ rawJson ->
Just rawJson
@ -46,7 +52,7 @@ decoder :
ProgramConfig userMsg userModel (Maybe route) siteData pageData sharedData
-> Decode.Decoder (RenderRequest (Maybe route))
decoder config =
optionalField "request"
Decode.field "request"
(Decode.map3
(\includeHtml requestThing payload ->
SinglePage includeHtml requestThing payload
@ -73,15 +79,6 @@ decoder config =
(requestPayloadDecoder config)
(Decode.field "payload" Decode.value)
)
|> Decode.map
(\maybeRequest ->
case maybeRequest of
Just request ->
request
Nothing ->
FullBuild
)