├── .cz-config.js
├── .czrc
├── .editorconfig
├── .eslintrc
├── .eslintrc.json
├── .firebase
└── hosting.ZGlzdFxzdGF0aWNcZG9jLXNpdGVz.cache
├── .gitattributes
├── .github
├── CODEOWNERS
├── ISSUE_TEMPLATE
│ ├── ----docs-report.md
│ ├── ---bug-report.md
│ └── ---feature-request.md
├── PULL_REQUEST_TEMPLATE.md
├── build-artifacts
│ └── action.yml
├── module-cache
│ └── action.yaml
├── test-build-verdaccio
│ └── action.yml
├── test-build
│ └── action.yml
└── workflows
│ ├── PublishToNpm.yml
│ ├── bumpAndTag.yml
│ ├── codeql-analysis.yml
│ ├── publish.yml
│ └── workflow.yml
├── .gitignore
├── .husky
├── commit-msg
└── pre-commit
├── .huskyrc
├── .prettierignore
├── .prettierrc
├── .vscode
├── extensions.json
├── launch.json
├── settings.json
└── tasks.json
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── apps
├── .gitkeep
├── sample-blog
│ ├── .browserslistrc
│ ├── src
│ │ ├── app
│ │ │ ├── about
│ │ │ │ ├── about-routing.module.ts
│ │ │ │ ├── about.component.css
│ │ │ │ ├── about.component.html
│ │ │ │ ├── about.component.ts
│ │ │ │ └── about.module.ts
│ │ │ ├── app-routing.module.ts
│ │ │ ├── app.component.css
│ │ │ ├── app.component.html
│ │ │ ├── app.component.ts
│ │ │ ├── app.module.ts
│ │ │ ├── app.sps.module.ts
│ │ │ ├── basehref
│ │ │ │ ├── basehref.module.ts
│ │ │ │ └── dist
│ │ │ │ │ └── .nx-results
│ │ │ ├── blog
│ │ │ │ ├── blog-holder.component.ts
│ │ │ │ ├── blog-list
│ │ │ │ │ ├── blog-list.component.css
│ │ │ │ │ ├── blog-list.component.html
│ │ │ │ │ ├── blog-list.component.spec.ts
│ │ │ │ │ └── blog-list.component.ts
│ │ │ │ ├── blog-routing.module.ts
│ │ │ │ ├── blog.component.css
│ │ │ │ ├── blog.component.html
│ │ │ │ ├── blog.component.spec.ts
│ │ │ │ ├── blog.component.ts
│ │ │ │ └── blog.module.ts
│ │ │ ├── content
│ │ │ │ ├── content.component.ts
│ │ │ │ └── content.module.ts
│ │ │ ├── demo
│ │ │ │ ├── demo-routing.module.ts
│ │ │ │ ├── demo.component.css
│ │ │ │ ├── demo.component.html
│ │ │ │ ├── demo.component.spec.ts
│ │ │ │ ├── demo.component.ts
│ │ │ │ └── demo.module.ts
│ │ │ ├── dist
│ │ │ │ └── .nx-results
│ │ │ ├── exclude
│ │ │ │ ├── exclude-routing.module.ts
│ │ │ │ ├── exclude.component.spec.ts
│ │ │ │ ├── exclude.component.ts
│ │ │ │ └── exclude.module.ts
│ │ │ ├── manual-idle
│ │ │ │ ├── manual-idle-routing.module.ts
│ │ │ │ ├── manual-idle.component.css
│ │ │ │ ├── manual-idle.component.html
│ │ │ │ ├── manual-idle.component.spec.ts
│ │ │ │ ├── manual-idle.component.ts
│ │ │ │ └── manual-idle.module.ts
│ │ │ ├── noscript
│ │ │ │ └── noscript.module.ts
│ │ │ ├── pagenotfound
│ │ │ │ ├── pagenotfound-routing.module.ts
│ │ │ │ ├── pagenotfound.component.css
│ │ │ │ ├── pagenotfound.component.html
│ │ │ │ ├── pagenotfound.component.spec.ts
│ │ │ │ ├── pagenotfound.component.ts
│ │ │ │ └── pagenotfound.module.ts
│ │ │ ├── slow
│ │ │ │ ├── slow-routing.module.ts
│ │ │ │ ├── slow.component.spec.ts
│ │ │ │ ├── slow.component.ts
│ │ │ │ └── slow.module.ts
│ │ │ ├── static
│ │ │ │ ├── static-routing.module.ts
│ │ │ │ ├── static.component.css
│ │ │ │ ├── static.component.html
│ │ │ │ ├── static.component.spec.ts
│ │ │ │ ├── static.component.ts
│ │ │ │ └── static.module.ts
│ │ │ ├── tss-resolver
│ │ │ │ ├── tss-resolver-routing.module.ts
│ │ │ │ ├── tss-resolver.component.css
│ │ │ │ ├── tss-resolver.component.html
│ │ │ │ ├── tss-resolver.component.spec.ts
│ │ │ │ ├── tss-resolver.component.ts
│ │ │ │ ├── tss-resolver.module.ts
│ │ │ │ └── user.resolver.ts
│ │ │ └── user
│ │ │ │ ├── post
│ │ │ │ ├── post.component.css
│ │ │ │ ├── post.component.html
│ │ │ │ ├── post.component.spec.ts
│ │ │ │ └── post.component.ts
│ │ │ │ ├── posts
│ │ │ │ ├── posts.component.css
│ │ │ │ ├── posts.component.html
│ │ │ │ ├── posts.component.spec.ts
│ │ │ │ └── posts.component.ts
│ │ │ │ ├── user-routing.module.ts
│ │ │ │ ├── user.component.css
│ │ │ │ ├── user.component.html
│ │ │ │ ├── user.component.spec.ts
│ │ │ │ ├── user.component.ts
│ │ │ │ ├── user.module.ts
│ │ │ │ └── users
│ │ │ │ ├── users.component.css
│ │ │ │ ├── users.component.html
│ │ │ │ ├── users.component.spec.ts
│ │ │ │ └── users.component.ts
│ │ ├── assets
│ │ │ ├── .gitkeep
│ │ │ └── scullyio-logo-black.svg
│ │ ├── environments
│ │ │ ├── environment.prod.ts
│ │ │ └── environment.ts
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── main.ts
│ │ ├── polyfills.ts
│ │ ├── styles.css
│ │ └── test.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.spec.json
│ └── tslint.json
├── scully-docs
│ ├── .browserslistrc
│ ├── src
│ │ ├── app
│ │ │ ├── app-routing.module.ts
│ │ │ ├── app.component.css
│ │ │ ├── app.component.ts
│ │ │ ├── app.module.ts
│ │ │ ├── app.sps.module.ts
│ │ │ ├── components
│ │ │ │ ├── footer
│ │ │ │ │ ├── component
│ │ │ │ │ │ ├── footer.component.css
│ │ │ │ │ │ ├── footer.component.spec.ts
│ │ │ │ │ │ └── footer.component.ts
│ │ │ │ │ ├── footer.module.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── header
│ │ │ │ │ ├── component
│ │ │ │ │ │ └── nav-header
│ │ │ │ │ │ │ ├── nav-header.component.css
│ │ │ │ │ │ │ ├── nav-header.component.spec.ts
│ │ │ │ │ │ │ └── nav-header.component.ts
│ │ │ │ │ ├── header.module.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── lang-select
│ │ │ │ │ ├── component
│ │ │ │ │ │ └── lang-select
│ │ │ │ │ │ │ ├── lang-select.component.css
│ │ │ │ │ │ │ ├── lang-select.component.spec.ts
│ │ │ │ │ │ │ └── lang-select.component.ts
│ │ │ │ │ └── lang-select.module.ts
│ │ │ │ └── nav-list
│ │ │ │ │ ├── nav-list.module.ts
│ │ │ │ │ ├── nav-list.service.ts
│ │ │ │ │ └── navitem.ts
│ │ │ ├── page-not-found.component.ts
│ │ │ └── pages
│ │ │ │ ├── docs
│ │ │ │ ├── docs-routing.module.ts
│ │ │ │ ├── docs.module.ts
│ │ │ │ └── page
│ │ │ │ │ ├── docs.page.component.css
│ │ │ │ │ ├── docs.page.component.spec.ts
│ │ │ │ │ └── docs.page.component.ts
│ │ │ │ ├── extraPages
│ │ │ │ └── extra-page.module.ts
│ │ │ │ └── landing
│ │ │ │ ├── components
│ │ │ │ ├── features
│ │ │ │ │ ├── features.component.css
│ │ │ │ │ ├── features.component.spec.ts
│ │ │ │ │ └── features.component.ts
│ │ │ │ ├── intro
│ │ │ │ │ ├── intro.component.css
│ │ │ │ │ ├── intro.component.spec.ts
│ │ │ │ │ └── intro.component.ts
│ │ │ │ ├── quote
│ │ │ │ │ ├── quote.component.css
│ │ │ │ │ ├── quote.component.spec.ts
│ │ │ │ │ └── quote.component.ts
│ │ │ │ └── resources
│ │ │ │ │ ├── resources.component.css
│ │ │ │ │ ├── resources.component.spec.ts
│ │ │ │ │ └── resources.component.ts
│ │ │ │ ├── landing-routing.module.ts
│ │ │ │ ├── landing.module.ts
│ │ │ │ └── page
│ │ │ │ ├── landing.component.spec.ts
│ │ │ │ └── landing.component.ts
│ │ ├── assets
│ │ │ ├── .gitkeep
│ │ │ ├── beta-badge.png
│ │ │ ├── clipboard.min.js
│ │ │ └── img
│ │ │ │ ├── footer-bg.png
│ │ │ │ ├── icons
│ │ │ │ ├── angle-double-right-solid.svg
│ │ │ │ ├── angular-brands.svg
│ │ │ │ ├── arrow-left-solid.svg
│ │ │ │ ├── arrow-right-solid.svg
│ │ │ │ ├── bars-regular.svg
│ │ │ │ ├── blog-solid.svg
│ │ │ │ ├── book-solid.svg
│ │ │ │ ├── check-solid.svg
│ │ │ │ ├── chevron-right-solid.svg
│ │ │ │ ├── code-branch-solid.svg
│ │ │ │ ├── file-exclamation-regular.svg
│ │ │ │ ├── github-brands.svg
│ │ │ │ ├── globe-solid.svg
│ │ │ │ ├── pen-solid.svg
│ │ │ │ ├── play-solid.svg
│ │ │ │ └── puzzle-piece-solid.svg
│ │ │ │ ├── scully-symbol.svg
│ │ │ │ ├── scully-triad.svg
│ │ │ │ ├── scullyio-logo-black.svg
│ │ │ │ ├── scullyio-logo-light.svg
│ │ │ │ ├── scullyio-logo.svg
│ │ │ │ └── showcase
│ │ │ │ ├── 1800contacts-01.jpg
│ │ │ │ ├── angularenterprise-01.jpg
│ │ │ │ ├── appsatease-01.jpg
│ │ │ │ ├── brunoelo-blog.jpg
│ │ │ │ ├── collage-club.jpg
│ │ │ │ ├── configcat-01.jpg
│ │ │ │ ├── desitrails-01.jpg
│ │ │ │ ├── devjobsscanner-01.jpg
│ │ │ │ ├── essentialclinic-01.jpg
│ │ │ │ ├── gammastream-01.jpg
│ │ │ │ ├── glitchtip-01.jpg
│ │ │ │ ├── learning.dev-01.jpg
│ │ │ │ ├── ledgedevops-01.jpg
│ │ │ │ ├── mnm-01.jpg
│ │ │ │ ├── nicolatoledo-01.jpg
│ │ │ │ ├── owlly-01.jpg
│ │ │ │ ├── scully-01.jpg
│ │ │ │ └── solocoding-01.jpg
│ │ ├── environments
│ │ │ ├── environment.prod.ts
│ │ │ └── environment.ts
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── main.ts
│ │ ├── polyfills.ts
│ │ ├── styles
│ │ │ ├── _beta.css
│ │ │ ├── _reset.css
│ │ │ ├── _variables.css
│ │ │ ├── blockquote.css
│ │ │ ├── code.css
│ │ │ ├── details.css
│ │ │ ├── headings.css
│ │ │ ├── icon_button.css
│ │ │ ├── link_table.css
│ │ │ ├── links.css
│ │ │ ├── nav.css
│ │ │ ├── paragraph_list.css
│ │ │ ├── prev_next.css
│ │ │ ├── prism-scully.css
│ │ │ ├── showcase.css
│ │ │ ├── table.css
│ │ │ └── toc.css
│ │ └── test.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.editor.json
│ ├── tsconfig.json
│ ├── tsconfig.spec.json
│ └── tslint.json
└── sps-sample
│ ├── .browserslistrc
│ ├── .eslintrc.json
│ ├── jest.config.js
│ ├── src
│ ├── app
│ │ ├── about
│ │ │ ├── about-routing.module.ts
│ │ │ ├── about.component.css
│ │ │ ├── about.component.html
│ │ │ ├── about.component.spec.ts
│ │ │ ├── about.component.ts
│ │ │ └── about.module.ts
│ │ ├── app.component.ts
│ │ ├── app.module.ts
│ │ ├── app.sps.module.ts
│ │ ├── demo
│ │ │ ├── demo-routing.module.ts
│ │ │ ├── demo.component.ts
│ │ │ └── demo.module.ts
│ │ ├── docs
│ │ │ ├── docs-routing.module.ts
│ │ │ ├── docs.component.css
│ │ │ ├── docs.component.html
│ │ │ ├── docs.component.spec.ts
│ │ │ ├── docs.component.ts
│ │ │ └── docs.module.ts
│ │ ├── home
│ │ │ ├── home-routing.module.ts
│ │ │ ├── home.component.css
│ │ │ ├── home.component.html
│ │ │ ├── home.component.spec.ts
│ │ │ ├── home.component.ts
│ │ │ └── home.module.ts
│ │ └── user
│ │ │ ├── user-routing.module.ts
│ │ │ ├── user.component.spec.ts
│ │ │ ├── user.component.ts
│ │ │ └── user.module.ts
│ ├── assets
│ │ └── .gitkeep
│ ├── environments
│ │ ├── environment.prod.ts
│ │ └── environment.ts
│ ├── favicon.ico
│ ├── index.html
│ ├── main.ts
│ ├── polyfills.ts
│ ├── styles.css
│ └── test-setup.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.editor.json
│ ├── tsconfig.json
│ └── tsconfig.spec.json
├── assets
├── 1800contacts_logo_indigo.png
├── hero-devs-logo-400x400.jpg
├── hero-devs-logo-80x80.jpg
└── logos
│ ├── PNG
│ ├── Black
│ │ ├── scullyio-icon-black.png
│ │ ├── scullyio-logo-black.png
│ │ └── scullyio-wordmark-black.png
│ ├── Green
│ │ ├── scullyio-icon-green.png
│ │ ├── scullyio-logo-green.png
│ │ └── scullyio-wordmark-green.png
│ ├── White
│ │ ├── scullyio-icon-white.png
│ │ ├── scullyio-logo-white.png
│ │ └── scullyio-wordmark-white.png
│ ├── scullyio-icon.png
│ ├── scullyio-logo.png
│ └── scullyio-wordmark.png
│ ├── SVG
│ ├── Black
│ │ ├── scullyio-icon-black.svg
│ │ ├── scullyio-logo-black.svg
│ │ └── wordmark-black.svg
│ ├── Green
│ │ ├── scullyio-icon-green.svg
│ │ ├── scullyio-logo-green.svg
│ │ └── wordmark-green.svg
│ ├── White
│ │ ├── scullyio-icon-white.svg
│ │ ├── scullyio-logo-white.svg
│ │ └── wordmark-white.svg
│ ├── scully-triad.svg
│ ├── scullyio-icon.svg
│ ├── scullyio-logo.svg
│ └── wordmark.svg
│ ├── scullyio-logo-base.pdf
│ ├── scullyio-logo-source.ai
│ └── twitter
│ ├── scullyio-twitter-cover.png
│ └── scullyio-twitter-profile-icon.png
├── cleanCSStest.ts
├── client_id
├── commitlint.config.js
├── cypress.json
├── demos
└── plugins
│ ├── errorPlugin.js
│ ├── newSample.js
│ ├── tocPlugin.js
│ └── voidPlugin.js
├── depedencyHash.cjs
├── docs
├── Reference
│ ├── command-line-options.md
│ ├── command-line-options_es.md
│ ├── config.md
│ ├── config_es.md
│ ├── legacy-support
│ │ ├── angular-v8.md
│ │ ├── angular-v8_es.md
│ │ ├── overview.md
│ │ ├── overview_es.md
│ │ ├── polyfills.md
│ │ └── polyfills_es.md
│ ├── ngLib
│ │ ├── idle-monitor-service.md
│ │ ├── idle-monitor-service_es.md
│ │ ├── overview.md
│ │ ├── overview_es.md
│ │ ├── scully-content-component.md
│ │ ├── scully-content-component_es.md
│ │ ├── scully-routes-service.md
│ │ ├── scully-routes-service_es.md
│ │ ├── transfer-state-service.md
│ │ ├── transfer-state-service_es.md
│ │ ├── utility-methods.md
│ │ └── utility-methods_es.md
│ ├── overview.md
│ ├── overview_es.md
│ ├── plugins
│ │ ├── built-in-plugins
│ │ │ ├── adoc.md
│ │ │ ├── adoc_es.md
│ │ │ ├── contentFolder.md
│ │ │ ├── contentFolder_es.md
│ │ │ ├── criticalcss.md
│ │ │ ├── criticalcss_es.md
│ │ │ ├── flashPrevention.md
│ │ │ ├── flashPrevention_es.md
│ │ │ ├── ignored.md
│ │ │ ├── ignored_es.md
│ │ │ ├── json.md
│ │ │ ├── json_es.md
│ │ │ ├── md.md
│ │ │ ├── md_es.md
│ │ │ ├── overview.md
│ │ │ ├── overview_es.md
│ │ │ ├── router-.md
│ │ │ ├── router-_es.md
│ │ │ ├── router-render.md
│ │ │ ├── router-render_es.md
│ │ │ ├── seoHrefOptimize.md
│ │ │ └── seoHrefOptimize_es.md
│ │ ├── community-plugins
│ │ │ ├── amp-css.md
│ │ │ ├── amp-css_es.md
│ │ │ ├── canonical.md
│ │ │ ├── canonical_es.md
│ │ │ ├── disableAngular.md
│ │ │ ├── disableAngular_es.md
│ │ │ ├── fouc.md
│ │ │ ├── fouc_es.md
│ │ │ ├── http404.md
│ │ │ ├── http404_es.md
│ │ │ ├── lazyImages.md
│ │ │ ├── lazyImages_es.md
│ │ │ ├── mediumZoom.md
│ │ │ ├── mediumZoom_es.md
│ │ │ ├── meetup.md
│ │ │ ├── meetup_es.md
│ │ │ ├── minifyHtml.md
│ │ │ ├── minifyHtml_es.md
│ │ │ ├── overview.md
│ │ │ ├── overview_es.md
│ │ │ ├── page-title.md
│ │ │ ├── page-title_es.md
│ │ │ ├── regex.md
│ │ │ ├── regex_es.md
│ │ │ ├── rss.md
│ │ │ ├── rss_es.md
│ │ │ ├── sitemap.md
│ │ │ ├── sitemap_es.md
│ │ │ ├── time-to-read.md
│ │ │ ├── time-to-read_es.md
│ │ │ ├── toc.md
│ │ │ └── toc_es.md
│ │ ├── custom-plugins
│ │ │ ├── create-a-plugin-function.md
│ │ │ ├── create-a-plugin-function_es.md
│ │ │ ├── overview.md
│ │ │ ├── overview_es.md
│ │ │ ├── register-a-new-plugin.md
│ │ │ ├── register-a-new-plugin_es.md
│ │ │ ├── use-a-custom-plugin.md
│ │ │ └── use-a-custom-plugin_es.md
│ │ ├── overview.md
│ │ ├── overview_es.md
│ │ └── types
│ │ │ ├── allDone.md
│ │ │ ├── allDone_es.md
│ │ │ ├── beforeAll.md
│ │ │ ├── enterprise.md
│ │ │ ├── enterprise_es.md
│ │ │ ├── fileHandler.md
│ │ │ ├── fileHandler_es.md
│ │ │ ├── overview.md
│ │ │ ├── overview_es.md
│ │ │ ├── postProcessByDom.md
│ │ │ ├── postProcessByDom_es.md
│ │ │ ├── postProcessByHtml.md
│ │ │ ├── route-process.md
│ │ │ ├── route-process_es.md
│ │ │ ├── routeDiscoveryDone.md
│ │ │ ├── routeDiscoveryDone_es.md
│ │ │ ├── routeRenderer.md
│ │ │ ├── router.md
│ │ │ ├── router_es.md
│ │ │ ├── system.md
│ │ │ └── system_es.md
│ ├── routRenders
│ │ ├── overview.md
│ │ ├── playwright.md
│ │ └── sps.md
│ ├── schematics
│ │ ├── create-blog-config.md
│ │ ├── create-blog-config_es.md
│ │ ├── create-markdown-files-and-skeleton.md
│ │ ├── create-markdown-files-and-skeleton_es.md
│ │ ├── create-scully-files-with-ng-add.md
│ │ ├── create-scully-files-with-ng-add_es.md
│ │ ├── overview.md
│ │ └── overview_es.md
│ ├── scully-api
│ │ ├── findPlugin.md
│ │ ├── findPlugin_es.md
│ │ ├── overview.md
│ │ ├── overview_es.md
│ │ ├── registerPlugin.md
│ │ ├── registerPlugin_es.md
│ │ ├── utils.md
│ │ └── utils_es.md
│ └── utilities
│ │ ├── overview.md
│ │ ├── overview_es.md
│ │ ├── prism-js.md
│ │ ├── prism-js_es.md
│ │ ├── scully-publish.md
│ │ └── scully-publish_es.md
├── community
│ ├── code-of-conduct.md
│ ├── code-of-conduct_es.md
│ ├── contributing.md
│ ├── contributing_es.md
│ ├── issues.md
│ ├── issues_es.md
│ ├── overview.md
│ ├── overview_es.md
│ ├── showcase.md
│ ├── showcase_es.md
│ ├── sponsors.md
│ ├── sponsors_es.md
│ ├── starters.md
│ ├── starters_es.md
│ ├── support.md
│ └── support_es.md
├── concepts
│ ├── handled-routes.md
│ ├── handled-routes_es.md
│ ├── overview.md
│ ├── overview_es.md
│ ├── plugins.md
│ ├── plugins_es.md
│ ├── process.md
│ ├── process_es.md
│ ├── unhandled-routes.md
│ └── unhandled-routes_es.md
├── faq.md
├── faq_es.md
├── learn
│ ├── create-a-blog
│ │ ├── add-blog-support.md
│ │ ├── add-blog-support_es.md
│ │ ├── generate-new-blog-posts.md
│ │ ├── generate-new-blog-posts_es.md
│ │ ├── overview.md
│ │ ├── overview_es.md
│ │ ├── use-blog-post-data-in-template.md
│ │ └── use-blog-post-data-in-template_es.md
│ ├── create-a-plugin
│ │ ├── create-a-plugin.md
│ │ └── create-a-plugin_es.md
│ ├── getting-started
│ │ ├── building.md
│ │ ├── building_es.md
│ │ ├── installation.md
│ │ ├── installation_es.md
│ │ ├── manualInstallation.md
│ │ ├── overview.md
│ │ ├── overview_es.md
│ │ ├── requirements.md
│ │ ├── requirements_es.md
│ │ ├── serving.md
│ │ ├── serving_es.md
│ │ ├── tips-for-testing.md
│ │ └── tips-for-testing_es.md
│ ├── introduction.md
│ ├── introduction_es.md
│ ├── overview.md
│ ├── overview_es.md
│ └── use-netlify-cms
│ │ ├── use-netlify-cms.md
│ │ └── use-netlify-cms_es.md
├── overview.md
├── overview_es.md
└── roadmap.md
├── docs_extraPages
└── support.md
├── firebase.json
├── jest.config.js
├── jest.preset.js
├── libs
├── .gitkeep
├── ng-lib
│ ├── README.md
│ ├── ng-package.json
│ ├── package.json
│ ├── src
│ │ ├── lib
│ │ │ ├── config
│ │ │ │ └── scully-config.ts
│ │ │ ├── idleMonitor
│ │ │ │ └── idle-monitor.service.ts
│ │ │ ├── route-service
│ │ │ │ └── scully-routes.service.ts
│ │ │ ├── scully-content
│ │ │ │ ├── scully-content.component.ts
│ │ │ │ └── scully-content.module.ts
│ │ │ ├── scully-lib.module.ts
│ │ │ ├── transfer-state
│ │ │ │ └── transfer-state.service.ts
│ │ │ └── utils
│ │ │ │ ├── basePathOnly.ts
│ │ │ │ ├── fetchHttp.ts
│ │ │ │ ├── findComments.ts
│ │ │ │ ├── fromMutationObserver.ts
│ │ │ │ ├── isScully.ts
│ │ │ │ └── merge-paths.ts
│ │ └── public-api.ts
│ ├── tsconfig.json
│ ├── tsconfig.lib.json
│ ├── tsconfig.lib.prod.json
│ └── tslint.json
├── platform-server
│ ├── .eslintrc.json
│ ├── README.md
│ ├── jest.config.js
│ ├── ng-package.json
│ ├── package.json
│ ├── src
│ │ ├── index.ts
│ │ ├── lib
│ │ │ └── platform-server.module.ts
│ │ └── test-setup.ts
│ ├── tsconfig.json
│ ├── tsconfig.lib.json
│ ├── tsconfig.lib.prod.json
│ └── tsconfig.spec.json
├── plugins
│ ├── base-href-rewrite
│ │ ├── .eslintrc
│ │ ├── README.md
│ │ ├── dist
│ │ │ └── .nx-results
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ └── plugins-base-href-rewrite.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── docs-link-update
│ │ ├── .eslintrc
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ └── plugins-docs-link-update.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.lib.json
│ │ └── tsconfig.spec.json
│ ├── extra
│ │ ├── .eslintrc
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ └── plugins-extra.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── from-data
│ │ ├── .eslintrc
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ └── plugins-from-data.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── google-analytics
│ │ ├── .eslintrc
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ └── plugins-google-analytics.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── logrocket
│ │ ├── .eslintrc
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ └── plugins-logrocket.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── scully-plugin-copy-to-clipboard
│ │ ├── .eslintrc
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ └── plugins-scully-plugin-copy-to-clipboard.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── scully-plugin-critical-css
│ │ ├── .eslintrc
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ └── plugins-scully-plugin-critical-css.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── scully-plugin-flash-prevention
│ │ ├── .eslintrc
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src
│ │ │ └── lib
│ │ │ │ ├── flash-prevention.plugin.ts
│ │ │ │ └── utils.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── scully-plugin-local-cache
│ │ ├── .eslintrc.json
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ ├── cacheDone.ts
│ │ │ │ ├── cli-options.ts
│ │ │ │ ├── config.ts
│ │ │ │ ├── deferred.ts
│ │ │ │ ├── generateId.ts
│ │ │ │ ├── handlePuppeteerRequest.ts
│ │ │ │ ├── handlePuppeteerResponse.ts
│ │ │ │ ├── http.ts
│ │ │ │ ├── installInterceptor.ts
│ │ │ │ ├── ldb.ts
│ │ │ │ ├── local-cache.interface.ts
│ │ │ │ ├── plugins-local-cache.ts
│ │ │ │ └── usageStatistics.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── scully-plugin-playwright
│ │ ├── .babelrc
│ │ ├── .eslintrc.json
│ │ ├── README.md
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ ├── plugins-scully-plugin-playwright-utils.ts
│ │ │ │ ├── plugins-scully-plugin-playwright.spec.ts
│ │ │ │ └── plugins-scully-plugin-playwright.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.lib.json
│ │ └── tsconfig.spec.json
│ ├── scully-plugin-puppeteer
│ │ ├── .babelrc
│ │ ├── .eslintrc.json
│ │ ├── README.md
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ ├── launchedBrowser.ts
│ │ │ │ ├── plugins-scully-plugin-puppeteer.spec.ts
│ │ │ │ └── plugins-scully-plugin-puppeteer.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.lib.json
│ │ └── tsconfig.spec.json
│ ├── scully-plugin-remove-scripts
│ │ ├── .eslintrc
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ │ └── plugins-scully-plugin-remove-scripts.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ └── sentry
│ │ ├── .eslintrc
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ ├── index.ts
│ │ └── lib
│ │ │ ├── plugins-sentry.ts
│ │ │ └── sentry.errorhandler.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
├── scully-schematics
│ ├── .eslintrc
│ ├── .gitignore
│ ├── .npmignore
│ ├── README.md
│ ├── assets
│ │ └── meta-data-template.yml
│ ├── jest.config.js
│ ├── package.json
│ ├── src
│ │ ├── add-blog
│ │ │ ├── index.spec.ts
│ │ │ ├── index.ts
│ │ │ ├── schema.json
│ │ │ └── schema.ts
│ │ ├── add-plugin
│ │ │ ├── index.ts
│ │ │ ├── schema.json
│ │ │ └── schema.ts
│ │ ├── add-post
│ │ │ ├── index.spec.ts
│ │ │ ├── index.ts
│ │ │ ├── schema.json
│ │ │ └── schema.ts
│ │ ├── collection.json
│ │ ├── create-markdown
│ │ │ ├── index.spec.ts
│ │ │ ├── index.ts
│ │ │ ├── schema.json
│ │ │ └── schema.ts
│ │ ├── files
│ │ │ ├── blog-add
│ │ │ │ └── blog-X.md
│ │ │ ├── blog-module
│ │ │ │ ├── blog-routing.module.ts
│ │ │ │ ├── blog.component.css
│ │ │ │ ├── blog.component.html
│ │ │ │ ├── blog.component.spec.ts.template
│ │ │ │ ├── blog.component.ts
│ │ │ │ └── blog.module.ts
│ │ │ ├── blog
│ │ │ │ └── page-1.example.md
│ │ │ ├── markdown-module
│ │ │ │ ├── __name@dasherize__-routing.module.ts.template
│ │ │ │ ├── __name@dasherize__.component.__style__.template
│ │ │ │ ├── __name@dasherize__.component.html.template
│ │ │ │ ├── __name@dasherize__.component.spec.ts.template
│ │ │ │ ├── __name@dasherize__.component.ts.template
│ │ │ │ └── __name@dasherize__.module.ts.template
│ │ │ └── plugin
│ │ │ │ ├── render
│ │ │ │ └── __name@dasherize__.plugin.js.template
│ │ │ │ └── router
│ │ │ │ └── __name@dasherize__.plugin.js.template
│ │ ├── index.ts
│ │ ├── migration.json
│ │ ├── ng-add
│ │ │ ├── index.spec.ts
│ │ │ ├── index.ts
│ │ │ ├── package-config.ts
│ │ │ ├── schema.json
│ │ │ ├── schema.ts
│ │ │ └── version-names.ts
│ │ ├── ng-update
│ │ │ └── index.ts
│ │ ├── plugin-ts
│ │ │ ├── index.ts
│ │ │ ├── schema.json
│ │ │ └── schema.ts
│ │ ├── route-discovery
│ │ │ ├── index.ts
│ │ │ ├── schema.json
│ │ │ └── schema.ts
│ │ ├── scully
│ │ │ ├── index.spec.ts
│ │ │ ├── index.ts
│ │ │ └── schema.json
│ │ ├── test-setup.ts
│ │ └── utils
│ │ │ ├── test-utils.ts
│ │ │ └── utils.ts
│ ├── tsconfig.json
│ ├── tsconfig.lib.json
│ └── tsconfig.spec.json
├── scully
│ ├── .eslintrc
│ ├── .npmrc
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── index.ts
│ │ ├── lib
│ │ │ ├── fileHanderPlugins
│ │ │ │ ├── asciidoc.ts
│ │ │ │ ├── html.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── markdown.ts
│ │ │ ├── index.ts
│ │ │ ├── pluginManagement
│ │ │ │ ├── Plugin.interfaces.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── pluginConfig.ts
│ │ │ │ ├── pluginRepository.ts
│ │ │ │ ├── pluginWrap.ts
│ │ │ │ └── systemPlugins.ts
│ │ │ ├── renderPlugins
│ │ │ │ ├── content-render-utils
│ │ │ │ │ ├── convertAndInjectContent.ts
│ │ │ │ │ ├── customMarkdownOptions.ts
│ │ │ │ │ ├── findComments.ts
│ │ │ │ │ ├── getIdAttrName.ts
│ │ │ │ │ ├── getScript.ts
│ │ │ │ │ ├── handleFile.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── injectHtml.ts
│ │ │ │ │ └── readFileAndCheckPrePublishSlug.ts
│ │ │ │ ├── contentRenderPlugin.ts
│ │ │ │ ├── contentTextRenderPlugin.ts
│ │ │ │ ├── executePlugins.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── jsdomPlugins.ts
│ │ │ │ └── seoHrefCompletionPlugin.ts
│ │ │ ├── routerPlugins
│ │ │ │ ├── addOptionalRoutesPlugin.ts
│ │ │ │ ├── contentFolderPlugin.ts
│ │ │ │ ├── defaultRouterPlugin.ts
│ │ │ │ ├── handledRoute.interface.ts
│ │ │ │ ├── ignoredRoutePlugin.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── jsonRoutePlugin.ts
│ │ │ │ ├── renderTemplate.ts
│ │ │ │ └── traverseAppRoutesPlugin.ts
│ │ │ ├── systemPlugins
│ │ │ │ ├── index.ts
│ │ │ │ ├── storeRoutes.ts
│ │ │ │ └── writeToFs.plugin.ts
│ │ │ ├── testData
│ │ │ │ ├── index.ts
│ │ │ │ ├── posts-testdata.ts
│ │ │ │ └── users-testdata.ts
│ │ │ └── utils
│ │ │ │ ├── assertNever.ts
│ │ │ │ ├── asyncPool.ts
│ │ │ │ ├── cache.ts
│ │ │ │ ├── cacheFolder.ts
│ │ │ │ ├── captureMessage.ts
│ │ │ │ ├── chunk.ts
│ │ │ │ ├── cli-options.ts
│ │ │ │ ├── compileConfig.ts
│ │ │ │ ├── config.ts
│ │ │ │ ├── createFolderFor.ts
│ │ │ │ ├── deepClone.ts
│ │ │ │ ├── deepGet.ts
│ │ │ │ ├── exitHandler.ts
│ │ │ │ ├── findAngularJsonPath.ts
│ │ │ │ ├── fsAngular.ts
│ │ │ │ ├── fsFolder.ts
│ │ │ │ ├── handlers
│ │ │ │ ├── beforAll.ts
│ │ │ │ ├── defaultAction.ts
│ │ │ │ ├── handleAllDone.ts
│ │ │ │ ├── handleRouteDiscoveryDone.ts
│ │ │ │ ├── handleTravesal.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── processRoutes.ts
│ │ │ │ ├── renderParallel.ts
│ │ │ │ ├── renderPlugin.ts
│ │ │ │ └── routeDiscovery.ts
│ │ │ │ ├── httpGetJson.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── interfacesandenums.ts
│ │ │ │ ├── log.ts
│ │ │ │ ├── nodeFsFolder.ts
│ │ │ │ ├── performanceIds.ts
│ │ │ │ ├── platform-server
│ │ │ │ ├── deferred.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── ps-worker.ts
│ │ │ │ ├── serverPlatformRender.ts
│ │ │ │ └── startupSpS.ts
│ │ │ │ ├── procesmanager
│ │ │ │ ├── TaskWorker.ts
│ │ │ │ ├── handleJobs.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── job.ts
│ │ │ │ ├── startWorkerListener.ts
│ │ │ │ ├── taskPool.ts
│ │ │ │ └── tasks.interface.ts
│ │ │ │ ├── randomString.ts
│ │ │ │ ├── read-angular-json.ts
│ │ │ │ ├── replaceFirstRouteParamWithVal.ts
│ │ │ │ ├── restart.ts
│ │ │ │ ├── routeSplit.ts
│ │ │ │ ├── scullydot.ts
│ │ │ │ ├── serverstuff
│ │ │ │ ├── addSSL.ts
│ │ │ │ ├── dataServer.ts
│ │ │ │ ├── handleUnknownRoute.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── isPortTaken.ts
│ │ │ │ ├── proxyAdd.ts
│ │ │ │ ├── staticServer.ts
│ │ │ │ ├── title404.ts
│ │ │ │ └── waitForServerToBeAvailable.ts
│ │ │ │ ├── services
│ │ │ │ ├── index.ts
│ │ │ │ └── routeStorage.ts
│ │ │ │ ├── startup
│ │ │ │ ├── index.ts
│ │ │ │ ├── scullyInit.ts
│ │ │ │ ├── startBackgroundServer.ts
│ │ │ │ ├── startUpEnvChecks.ts
│ │ │ │ ├── startup.ts
│ │ │ │ └── watchMode.ts
│ │ │ │ ├── validateConfig.ts
│ │ │ │ └── waitForIt.ts
│ │ └── scully.ts
│ └── tsconfig.json
└── universal
│ ├── .eslintrc.json
│ ├── README.md
│ ├── jest.config.js
│ ├── ng-package.json
│ ├── package.json
│ ├── src
│ ├── index.ts
│ ├── lib
│ │ ├── ScullyXhr.ts
│ │ ├── universal.module.ts
│ │ └── unversalWorker.ts
│ └── test-setup.ts
│ ├── tsconfig.json
│ ├── tsconfig.lib.json
│ ├── tsconfig.lib.prod.json
│ └── tsconfig.spec.json
├── nx.json
├── package-lock.json
├── package.json
├── proxy.conf.js
├── scully.heavy.config.ts
├── scully.pw-sample-blog.config.ts
├── scully.sample-blog.config.ts
├── scully.scully-docs.config.ts
├── scully.sps-sample.config.ts
├── scully
├── .gitignore
├── baseconfig.ts
├── loadRenderer.ts
├── plugins
│ ├── error.ts
│ ├── render-once.ts
│ └── sampleFromTS.ts
├── tsconfig.json
├── tsconfig.sample-blog.json
└── tsconfig.scully-docs.json
├── testexit.js
├── tests
├── assets
│ ├── blog-files
│ │ ├── 2014
│ │ │ └── 2
│ │ │ │ └── 12
│ │ │ │ └── asdf.md
│ │ ├── foreign-chars.md
│ │ ├── page-1.md
│ │ ├── page-2.md
│ │ ├── page-3.md
│ │ ├── page-4.adoc
│ │ ├── page-5.md
│ │ ├── page-6.md
│ │ ├── scullyio-icon.png
│ │ ├── test
│ │ │ └── testing.md
│ │ └── testing-empty.md
│ └── certs
│ │ ├── localhost.cert
│ │ └── localhost.key
├── cypress
│ ├── fixtures
│ │ └── example.json
│ ├── integration
│ │ ├── doclinkScoll.spec.js
│ │ ├── getcurrent.spec.js
│ │ ├── sampleBlog.spec.js
│ │ └── scullyContent.spec.js
│ ├── plugins
│ │ └── index.js
│ └── support
│ │ ├── commands.js
│ │ └── index.js
└── jest
│ └── src
│ ├── __tests__
│ ├── __snapshots__
│ │ ├── blog-index.spec.ts.snap
│ │ ├── contentText.spec.ts.snap
│ │ ├── home.spec.ts.snap
│ │ ├── transfer-state.spec.ts.snap
│ │ └── users.spec.ts.snap
│ ├── baseHrefRewrite.spec.ts
│ ├── blog-index.spec.ts
│ ├── contentText.spec.ts
│ ├── docsThere.spec.ts
│ ├── exclude.spec.ts
│ ├── extra-users.spec.ts
│ ├── extraRoutes.spec.ts
│ ├── flash-prevention.spec.ts
│ ├── home.spec.ts
│ ├── manualIdle.spec.ts
│ ├── rawPage.spec.ts
│ ├── readmesThere.spec.ts
│ ├── route404.spec.ts
│ ├── seoOptimize.spec.ts
│ ├── transfer-state.spec.ts
│ └── users.spec.ts
│ ├── jest.config.js
│ ├── setup-jest.ts
│ ├── test-config.helper.ts
│ ├── tsconfig.json
│ └── tsconfig.spec.json
├── testsps.sh
├── tools
├── buildIt.ts
├── bumpAndTag.ts
├── cmdLineOptions.ts
├── deps-track.ts
├── docker
│ ├── chromium-base.dockerfile
│ └── pupeteer.dockerfile
├── generators
│ ├── .gitkeep
│ └── publish
│ │ ├── index.ts
│ │ └── schema.json
├── listVersions.ts
├── makeHash.ts
├── package.json
├── publishCurrent.ts
├── publishLocal.ts
├── publishPackage.ts
├── pushtoGit.ts
├── tsconfig.tools.json
├── updateRelaseFiles.ts
└── utils.ts
├── tsconfig.base.json
├── tsconfig.json
├── tsconfig.spec.json
├── tslint.json
└── workspace.json
/.czrc:
--------------------------------------------------------------------------------
1 | { "path": "cz-customizable" }
2 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 | max_line_length = 132
11 |
12 |
13 | [*.md]
14 | max_line_length = off
15 | trim_trailing_whitespace = false
16 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Set the default behavior, in case people don't have core.autocrlf set.
2 | * text=auto
3 |
4 | # Explicitly declare text files you want to always be normalized and converted
5 | # to native line endings on checkout.
6 | *.ts text eol=lf
7 | *.js text eol=lf
8 |
9 | # Declare files that will always have CRLF line endings on checkout.
10 | # *.sln text eol=crlf
11 |
12 | # Denote all files that are truly binary and should not be modified.
13 | *.png binary
14 | *.jpg binary
15 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # Lines starting with '#' are comments.
2 | # Each line is a file pattern followed by one or more owners.
3 |
4 | # These owners will be the default owners for everything in the repo.
5 | * @SanderElias
6 |
7 | # Order is important. The last matching pattern has the most precedence.
8 | # So if a pull request only touches javascript files, only these owners
9 | # will be requested to review.
10 |
11 | # You can also use email addresses if you prefer.
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/---feature-request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: '🧩 Feature request'
3 | about: Suggest an idea for Scully
4 | title: ''
5 | labels: enhancement
6 | assignees: ''
7 | ---
8 |
9 | ## 🧩 Feature request
10 |
11 | ### Description
12 |
13 | A clear and concise description of the problem or missing capability...
14 |
15 | ### Describe the solution you'd like
16 |
17 | If you have a solution in mind, please describe it.
18 |
19 | ### Describe alternatives you've considered
20 |
21 | Have you considered any alternative solutions or workarounds?
22 |
--------------------------------------------------------------------------------
/.husky/commit-msg:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | npx commitlint -e $HUSKY_GIT_PARAMS
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | npx lint-staged
--------------------------------------------------------------------------------
/.huskyrc:
--------------------------------------------------------------------------------
1 | {
2 | "hooks": {
3 | "pre-commit": "pretty-quick --staged && npm run chkPackage"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | # Add files here to ignore them from prettier formatting
2 |
3 | /dist
4 | /coverage
5 | /test/
6 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true
3 | }
4 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["esbenp.prettier-vscode", "firsttris.vscode-jest-runner"]
3 | }
4 |
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "tasks": [
3 | {
4 | "type": "npm",
5 | "script": "deb",
6 | "group": "test",
7 | "problemMatcher": [],
8 | "label": "npm: deb",
9 | "detail": "node --inspect=0.0.0.0:5858 --nolazy ./dist/libs/scully/scully --pr sample-blog"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/apps/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/apps/sample-blog/.browserslistrc:
--------------------------------------------------------------------------------
1 | and_chr 98
2 | chrome 97
3 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/about/about-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 |
4 | import { AboutComponent } from './about.component';
5 |
6 | const routes: Routes = [{ path: '', component: AboutComponent }];
7 |
8 | @NgModule({
9 | imports: [RouterModule.forChild(routes)],
10 | exports: [RouterModule]
11 | })
12 | export class AboutRoutingModule {}
13 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/about/about.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sample-blog/src/app/about/about.component.css
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/about/about.component.html:
--------------------------------------------------------------------------------
1 |
about works!
2 |
3 | Scully docs site
4 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/about/about.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | import { ScullyRoutesService } from '@scullyio/ng-lib';
3 | import { firstValueFrom } from 'rxjs';
4 |
5 | @Component({
6 | selector: 'app-about',
7 | templateUrl: './about.component.html',
8 | styleUrls: ['./about.component.css']
9 | })
10 | export class AboutComponent implements OnInit {
11 | constructor(private srs: ScullyRoutesService) {}
12 |
13 | async ngOnInit() {
14 | const cur = await firstValueFrom(this.srs.getCurrent())
15 | console.log(cur);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/about/about.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 |
4 | import { AboutRoutingModule } from './about-routing.module';
5 | import { AboutComponent } from './about.component';
6 |
7 | @NgModule({
8 | declarations: [AboutComponent],
9 | imports: [CommonModule, AboutRoutingModule]
10 | })
11 | export class AboutModule {}
12 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Scully demo blog app! {{ currentState }}
4 |
5 | 🏠
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Made with ❤️ @HeroDevs
14 |
15 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import {
3 | IdleMonitorService,
4 | isScullyGenerated,
5 | isScullyRunning
6 | } from '@scullyio/ng-lib';
7 |
8 | @Component({
9 | selector: 'app-root',
10 | templateUrl: './app.component.html',
11 | styleUrls: ['./app.component.css']
12 | })
13 | export class AppComponent {
14 | currentState = isScullyRunning()
15 | ? 'rendering inside scully'
16 | : isScullyGenerated()
17 | ? 'Loaded from static HTML'
18 | : 'SPA mode';
19 | constructor() {}
20 | }
21 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/app.sps.module.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode, NgModule } from '@angular/core';
2 | import { AppComponent } from './app.component';
3 | import { AppModule } from './app.module';
4 | import { ScullyPlatformServerModule } from '@scullyio/platform-server'
5 | import { BrowserModule } from '@angular/platform-browser';
6 |
7 |
8 | /**
9 | * the platform server should be running in production mode.
10 | */
11 | enableProdMode();
12 |
13 |
14 | @NgModule({
15 | imports: [
16 | BrowserModule.withServerTransition({ appId: 'serverApp' }),
17 | AppModule,
18 | ScullyPlatformServerModule,
19 | ],
20 | providers: [],
21 | bootstrap: [AppComponent],
22 | })
23 | export default class AppSPSModule {}
24 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/basehref/dist/.nx-results:
--------------------------------------------------------------------------------
1 | {
2 | "command": "serve",
3 | "results": {
4 | "sample-blog": false
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/blog/blog-list/blog-list.component.css:
--------------------------------------------------------------------------------
1 | :host {
2 | display: grid;
3 | grid-template-columns: repeat(3, 1fr);
4 | gap: 10px;
5 | }
6 |
7 | :host h1:first-child {
8 | grid-column: span 3;
9 | text-align: center;
10 | }
11 |
12 | article {
13 | background-color: royalblue;
14 | padding: 5px;
15 | border-radius: 5px;
16 | color: whitesmoke;
17 | }
18 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/blog/blog-list/blog-list.component.html:
--------------------------------------------------------------------------------
1 | Overview of blog posts
2 |
3 |
4 |
5 | {{ blog.title || blog.route }}
6 | {{ blog['publish date'] | date: 'shortDate':'GMT' }}
7 | {{ blog.description }}
8 |
9 |
10 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/blog/blog.component.css:
--------------------------------------------------------------------------------
1 | h1 {
2 | /* color: rgb(51, 6, 37); */
3 | /* background-color: rgb(248, 211, 236); */
4 | background-color: royalblue;
5 | color: white;
6 | width: 100%;
7 | text-align: center;
8 | padding: 5px;
9 | border-radius: 8px;
10 | margin-top: 0.4rem;
11 | margin-bottom: 0.4rem;
12 | /* width: fit-content; */
13 | }
14 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/blog/blog.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/blog/blog.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, ViewEncapsulation } from '@angular/core';
2 |
3 | declare var window: any;
4 |
5 | @Component({
6 | selector: 'app-blog',
7 | templateUrl: './blog.component.html',
8 | styleUrls: ['./blog.component.css'],
9 | preserveWhitespaces: true,
10 | encapsulation: ViewEncapsulation.Emulated,
11 | })
12 | export class BlogComponent {}
13 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/blog/blog.module.ts:
--------------------------------------------------------------------------------
1 | import { CommonModule } from '@angular/common';
2 | import { NgModule } from '@angular/core';
3 | import { ScullyLibModule } from '@scullyio/ng-lib';
4 | import { BlogListComponent } from './blog-list/blog-list.component';
5 | import { BlogRoutingModule } from './blog-routing.module';
6 | import { BlogComponent } from './blog.component';
7 | import { BlogHolderComponent } from './blog-holder.component';
8 |
9 | @NgModule({
10 | declarations: [BlogComponent, BlogListComponent, BlogHolderComponent],
11 | imports: [CommonModule, BlogRoutingModule, ScullyLibModule],
12 | })
13 | export class BlogModule {}
14 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/content/content.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-content-component',
5 | template: `Content component
6 | `,
7 | })
8 | export class ContentComponent implements OnInit {
9 | constructor() {}
10 |
11 | ngOnInit() {}
12 | }
13 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/content/content.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { ContentComponent } from './content.component';
4 | import { CommonModule } from '@angular/common';
5 | import { ScullyLibModule } from '@scullyio/ng-lib';
6 | import { Routes, RouterModule } from '@angular/router';
7 |
8 | const routes: Routes = [
9 | {
10 | path: ':slug',
11 | component: ContentComponent,
12 | },
13 | {
14 | path: '**',
15 | component: ContentComponent,
16 | },
17 | ];
18 |
19 | @NgModule({
20 | imports: [CommonModule, ScullyLibModule, RouterModule.forChild(routes)],
21 | declarations: [ContentComponent],
22 | })
23 | export class ContentModule {}
24 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/demo/demo-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 |
4 | import { DemoComponent } from './demo.component';
5 |
6 | const routes: Routes = [{ path: ':id', component: DemoComponent }];
7 |
8 | @NgModule({
9 | imports: [RouterModule.forChild(routes)],
10 | exports: [RouterModule]
11 | })
12 | export class DemoRoutingModule {}
13 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/demo/demo.component.css:
--------------------------------------------------------------------------------
1 | :host {
2 | height: 100%;
3 | display: grid;
4 | place-content: center center;
5 | grid-template-columns: 1fr 1fr;
6 | grid-template-rows: 1fr;
7 | }
8 |
9 | span {
10 | grid-area: 1/1/2/3;
11 | text-align: center;
12 | font-size: 80vw;
13 | line-height: 85vh;
14 | }
15 |
16 | a {
17 | grid-area: 1/1/1/2;
18 | display: block;
19 | height: 100%;
20 | width: 100%;
21 | z-index: 1;
22 | cursor: w-resize;
23 | }
24 |
25 | a:last-child {
26 | grid-column: 2/3;
27 | cursor: e-resize;
28 | }
29 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/demo/demo.component.html:
--------------------------------------------------------------------------------
1 |
2 | {{ pageId$ | async }}
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/demo/demo.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | import { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';
3 | import { pluck, tap } from 'rxjs';
4 |
5 | @Component({
6 | selector: 'app-demo',
7 | templateUrl: './demo.component.html',
8 | styleUrls: ['./demo.component.css']
9 | })
10 | export class DemoComponent implements OnInit {
11 | pageId = this.route.snapshot.params.id;
12 | pageId$ = this.route.params.pipe(
13 | pluck('id'),
14 | tap(id => (this.pageId = id))
15 | );
16 |
17 | constructor(private route: ActivatedRoute) {}
18 |
19 | ngOnInit() {}
20 | }
21 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/demo/demo.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 |
4 | import { DemoRoutingModule } from './demo-routing.module';
5 | import { DemoComponent } from './demo.component';
6 |
7 | @NgModule({
8 | declarations: [DemoComponent],
9 | imports: [CommonModule, DemoRoutingModule]
10 | })
11 | export class DemoModule {}
12 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/dist/.nx-results:
--------------------------------------------------------------------------------
1 | {
2 | "command": "build",
3 | "results": {
4 | "plugins-base-href-rewrite": false
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/exclude/exclude-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 |
4 | import { ExcludeComponent } from './exclude.component';
5 |
6 | const routes: Routes = [
7 | { path: 'present', component: ExcludeComponent },
8 | { path: 'notpresent', component: ExcludeComponent }
9 | ];
10 |
11 | @NgModule({
12 | imports: [RouterModule.forChild(routes)],
13 | exports: [RouterModule]
14 | })
15 | export class ExcludeRoutingModule {}
16 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/exclude/exclude.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-exclude',
5 | template: `
6 | exclude works!
7 | `,
8 | styles: [``]
9 | })
10 | export class ExcludeComponent implements OnInit {
11 | constructor() {}
12 |
13 | ngOnInit() {}
14 | }
15 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/exclude/exclude.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 |
4 | import { ExcludeRoutingModule } from './exclude-routing.module';
5 | import { ExcludeComponent } from './exclude.component';
6 |
7 | @NgModule({
8 | declarations: [ExcludeComponent],
9 | imports: [CommonModule, ExcludeRoutingModule]
10 | })
11 | export class ExcludeModule {}
12 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/manual-idle/manual-idle-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 |
4 | import { ManualIdleComponent } from './manual-idle.component';
5 |
6 | const routes: Routes = [{ path: '', component: ManualIdleComponent }];
7 |
8 | @NgModule({
9 | imports: [RouterModule.forChild(routes)],
10 | exports: [RouterModule]
11 | })
12 | export class ManualIdleRoutingModule {}
13 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/manual-idle/manual-idle.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sample-blog/src/app/manual-idle/manual-idle.component.css
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/manual-idle/manual-idle.component.html:
--------------------------------------------------------------------------------
1 | manual-idle works!
2 | {{ text }}
3 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/manual-idle/manual-idle.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 |
4 | import { ManualIdleRoutingModule } from './manual-idle-routing.module';
5 | import { ManualIdleComponent } from './manual-idle.component';
6 |
7 | @NgModule({
8 | declarations: [ManualIdleComponent],
9 | imports: [CommonModule, ManualIdleRoutingModule]
10 | })
11 | export class ManualIdleModule {}
12 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/pagenotfound/pagenotfound-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 |
4 | import { PagenotfoundComponent } from './pagenotfound.component';
5 |
6 | const routes: Routes = [{ path: '', component: PagenotfoundComponent }];
7 |
8 | @NgModule({
9 | imports: [RouterModule.forChild(routes)],
10 | exports: [RouterModule]
11 | })
12 | export class PagenotfoundRoutingModule {}
13 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/pagenotfound/pagenotfound.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sample-blog/src/app/pagenotfound/pagenotfound.component.css
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/pagenotfound/pagenotfound.component.html:
--------------------------------------------------------------------------------
1 | pagenotfound works!
2 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/pagenotfound/pagenotfound.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-pagenotfound',
5 | templateUrl: './pagenotfound.component.html',
6 | styleUrls: ['./pagenotfound.component.css']
7 | })
8 | export class PagenotfoundComponent implements OnInit {
9 | constructor() {}
10 |
11 | ngOnInit() {}
12 | }
13 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/pagenotfound/pagenotfound.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 |
4 | import { PagenotfoundRoutingModule } from './pagenotfound-routing.module';
5 | import { PagenotfoundComponent } from './pagenotfound.component';
6 |
7 | @NgModule({
8 | declarations: [PagenotfoundComponent],
9 | imports: [CommonModule, PagenotfoundRoutingModule]
10 | })
11 | export class PagenotfoundModule {}
12 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/slow/slow-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 |
4 | import { SlowComponent } from './slow.component';
5 |
6 | const routes: Routes = [{ path: '', component: SlowComponent }];
7 |
8 | @NgModule({
9 | imports: [RouterModule.forChild(routes)],
10 | exports: [RouterModule]
11 | })
12 | export class SlowRoutingModule {}
13 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/slow/slow.component.ts:
--------------------------------------------------------------------------------
1 | import { HttpClient } from '@angular/common/http';
2 | import { Component } from '@angular/core';
3 | import { isScullyGenerated } from '@scullyio/ng-lib';
4 | import { first } from 'rxjs';
5 |
6 | @Component({
7 | selector: 'app-slow',
8 | template: `
9 | slow works!
10 | Scully Not Generated
11 | Scully Generated
12 | `,
13 | styles: [``],
14 | })
15 | export class SlowComponent {
16 | isGenerated = isScullyGenerated();
17 |
18 | delay$ = this.http.get('/api/slow/2000');
19 |
20 | constructor(private http: HttpClient) {
21 | this.delay$.pipe(first()).subscribe();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/slow/slow.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 |
4 | import { SlowRoutingModule } from './slow-routing.module';
5 | import { SlowComponent } from './slow.component';
6 |
7 | @NgModule({
8 | declarations: [SlowComponent],
9 | imports: [CommonModule, SlowRoutingModule]
10 | })
11 | export class SlowModule {}
12 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/static/static-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 |
4 | import { StaticComponent } from './static.component';
5 |
6 | const routes: Routes = [
7 | { path: ':topLevel', component: StaticComponent },
8 | { path: '', component: StaticComponent, pathMatch: 'full' }
9 | ];
10 |
11 | @NgModule({
12 | imports: [RouterModule.forChild(routes)],
13 | exports: [RouterModule]
14 | })
15 | export class StaticRoutingModule {}
16 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/static/static.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 |
4 | import { StaticRoutingModule } from './static-routing.module';
5 | import { StaticComponent } from './static.component';
6 |
7 | @NgModule({
8 | declarations: [StaticComponent],
9 | imports: [CommonModule, StaticRoutingModule]
10 | })
11 | export class StaticModule {}
12 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/tss-resolver/tss-resolver-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { RouterModule, Routes } from '@angular/router';
3 | import { TssResolverComponent } from './tss-resolver.component';
4 | import { UserResolver } from './user.resolver';
5 |
6 | const routes: Routes = [
7 | {
8 | path: '',
9 | component: TssResolverComponent,
10 | resolve: {
11 | user: UserResolver,
12 | },
13 | },
14 | ];
15 |
16 | @NgModule({
17 | imports: [RouterModule.forChild(routes)],
18 | exports: [RouterModule],
19 | })
20 | export class TssResolverRoutingModule {}
21 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/tss-resolver/tss-resolver.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sample-blog/src/app/tss-resolver/tss-resolver.component.css
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/tss-resolver/tss-resolver.component.html:
--------------------------------------------------------------------------------
1 |
2 | User Data
3 |
4 |
5 | Id
6 | {{ user.id }}
7 | Name
8 | {{ user.name }}
9 | email
10 | {{ user.email }}
11 | company
12 | {{ user.company.name }}
13 |
14 |
15 | {{ user.company.catchPhrase }}
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/tss-resolver/tss-resolver.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | import { ActivatedRoute } from '@angular/router';
3 | import { pluck, tap } from 'rxjs';
4 |
5 | @Component({
6 | selector: 'scullyio-tss-resolver',
7 | templateUrl: './tss-resolver.component.html',
8 | styleUrls: ['./tss-resolver.component.css'],
9 | })
10 | export class TssResolverComponent implements OnInit {
11 | user$ = this.route.data.pipe(pluck('user'));
12 |
13 | constructor(private route: ActivatedRoute) {}
14 |
15 | ngOnInit(): void {}
16 | }
17 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/tss-resolver/tss-resolver.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 |
4 | import { TssResolverRoutingModule } from './tss-resolver-routing.module';
5 | import { TssResolverComponent } from './tss-resolver.component';
6 |
7 | @NgModule({
8 | declarations: [TssResolverComponent],
9 | imports: [CommonModule, TssResolverRoutingModule],
10 | })
11 | export class TssResolverModule {}
12 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/user/post/post.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sample-blog/src/app/user/post/post.component.css
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/user/post/post.component.html:
--------------------------------------------------------------------------------
1 | Post details
2 |
3 | {{ post.title }}
4 |
5 | {{ post.body }}
6 |
7 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/user/posts/posts.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sample-blog/src/app/user/posts/posts.component.css
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/user/posts/posts.component.html:
--------------------------------------------------------------------------------
1 | User posts
2 |
9 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/user/user.component.css:
--------------------------------------------------------------------------------
1 | a {
2 | display: inline-block;
3 | padding: 5px;
4 | margin: 10px 3px;
5 | width: 100px;
6 | border-radius: 4px;
7 | background-color: royalblue;
8 | color: white;
9 | text-align: center;
10 | text-decoration: none;
11 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
12 | transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
13 | }
14 |
15 | a:hover {
16 | box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);
17 | }
18 |
19 | a:active {
20 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
21 | }
22 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/user/user.module.ts:
--------------------------------------------------------------------------------
1 | import { CommonModule } from '@angular/common';
2 | import { NgModule } from '@angular/core';
3 | import { PostComponent } from './post/post.component';
4 | import { PostsComponent } from './posts/posts.component';
5 | import { UserRoutingModule } from './user-routing.module';
6 | import { UserComponent } from './user.component';
7 | import { UsersComponent } from './users/users.component';
8 |
9 | @NgModule({
10 | declarations: [UserComponent, UsersComponent, PostsComponent, PostComponent],
11 | imports: [CommonModule, UserRoutingModule]
12 | })
13 | export class UserModule {}
14 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/user/users/users.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sample-blog/src/app/user/users/users.component.css
--------------------------------------------------------------------------------
/apps/sample-blog/src/app/user/users/users.component.html:
--------------------------------------------------------------------------------
1 | Users
2 |
3 |
4 |
5 |
6 | Id
7 | Username
8 |
9 |
10 |
11 | {{ user.id }}
12 |
13 |
14 | {{ user.name }}
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sample-blog/src/assets/.gitkeep
--------------------------------------------------------------------------------
/apps/sample-blog/src/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true
3 | };
4 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sample-blog/src/favicon.ico
--------------------------------------------------------------------------------
/apps/sample-blog/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | sample-blog
6 |
7 |
8 |
9 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/apps/sample-blog/src/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | document.addEventListener('DOMContentLoaded', () => {
12 | platformBrowserDynamic()
13 | .bootstrapModule(AppModule)
14 | .catch(err => console.error(err));
15 | });
16 |
--------------------------------------------------------------------------------
/apps/sample-blog/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../out-tsc/app",
5 | "types": ["node"],
6 | "strict": true
7 | },
8 | "files": ["src/main.ts", "src/polyfills.ts"],
9 | "include": ["src/**/*.d.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/apps/sample-blog/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"]
5 | },
6 | "files": [],
7 | "include": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.spec.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/apps/sample-blog/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"]
7 | },
8 | "files": ["src/test-setup.ts"],
9 | "include": ["**/*.spec.ts", "**/*.d.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/apps/sample-blog/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tslint.json",
3 | "rules": {
4 | "directive-selector": [true, "attribute", "scullyio", "camelCase"],
5 | "component-selector": [true, "element", "scullyio", "kebab-case"]
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/apps/scully-docs/.browserslistrc:
--------------------------------------------------------------------------------
1 | and_chr 98
2 | chrome 97
3 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/components/footer/footer.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterModule } from '@angular/router';
4 | import { FooterComponent } from './component/footer.component';
5 |
6 | @NgModule({
7 | declarations: [FooterComponent],
8 | exports: [FooterComponent],
9 | imports: [CommonModule, RouterModule],
10 | })
11 | export class FooterModule {}
12 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/components/footer/index.ts:
--------------------------------------------------------------------------------
1 | export * from './footer.module';
2 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/components/header/header.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterModule } from '@angular/router';
4 |
5 | import { NavHeaderComponent } from './component/nav-header/nav-header.component';
6 |
7 | @NgModule({
8 | declarations: [NavHeaderComponent],
9 | exports: [NavHeaderComponent],
10 | imports: [CommonModule, RouterModule],
11 | })
12 | export class HeaderModule {}
13 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/components/header/index.ts:
--------------------------------------------------------------------------------
1 | export * from './header.module';
2 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/components/lang-select/lang-select.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterModule } from '@angular/router';
4 |
5 | import { LangSelectComponent } from './component/lang-select/lang-select.component';
6 |
7 | @NgModule({
8 | declarations: [LangSelectComponent],
9 | exports: [LangSelectComponent],
10 | imports: [CommonModule, RouterModule],
11 | })
12 | export class LangSelectModule {}
13 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/components/nav-list/nav-list.module.ts:
--------------------------------------------------------------------------------
1 | import { CommonModule } from '@angular/common';
2 | import { NgModule } from '@angular/core';
3 | import { RouterModule } from '@angular/router';
4 | import { NavItemComponent } from './navitem';
5 |
6 | @NgModule({
7 | declarations: [NavItemComponent],
8 | exports: [NavItemComponent],
9 | imports: [CommonModule, RouterModule],
10 | })
11 | export class NavListModule {}
12 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/page-not-found.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'scullyio-app-404',
5 | template: `
6 | Page not found
7 |
8 | `,
9 | })
10 | export class PageNotFoundComponent implements OnInit {
11 | constructor() {}
12 |
13 | ngOnInit() {}
14 | }
15 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/pages/docs/docs-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 |
4 | import { DocsPageComponent } from './page/docs.page.component';
5 |
6 | const routes: Routes = [
7 | {
8 | path: '',
9 | component: DocsPageComponent,
10 | children: [
11 | { path: ':slug', component: DocsPageComponent },
12 | { path: '**', component: DocsPageComponent },
13 | ],
14 | },
15 | ];
16 |
17 | @NgModule({
18 | imports: [RouterModule.forChild(routes)],
19 | exports: [RouterModule],
20 | })
21 | export class DocsRoutingModule {}
22 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/pages/docs/docs.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { ScullyLibModule } from '@scullyio/ng-lib';
4 |
5 | import { FooterModule } from '../../components/footer';
6 | import { DocsRoutingModule } from './docs-routing.module';
7 |
8 | import { DocsPageComponent } from './page/docs.page.component';
9 |
10 | @NgModule({
11 | declarations: [DocsPageComponent],
12 | imports: [CommonModule, ScullyLibModule, FooterModule, DocsRoutingModule],
13 | })
14 | export class DocsModule {}
15 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/pages/landing/components/quote/quote.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, ViewEncapsulation } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'section.scullyio-landing-quote',
5 | encapsulation: ViewEncapsulation.None,
6 | template: `
7 |
8 | Nothing will make your Angular project as fast as using Scully and embracing Jamstack.
9 |
10 |
11 | - Aaron Frost
12 | Scully Core Team Member
13 |
14 | `,
15 | })
16 | export class LandingQuoteComponent {}
17 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/pages/landing/landing-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 |
4 | import { LandingPageComponent } from './page/landing.component';
5 |
6 | const routes: Routes = [{ path: '', component: LandingPageComponent }];
7 |
8 | @NgModule({
9 | imports: [RouterModule.forChild(routes)],
10 | exports: [RouterModule],
11 | })
12 | export class LandingRoutingModule {}
13 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/app/pages/landing/page/landing.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, ViewEncapsulation } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'scullyio-landing-page',
5 | encapsulation: ViewEncapsulation.None,
6 | template: `
7 |
8 |
9 |
10 |
11 |
12 | `,
13 | })
14 | export class LandingPageComponent {}
15 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/.gitkeep
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/beta-badge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/beta-badge.png
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/footer-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/footer-bg.png
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/icons/angle-double-right-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/icons/angular-brands.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/icons/arrow-left-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/icons/arrow-right-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/icons/bars-regular.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/icons/book-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/icons/check-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/icons/chevron-right-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/icons/file-exclamation-regular.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/icons/pen-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/icons/play-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/1800contacts-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/1800contacts-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/angularenterprise-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/angularenterprise-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/appsatease-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/appsatease-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/collage-club.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/collage-club.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/configcat-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/configcat-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/desitrails-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/desitrails-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/devjobsscanner-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/devjobsscanner-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/essentialclinic-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/essentialclinic-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/gammastream-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/gammastream-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/glitchtip-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/glitchtip-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/learning.dev-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/learning.dev-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/ledgedevops-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/ledgedevops-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/mnm-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/mnm-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/nicolatoledo-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/nicolatoledo-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/owlly-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/owlly-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/scully-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/scully-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/assets/img/showcase/solocoding-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/assets/img/showcase/solocoding-01.jpg
--------------------------------------------------------------------------------
/apps/scully-docs/src/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true
3 | };
4 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/scully-docs/src/favicon.ico
--------------------------------------------------------------------------------
/apps/scully-docs/src/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic()
12 | .bootstrapModule(AppModule)
13 | .catch(err => console.error(err));
14 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/styles/_beta.css:
--------------------------------------------------------------------------------
1 | img.badge {
2 | position: absolute;
3 | top: 0;
4 | left: 0;
5 | height: 100%;
6 | width: auto;
7 | z-index: 99999;
8 | }
9 |
--------------------------------------------------------------------------------
/apps/scully-docs/src/styles/links.css:
--------------------------------------------------------------------------------
1 | .docs-page-content a:not([class]) {
2 | display: inline-block;
3 | padding: 0 2px;
4 | color: var(--scully-link-blue);
5 | font-weight: 800;
6 | }
7 | .docs-page-content a:not([class]):hover {
8 | color: var(--scully-link-blue-light);
9 | }
10 |
11 | .docs-page-content h2 a {
12 | font-weight: 900;
13 | }
14 |
--------------------------------------------------------------------------------
/apps/scully-docs/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "types": []
6 | },
7 | "files": ["src/main.ts", "src/polyfills.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/apps/scully-docs/tsconfig.editor.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "include": ["**/*.ts"],
4 | "compilerOptions": {
5 | "types": ["jest", "node"]
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/apps/scully-docs/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"],
5 | "experimentalDecorators": true
6 | },
7 | "files": [],
8 | "include": [],
9 | "references": [
10 | {
11 | "path": "./tsconfig.app.json"
12 | },
13 | {
14 | "path": "./tsconfig.spec.json"
15 | },
16 | {
17 | "path": "./tsconfig.editor.json"
18 | },
19 | {
20 | "path": "./tsconfig.editor.json"
21 | }
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------
/apps/scully-docs/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"]
7 | },
8 | "files": ["src/test-setup.ts"],
9 | "include": ["**/*.spec.ts", "**/*.d.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/apps/scully-docs/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tslint.json",
3 | "rules": {
4 | "directive-selector": [true, "attribute", "scullyio", "camelCase"],
5 | "component-selector": [true, "element", "scullyio", "kebab-case"]
6 | },
7 | "linterOptions": {
8 | "exclude": ["!**/*"]
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/apps/sps-sample/.browserslistrc:
--------------------------------------------------------------------------------
1 | and_chr 98
2 | chrome 97
3 |
--------------------------------------------------------------------------------
/apps/sps-sample/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | displayName: 'sps-sample',
3 | preset: '../../jest.preset.js',
4 | setupFilesAfterEnv: ['/src/test-setup.ts'],
5 | globals: {
6 | 'ts-jest': {
7 | tsconfig: '/tsconfig.spec.json',
8 | stringifyContentPathRegex: '\\.(html|svg)$',
9 | },
10 | },
11 | coverageDirectory: '../../coverage/apps/sps-sample',
12 | snapshotSerializers: [
13 | 'jest-preset-angular/build/serializers/no-ng-attributes',
14 | 'jest-preset-angular/build/serializers/ng-snapshot',
15 | 'jest-preset-angular/build/serializers/html-comment',
16 | ],
17 | };
18 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/about/about-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { RouterModule, Routes } from '@angular/router';
3 | import { AboutComponent } from './about.component';
4 |
5 | const routes: Routes = [{ path: '', component: AboutComponent }];
6 |
7 | @NgModule({
8 | imports: [RouterModule.forChild(routes)],
9 | exports: [RouterModule]
10 | })
11 | export class AboutRoutingModule { }
12 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/about/about.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sps-sample/src/app/about/about.component.css
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/about/about.component.html:
--------------------------------------------------------------------------------
1 | about works!
2 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/about/about.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'scullyio-about',
5 | templateUrl: './about.component.html',
6 | styleUrls: ['./about.component.css']
7 | })
8 | export class AboutComponent implements OnInit {
9 |
10 | constructor() { }
11 |
12 | ngOnInit(): void {
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/about/about.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { Routes, RouterModule } from '@angular/router';
4 |
5 | import { AboutRoutingModule } from './about-routing.module';
6 | import { AboutComponent } from './about.component';
7 |
8 | const routes: Routes = [
9 | { path: '', component: AboutComponent }
10 | ];
11 |
12 | @NgModule({
13 | declarations: [AboutComponent],
14 | imports: [
15 | CommonModule,
16 | AboutRoutingModule,
17 | RouterModule.forChild(routes)
18 | ]
19 | })
20 | export class AboutModule { }
21 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'scullyio-root',
5 | template: `
6 |
7 | Home
8 | About
9 | user 100
10 | demo 100
11 |
12 |
13 |
19 | `,
20 |
21 | styles: [``],
22 | })
23 | export class AppComponent {
24 | title = 'sps-sample';
25 | constructor() {}
26 | }
27 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/app.sps.module.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode, NgModule } from '@angular/core';
2 | import { AppComponent } from './app.component';
3 | import { AppModule } from './app.module';
4 | import { ScullyPlatformServerModule } from '@scullyio/platform-server'
5 |
6 |
7 | /**
8 | * the platform server should be running in production mode.
9 | */
10 | enableProdMode();
11 |
12 |
13 | @NgModule({
14 | imports: [
15 | AppModule,
16 | ScullyPlatformServerModule,
17 | ],
18 | providers: [],
19 | bootstrap: [AppComponent],
20 | })
21 | export default class AppSPSModule {}
22 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/demo/demo-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { RouterModule, Routes } from '@angular/router';
3 | import { DemoComponent } from './demo.component';
4 |
5 | const routes: Routes = [{ path: '', component: DemoComponent }];
6 |
7 | @NgModule({
8 | imports: [RouterModule.forChild(routes)],
9 | exports: [RouterModule]
10 | })
11 | export class DemoRoutingModule { }
12 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/demo/demo.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { Routes, RouterModule } from '@angular/router';
4 |
5 | import { DemoRoutingModule } from './demo-routing.module';
6 | import { DemoComponent } from './demo.component';
7 |
8 | const routes: Routes = [
9 | { path: '', component: DemoComponent }
10 | ];
11 |
12 | @NgModule({
13 | declarations: [DemoComponent],
14 | imports: [
15 | CommonModule,
16 | DemoRoutingModule,
17 | RouterModule.forChild(routes)
18 | ]
19 | })
20 | export class DemoModule { }
21 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/docs/docs-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { RouterModule, Routes } from '@angular/router';
3 | import { DocsComponent } from './docs.component';
4 |
5 | const routes: Routes = [
6 | { path: '/:slug', component: DocsComponent },
7 | { path: '**', component: DocsComponent },
8 | ];
9 |
10 | @NgModule({
11 | imports: [RouterModule.forChild(routes)],
12 | exports: [RouterModule]
13 | })
14 | export class DocsRoutingModule { }
15 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/docs/docs.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sps-sample/src/app/docs/docs.component.css
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/docs/docs.component.html:
--------------------------------------------------------------------------------
1 | docs works!
2 |
3 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/docs/docs.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'scullyio-docs',
5 | templateUrl: './docs.component.html',
6 | styleUrls: ['./docs.component.css']
7 | })
8 | export class DocsComponent implements OnInit {
9 |
10 | constructor() { }
11 |
12 | ngOnInit(): void {
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/docs/docs.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { Routes, RouterModule } from '@angular/router';
4 |
5 | import { DocsRoutingModule } from './docs-routing.module';
6 | import { DocsComponent } from './docs.component';
7 | import { ScullyLibModule } from '@scullyio/ng-lib';
8 |
9 | const routes: Routes = [
10 | { path: ':slug', component: DocsComponent }
11 | ];
12 |
13 | @NgModule({
14 | declarations: [
15 | DocsComponent
16 | ],
17 | imports: [
18 | CommonModule,
19 | DocsRoutingModule,
20 | ScullyLibModule,
21 | RouterModule.forChild(routes)
22 | ]
23 | })
24 | export class DocsModule { }
25 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/home/home-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { RouterModule, Routes } from '@angular/router';
3 | import { HomeComponent } from './home.component';
4 |
5 | const routes: Routes = [{ path: '', component: HomeComponent }];
6 |
7 | @NgModule({
8 | imports: [RouterModule.forChild(routes)],
9 | exports: [RouterModule]
10 | })
11 | export class HomeRoutingModule { }
12 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/home/home.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sps-sample/src/app/home/home.component.css
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/home/home.component.html:
--------------------------------------------------------------------------------
1 | home works!
2 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/home/home.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'scullyio-home',
5 | templateUrl: './home.component.html',
6 | styleUrls: ['./home.component.css']
7 | })
8 | export class HomeComponent implements OnInit {
9 |
10 | constructor() { }
11 |
12 | ngOnInit(): void {
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/home/home.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { Routes, RouterModule } from '@angular/router';
4 |
5 | import { HomeRoutingModule } from './home-routing.module';
6 | import { HomeComponent } from './home.component';
7 |
8 | const routes: Routes = [
9 | { path: '', component: HomeComponent }
10 | ];
11 |
12 | @NgModule({
13 | declarations: [HomeComponent],
14 | imports: [
15 | CommonModule,
16 | HomeRoutingModule,
17 | RouterModule.forChild(routes)
18 | ]
19 | })
20 | export class HomeModule { }
21 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/user/user-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { RouterModule, Routes } from '@angular/router';
3 | import { UserComponent } from './user.component';
4 |
5 | const routes: Routes = [{ path: '', component: UserComponent }];
6 |
7 | @NgModule({
8 | imports: [RouterModule.forChild(routes)],
9 | exports: [RouterModule]
10 | })
11 | export class UserRoutingModule { }
12 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/app/user/user.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { Routes, RouterModule } from '@angular/router';
4 |
5 | import { UserRoutingModule } from './user-routing.module';
6 | import { UserComponent } from './user.component';
7 |
8 | const routes: Routes = [
9 | { path: '', component: UserComponent }
10 | ];
11 |
12 | @NgModule({
13 | declarations: [UserComponent],
14 | imports: [
15 | CommonModule,
16 | UserRoutingModule,
17 | RouterModule.forChild(routes)
18 | ]
19 | })
20 | export class UserModule { }
21 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sps-sample/src/assets/.gitkeep
--------------------------------------------------------------------------------
/apps/sps-sample/src/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true,
3 | };
4 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/apps/sps-sample/src/favicon.ico
--------------------------------------------------------------------------------
/apps/sps-sample/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | UniversalSample
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic()
12 | .bootstrapModule(AppModule)
13 | .catch((err) => console.error(err));
14 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/styles.css:
--------------------------------------------------------------------------------
1 | /* You can add global styles to this file, and also import other style files */
2 |
--------------------------------------------------------------------------------
/apps/sps-sample/src/test-setup.ts:
--------------------------------------------------------------------------------
1 | // import 'jest-preset-angular';
2 | import 'jest-preset-angular/setup-jest';
3 |
--------------------------------------------------------------------------------
/apps/sps-sample/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "types": []
6 | },
7 | "files": ["src/main.ts", "src/polyfills.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/apps/sps-sample/tsconfig.editor.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "include": ["**/*.ts"],
4 | "compilerOptions": {
5 | "types": ["jest", "node"]
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/apps/sps-sample/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.json",
3 | "files": [],
4 | "include": [],
5 | "references": [
6 | {
7 | "path": "./tsconfig.app.json"
8 | },
9 | {
10 | "path": "./tsconfig.spec.json"
11 | },
12 | {
13 | "path": "./tsconfig.editor.json"
14 | }
15 | ],
16 | "compilerOptions": {
17 | "forceConsistentCasingInFileNames": true,
18 | "strict": true,
19 | "noImplicitReturns": true,
20 | "noFallthroughCasesInSwitch": true
21 | },
22 | "angularCompilerOptions": {
23 | "strictInjectionParameters": true,
24 | "strictTemplates": true
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/apps/sps-sample/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"]
7 | },
8 | "files": ["src/test-setup.ts"],
9 | "include": ["**/*.spec.ts", "**/*.d.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/assets/1800contacts_logo_indigo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/1800contacts_logo_indigo.png
--------------------------------------------------------------------------------
/assets/hero-devs-logo-400x400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/hero-devs-logo-400x400.jpg
--------------------------------------------------------------------------------
/assets/hero-devs-logo-80x80.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/hero-devs-logo-80x80.jpg
--------------------------------------------------------------------------------
/assets/logos/PNG/Black/scullyio-icon-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/Black/scullyio-icon-black.png
--------------------------------------------------------------------------------
/assets/logos/PNG/Black/scullyio-logo-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/Black/scullyio-logo-black.png
--------------------------------------------------------------------------------
/assets/logos/PNG/Black/scullyio-wordmark-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/Black/scullyio-wordmark-black.png
--------------------------------------------------------------------------------
/assets/logos/PNG/Green/scullyio-icon-green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/Green/scullyio-icon-green.png
--------------------------------------------------------------------------------
/assets/logos/PNG/Green/scullyio-logo-green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/Green/scullyio-logo-green.png
--------------------------------------------------------------------------------
/assets/logos/PNG/Green/scullyio-wordmark-green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/Green/scullyio-wordmark-green.png
--------------------------------------------------------------------------------
/assets/logos/PNG/White/scullyio-icon-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/White/scullyio-icon-white.png
--------------------------------------------------------------------------------
/assets/logos/PNG/White/scullyio-logo-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/White/scullyio-logo-white.png
--------------------------------------------------------------------------------
/assets/logos/PNG/White/scullyio-wordmark-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/White/scullyio-wordmark-white.png
--------------------------------------------------------------------------------
/assets/logos/PNG/scullyio-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/scullyio-icon.png
--------------------------------------------------------------------------------
/assets/logos/PNG/scullyio-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/scullyio-logo.png
--------------------------------------------------------------------------------
/assets/logos/PNG/scullyio-wordmark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/PNG/scullyio-wordmark.png
--------------------------------------------------------------------------------
/assets/logos/scullyio-logo-base.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/scullyio-logo-base.pdf
--------------------------------------------------------------------------------
/assets/logos/scullyio-logo-source.ai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/scullyio-logo-source.ai
--------------------------------------------------------------------------------
/assets/logos/twitter/scullyio-twitter-cover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/twitter/scullyio-twitter-cover.png
--------------------------------------------------------------------------------
/assets/logos/twitter/scullyio-twitter-profile-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/assets/logos/twitter/scullyio-twitter-profile-icon.png
--------------------------------------------------------------------------------
/client_id:
--------------------------------------------------------------------------------
1 | 80cdc4d7-0bc3-4f35-bcba-8734037dc7fa
--------------------------------------------------------------------------------
/commitlint.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: ['@commitlint/config-conventional'],
3 | };
4 |
--------------------------------------------------------------------------------
/cypress.json:
--------------------------------------------------------------------------------
1 | {
2 | "baseUrl": "http://localhost:1668",
3 | "integrationFolder": "tests/cypress/integration",
4 | "fixturesFolder": "tests/cypress/fixtures",
5 | "pluginsFile": "tests/cypress/plugins/index.js",
6 | "screenshotsFolder": "tests/cypress/screenshots",
7 | "videosFolder": "tests/cypress/videos",
8 | "supportFile": "tests/cypress/support/index.js"
9 | }
10 |
--------------------------------------------------------------------------------
/demos/plugins/errorPlugin.js:
--------------------------------------------------------------------------------
1 | const { registerPlugin, logWarn } = require('@scullyio/scully');
2 |
3 | const errorPlugin = async (html, options) => {
4 | try {
5 | throw new Error(`new error`);
6 | } catch (e) {
7 | logWarn(`errorPlugin works!`);
8 | }
9 | return undefined;
10 | };
11 |
12 | const validator = async (config) => [];
13 | registerPlugin('postProcessByHtml', 'errorPlugin', errorPlugin, validator);
14 |
--------------------------------------------------------------------------------
/demos/plugins/voidPlugin.js:
--------------------------------------------------------------------------------
1 | const { configValidator, registerPlugin } = require('@scullyio/scully');
2 |
3 | const voidPlugin = async (route, options) => {
4 | /**
5 | * I don't do anything here,
6 | * just return an empty array
7 | * as that will effectively remove the route from the list
8 | * */
9 | return [];
10 | };
11 |
12 | const validator = async conf => [];
13 | registerPlugin('router', 'void', voidPlugin, validator);
14 |
--------------------------------------------------------------------------------
/depedencyHash.cjs:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const { createHash } = require('crypto');
4 | const pkg = require('./package.json');
5 | const { version, dependencies, devDependencies } = pkg;
6 |
7 | const hash = createHash('sha256');
8 | /** create a hash that is depending on _what_ depedencies are used, not on version or complete package.json */
9 | hash.update(JSON.stringify({ dependencies, devDependencies }));
10 |
11 | /** display it in the special format so GA can pick up the var */
12 | console.log(`::set-output name=dependencyHash::${hash.digest('hex')}`);
13 |
--------------------------------------------------------------------------------
/docs/Reference/legacy-support/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Legacy support
3 | lang: en
4 | position: 900
5 | ---
6 |
7 | # Scully Legacy support
8 |
9 | - [Angular v8](/docs/Reference/legacy-support/angular-v8)
10 | - [IE polyfills](/docs/Reference/legacy-support/polyfills)
11 | - Angular <12. Use Scully version 1 (`ng add scullyio/init@1`)
12 |
--------------------------------------------------------------------------------
/docs/Reference/legacy-support/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Soporte heredado
3 | lang: es
4 | position: 900
5 | ---
6 |
7 | # Soporte heredado para Scully
8 |
9 | - [Angular v8](/docs/Reference/legacy-support/angular-v8)
10 | - [IE polyfills](/docs/Reference/legacy-support/polyfills)
11 |
--------------------------------------------------------------------------------
/docs/Reference/ngLib/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Scully Library
3 | lang: en
4 | position: 100
5 | ---
6 |
7 | # Scully library features
8 |
9 | When you install Scully using the `ng add` schematics, our Angular library will also be installed.
10 | The library has some intergration features that enable you to utilize the full potential of Scully.
11 |
12 | - [ScullyRoutesService](/docs/Reference/ngLib/scully-routes-service)
13 | - [Scully-content](/docs/Reference/ngLib/scully-content-component)
14 | - [Idle-monitor](/docs/Reference/ngLib/idle-monitor-service)
15 | - [TransferStateService](/docs/Reference/ngLib/transfer-state-service)
16 | - [Utilities](/docs/Reference/ngLib/utility-methods)
17 |
--------------------------------------------------------------------------------
/docs/Reference/ngLib/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Librería Scully
3 | lang: es
4 | position: 100
5 | ---
6 |
7 | # Cracterísticas de la librería Scully
8 |
9 | Cuando instalas Scully utilizando el schematics `ng add`, nuestra libería Angular también será instalada.
10 | Lalibrería tiene algunas características de integración para habilitar todo el potencial de Scully.
11 |
12 | - [ScullyRoutesService](/docs/Reference/ngLib/scully-routes-service)
13 | - [Scully-content](/docs/Reference/ngLib/scully-content-component)
14 | - [Idle-monitor](/docs/Reference/ngLib/idle-monitor-service)
15 | - [TransferStateService](/docs/Reference/ngLib/transfer-state-service)
16 | - [Utilidades](/docs/Reference/ngLib/utility-methods)
17 |
--------------------------------------------------------------------------------
/docs/Reference/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Reference
3 | lang: en
4 | position: 200
5 | ---
6 |
7 | # Scully reference
8 |
9 | - [NG lib](/docs/Reference/ngLib/overview)
10 | - [Legacy support](/docs/Reference/legacy-support/overview)
11 |
--------------------------------------------------------------------------------
/docs/Reference/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Referencias
3 | lang: es
4 | position: 200
5 | ---
6 |
7 | # Referencias
8 |
9 | - [NG lib](/docs/Reference/ngLib/overview)
10 | - [Legacy support](/docs/Reference/legacy-support/overview)
11 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/built-in-plugins/adoc.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: adoc Plugin
3 | published: true
4 | lang: en
5 | position: 100
6 | ---
7 |
8 | # `adoc` Plugin
9 |
10 | ## Overview
11 |
12 | Adds capability to render adoc files as html.
13 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/built-in-plugins/adoc_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Complemento adoc
3 | published: true
4 | lang: es
5 | position: 100
6 | ---
7 |
8 | # Complemento `adoc`
9 |
10 | ## Visión General
11 |
12 | A
13 | Agrega la capacidad de renderizar archivos adoc como html
14 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/built-in-plugins/ignored.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: ignored Plugin
3 | published: true
4 | lang: en
5 | position: 100
6 | ---
7 |
8 | # `ignored` Plugin
9 |
10 |
13 |
14 | ## Overview
15 |
16 | Adds support for ignoring routes.
17 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/built-in-plugins/ignored_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Complemento `ignored`
3 | published: true
4 | lang: es
5 | position: 100
6 | ---
7 |
8 | # Complemento `ignored`
9 |
10 |
13 |
14 | ## Overview
15 |
16 | Permite ignorar rutas.
17 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/built-in-plugins/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Core Plugins
3 | lang: en
4 | published: true
5 | position: 100
6 | ---
7 |
8 | # Scully built in plugins
9 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/built-in-plugins/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Complementos principales
3 | lang: es
4 | published: true
5 | position: 100
6 | ---
7 |
8 | # Complementos desarrolados por Scully
9 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/built-in-plugins/router-.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: router Plugin
3 | published: true
4 | lang: en
5 | position: 100
6 | ---
7 |
8 | # `router` Plugin
9 |
10 | ## Overview
11 |
12 | Adds the route verbatim. Scully uses this plugin by default.
13 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/built-in-plugins/router-_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Complemento router
3 | published: true
4 | lang: es
5 | position: 100
6 | ---
7 |
8 | # Complemento `router`
9 |
10 | ## Visión General
11 |
12 | Permite agrgar rutas textualmente. Scully utiliza este complemento por defecto.
13 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/built-in-plugins/seoHrefOptimize.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: seoHrefOptimize Plugin
3 | published: true
4 | lang: en
5 | position: 100
6 | ---
7 |
8 | # `seoHrefOptimize` Plugin
9 |
10 | ## Overview
11 |
12 | Adds a trailing slash (`/`) to all routes that are in the routeService. Increases SEO scoring.
13 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/built-in-plugins/seoHrefOptimize_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Complemento seoHrefOptimize
3 | published: true
4 | lang: es
5 | position: 100
6 | ---
7 |
8 | # Complemento `seoHrefOptimize`
9 |
10 | ## Visión General
11 |
12 | Agregar una barra lateral (`/`) a todas las rutas que están en routeService. Esto aumenta la puntuación SEO.
13 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/community-plugins/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Community Plugins
3 | published: true
4 | lang: en
5 | position: 200
6 | ---
7 |
8 | ## Overview
9 |
10 | Scully has an rich community that provides a lot of value. In this section you will find all community plugins.
11 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/community-plugins/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Complementos de la Comunidad
3 | published: true
4 | lang: es
5 | position: 200
6 | ---
7 |
8 | ## Visión General
9 |
10 | Scully tiene un gran comunidad de mucho valor. En esta sección podrás encontrar todos los complementos de la comunidad.
11 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/custom-plugins/create-a-plugin-function.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Create
3 | published: true
4 | lang: en
5 | position: 130
6 | ---
7 |
8 | # Create a custom plugin
9 |
10 | A plugin is always a function that returns a promise. An async function is an easy way to build one.
11 | For example, if you want a plugin that does something silly like replacing strings in some piece of HTML you can do it like this:
12 |
13 | ```typescript
14 | async function replaceThings(html: string, route: handledRoute) {
15 | const replaceStrings = [[':)', '☺']];
16 | replaceString.forEach(
17 | (find, replace) => (html = html.split(find).join(replace))
18 | );
19 | return html;
20 | }
21 | ```
22 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/custom-plugins/register-a-new-plugin.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Register a New Plugin
3 | published: true
4 | lang: en
5 | position: 10
6 | ---
7 |
8 | # Register a new plugin
9 |
10 |
13 |
14 | ## Overview
15 |
16 | To register a new plugin into our plugin system the [registerPlugin function](/docs/Reference/scully-api/registerPlugin) is your way in.
17 | You can see all the options available in the API docs.
18 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/custom-plugins/register-a-new-plugin_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Registrar un Nuevo Complemento
3 | published: true
4 | lang: es
5 | position: 10
6 | ---
7 |
8 | # Registrar un Nuevo Complemento
9 |
10 |
13 |
14 | ## Visión General
15 |
16 | Para registrar un nuevo complemento dentro de nuestro sistema de complementos, la [función registerPlugin](/docs/Reference/scully-api/registerPlugin) es la indicada.
17 | Puedes ver todas las opciones disponibles en la documentación de la API.
18 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/custom-plugins/use-a-custom-plugin.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Use a custom plugin
3 | published: true
4 | lang: en
5 | position: 130
6 | ---
7 |
8 | # Use a custom plugin
9 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/custom-plugins/use-a-custom-plugin_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Usar un complemento personalizado
3 | published: true
4 | lang: es
5 | position: 130
6 | ---
7 |
8 | # Usar un complemento personalizado
9 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/types/allDone_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Tipo de complemento allDone
3 | published: true
4 | lang: es
5 | position: 100
6 | ---
7 |
8 | # Tipo de complemento `allDone`
9 |
10 | ## Visión General
11 |
12 | Un complemento `allDone` es como un complemento [`routeDiscoveryDone`](/docs/Reference/plugins/types/routeDiscoveryDone), excepto que éste es llamado _después_ de que Scully termine de ejecutar todos los procesos.
13 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/types/routeDiscoveryDone_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Tipo de complemento routeDiscoveryDone
3 | published: true
4 | lang: es
5 | position: 100
6 | ---
7 |
8 | # Tipo de complemento `routeDiscoveryDone`
9 |
10 | ## Visión General
11 |
12 | Este tipo de complemento es llamado automáticamente luego de todas las rutas han sido recolectadas y todos los complementos ruter estén finalizados.
13 | Recibe una copia de un arreglo `handledRoute` y devuelve `void`.
14 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/types/routeRenderer.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: the routeRenderer plugin
3 | published: true
4 | lang: en
5 | position: 100
6 | ---
7 |
8 | # `routeRenderer` Plugin
9 |
10 | The `routeRenderer` is a scullySystem plugin that can be swapped out to use a different way to render the pages.
11 | It receives a [handledRoute](/docs/concepts/handled-routes.md), and should return a string containing the entire contents of the page.
12 |
13 | Its interface is:
14 | ```ts
15 | (route:HandledRoute) => Promise
16 | ```
17 |
18 | ### responisilities.
19 | This plugin is responsible for rendering the actual content from the Angular app. When it throws, it will be retried 3 times before failure
20 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/types/system.md:
--------------------------------------------------------------------------------
1 | ---
2 | lang: en
3 | position: 500
4 | published: true
5 | title: System Plugins
6 | ---
7 |
8 | # The Scully system plugins.
9 |
10 | Scully has a category of system plugins. Unlike the other plugin catagories those plugins don't have a set interface. Those are used by Scully internally.
11 | It is possible to replace any of the plugins, including system plugins. This gives you an easy way to extend the functionality of Scully
12 |
--------------------------------------------------------------------------------
/docs/Reference/plugins/types/system_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | lang: es
3 | position: 500
4 | published: true
5 | title: Sistema de complemento
6 | ---
7 |
8 | # Sistema de complementos de Scully
9 |
10 | Scully tiene un sistema de complementos. A diferencia de las otras categorías de complementos, esos complementos no tienen una insterfaz establecida y utilizan un símbolo como identificarlos.
11 |
--------------------------------------------------------------------------------
/docs/Reference/schematics/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Scully Schematics
3 | published: true
4 | lang: en
5 | position: 100
6 | ---
7 |
8 | # Schematics overview
9 |
10 | Scully comes with a number of schematics to support the integration with your Angular app.
11 |
12 | [Install Scully in your Angular app](/docs/Reference/schematics/create-scully-files-with-ng-add).
13 | [Create a blog](/docs/Reference/schematics/create-blog-config).
14 | [Create markdown skeleton](/docs/Reference/schematics/create-markdown-files-and-skeleton).
15 |
--------------------------------------------------------------------------------
/docs/Reference/schematics/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Schematics de Scully
3 | published: true
4 | lang: es
5 | position: 100
6 | ---
7 |
8 | # Visión General
9 |
10 | Scully viene con una serie de schematics para soportar la integración con tu aplicación Angular.
11 |
12 | [Instala Scully en tu aplicación Angular](/docs/Reference/schematics/create-scully-files-with-ng-add).
13 | [Crea un blog](/docs/Reference/schematics/create-blog-config).
14 | [Crear archivos markdown](/docs/Reference/schematics/create-markdown-files-and-skeleton).
15 |
--------------------------------------------------------------------------------
/docs/Reference/utilities/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 3rth Party integrations
3 | published: true
4 | lang: en
5 | position: 170
6 | ---
7 |
8 | # Utilities
9 |
10 | ## Overview
11 |
12 | Scully works well in combination with other tools and utilities:
13 |
14 | - Github Actions:
15 | - [Scully Publish](/docs/Reference/utilities/scully-publish)
16 | - Syntax Highlighting:
17 | - [PrismJS](/docs/Reference/utilities/prism-js)
18 |
--------------------------------------------------------------------------------
/docs/Reference/utilities/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Integraciones de terceros
3 | published: true
4 | lang: es
5 | position: 170
6 | ---
7 |
8 | # Utilidades
9 |
10 | ## Visión General
11 |
12 | Scully trabaja muy bien combinado con otras herramientas y utilidades:
13 |
14 | - Github Actions:
15 | - [Scully Publish](/docs/Reference/utilities/scully-publish)
16 | - Syntax Highlighting:
17 | - [PrismJS](/docs/Reference/utilities/prism-js)
18 |
--------------------------------------------------------------------------------
/docs/Reference/utilities/scully-publish.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Scully Publish Github Action
3 | published: true
4 | lang: en
5 | position: 100
6 | ---
7 |
8 | # Scully Publish Github Action
9 |
10 | ## Overview
11 |
12 | The Github Action [Scully Publish](https://github.com/marketplace/actions/scully-publish) lets you easily build and deploy your Scully site to [GitHub Pages](https://pages.github.com/).
13 |
--------------------------------------------------------------------------------
/docs/Reference/utilities/scully-publish_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Publicando Scully con Github Action
3 | published: true
4 | lang: es
5 | position: 100
6 | ---
7 |
8 | # Publicando Scully con Github Action
9 |
10 | ## Visión General
11 |
12 | Github Action [Scully Publish](https://github.com/marketplace/actions/scully-publish) te permite compilar y desplegar fácilmente tu sitio Scully en [GitHub Pages](https://pages.github.com/).
13 |
--------------------------------------------------------------------------------
/docs/community/contributing.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Contributing
3 | lang: en
4 | published: true
5 | position: 100
6 | ---
7 |
8 | # Contributing
9 |
10 | Do you want to contribute to Scully or share your experience with the community?
11 | Please check our [CONTRIBUTING](https://github.com/scullyio/scully/blob/main/CONTRIBUTING.md) guidelines.
12 |
13 | The team would love your feedback and to hear how you're using Scully with other tools!
14 |
--------------------------------------------------------------------------------
/docs/community/contributing_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Contribuyendo
3 | lang: es
4 | published: true
5 | position: 100
6 | ---
7 |
8 | # Contribuyendo
9 |
10 | Quieres contribuir a Scully o compartir tu experiencia con la comunidad?
11 | Por favor chequea nuestra guía [CONTRIBUYENDO](https://github.com/scullyio/scully/blob/main/CONTRIBUTING.md).
12 |
13 | ¡Al equipo le encanta conocer tus comentarios y saber que Scully se está usando con otras herramientas!
14 |
--------------------------------------------------------------------------------
/docs/community/issues.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Issues
3 | lang: en
4 | published: true
5 | position: 100
6 | ---
7 |
8 | # Issues
9 |
10 | To create a bug report, use the [Scully Bug template.](https://github.com/scullyio/scully/issues/new?assignees=&labels=bug&template=---bug-report.md&title=)
11 |
12 | To propose a new feature, use the [Scully Feature Request template.](https://github.com/scullyio/scully/issues/new?assignees=&labels=enhancement&template=---feature-request.md&title=)
13 |
14 | The Scully team is working on better documentation for creating issues.
15 |
--------------------------------------------------------------------------------
/docs/community/issues_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Problemas
3 | lang: es
4 | published: true
5 | position: 100
6 | ---
7 |
8 | # Problemas
9 |
10 | Para crear un report de un error, utiliza la [plantilla de error de Scully.](https://github.com/scullyio/scully/issues/new?assignees=&labels=bug&template=---bug-report.md&title=)
11 |
12 | Para proponer una nueva característica, utiliza la [plantilla para nuevas características de Scully.](https://github.com/scullyio/scully/issues/new?assignees=&labels=enhancement&template=---feature-request.md&title=)
13 |
14 | El equipo de Scully está trabajando en la documentación para reportar problemas.
15 |
--------------------------------------------------------------------------------
/docs/community/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Community
3 | lang: en
4 | published: true
5 | position: 900
6 | ---
7 |
8 | # Scully community overview
9 |
--------------------------------------------------------------------------------
/docs/community/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Comunidad
3 | lang: es
4 | published: true
5 | position: 900
6 | ---
7 |
8 | # La Comunidad de Scully
9 |
--------------------------------------------------------------------------------
/docs/community/sponsors.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Sponsors
3 | lang: en
4 | published: true
5 | position: 901
6 | ---
7 |
8 | # Scully is made possible by those sponsors:
9 |
10 | Google
11 |
12 | HeroDevs
13 |
--------------------------------------------------------------------------------
/docs/community/sponsors_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Sponsors
3 | lang: es
4 | published: true
5 | position: 901
6 | ---
7 |
8 | # Scully es posible gracias a los siguientes sponsors:
9 |
10 | Google
11 |
12 | HeroDevs
13 |
--------------------------------------------------------------------------------
/docs/community/support.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Support
3 | lang: en
4 | published: true
5 | position: 100
6 | ---
7 |
8 | # Support
9 |
10 | Join the Scully community on [Gitter](https://gitter.im/scullyio/community).
11 |
12 | Scully [Office Hours](https://meet.google.com/vcm-wekz-hsx?authuser=1) Google Meet every Tuesday at noon MST.
13 |
--------------------------------------------------------------------------------
/docs/community/support_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Soporte
3 | lang: es
4 | published: true
5 | position: 100
6 | ---
7 |
8 | # Soporte
9 |
10 | Únete a la comunidad Scully en [Gitter](https://gitter.im/scullyio/community).
11 |
12 | Scully [Horarios de Oficina](https://meet.google.com/vcm-wekz-hsx?authuser=1) Google Meet todos los martes al mediodía MST.
13 |
--------------------------------------------------------------------------------
/docs/concepts/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | lang: en
3 | position: 20
4 | published: true
5 | title: Concepts
6 | ---
7 |
8 | # Scully Concepts
9 |
10 | In this section, we explain the following Scully concepts in-depth.
11 |
12 | - [the Scully process](/docs/concepts/process) explains step by step what happens when you run scully.
13 | - [unhandled routes](/docs/concepts/unhandled-routes) explains all about `unhandled routes`
14 | - [handled routes](/docs/concepts/handled-routes) explains all about `handled routes`
15 |
--------------------------------------------------------------------------------
/docs/concepts/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | lang: es
3 | position: 20
4 | published: true
5 | title: Conceptos
6 | ---
7 |
8 | # Conceptos
9 |
10 | En esta sección, explicaremos en detalle los siguiente conceptos de Scully.
11 |
12 | - [el proceso Scully](/docs/concepts/process) explicaremos paso a paso qué sucede cuando ejecutamos Scully.
13 | - [rutas no controladas](/docs/concepts/unhandled-routes) explicaremos todo soble las `rutas no controladas`
14 | - [rutas controladas](/docs/concepts/handled-routes) explicaremos todo soble las `rutas controladas`
15 |
--------------------------------------------------------------------------------
/docs/learn/create-a-blog/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Create a blog
3 | lang: en
4 | position: 20
5 | ---
6 |
7 | # Creating a blog
8 |
9 | Start off with [adding blog support](/docs/learn/create-a-blog/add-blog-support). After that, you might want to find out how to [add a new post](/docs/learn/create-a-blog/generate-new-blog-posts), or how to [use blog post meta-data](/docs/learn/create-a-blog/use-blog-post-data-in-template).
10 |
--------------------------------------------------------------------------------
/docs/learn/create-a-blog/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Crear un blog
3 | lang: es
4 | position: 20
5 | ---
6 |
7 | # Creando un blog
8 |
9 | Comienza con [agregar soporte para blog](/docs/learn/create-a-blog/add-blog-support). Luego de eso, seguramente desees [agregar un nuevo artículo](/docs/learn/create-a-blog/generate-new-blog-posts), o cómo [usar los metadatos de un artículo](/docs/learn/create-a-blog/use-blog-post-data-in-template).
10 |
--------------------------------------------------------------------------------
/docs/learn/getting-started/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | lang: en
3 | position: 10
4 | title: Getting started
5 | ---
6 |
7 | # Getting Started
8 |
9 | First check if your app meets the [minimal requirements](/docs/learn/getting-started/requirements). When you are done with that, head over to [the installation](/docs/learn/getting-started/installation)
10 |
--------------------------------------------------------------------------------
/docs/learn/getting-started/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | lang: es
3 | position: 10
4 | title: Cómo empezar
5 | ---
6 |
7 | # Cómo empezar
8 |
9 | Primero debes chequear que la aplicación cumple con [requisitos mínimos](/docs/learn/getting-started/requirements). Una vez hecho esto, puede continuar con [la instalación](/docs/learn/getting-started/installation)
10 |
--------------------------------------------------------------------------------
/docs/overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Scully Documentation
3 | published: true
4 | lang: en
5 | position: 100
6 | ---
7 |
8 | # Scullly documentation
9 |
10 | This document is a placeholder, this position is taken by
11 |
--------------------------------------------------------------------------------
/docs/overview_es.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Scully Documentation
3 | published: true
4 | lang: es
5 | position: 100
6 | ---
7 |
8 | # Scullly documentation
9 |
10 | This document is a placeholder, this position is taken by
11 |
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "hosting": {
3 | "site": "scullyio",
4 | "public": "dist/static/doc-sites",
5 | "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
6 | "rewrites": [
7 | {
8 | "source": "/404",
9 | "destination": "/404/index.html",
10 | "type": 301
11 | }
12 | ],
13 | "headers": [
14 | {
15 | "source": "**/*.@(svg|jpg|jpeg|gif|png)",
16 | "headers": [
17 | {
18 | "key": "Cache-Control",
19 | "value": "max-age=31536000"
20 | }
21 | ]
22 | }
23 | ]
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | const { getJestProjects } = require('@nrwl/jest');
2 | module.exports = {
3 | projects: ['/tests/jest/src', ...getJestProjects()],
4 | };
5 |
--------------------------------------------------------------------------------
/jest.preset.js:
--------------------------------------------------------------------------------
1 | const nxPreset = require('@nrwl/jest/preset');
2 |
3 | module.exports = {
4 | ...nxPreset
5 | };
6 |
--------------------------------------------------------------------------------
/libs/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/libs/.gitkeep
--------------------------------------------------------------------------------
/libs/ng-lib/README.md:
--------------------------------------------------------------------------------
1 | # ScullyIo ng-lib
2 |
3 | This library that houses the components and services for ScullyIo
4 |
5 | - content
6 | - idlemonior
7 | - route-service
8 |
--------------------------------------------------------------------------------
/libs/ng-lib/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3 | "dest": "../../dist/libs/ng-lib",
4 | "lib": {
5 | "entryFile": "src/public-api.ts"
6 | },
7 | "allowedNonPeerDependencies": [
8 | "rxjs"
9 | ],
10 | "whitelistedNonPeerDependencies": [
11 | "node-fetch",
12 | "rxjs"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/libs/ng-lib/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/ng-lib",
3 | "version": "2.1.42",
4 | "repository": {
5 | "type": "GIT",
6 | "url": "https://github.com/scullyio/scully/tree/main/libs/ng-lib"
7 | },
8 | "dependencies": {
9 | "rxjs": "^7.0.0"
10 | },
11 | "peerDependencies": {
12 | "@angular/router": ">12.0.0 || <13.0.0",
13 | "@angular/platform-browser-dynamic": ">12.0.0 || <13.0.0",
14 | "@angular/common": ">12.0.0 || <13.0.0",
15 | "@angular/core": ">12.0.0 || <13.0.0"
16 | },
17 | "keywords": [
18 | "angular",
19 | "scully",
20 | "seo",
21 | "scully-plugin",
22 | "plugin"
23 | ]
24 | }
--------------------------------------------------------------------------------
/libs/ng-lib/src/lib/config/scully-config.ts:
--------------------------------------------------------------------------------
1 | import { InjectionToken } from '@angular/core';
2 |
3 | export interface ScullyLibConfig {
4 | useTransferState?: boolean;
5 | alwaysMonitor?: boolean;
6 | manualIdle?: boolean;
7 | baseURIForScullyContent?: string;
8 | }
9 |
10 | export const ScullyDefaultSettings: Required = {
11 | useTransferState: true,
12 | alwaysMonitor: false,
13 | manualIdle: false,
14 | baseURIForScullyContent: 'http://localhost:1668',
15 | };
16 |
17 | export const SCULLY_LIB_CONFIG = new InjectionToken('scullyLibConfig', {
18 | factory: () => ScullyDefaultSettings,
19 | });
20 |
--------------------------------------------------------------------------------
/libs/ng-lib/src/lib/scully-content/scully-content.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { ScullyContentComponent } from './scully-content.component';
3 |
4 | @NgModule({
5 | declarations: [ScullyContentComponent],
6 | exports: [ScullyContentComponent]
7 | })
8 | export class ScullyContentModule {}
9 |
--------------------------------------------------------------------------------
/libs/ng-lib/src/lib/utils/basePathOnly.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Take a string, preferably resembling an URL, take out the search params, the anchors, and the ending slash
3 | * @param str
4 | */
5 | export const basePathOnly = (str: string): string => {
6 | if (str.includes('#')) {
7 | str = str.split('#')[0];
8 | }
9 | if (str.includes('?')) {
10 | str = str.split('?')[0];
11 | }
12 | const cleanedUpVersion = str.endsWith('/') ? str.slice(0, -1) : str;
13 | return cleanedUpVersion;
14 | };
15 |
--------------------------------------------------------------------------------
/libs/ng-lib/src/lib/utils/fetchHttp.ts:
--------------------------------------------------------------------------------
1 | export function fetchHttp(
2 | url: string,
3 | responseType: XMLHttpRequestResponseType = 'json'
4 | ): Promise {
5 | return new Promise((resolve, reject) => {
6 | const xhr = new XMLHttpRequest();
7 | xhr.responseType = responseType;
8 | xhr.addEventListener('load', ev => {
9 | if (xhr.status !== 200) {
10 | return reject(xhr);
11 | }
12 | resolve(xhr.response);
13 | });
14 | xhr.addEventListener('error', (...err) => reject(err));
15 | xhr.open('get', url, true);
16 | xhr.send();
17 | });
18 | }
19 |
--------------------------------------------------------------------------------
/libs/ng-lib/src/lib/utils/isScully.ts:
--------------------------------------------------------------------------------
1 | // tslint:disable: no-string-literal
2 | export const isScullyRunning = () => window && window['ScullyIO'] === 'running';
3 | export const isScullyGenerated = () =>
4 | window && window['ScullyIO'] === 'generated';
5 |
--------------------------------------------------------------------------------
/libs/ng-lib/src/lib/utils/merge-paths.ts:
--------------------------------------------------------------------------------
1 | export function mergePaths(base: string, path: string): string {
2 | base = base ?? '';
3 | if (base.endsWith('/') && path.startsWith('/')) {
4 | return `${base}${path.substr(1)}`;
5 | }
6 | if (!base.endsWith('/') && !path.startsWith('/')) {
7 | return `${base}/${path}`;
8 | }
9 | return `${base}${path}`;
10 | }
11 |
--------------------------------------------------------------------------------
/libs/ng-lib/src/public-api.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * Public API Surface of ng-lib
3 | */
4 |
5 | export {
6 | IdleMonitorService,
7 | dropEndingSlash,
8 | } from './lib/idleMonitor/idle-monitor.service';
9 | export {
10 | ScullyRoutesService,
11 | ScullyRoute,
12 | } from './lib/route-service/scully-routes.service';
13 | export { ScullyContentComponent } from './lib/scully-content/scully-content.component';
14 | export { ScullyContentModule } from './lib/scully-content/scully-content.module';
15 | export { ScullyLibModule } from './lib/scully-lib.module';
16 | export { TransferStateService } from './lib/transfer-state/transfer-state.service';
17 | export { isScullyGenerated, isScullyRunning } from './lib/utils/isScully';
18 |
--------------------------------------------------------------------------------
/libs/ng-lib/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"]
5 | },
6 | "include": ["**/*.ts"]
7 | }
8 |
--------------------------------------------------------------------------------
/libs/ng-lib/tsconfig.lib.prod.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.lib.json",
3 | "compilerOptions": {
4 | "declarationMap": false
5 | },
6 | "angularCompilerOptions": {
7 | "enableIvy": true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/libs/ng-lib/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tslint.json",
3 | "rules": {
4 | "directive-selector": [true, "attribute", "lib", "camelCase"],
5 | "component-selector": [true, "element", "lib", "kebab-case"]
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/libs/platform-server/README.md:
--------------------------------------------------------------------------------
1 | # platform-server
2 |
3 | This library was generated with [Nx](https://nx.dev).
4 |
5 | ## Running unit tests
6 |
7 | Run `nx test platform-server` to execute the unit tests.
8 |
--------------------------------------------------------------------------------
/libs/platform-server/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3 | "dest": "../../dist/libs/platform-server",
4 | "lib": {
5 | "entryFile": "src/index.ts"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/libs/platform-server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/platform-server",
3 | "version": "2.1.42",
4 | "peerDependencies": {
5 | "@angular/common": ">12.0.0 || <13.0.0",
6 | "@angular/core": ">12.0.0 || <13.0.0",
7 | "@angular/platform-server": ">12.0.0 || <13.0.0",
8 | "@scullyio/ng-lib": ">2.0.0 || <3.0.0"
9 | },
10 | "dependencies": {
11 | "tslib": "^2.3.1"
12 | }
13 | }
--------------------------------------------------------------------------------
/libs/platform-server/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/platform-server.module';
2 |
--------------------------------------------------------------------------------
/libs/platform-server/src/test-setup.ts:
--------------------------------------------------------------------------------
1 | import 'jest-preset-angular/setup-jest';
2 |
--------------------------------------------------------------------------------
/libs/platform-server/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base.json",
3 | "files": [],
4 | "include": [],
5 | "references": [
6 | {
7 | "path": "./tsconfig.lib.json"
8 | },
9 | {
10 | "path": "./tsconfig.lib.prod.json"
11 | },
12 | {
13 | "path": "./tsconfig.spec.json"
14 | }
15 | ],
16 | "compilerOptions": {
17 | "forceConsistentCasingInFileNames": true,
18 | "strict": true,
19 | "noImplicitReturns": true,
20 | "noFallthroughCasesInSwitch": true
21 | },
22 | "angularCompilerOptions": {
23 | "strictInjectionParameters": true,
24 | "strictInputAccessModifiers": true,
25 | "strictTemplates": true
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/libs/platform-server/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "target": "es2015",
6 | "declaration": true,
7 | "declarationMap": true,
8 | "inlineSources": true,
9 | "types": [],
10 | "lib": ["dom", "es2018"]
11 | },
12 | "exclude": ["src/test-setup.ts", "**/*.spec.ts"],
13 | "include": ["**/*.ts"]
14 | }
15 |
--------------------------------------------------------------------------------
/libs/platform-server/tsconfig.lib.prod.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.lib.json",
3 | "compilerOptions": {
4 | "declarationMap": false
5 | },
6 | "angularCompilerOptions": {
7 | "compilationMode": "partial",
8 | "enableIvy": true
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/libs/platform-server/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"]
7 | },
8 | "files": ["src/test-setup.ts"],
9 | "include": ["**/*.spec.ts", "**/*.d.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/libs/plugins/base-href-rewrite/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.eslintrc",
3 | "rules": {},
4 | "ignorePatterns": ["!**/*"]
5 | }
6 |
--------------------------------------------------------------------------------
/libs/plugins/base-href-rewrite/dist/.nx-results:
--------------------------------------------------------------------------------
1 | {
2 | "command": "serve",
3 | "results": {
4 | "sample-blog": false
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/libs/plugins/base-href-rewrite/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-base-href-rewrite",
3 | "version": "2.1.42",
4 | "main": "./src/index.js",
5 | "author": "Sander Elias",
6 | "repository": {
7 | "type": "GIT",
8 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/base-href-rewrite"
9 | },
10 | "license": "MIT",
11 | "peerDependencies": {
12 | "@scullyio/scully": "*"
13 | }
14 | }
--------------------------------------------------------------------------------
/libs/plugins/base-href-rewrite/src/index.ts:
--------------------------------------------------------------------------------
1 | export { baseHrefRewrite } from './lib/plugins-base-href-rewrite';
2 |
--------------------------------------------------------------------------------
/libs/plugins/base-href-rewrite/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"]
5 | },
6 | "include": [],
7 | "files": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/libs/plugins/base-href-rewrite/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "rootDir": "./src",
8 | "types": ["node"]
9 | },
10 | "exclude": ["**/*.spec.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/plugins/docs-link-update/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.eslintrc",
3 | "rules": {},
4 | "ignorePatterns": ["!**/*"]
5 | }
6 |
--------------------------------------------------------------------------------
/libs/plugins/docs-link-update/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-docs-link-update",
3 | "version": "2.1.42",
4 | "peerDependencies": {
5 | "@scullyio/scully": "*",
6 | "jsdom": "^19.0.0"
7 | },
8 | "repository": {
9 | "type": "GIT",
10 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/docs-link-update"
11 | },
12 | "dependencies": {},
13 | "keywords": [
14 | "angular",
15 | "scully",
16 | "seo",
17 | "scully-plugin",
18 | "plugin"
19 | ]
20 | }
--------------------------------------------------------------------------------
/libs/plugins/docs-link-update/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/plugins-docs-link-update';
2 |
--------------------------------------------------------------------------------
/libs/plugins/docs-link-update/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"]
5 | },
6 | "include": [],
7 | "files": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | },
12 | {
13 | "path": "./tsconfig.spec.json"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/libs/plugins/docs-link-update/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "rootDir": "./src",
8 | "types": ["node"]
9 | },
10 | "exclude": ["**/*.spec.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/plugins/docs-link-update/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"]
7 | },
8 | "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.spec.js", "**/*.spec.jsx", "**/*.d.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/libs/plugins/extra/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.eslintrc",
3 | "rules": {},
4 | "ignorePatterns": ["!**/*"]
5 | }
6 |
--------------------------------------------------------------------------------
/libs/plugins/extra/README.md:
--------------------------------------------------------------------------------
1 | # plugins-extra
2 |
3 | This is the extra routes plugin.
4 | It takes one parameter and makes that amount of routes
5 |
6 | ## Getting Started
7 |
8 | ### 1. Install the plugin:
9 |
10 | ```bash
11 | npm install -D @scullyio/scully-plugin-extra
12 | ```
13 |
14 | ### 2. Use the plugin:
15 |
16 | TODO
17 |
--------------------------------------------------------------------------------
/libs/plugins/extra/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-extra",
3 | "version": "2.1.42",
4 | "description": "Scully extra demo plugin",
5 | "main": "./src/index.js",
6 | "scripts": {},
7 | "author": "",
8 | "license": "ISC",
9 | "peerDependencies": {
10 | "@scullyio/scully": "*"
11 | },
12 | "dependencies": {},
13 | "repository": {
14 | "type": "GIT",
15 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/extra"
16 | },
17 | "keywords": [
18 | "angular",
19 | "scully",
20 | "seo",
21 | "scully-plugin",
22 | "plugin"
23 | ]
24 | }
--------------------------------------------------------------------------------
/libs/plugins/extra/src/index.ts:
--------------------------------------------------------------------------------
1 | export { extraRoutesPlugin } from './lib/plugins-extra';
2 |
--------------------------------------------------------------------------------
/libs/plugins/extra/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"]
5 | },
6 | "include": [],
7 | "files": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/libs/plugins/extra/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "rootDir": "./src",
8 | "types": ["node"]
9 | },
10 | "exclude": ["**/*.spec.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/plugins/from-data/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.eslintrc",
3 | "rules": {},
4 | "ignorePatterns": ["!**/*"]
5 | }
6 |
--------------------------------------------------------------------------------
/libs/plugins/from-data/README.md:
--------------------------------------------------------------------------------
1 | # plugins-from-data
2 |
3 | This is a router demo plugin.
4 |
5 | ## Getting Started
6 |
7 | ### 1. Install the plugin:
8 |
9 | ```bash
10 | npm install -D @scullyio/scully-plugin-from-data
11 | ```
12 |
13 | ### 2. Use the plugin:
14 |
15 | TODO
16 |
--------------------------------------------------------------------------------
/libs/plugins/from-data/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-from-data",
3 | "version": "2.1.42",
4 | "description": "Scully demo data plugin",
5 | "main": "./src/index.js",
6 | "author": "",
7 | "license": "ISC",
8 | "dependencies": {
9 | "tslib": "^2.3.1"
10 | },
11 | "peerDependencies": {
12 | "@scullyio/scully": "*"
13 | },
14 | "repository": {
15 | "type": "GIT",
16 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/from-data"
17 | },
18 | "keywords": [
19 | "angular",
20 | "scully",
21 | "seo",
22 | "scully-plugin",
23 | "plugin"
24 | ]
25 | }
--------------------------------------------------------------------------------
/libs/plugins/from-data/src/index.ts:
--------------------------------------------------------------------------------
1 | export { extraData } from './lib/plugins-from-data';
2 |
--------------------------------------------------------------------------------
/libs/plugins/from-data/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"]
5 | },
6 | "include": [],
7 | "files": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/libs/plugins/from-data/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "rootDir": "./src",
8 | "types": ["node"]
9 | },
10 | "exclude": ["**/*.spec.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/plugins/google-analytics/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.eslintrc",
3 | "rules": {},
4 | "ignorePatterns": ["!**/*"]
5 | }
6 |
--------------------------------------------------------------------------------
/libs/plugins/google-analytics/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-google-analytics",
3 | "version": "2.1.42",
4 | "author": "Israel Guzman",
5 | "repository": {
6 | "type": "GIT",
7 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/google-analytics"
8 | },
9 | "peerDependencies": {
10 | "@scullyio/scully": "*"
11 | },
12 | "dependencies": {},
13 | "license": "MIT",
14 | "keywords": [
15 | "angular",
16 | "scully",
17 | "seo",
18 | "scully-plugin",
19 | "plugin"
20 | ]
21 | }
--------------------------------------------------------------------------------
/libs/plugins/google-analytics/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/plugins-google-analytics';
2 |
--------------------------------------------------------------------------------
/libs/plugins/google-analytics/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"]
5 | },
6 | "include": [],
7 | "files": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/libs/plugins/google-analytics/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "rootDir": "./src",
8 | "types": ["node"]
9 | },
10 | "exclude": ["**/*.spec.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/plugins/logrocket/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.eslintrc",
3 | "rules": {},
4 | "ignorePatterns": ["!**/*"]
5 | }
6 |
--------------------------------------------------------------------------------
/libs/plugins/logrocket/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-logrocket",
3 | "version": "2.1.42",
4 | "repository": {
5 | "type": "GIT",
6 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/logrocket"
7 | },
8 | "license": "MIT",
9 | "dependencies": {
10 | "tslib": "^2.3.1"
11 | },
12 | "peerDependencies": {
13 | "@scullyio/scully": "*"
14 | },
15 | "keywords": [
16 | "angular",
17 | "scully",
18 | "seo",
19 | "scully-plugin",
20 | "plugin"
21 | ]
22 | }
--------------------------------------------------------------------------------
/libs/plugins/logrocket/src/index.ts:
--------------------------------------------------------------------------------
1 | export { LogRocket, logrocketPlugin } from './lib/plugins-logrocket';
2 |
--------------------------------------------------------------------------------
/libs/plugins/logrocket/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"]
5 | },
6 | "include": [],
7 | "files": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/libs/plugins/logrocket/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "rootDir": "./src",
8 | "types": ["node"]
9 | },
10 | "exclude": ["**/*.spec.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-copy-to-clipboard/.eslintrc:
--------------------------------------------------------------------------------
1 | {"extends":"../../../.eslintrc","rules":{},"ignorePatterns":["!**/*"]}
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-copy-to-clipboard/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-copy-to-clipboard",
3 | "version": "2.1.42",
4 | "author": "Ankit Prajapati",
5 | "license": "MIT",
6 | "repository": {
7 | "type": "GIT",
8 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/scully-plugin-copy-to-clipboard"
9 | },
10 | "peerDependencies": {
11 | "@scullyio/scully": "*",
12 | "jsdom": "^19.0.0"
13 | },
14 | "dependencies": {},
15 | "keywords": [
16 | "angular",
17 | "scully",
18 | "prismjs",
19 | "copy-to-clipboard",
20 | "scully-plugin",
21 | "plugin"
22 | ]
23 | }
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-copy-to-clipboard/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/plugins-scully-plugin-copy-to-clipboard';
2 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-copy-to-clipboard/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"]
5 | },
6 | "include": [],
7 | "files": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-copy-to-clipboard/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "rootDir": "./src",
8 | "types": ["node"]
9 | },
10 | "exclude": ["**/*.spec.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-critical-css/.eslintrc:
--------------------------------------------------------------------------------
1 | { "extends": "../../../.eslintrc", "rules": {}, "ignorePatterns": ["!**/*"] }
2 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-critical-css/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-critical-css",
3 | "version": "2.1.42",
4 | "peerDependencies": {
5 | "@scullyio/scully": "*"
6 | },
7 | "repository": {
8 | "type": "GIT",
9 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/scully-plugin-critical-css"
10 | },
11 | "keywords": [
12 | "angular",
13 | "scully",
14 | "seo",
15 | "scully-plugin",
16 | "plugin",
17 | "CSS-above-the-fold"
18 | ],
19 | "dependencies": {
20 | "critical": "^4.0.1"
21 | }
22 | }
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-critical-css/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/plugins-scully-plugin-critical-css';
2 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-critical-css/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "esModuleInterop": true,
5 | "allowSyntheticDefaultImports": true
6 | },
7 | "files": [],
8 | "include": [],
9 | "references": [
10 | {
11 | "path": "./tsconfig.lib.json"
12 | }
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-critical-css/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "rootDir": "./src",
8 | "types": ["node"]
9 | },
10 | "exclude": ["**/*.spec.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-flash-prevention/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../.eslintrc",
3 | "rules": {},
4 | "ignorePatterns": ["!**/*"]
5 | }
6 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-flash-prevention/index.ts:
--------------------------------------------------------------------------------
1 | export { getFlashPreventionPlugin } from './src/lib/flash-prevention.plugin';
2 | export { appendToHead } from './src/lib/utils';
3 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-flash-prevention/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-flash-prevention",
3 | "version": "2.1.42",
4 | "main": "./index.js",
5 | "contributors": [
6 | "Aaron Frost "
7 | ],
8 | "dependencies": {
9 | "tslib": "^2.3.1"
10 | },
11 | "peerDependencies": {
12 | "@scullyio/scully": "*"
13 | },
14 | "repository": {
15 | "type": "GIT",
16 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/scully-plugin-flash-prevention"
17 | },
18 | "keywords": [
19 | "angular",
20 | "scully",
21 | "seo",
22 | "scully-plugin",
23 | "plugin"
24 | ]
25 | }
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-flash-prevention/src/lib/utils.ts:
--------------------------------------------------------------------------------
1 | const headEndTag = ``;
2 |
3 | export async function appendToHead(html, str) {
4 | const indexOfFirstHeadClose = html.indexOf(headEndTag);
5 | const start = html.slice(0, indexOfFirstHeadClose);
6 | const end = html.slice(indexOfFirstHeadClose);
7 | return `${start}${str}${end}`;
8 | }
9 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-flash-prevention/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"]
5 | },
6 | "include": [],
7 | "files": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-flash-prevention/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"],
5 | "module": "CommonJS",
6 | "declaration": true,
7 | },
8 | "files": ["./index.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-local-cache/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.eslintrc.json",
3 | "ignorePatterns": ["!**/*"],
4 | "rules": {},
5 | "overrides": [
6 | {
7 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
8 | "parserOptions": {
9 | "project": ["libs/plugins/scully-plugin-local-cache/tsconfig.*?.json"]
10 | },
11 | "rules": {}
12 | },
13 | {
14 | "files": ["*.ts", "*.tsx"],
15 | "rules": {}
16 | },
17 | {
18 | "files": ["*.js", "*.jsx"],
19 | "rules": {}
20 | }
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-local-cache/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-local-cache",
3 | "version": "2.1.42",
4 | "dependencies": {
5 | "level": "*"
6 | },
7 | "main": "src/index.js",
8 | "devDependencies": {},
9 | "peerDependencies": {
10 | "rxjs": "*",
11 | "yargs": "*",
12 | "puppeteer": "*",
13 | "@scullyio/scully": "*"
14 | }
15 | }
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-local-cache/src/index.ts:
--------------------------------------------------------------------------------
1 | export { localCacheReady, localCache } from './lib/plugins-local-cache';
2 | export { levelDbReady, del, get, set, initializeLevelDb, traverse } from './lib/ldb';
3 | export { CacheItem, LocalCacheConfig, LookupTable } from './lib/local-cache.interface';
4 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-local-cache/src/lib/deferred.ts:
--------------------------------------------------------------------------------
1 | export class Deferred {
2 | resolve: (T?) => void;
3 | reject: (error?: any) => void;
4 | promise = new Promise((rs, rj) => {
5 | this.resolve = rs;
6 | this.reject = rj;
7 | });
8 | }
9 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-local-cache/src/lib/generateId.ts:
--------------------------------------------------------------------------------
1 | import { scullyConfig } from '@scullyio/scully';
2 | import { config } from './config';
3 |
4 | export function generateId() {
5 | return `${scullyConfig.projectName}_${config.environment}`;
6 | }
7 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-local-cache/src/lib/usageStatistics.ts:
--------------------------------------------------------------------------------
1 | export const usageStatistics = {
2 | requests: 0,
3 | hit: 0,
4 | mis: 0,
5 | traffic: 0,
6 | saved: 0,
7 | };
8 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-local-cache/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "files": [],
4 | "include": [],
5 | "references": [
6 | {
7 | "path": "./tsconfig.lib.json"
8 | }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-local-cache/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "types": ["node"]
8 | },
9 | "exclude": ["**/*.spec.ts"],
10 | "include": ["**/*.ts"]
11 | }
12 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-playwright/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [["@nrwl/web/babel", { "useBuiltIns": "usage" }]]
3 | }
4 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-playwright/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["../../../.eslintrc.json"],
3 | "ignorePatterns": ["!**/*"],
4 | "overrides": [
5 | {
6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
7 | "rules": {}
8 | },
9 | {
10 | "files": ["*.ts", "*.tsx"],
11 | "rules": {}
12 | },
13 | {
14 | "files": ["*.js", "*.jsx"],
15 | "rules": {}
16 | }
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-playwright/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | displayName: 'plugins-scully-plugin-playwright',
3 | preset: '../../../jest.preset.js',
4 | globals: {
5 | 'ts-jest': {
6 | tsconfig: '/tsconfig.spec.json',
7 | },
8 | },
9 | testEnvironment: 'node',
10 | transform: {
11 | '^.+\\.[tj]sx?$': 'ts-jest',
12 | },
13 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
14 | coverageDirectory: '../../../coverage/libs/plugins/scully-plugin-playwright',
15 | };
16 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-playwright/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-playwright",
3 | "version": "2.1.42",
4 | "repository": {
5 | "type": "GIT",
6 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/scully-plugin-playwright"
7 | },
8 | "keywords": [
9 | "angular",
10 | "scully",
11 | "seo",
12 | "scully-plugin",
13 | "plugin",
14 | "playwright"
15 | ],
16 | "dependencies": {
17 | "tslib": "^2.3.1"
18 | },
19 | "peerDependencies": {
20 | "@scullyio/scully": "*",
21 | "playwright": "^1.19.2"
22 | }
23 | }
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-playwright/src/lib/plugins-scully-plugin-playwright.spec.ts:
--------------------------------------------------------------------------------
1 | import { playwrightRenderer } from './plugins-scully-plugin-playwright';
2 |
3 | describe('playwrightRenderer', () => {
4 | it('should work', () => {
5 | expect(playwrightRenderer).toEqual(playwrightRenderer);
6 | });
7 | });
8 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-playwright/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.base.json",
3 | "files": [],
4 | "include": [],
5 | "references": [
6 | {
7 | "path": "./tsconfig.lib.json"
8 | },
9 | {
10 | "path": "./tsconfig.spec.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-playwright/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "types": ["node"]
8 | },
9 | "exclude": ["**/*.spec.ts"],
10 | "include": ["**/*.ts"]
11 | }
12 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-playwright/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"]
7 | },
8 | "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.spec.js", "**/*.spec.jsx", "**/*.d.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-puppeteer/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [["@nrwl/web/babel", { "useBuiltIns": "usage" }]]
3 | }
4 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-puppeteer/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["../../../.eslintrc.json"],
3 | "ignorePatterns": ["!**/*"],
4 | "overrides": [
5 | {
6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
7 | "rules": {}
8 | },
9 | {
10 | "files": ["*.ts", "*.tsx"],
11 | "rules": {}
12 | },
13 | {
14 | "files": ["*.js", "*.jsx"],
15 | "rules": {}
16 | }
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-puppeteer/README.md:
--------------------------------------------------------------------------------
1 | # scully-plugin-puppeteer
2 |
3 | This is the Puppeteer render plugin for Scully.
4 |
5 | The interface for a renderPlugin is:
6 | ```ts
7 | (route:HandledRoute) => Promise
8 | ```
9 |
10 | This plugin will be called for every route that is in the `handledRoute[]` When it throws its retried for 3 times. If it fails after that, the route is skipped.
11 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-puppeteer/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | displayName: 'plugins-scully-plugin-puppeteer',
3 | preset: '../../../jest.preset.js',
4 | globals: {
5 | 'ts-jest': {
6 | tsconfig: '/tsconfig.spec.json',
7 | },
8 | },
9 | testEnvironment: 'node',
10 | transform: {
11 | '^.+\\.[tj]sx?$': 'ts-jest',
12 | },
13 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
14 | coverageDirectory: '../../../coverage/libs/plugins/scully-plugin-puppeteer',
15 | };
16 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-puppeteer/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-puppeteer",
3 | "version": "2.1.42",
4 | "description": "Scully Puppeteer render plugin",
5 | "main": "./src/index.js",
6 | "license": "MIT",
7 | "dependencies": {
8 | "tslib": "^2.3.1"
9 | },
10 | "peerDependencies": {
11 | "@scullyio/scully": "*",
12 | "puppeteer": "^13.4.1"
13 | },
14 | "repository": {
15 | "type": "GIT",
16 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/scully-plugin-puppeteer"
17 | },
18 | "keywords": [
19 | "angular",
20 | "scully",
21 | "seo",
22 | "scully-plugin",
23 | "puppeteer",
24 | "plugin",
25 | "render"
26 | ]
27 | }
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-puppeteer/src/lib/plugins-scully-plugin-puppeteer.spec.ts:
--------------------------------------------------------------------------------
1 | import { puppeteerRender } from './plugins-scully-plugin-puppeteer';
2 |
3 | describe('pluginsScullyPluginPuppeteer', () => {
4 | it('should work', () => {
5 | expect(puppeteerRender).toEqual(puppeteerRender);
6 | });
7 | });
8 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-puppeteer/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.base.json",
3 | "files": [],
4 | "include": [],
5 | "references": [
6 | {
7 | "path": "./tsconfig.lib.json"
8 | },
9 | {
10 | "path": "./tsconfig.spec.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-puppeteer/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "types": ["node"]
8 | },
9 | "exclude": ["**/*.spec.ts"],
10 | "include": ["**/*.ts"]
11 | }
12 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-puppeteer/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"]
7 | },
8 | "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.spec.js", "**/*.spec.jsx", "**/*.d.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-remove-scripts/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.eslintrc",
3 | "rules": {},
4 | "ignorePatterns": ["!**/*"]
5 | }
6 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-remove-scripts/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-remove-scripts",
3 | "description": "Scully plugin to remove scripts",
4 | "version": "2.1.42",
5 | "main": "./src/index.js",
6 | "author": "@herodevs",
7 | "license": "MIT",
8 | "peerDependencies": {
9 | "@scullyio/scully": "*",
10 | "jsdom": "*"
11 | },
12 | "repository": {
13 | "type": "GIT",
14 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/scully-plugin-remove-scripts"
15 | },
16 | "engines": {
17 | "node": ">=14"
18 | },
19 | "keywords": [
20 | "angular",
21 | "scully",
22 | "seo",
23 | "scully-plugin",
24 | "plugin"
25 | ]
26 | }
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-remove-scripts/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/plugins-scully-plugin-remove-scripts';
2 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-remove-scripts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node"]
5 | },
6 | "include": [],
7 | "files": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/libs/plugins/scully-plugin-remove-scripts/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "rootDir": "./src",
8 | "types": ["node"]
9 | },
10 | "exclude": ["**/*.spec.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/plugins/sentry/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.eslintrc",
3 | "rules": {},
4 | "ignorePatterns": ["!**/*"]
5 | }
6 |
--------------------------------------------------------------------------------
/libs/plugins/sentry/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/scully-plugin-sentry",
3 | "version": "2.1.42",
4 | "repository": {
5 | "type": "GIT",
6 | "url": "https://github.com/scullyio/scully/tree/main/libs/plugins/sentry"
7 | },
8 | "license": "MIT",
9 | "dependencies": {
10 | "tslib": "^2.3.1"
11 | },
12 | "peerDependencies": {
13 | "@scullyio/scully": "*"
14 | },
15 | "keywords": [
16 | "angular",
17 | "scully",
18 | "seo",
19 | "scully-plugin",
20 | "plugin"
21 | ]
22 | }
--------------------------------------------------------------------------------
/libs/plugins/sentry/src/index.ts:
--------------------------------------------------------------------------------
1 | export { Sentry, sentryPlugin } from './lib/plugins-sentry';
2 | export { SentryErrorHandler, SentryDialogToken, sentryDialogProvider, sentryProviders } from './lib/sentry.errorhandler';
3 |
--------------------------------------------------------------------------------
/libs/plugins/sentry/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node"]
5 | },
6 | "include": [],
7 | "files": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/libs/plugins/sentry/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "../../../dist/out-tsc",
6 | "declaration": true,
7 | "rootDir": "./src",
8 | "types": ["node"]
9 | },
10 | "exclude": ["**/*.spec.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/scully-schematics/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../.eslintrc",
3 | "rules": {},
4 | "ignorePatterns": ["**/*", "src/**/*_spec.ts", "**/*/files/**/*"]
5 | }
6 |
--------------------------------------------------------------------------------
/libs/scully-schematics/.gitignore:
--------------------------------------------------------------------------------
1 | # Outputs
2 | spec/**/*.js
3 | spec/**/*.js.map
4 | spec/**/*.d.ts
5 | src/**/*.js
6 | src/**/*.js.map
7 | src/**/*.d.ts
8 |
9 | # IDEs
10 | .idea/
11 | jsconfig.json
12 | .vscode/
13 |
14 | # Misc
15 | node_modules/
16 | npm-debug.log*
17 | yarn-error.log*
18 |
19 | # Mac OSX Finder files.
20 | **/.DS_Store
21 | .DS_Store
22 |
--------------------------------------------------------------------------------
/libs/scully-schematics/.npmignore:
--------------------------------------------------------------------------------
1 | # Ignores TypeScript files, but keeps definitions.
2 | !*.d.ts
3 | herodevs*.tgz
4 |
--------------------------------------------------------------------------------
/libs/scully-schematics/assets/meta-data-template.yml:
--------------------------------------------------------------------------------
1 | title: override-me
2 | thumbnail: assets/images/default.jpg
3 | author: John Doe
4 | mail: John.Doe@example.com
5 | keywords:
6 | - angular
7 | - scully
8 | language: en
9 |
--------------------------------------------------------------------------------
/libs/scully-schematics/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | displayName: 'scully-schematics',
3 | preset: '../../jest.preset.js',
4 | globals: {
5 | 'ts-jest': {
6 | tsconfig: '/tsconfig.spec.json',
7 | },
8 | },
9 | testEnvironment: 'node',
10 | transform: {
11 | '^.+\\.[tj]sx?$': 'ts-jest',
12 | },
13 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
14 | coverageDirectory: '../../coverage/libs/scully-schematics',
15 | testPathIgnorePatterns: ['/src/files/'],
16 | };
17 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/add-blog/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/schema",
3 | "$id": "@scullyio/init:blog",
4 | "title": "Scully: Add a complete blog schematic",
5 | "type": "object",
6 | "properties": {
7 | "routingScope": {
8 | "enum": ["Child", "Root"],
9 | "type": "string",
10 | "description": "The scope for the new routing module.",
11 | "default": "Child"
12 | },
13 | "project": {
14 | "type": "string",
15 | "description": "add the project",
16 | "default": "defaultProject"
17 | }
18 | },
19 | "required": []
20 | }
21 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/add-blog/schema.ts:
--------------------------------------------------------------------------------
1 | export interface Schema {
2 | /**
3 | * The scope for the new routing module.
4 | */
5 | routingScope?: 'Child' | 'Root';
6 | project?: string;
7 | }
8 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/add-plugin/schema.ts:
--------------------------------------------------------------------------------
1 | export interface Schema {
2 | /**
3 | * add the name for the plugin
4 | */
5 | name: string;
6 | project: string;
7 | /**
8 | * The type of plugin
9 | */
10 | pluginType: 'router' | 'postProcessByHtml';
11 | }
12 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/add-post/schema.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Scully ng-add-blog schematic
3 | */
4 | export interface Schema {
5 | /**
6 | * add the title for the post
7 | */
8 | name: string;
9 | /**
10 | * define the target directory for the new post file
11 | */
12 | target?: string;
13 | /**
14 | * define the file extension for the target file
15 | */
16 | extension?: string;
17 | /**
18 | * use a meta data template file that's data will be added to the post
19 | */
20 | metaDataFile?: string;
21 | }
22 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/create-markdown/schema.ts:
--------------------------------------------------------------------------------
1 | export interface Schema {
2 | /**
3 | * add the name for the module
4 | */
5 | name: string;
6 | /**
7 | * add the name for the :${slug}
8 | */
9 | slug: string;
10 | /**
11 | * The scope for the new routing module.
12 | */
13 | routingScope?: 'Child' | 'Root';
14 | /**
15 | * add the name for the source dir to store the markdown files
16 | */
17 | sourceDir?: string;
18 | /**
19 | * define the route where your post will be available
20 | */
21 | route?: string;
22 | project: string;
23 | }
24 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/files/blog-add/blog-X.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | title: This is the blog title
4 | description: blog description
5 | published: false
6 | ---# Page X example
7 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/files/blog-module/blog-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 |
4 | import { BlogComponent } from './blog.component';
5 |
6 | const routes: Routes = [
7 | {
8 | path: ':slug',
9 | component: BlogComponent
10 | }
11 | ];
12 |
13 | @NgModule({
14 | imports: [RouterModule.forChild(routes)],
15 | exports: [RouterModule]
16 | })
17 | export class BlogRoutingModule {}
18 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/files/blog-module/blog.component.css:
--------------------------------------------------------------------------------
1 | h1 {
2 | color: rgb(51, 6, 37);
3 | background-color: rgb(248, 211, 236);
4 | padding: 5px;
5 | border-radius: 5px;
6 | width: fit-content;
7 | }
8 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/files/blog-module/blog.component.html:
--------------------------------------------------------------------------------
1 | ScullyIo blog content
2 |
3 |
4 |
5 |
6 |
7 | End of blog content
8 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/files/blog-module/blog.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-blog',
5 | templateUrl: './blog.component.html',
6 | styleUrls: ['./blog.component.css'],
7 | })
8 | export class BlogComponent implements OnInit {
9 | ngOnInit() {}
10 |
11 | constructor() {}
12 | }
13 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/files/blog-module/blog.module.ts:
--------------------------------------------------------------------------------
1 | import { CommonModule } from '@angular/common';
2 | import { NgModule } from '@angular/core';
3 | import { ScullyLibModule } from '@scullyio/ng-lib/bundles/scullyio-ng-lib.umd';
4 | import { BlogRoutingModule } from './blog-routing.module';
5 | import { BlogComponent } from './blog.component';
6 |
7 | @NgModule({
8 | declarations: [BlogComponent],
9 | imports: [CommonModule, BlogRoutingModule, ScullyLibModule]
10 | })
11 | export class BlogModule {}
12 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/files/blog/page-1.example.md:
--------------------------------------------------------------------------------
1 | # Page 1 example
2 |
3 | ## or, how to do interesting blog things
4 |
5 | ```typescript
6 | console.log('hello world');
7 | ```
8 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/files/markdown-module/__name@dasherize__-routing.module.ts.template:
--------------------------------------------------------------------------------
1 | import {NgModule} from '@angular/core';
2 | import {Routes, RouterModule} from '@angular/router';
3 |
4 | import {<%= classify(name) %>Component} from './<%= dasherize(name) %>.component';
5 |
6 | const routes: Routes = [
7 | {
8 | path: ':<%= camelize(slug) %>',
9 | component: <%= classify(name) %>Component,
10 | },
11 | {
12 | path: '**',
13 | component: <%= classify(name) %>Component,
14 | }
15 | ];
16 |
17 | @NgModule({
18 | imports: [RouterModule.forChild(routes)],
19 | exports: [RouterModule],
20 | })
21 | export class <%= classify(name) %>RoutingModule {}
22 |
23 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/files/markdown-module/__name@dasherize__.component.__style__.template:
--------------------------------------------------------------------------------
1 | h1 {
2 | color:rgb(51, 6, 37);
3 | background-color: rgb(248, 211, 236);
4 | padding: 5px;
5 | border-radius: 5px;
6 | width: fit-content;
7 | }
8 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/files/markdown-module/__name@dasherize__.component.html.template:
--------------------------------------------------------------------------------
1 | ScullyIo content
2 |
3 |
4 |
5 |
6 |
7 | End of content
8 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/files/markdown-module/__name@dasherize__.module.ts.template:
--------------------------------------------------------------------------------
1 | import {CommonModule} from '@angular/common';
2 | import {NgModule} from '@angular/core';
3 | import {ScullyLibModule} from '@scullyio/ng-lib';
4 | import {<%= classify(name) %>RoutingModule} from './<%= dasherize(name) %>-routing.module';
5 | import {<%= classify(name) %>Component} from './<%= dasherize(name) %>.component';
6 |
7 | @NgModule({
8 | declarations: [<%= classify(name) %>Component],
9 | imports: [CommonModule, <%= classify(name) %>RoutingModule, ScullyLibModule],
10 | })
11 | export class <%= classify(name) %>Module {}
12 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/index.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/libs/scully-schematics/src/index.ts
--------------------------------------------------------------------------------
/libs/scully-schematics/src/migration.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
3 | "schematics": {
4 | "migration-v0": {
5 | "version": "0",
6 | "description": "Updates to scully v0",
7 | "factory": "./ng-update/index#updateToV0"
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/ng-add/schema.ts:
--------------------------------------------------------------------------------
1 | export interface Schema {
2 | blog: boolean;
3 | project: string;
4 | renderer: string;
5 | pluginTS: boolean;
6 | local: boolean;
7 | }
8 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/ng-add/version-names.ts:
--------------------------------------------------------------------------------
1 | export const scullyVersion = '^2.1.0';
2 | export const scullyComponentVersion = '^2.1.0';
3 | // export const requiredAngularVersionRange = '^9.0.0-rc.4';
4 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/plugin-ts/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/schema",
3 | "$id": "@scullyio/init:pluginTS",
4 | "title": "Scully: Create folder and support for custom typescript plugins",
5 | "type": "object",
6 | "properties": {
7 | "project": {
8 | "type": "string",
9 | "description": "Use a non default project from angular.json",
10 | "default": "defaultProject"
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/plugin-ts/schema.ts:
--------------------------------------------------------------------------------
1 | export interface Schema {
2 | project: string;
3 | }
4 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/route-discovery/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/schema",
3 | "$id": "@scullyio/init:discovery-routes",
4 | "title": "Scully: Create a discovery routes",
5 | "type": "object",
6 | "properties": {
7 | "project": {
8 | "type": "string",
9 | "description": "add the project",
10 | "default": "defaultProject"
11 | }
12 | },
13 | "required": []
14 | }
15 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/route-discovery/schema.ts:
--------------------------------------------------------------------------------
1 | export interface Schema {
2 | project: string;
3 | }
4 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/scully/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/schema",
3 | "$id": "@scullyio/init:scully",
4 | "title": "Scully setup schematic",
5 | "type": "object",
6 | "description": "Scully schematics for angular",
7 | "properties": {
8 | "pluginTS": {
9 | "type": "boolean",
10 | "description": "Support for custom typescript plugins",
11 | "default": true
12 | }
13 | },
14 | "required": []
15 | }
16 |
--------------------------------------------------------------------------------
/libs/scully-schematics/src/test-setup.ts:
--------------------------------------------------------------------------------
1 | import 'jest-preset-angular/setup-jest';
2 |
--------------------------------------------------------------------------------
/libs/scully-schematics/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base.json",
3 | "references": [
4 | {
5 | "path": "./tsconfig.lib.json"
6 | },
7 | {
8 | "path": "./tsconfig.spec.json"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/libs/scully-schematics/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "baseUrl": "./",
5 | "rootDir": "./",
6 | "esModuleInterop": true,
7 | "types": ["jest", "node"],
8 | "composite": true
9 | },
10 | "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.spec.js", "**/*.spec.jsx", "**/*.d.ts"]
11 | }
12 |
--------------------------------------------------------------------------------
/libs/scully/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../.eslintrc",
3 | "rules": {},
4 | "ignorePatterns": ["!**/*"]
5 | }
6 |
--------------------------------------------------------------------------------
/libs/scully/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/libs/scully/README.md:
--------------------------------------------------------------------------------
1 | # scully
2 |
3 | This is the Scully CLI repo. for details see our [documentation](https://scully.io)
4 | Scully is the best static site generator for Angular projects looking to embrace the JAMStack.
5 |
6 | How does it work?
7 | Under the hood, Scully analyzes an Angular application, and it generates a static version of it. In addition, it is EASY TO USE because it provides several Angular schematics.
8 |
9 | Scully works on Windows, Linux and macOS.
10 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/fileHanderPlugins/html.ts:
--------------------------------------------------------------------------------
1 | import { registerPlugin } from '../pluginManagement/pluginRepository';
2 |
3 | registerPlugin('fileHandler', 'html', async (raw: string) => raw, ['html']);
4 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/fileHanderPlugins/index.ts:
--------------------------------------------------------------------------------
1 | export * from './asciidoc';
2 | export * from './markdown';
3 | export * from './html';
4 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | export * from './fileHanderPlugins';
2 | export * from './pluginManagement';
3 | export * from './renderPlugins';
4 | export * from './routerPlugins';
5 | export * from './systemPlugins';
6 | export * from './testData';
7 | export * from './utils';
8 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/pluginManagement/index.ts:
--------------------------------------------------------------------------------
1 | export * from './pluginRepository';
2 | export * from './pluginConfig';
3 | export * from './Plugin.interfaces';
4 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/pluginManagement/systemPlugins.ts:
--------------------------------------------------------------------------------
1 | import '../fileHanderPlugins/asciidoc';
2 | import '../fileHanderPlugins/html';
3 | import '../fileHanderPlugins/markdown';
4 | import '../renderPlugins/contentRenderPlugin';
5 | import '../routerPlugins/contentFolderPlugin';
6 | import '../renderPlugins/contentTextRenderPlugin';
7 | import '../routerPlugins/defaultRouterPlugin';
8 | import '../routerPlugins/ignoredRoutePlugin';
9 | import '../routerPlugins/jsonRoutePlugin';
10 | import '../renderPlugins/seoHrefCompletionPlugin';
11 | import '../renderPlugins/content-render-utils/customMarkdownOptions';
12 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/renderPlugins/content-render-utils/customMarkdownOptions.ts:
--------------------------------------------------------------------------------
1 | export const customMarkdownOptions = (html: string) => {
2 | return html.replace(/\]*\>[^<]*\<\/a\>\{[^}]*\}/g, (val, pos) => {
3 | const [start, rest] = val.split('{:');
4 | const injectStr = rest.slice(0, -1);
5 | const [initial, end] = start.split('href=');
6 | return `${initial} ${injectStr} href=${end}`;
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/renderPlugins/content-render-utils/findComments.ts:
--------------------------------------------------------------------------------
1 | export function findComments(el: Node, data?: string): Node[] | Node | undefined {
2 | const comments = [] as Node[];
3 | for (const node of Array.from(el.childNodes)) {
4 | if (node.nodeType === 8) {
5 | if (data && node['data'] === data) {
6 | return node;
7 | }
8 | comments.push(node);
9 | }
10 | }
11 | return data ? undefined : comments;
12 | }
13 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/renderPlugins/content-render-utils/getIdAttrName.ts:
--------------------------------------------------------------------------------
1 | export function getIdAttrName(attrs: string): string {
2 | try {
3 | return (
4 | attrs &&
5 | attrs
6 | .split(' ')
7 | .find((at: string) => at.trim().startsWith('_ngcontent'))
8 | .split('=')[0]
9 | );
10 | } catch {
11 | return '6';
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/renderPlugins/content-render-utils/getScript.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * @returns a string representing the script that parses the page and loads the scullyContent variable.
3 | * The string is kept on one line as the focus is to keep it as small as possible.
4 | */
5 | export function getScript(ngIdentifier: string): string {
6 | // tslint:disable-next-line:no-unused-expression
7 | return `try {window['scullyContent'] = {cssId:"${ngIdentifier}",html:document.body.innerHTML.split('')[1].split('')[0]};} catch(e) {console.error('scully could not parse content');}`;
8 | }
9 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/renderPlugins/content-render-utils/index.ts:
--------------------------------------------------------------------------------
1 | export * from './convertAndInjectContent';
2 | export * from './customMarkdownOptions';
3 | export * from './findComments';
4 | export * from './getIdAttrName';
5 | export * from './getScript';
6 | export * from './handleFile';
7 | export * from './injectHtml';
8 | export * from './readFileAndCheckPrePublishSlug';
9 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/renderPlugins/index.ts:
--------------------------------------------------------------------------------
1 | export * from './contentRenderPlugin';
2 | export * from './contentTextRenderPlugin';
3 | export * from './executePlugins';
4 | export * from './jsdomPlugins';
5 | export * from './seoHrefCompletionPlugin';
6 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/routerPlugins/defaultRouterPlugin.ts:
--------------------------------------------------------------------------------
1 | import { registerPlugin } from '../pluginManagement/pluginRepository';
2 | import { RoutePlugin } from '../pluginManagement/Plugin.interfaces';
3 | import { HandledRoute } from './handledRoute.interface';
4 |
5 | async function defaultRouterPlugin(route: string) {
6 | return [{ route } as HandledRoute];
7 | }
8 | registerPlugin('router', 'default', defaultRouterPlugin);
9 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/routerPlugins/ignoredRoutePlugin.ts:
--------------------------------------------------------------------------------
1 | import { registerPlugin } from '../pluginManagement/pluginRepository';
2 | import { RoutePlugin } from '../pluginManagement/Plugin.interfaces';
3 | import { HandledRoute } from './handledRoute.interface';
4 |
5 | /**
6 | * The ignoredPlugin helps to take routes out.
7 | * when you use this plugin, the route will never be rendered.
8 | */
9 | registerPlugin('router', 'ignored', async (route: string) => [] as HandledRoute[]);
10 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/routerPlugins/index.ts:
--------------------------------------------------------------------------------
1 | export * from './addOptionalRoutesPlugin';
2 | export * from './contentFolderPlugin';
3 | export * from './defaultRouterPlugin';
4 | export * from './ignoredRoutePlugin';
5 | export * from './jsonRoutePlugin';
6 | export * from './renderTemplate';
7 | export * from './traverseAppRoutesPlugin';
8 | export * from './handledRoute.interface';
9 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/systemPlugins/index.ts:
--------------------------------------------------------------------------------
1 | export * from './storeRoutes';
2 | export * from './writeToFs.plugin';
3 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/testData/index.ts:
--------------------------------------------------------------------------------
1 | export * from './posts-testdata';
2 | export * from './users-testdata';
3 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/assertNever.ts:
--------------------------------------------------------------------------------
1 | export function assertNever(x: never): never {
2 | throw new Error('Unexpected object: ' + x);
3 | }
4 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/cache.ts:
--------------------------------------------------------------------------------
1 | export const rawRoutesCache = new Set();
2 | export const flushRawRoutesCache = () => rawRoutesCache.clear();
3 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/cacheFolder.ts:
--------------------------------------------------------------------------------
1 | import { scullyConfig } from '@scullyio/scully';
2 | import { join } from 'path';
3 |
4 | export const cacheFolder = join(
5 | scullyConfig.homeFolder,
6 | 'node_modules/.cache/scully'
7 | );
8 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/chunk.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * split an array in multiple chunks
3 | * @param arr
4 | * @param chunkSize
5 | */
6 | export function chunk(arr: T[], chunkSize: number): T[][] {
7 | return arr.reduce(
8 | (chunks: any[], elm: any, index: number) => {
9 | if (index % chunkSize === 0) {
10 | /** create new chunk */
11 | chunks.push([]);
12 | }
13 | const currentChunk = chunks[chunks.length - 1];
14 | currentChunk.push(elm);
15 | return chunks;
16 | },
17 | [[]]
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/createFolderFor.ts:
--------------------------------------------------------------------------------
1 | import { mkdirSync } from 'fs';
2 | import { dirname } from 'path';
3 | export function createFolderFor(file) {
4 | /** drop the /xxx.html part of the route */
5 | const dirPath = dirname(file);
6 | try {
7 | // @ts-ignore
8 | mkdirSync(dirPath, { recursive: true });
9 | } catch (err) {
10 | if (err.code !== 'EEXIST') {
11 | throw err;
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/deepGet.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Returns the property if it exists in the object
3 | * @param p string or array describing the property to get (eg result.friends.list)
4 | * @param o the object to extract the data out
5 | */
6 | export const deepGet = (p: string | string[], o: any) => {
7 | if (typeof p === 'string') {
8 | p = p.split('.');
9 | }
10 | return p.reduce((xs, x) => (xs && xs[x] ? xs[x] : undefined), o);
11 | };
12 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/handlers/index.ts:
--------------------------------------------------------------------------------
1 | export * from './defaultAction';
2 | export * from './handleAllDone';
3 | export * from './handleRouteDiscoveryDone';
4 | export * from './handleTravesal';
5 | export * from './renderParallel';
6 | export * from './routeDiscovery';
7 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/handlers/renderPlugin.ts:
--------------------------------------------------------------------------------
1 | import { registerPlugin, scullySystem } from '../../pluginManagement';
2 | import { HandledRoute } from '../../routerPlugins/handledRoute.interface';
3 | import { renderParallel } from './renderParallel';
4 |
5 | export const renderPlugin = 'renderPlugin' as const;
6 | registerPlugin(scullySystem, renderPlugin, defaultRenderPlugin);
7 | async function defaultRenderPlugin(handledRoutes: HandledRoute[]) {
8 | /** start handling each route, works in chunked parallel mode */
9 | await renderParallel(handledRoutes);
10 | }
11 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/performanceIds.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * an constant to keep track of the id's for performance gathering
3 | */
4 | export const performanceIds = new Set();
5 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/platform-server/deferred.ts:
--------------------------------------------------------------------------------
1 | export class Deferred {
2 | resolve!: (result?: any) => void;
3 | reject!: (error?: any) => void;
4 | promise = new Promise((rs, rj) => {
5 | this.resolve = rs;
6 | this.reject = rj;
7 | });
8 | }
9 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/platform-server/index.ts:
--------------------------------------------------------------------------------
1 | // export * from './ps-runner';
2 | export { enableSPS } from './startupSpS';
3 | export { Deferred } from './deferred';
4 | export { SPSRouteRenderer } from './serverPlatformRender';
5 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/procesmanager/index.ts:
--------------------------------------------------------------------------------
1 | export {Job} from './job'
2 | export {handleJobs} from './handleJobs'
3 | export {TaskWorker} from './TaskWorker'
4 | export {startWorkerListener, workerMessages$, addWorkerTask} from './startWorkerListener'
5 | export {getPool, terminatePool} from './taskPool'
6 | export {Tasks} from './tasks.interface'
7 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/procesmanager/tasks.interface.ts:
--------------------------------------------------------------------------------
1 | /** helpers for inside the actual worker */
2 |
3 | export interface Tasks {
4 | [x: string]: (...msg: any[]) => any | Promise;
5 | }
6 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/restart.ts:
--------------------------------------------------------------------------------
1 | import { spawn } from 'child_process';
2 |
3 | export function restartProcess() {
4 | process.on('exit', () => {
5 | spawn(process.argv.shift(), process.argv, {
6 | cwd: process.cwd(),
7 | detached: true,
8 | stdio: 'inherit'
9 | });
10 | });
11 | process.exit();
12 | }
13 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/serverstuff/index.ts:
--------------------------------------------------------------------------------
1 | export * from './addSSL';
2 | export * from './dataServer';
3 | export * from './isPortTaken';
4 | export * from './proxyAdd';
5 | export * from './staticServer';
6 | export * from './waitForServerToBeAvailable';
7 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/serverstuff/isPortTaken.ts:
--------------------------------------------------------------------------------
1 | import { createServer } from 'net';
2 |
3 | export const isPortTaken = (usedPort: number): Promise =>
4 | new Promise((resolve, reject) => {
5 | const tester = createServer()
6 | .once('error', err => {
7 | // tslint:disable-next-line: no-string-literal
8 | if (err['code'] !== 'EADDRINUSE') {
9 | reject(err);
10 | return;
11 | }
12 | resolve(true);
13 | return;
14 | })
15 | .once('listening', () => {
16 | tester
17 | .once('close', () => {
18 | resolve(false);
19 | })
20 | .close();
21 | })
22 | .listen(usedPort);
23 | });
24 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/serverstuff/title404.ts:
--------------------------------------------------------------------------------
1 | export const title404 = '404 - URL not provided in the app Scully is serving';
2 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/services/index.ts:
--------------------------------------------------------------------------------
1 | export * from './routeStorage';
2 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/services/routeStorage.ts:
--------------------------------------------------------------------------------
1 | import { registerPlugin } from '../../pluginManagement';
2 | import { HandledRoute } from '../../routerPlugins';
3 | import { Deferred } from "../platform-server/deferred";
4 |
5 | const deferredRoutes = new Deferred();
6 | export const getHandledRoutes = () => deferredRoutes.promise;
7 |
8 | /** this plugin will only get called in the "main" thread */
9 | registerPlugin('routeDiscoveryDone', 'storeAllRoutes', async (routes: HandledRoute[]) => {
10 | deferredRoutes.resolve(routes);
11 | });
12 |
13 |
14 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/startup/index.ts:
--------------------------------------------------------------------------------
1 | export * from './scullyInit';
2 | export * from './startBackgroundServer';
3 | export * from './startUpEnvChecks';
4 | export * from './startup';
5 | export * from './watchMode';
6 |
--------------------------------------------------------------------------------
/libs/scully/src/lib/utils/waitForIt.ts:
--------------------------------------------------------------------------------
1 | export function waitForIt(milliSeconds: number) {
2 | return new Promise((resolve) => setTimeout(() => resolve(), milliSeconds));
3 | }
4 |
--------------------------------------------------------------------------------
/libs/universal/README.md:
--------------------------------------------------------------------------------
1 | # @scullyio/universal
2 |
3 | Helpers for rendering Angular aps with scully and universal
4 |
5 |
6 |
--------------------------------------------------------------------------------
/libs/universal/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | displayName: 'universal',
3 | preset: '../../jest.preset.js',
4 | setupFilesAfterEnv: ['/src/test-setup.ts'],
5 | globals: {
6 | 'ts-jest': {
7 | tsconfig: '/tsconfig.spec.json',
8 | stringifyContentPathRegex: '\\.(html|svg)$',
9 | },
10 | },
11 | coverageDirectory: '../../coverage/libs/universal',
12 | snapshotSerializers: [
13 | 'jest-preset-angular/build/serializers/no-ng-attributes',
14 | 'jest-preset-angular/build/serializers/ng-snapshot',
15 | 'jest-preset-angular/build/serializers/html-comment',
16 | ],
17 | };
18 |
--------------------------------------------------------------------------------
/libs/universal/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3 | "dest": "../../dist/libs/universal",
4 | "lib": {
5 | "entryFile": "src/index.ts",
6 | "umdModuleIds": {
7 | "@scullyio/scully": "@scullyio/scully",
8 | "@scullyio/ng-lib": "@scullyio/ng-lib",
9 | "crypto": "crypto"
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/libs/universal/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@scullyio/universal",
3 | "version": "0.0.1",
4 | "peerDependencies": {
5 | "@angular/common": "^12.0.0",
6 | "@angular/core": "^12.0.0"
7 | },
8 | "dependencies": {
9 | "tslib": "^2.0.0"
10 | },
11 | "devDependencies": {
12 | "@types/node": "^14.14.37"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/libs/universal/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/universal.module';
2 |
--------------------------------------------------------------------------------
/libs/universal/src/test-setup.ts:
--------------------------------------------------------------------------------
1 | import 'jest-preset-angular';
2 |
--------------------------------------------------------------------------------
/libs/universal/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base.json",
3 | "files": [],
4 | "include": [],
5 | "references": [
6 | {
7 | "path": "./tsconfig.lib.json"
8 | },
9 | {
10 | "path": "./tsconfig.lib.prod.json"
11 | },
12 | {
13 | "path": "./tsconfig.spec.json"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/libs/universal/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "target": "es2015",
6 | "declaration": true,
7 | "declarationMap": true,
8 | "inlineSources": true,
9 | "allowJs": true,
10 | "allowSyntheticDefaultImports": true,
11 | "experimentalDecorators": true,
12 | "types": ["node"]
13 | },
14 | "angularCompilerOptions": {
15 | "skipTemplateCodegen": false,
16 | "strictMetadataEmit": true,
17 | "enableResourceInlining": true,
18 | "enableIvy": true,
19 | "compilationMode": "partial"
20 | },
21 | "exclude": ["src/test-setup.ts", "**/*.spec.ts"],
22 | "include": ["**/*.ts"]
23 | }
24 |
--------------------------------------------------------------------------------
/libs/universal/tsconfig.lib.prod.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.lib.json",
4 | "compilerOptions": {
5 | "declarationMap": false
6 | },
7 | "angularCompilerOptions": {
8 | "enableIvy": true
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/libs/universal/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"]
7 | },
8 | "files": ["src/test-setup.ts"],
9 | "include": ["**/*.spec.ts", "**/*.d.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/proxy.conf.js:
--------------------------------------------------------------------------------
1 | const PROXY_CONFIG = [
2 | {
3 | context: ['/api'],
4 | target: 'http://localhost:8200/',
5 | changeOrigin: true,
6 | pathRewrite: { '^/api': '' },
7 | secure: false,
8 | },
9 | ];
10 |
11 | module.exports = PROXY_CONFIG;
12 |
--------------------------------------------------------------------------------
/scully.heavy.config.ts:
--------------------------------------------------------------------------------
1 | import { config as original } from './scully.sample-blog.config';
2 |
3 | export const config = Object.assign({}, original);
4 |
5 | config.routes['/demo/:id'].numberOfPages = 1500;
6 | config.routes['/user/:userId'].userId.resultsHandler = undefined;
7 | /** crank it up a notch, more threads seems more likely to fail. */
8 | config.maxRenderThreads = 32;
9 |
--------------------------------------------------------------------------------
/scully/.gitignore:
--------------------------------------------------------------------------------
1 | **/*.js
2 | **/*.d.ts
3 | **/*.map
4 |
--------------------------------------------------------------------------------
/scully/baseconfig.ts:
--------------------------------------------------------------------------------
1 | import { ScullyConfig } from '@scullyio/scully';
2 |
3 | export const baseConfig: Partial = {};
4 |
--------------------------------------------------------------------------------
/scully/plugins/error.ts:
--------------------------------------------------------------------------------
1 | import { registerPlugin, logWarn } from '@scullyio/scully';
2 |
3 | const errorPlugin = async (html, options) => {
4 | try {
5 | throw new Error(`new error`);
6 | } catch (e) {
7 | logWarn(`errorPlugin works!`);
8 | }
9 | return undefined;
10 | };
11 |
12 | const validator = async (config) => [];
13 | registerPlugin('postProcessByHtml', 'errorPlugin', errorPlugin, validator);
14 |
--------------------------------------------------------------------------------
/scully/plugins/render-once.ts:
--------------------------------------------------------------------------------
1 | import { findPlugin, HandledRoute, log, routeRenderer, registerPlugin, yellow } from '@scullyio/scully';
2 | import { scullySystem } from '@scullyio/scully/src/lib/pluginManagement/pluginRepository';
3 |
4 | export const renderOnce = 'renderOnce' as const;
5 | const render = findPlugin(routeRenderer);
6 | const cache = new Map>();
7 |
8 | registerPlugin(scullySystem, renderOnce, (route: HandledRoute, config) => {
9 | if (!cache.has(config)) {
10 | cache.set(config, render(route, config));
11 | }
12 | log(`Cache used for "${yellow(route.route)}"`);
13 | return cache.get(config);
14 | });
15 |
--------------------------------------------------------------------------------
/scully/tsconfig.sample-blog.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "runtime",
5 | "target": "es2020",
6 | "allowJs": true,
7 | "allowSyntheticDefaultImports": true,
8 | "skipDefaultLibCheck": true,
9 | "skipLibCheck": true,
10 | "lib": [
11 | "ES2020",
12 | "DOM"
13 | ],
14 | "types": [
15 | "node"
16 | ],
17 | "moduleResolution": "Node",
18 | "module": "CommonJS"
19 | },
20 | "files": [
21 | "../apps/sample-blog/src/app/app.sps.module.ts"
22 | ],
23 | "angularCompilerOptions": {
24 | "enableIvy": true,
25 | "compilationMode": "partial"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/scully/tsconfig.scully-docs.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "runtime",
5 | "target": "es2020",
6 | "allowJs": true,
7 | "allowSyntheticDefaultImports": true,
8 | "skipDefaultLibCheck": true,
9 | "skipLibCheck": true,
10 | "lib": [
11 | "ES2020",
12 | "DOM"
13 | ],
14 | "types": [
15 | "node"
16 | ],
17 | "moduleResolution": "Node",
18 | "module": "CommonJS"
19 | },
20 | "files": [
21 | "../apps/scully-docs/src/app/app.sps.module.ts"
22 | ],
23 | "angularCompilerOptions": {
24 | "enableIvy": true,
25 | "compilationMode": "partial"
26 | }
27 | }
--------------------------------------------------------------------------------
/testexit.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * The above line is needed to be able to run in npx and CI.
5 | */
6 | const { log, yellow } = require('./dist/libs/scully');
7 |
8 | log(`I like ${yellow('yellow')}`);
9 | log(process.eventNames().join('\n'));
10 |
--------------------------------------------------------------------------------
/tests/assets/blog-files/2014/2/12/asdf.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'Deeply embedded'
3 | author: 'Sander Elias'
4 | 'publish date': 2019-11-27T00:00:00.000Z
5 | published: true
6 | description: 'This is the deep folder demo page in this sample.'
7 | slugs:
8 | ---
9 |
10 | # Deep folder 1
11 |
12 | ## its a wild world after all
13 |
14 | ```typescript
15 | console.log('amazing');
16 | ```
17 |
18 | Related information [page-3](/blog/page-3)
19 |
20 | [site-map](/home)
21 |
--------------------------------------------------------------------------------
/tests/assets/blog-files/foreign-chars.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'This is my post in Russian'
3 | description: 'blog description'
4 | slug: Русский-слаг
5 | ---
6 |
7 | # This is my post with a slug in Russian
8 |
9 | the slug should read: Русский-слаг
10 |
--------------------------------------------------------------------------------
/tests/assets/blog-files/page-1.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: My first page
3 | author: Sander Elias
4 | publish date: 2019-11-26
5 | slug: look at_my-urls Cool
6 | slugs:
7 | - 'page-1'
8 | description: This is the first demo page in this sample.
9 | ---
10 |
11 | # Page 1
12 |
13 | ## or, how to do interesting blog things
14 |
15 | ```typescript
16 | console.log('hello world');
17 | console.log('yah');
18 | const x = 123;
19 | ```
20 |
21 | Hello Dolly?
22 |
23 | Related information [page-2](/blog/___UNPUBLISHED___k5nhcflm_SJwD4Z0QDrIHg1PGHo2mrfLZE8sfUsPy)
24 |
25 | [content page](/content/two)
26 |
27 | # Down-under
28 |
29 | [site-map](/home)
30 |
--------------------------------------------------------------------------------
/tests/assets/blog-files/page-2.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'My second page'
3 | author: 'Sander Elias'
4 | published: false
5 | description: 'This is the second demo page in this sample.'
6 | slugs:
7 | - ___UNPUBLISHED___k5nhcflm_SJwD4Z0QDrIHg1PGHo2mrfLZE8sfUsPy
8 | - page-2
9 | ---
10 |
11 | # Page 2
12 |
13 | ## its a wild world after all
14 |
15 | Link to [angular](http://angular.io){:target=\_blank}
16 |
17 | ```typescript
18 | console.log('amazing');
19 | ```
20 |
21 | Related information [page-3](/blog/page-3)
22 |
23 | [site-map](/home)
24 |
--------------------------------------------------------------------------------
/tests/assets/blog-files/page-3.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: My third page
3 | author: Sander Elias
4 | publish date: 2019-11-28
5 | description: At this point, I should write something different in here.
6 | slug: My third page,
7 | slugs:
8 | - page-3
9 | ---
10 |
11 | # Page 3
12 |
13 | ## its a wild world after all
14 |
15 | ```typescript
16 | console.log('amazing');
17 | ```
18 |
19 | Related information [page-1](/blog/page-1)
20 |
21 | [site-map](/home)
22 |
--------------------------------------------------------------------------------
/tests/assets/blog-files/page-5.md:
--------------------------------------------------------------------------------
1 | # Page 5
2 |
--------------------------------------------------------------------------------
/tests/assets/blog-files/scullyio-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/tests/assets/blog-files/scullyio-icon.png
--------------------------------------------------------------------------------
/tests/assets/blog-files/test/testing.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'My test sub page'
3 | author: 'Sander Elias'
4 | 'publish date': 2019-11-27T00:00:00.000Z
5 | published: true
6 | description: 'This is the second demo page in this sample.'
7 | slugs:
8 | ---
9 |
10 | # Deep sub test 2
11 |
12 | ## its a wild world after all
13 |
14 | ```typescript
15 | console.log('amazing');
16 | ```
17 |
18 | Related information [page-3](/blog/page-3)
19 |
20 | [site-map](/home)
21 |
--------------------------------------------------------------------------------
/tests/assets/blog-files/testing-empty.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/tests/assets/blog-files/testing-empty.md
--------------------------------------------------------------------------------
/tests/cypress/fixtures/example.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Using fixtures to represent data",
3 | "email": "hello@cypress.io",
4 | "body": "Fixtures are a great way to mock data for responses to routes"
5 | }
6 |
--------------------------------------------------------------------------------
/tests/cypress/integration/doclinkScoll.spec.js:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | context('docs-link-update-plugin', () => {
4 | it('should have page 6 header', () => {
5 | cy.visit('/blog/page-6');
6 | cy.get('#page-6').should('have.text', 'Page 6');
7 | });
8 |
9 | it('should scroll down by clicking on hash-link', () => {
10 | cy.get('[data-hash=end-of-page]').click();
11 | cy.get('#end-of-page').should('be.visible');
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/tests/cypress/integration/getcurrent.spec.js:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | context('RoutesService tests', () => {
4 | it('should start with toplevel', () => {
5 | cy.visit('/home');
6 | cy.get('main>app-static>h1').should((el) => assert.isTrue(el.html() === 'Toplevel routes in application'));
7 | });
8 |
9 | it('navigate to all', () => {
10 | cy.get('main > app-static > a:nth-child(2)')
11 | .click()
12 | .get('main>app-static>h1')
13 | .should((el) => assert.isTrue(el.html() === 'All routes in application'));
14 | });
15 | });
16 |
--------------------------------------------------------------------------------
/tests/jest/src/__tests__/contentText.spec.ts:
--------------------------------------------------------------------------------
1 | import { readPage, replaceIndexNG } from '../test-config.helper';
2 | import { expect } from '@jest/globals';
3 |
4 | describe('customText plugin', () => {
5 | it('Check content generated form function', () => {
6 | const index: string = readPage('content/there');
7 | const cleanIndex = replaceIndexNG(index);
8 | expect(cleanIndex).toMatchSnapshot();
9 | });
10 | });
11 |
12 | describe('customText plugin', () => {
13 | it('Check contentPlugin render', () => {
14 | const index: string = readPage('content/two');
15 | const cleanIndex = replaceIndexNG(index);
16 | expect(cleanIndex).toMatchSnapshot();
17 | });
18 | });
19 |
--------------------------------------------------------------------------------
/tests/jest/src/__tests__/exclude.spec.ts:
--------------------------------------------------------------------------------
1 | import { readPage } from '../test-config.helper';
2 |
3 | describe('guessParserOptions', () => {
4 | it("should remove files from route discovery so that routes aren't present", () => {
5 | let fileExists = true;
6 | // Trying to read the missing file should throw an error. If error doesn't happen, test fails. Meaning...
7 | // if the files exists (which it shouldn't, the test fails.
8 | try {
9 | readPage('/exclude/notpresent');
10 | } catch ({ message }) {
11 | if (message.includes('" not found at location "')) {
12 | fileExists = false;
13 | }
14 | }
15 | expect(fileExists).toBe(false);
16 | });
17 | });
18 |
--------------------------------------------------------------------------------
/tests/jest/src/__tests__/extra-users.spec.ts:
--------------------------------------------------------------------------------
1 | import { readPage } from '../test-config.helper';
2 |
3 | describe('extra-users', () => {
4 | it('should generate user-page 1 and 2', () => {
5 | let fileExists = true;
6 | // Trying to read the missing file should throw an error. If error doesn't happen, test fails. Meaning...
7 | // if the files exists (which it shouldn't, the test fails.
8 | try {
9 | readPage('/user/1');
10 | readPage('/user/2');
11 | } catch ({ message }) {
12 | if (message.includes('" not found at location "')) {
13 | fileExists = false;
14 | }
15 | }
16 | expect(fileExists).toBe(true);
17 | });
18 | });
19 |
--------------------------------------------------------------------------------
/tests/jest/src/__tests__/home.spec.ts:
--------------------------------------------------------------------------------
1 | import { readPage, replaceIndexNG } from '../test-config.helper';
2 | import { expect } from '@jest/globals';
3 |
4 | describe('Check list of all', () => {
5 | it('Check clean all list from scully', () => {
6 | const index: string = readPage('/home/all');
7 | const cleanIndex = replaceIndexNG(index);
8 | expect(cleanIndex).toMatchSnapshot();
9 | });
10 | });
11 |
--------------------------------------------------------------------------------
/tests/jest/src/__tests__/manualIdle.spec.ts:
--------------------------------------------------------------------------------
1 | import { replaceIndexNG, readPage } from '../test-config.helper';
2 |
3 | describe('manualIdleDetection: test manual Idle detection', () => {
4 | const index: string = readPage('manualIdle');
5 | const cleanIndex = replaceIndexNG(index);
6 |
7 | it('Should have the text "__ManualIdle__"', () => {
8 | expect(cleanIndex.includes('__ManualIdle__')).toBe(true);
9 | });
10 | });
11 |
--------------------------------------------------------------------------------
/tests/jest/src/__tests__/rawPage.spec.ts:
--------------------------------------------------------------------------------
1 | import { readPage, replaceIndexNG } from '../test-config.helper';
2 | import { expect } from '@jest/globals';
3 |
4 | const expectedContent = `The url "/rawData" is not provided in the sampels app, but comes from an external resource`;
5 |
6 | describe('Check list of all', () => {
7 | it('Check clean all list from scully', () => {
8 | const index: string = readPage('/rawRoute');
9 | expect(index).toContain(expectedContent);
10 | });
11 | });
12 |
--------------------------------------------------------------------------------
/tests/jest/src/__tests__/users.spec.ts:
--------------------------------------------------------------------------------
1 | import { readPage, replaceIndexNG } from '../test-config.helper';
2 | import { expect } from '@jest/globals';
3 |
4 | describe('JsonPlugin: test user List', () => {
5 | it('Check clean blog index by scully', () => {
6 | const index: string = readPage('/user');
7 | const cleanIndex = replaceIndexNG(index);
8 | expect(cleanIndex).toMatchSnapshot();
9 | });
10 | });
11 |
--------------------------------------------------------------------------------
/tests/jest/src/jest.config.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | module.exports = {
4 | preset: '../../../jest.preset.js',
5 | globals: {
6 | 'ts-jest': {
7 | tsconfig: '/tsconfig.spec.json',
8 | },
9 | },
10 | testEnvironment: 'jsdom',
11 |
12 | setupFilesAfterEnv: ['../../../tests/jest/src/setup-jest.ts'],
13 | transform: {
14 | '^.+\\.[tj]sx?$': 'ts-jest',
15 | },
16 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'],
17 | coverageDirectory: '../../../coverage/custom-test-set',
18 | displayName: 'custom-test-set',
19 | };
20 |
--------------------------------------------------------------------------------
/tests/jest/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../tsconfig.json",
3 | "compilerOptions": {
4 | "types": ["node", "jest"]
5 | },
6 | "include": [],
7 | "files": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.spec.json"
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/tests/jest/src/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"]
7 | },
8 | "include": [
9 | "**/*.spec.ts",
10 | "**/*.spec.tsx",
11 | "**/*.spec.js",
12 | "**/*.spec.jsx",
13 | "**/*.d.ts"
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/testsps.sh:
--------------------------------------------------------------------------------
1 | # # rm -fr node_modules/@scullyio/ng-lib/
2 | # rm -fr dist/libs/ng-lib
3 | # npx nx build ng-lib --prod
4 | # # npx ngcc -l info
5 | # # npx nx build sps-sample --prod
6 | # rm -fr .scully/__cache
7 | npx nx build plugins-base-href-rewrite
8 | npx nx build scully
9 | node ./dist/libs/scully/src/scully.js --project sample-blog --RSD
10 |
--------------------------------------------------------------------------------
/tools/generators/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scullyio/scully/179650fc26b8951e0eaedf9edc0a0f6b9a49fc8b/tools/generators/.gitkeep
--------------------------------------------------------------------------------
/tools/listVersions.ts:
--------------------------------------------------------------------------------
1 | import { join } from 'node:path';
2 | import { folder, getPublishableProjects, readJson } from './utils.js';
3 |
4 | const currentVersions = await getPublishableProjects();
5 |
6 | for (const pkg of currentVersions) {
7 | const locOrg = join(folder, './', pkg.root, 'package.json');
8 | const { name, version } = readJson(locOrg);
9 | console.log(`${name}@${version}`);
10 | }
11 |
--------------------------------------------------------------------------------
/tools/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tools",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "./src/index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "type": "module",
10 | "author": "",
11 | "license": "MIT"
12 | }
13 |
--------------------------------------------------------------------------------
/tools/pushtoGit.ts:
--------------------------------------------------------------------------------
1 | import simpleGit, { SimpleGit, SimpleGitOptions } from 'simple-git';
2 |
3 | export async function pushToGit(commitMessage: string) {
4 | const options: Partial = {
5 | baseDir: process.cwd(),
6 | binary: 'git',
7 | maxConcurrentProcesses: 6,
8 | };
9 |
10 | const git: SimpleGit = simpleGit(options);
11 | await git.addConfig('user.name', 'workflow-bot');
12 | await git.addConfig('user.email', 'workflow-bot@users.noreply.github.com');
13 | await git.add('.');
14 | await git.commit(commitMessage);
15 | try {
16 | const resp = await git.push();
17 | } catch (e) {
18 | console.error(e);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/tools/tsconfig.tools.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "outDir": "../dist/tools",
4 | "rootDir": ".",
5 | "target": "ES2020",
6 | "moduleResolution": "Node",
7 | "module": "ESNext",
8 | "lib": ["es2021"],
9 | "types": ["node"]
10 | },
11 | "include": ["**/*.ts", "./deployRelease.mts"]
12 | }
13 |
--------------------------------------------------------------------------------
/tools/updateRelaseFiles.ts:
--------------------------------------------------------------------------------
1 | import { writeFileSync } from 'fs';
2 | import { join } from 'path';
3 | import { folder, getPublishableProjects } from './utils';
4 |
5 | (async () => {
6 | console.log('replacing release checksums files with current version');
7 | const currentVersions = await getPublishableProjects();
8 | const releaseName = join(folder, './tools', 'releaseChecksums.release.json');
9 | const developName = join(folder, './tools', 'releaseChecksums.develop.json');
10 | writeFileSync(releaseName, JSON.stringify(currentVersions, undefined, 2));
11 | writeFileSync(developName, JSON.stringify(currentVersions, undefined, 2));
12 | })();
13 |
--------------------------------------------------------------------------------
/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./out-tsc/spec",
5 | "types": ["jest", "node"],
6 | "esModuleInterop": true,
7 | },
8 | "include": ["tests/jest/src/__tests__/*.spec.ts", "apps/sample-blog/src/app/**/*.d.ts"],
9 | "exclude": ["tests/cypress/**/*.spec.ts"]
10 | }
11 |
--------------------------------------------------------------------------------