xt-plugin-editor 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.editorconfig +17 -0
  2. package/.postcssrc.json +1 -0
  3. package/.prettierrc +12 -0
  4. package/.rush/temp/chunked-rush-logs/xt-plugin-editor.build.chunks.jsonl +23 -0
  5. package/.rush/temp/chunked-rush-logs/xt-plugin-editor.test.chunks.jsonl +50 -0
  6. package/.rush/temp/shrinkwrap-deps.json +1200 -0
  7. package/CHANGELOG.md +2 -0
  8. package/README.md +12 -2
  9. package/angular.json +148 -0
  10. package/package.json +80 -4
  11. package/projects/editor/README.md +13 -0
  12. package/projects/editor/ng-package.json +7 -0
  13. package/projects/editor/package.json +43 -0
  14. package/projects/editor/src/lib/editor/editor.component.css +15 -0
  15. package/projects/editor/src/lib/editor/editor.component.html +29 -0
  16. package/projects/editor/src/lib/editor/editor.component.spec.ts +53 -0
  17. package/projects/editor/src/lib/editor/editor.component.ts +202 -0
  18. package/projects/editor/src/lib/markdown/inline-markdown-pipe.spec.ts +25 -0
  19. package/projects/editor/src/lib/markdown/inline-markdown-pipe.ts +30 -0
  20. package/projects/editor/src/lib/markdown/markdown-pipe.spec.ts +29 -0
  21. package/projects/editor/src/lib/markdown/markdown-pipe.ts +21 -0
  22. package/projects/editor/src/lib/prose-mirror/basic-setup.ts +655 -0
  23. package/projects/editor/src/lib/register.ts +33 -0
  24. package/projects/editor/src/public-api.ts +7 -0
  25. package/projects/editor/tsconfig.lib.json +13 -0
  26. package/projects/editor/tsconfig.lib.prod.json +11 -0
  27. package/projects/editor/tsconfig.spec.json +10 -0
  28. package/projects/editor-plugin/federation.config.js +33 -0
  29. package/projects/editor-plugin/public/favicon.ico +0 -0
  30. package/projects/editor-plugin/src/app/app.component.css +0 -0
  31. package/projects/editor-plugin/src/app/app.component.html +3 -0
  32. package/projects/editor-plugin/src/app/app.component.spec.ts +34 -0
  33. package/projects/editor-plugin/src/app/app.component.ts +23 -0
  34. package/projects/editor-plugin/src/app/app.config.ts +22 -0
  35. package/projects/editor-plugin/src/app/app.routes.ts +6 -0
  36. package/projects/editor-plugin/src/app/editor-test-component/editor-test.component.css +4 -0
  37. package/projects/editor-plugin/src/app/editor-test-component/editor-test.component.html +19 -0
  38. package/projects/editor-plugin/src/app/editor-test-component/editor-test.component.spec.ts +33 -0
  39. package/projects/editor-plugin/src/app/editor-test-component/editor-test.component.ts +67 -0
  40. package/projects/editor-plugin/src/bootstrap.ts +6 -0
  41. package/projects/editor-plugin/src/index.html +13 -0
  42. package/projects/editor-plugin/src/main.ts +6 -0
  43. package/projects/editor-plugin/src/styles.css +14 -0
  44. package/projects/editor-plugin/tsconfig.app.json +11 -0
  45. package/projects/editor-plugin/tsconfig.federation.json +13 -0
  46. package/projects/editor-plugin/tsconfig.spec.json +10 -0
  47. package/rush-logs/xt-plugin-editor.build.error.log +8 -0
  48. package/rush-logs/xt-plugin-editor.build.log +23 -0
  49. package/rush-logs/xt-plugin-editor.test.error.log +1 -0
  50. package/rush-logs/xt-plugin-editor.test.log +50 -0
  51. package/tsconfig.json +33 -0
