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 { provideServerRendering } from '@angular/platform-server';
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 = {
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);

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 { APP_BASE_HREF } from '@angular/common';
import { CommonEngine } from '@angular/ssr/node';
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 { isDevMode } from '@angular/core';
import { inject, isDevMode, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
export interface LocaleErrorHandlerData {
resolve: any;
@ -15,72 +16,70 @@ export interface RegisterLocaleData {
errorHandlerFn?: (data: LocaleErrorHandlerData) => any;
}
function loadLocale(locale: string) {
// hard coded list works with esbuild. Source https://github.com/angular/angular-cli/issues/26904#issuecomment-1903596563
const list = {
'ar': () => import('@angular/common/locales/ar'),
'cs': () => import('@angular/common/locales/cs'),
'en': () => import('@angular/common/locales/en'),
'en-GB': () => import('@angular/common/locales/en-GB'),
'es': () => import('@angular/common/locales/es'),
'de': () => import('@angular/common/locales/de'),
'fi': () => import('@angular/common/locales/fi'),
'fr': () => import('@angular/common/locales/fr'),
'hi': () => import('@angular/common/locales/hi'),
'hu': () => import('@angular/common/locales/hu'),
'is': () => import('@angular/common/locales/is'),
'it': () => import('@angular/common/locales/it'),
'pt': () => import('@angular/common/locales/pt'),
'tr': () => import('@angular/common/locales/tr'),
'ru': () => import('@angular/common/locales/ru'),
'ro': () => import('@angular/common/locales/ro'),
'sk': () => import('@angular/common/locales/sk'),
'sl': () => import('@angular/common/locales/sl'),
'zh-Hans': () => import('@angular/common/locales/zh-Hans'),
'zh-Hant': () => import('@angular/common/locales/zh-Hant')
}
ar: () => import('@angular/common/locales/ar'),
cs: () => import('@angular/common/locales/cs'),
en: () => import('@angular/common/locales/en'),
'en-GB': () => import('@angular/common/locales/en-GB'),
es: () => import('@angular/common/locales/es'),
de: () => import('@angular/common/locales/de'),
fi: () => import('@angular/common/locales/fi'),
fr: () => import('@angular/common/locales/fr'),
hi: () => import('@angular/common/locales/hi'),
hu: () => import('@angular/common/locales/hu'),
is: () => import('@angular/common/locales/is'),
it: () => import('@angular/common/locales/it'),
pt: () => import('@angular/common/locales/pt'),
tr: () => import('@angular/common/locales/tr'),
ru: () => import('@angular/common/locales/ru'),
ro: () => import('@angular/common/locales/ro'),
sk: () => import('@angular/common/locales/sk'),
sl: () => import('@angular/common/locales/sl'),
'zh-Hans': () => import('@angular/common/locales/zh-Hans'),
'zh-Hant': () => import('@angular/common/locales/zh-Hant'),
};
return list[locale]();
}
export function registerLocaleForEsBuild(
{
cultureNameLocaleFileMap = {},
errorHandlerFn = defaultLocalErrorHandlerFn,
cultureNameLocaleFileMap = {},
errorHandlerFn = defaultLocalErrorHandlerFn,
} = {} as RegisterLocaleData,
) {
return (locale: string): Promise<any> => {
localeMap = { ...differentLocales, ...cultureNameLocaleFileMap };
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("|");
localeMap = { ...differentLocales, ...cultureNameLocaleFileMap };
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('|');
if (localeSupportList.indexOf(l) == -1) {
return;
}
return new Promise((resolve, reject) => {
return loadLocale(l)
.then(val => {
let module = val;
while (module.default) {
module = module.default;
}
resolve({ default: module });
})
.catch(error => {
errorHandlerFn({
resolve,
reject,
error,
locale,
});
});
});
if (localeSupportList.indexOf(l) == -1) {
return;
}
return new Promise((resolve, reject) => {
return loadLocale(l)
.then(val => {
let module = val;
while (module.default) {
module = module.default;
}
resolve({ default: module });
})
.catch(error => {
errorHandlerFn({
resolve,
reject,
error,
locale,
});
});
});
};
}
export function registerLocale(
{
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 };
export function storeLocaleData(data: any, localeId: string) {
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 { 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 { DOCUMENT } from '@angular/common';
export const BOOTSTRAP = 'bootstrap-{{dir}}.min.css';
@Injectable()
export class LazyStyleHandler {
private document = inject(DOCUMENT);
private lazyLoad!: LazyLoadService;
private styles!: string[];
private _dir: LocaleDirection = 'ltr';
@ -32,7 +34,7 @@ export class LazyStyleHandler {
private getHrefFromLink(link: HTMLLinkElement | null | undefined): string {
if (!link) return '';
const a = document.createElement('a');
const a = this.document.createElement('a');
a.href = link.href;
return a.pathname.replace(/^\//, '');
}
@ -40,7 +42,7 @@ export class LazyStyleHandler {
private getLoadedBootstrap(): LoadedStyle {
const href = createLazyStyleHref(BOOTSTRAP, this.dir);
const selector = `[href*="${href.replace(/\.css$/, '')}"]`;
const link = document.querySelector<HTMLLinkElement>(selector);
const link = this.document.querySelector<HTMLLinkElement>(selector);
return { href, link };
}

Loading…
Cancel
Save