Browse Source

refactoring

feature/ssr-migration-schematic
erdemcaygor 1 year ago
parent
commit
cc9550aca2
  1. 31
      npm/ng-packs/apps/dev-app/src/app/app.config.server.ts
  2. 6
      npm/ng-packs/apps/dev-app/src/server.ts
  3. 113
      npm/ng-packs/packages/core/locale/src/utils/register-locale.ts
  4. 8
      npm/ng-packs/packages/theme-basic/src/lib/handlers/lazy-style.handler.ts

31
npm/ng-packs/apps/dev-app/src/app/app.config.server.ts

@ -1,11 +1,38 @@
import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
import { provideServerRendering } from '@angular/platform-server'; import { provideServerRendering } from '@angular/platform-server';
import { appConfig } from './app.config'; import { appConfig } from './app.config';
import { provideAbpCore, withOptions } from '@abp/ng.core';
import { environment } from '../environments/environment';
import { registerLocale, safeRegisterLocale } from '@abp/ng.core/locale';
import { provideAbpOAuth } from '@abp/ng.oauth';
import { provideAbpThemeShared } from '@abp/ng.theme.shared';
import { provideSettingManagementConfig } from '@abp/ng.setting-management/config';
import { provideAccountConfig } from '@abp/ng.account/config';
import { provideIdentityConfig } from '@abp/ng.identity/config';
import { provideTenantManagementConfig } from '@abp/ng.tenant-management/config';
import { provideFeatureManagementConfig } from '@abp/ng.feature-management';
import { APP_ROUTE_PROVIDER } from './route.provider';
const serverConfig: ApplicationConfig = { const serverConfig: ApplicationConfig = {
providers: [ providers: [
provideServerRendering() provideAbpCore(
] withOptions({
environment,
registerLocaleFn: safeRegisterLocale(),
sendNullsAsQueryParam: false,
skipGetAppConfiguration: false,
}),
),
APP_ROUTE_PROVIDER,
provideAbpOAuth(),
provideAbpThemeShared(),
provideSettingManagementConfig(),
provideAccountConfig(),
provideIdentityConfig(),
provideTenantManagementConfig(),
provideFeatureManagementConfig(),
provideServerRendering(),
],
}; };
export const config = mergeApplicationConfig(appConfig, serverConfig); export const config = mergeApplicationConfig(appConfig, serverConfig);

6
npm/ng-packs/apps/dev-app/src/server.ts

@ -1,6 +1,8 @@
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0'; import { environment } from './environments/environment';
if (environment.production === false) {
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
}
import 'zone.js/node'; import 'zone.js/node';
import { APP_BASE_HREF } from '@angular/common'; import { APP_BASE_HREF } from '@angular/common';
import { CommonEngine } from '@angular/ssr/node'; import { CommonEngine } from '@angular/ssr/node';
import express from 'express'; import express from 'express';

113
npm/ng-packs/packages/core/locale/src/utils/register-locale.ts