@@ -0,0 +1,13 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3
+ {
4
+ "extends": "../../tsconfig.json",
5
+ "compilerOptions": {
6
+ "outDir": "../../out-tsc/lib",
7
+ "declaration": true,
8
+ "declarationMap": true,
9
+ "types": []
10
+ },
11
+ "include": ["src/**/*.ts"],
12
+ "exclude": ["**/*.spec.ts"]
13
+ }
@@ -0,0 +1,11 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3
+ {
4
+ "extends": "./tsconfig.lib.json",
5
+ "compilerOptions": {
6
+ "declarationMap": false
7
+ },
8
+ "angularCompilerOptions": {
9
+ "compilationMode": "partial"
10
+ }
11
+ }
@@ -0,0 +1,10 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3
+ {
4
+ "extends": "../../tsconfig.json",
5
+ "compilerOptions": {
6
+ "outDir": "../../out-tsc/spec",
7
+ "types": ["vitest/globals"]
8
+ },
9
+ "include": ["src/**/*.d.ts", "src/**/*.spec.ts"]
10
+ }
@@ -0,0 +1,33 @@
1
+ const { withNativeFederation, shareAll, share } = require('@angular-architects/native-federation/config');
2
+
3
+ module.exports = withNativeFederation({
4
+
5
+ name: 'editor-plugin',
6
+
7
+ exposes: {
8
+ './EditorComponent': './projects/editor/src/lib/editor/editor.component.ts',
9
+ './Register': './projects/editor/src/lib/register.ts'
10
+ },
11
+
12
+ shared: {
13
+ ...shareAll({ singleton: true, strictVersion: true, requiredVersion: 'auto' })
14
+ },
15
+
16
+ features: {
17
+ ignoreUnusedDeps:true
18
+ },
19
+ skip: [
20
+ 'rxjs/ajax',
21
+ 'rxjs/fetch',
22
+ 'rxjs/testing',
23
+ 'rxjs/webSocket',
24
+ /^@primeuix\//,
25
+ 'chart.js/auto',
26
+ 'primeng/chart',
27
+ 'primeicons'
28
+ ]
29
+
30
+ // Please read our FAQ about sharing libs:
31
+ // https://shorturl.at/jmzH0
32
+
33
+ });
@@ -0,0 +1,3 @@
1
+ <h1>Editor Plugin Testing app</h1>
2
+
3
+ <router-outlet />
@@ -0,0 +1,34 @@
1
+ import { provideZonelessChangeDetection } from '@angular/core';
2
+ import { TestBed } from '@angular/core/testing';
3
+ import { AppComponent } from './app.component';
4
+ import { beforeEach, describe, expect, it } from 'vitest';
5
+ import { provideNoopAnimations } from '@angular/platform-browser/animations';
6
+
7
+ describe('Editor Tester', () => {
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ imports: [AppComponent],
12
+ providers: [provideNoopAnimations(),provideZonelessChangeDetection()]
13
+ }).compileComponents();
14
+ });
15
+
16
+ it('should create the app', () => {
17
+ const fixture = TestBed.createComponent(AppComponent);
18
+ const app = fixture.componentInstance;
19
+ expect(app).toBeTruthy();
20
+ });
21
+
22
+ it(`should have the 'EditorTester' title`, () => {
23
+ const fixture = TestBed.createComponent(AppComponent);
24
+ const app = fixture.componentInstance;
25
+ expect(app.title).toEqual('EditorTester');
26
+ });
27
+
28
+ it('should render title', () => {
29
+ const fixture = TestBed.createComponent(AppComponent);
30
+ fixture.detectChanges();
31
+ const compiled = fixture.nativeElement as HTMLElement;
32
+ expect(compiled.querySelector('h1')?.textContent).toContain('Editor Plugin Testing app');
33
+ });
34
+ });
@@ -0,0 +1,23 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { RouterOutlet } from '@angular/router';
3
+ import { XtResolverService } from 'xt-components';
4
+ import { registerEditorPlugin } from '../../../editor/src/lib/register';
5
+ import { registerDefaultPlugin } from 'xt-plugin-default';
6
+
7
+ @Component({
8
+ selector: 'app-root',
9
+ imports: [RouterOutlet],
10
+ templateUrl: './app.component.html',
11
+ styleUrl: './app.component.css'
12
+ })
13
+ export class AppComponent {
14
+ title = 'EditorTester';
15
+
16
+ protected resolverService = inject (XtResolverService);
17
+
18
+ constructor () {
19
+ registerDefaultPlugin (this.resolverService);
20
+ registerEditorPlugin(this.resolverService);
21
+ }
22
+
23
+ }
@@ -0,0 +1,22 @@
1
+ import { ApplicationConfig, provideBrowserGlobalErrorListeners, provideZonelessChangeDetection } from '@angular/core';
2
+ import { provideRouter } from '@angular/router';
3
+
4
+ import { routes } from './app.routes';
5
+ import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
6
+ import { providePrimeNG } from 'primeng/config';
7
+ import Aura from '@primeuix/themes/aura';
8
+ import { provideHttpClient } from '@angular/common/http';
9
+
10
+ export const appConfig: ApplicationConfig = {
11
+ providers: [
12
+ provideBrowserGlobalErrorListeners(),
13
+ provideZonelessChangeDetection(),
14
+ provideHttpClient(),
15
+ provideAnimationsAsync(),
16
+ providePrimeNG({
17
+ theme: {
18
+ preset: Aura
19
+ }
20
+ }),
21
+ provideRouter(routes)]
22
+ };
@@ -0,0 +1,6 @@
1
+ import { Routes } from '@angular/router';
2
+ import { EditorTestComponent } from './editor-test-component/editor-test.component';
3
+
4
+ export const routes: Routes = [{
5
+ path:'', component:EditorTestComponent
6
+ }];
@@ -0,0 +1,4 @@
1
+ .displayForm {
2
+ background-color: #1B2230;
3
+ width: 60em;
4
+ }
@@ -0,0 +1,19 @@
1
+ <h1 class="text-2xl">Testing Editor</h1>
2
+ @let mainForm=simpleForm();
3
+
4
+ <form [formGroup]="mainForm">
5
+ <xt-render-sub [context]="simpleContext()" ></xt-render-sub>
6
+ </form>
7
+ <div style="margin-top:2em">
8
+ Form Value is
9
+ <div class="displayForm" [innerHTML]="formValue() | markdown">
10
+ </div>
11
+ , Form is {{mainForm.pristine?"pristine":"Dirty"}}
12
+ </div>
13
+ <div style="margin-top:2em">
14
+ Inline display: <xt-render-sub [context]="inlineContext()"></xt-render-sub>
15
+ </div>
16
+ <div style="margin-top:2em">
17
+ Full view display:<br/>
18
+ <xt-render-sub [context]="fullviewContext()"></xt-render-sub>
19
+ </div>
@@ -0,0 +1,33 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { beforeEach, describe, expect, it } from 'vitest';
4
+ import { provideZonelessChangeDetection } from '@angular/core';
5
+ import { registerEditorPlugin } from '../../../../editor/src/lib/register';
6
+ import { XtResolverService } from 'xt-components';
7
+ import { provideNoopAnimations } from '@angular/platform-browser/animations';
8
+ import { registerDefaultPlugin } from 'xt-plugin-default';
9
+ import { EditorTestComponent } from './editor-test.component';
10
+
11
+ describe('EditorTestComponent', () => {
12
+ let component: EditorTestComponent;
13
+ let fixture: ComponentFixture<EditorTestComponent>;
14
+
15
+ beforeEach(async () => {
16
+ await TestBed.configureTestingModule({
17
+ imports: [EditorTestComponent],
18
+ providers: [provideNoopAnimations(), provideZonelessChangeDetection()]
19
+ })
20
+ .compileComponents();
21
+
22
+ const resolver = TestBed.inject(XtResolverService);
23
+ registerDefaultPlugin(resolver);
24
+ registerEditorPlugin(resolver);
25
+ fixture = TestBed.createComponent(EditorTestComponent);
26
+ component = fixture.componentInstance;
27
+ fixture.detectChanges();
28
+ });
29
+
30
+ it('should create', () => {
31
+ expect(component).toBeTruthy();
32
+ });
33
+ });
@@ -0,0 +1,67 @@
1
+ import { Component, inject, OnDestroy, OnInit, signal } from '@angular/core';
2
+ import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
3
+ import { Subscription } from 'rxjs';
4
+ import { XtBaseContext, XtContext, XtRenderSubComponent, XtResolverService } from 'xt-components';
5
+ import { MarkdownPipe } from '../../../../editor/src/lib/markdown/markdown-pipe';
6
+
7
+ @Component({
8
+ selector: 'app-editor-test',
9
+ imports: [
10
+ FormsModule,
11
+ ReactiveFormsModule,
12
+ XtRenderSubComponent,
13
+ MarkdownPipe
14
+ ],
15
+ templateUrl: './editor-test.component.html',
16
+ styleUrl: './editor-test.component.css'
17
+ })
18
+ export class EditorTestComponent implements OnInit,OnDestroy {
19
+
20
+ protected builder = inject(FormBuilder);
21
+
22
+ protected resolver = inject (XtResolverService);
23
+ protected readonly formValue = signal<any>(null);
24
+
25
+ protected subscriptions= new Subscription();
26
+ protected readonly simpleForm = signal<FormGroup>(this.builder.group({
27
+ simpleText: ["# Header\n\nSimple **text**"]
28
+ }));
29
+
30
+ constructor() {
31
+ }
32
+
33
+ ngOnInit() {
34
+ this.subscriptions.add(this.simpleForm().valueChanges.subscribe({
35
+ next: (value)=>this.formValue.set(value.simpleText)
36
+ }));
37
+ const initValue=this.simpleForm().value?.simpleText;
38
+ if( initValue!=null) {
39
+ this.formValue.set(initValue);
40
+ }
41
+ }
42
+
43
+ ngOnDestroy(): void {
44
+ this.subscriptions.unsubscribe();
45
+ }
46
+
47
+ protected simpleContext():XtContext<any> {
48
+ const ret= new XtBaseContext('FULL_EDITABLE', "simpleText",this.simpleForm());
49
+ ret.valueType='markdown';
50
+ return ret;
51
+ }
52
+
53
+ protected inlineContext():XtContext<any> {
54
+ const ret= new XtBaseContext('INLINE_VIEW');
55
+ ret.setDisplayValue(this.formValue());
56
+ ret.valueType='markdown';
57
+ return ret;
58
+ }
59
+
60
+ protected fullviewContext():XtContext<any> {
61
+ const ret= new XtBaseContext('FULL_VIEW');
62
+ ret.setDisplayValue(this.formValue());
63
+ ret.valueType='markdown';
64
+ return ret;
65
+ }
66
+
67
+ }
@@ -0,0 +1,6 @@
1
+ import { bootstrapApplication } from '@angular/platform-browser';
2
+ import { appConfig } from './app/app.config';
3
+ import { AppComponent } from './app/app.component';
4
+
5
+ bootstrapApplication(AppComponent, appConfig)
6
+ .catch((err) => console.error(err));
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Editor Tester</title>
6
+ <base href="/">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+ <link rel="icon" type="image/x-icon" href="favicon.ico">
9
+ </head>
10
+ <body>
11
+ <app-root></app-root>
12
+ </body>
13
+ </html>
@@ -0,0 +1,6 @@
1
+ import { initFederation } from '@angular-architects/native-federation';
2
+
3
+ initFederation()
4
+ .catch(err => console.error(err))
5
+ .then(_ => import('./bootstrap'))
6
+ .catch(err => console.error(err));
@@ -0,0 +1,14 @@
1
+ /* You can add global styles to this file, and also import other style files */
2
+ @import "primeicons/primeicons.css";
3
+ @import "prosemirror-view/style/prosemirror.css";
4
+ @import "prosemirror-menu/style/menu.css";
5
+ @import "prosemirror-gapcursor/style/gapcursor.css";
6
+
7
+ html {
8
+ height: 100%;
9
+ }
10
+ body {
11
+ min-height: 100%;
12
+ margin: 0;
13
+ padding: 0;
14
+ }
@@ -0,0 +1,11 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3
+ {
4
+ "extends": "../../tsconfig.json",
5
+ "compilerOptions": {
6
+ "outDir": "../../out-tsc/app",
7
+ "types": []
8
+ },
9
+ "include": ["src/**/*.ts"],
10
+ "exclude": ["src/**/*.spec.ts"]
11
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "../../out-tsc/app",
5
+ "types": []
6
+ },
7
+ "files": [
8
+ "src/main.ts"
9
+ ],
10
+ "include": [
11
+ "src/**/*.d.ts"
12
+ ]
13
+ }
@@ -0,0 +1,10 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3
+ {
4
+ "extends": "../../tsconfig.json",
5
+ "compilerOptions": {
6
+ "outDir": "../../out-tsc/spec",
7
+ "types": ["vitest/globals"]
8
+ },
9
+ "include": ["src/**/*.d.ts", "src/**/*.spec.ts"]
10
+ }
@@ -0,0 +1,8 @@
1
+ - Compiling with Angular sources in full compilation mode.
2
+ ✔ Compiling with Angular sources in full compilation mode.
3
+ ✔ Generating FESM and DTS bundles
4
+ - Copying assets
5
+ ✔ Copying assets
6
+ - Writing package manifest
7
+ ✔ Writing package manifest
8
+ ✔ Built xt-plugin-editor
@@ -0,0 +1,23 @@
1
+ Invoking: ng build editor
2
+ Building Angular Package
3
+
4
+ ------------------------------------------------------------------------------
5
+ Building entry point 'xt-plugin-editor'
6
+ ------------------------------------------------------------------------------
7
+ - Compiling with Angular sources in full compilation mode.
8
+ ✔ Compiling with Angular sources in full compilation mode.
9
+ ✔ Generating FESM and DTS bundles
10
+ - Copying assets
11
+ ✔ Copying assets
12
+ - Writing package manifest
13
+ ✔ Writing package manifest
14
+ ✔ Built xt-plugin-editor
15
+
16
+ ------------------------------------------------------------------------------
17
+ Built Angular Package
18
+ - from: /home/gc-garunda/devs/dont-code/github/ng-xtend/plugins/xt-editor/projects/editor
19
+ - to: /home/gc-garunda/devs/dont-code/github/ng-xtend/plugins/xt-editor/dist/xt-plugin-editor
20
+ ------------------------------------------------------------------------------
21
+
22
+ Build at: 2026-10-10T09:01:31.738Z - Time: 6278ms
23
+
@@ -0,0 +1 @@
1
+ The 'buildTarget' is configured to use '@angular-architects/native-federation:build', which is not supported. The 'unit-test' builder is designed to work with '@angular/build:application' or '@angular/build:ng-packagr'. Unexpected behavior or build failures may occur.
@@ -0,0 +1,50 @@
1
+ Invoking: ng test editor && ng test editor-plugin
2
+ ❯ Building...
3
+ ✔ Building...
4
+ Initial chunk files | Names | Raw size
5
+ spec-lib-editor-editor.component.js | spec-lib-editor-editor.component | 31.72 kB |
6
+ chunk-CGZBV6BD.js | - | 4.07 kB |
7
+ chunk-5ODHH5YL.js | - | 1.64 kB |
8
+ chunk-ZSP5A4GD.js | - | 1.25 kB |
9
+ init-testbed.js | init-testbed | 1.21 kB |
10
+ spec-lib-markdown-markdown-pipe.js | spec-lib-markdown-markdown-pipe | 1.12 kB |
11
+ spec-lib-markdown-inline-markdown-pipe.js | spec-lib-markdown-inline-markdown-pipe | 1.04 kB |
12
+ vitest-mock-patch.js | vitest-mock-patch | 969 bytes |
13
+
14
+ | Initial total | 43.01 kB
15
+
16
+ Application bundle generation complete. [6.892 seconds] - 2026-10-10T12:18:52.351Z
17
+
18
+
19
+ RUN v4.1.2 /home/gc-garunda/devs/dont-code/github/ng-xtend/plugins/xt-editor
20
+
21
+
22
+ Test Files 3 passed (3)
23
+ Tests 7 passed (7)
24
+ Start at 14:18:54
25
+ Duration 8.59s (transform 1.72s, setup 4.48s, import 7.18s, tests 445ms, environment 3.39s)
26
+
27
+ The 'buildTarget' is configured to use '@angular-architects/native-federation:build', which is not supported. The 'unit-test' builder is designed to work with '@angular/build:application' or '@angular/build:ng-packagr'. Unexpected behavior or build failures may occur.
28
+ ❯ Building...
29
+ ✔ Building...
30
+ Initial chunk files | Names | Raw size
31
+ chunk-YCTZP6SR.js | - | 33.24 kB |
32
+ spec-app-editor-test-component-editor-test.component.js | spec-app-editor-test-component-editor-test.component | 7.12 kB |
33
+ chunk-CGZBV6BD.js | - | 4.07 kB |
34
+ spec-app-app.component.js | spec-app-app.component | 3.10 kB |
35
+ init-testbed.js | init-testbed | 1.21 kB |
36
+ vitest-mock-patch.js | vitest-mock-patch | 969 bytes |
37
+
38
+ | Initial total | 49.71 kB
39
+
40
+ Application bundle generation complete. [3.807 seconds] - 2026-10-10T12:19:07.718Z
41
+
42
+
43
+ RUN v4.1.2 /home/gc-garunda/devs/dont-code/github/ng-xtend/plugins/xt-editor
44
+
45
+
46
+ Test Files 2 passed (2)
47
+ Tests 4 passed (4)
48
+ Start at 14:19:08
49
+ Duration 4.98s (transform 789ms, setup 1.24s, import 6.22s, tests 447ms, environment 1.17s)
50
+
package/tsconfig.json ADDED
@@ -0,0 +1,33 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3
+ {
4
+ "compileOnSave": false,
5
+ "compilerOptions": {
6
+ "outDir": "./dist/out-tsc",
7
+ "strict": true,
8
+ "noImplicitOverride": true,
9
+ "noPropertyAccessFromIndexSignature": true,
10
+ "noImplicitReturns": true,
11
+ "noFallthroughCasesInSwitch": true,
12
+ "skipLibCheck": true,
13
+ "esModuleInterop": true,
14
+ "sourceMap": true,
15
+ "declaration": false,
16
+ "isolatedModules": true,
17
+ "experimentalDecorators": true,
18
+ "moduleResolution": "bundler",
19
+ "importHelpers": true,
20
+ "target": "ES2022",
21
+ "module": "preserve",
22
+ "useDefineForClassFields": false,
23
+ "paths": {
24
+ }
25
+
26
+ },
27
+ "angularCompilerOptions": {
28
+ "enableI18nLegacyMessageIdFormat": false,
29
+ "strictInjectionParameters": true,
30
+ "strictInputAccessModifiers": true,
31
+ "strictTemplates": true
32
+ }
33
+ }