diff --git a/apps/angular/anchor-scrolling/README.md b/apps/angular/anchor-scrolling/README.md
index c6ffb7f..a159fd8 100644
--- a/apps/angular/anchor-scrolling/README.md
+++ b/apps/angular/anchor-scrolling/README.md
@@ -1,6 +1,6 @@
# Anchor Navigation
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/bug-cd/README.md b/apps/angular/bug-cd/README.md
index 5f0e3b4..cb42e77 100644
--- a/apps/angular/bug-cd/README.md
+++ b/apps/angular/bug-cd/README.md
@@ -1,6 +1,6 @@
# Change Detection Bug
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/context-outlet-type/README.md b/apps/angular/context-outlet-type/README.md
index c7eb23b..d195baa 100644
--- a/apps/angular/context-outlet-type/README.md
+++ b/apps/angular/context-outlet-type/README.md
@@ -1,6 +1,6 @@
# Typed ContextOutlet
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/crud/README.md b/apps/angular/crud/README.md
index e351dc1..0a6518b 100644
--- a/apps/angular/crud/README.md
+++ b/apps/angular/crud/README.md
@@ -1,6 +1,6 @@
# Crud application
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/decoupling/README.md b/apps/angular/decoupling/README.md
index faea604..0ba00e7 100644
--- a/apps/angular/decoupling/README.md
+++ b/apps/angular/decoupling/README.md
@@ -1,6 +1,6 @@
# Decoupling Components
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/di/README.md b/apps/angular/di/README.md
index e41c911..032601c 100644
--- a/apps/angular/di/README.md
+++ b/apps/angular/di/README.md
@@ -1,6 +1,6 @@
# Master Dependancy Injection
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/injection-token/README.md b/apps/angular/injection-token/README.md
index 8764b23..a96eb9c 100644
--- a/apps/angular/injection-token/README.md
+++ b/apps/angular/injection-token/README.md
@@ -1,6 +1,6 @@
# InjectionToken
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/interop-rxjs-signal/README.md b/apps/angular/interop-rxjs-signal/README.md
index d137b09..9cf32ef 100644
--- a/apps/angular/interop-rxjs-signal/README.md
+++ b/apps/angular/interop-rxjs-signal/README.md
@@ -1,6 +1,6 @@
# Interoperability Rxjs/Signal
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/module-to-standalone/README.md b/apps/angular/module-to-standalone/README.md
index fbbade2..bd227b7 100644
--- a/apps/angular/module-to-standalone/README.md
+++ b/apps/angular/module-to-standalone/README.md
@@ -1,6 +1,6 @@
# Module to Standalone
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/ngfor-enhancement/README.md b/apps/angular/ngfor-enhancement/README.md
index 0a849c0..937dfb5 100644
--- a/apps/angular/ngfor-enhancement/README.md
+++ b/apps/angular/ngfor-enhancement/README.md
@@ -1,6 +1,6 @@
# Directive Enhancement
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/permissions/README.md b/apps/angular/permissions/README.md
index bf79187..99b2e55 100644
--- a/apps/angular/permissions/README.md
+++ b/apps/angular/permissions/README.md
@@ -1,6 +1,6 @@
# Structural Directive
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/pipe-easy/README.md b/apps/angular/pipe-easy/README.md
index 350a0d5..8501be8 100644
--- a/apps/angular/pipe-easy/README.md
+++ b/apps/angular/pipe-easy/README.md
@@ -1,6 +1,6 @@
# Pure Pipe
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/pipe-hard/README.md b/apps/angular/pipe-hard/README.md
index d86000e..ba801bd 100644
--- a/apps/angular/pipe-hard/README.md
+++ b/apps/angular/pipe-hard/README.md
@@ -1,6 +1,6 @@
# Utility Wrapper Pipe
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/pipe-intermediate/README.md b/apps/angular/pipe-intermediate/README.md
index 78fa327..72809fd 100644
--- a/apps/angular/pipe-intermediate/README.md
+++ b/apps/angular/pipe-intermediate/README.md
@@ -1,6 +1,6 @@
# Wrap Function Pipe
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/projection/README.md b/apps/angular/projection/README.md
index 4d89c98..781198e 100644
--- a/apps/angular/projection/README.md
+++ b/apps/angular/projection/README.md
@@ -1,6 +1,6 @@
# Projection
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/router-input/README.md b/apps/angular/router-input/README.md
index c213e10..0aad6c3 100644
--- a/apps/angular/router-input/README.md
+++ b/apps/angular/router-input/README.md
@@ -1,6 +1,6 @@
# @RouterInput()
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/angular/styling/README.md b/apps/angular/styling/README.md
index 760a772..d47efe3 100644
--- a/apps/angular/styling/README.md
+++ b/apps/angular/styling/README.md
@@ -1,6 +1,6 @@
# Highly Customizable CSS
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/ngrx/effect-selector/README.md b/apps/ngrx/effect-selector/README.md
index 3f12862..b12a534 100644
--- a/apps/ngrx/effect-selector/README.md
+++ b/apps/ngrx/effect-selector/README.md
@@ -1,6 +1,6 @@
# Effect vs Selector
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/ngrx/notification/README.md b/apps/ngrx/notification/README.md
index 136a30f..36acdab 100644
--- a/apps/ngrx/notification/README.md
+++ b/apps/ngrx/notification/README.md
@@ -1,6 +1,6 @@
# Power of Effect
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/performance/default-onpush/README.md b/apps/performance/default-onpush/README.md
index 72b8090..29d7696 100644
--- a/apps/performance/default-onpush/README.md
+++ b/apps/performance/default-onpush/README.md
@@ -1,6 +1,6 @@
# Default vs OnPush
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/performance/memoized/README.md b/apps/performance/memoized/README.md
index 94feadd..520efb1 100644
--- a/apps/performance/memoized/README.md
+++ b/apps/performance/memoized/README.md
@@ -1,6 +1,6 @@
# Memoization
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/performance/ngfor-biglist/README.md b/apps/performance/ngfor-biglist/README.md
index 828f93e..4d164f0 100644
--- a/apps/performance/ngfor-biglist/README.md
+++ b/apps/performance/ngfor-biglist/README.md
@@ -1,6 +1,6 @@
# NgFor optimize big list
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/performance/ngfor-optimize/README.md b/apps/performance/ngfor-optimize/README.md
index a26efa5..1e9b2f8 100644
--- a/apps/performance/ngfor-optimize/README.md
+++ b/apps/performance/ngfor-optimize/README.md
@@ -1,6 +1,6 @@
# NgFor Optimization
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/performance/scroll-cd/README.md b/apps/performance/scroll-cd/README.md
index ef30c5c..dc0c313 100644
--- a/apps/performance/scroll-cd/README.md
+++ b/apps/performance/scroll-cd/README.md
@@ -1,6 +1,6 @@
# Optimize Change Detection
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/rxjs/pipe-bug/README.md b/apps/rxjs/pipe-bug/README.md
index d66511b..cad896a 100644
--- a/apps/rxjs/pipe-bug/README.md
+++ b/apps/rxjs/pipe-bug/README.md
@@ -1,6 +1,6 @@
# High Order Operator Bug
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/rxjs/race-condition/README.md b/apps/rxjs/race-condition/README.md
index 1c6b710..e9b6110 100644
--- a/apps/rxjs/race-condition/README.md
+++ b/apps/rxjs/race-condition/README.md
@@ -1,6 +1,6 @@
# Race Condition
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/testing/checkbox/README.md b/apps/testing/checkbox/README.md
index c1c3db7..905db5f 100644
--- a/apps/testing/checkbox/README.md
+++ b/apps/testing/checkbox/README.md
@@ -1,6 +1,6 @@
# Checkbox
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/testing/create-harness/README.md b/apps/testing/create-harness/README.md
index 4773835..600f340 100644
--- a/apps/testing/create-harness/README.md
+++ b/apps/testing/create-harness/README.md
@@ -1,6 +1,6 @@
# Harness Creation
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/testing/harness/README.md b/apps/testing/harness/README.md
index 15d9b51..541da1a 100644
--- a/apps/testing/harness/README.md
+++ b/apps/testing/harness/README.md
@@ -1,6 +1,6 @@
# Harness
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/testing/input-output/README.md b/apps/testing/input-output/README.md
index 127480a..59b5fff 100644
--- a/apps/testing/input-output/README.md
+++ b/apps/testing/input-output/README.md
@@ -1,6 +1,6 @@
# Input Output
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/testing/modal/README.md b/apps/testing/modal/README.md
index 01cc159..08737d5 100644
--- a/apps/testing/modal/README.md
+++ b/apps/testing/modal/README.md
@@ -1,6 +1,6 @@
# Modal
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/testing/nested/README.md b/apps/testing/nested/README.md
index 1b7fea6..8e1876a 100644
--- a/apps/testing/nested/README.md
+++ b/apps/testing/nested/README.md
@@ -1,6 +1,6 @@
# Nested Components
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/testing/router-outlet/README.md b/apps/testing/router-outlet/README.md
index 71208a4..7749159 100644
--- a/apps/testing/router-outlet/README.md
+++ b/apps/testing/router-outlet/README.md
@@ -1,6 +1,6 @@
# Router
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/testing/table/README.md b/apps/testing/table/README.md
index f5e232e..36451ff 100644
--- a/apps/testing/table/README.md
+++ b/apps/testing/table/README.md
@@ -1,6 +1,6 @@
Table testing
-> Author: Thomas Laforge
+> author: thomas-laforge
## Statement:
diff --git a/apps/testing/todos-list/README.md b/apps/testing/todos-list/README.md
index 2adce88..37a8e93 100644
--- a/apps/testing/todos-list/README.md
+++ b/apps/testing/todos-list/README.md
@@ -1,6 +1,6 @@
# Real-life Application
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/apps/typescript/overload/README.md b/apps/typescript/overload/README.md
index d181c0d..b4336af 100644
--- a/apps/typescript/overload/README.md
+++ b/apps/typescript/overload/README.md
@@ -1,6 +1,6 @@
# Function Overload
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/docs/src/components/Author.astro b/docs/src/components/Author.astro
new file mode 100644
index 0000000..65bf6cb
--- /dev/null
+++ b/docs/src/components/Author.astro
@@ -0,0 +1,41 @@
+---
+import { Icon } from '@astrojs/starlight/components';
+
+interface Props {
+ name: string;
+ twitter?: string;
+ linkedin?: string;
+ github?: string;
+}
+
+const { name, twitter, linkedin, github } = Astro.props;
+
+---
+
+
+ Created by {name}
+ {twitter && }
+ {linkedin && }
+ {github && }
+
+
+
+
\ No newline at end of file
diff --git a/docs/src/components/Content.astro b/docs/src/components/Content.astro
index 0203249..44a70f2 100644
--- a/docs/src/components/Content.astro
+++ b/docs/src/components/Content.astro
@@ -1,15 +1,18 @@
---
-import ChallengeFooter from './ChallengeFooter.astro'
-import CommentSection from './CommentSection.astro'
-import type { Props } from '@astrojs/starlight/props';
import Default from '@astrojs/starlight/components/MarkdownContent.astro';
+import type { Props } from '@astrojs/starlight/props';
+import { getEntry } from 'astro:content';
+import Author from './Author.astro';
+import ChallengeFooter from './ChallengeFooter.astro';
+import CommentSection from './CommentSection.astro';
-const {challengeNumber, author} = Astro.props.entry.data;
+const {challengeNumber} = Astro.props.entry.data;
+const author = Astro.props.entry.data.author ? await getEntry(Astro.props.entry.data.author) : null;
const renderCommentSection = !Astro.props.entry.data.noCommentSection;
---
-{ challengeNumber && author && Created by {author}
}
+{ challengeNumber && author && }
diff --git a/docs/src/components/VideoButton.astro b/docs/src/components/VideoButton.astro
index 496dd50..aeacd82 100644
--- a/docs/src/components/VideoButton.astro
+++ b/docs/src/components/VideoButton.astro
@@ -1,5 +1,11 @@
---
+interface Props {
+ link: string;
+ alt: string;
+ flag?: 'FR';
+}
+
const { link, alt, flag } = Astro.props;
const isFR = flag === 'FR';
---
diff --git a/docs/src/content/authors/devesh-chaudhari.json b/docs/src/content/authors/devesh-chaudhari.json
new file mode 100644
index 0000000..c1bc4bf
--- /dev/null
+++ b/docs/src/content/authors/devesh-chaudhari.json
@@ -0,0 +1,4 @@
+{
+ "name": "Devesh Chaudhari",
+ "twitter": "https://twitter.com/DeveshChau"
+}
diff --git a/docs/src/content/authors/thomas-laforge.json b/docs/src/content/authors/thomas-laforge.json
new file mode 100644
index 0000000..2bfd965
--- /dev/null
+++ b/docs/src/content/authors/thomas-laforge.json
@@ -0,0 +1,6 @@
+{
+ "name": "Thomas Laforge",
+ "twitter": "https://twitter.com/laforge_toma",
+ "linkedin": "https://www.linkedin.com/in/thomas-laforge-2b05a945/",
+ "github": "https://github.com/tomalaforge"
+}
diff --git a/docs/src/content/config.ts b/docs/src/content/config.ts
index e6c8bee..7b74a62 100644
--- a/docs/src/content/config.ts
+++ b/docs/src/content/config.ts
@@ -1,23 +1,38 @@
import { docsSchema, i18nSchema } from '@astrojs/starlight/schema';
-import { defineCollection, z } from 'astro:content';
+import { defineCollection, reference, z } from 'astro:content';
+
+const authors = defineCollection({
+ type: 'data',
+ schema: z.object({
+ name: z.string(),
+ twitter: z.string().url().optional(),
+ linkedin: z.string().url().optional(),
+ github: z.string().url().optional(),
+ }),
+});
+
+const docs = defineCollection({
+ schema: (ctx) =>
+ docsSchema()(ctx).extend({
+ noCommentSection: z.boolean().optional().default(false),
+ challengeNumber: z.union([z.number(), z.boolean()]).default(false),
+ author: reference('authors').optional(),
+ command: z.string().optional(),
+ blogLink: z.string().optional(),
+ videoLink: z
+ .object({
+ link: z.string(),
+ alt: z.string(),
+ flag: z.enum(['FR']).optional(),
+ })
+ .optional(),
+ }),
+});
+
+const i18n = defineCollection({ type: 'data', schema: i18nSchema() });
export const collections = {
- docs: defineCollection({
- schema: (ctx) =>
- docsSchema()(ctx).extend({
- noCommentSection: z.boolean().optional().default(false),
- challengeNumber: z.union([z.number(), z.boolean()]).default(false),
- author: z.string().optional(),
- command: z.string().optional(),
- blogLink: z.string().optional(),
- videoLink: z
- .object({
- link: z.string(),
- alt: z.string(),
- flag: z.enum(['FR']).optional(),
- })
- .optional(),
- }),
- }),
- i18n: defineCollection({ type: 'data', schema: i18nSchema() }),
+ docs: docs,
+ i18n: i18n,
+ authors: authors,
};
diff --git a/docs/src/content/docs/challenges/angular/1-projection.md b/docs/src/content/docs/challenges/angular/1-projection.md
index 64181bd..33eff99 100644
--- a/docs/src/content/docs/challenges/angular/1-projection.md
+++ b/docs/src/content/docs/challenges/angular/1-projection.md
@@ -1,7 +1,7 @@
---
title: π’ Projection
description: Challenge 1 is about learning how to project DOM element through components
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 1
command: angular-projection
blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5
diff --git a/docs/src/content/docs/challenges/angular/10-pipe-utility.md b/docs/src/content/docs/challenges/angular/10-pipe-utility.md
index 98a94de..48dbf91 100644
--- a/docs/src/content/docs/challenges/angular/10-pipe-utility.md
+++ b/docs/src/content/docs/challenges/angular/10-pipe-utility.md
@@ -1,7 +1,7 @@
---
title: π΄ Utility Wrapper Pipe
description: Challenge 10 is about creating a pipe to wrap utilities
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 10
command: angular-pipe-hard
sidebar:
diff --git a/docs/src/content/docs/challenges/angular/13-styling.md b/docs/src/content/docs/challenges/angular/13-styling.md
index 64485da..bbc34fc 100644
--- a/docs/src/content/docs/challenges/angular/13-styling.md
+++ b/docs/src/content/docs/challenges/angular/13-styling.md
@@ -1,7 +1,7 @@
---
title: π Highly Customizable CSS
description: Challenge 13 is about creating highly customizable CSS styles
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 13
command: angular-styling
sidebar:
diff --git a/docs/src/content/docs/challenges/angular/16-di.md b/docs/src/content/docs/challenges/angular/16-di.md
index 7a65158..c5ff17f 100644
--- a/docs/src/content/docs/challenges/angular/16-di.md
+++ b/docs/src/content/docs/challenges/angular/16-di.md
@@ -1,7 +1,7 @@
---
title: π΄ Master Dependancy Injection
description: Challenge 16 is about masjering how dependancy injection works
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 16
command: angular-di
sidebar:
diff --git a/docs/src/content/docs/challenges/angular/21-achor-scrolling.md b/docs/src/content/docs/challenges/angular/21-achor-scrolling.md
index 05cd68e..33782d5 100644
--- a/docs/src/content/docs/challenges/angular/21-achor-scrolling.md
+++ b/docs/src/content/docs/challenges/angular/21-achor-scrolling.md
@@ -1,7 +1,7 @@
---
title: π’ Anchor Navigation
description: Challenge 21 is about navigating inside the page with anchor
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 21
command: angular-anchor-scrolling
sidebar:
diff --git a/docs/src/content/docs/challenges/angular/22-router-input.md b/docs/src/content/docs/challenges/angular/22-router-input.md
index 9a25161..0614b89 100644
--- a/docs/src/content/docs/challenges/angular/22-router-input.md
+++ b/docs/src/content/docs/challenges/angular/22-router-input.md
@@ -1,7 +1,7 @@
---
title: π’ @RouterInput()
description: Challenge 22 is about using the @Input decorator to retreive router params.
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 22
command: angular-router-input
blogLink: https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617
diff --git a/docs/src/content/docs/challenges/angular/3-directive-enhancement.md b/docs/src/content/docs/challenges/angular/3-directive-enhancement.md
index 7027387..bccac62 100644
--- a/docs/src/content/docs/challenges/angular/3-directive-enhancement.md
+++ b/docs/src/content/docs/challenges/angular/3-directive-enhancement.md
@@ -1,7 +1,7 @@
---
title: π Directive Enhancement
description: Challenge 3 is about enhancing a built-in directive
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 3
command: angular-ngfor-enhancement
blogLink: https://medium.com/@thomas.laforge/ngfor-enhancement-716b44656a6c
diff --git a/docs/src/content/docs/challenges/angular/30-interop-rxjs-signal.md b/docs/src/content/docs/challenges/angular/30-interop-rxjs-signal.md
index b668655..a24aad6 100644
--- a/docs/src/content/docs/challenges/angular/30-interop-rxjs-signal.md
+++ b/docs/src/content/docs/challenges/angular/30-interop-rxjs-signal.md
@@ -1,7 +1,7 @@
---
title: π΄ Interoperability Rxjs/Signal
description: Challenge 30 is about learning how to mix signal with Rxjs
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 30
command: angular-interop-rxjs-signal
sidebar:
diff --git a/docs/src/content/docs/challenges/angular/31-module-to-standalone.md b/docs/src/content/docs/challenges/angular/31-module-to-standalone.md
index 3b36490..ada66b8 100644
--- a/docs/src/content/docs/challenges/angular/31-module-to-standalone.md
+++ b/docs/src/content/docs/challenges/angular/31-module-to-standalone.md
@@ -1,7 +1,7 @@
---
title: π’ Module to Standalone
description: Challenge 31 is about migrating a module based application to a standalone application.
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 31
command: angular-module-to-standalone
sidebar:
diff --git a/docs/src/content/docs/challenges/angular/32-bug-cd.md b/docs/src/content/docs/challenges/angular/32-bug-cd.md
index e33d3e2..811ff74 100644
--- a/docs/src/content/docs/challenges/angular/32-bug-cd.md
+++ b/docs/src/content/docs/challenges/angular/32-bug-cd.md
@@ -1,7 +1,7 @@
---
title: π Change Detection Bug
description: Challenge 32 is about debugging an application that has issue when change detection is triggered
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 32
command: angular-bug-cd
blogLink: https://medium.com/ngconf/function-calls-inside-template-are-dangerous-15f9822a6629
diff --git a/docs/src/content/docs/challenges/angular/33-decoupling.md b/docs/src/content/docs/challenges/angular/33-decoupling.md
index ec2638d..307933f 100644
--- a/docs/src/content/docs/challenges/angular/33-decoupling.md
+++ b/docs/src/content/docs/challenges/angular/33-decoupling.md
@@ -1,7 +1,7 @@
---
title: π Decoupling Components
description: Challenge 33 is about decoupling two strongly coupled components using Injection Token
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 33
command: angular-decoupling
sidebar:
diff --git a/docs/src/content/docs/challenges/angular/39-injection-token.md b/docs/src/content/docs/challenges/angular/39-injection-token.md
index 1e98d9d..5dfdbd8 100644
--- a/docs/src/content/docs/challenges/angular/39-injection-token.md
+++ b/docs/src/content/docs/challenges/angular/39-injection-token.md
@@ -1,7 +1,7 @@
---
title: π InjectionToken
description: Challenge 39 is about learning the power of dependancy injection
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 39
command: angular-injection-token
sidebar:
diff --git a/docs/src/content/docs/challenges/angular/4-context-outlet-typed.md b/docs/src/content/docs/challenges/angular/4-context-outlet-typed.md
index 7373a6f..e475c5f 100644
--- a/docs/src/content/docs/challenges/angular/4-context-outlet-typed.md
+++ b/docs/src/content/docs/challenges/angular/4-context-outlet-typed.md
@@ -1,7 +1,7 @@
---
title: π΄ Typed ContextOutlet
description: Challenge 4 is about strongly typing ngContextOutlet directives
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 4
command: angular-context-outlet-type
blogLink: https://medium.com/@thomas.laforge/ngtemplateoutlet-type-checking-5d2dcb07a2c6
diff --git a/docs/src/content/docs/challenges/angular/5-crud.md b/docs/src/content/docs/challenges/angular/5-crud.md
index 7391807..2cea7c4 100644
--- a/docs/src/content/docs/challenges/angular/5-crud.md
+++ b/docs/src/content/docs/challenges/angular/5-crud.md
@@ -1,7 +1,7 @@
---
title: π’ Crud application
description: Challenge 5 is about refactoring a crud application
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 5
command: angular-crud
sidebar:
diff --git a/docs/src/content/docs/challenges/angular/6-permissions.md b/docs/src/content/docs/challenges/angular/6-permissions.md
index d85845a..99717c3 100644
--- a/docs/src/content/docs/challenges/angular/6-permissions.md
+++ b/docs/src/content/docs/challenges/angular/6-permissions.md
@@ -1,7 +1,7 @@
---
title: π Structural Directive
description: Challenge 6 is about creating a structural directive to handle permissions
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 6
command: angular-permissions
blogLink: https://medium.com/@thomas.laforge/create-a-custom-structural-directive-to-manage-permissions-like-a-pro-11a1acad30ad
diff --git a/docs/src/content/docs/challenges/angular/8-pipe-pure.md b/docs/src/content/docs/challenges/angular/8-pipe-pure.md
index 6e227cc..539ae8a 100644
--- a/docs/src/content/docs/challenges/angular/8-pipe-pure.md
+++ b/docs/src/content/docs/challenges/angular/8-pipe-pure.md
@@ -1,7 +1,7 @@
---
title: π’ Pure Pipe
description: Challenge 8 is about creating a pure pipe
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 8
command: angular-pipe-easy
blogLink: https://medium.com/ngconf/deep-dive-into-angular-pipes-c040588cd15d
diff --git a/docs/src/content/docs/challenges/angular/9-pipe-wrapFn.md b/docs/src/content/docs/challenges/angular/9-pipe-wrapFn.md
index da68c0e..7b2dd26 100644
--- a/docs/src/content/docs/challenges/angular/9-pipe-wrapFn.md
+++ b/docs/src/content/docs/challenges/angular/9-pipe-wrapFn.md
@@ -1,7 +1,7 @@
---
title: π Wrap Function Pipe
description: Challenge 9 is about creating a pipe to wrap component fonctions
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 9
command: angular-pipe-intermediate
blogLink: https://medium.com/ngconf/boost-your-apps-performance-by-wrapping-your-functions-inside-a-pipe-7e889a901d1d
diff --git a/docs/src/content/docs/challenges/ngrx/2-effect-selector.md b/docs/src/content/docs/challenges/ngrx/2-effect-selector.md
index 4efc647..8afd352 100644
--- a/docs/src/content/docs/challenges/ngrx/2-effect-selector.md
+++ b/docs/src/content/docs/challenges/ngrx/2-effect-selector.md
@@ -1,7 +1,7 @@
---
title: π Effect vs Selector
description: Challenge 2 is about learning the difference between effects and selectors in NgRx
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 2
command: ngrx-effect-selector
blogLink: https://medium.com/@thomas.laforge/ngrx-effect-vs-reducer-vs-selector-58337ab59043
diff --git a/docs/src/content/docs/challenges/ngrx/7-power-effect.md b/docs/src/content/docs/challenges/ngrx/7-power-effect.md
index 2047b19..a57c2ce 100644
--- a/docs/src/content/docs/challenges/ngrx/7-power-effect.md
+++ b/docs/src/content/docs/challenges/ngrx/7-power-effect.md
@@ -1,7 +1,7 @@
---
title: π΄ Power of Effect
description: Challenge 7 is about creating an Ngrx effect with another Rxjs Hot observable
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 7
command: ngrx-notification
sidebar:
diff --git a/docs/src/content/docs/challenges/nx/25-generator-lib-ext.md b/docs/src/content/docs/challenges/nx/25-generator-lib-ext.md
index 1e46c0f..7c20286 100644
--- a/docs/src/content/docs/challenges/nx/25-generator-lib-ext.md
+++ b/docs/src/content/docs/challenges/nx/25-generator-lib-ext.md
@@ -1,7 +1,7 @@
---
title: π΄ Extend Lib Generator
description: Challenge 25 is about creating a Nx generator to extend the built-in Library Generator
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 25
sidebar:
order: 207
diff --git a/docs/src/content/docs/challenges/nx/26-generator-comp.md b/docs/src/content/docs/challenges/nx/26-generator-comp.md
index c59a146..c6d0740 100644
--- a/docs/src/content/docs/challenges/nx/26-generator-comp.md
+++ b/docs/src/content/docs/challenges/nx/26-generator-comp.md
@@ -1,7 +1,7 @@
---
title: π Component Generator
description: Challenge 26 is about creating a Nx generator to create a custom component
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 26
sidebar:
order: 116
@@ -88,7 +88,7 @@ export class UserStore extends ComponentStore implements OnStateInit,
loading: this.loading$,
error: this.error$,
},
- { debounce: true }
+ { debounce: true },
);
ngrxOnStateInit() {
@@ -106,11 +106,11 @@ export class UserStore extends ComponentStore implements OnStateInit,
this.userService.loadUsers().pipe(
tapResponse(
(users) => this.patchState({ users, loading: false }),
- (err: string) => this.patchState({ error: err, loading: false })
- )
- )
- )
- )
+ (err: string) => this.patchState({ error: err, loading: false }),
+ ),
+ ),
+ ),
+ ),
);
}
```
diff --git a/docs/src/content/docs/challenges/nx/27-forbid-enum-rule.md b/docs/src/content/docs/challenges/nx/27-forbid-enum-rule.md
index d2193b8..8d69e93 100644
--- a/docs/src/content/docs/challenges/nx/27-forbid-enum-rule.md
+++ b/docs/src/content/docs/challenges/nx/27-forbid-enum-rule.md
@@ -1,7 +1,7 @@
---
title: π’ Custom Eslint Rule
description: Challenge 27 is about creating a custom Eslint Rule to forbid enums
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 27
sidebar:
order: 12
diff --git a/docs/src/content/docs/challenges/performance/12-scroll-cd.md b/docs/src/content/docs/challenges/performance/12-scroll-cd.md
index 540051e..b6dc265 100644
--- a/docs/src/content/docs/challenges/performance/12-scroll-cd.md
+++ b/docs/src/content/docs/challenges/performance/12-scroll-cd.md
@@ -1,7 +1,7 @@
---
title: π Optimize Change Detection
description: Challenge 12 about optimizing the number of change detection cycle while scrolling
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 12
command: performance-scroll-cd
sidebar:
diff --git a/docs/src/content/docs/challenges/performance/34-default-onpush.md b/docs/src/content/docs/challenges/performance/34-default-onpush.md
index 62c453c..1b23db5 100644
--- a/docs/src/content/docs/challenges/performance/34-default-onpush.md
+++ b/docs/src/content/docs/challenges/performance/34-default-onpush.md
@@ -1,7 +1,7 @@
---
title: π’ Default vs OnPush
description: Challenge 34 is about learning the difference between Default and OnPush Change Detection Strategy.
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 34
command: performance-default-onpush
sidebar:
diff --git a/docs/src/content/docs/challenges/performance/35-memoize.md b/docs/src/content/docs/challenges/performance/35-memoize.md
index 86d321c..d0ebbda 100644
--- a/docs/src/content/docs/challenges/performance/35-memoize.md
+++ b/docs/src/content/docs/challenges/performance/35-memoize.md
@@ -1,7 +1,7 @@
---
title: π’ Memoization
description: Challenge 35 is about learning how pure pipe works
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 35
command: performance-memoized
sidebar:
diff --git a/docs/src/content/docs/challenges/performance/36-ngfor-optimize.md b/docs/src/content/docs/challenges/performance/36-ngfor-optimize.md
index c05bf25..9d6b627 100644
--- a/docs/src/content/docs/challenges/performance/36-ngfor-optimize.md
+++ b/docs/src/content/docs/challenges/performance/36-ngfor-optimize.md
@@ -1,7 +1,7 @@
---
title: π’ NgFor Optimization
description: Challenge 36 is about learning how trackby works
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 36
command: performance-ngfor-optimize
sidebar:
diff --git a/docs/src/content/docs/challenges/performance/37-ngfor-biglist.md b/docs/src/content/docs/challenges/performance/37-ngfor-biglist.md
index 3240088..1e81de0 100644
--- a/docs/src/content/docs/challenges/performance/37-ngfor-biglist.md
+++ b/docs/src/content/docs/challenges/performance/37-ngfor-biglist.md
@@ -1,7 +1,7 @@
---
title: π Optimize Big List
description: Challenge 37 is about learning how virtualization optimize big list rendering
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 37
command: performance-ngfor-biglist
sidebar:
diff --git a/docs/src/content/docs/challenges/rxjs/11-bug-chaining-operator.md b/docs/src/content/docs/challenges/rxjs/11-bug-chaining-operator.md
index 11c08c2..1ab0e46 100644
--- a/docs/src/content/docs/challenges/rxjs/11-bug-chaining-operator.md
+++ b/docs/src/content/docs/challenges/rxjs/11-bug-chaining-operator.md
@@ -1,7 +1,7 @@
---
title: π High Order Operator Bug
description: Challenge 11 is about resolving a Rxjs bug because of high order operators
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 11
command: rxjs-pipe-bug
sidebar:
diff --git a/docs/src/content/docs/challenges/rxjs/14-race-condition.md b/docs/src/content/docs/challenges/rxjs/14-race-condition.md
index 2b08d92..d8441b7 100644
--- a/docs/src/content/docs/challenges/rxjs/14-race-condition.md
+++ b/docs/src/content/docs/challenges/rxjs/14-race-condition.md
@@ -1,7 +1,7 @@
---
title: π’ Race Condition
description: Challenge 14 is about race condition in Rxjs
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 14
command: rxjs-race-condition
sidebar:
diff --git a/docs/src/content/docs/challenges/rxjs/38-rxjs-catch-error.md b/docs/src/content/docs/challenges/rxjs/38-rxjs-catch-error.md
index 743640f..298152b 100644
--- a/docs/src/content/docs/challenges/rxjs/38-rxjs-catch-error.md
+++ b/docs/src/content/docs/challenges/rxjs/38-rxjs-catch-error.md
@@ -1,7 +1,7 @@
---
title: π’ catchError
description: Challenge 38 is about learning obervable completion.
-author: Devesh Chaudhari
+author: devesh-chaudhari
command: rxjs-catch-error
challengeNumber: 38
sidebar:
diff --git a/docs/src/content/docs/challenges/testing/17-router.md b/docs/src/content/docs/challenges/testing/17-router.md
index 12e0611..65afe81 100644
--- a/docs/src/content/docs/challenges/testing/17-router.md
+++ b/docs/src/content/docs/challenges/testing/17-router.md
@@ -1,7 +1,7 @@
---
title: π Router
description: Challenge 17 is about testing the router
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 17
command: testing-router-outlet
sidebar:
diff --git a/docs/src/content/docs/challenges/testing/18-nested-comp.md b/docs/src/content/docs/challenges/testing/18-nested-comp.md
index 02c539f..945650b 100644
--- a/docs/src/content/docs/challenges/testing/18-nested-comp.md
+++ b/docs/src/content/docs/challenges/testing/18-nested-comp.md
@@ -1,7 +1,7 @@
---
title: π Nested Components
description: Challenge 18 is about testing nested components
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 18
command: testing-nested
sidebar:
diff --git a/docs/src/content/docs/challenges/testing/19-input-output.md b/docs/src/content/docs/challenges/testing/19-input-output.md
index b461f4e..22f77a7 100644
--- a/docs/src/content/docs/challenges/testing/19-input-output.md
+++ b/docs/src/content/docs/challenges/testing/19-input-output.md
@@ -1,7 +1,7 @@
---
title: π Input Output
description: Challenge 19 is about testing inputs and ouputs
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 19
command: testing-input-output
sidebar:
diff --git a/docs/src/content/docs/challenges/testing/20-modal.md b/docs/src/content/docs/challenges/testing/20-modal.md
index cddedd1..38188ce 100644
--- a/docs/src/content/docs/challenges/testing/20-modal.md
+++ b/docs/src/content/docs/challenges/testing/20-modal.md
@@ -1,7 +1,7 @@
---
title: π Modal
description: Challenge 20 is about testing modals
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 20
command: testing-modal
sidebar:
diff --git a/docs/src/content/docs/challenges/testing/23-harness.md b/docs/src/content/docs/challenges/testing/23-harness.md
index 131152d..8c89174 100644
--- a/docs/src/content/docs/challenges/testing/23-harness.md
+++ b/docs/src/content/docs/challenges/testing/23-harness.md
@@ -1,7 +1,7 @@
---
title: π’ Harness
description: Challenge 23 is about testing with component harnesses
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 23
command: testing-harness
sidebar:
diff --git a/docs/src/content/docs/challenges/testing/24-harness-creation.md b/docs/src/content/docs/challenges/testing/24-harness-creation.md
index cde71a0..a014f6e 100644
--- a/docs/src/content/docs/challenges/testing/24-harness-creation.md
+++ b/docs/src/content/docs/challenges/testing/24-harness-creation.md
@@ -1,7 +1,7 @@
---
title: π Harness Creation
description: Challenge 24 is about creating a component harness.
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 24
command: testing-create-harness
sidebar:
diff --git a/docs/src/content/docs/challenges/testing/28-checkbox.md b/docs/src/content/docs/challenges/testing/28-checkbox.md
index 0e7ef5e..2d1d73e 100644
--- a/docs/src/content/docs/challenges/testing/28-checkbox.md
+++ b/docs/src/content/docs/challenges/testing/28-checkbox.md
@@ -1,7 +1,7 @@
---
title: π’ Checkbox
description: Challenge 28 is about testing a simple checkbox
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 28
command: testing-checkbox
sidebar:
diff --git a/docs/src/content/docs/challenges/testing/29-real-application.md b/docs/src/content/docs/challenges/testing/29-real-application.md
index f740df3..1d64fb9 100644
--- a/docs/src/content/docs/challenges/testing/29-real-application.md
+++ b/docs/src/content/docs/challenges/testing/29-real-application.md
@@ -1,7 +1,7 @@
---
title: π΄ Real-life Application
description: Challenge 29 is about testing a real-life application
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 29
command: testing-todos-list
sidebar:
diff --git a/docs/src/content/docs/challenges/typescript/15-overload-fn.md b/docs/src/content/docs/challenges/typescript/15-overload-fn.md
index 6a0d68b..4b5d984 100644
--- a/docs/src/content/docs/challenges/typescript/15-overload-fn.md
+++ b/docs/src/content/docs/challenges/typescript/15-overload-fn.md
@@ -1,7 +1,7 @@
---
title: π Function Overload
description: Challenge 15 is about creating overload functions
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 15
command: typescript-overload
blogLink: https://medium.com/ngconf/function-overloading-in-typescript-8236706b2c05
diff --git a/docs/src/content/docs/es/challenges/angular/1-projection.md b/docs/src/content/docs/es/challenges/angular/1-projection.md
index 300b5ec..6da5366 100644
--- a/docs/src/content/docs/es/challenges/angular/1-projection.md
+++ b/docs/src/content/docs/es/challenges/angular/1-projection.md
@@ -1,7 +1,7 @@
---
title: π’ ProyecciΓ³n
description: Desafio 1 trata sobre aprender a proyectar elementos del DOM a travΓ©s de componentes,
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 1
command: angular-projection
blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5
diff --git a/docs/src/content/docs/es/challenges/angular/39-injection-token.md b/docs/src/content/docs/es/challenges/angular/39-injection-token.md
index 91989d2..01eeb8d 100644
--- a/docs/src/content/docs/es/challenges/angular/39-injection-token.md
+++ b/docs/src/content/docs/es/challenges/angular/39-injection-token.md
@@ -1,7 +1,7 @@
---
title: π InjectionToken
description: Desafio de Angular 39 para aprender sobre el poder del InjectionToken
-author: Thomas Laforge
+author: thomas-laforge
challengeNumber: 39
command: angular-injection-token
sidebar:
diff --git a/libs/cli/src/generators/challenge/files/readme/README.md__tmpl__ b/libs/cli/src/generators/challenge/files/readme/README.md__tmpl__
index 14eba7a..d782650 100644
--- a/libs/cli/src/generators/challenge/files/readme/README.md__tmpl__
+++ b/libs/cli/src/generators/challenge/files/readme/README.md__tmpl__
@@ -1,6 +1,6 @@
# <%= title %>
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
diff --git a/libs/cli/src/generators/readme/generator.ts b/libs/cli/src/generators/readme/generator.ts
index 15797bb..dd25645 100644
--- a/libs/cli/src/generators/readme/generator.ts
+++ b/libs/cli/src/generators/readme/generator.ts
@@ -23,7 +23,7 @@ function findDocFile(
tree: Tree,
path: string,
number: string,
- result: string[]
+ result: string[],
) {
if (!tree.isFile(path)) {
tree.children(path).forEach((child) => {
@@ -59,13 +59,13 @@ async function rewriteFile(tree: Tree, file: string) {
tree,
'./docs/src/content/docs/challenges',
String(number),
- result
+ result,
);
const docFile = result[0];
const pathElts = docFile.split('/');
const link = `https://angular-challenges.vercel.app/challenges/${pathElts.at(
- -2
+ -2,
)}/${pathElts.at(-1)}/`;
const doc = tree.read(docFile);
@@ -89,7 +89,7 @@ async function rewriteFile(tree: Tree, file: string) {
const finalText = `# ${title}
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application
@@ -154,14 +154,14 @@ Your PR title must start with Answer:${number}.
console.log('header', header);
const regexContent = new RegExp(
- /Author: Thomas Laforge([\s\S]*?)### Submitting your work/
+ /author: thomas-laforge([\s\S]*?)### Submitting your work/,
);
const matchContent = buffer.toString().match(regexContent);
let content = '';
if (!matchContent) {
const regexOldContent = new RegExp(
- /Author: Thomas Laforge([\s\S]*?)## Submitting your work/
+ /author: thomas-laforge([\s\S]*?)## Submitting your work/,
);
content = buffer.toString().match(regexOldContent)[1];
} else {
diff --git a/libs/custom-plugin/src/generators/custom-library/README.md b/libs/custom-plugin/src/generators/custom-library/README.md
index 95be464..2758e2c 100644
--- a/libs/custom-plugin/src/generators/custom-library/README.md
+++ b/libs/custom-plugin/src/generators/custom-library/README.md
@@ -1,6 +1,6 @@
# Extend Lib Generator
-> Author: Thomas Laforge
+> author: thomas-laforge
### Documentation and Instruction
diff --git a/libs/custom-plugin/src/generators/feature-component/README.md b/libs/custom-plugin/src/generators/feature-component/README.md
index 9e7a3c7..348cf76 100644
--- a/libs/custom-plugin/src/generators/feature-component/README.md
+++ b/libs/custom-plugin/src/generators/feature-component/README.md
@@ -1,6 +1,6 @@
# Component Generator
-> Author: Thomas Laforge
+> author: thomas-laforge
### Documentation and Instruction
diff --git a/tools/eslint-rules/rules/forbidden-enum.README.md b/tools/eslint-rules/rules/forbidden-enum.README.md
index 704e138..c6d339e 100644
--- a/tools/eslint-rules/rules/forbidden-enum.README.md
+++ b/tools/eslint-rules/rules/forbidden-enum.README.md
@@ -1,6 +1,6 @@
# Custom Eslint Rule
-> Author: Thomas Laforge
+> author: thomas-laforge
### Run Application