@ -1,5 +1,6 @@
import { differentLocales } from '@abp/ng.core'; import { differentLocales } from '@abp/ng.core';
import { isDevMode } from '@angular/core'; import { inject, isDevMode, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
export interface LocaleErrorHandlerData { export interface LocaleErrorHandlerData {
resolve: any; resolve: any;
@ -15,72 +16,70 @@ export interface RegisterLocaleData {
errorHandlerFn?: (data: LocaleErrorHandlerData) => any; errorHandlerFn?: (data: LocaleErrorHandlerData) => any;
} }
function loadLocale(locale: string) { function loadLocale(locale: string) {
// hard coded list works with esbuild. Source https://github.com/angular/angular-cli/issues/26904#issuecomment-1903596563 // hard coded list works with esbuild. Source https://github.com/angular/angular-cli/issues/26904#issuecomment-1903596563
const list = { const list = {
'ar': () => import('@angular/common/locales/ar'), ar: () => import('@angular/common/locales/ar'),
'cs': () => import('@angular/common/locales/cs'), cs: () => import('@angular/common/locales/cs'),
'en': () => import('@angular/common/locales/en'), en: () => import('@angular/common/locales/en'),
'en-GB': () => import('@angular/common/locales/en-GB'), 'en-GB': () => import('@angular/common/locales/en-GB'),
'es': () => import('@angular/common/locales/es'), es: () => import('@angular/common/locales/es'),
'de': () => import('@angular/common/locales/de'), de: () => import('@angular/common/locales/de'),
'fi': () => import('@angular/common/locales/fi'), fi: () => import('@angular/common/locales/fi'),
'fr': () => import('@angular/common/locales/fr'), fr: () => import('@angular/common/locales/fr'),
'hi': () => import('@angular/common/locales/hi'), hi: () => import('@angular/common/locales/hi'),
'hu': () => import('@angular/common/locales/hu'), hu: () => import('@angular/common/locales/hu'),
'is': () => import('@angular/common/locales/is'), is: () => import('@angular/common/locales/is'),
'it': () => import('@angular/common/locales/it'), it: () => import('@angular/common/locales/it'),
'pt': () => import('@angular/common/locales/pt'), pt: () => import('@angular/common/locales/pt'),
'tr': () => import('@angular/common/locales/tr'), tr: () => import('@angular/common/locales/tr'),
'ru': () => import('@angular/common/locales/ru'), ru: () => import('@angular/common/locales/ru'),
'ro': () => import('@angular/common/locales/ro'), ro: () => import('@angular/common/locales/ro'),
'sk': () => import('@angular/common/locales/sk'), sk: () => import('@angular/common/locales/sk'),
'sl': () => import('@angular/common/locales/sl'), sl: () => import('@angular/common/locales/sl'),
'zh-Hans': () => import('@angular/common/locales/zh-Hans'), 'zh-Hans': () => import('@angular/common/locales/zh-Hans'),
'zh-Hant': () => import('@angular/common/locales/zh-Hant') 'zh-Hant': () => import('@angular/common/locales/zh-Hant'),
} };
return list[locale](); return list[locale]();
} }
export function registerLocaleForEsBuild( export function registerLocaleForEsBuild(
{ {
cultureNameLocaleFileMap = {}, cultureNameLocaleFileMap = {},
errorHandlerFn = defaultLocalErrorHandlerFn, errorHandlerFn = defaultLocalErrorHandlerFn,
} = {} as RegisterLocaleData, } = {} as RegisterLocaleData,
) { ) {
return (locale: string): Promise<any> => { return (locale: string): Promise<any> => {
localeMap = { ...differentLocales, ...cultureNameLocaleFileMap }; localeMap = { ...differentLocales, ...cultureNameLocaleFileMap };
const l = localeMap[locale] || locale; const l = localeMap[locale] || locale;
const localeSupportList = "ar|cs|en|en-GB|es|de|fi|fr|hi|hu|is|it|pt|tr|ru|ro|sk|sl|zh-Hans|zh-Hant".split("|"); const localeSupportList =
'ar|cs|en|en-GB|es|de|fi|fr|hi|hu|is|it|pt|tr|ru|ro|sk|sl|zh-Hans|zh-Hant'.split('|');
if (localeSupportList.indexOf(l) == -1) { if (localeSupportList.indexOf(l) == -1) {
return; return;
} }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
return loadLocale(l) return loadLocale(l)
.then(val => { .then(val => {
let module = val; let module = val;
while (module.default) { while (module.default) {
module = module.default; module = module.default;
} }
resolve({ default: module }); resolve({ default: module });
}) })
.catch(error => { .catch(error => {
errorHandlerFn({ errorHandlerFn({
resolve, resolve,
reject, reject,
error, error,
locale, locale,
}); });
}); });
}); });
}; };
} }
export function registerLocale( export function registerLocale(
{ {
cultureNameLocaleFileMap = {}, cultureNameLocaleFileMap = {},
@ -118,6 +117,18 @@ export function registerLocale(
}; };
} }
export function safeRegisterLocale(): (locale: string) => Promise<any> {
return (locale: string) => {
const platformId = inject(PLATFORM_ID);
if (!isPlatformBrowser(platformId)) {
return Promise.resolve({ default: null });
}
// sadece tarayıcıda gerçek locale yükle
return registerLocale()(locale);
};
}
const extraLocales = {} as { [key: string]: any }; const extraLocales = {} as { [key: string]: any };
export function storeLocaleData(data: any, localeId: string) { export function storeLocaleData(data: any, localeId: string) {
extraLocales[localeId] = data; extraLocales[localeId] = data;

8
npm/ng-packs/packages/theme-basic/src/lib/handlers/lazy-style.handler.ts

@ -1,11 +1,13 @@
import { LazyLoadService, LOADING_STRATEGY } from '@abp/ng.core'; import { LazyLoadService, LOADING_STRATEGY } from '@abp/ng.core';
import { DocumentDirHandlerService, LocaleDirection } from '@abp/ng.theme.shared'; import { DocumentDirHandlerService, LocaleDirection } from '@abp/ng.theme.shared';
import { Injectable, Injector } from '@angular/core'; import { inject, Injectable, Injector } from '@angular/core';
import { LAZY_STYLES } from '../tokens/lazy-styles.token'; import { LAZY_STYLES } from '../tokens/lazy-styles.token';
import { DOCUMENT } from '@angular/common';
export const BOOTSTRAP = 'bootstrap-{{dir}}.min.css'; export const BOOTSTRAP = 'bootstrap-{{dir}}.min.css';
@Injectable() @Injectable()
export class LazyStyleHandler { export class LazyStyleHandler {
private document = inject(DOCUMENT);
private lazyLoad!: LazyLoadService; private lazyLoad!: LazyLoadService;
private styles!: string[]; private styles!: string[];
private _dir: LocaleDirection = 'ltr'; private _dir: LocaleDirection = 'ltr';
@ -32,7 +34,7 @@ export class LazyStyleHandler {
private getHrefFromLink(link: HTMLLinkElement | null | undefined): string { private getHrefFromLink(link: HTMLLinkElement | null | undefined): string {
if (!link) return ''; if (!link) return '';
const a = document.createElement('a'); const a = this.document.createElement('a');
a.href = link.href; a.href = link.href;
return a.pathname.replace(/^\//, ''); return a.pathname.replace(/^\//, '');
} }
@ -40,7 +42,7 @@ export class LazyStyleHandler {
private getLoadedBootstrap(): LoadedStyle { private getLoadedBootstrap(): LoadedStyle {
const href = createLazyStyleHref(BOOTSTRAP, this.dir); const href = createLazyStyleHref(BOOTSTRAP, this.dir);
const selector = `[href*="${href.replace(/\.css$/, '')}"]`; const selector = `[href*="${href.replace(/\.css$/, '')}"]`;
const link = document.querySelector<HTMLLinkElement>(selector); const link = this.document.querySelector<HTMLLinkElement>(selector);
return { href, link }; return { href, link };
} }

Loading…
Cancel
Save