Compare commits

...

3 commits

Author SHA1 Message Date
Tykayn
34f233ab60 add cleaner blueprint 2025-10-03 11:46:14 +02:00
Tykayn
3b95c7871c up login page 2025-10-03 11:08:34 +02:00
Tykayn
92cbbb1595 remove some folders 2025-10-03 09:55:31 +02:00
386 changed files with 12358 additions and 57214 deletions

17
blueprint/.editorconfig Normal file
View file

@ -0,0 +1,17 @@
# Editor configuration, see https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.ts]
quote_type = single
ij_typescript_use_double_quotes = false
[*.md]
max_line_length = off
trim_trailing_whitespace = false

42
blueprint/.gitignore vendored Normal file
View file

@ -0,0 +1,42 @@
# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files.
# Compiled output
/dist
/tmp
/out-tsc
/bazel-out
# Node
/node_modules
npm-debug.log
yarn-error.log
# IDEs and editors
.idea/
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# Visual Studio Code
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
# Miscellaneous
/.angular/cache
.sass-cache/
/connect.lock
/coverage
/libpeerconnection.log
testem.log
/typings
# System files
.DS_Store
Thumbs.db

View file

@ -0,0 +1,3 @@
# blueprint pour créer un projet angular
Dépôt à cloner pour démarrer un projet de webapp angular utilisant la lib du design system Aero.

98
blueprint/angular.json Normal file
View file

@ -0,0 +1,98 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"eqlair": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
"style": "scss"
}
},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular/build:application",
"options": {
"browser": "src/main.ts",
"polyfills": [
"zone.js"
],
"tsConfig": "tsconfig.app.json",
"inlineStyleLanguage": "scss",
"assets": [
{
"glob": "**/*",
"input": "public"
}
],
"styles": [
"src/styles.scss"
]
},
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "500kB",
"maximumError": "1MB"
},
{
"type": "anyComponentStyle",
"maximumWarning": "4kB",
"maximumError": "8kB"
}
],
"outputHashing": "all"
},
"development": {
"optimization": false,
"extractLicenses": false,
"sourceMap": true
}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular/build:dev-server",
"configurations": {
"production": {
"buildTarget": "eqlair:build:production"
},
"development": {
"buildTarget": "eqlair:build:development"
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular/build:extract-i18n"
},
"test": {
"builder": "@angular/build:karma",
"options": {
"polyfills": [
"zone.js",
"zone.js/testing"
],
"tsConfig": "tsconfig.spec.json",
"inlineStyleLanguage": "scss",
"assets": [
{
"glob": "**/*",
"input": "public"
}
],
"styles": [
"src/styles.scss"
]
}
}
}
}
}
}

10031
blueprint/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

49
blueprint/package.json Normal file
View file

@ -0,0 +1,49 @@
{
"name": "eqlair",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"watch": "ng build --watch --configuration development",
"link-sae-lib": "bash ./scripts/link-sae-lib.sh",
"postinstall": "npm run link-sae-lib",
"test": "ng test"
},
"prettier": {
"overrides": [
{
"files": "*.html",
"options": {
"parser": "angular"
}
}
]
},
"private": true,
"dependencies": {
"@angular/common": "^20.1.0",
"@angular/compiler": "^20.1.0",
"@angular/core": "^20.1.0",
"@angular/forms": "^20.1.0",
"@angular/platform-browser": "^20.1.0",
"@angular/router": "^20.1.0",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
"zone.js": "~0.15.0"
},
"devDependencies": {
"@angular/build": "^20.1.1",
"@angular/cli": "^20.1.1",
"@angular/compiler-cli": "^20.1.0",
"@types/jasmine": "~5.1.0",
"sae-lib": "file:../my-workspace/projects/sae-lib",
"jasmine-core": "~5.8.0",
"karma": "~6.4.0",
"karma-chrome-launcher": "~3.2.0",
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
"typescript": "~5.8.2"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,37 @@
#!/bin/bash
# Script pour lier sae-lib comme un module npm local
# Vérifier si npm est installé
if ! [ -x "$(command -v npm)" ]; then
echo 'Erreur: npm n est pas installé.' >&2
exit 1
fi
# Configurer npm pour utiliser un répertoire dans l'espace utilisateur
NPM_PREFIX="$HOME/.npm-global"
mkdir -p "$NPM_PREFIX"
npm config set prefix "$NPM_PREFIX"
# Ajouter temporairement au PATH
export PATH="$NPM_PREFIX/bin:$PATH"
# Aller dans le dossier de la bibliothèque
cd ../my-workspace/projects/sae-lib
# Vérifier si package.json existe
if [ ! -f "package.json" ]; then
echo "Erreur: package.json n\'existe pas dans le dossier sae-lib." >&2
exit 1
fi
echo "Création d'un lien npm pour sae-lib..."
npm link
cd ../../../blueprint
# Utiliser le lien dans l'application
echo "Utilisation du lien dans l'application sae-csc..."
npm link sae-lib
echo "Lien créé avec succès. sae-lib est maintenant disponible comme un module npm."

View file

@ -0,0 +1,12 @@
import { ApplicationConfig, provideBrowserGlobalErrorListeners, provideZoneChangeDetection } from '@angular/core';
import { provideRouter } from '@angular/router';
import { routes } from './app.routes';
export const appConfig: ApplicationConfig = {
providers: [
provideBrowserGlobalErrorListeners(),
provideZoneChangeDetection({ eventCoalescing: true }),
provideRouter(routes)
]
};

View file

@ -0,0 +1,7 @@
<app-main-nav></app-main-nav>
<sae-feedback-button></sae-feedback-button>
<main>
<router-outlet/>
</main>

View file

@ -0,0 +1,20 @@
import {Routes} from '@angular/router';
import {Home} from './pages/home/home';
import {Results} from './pages/results/results';
export const routes: Routes = [
{
path: 'home',
component: Home
},
{
path: 'answer',
component: Results
},
{
path: '',
component: Home
},
];

View file

@ -0,0 +1,25 @@
// Styles globaux supplémentaires
html, body {
height: 80vw;
width: 100%;
margin: 0;
}
main {
padding: 100px;
width: 80vw;
min-height: 100vh;
}
* {
box-sizing: border-box;
}
a {
cursor: pointer;
}
app-main-nav {
position: fixed;
width: 100vw;
z-index: 200;
}

View file

@ -0,0 +1,23 @@
import { TestBed } from '@angular/core/testing';
import { App } from './app';
describe('App', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [App],
}).compileComponents();
});
it('should create the app', () => {
const fixture = TestBed.createComponent(App);
const app = fixture.componentInstance;
expect(app).toBeTruthy();
});
it('should render title', () => {
const fixture = TestBed.createComponent(App);
fixture.detectChanges();
const compiled = fixture.nativeElement as HTMLElement;
expect(compiled.querySelector('h1')?.textContent).toContain('Hello, eqlair');
});
});

13
blueprint/src/app/app.ts Normal file
View file

@ -0,0 +1,13 @@
import {Component, signal} from '@angular/core';
import {RouterOutlet} from '@angular/router';
import {MainNav} from './nav/main-nav/main-nav';
import {FeedbackButton} from 'sae-lib/buttons/feedback-button/feedback-button';
@Component({
selector: 'app-root',
imports: [RouterOutlet, MainNav, FeedbackButton],
templateUrl: './app.html',
styleUrl: './app.scss'
})
export class App {
protected readonly title = signal('eqlair');
}

View file

@ -0,0 +1,37 @@
<header class="main-nav">
<nav aria-label="main navigation" class="navbar" role="navigation">
<div class="navbar-brand">
<a class="navbar-item" routerLink="home" routerLinkActive="active-link">
<!-- <app-logo></app-logo>-->
My webapp
</a>
<a
(click)="toggleMenu()"
[class.is-active]="isMenuActive"
aria-expanded="false"
aria-label="menu"
class="navbar-burger"
role="button">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
<div [class.is-active]="isMenuActive" class="navbar-menu" id="navbarBasicExample">
<div class="navbar-start">
<a class="navbar-item">
Home
</a>
</div>
<div class="navbar-end">
<a class="navbar-item" routerLink="answer" routerLinkActive="active-link">answer </a>
</div>
</div>
</nav>
</header>

View file

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MainNav } from './main-nav';
describe('MainNav', () => {
let component: MainNav;
let fixture: ComponentFixture<MainNav>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [MainNav]
})
.compileComponents();
fixture = TestBed.createComponent(MainNav);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View file

@ -0,0 +1,21 @@
import {Component} from '@angular/core';
import {RouterLink, RouterLinkActive} from '@angular/router';
@Component({
selector: 'app-main-nav',
imports: [
RouterLink,
RouterLink,
RouterLinkActive,
// Logo
],
templateUrl: './main-nav.html',
styleUrl: './main-nav.scss'
})
export class MainNav {
isMenuActive: boolean = false;
toggleMenu() {
}
}

View file

@ -0,0 +1,5 @@
<div id="home">
page d'accueil
</div>

View file

View file

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { Home } from './home';
describe('Home', () => {
let component: Home;
let fixture: ComponentFixture<Home>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [Home]
})
.compileComponents();
fixture = TestBed.createComponent(Home);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View file

@ -0,0 +1,16 @@
import {Component} from '@angular/core';
import {MainButton} from 'sae-lib/buttons/main-button/main-button';
import {FeedbackButton} from 'sae-lib/buttons/feedback-button/feedback-button';
@Component({
selector: 'app-home',
imports: [
MainButton,
FeedbackButton
],
templateUrl: './home.html',
styleUrl: './home.scss'
})
export class Home {
}

View file

@ -0,0 +1,3 @@
<div id="results">
résultats
</div>

View file

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { Results } from './results';
describe('Results', () => {
let component: Results;
let fixture: ComponentFixture<Results>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [Results]
})
.compileComponents();
fixture = TestBed.createComponent(Results);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View file

@ -0,0 +1,11 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-results',
imports: [],
templateUrl: './results.html',
styleUrl: './results.scss'
})
export class Results {
}

13
blueprint/src/index.html Normal file
View file

@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My webapp</title>
<base href="/">
<meta content="width=device-width, initial-scale=1" name="viewport">
<link href="favicon.ico" rel="icon" type="image/x-icon">
</head>
<body>
<app-root></app-root>
</body>
</html>

6
blueprint/src/main.ts Normal file
View file

@ -0,0 +1,6 @@
import { bootstrapApplication } from '@angular/platform-browser';
import { appConfig } from './app/app.config';
import { App } from './app/app';
bootstrapApplication(App, appConfig)
.catch((err) => console.error(err));

13
blueprint/src/styles.scss Normal file
View file

@ -0,0 +1,13 @@
// from global to more precise
// sass lang utils
@use "sass:color";
// lib SAE Aero styles
@use 'sae-lib/src/styles/index.scss';
@use 'sae-lib/buttons/feedback-button/feedback-button.scss';
//@use 'sae-lib/src/styles/feedback.scss';
/* Fichier de styles global pour l'application */
// Importer les styles principaux
@use "app/app.scss";
//@use 'styles/main.scss';

View file

@ -0,0 +1,15 @@
/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": []
},
"include": [
"src/**/*.ts"
],
"exclude": [
"src/**/*.spec.ts"
]
}

40
blueprint/tsconfig.json Normal file
View file

@ -0,0 +1,40 @@
/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
{
"compileOnSave": false,
"compilerOptions": {
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"skipLibCheck": true,
"isolatedModules": true,
"experimentalDecorators": true,
"importHelpers": true,
"target": "ES2022",
"module": "preserve",
"baseUrl": "./",
"paths": {
"@sae-lib/*": ["../my-workspace/projects/sae-lib/*"],
"sae-lib": ["../my-workspace/projects/sae-lib"],
"sae-lib/*": ["../my-workspace/projects/sae-lib/*"]
}
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,
"strictInjectionParameters": true,
"strictInputAccessModifiers": true,
"typeCheckHostBindings": true,
"strictTemplates": true
},
"files": [],
"references": [
{
"path": "./tsconfig.app.json"
},
{
"path": "./tsconfig.spec.json"
}
]
}

View file

@ -0,0 +1,14 @@
/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/spec",
"types": [
"jasmine"
]
},
"include": [
"src/**/*.ts"
]
}

89
devops/README.md Normal file
View file

@ -0,0 +1,89 @@
# Documentation des fichiers Docker pour lancer la webapp et l'API Streamlit
Ce dossier contient les fichiers nécessaires pour construire et lancer deux services via Docker :
- **Frontend Angular** (service `frontend`)
- **Backend Streamlit** (service `streamlit`)
Les Dockerfiles attendent une arborescence suivante relativement à ce dossier `devops/` :
- `./frontend/` contient lapplication Angular et ses `package.json`
- `./streamlit/` contient lapplication Streamlit, `requirements.txt` et `app.py`
## 1) docker-compose.yml
Orchestre le lancement des services :
- Service `frontend` (port hôte 4200 → conteneur 4200)
- Service `streamlit` (port hôte 8501 → conteneur 8501)
Commandes de base :
```bash
# Construire les images et démarrer en arrière-plan
docker compose up -d --build
# Voir les logs des deux services
docker compose logs -f
# Arrêter les services
docker compose down
```
## 2) frontend-dockerfile.yml (Angular)
Image basée sur `node:24` qui :
- installe les dépendances `npm` à partir de `package*.json`
- construit lapplication (`npm run build -- --configuration=production`)
- sert le build avec `serve` sur le port 4200
Attendus côté projet :
- dossier `frontend/` avec `package.json`, code Angular, et un build générant `dist/`
Accès :
- Application disponible sur `http://localhost:4200`
Notes :
- Ce Dockerfile sert la version buildée (statique). Pour du hot-reload en dev, prévoir un autre service (ex. `ng serve`) ou un mapping de volumes.
## 3) streamlit-dockerfile.yml (Streamlit)
Image basée sur `python:3.11` qui :
- installe les dépendances via `requirements.txt`
- lance lappli avec `streamlit run app.py --server.port=8501 --server.address=0.0.0.0`
Attendus côté projet :
- dossier `streamlit/` avec `requirements.txt` et `app.py`
Accès :
- Application disponible sur `http://localhost:8501`
## 4) Variables denvironnement et volumes (optionnel)
Si vous avez besoin de configurer des variables ou des volumes, ajoutez-les dans `docker-compose.yml`, par exemple :
```yaml
services:
frontend:
environment:
- NODE_ENV=production
volumes:
- ./frontend/dist:/app/dist:ro
streamlit:
environment:
- STREAMLIT_ENV=production
volumes:
- ./streamlit:/app:ro
```
Adaptez selon vos besoins (mode lecture/écriture, fichiers de config, secrets via `.env`).
## 5) Dépannage
- Vérifiez que les dossiers `./frontend` et `./streamlit` existent bien au même niveau que `docker-compose.yml`.
- Assurez-vous que `frontend/package.json` contient les scripts et dépendances nécessaires au build.
- Assurez-vous que `streamlit/requirements.txt` liste toutes les dépendances Python requises et que `app.py` existe.
- Si un port est déjà utilisé, changez les ports exposés dans `docker-compose.yml`.
- Pour reconstruire proprement après des changements majeurs : `docker compose build --no-cache`.
## 6) Résumé des ports et conteneurs
- `frontend` → conteneur `frontend-app``http://localhost:4200`
- `streamlit` → conteneur `streamlit-app``http://localhost:8501`

418
devops/auth.md Normal file
View file

@ -0,0 +1,418 @@
# Authentification Cognito pour webapps Angular
Ce guide décrit comment intégrer lauthentification AWS Cognito (OIDC Code Flow avec PKCE) dans nos applications Angular.
## Prérequis côté Cognito
- Un User Pool Cognito créé
- Un App client « Public client » (sans secret) avec PKCE activé
- Un domaine Cognito configuré (ex: `my-tenant.auth.eu-west-1.amazoncognito.com`)
- Scopes OIDC: `openid`, `email`, `profile` (ajoutez dautres scopes si besoin)
- URLs de redirection et de logout autorisées
- Dev (Angular local):
- Callback: `http://localhost:4200/callback`
- Logout: `http://localhost:4200`
- Prod: adaptez avec votre domaine (ex: `https://app.example.com/callback` et `https://app.example.com`)
## Variables de configuration (Angular)
Exemple dentrée `environment.ts`:
```typescript
export const environment = {
production: false,
cognito: {
userPoolId: 'eu-west-1_XXXXXXXXX',
userPoolWebClientId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
domain: 'my-tenant.auth.eu-west-1.amazoncognito.com',
redirectSignIn: 'http://localhost:4200/callback',
redirectSignOut: 'http://localhost:4200',
region: 'eu-west-1',
scopes: ['openid', 'email', 'profile']
}
};
```
Mettez à jour `environment.prod.ts` avec les URLs de production.
## Option A — Hosted UI via AWS Amplify
Installation:
```bash
npm i aws-amplify @aws-amplify/ui-angular
```
Configuration (ex: `main.ts` ou `app.module.ts`):
```typescript
import { Amplify } from 'aws-amplify';
import { environment } from './environments/environment';
Amplify.configure({
Auth: {
region: environment.cognito.region,
userPoolId: environment.cognito.userPoolId,
userPoolWebClientId: environment.cognito.userPoolWebClientId,
oauth: {
domain: environment.cognito.domain,
scope: environment.cognito.scopes,
redirectSignIn: environment.cognito.redirectSignIn,
redirectSignOut: environment.cognito.redirectSignOut,
responseType: 'code'
}
}
});
```
Initiation du login (Hosted UI) et gestion du callback (ex: dans un service dauth):
```typescript
import { Auth } from 'aws-amplify';
export class AuthService {
signIn(): Promise<void> {
return Auth.federatedSignIn(); // redirige vers Hosted UI
}
async handleCallback(): Promise<void> {
// Amplify gère automatiquement léchange du code contre les tokens
const session = await Auth.currentSession();
const idToken = session.getIdToken().getJwtToken();
const accessToken = session.getAccessToken().getJwtToken();
// Stockez/consommez les tokens selon vos besoins
}
signOut(): Promise<void> {
return Auth.signOut(); // redirige vers redirectSignOut
}
}
```
Routing du callback (ex: `app-routing.module.ts`):
```typescript
{ path: 'callback', component: CallbackComponent }
```
Dans `CallbackComponent`, appelez `handleCallback()` puis redirigez lutilisateur vers lapp.
## Option B — angular-oauth2-oidc (OIDC Code Flow + PKCE)
Installation:
```bash
npm i angular-oauth2-oidc
```
Configuration (ex: `app.module.ts` et un `auth.config.ts`):
```typescript
// auth.config.ts
import { AuthConfig } from 'angular-oauth2-oidc';
export const authConfig: AuthConfig = {
issuer: 'https://my-tenant.auth.eu-west-1.amazoncognito.com',
clientId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
responseType: 'code',
redirectUri: 'http://localhost:4200/callback',
postLogoutRedirectUri: 'http://localhost:4200',
scope: 'openid email profile',
showDebugInformation: false,
strictDiscoveryDocumentValidation: false, // Cognito nexpose pas toujours toutes les métadonnées standard
};
```
Initialisation au démarrage (ex: `app.module.ts`):
```typescript
import { OAuthService, OAuthModule } from 'angular-oauth2-oidc';
import { authConfig } from './auth.config';
providers: [
{
provide: APP_INITIALIZER,
multi: true,
deps: [OAuthService],
useFactory: (oauthService: OAuthService) => () => {
oauthService.configure(authConfig);
oauthService.setupAutomaticSilentRefresh();
return oauthService.loadDiscoveryDocumentAndLogin();
}
}
]
```
Déclenchement du login/logout:
```typescript
login(): void { this.oauthService.initLoginFlow(); }
logout(): void { this.oauthService.logOut(); }
getIdToken(): string | null { return this.oauthService.getIdToken(); }
```
Protection de routes (ex: guard minimal):
```typescript
canActivate(): boolean {
return this.oauthService.hasValidAccessToken() || this.oauthService.hasValidIdToken();
}
```
## Bonnes pratiques
- Utilisez le flow « Authorization Code + PKCE » pour les SPAs (sécurité accrue)
- Déclarez toutes les URLs de callback/logout (local, staging, prod) dans Cognito
- Synchronisez lheure système (skew de plus de 5 min peut invalider les tokens)
- Évitez dexposer des secrets côté frontend (client public uniquement)
- Renouvelez silencieusement les tokens lorsque possible (silent refresh)
## Dépannage
- `invalid_redirect_uri` / `redirect_mismatch`: vérifiez les URLs exactes dans Cognito
- Erreur « Not authorized » après login: facteurs possibles — scopes manquants, app client erroné
- Boucle de redirection: callback non routé ou handler non exécuté
- CORS/API: frontend authentifié ≠ API autorisée; configurez vos authorizers/API Gateway
- Cookies SameSite: si vous utilisez des cookies, ajustez SameSite/Lax/None selon le contexte
## Checklist déploiement
- Mettre à jour les URLs de callback/logout en prod
- Activer HTTPS sur le domaine de lapp
- Vérifier que le domaine Cognito est public et résout correctement
- Tester login/logout et rafraîchissement de token en environnement prod
## Activation conditionnelle via variable denvironnement + Guard Angular
Nous supportons un mode où lauthentification Cognito est optionnelle selon une variable denvironnement, et une Guard Angular assure la redirection vers une page de login configurable.
### Variables denvironnement
Dans `environment.ts` et `environment.prod.ts`:
```typescript
export const environment = {
production: false,
requireAuth: true, // si false, la Guard laisse passer sans authentification
loginRoute: '/login', // route Angular interne servant le bouton/flux de login
cognito: {
userPoolId: 'eu-west-1_XXXXXXXXX',
userPoolWebClientId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
domain: 'my-tenant.auth.eu-west-1.amazoncognito.com',
redirectSignIn: 'http://localhost:4200/callback',
redirectSignOut: 'http://localhost:4200',
region: 'eu-west-1',
scopes: ['openid', 'email', 'profile']
}
};
```
Mettez `requireAuth: false` sur des environnements de démonstration internes si nécessaire. En production, laissez `true`.
### Utilisation des fichiers .env dAngular
Nous utilisons les fichiers `.env` dAngular pour fournir ces variables au build. Créez les fichiers à la racine du projet Angular (même niveau que `package.json`) :
- `.env` (valeurs par défaut communes)
- `.env.development` (lues en dev)
- `.env.production` (lues en prod)
Exemple `.env.development` :
```bash
NG_APP_REQUIRE_AUTH=true
NG_APP_LOGIN_ROUTE=/login
NG_APP_COGNITO_USER_POOL_ID=eu-west-1_XXXXXXXXX
NG_APP_COGNITO_WEB_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxx
NG_APP_COGNITO_DOMAIN=my-tenant.auth.eu-west-1.amazoncognito.com
NG_APP_COGNITO_REDIRECT_SIGNIN=http://localhost:4200/callback
NG_APP_COGNITO_REDIRECT_SIGNOUT=http://localhost:4200
NG_APP_COGNITO_REGION=eu-west-1
NG_APP_COGNITO_SCOPES=openid,email,profile
```
Exemple `.env.production` :
```bash
NG_APP_REQUIRE_AUTH=true
NG_APP_LOGIN_ROUTE=/login
NG_APP_COGNITO_USER_POOL_ID=eu-west-1_YYYYYYYYY
NG_APP_COGNITO_WEB_CLIENT_ID=yyyyyyyyyyyyyyyyyyyyyyyyyy
NG_APP_COGNITO_DOMAIN=prod-tenant.auth.eu-west-1.amazoncognito.com
NG_APP_COGNITO_REDIRECT_SIGNIN=https://app.example.com/callback
NG_APP_COGNITO_REDIRECT_SIGNOUT=https://app.example.com
NG_APP_COGNITO_REGION=eu-west-1
NG_APP_COGNITO_SCOPES=openid,email,profile
```
Conventions :
- Préfixe recommandé: `NG_APP_` pour exposer la variable au code frontend
- Les `.env.*` sont sélectionnés selon la configuration Angular (ex: `ng serve` utilise `development`, `ng build --configuration=production` utilise `production`)
Lecture dans le code Angular (Angular 17+/Vite) :
```typescript
const env = (import.meta as any).env as Record<string, string>;
export const environment = {
production: env['MODE'] === 'production',
requireAuth: String(env['NG_APP_REQUIRE_AUTH']).toLowerCase() === 'true',
loginRoute: env['NG_APP_LOGIN_ROUTE'] || '/login',
cognito: {
userPoolId: env['NG_APP_COGNITO_USER_POOL_ID'],
userPoolWebClientId: env['NG_APP_COGNITO_WEB_CLIENT_ID'],
domain: env['NG_APP_COGNITO_DOMAIN'],
redirectSignIn: env['NG_APP_COGNITO_REDIRECT_SIGNIN'],
redirectSignOut: env['NG_APP_COGNITO_REDIRECT_SIGNOUT'],
region: env['NG_APP_COGNITO_REGION'],
scopes: (env['NG_APP_COGNITO_SCOPES'] || 'openid,email,profile').split(',')
}
};
```
Note : selon la version de loutillage Angular, laccès peut être `import.meta.env.NG_APP_...` au lieu de lindexation par chaîne. Gardez le préfixe `NG_APP_` pour garantir lexposition au build.
### Injection des `.env` via Docker / docker-compose
Nos builds frontend sont statiques (servis par `serve`). Les variables doivent donc être connues au BUILD. Utilisez des `build.args` dans `docker-compose.yml` et, côté Dockerfile, écrivez un fichier `.env.production` avant le build Angular.
Exemple `docker-compose.yml` (extrait service `frontend`) :
```yaml
services:
frontend:
build:
context: ./frontend
dockerfile: ./frontend-dockerfile.yml
args:
NG_APP_REQUIRE_AUTH: "true"
NG_APP_LOGIN_ROUTE: "/login"
NG_APP_COGNITO_USER_POOL_ID: "eu-west-1_XXXXXXXXX"
NG_APP_COGNITO_WEB_CLIENT_ID: "xxxxxxxxxxxxxxxxxxxxxxxxxx"
NG_APP_COGNITO_DOMAIN: "my-tenant.auth.eu-west-1.amazoncognito.com"
NG_APP_COGNITO_REDIRECT_SIGNIN: "https://app.example.com/callback"
NG_APP_COGNITO_REDIRECT_SIGNOUT: "https://app.example.com"
NG_APP_COGNITO_REGION: "eu-west-1"
NG_APP_COGNITO_SCOPES: "openid,email,profile"
```
Adaptation optionnelle du `frontend-dockerfile.yml` (à ajouter avant `npm run build`) :
```dockerfile
# Arguments build-time pour générer .env.production
ARG NG_APP_REQUIRE_AUTH
ARG NG_APP_LOGIN_ROUTE
ARG NG_APP_COGNITO_USER_POOL_ID
ARG NG_APP_COGNITO_WEB_CLIENT_ID
ARG NG_APP_COGNITO_DOMAIN
ARG NG_APP_COGNITO_REDIRECT_SIGNIN
ARG NG_APP_COGNITO_REDIRECT_SIGNOUT
ARG NG_APP_COGNITO_REGION
ARG NG_APP_COGNITO_SCOPES
# Écrire le fichier .env.production à partir des args
RUN printf "NG_APP_REQUIRE_AUTH=%s\nNG_APP_LOGIN_ROUTE=%s\nNG_APP_COGNITO_USER_POOL_ID=%s\nNG_APP_COGNITO_WEB_CLIENT_ID=%s\nNG_APP_COGNITO_DOMAIN=%s\nNG_APP_COGNITO_REDIRECT_SIGNIN=%s\nNG_APP_COGNITO_REDIRECT_SIGNOUT=%s\nNG_APP_COGNITO_REGION=%s\nNG_APP_COGNITO_SCOPES=%s\n" \
"$NG_APP_REQUIRE_AUTH" \
"$NG_APP_LOGIN_ROUTE" \
"$NG_APP_COGNITO_USER_POOL_ID" \
"$NG_APP_COGNITO_WEB_CLIENT_ID" \
"$NG_APP_COGNITO_DOMAIN" \
"$NG_APP_COGNITO_REDIRECT_SIGNIN" \
"$NG_APP_COGNITO_REDIRECT_SIGNOUT" \
"$NG_APP_COGNITO_REGION" \
"$NG_APP_COGNITO_SCOPES" \
> .env.production
```
Ainsi, le build Angular lit automatiquement ces variables via `import.meta.env` et les injecte dans le bundle.
Remarques :
- Les `environment.*.ts` peuvent mapper `import.meta.env` pour exposer une API typed au reste de lapp.
- Pour des valeurs sensibles, préférez des mécanismes backend (ne jamais exposer de secrets côté SPA).
- Si vous avez besoin de « runtime config » (changer après build), utilisez une approche `config.json` servie par le serveur et chargée au démarrage de lapp.
### Guard Angular (générique)
Exemple de Guard compatible avec Amplify ou angular-oauth2-oidc: elle vérifie `requireAuth`. Si lauth est requise mais absente/expirée, elle redirige vers `loginRoute`.
```typescript
import { Injectable } from '@angular/core';
import { CanActivate, Router, UrlTree } from '@angular/router';
import { environment } from '../environments/environment';
@Injectable({ providedIn: 'root' })
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
async canActivate(): Promise<boolean | UrlTree> {
if (!environment.requireAuth) {
return true;
}
// 1) Vérification via Amplify (si utilisé)
try {
const { Auth } = await import('aws-amplify');
const session = await Auth.currentSession();
const valid = !!session?.getIdToken()?.getJwtToken();
if (valid) return true;
} catch (_) {
// ignore si Amplify non configuré
}
// 2) Vérification via angular-oauth2-oidc (si utilisé)
try {
const { OAuthService } = await import('angular-oauth2-oidc');
const oauth = (window as any).ngInjector?.get?.(OAuthService);
// Note: exposez éventuellement l'injector globalement au bootstrap
if (oauth && (oauth.hasValidAccessToken() || oauth.hasValidIdToken())) {
return true;
}
} catch (_) {
// ignore si non installé
}
return this.router.parseUrl(environment.loginRoute);
}
}
```
Astuce: pour récupérer des services dans la Guard sans injection directe (quand on veut la rendre agnostique), on peut exposer l`Injector` Angular globalement au bootstrap: `window.ngInjector = injector;` et lutiliser comme cidessus.
### Routage protégé
Protégez les routes nécessitant une session valide:
```typescript
{
path: 'app',
canActivate: [AuthGuard],
loadChildren: () => import('./features/app/app.module').then(m => m.AppModule)
}
```
### Page de login (route `loginRoute`)
La page associée à `environment.loginRoute` doit offrir un bouton « Se connecter ». Selon limplémentation:
- Avec Amplify:
```typescript
import { Auth } from 'aws-amplify';
login(): Promise<void> {
return Auth.federatedSignIn();
}
```
- Avec angular-oauth2-oidc:
```typescript
constructor(private oauthService: OAuthService) {}
login(): void {
this.oauthService.initLoginFlow();
}
```
Au retour sur `/callback`, suivez la section correspondante (Amplify: `currentSession()`, OIDC: `loadDiscoveryDocumentAndLogin()` déjà appelé au bootstrap) puis redirigez vers lespace protégé.

View file

@ -0,0 +1,31 @@
# dockerfile
FROM node:24
# Définir le répertoire de travail
WORKDIR /app
# Définir une variable d'environnement pour le chemin de la librairie Angular
ENV LIB_PATH=../my-workspace/projects/sae-lib
# Copier les fichiers package.json et package-lock.json de la librairie
COPY ${LIB_PATH}/package*.json ./
# Installer les dépendances npm
RUN npm install
# Copier le reste des sources (lib Angular + config Storybook)
COPY ${LIB_PATH}/ .
# Construire la librairie Angular (si un script build existe)
RUN npm run build --if-present
# Générer le build statique de Storybook
RUN npm run storybook:build
# Installer un serveur statique pour servir Storybook
RUN npm install -g serve
# Exposer le port standard de Storybook statique
EXPOSE 6006
# Servir le dossier généré par Storybook
CMD ["serve", "-s", "storybook-static", "-l", "6006"]

418
devops/design-system.md Normal file
View file

@ -0,0 +1,418 @@
# Authentification Cognito pour webapps Angular
Ce guide décrit comment intégrer lauthentification AWS Cognito (OIDC Code Flow avec PKCE) dans nos applications Angular.
## Prérequis côté Cognito
- Un User Pool Cognito créé
- Un App client « Public client » (sans secret) avec PKCE activé
- Un domaine Cognito configuré (ex: `my-tenant.auth.eu-west-1.amazoncognito.com`)
- Scopes OIDC: `openid`, `email`, `profile` (ajoutez dautres scopes si besoin)
- URLs de redirection et de logout autorisées
- Dev (Angular local):
- Callback: `http://localhost:4200/callback`
- Logout: `http://localhost:4200`
- Prod: adaptez avec votre domaine (ex: `https://app.example.com/callback` et `https://app.example.com`)
## Variables de configuration (Angular)
Exemple dentrée `environment.ts`:
```typescript
export const environment = {
production: false,
cognito: {
userPoolId: 'eu-west-1_XXXXXXXXX',
userPoolWebClientId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
domain: 'my-tenant.auth.eu-west-1.amazoncognito.com',
redirectSignIn: 'http://localhost:4200/callback',
redirectSignOut: 'http://localhost:4200',
region: 'eu-west-1',
scopes: ['openid', 'email', 'profile']
}
};
```
Mettez à jour `environment.prod.ts` avec les URLs de production.
## Option A — Hosted UI via AWS Amplify
Installation:
```bash
npm i aws-amplify @aws-amplify/ui-angular
```
Configuration (ex: `main.ts` ou `app.module.ts`):
```typescript
import { Amplify } from 'aws-amplify';
import { environment } from './environments/environment';
Amplify.configure({
Auth: {
region: environment.cognito.region,
userPoolId: environment.cognito.userPoolId,
userPoolWebClientId: environment.cognito.userPoolWebClientId,
oauth: {
domain: environment.cognito.domain,
scope: environment.cognito.scopes,
redirectSignIn: environment.cognito.redirectSignIn,
redirectSignOut: environment.cognito.redirectSignOut,
responseType: 'code'
}
}
});
```
Initiation du login (Hosted UI) et gestion du callback (ex: dans un service dauth):
```typescript
import { Auth } from 'aws-amplify';
export class AuthService {
signIn(): Promise<void> {
return Auth.federatedSignIn(); // redirige vers Hosted UI
}
async handleCallback(): Promise<void> {
// Amplify gère automatiquement léchange du code contre les tokens
const session = await Auth.currentSession();
const idToken = session.getIdToken().getJwtToken();
const accessToken = session.getAccessToken().getJwtToken();
// Stockez/consommez les tokens selon vos besoins
}
signOut(): Promise<void> {
return Auth.signOut(); // redirige vers redirectSignOut
}
}
```
Routing du callback (ex: `app-routing.module.ts`):
```typescript
{ path: 'callback', component: CallbackComponent }
```
Dans `CallbackComponent`, appelez `handleCallback()` puis redirigez lutilisateur vers lapp.
## Option B — angular-oauth2-oidc (OIDC Code Flow + PKCE)
Installation:
```bash
npm i angular-oauth2-oidc
```
Configuration (ex: `app.module.ts` et un `auth.config.ts`):
```typescript
// auth.config.ts
import { AuthConfig } from 'angular-oauth2-oidc';
export const authConfig: AuthConfig = {
issuer: 'https://my-tenant.auth.eu-west-1.amazoncognito.com',
clientId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
responseType: 'code',
redirectUri: 'http://localhost:4200/callback',
postLogoutRedirectUri: 'http://localhost:4200',
scope: 'openid email profile',
showDebugInformation: false,
strictDiscoveryDocumentValidation: false, // Cognito nexpose pas toujours toutes les métadonnées standard
};
```
Initialisation au démarrage (ex: `app.module.ts`):
```typescript
import { OAuthService, OAuthModule } from 'angular-oauth2-oidc';
import { authConfig } from './auth.config';
providers: [
{
provide: APP_INITIALIZER,
multi: true,
deps: [OAuthService],
useFactory: (oauthService: OAuthService) => () => {
oauthService.configure(authConfig);
oauthService.setupAutomaticSilentRefresh();
return oauthService.loadDiscoveryDocumentAndLogin();
}
}
]
```
Déclenchement du login/logout:
```typescript
login(): void { this.oauthService.initLoginFlow(); }
logout(): void { this.oauthService.logOut(); }
getIdToken(): string | null { return this.oauthService.getIdToken(); }
```
Protection de routes (ex: guard minimal):
```typescript
canActivate(): boolean {
return this.oauthService.hasValidAccessToken() || this.oauthService.hasValidIdToken();
}
```
## Bonnes pratiques
- Utilisez le flow « Authorization Code + PKCE » pour les SPAs (sécurité accrue)
- Déclarez toutes les URLs de callback/logout (local, staging, prod) dans Cognito
- Synchronisez lheure système (skew de plus de 5 min peut invalider les tokens)
- Évitez dexposer des secrets côté frontend (client public uniquement)
- Renouvelez silencieusement les tokens lorsque possible (silent refresh)
## Dépannage
- `invalid_redirect_uri` / `redirect_mismatch`: vérifiez les URLs exactes dans Cognito
- Erreur « Not authorized » après login: facteurs possibles — scopes manquants, app client erroné
- Boucle de redirection: callback non routé ou handler non exécuté
- CORS/API: frontend authentifié ≠ API autorisée; configurez vos authorizers/API Gateway
- Cookies SameSite: si vous utilisez des cookies, ajustez SameSite/Lax/None selon le contexte
## Checklist déploiement
- Mettre à jour les URLs de callback/logout en prod
- Activer HTTPS sur le domaine de lapp
- Vérifier que le domaine Cognito est public et résout correctement
- Tester login/logout et rafraîchissement de token en environnement prod
## Activation conditionnelle via variable denvironnement + Guard Angular
Nous supportons un mode où lauthentification Cognito est optionnelle selon une variable denvironnement, et une Guard Angular assure la redirection vers une page de login configurable.
### Variables denvironnement
Dans `environment.ts` et `environment.prod.ts`:
```typescript
export const environment = {
production: false,
requireAuth: true, // si false, la Guard laisse passer sans authentification
loginRoute: '/login', // route Angular interne servant le bouton/flux de login
cognito: {
userPoolId: 'eu-west-1_XXXXXXXXX',
userPoolWebClientId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
domain: 'my-tenant.auth.eu-west-1.amazoncognito.com',
redirectSignIn: 'http://localhost:4200/callback',
redirectSignOut: 'http://localhost:4200',
region: 'eu-west-1',
scopes: ['openid', 'email', 'profile']
}
};
```
Mettez `requireAuth: false` sur des environnements de démonstration internes si nécessaire. En production, laissez `true`.
### Utilisation des fichiers .env dAngular
Nous utilisons les fichiers `.env` dAngular pour fournir ces variables au build. Créez les fichiers à la racine du projet Angular (même niveau que `package.json`) :
- `.env` (valeurs par défaut communes)
- `.env.development` (lues en dev)
- `.env.production` (lues en prod)
Exemple `.env.development` :
```bash
NG_APP_REQUIRE_AUTH=true
NG_APP_LOGIN_ROUTE=/login
NG_APP_COGNITO_USER_POOL_ID=eu-west-1_XXXXXXXXX
NG_APP_COGNITO_WEB_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxx
NG_APP_COGNITO_DOMAIN=my-tenant.auth.eu-west-1.amazoncognito.com
NG_APP_COGNITO_REDIRECT_SIGNIN=http://localhost:4200/callback
NG_APP_COGNITO_REDIRECT_SIGNOUT=http://localhost:4200
NG_APP_COGNITO_REGION=eu-west-1
NG_APP_COGNITO_SCOPES=openid,email,profile
```
Exemple `.env.production` :
```bash
NG_APP_REQUIRE_AUTH=true
NG_APP_LOGIN_ROUTE=/login
NG_APP_COGNITO_USER_POOL_ID=eu-west-1_YYYYYYYYY
NG_APP_COGNITO_WEB_CLIENT_ID=yyyyyyyyyyyyyyyyyyyyyyyyyy
NG_APP_COGNITO_DOMAIN=prod-tenant.auth.eu-west-1.amazoncognito.com
NG_APP_COGNITO_REDIRECT_SIGNIN=https://app.example.com/callback
NG_APP_COGNITO_REDIRECT_SIGNOUT=https://app.example.com
NG_APP_COGNITO_REGION=eu-west-1
NG_APP_COGNITO_SCOPES=openid,email,profile
```
Conventions :
- Préfixe recommandé: `NG_APP_` pour exposer la variable au code frontend
- Les `.env.*` sont sélectionnés selon la configuration Angular (ex: `ng serve` utilise `development`, `ng build --configuration=production` utilise `production`)
Lecture dans le code Angular (Angular 17+/Vite) :
```typescript
const env = (import.meta as any).env as Record<string, string>;
export const environment = {
production: env['MODE'] === 'production',
requireAuth: String(env['NG_APP_REQUIRE_AUTH']).toLowerCase() === 'true',
loginRoute: env['NG_APP_LOGIN_ROUTE'] || '/login',
cognito: {
userPoolId: env['NG_APP_COGNITO_USER_POOL_ID'],
userPoolWebClientId: env['NG_APP_COGNITO_WEB_CLIENT_ID'],
domain: env['NG_APP_COGNITO_DOMAIN'],
redirectSignIn: env['NG_APP_COGNITO_REDIRECT_SIGNIN'],
redirectSignOut: env['NG_APP_COGNITO_REDIRECT_SIGNOUT'],
region: env['NG_APP_COGNITO_REGION'],
scopes: (env['NG_APP_COGNITO_SCOPES'] || 'openid,email,profile').split(',')
}
};
```
Note : selon la version de loutillage Angular, laccès peut être `import.meta.env.NG_APP_...` au lieu de lindexation par chaîne. Gardez le préfixe `NG_APP_` pour garantir lexposition au build.
### Injection des `.env` via Docker / docker-compose
Nos builds frontend sont statiques (servis par `serve`). Les variables doivent donc être connues au BUILD. Utilisez des `build.args` dans `docker-compose.yml` et, côté Dockerfile, écrivez un fichier `.env.production` avant le build Angular.
Exemple `docker-compose.yml` (extrait service `frontend`) :
```yaml
services:
frontend:
build:
context: ./frontend
dockerfile: ./frontend-dockerfile.yml
args:
NG_APP_REQUIRE_AUTH: "true"
NG_APP_LOGIN_ROUTE: "/login"
NG_APP_COGNITO_USER_POOL_ID: "eu-west-1_XXXXXXXXX"
NG_APP_COGNITO_WEB_CLIENT_ID: "xxxxxxxxxxxxxxxxxxxxxxxxxx"
NG_APP_COGNITO_DOMAIN: "my-tenant.auth.eu-west-1.amazoncognito.com"
NG_APP_COGNITO_REDIRECT_SIGNIN: "https://app.example.com/callback"
NG_APP_COGNITO_REDIRECT_SIGNOUT: "https://app.example.com"
NG_APP_COGNITO_REGION: "eu-west-1"
NG_APP_COGNITO_SCOPES: "openid,email,profile"
```
Adaptation optionnelle du `frontend-dockerfile.yml` (à ajouter avant `npm run build`) :
```dockerfile
# Arguments build-time pour générer .env.production
ARG NG_APP_REQUIRE_AUTH
ARG NG_APP_LOGIN_ROUTE
ARG NG_APP_COGNITO_USER_POOL_ID
ARG NG_APP_COGNITO_WEB_CLIENT_ID
ARG NG_APP_COGNITO_DOMAIN
ARG NG_APP_COGNITO_REDIRECT_SIGNIN
ARG NG_APP_COGNITO_REDIRECT_SIGNOUT
ARG NG_APP_COGNITO_REGION
ARG NG_APP_COGNITO_SCOPES
# Écrire le fichier .env.production à partir des args
RUN printf "NG_APP_REQUIRE_AUTH=%s\nNG_APP_LOGIN_ROUTE=%s\nNG_APP_COGNITO_USER_POOL_ID=%s\nNG_APP_COGNITO_WEB_CLIENT_ID=%s\nNG_APP_COGNITO_DOMAIN=%s\nNG_APP_COGNITO_REDIRECT_SIGNIN=%s\nNG_APP_COGNITO_REDIRECT_SIGNOUT=%s\nNG_APP_COGNITO_REGION=%s\nNG_APP_COGNITO_SCOPES=%s\n" \
"$NG_APP_REQUIRE_AUTH" \
"$NG_APP_LOGIN_ROUTE" \
"$NG_APP_COGNITO_USER_POOL_ID" \
"$NG_APP_COGNITO_WEB_CLIENT_ID" \
"$NG_APP_COGNITO_DOMAIN" \
"$NG_APP_COGNITO_REDIRECT_SIGNIN" \
"$NG_APP_COGNITO_REDIRECT_SIGNOUT" \
"$NG_APP_COGNITO_REGION" \
"$NG_APP_COGNITO_SCOPES" \
> .env.production
```
Ainsi, le build Angular lit automatiquement ces variables via `import.meta.env` et les injecte dans le bundle.
Remarques :
- Les `environment.*.ts` peuvent mapper `import.meta.env` pour exposer une API typed au reste de lapp.
- Pour des valeurs sensibles, préférez des mécanismes backend (ne jamais exposer de secrets côté SPA).
- Si vous avez besoin de « runtime config » (changer après build), utilisez une approche `config.json` servie par le serveur et chargée au démarrage de lapp.
### Guard Angular (générique)
Exemple de Guard compatible avec Amplify ou angular-oauth2-oidc: elle vérifie `requireAuth`. Si lauth est requise mais absente/expirée, elle redirige vers `loginRoute`.
```typescript
import { Injectable } from '@angular/core';
import { CanActivate, Router, UrlTree } from '@angular/router';
import { environment } from '../environments/environment';
@Injectable({ providedIn: 'root' })
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
async canActivate(): Promise<boolean | UrlTree> {
if (!environment.requireAuth) {
return true;
}
// 1) Vérification via Amplify (si utilisé)
try {
const { Auth } = await import('aws-amplify');
const session = await Auth.currentSession();
const valid = !!session?.getIdToken()?.getJwtToken();
if (valid) return true;
} catch (_) {
// ignore si Amplify non configuré
}
// 2) Vérification via angular-oauth2-oidc (si utilisé)
try {
const { OAuthService } = await import('angular-oauth2-oidc');
const oauth = (window as any).ngInjector?.get?.(OAuthService);
// Note: exposez éventuellement l'injector globalement au bootstrap
if (oauth && (oauth.hasValidAccessToken() || oauth.hasValidIdToken())) {
return true;
}
} catch (_) {
// ignore si non installé
}
return this.router.parseUrl(environment.loginRoute);
}
}
```
Astuce: pour récupérer des services dans la Guard sans injection directe (quand on veut la rendre agnostique), on peut exposer l`Injector` Angular globalement au bootstrap: `window.ngInjector = injector;` et lutiliser comme cidessus.
### Routage protégé
Protégez les routes nécessitant une session valide:
```typescript
{
path: 'app',
canActivate: [AuthGuard],
loadChildren: () => import('./features/app/app.module').then(m => m.AppModule)
}
```
### Page de login (route `loginRoute`)
La page associée à `environment.loginRoute` doit offrir un bouton « Se connecter ». Selon limplémentation:
- Avec Amplify:
```typescript
import { Auth } from 'aws-amplify';
login(): Promise<void> {
return Auth.federatedSignIn();
}
```
- Avec angular-oauth2-oidc:
```typescript
constructor(private oauthService: OAuthService) {}
login(): void {
this.oauthService.initLoginFlow();
}
```
Au retour sur `/callback`, suivez la section correspondante (Amplify: `currentSession()`, OIDC: `loadDiscoveryDocumentAndLogin()` déjà appelé au bootstrap) puis redirigez vers lespace protégé.

21
devops/docker-compose.yml Normal file
View file

@ -0,0 +1,21 @@
version: '3.8'
services:
frontend:
build:
context: ./frontend
dockerfile: ./frontend-dockerfile.yml
ports:
- "4200:4200"
restart: unless-stopped
container_name: frontend-app
streamlit:
build:
context: ./streamlit
dockerfile: ./streamlit-dockerfile.yml
ports:
- "8501:8501"
restart: unless-stopped
container_name: streamlit-app

View file

@ -0,0 +1,30 @@
# dockerfile
FROM node:24
# Définir le répertoire de travail
WORKDIR /app
# Définir une variable d'environnement pour le chemin de la librairie Angular
ENV LIB_PATH=../ma-webapp-angular
# Copier les fichiers package.json et package-lock.json de la librairie
COPY ${LIB_PATH}/package*.json ./
# Installer les dépendances npm
RUN npm install
# Copier le reste des sources (lib Angular + config Storybook)
COPY ${LIB_PATH}/ .
# Construire l'application Angular
RUN npm run build -- --configuration=production
# Installer un serveur HTTP pour servir l'application (par exemple, serve)
RUN npm install -g serve
# Exposer le port 4200 (ou 80 si vous préférez)
EXPOSE 4200
# Commande pour servir l'application Angular buildée
CMD ["serve", "-s", "dist", "-l", "4200"]

140
devops/gitlab-ci.yml Normal file
View file

@ -0,0 +1,140 @@
stages:
- setup
- build
- test
- package
- deploy
variables:
NODE_OPTIONS: --max_old_space_size=4096
# Répertoires (à adapter à votre mono-repo)
FRONTEND_DIR: "frontend"
DESIGN_SYSTEM_DIR: "design-system"
STREAMLIT_DIR: "streamlit"
default:
before_script:
- echo "Node $(node -v) / NPM $(npm -v)"
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- ${FRONTEND_DIR}/.npm/
- ${DESIGN_SYSTEM_DIR}/.npm/
setup:node:
image: node:24
stage: setup
script:
- node -v && npm -v
rules:
- when: always
build:angular:
image: node:24
stage: build
needs: ["setup:node"]
variables:
# Variables .env pour le build Angular (optionnelles)
NG_APP_REQUIRE_AUTH: "true"
NG_APP_LOGIN_ROUTE: "/login"
before_script:
- cd ${FRONTEND_DIR}
- npm ci
script:
- echo "NG_APP_REQUIRE_AUTH=${NG_APP_REQUIRE_AUTH}" >> .env.production
- echo "NG_APP_LOGIN_ROUTE=${NG_APP_LOGIN_ROUTE}" >> .env.production
- npm run build -- --configuration=production
artifacts:
when: always
expire_in: 1 week
paths:
- ${FRONTEND_DIR}/dist/
rules:
- if: $CI_COMMIT_BRANCH
build:storybook:
image: node:24
stage: build
needs: ["setup:node"]
before_script:
- cd ${DESIGN_SYSTEM_DIR}
- npm ci
script:
- npm run build --if-present
- npm run storybook:build
artifacts:
when: always
expire_in: 1 week
paths:
- ${DESIGN_SYSTEM_DIR}/storybook-static/
rules:
- if: $CI_COMMIT_BRANCH
setup:streamlit:
image: python:3.11
stage: setup
before_script:
- cd ${STREAMLIT_DIR}
script:
- if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
artifacts:
when: on_failure
rules:
- when: always
test:streamlit-imports:
image: python:3.11
stage: test
needs: ["setup:streamlit"]
before_script:
- cd ${STREAMLIT_DIR}
script:
- python -c "import importlib,sys; importlib.import_module('streamlit'); print('streamlit ok')"
- if [ -f app.py ]; then python -m py_compile app.py; fi
rules:
- if: $CI_COMMIT_BRANCH
build:openapi-from-streamlit:
image: python:3.11
stage: build
needs: ["setup:streamlit"]
before_script:
- pip install --no-cache-dir astunparse || true
script:
- python devops/streamlit-to-swagger.py --src ${STREAMLIT_DIR} --out openapi.json --title "Streamlit API" --version ${CI_COMMIT_SHORT_SHA}
artifacts:
when: always
expire_in: 1 week
paths:
- openapi.json
rules:
- if: $CI_COMMIT_BRANCH
package:docker-images:
stage: package
image: docker:27
services:
- docker:27-dind
variables:
DOCKER_DRIVER: overlay2
before_script:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
script:
- docker build -f devops/frontend-dockerfile.yml -t $CI_REGISTRY_IMAGE/frontend:${CI_COMMIT_SHORT_SHA} ${FRONTEND_DIR}
- docker build -f devops/design-system-dockerfile.yml -t $CI_REGISTRY_IMAGE/design-system:${CI_COMMIT_SHORT_SHA} ${DESIGN_SYSTEM_DIR}
- docker build -f devops/streamlit-dockerfile.yml -t $CI_REGISTRY_IMAGE/streamlit:${CI_COMMIT_SHORT_SHA} ${STREAMLIT_DIR}
- docker push $CI_REGISTRY_IMAGE/frontend:${CI_COMMIT_SHORT_SHA}
- docker push $CI_REGISTRY_IMAGE/design-system:${CI_COMMIT_SHORT_SHA}
- docker push $CI_REGISTRY_IMAGE/streamlit:${CI_COMMIT_SHORT_SHA}
rules:
- if: $CI_COMMIT_BRANCH
deploy:preview:
stage: deploy
image: alpine:3.19
script:
- echo "Déploiement de preview (placeholder)"
rules:
- if: $CI_COMMIT_BRANCH

View file

@ -0,0 +1,20 @@
# dockerfile
FROM python:3.11
# Définir le répertoire de travail
WORKDIR /app
# Copier les fichiers requirements.txt (s'il existe)
COPY requirements.txt ./
# Installer les dépendances Python
RUN pip install --no-cache-dir -r requirements.txt
# Copier le reste des fichiers de l'application
COPY . .
# Exposer le port par défaut de Streamlit
EXPOSE 8501
# Commande pour lancer l'application Streamlit
CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]

View file

@ -0,0 +1,238 @@
#!/usr/bin/env python3
# produit un fichier swagger à partir d'une application streamlit
import argparse
import ast
import json
import os
import re
import sys
from typing import Any, Dict, List, Optional, Tuple
DOC_TAG_ROUTE = re.compile(r"@route\s+(?P<path>\S+)")
DOC_TAG_METHOD = re.compile(r"@method\s+(?P<method>GET|POST|PUT|PATCH|DELETE|OPTIONS|HEAD)", re.IGNORECASE)
DOC_TAG_SUMMARY = re.compile(r"@summary\s+(?P<summary>.+)")
DOC_TAG_DESC = re.compile(r"@desc(ription)?\s+(?P<desc>.+)")
DOC_TAG_PARAM = re.compile(r"@param\s+(?P<name>[a-zA-Z_][a-zA-Z0-9_]*)\s*:\s*(?P<type>[^\s:]+)(?:\s*:\s*(?P<where>query|path|header|cookie|body))?(?:\s*-\s*(?P<desc>.*))?", re.IGNORECASE)
DOC_TAG_RESP = re.compile(r"@response\s+(?P<code>\d{3})\s*:\s*(?P<desc>.*)")
LINE_ANNOTATION = re.compile(
r"#\s*api:\s*(?P<kvs>.+)", re.IGNORECASE
)
def parse_kv_line(line: str) -> Dict[str, str]:
kvs: Dict[str, str] = {}
m = LINE_ANNOTATION.search(line)
if not m:
return kvs
parts = re.split(r"\s+", m.group("kvs").strip())
for part in parts:
if "=" in part:
k, v = part.split("=", 1)
kvs[k.strip().lower()] = v.strip()
return kvs
def parse_docstring(doc: Optional[str]) -> Dict[str, Any]:
result: Dict[str, Any] = {"params": [], "responses": []}
if not doc:
return result
for line in doc.splitlines():
line = line.strip()
if not line:
continue
m = DOC_TAG_ROUTE.search(line)
if m:
result["route"] = m.group("path")
continue
m = DOC_TAG_METHOD.search(line)
if m:
result["method"] = m.group("method").upper()
continue
m = DOC_TAG_SUMMARY.search(line)
if m:
result["summary"] = m.group("summary").strip()
continue
m = DOC_TAG_DESC.search(line)
if m:
result["description"] = m.group("desc").strip()
continue
m = DOC_TAG_PARAM.search(line)
if m:
result["params"].append(
{
"name": m.group("name"),
"type": (m.group("type") or "string"),
"in": (m.group("where") or "query").lower(),
"description": (m.group("desc") or "").strip(),
}
)
continue
m = DOC_TAG_RESP.search(line)
if m:
result["responses"].append(
{
"code": m.group("code"),
"description": (m.group("desc") or "").strip(),
}
)
continue
return result
def guess_schema(t: str) -> Dict[str, Any]:
t = t.lower()
if t in ("int", "integer"): # basic mapping
return {"type": "integer"}
if t in ("float", "number", "double"):
return {"type": "number"}
if t in ("bool", "boolean"):
return {"type": "boolean"}
if t in ("array", "list"):
return {"type": "array", "items": {"type": "string"}}
if t in ("object", "dict", "map"):
return {"type": "object"}
return {"type": "string"}
def build_operation(meta: Dict[str, Any]) -> Tuple[str, Dict[str, Any]]:
method = meta.get("method", "GET").lower()
summary = meta.get("summary")
description = meta.get("description")
params = meta.get("params", [])
responses = meta.get("responses", [])
op: Dict[str, Any] = {
"tags": ["streamlit"],
"parameters": [],
"responses": {"200": {"description": "OK"}},
}
if summary:
op["summary"] = summary
if description:
op["description"] = description
request_body_props: List[Dict[str, Any]] = []
for p in params:
where = p.get("in", "query")
name = p.get("name")
type_ = p.get("type", "string")
desc = p.get("description", "")
schema = guess_schema(type_)
if where == "body":
request_body_props.append({"name": name, "schema": schema, "description": desc})
elif where in ("query", "path", "header", "cookie"):
op["parameters"].append(
{
"name": name,
"in": where,
"required": where == "path",
"description": desc,
"schema": schema,
}
)
if request_body_props:
properties = {x["name"]: x["schema"] for x in request_body_props}
op["requestBody"] = {
"required": True,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": properties,
}
}
},
}
if responses:
op["responses"] = {r["code"]: {"description": r["description"] or ""} for r in responses}
return method, op
def scan_file(path: str) -> List[Dict[str, Any]]:
with open(path, "r", encoding="utf-8") as f:
src = f.read()
try:
tree = ast.parse(src, filename=path)
except SyntaxError:
return []
endpoints: List[Dict[str, Any]] = []
# 1) Docstrings de fonctions top-level
for node in tree.body:
if isinstance(node, ast.FunctionDef):
meta = parse_docstring(ast.get_docstring(node))
if "route" in meta:
endpoints.append(meta)
# 2) Annotations en ligne: # api: route=/x method=GET summary=...
for i, line in enumerate(src.splitlines(), start=1):
if "# api:" in line.lower():
kv = parse_kv_line(line)
if "route" in kv:
endpoints.append(
{
"route": kv.get("route"),
"method": (kv.get("method") or "GET").upper(),
"summary": kv.get("summary"),
"description": kv.get("description"),
"params": [],
"responses": [],
}
)
return endpoints
def generate_openapi(src_dir: str, title: str, version: str, server_url: Optional[str]) -> Dict[str, Any]:
spec: Dict[str, Any] = {
"openapi": "3.0.3",
"info": {"title": title, "version": version},
"paths": {},
}
if server_url:
spec["servers"] = [{"url": server_url}]
for root, _dirs, files in os.walk(src_dir):
for fname in files:
if not fname.endswith(".py"):
continue
fpath = os.path.join(root, fname)
endpoints = scan_file(fpath)
for meta in endpoints:
route = meta.get("route")
if not route:
continue
method, op = build_operation(meta)
if route not in spec["paths"]:
spec["paths"][route] = {}
spec["paths"][route][method] = op
return spec
def main(argv: Optional[List[str]] = None) -> int:
parser = argparse.ArgumentParser(description="Génère un fichier OpenAPI (Swagger) depuis une app Streamlit par conventions.")
parser.add_argument("--src", default=os.environ.get("STREAMLIT_SRC", "./streamlit"), help="Répertoire source de l'app Streamlit")
parser.add_argument("--out", default="openapi.json", help="Chemin du fichier de sortie OpenAPI JSON")
parser.add_argument("--title", default="Streamlit API", help="Titre de l'API")
parser.add_argument("--version", default="0.1.0", help="Version de l'API")
parser.add_argument("--server-url", default=os.environ.get("OPENAPI_SERVER_URL"), help="URL du serveur à inclure dans le spec")
args = parser.parse_args(argv)
spec = generate_openapi(args.src, args.title, args.version, args.server_url)
with open(args.out, "w", encoding="utf-8") as f:
json.dump(spec, f, ensure_ascii=False, indent=2)
print(f"OpenAPI généré: {args.out}")
return 0
if __name__ == "__main__":
raise SystemExit(main())

View file

@ -27,13 +27,11 @@ fi
echo "Création d'un lien npm pour sae-lib..."
npm link
cd ../../../sae-csc
cd ../../../eqlair
# Utiliser le lien dans l'application
echo "Utilisation du lien dans l'application sae-csc..."
npm link sae-lib
cd ../sae-airwatch
npm link sae-lib
echo "Lien créé avec succès. sae-lib est maintenant disponible comme un module npm."

View file

@ -1,3 +1,7 @@
<app-main-nav></app-main-nav>
<sae-feedback-button></sae-feedback-button>
<main>
<router-outlet/>
</main>

View file

@ -3,23 +3,23 @@ html, body {
height: 80vw;
width: 100%;
margin: 0;
padding: 2rem;
}
main {
padding: 100px;
width: 80vw;
min-height: 100vh;
}
* {
box-sizing: border-box;
}
sae-feedback-button .feedback-button {
top: 140px;
}
app-top-navigation {
position: fixed;
width: 100%;
z-index: 200;
}
a {
cursor: pointer;
}
app-main-nav {
position: fixed;
width: 100vw;
z-index: 200;
}

View file

@ -1,10 +1,10 @@
import {Component, signal} from '@angular/core';
import {RouterOutlet} from '@angular/router';
import {MainNav} from './nav/main-nav/main-nav';
import {FeedbackButton} from 'sae-lib/buttons/feedback-button/feedback-button';
@Component({
selector: 'app-root',
imports: [RouterOutlet, MainNav],
imports: [RouterOutlet, MainNav, FeedbackButton],
templateUrl: './app.html',
styleUrl: './app.scss'
})

View file

@ -1,9 +1,9 @@
<header class="container">
<header class="main-nav">
<nav aria-label="main navigation" class="navbar" role="navigation">
<div class="navbar-brand">
<a class="navbar-item" routerLink="home" routerLinkActive="active-link">
<!-- <app-logo></app-logo>-->
Eqlair
My webapp
</a>
<a
@ -29,9 +29,6 @@
<div class="navbar-end">
<a class="navbar-item">
Eqlair
</a>
<a class="navbar-item" routerLink="answer" routerLinkActive="active-link">answer </a>
</div>

View file

@ -1,22 +1,5 @@
<div id="home">
Eqlair, page d'accueil
page d'accueil
<pre>
stepper, partie 1
</pre>
<pre>
prompt
</pre>
<textarea cols="30" id="" name="" rows="10"></textarea>
<pre>
filtres
<select id="filter_1" name="filter_1"></select>
<select id="filter_2" name="filter_2"></select>
</pre>
<br>
<sae-m-button [label]="'envoyer'" kind="primary"></sae-m-button>
<sae-feedback-button></sae-feedback-button>
</div>

View file

@ -1,14 +1,3 @@
<div id="results">
<pre>
stepper, partie 2
</pre>
<pre>
résultats
</pre>
<pre>
chatbot en bas à droite
</pre>
résultats
</div>

View file

@ -2,12 +2,12 @@
<html lang="en">
<head>
<meta charset="utf-8">
<title>Eqlair</title>
<title>My webapp</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<meta content="width=device-width, initial-scale=1" name="viewport">
<link href="favicon.ico" rel="icon" type="image/x-icon">
</head>
<body>
<app-root></app-root>
<app-root></app-root>
</body>
</html>

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { Observable } from '../Observable';\nexport var EMPTY = new Observable(function (subscriber) {\n return subscriber.complete();\n});\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) {\n return scheduler.schedule(function () {\n return subscriber.complete();\n });\n });\n}\n//# sourceMappingURL=empty.js.map","map":{"version":3,"names":["Observable","EMPTY","subscriber","complete","empty","scheduler","emptyScheduled","schedule"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/observable/empty.js"],"sourcesContent":["import { Observable } from '../Observable';\nexport var EMPTY = new Observable(function (subscriber) { return subscriber.complete(); });\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });\n}\n//# sourceMappingURL=empty.js.map"],"mappings":"AAAA,SAASA,UAAU,QAAQ,eAAe;AAC1C,OAAO,IAAIC,KAAK,GAAG,IAAID,UAAU,CAAC,UAAUE,UAAU,EAAE;EAAE,OAAOA,UAAU,CAACC,QAAQ,CAAC,CAAC;AAAE,CAAC,CAAC;AAC1F,OAAO,SAASC,KAAKA,CAACC,SAAS,EAAE;EAC7B,OAAOA,SAAS,GAAGC,cAAc,CAACD,SAAS,CAAC,GAAGJ,KAAK;AACxD;AACA,SAASK,cAAcA,CAACD,SAAS,EAAE;EAC/B,OAAO,IAAIL,UAAU,CAAC,UAAUE,UAAU,EAAE;IAAE,OAAOG,SAAS,CAACE,QAAQ,CAAC,YAAY;MAAE,OAAOL,UAAU,CAACC,QAAQ,CAAC,CAAC;IAAE,CAAC,CAAC;EAAE,CAAC,CAAC;AAC9H;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { Observable } from '../Observable';\nimport { isFunction } from './isFunction';\nexport function isObservable(obj) {\n return !!obj && (obj instanceof Observable || isFunction(obj.lift) && isFunction(obj.subscribe));\n}\n//# sourceMappingURL=isObservable.js.map","map":{"version":3,"names":["Observable","isFunction","isObservable","obj","lift","subscribe"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/util/isObservable.js"],"sourcesContent":["import { Observable } from '../Observable';\nimport { isFunction } from './isFunction';\nexport function isObservable(obj) {\n return !!obj && (obj instanceof Observable || (isFunction(obj.lift) && isFunction(obj.subscribe)));\n}\n//# sourceMappingURL=isObservable.js.map"],"mappings":"AAAA,SAASA,UAAU,QAAQ,eAAe;AAC1C,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAO,SAASC,YAAYA,CAACC,GAAG,EAAE;EAC9B,OAAO,CAAC,CAACA,GAAG,KAAKA,GAAG,YAAYH,UAAU,IAAKC,UAAU,CAACE,GAAG,CAACC,IAAI,CAAC,IAAIH,UAAU,CAACE,GAAG,CAACE,SAAS,CAAE,CAAC;AACtG;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { createErrorClass } from './createErrorClass';\nexport var NotFoundError = createErrorClass(function (_super) {\n return function NotFoundErrorImpl(message) {\n _super(this);\n this.name = 'NotFoundError';\n this.message = message;\n };\n});\n//# sourceMappingURL=NotFoundError.js.map","map":{"version":3,"names":["createErrorClass","NotFoundError","_super","NotFoundErrorImpl","message","name"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/util/NotFoundError.js"],"sourcesContent":["import { createErrorClass } from './createErrorClass';\nexport var NotFoundError = createErrorClass(function (_super) {\n return function NotFoundErrorImpl(message) {\n _super(this);\n this.name = 'NotFoundError';\n this.message = message;\n };\n});\n//# sourceMappingURL=NotFoundError.js.map"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,oBAAoB;AACrD,OAAO,IAAIC,aAAa,GAAGD,gBAAgB,CAAC,UAAUE,MAAM,EAAE;EAC1D,OAAO,SAASC,iBAAiBA,CAACC,OAAO,EAAE;IACvCF,MAAM,CAAC,IAAI,CAAC;IACZ,IAAI,CAACG,IAAI,GAAG,eAAe;IAC3B,IAAI,CAACD,OAAO,GAAGA,OAAO;EAC1B,CAAC;AACL,CAAC,CAAC;AACF","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { __read, __spreadArray } from \"tslib\";\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { onErrorResumeNext as oERNCreate } from '../observable/onErrorResumeNext';\nexport function onErrorResumeNextWith() {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n var nextSources = argsOrArgArray(sources);\n return function (source) {\n return oERNCreate.apply(void 0, __spreadArray([source], __read(nextSources)));\n };\n}\nexport var onErrorResumeNext = onErrorResumeNextWith;\n//# sourceMappingURL=onErrorResumeNextWith.js.map","map":{"version":3,"names":["__read","__spreadArray","argsOrArgArray","onErrorResumeNext","oERNCreate","onErrorResumeNextWith","sources","_i","arguments","length","nextSources","source","apply"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/onErrorResumeNextWith.js"],"sourcesContent":["import { __read, __spreadArray } from \"tslib\";\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { onErrorResumeNext as oERNCreate } from '../observable/onErrorResumeNext';\nexport function onErrorResumeNextWith() {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n var nextSources = argsOrArgArray(sources);\n return function (source) { return oERNCreate.apply(void 0, __spreadArray([source], __read(nextSources))); };\n}\nexport var onErrorResumeNext = onErrorResumeNextWith;\n//# sourceMappingURL=onErrorResumeNextWith.js.map"],"mappings":"AAAA,SAASA,MAAM,EAAEC,aAAa,QAAQ,OAAO;AAC7C,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,iBAAiB,IAAIC,UAAU,QAAQ,iCAAiC;AACjF,OAAO,SAASC,qBAAqBA,CAAA,EAAG;EACpC,IAAIC,OAAO,GAAG,EAAE;EAChB,KAAK,IAAIC,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGC,SAAS,CAACC,MAAM,EAAEF,EAAE,EAAE,EAAE;IAC1CD,OAAO,CAACC,EAAE,CAAC,GAAGC,SAAS,CAACD,EAAE,CAAC;EAC/B;EACA,IAAIG,WAAW,GAAGR,cAAc,CAACI,OAAO,CAAC;EACzC,OAAO,UAAUK,MAAM,EAAE;IAAE,OAAOP,UAAU,CAACQ,KAAK,CAAC,KAAK,CAAC,EAAEX,aAAa,CAAC,CAACU,MAAM,CAAC,EAAEX,MAAM,CAACU,WAAW,CAAC,CAAC,CAAC;EAAE,CAAC;AAC/G;AACA,OAAO,IAAIP,iBAAiB,GAAGE,qBAAqB;AACpD","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { scanInternals } from './scanInternals';\nimport { operate } from '../util/lift';\nexport function reduce(accumulator, seed) {\n return operate(scanInternals(accumulator, seed, arguments.length >= 2, false, true));\n}\n//# sourceMappingURL=reduce.js.map","map":{"version":3,"names":["scanInternals","operate","reduce","accumulator","seed","arguments","length"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/reduce.js"],"sourcesContent":["import { scanInternals } from './scanInternals';\nimport { operate } from '../util/lift';\nexport function reduce(accumulator, seed) {\n return operate(scanInternals(accumulator, seed, arguments.length >= 2, false, true));\n}\n//# sourceMappingURL=reduce.js.map"],"mappings":"AAAA,SAASA,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,OAAO,QAAQ,cAAc;AACtC,OAAO,SAASC,MAAMA,CAACC,WAAW,EAAEC,IAAI,EAAE;EACtC,OAAOH,OAAO,CAACD,aAAa,CAACG,WAAW,EAAEC,IAAI,EAAEC,SAAS,CAACC,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACxF;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nexport var animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\nexport var animationFrame = animationFrameScheduler;\n//# sourceMappingURL=animationFrame.js.map","map":{"version":3,"names":["AnimationFrameAction","AnimationFrameScheduler","animationFrameScheduler","animationFrame"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/scheduler/animationFrame.js"],"sourcesContent":["import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nexport var animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\nexport var animationFrame = animationFrameScheduler;\n//# sourceMappingURL=animationFrame.js.map"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,wBAAwB;AAC7D,SAASC,uBAAuB,QAAQ,2BAA2B;AACnE,OAAO,IAAIC,uBAAuB,GAAG,IAAID,uBAAuB,CAACD,oBAAoB,CAAC;AACtF,OAAO,IAAIG,cAAc,GAAGD,uBAAuB;AACnD","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { asyncScheduler } from '../scheduler/async';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function debounceTime(dueTime, scheduler) {\n if (scheduler === void 0) {\n scheduler = asyncScheduler;\n }\n return operate(function (source, subscriber) {\n var activeTask = null;\n var lastValue = null;\n var lastTime = null;\n var emit = function () {\n if (activeTask) {\n activeTask.unsubscribe();\n activeTask = null;\n var value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n };\n function emitWhenIdle() {\n var targetTime = lastTime + dueTime;\n var now = scheduler.now();\n if (now < targetTime) {\n activeTask = this.schedule(undefined, targetTime - now);\n subscriber.add(activeTask);\n return;\n }\n emit();\n }\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n lastValue = value;\n lastTime = scheduler.now();\n if (!activeTask) {\n activeTask = scheduler.schedule(emitWhenIdle, dueTime);\n subscriber.add(activeTask);\n }\n }, function () {\n emit();\n subscriber.complete();\n }, undefined, function () {\n lastValue = activeTask = null;\n }));\n });\n}\n//# sourceMappingURL=debounceTime.js.map","map":{"version":3,"names":["asyncScheduler","operate","createOperatorSubscriber","debounceTime","dueTime","scheduler","source","subscriber","activeTask","lastValue","lastTime","emit","unsubscribe","value","next","emitWhenIdle","targetTime","now","schedule","undefined","add","subscribe","complete"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/debounceTime.js"],"sourcesContent":["import { asyncScheduler } from '../scheduler/async';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function debounceTime(dueTime, scheduler) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n return operate(function (source, subscriber) {\n var activeTask = null;\n var lastValue = null;\n var lastTime = null;\n var emit = function () {\n if (activeTask) {\n activeTask.unsubscribe();\n activeTask = null;\n var value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n };\n function emitWhenIdle() {\n var targetTime = lastTime + dueTime;\n var now = scheduler.now();\n if (now < targetTime) {\n activeTask = this.schedule(undefined, targetTime - now);\n subscriber.add(activeTask);\n return;\n }\n emit();\n }\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n lastValue = value;\n lastTime = scheduler.now();\n if (!activeTask) {\n activeTask = scheduler.schedule(emitWhenIdle, dueTime);\n subscriber.add(activeTask);\n }\n }, function () {\n emit();\n subscriber.complete();\n }, undefined, function () {\n lastValue = activeTask = null;\n }));\n });\n}\n//# sourceMappingURL=debounceTime.js.map"],"mappings":"AAAA,SAASA,cAAc,QAAQ,oBAAoB;AACnD,SAASC,OAAO,QAAQ,cAAc;AACtC,SAASC,wBAAwB,QAAQ,sBAAsB;AAC/D,OAAO,SAASC,YAAYA,CAACC,OAAO,EAAEC,SAAS,EAAE;EAC7C,IAAIA,SAAS,KAAK,KAAK,CAAC,EAAE;IAAEA,SAAS,GAAGL,cAAc;EAAE;EACxD,OAAOC,OAAO,CAAC,UAAUK,MAAM,EAAEC,UAAU,EAAE;IACzC,IAAIC,UAAU,GAAG,IAAI;IACrB,IAAIC,SAAS,GAAG,IAAI;IACpB,IAAIC,QAAQ,GAAG,IAAI;IACnB,IAAIC,IAAI,GAAG,SAAAA,CAAA,EAAY;MACnB,IAAIH,UAAU,EAAE;QACZA,UAAU,CAACI,WAAW,CAAC,CAAC;QACxBJ,UAAU,GAAG,IAAI;QACjB,IAAIK,KAAK,GAAGJ,SAAS;QACrBA,SAAS,GAAG,IAAI;QAChBF,UAAU,CAACO,IAAI,CAACD,KAAK,CAAC;MAC1B;IACJ,CAAC;IACD,SAASE,YAAYA,CAAA,EAAG;MACpB,IAAIC,UAAU,GAAGN,QAAQ,GAAGN,OAAO;MACnC,IAAIa,GAAG,GAAGZ,SAAS,CAACY,GAAG,CAAC,CAAC;MACzB,IAAIA,GAAG,GAAGD,UAAU,EAAE;QAClBR,UAAU,GAAG,IAAI,CAACU,QAAQ,CAACC,SAAS,EAAEH,UAAU,GAAGC,GAAG,CAAC;QACvDV,UAAU,CAACa,GAAG,CAACZ,UAAU,CAAC;QAC1B;MACJ;MACAG,IAAI,CAAC,CAAC;IACV;IACAL,MAAM,CAACe,SAAS,CAACnB,wBAAwB,CAACK,UAAU,EAAE,UAAUM,KAAK,EAAE;MACnEJ,SAAS,GAAGI,KAAK;MACjBH,QAAQ,GAAGL,SAAS,CAACY,GAAG,CAAC,CAAC;MAC1B,IAAI,CAACT,UAAU,EAAE;QACbA,UAAU,GAAGH,SAAS,CAACa,QAAQ,CAACH,YAAY,EAAEX,OAAO,CAAC;QACtDG,UAAU,CAACa,GAAG,CAACZ,UAAU,CAAC;MAC9B;IACJ,CAAC,EAAE,YAAY;MACXG,IAAI,CAAC,CAAC;MACNJ,UAAU,CAACe,QAAQ,CAAC,CAAC;IACzB,CAAC,EAAEH,SAAS,EAAE,YAAY;MACtBV,SAAS,GAAGD,UAAU,GAAG,IAAI;IACjC,CAAC,CAAC,CAAC;EACP,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { operate } from '../util/lift';\nexport function catchError(selector) {\n return operate(function (source, subscriber) {\n var innerSub = null;\n var syncUnsub = false;\n var handledResult;\n innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, undefined, function (err) {\n handledResult = innerFrom(selector(err, catchError(selector)(source)));\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n } else {\n syncUnsub = true;\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n });\n}\n//# sourceMappingURL=catchError.js.map","map":{"version":3,"names":["innerFrom","createOperatorSubscriber","operate","catchError","selector","source","subscriber","innerSub","syncUnsub","handledResult","subscribe","undefined","err","unsubscribe"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/catchError.js"],"sourcesContent":["import { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { operate } from '../util/lift';\nexport function catchError(selector) {\n return operate(function (source, subscriber) {\n var innerSub = null;\n var syncUnsub = false;\n var handledResult;\n innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, undefined, function (err) {\n handledResult = innerFrom(selector(err, catchError(selector)(source)));\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n else {\n syncUnsub = true;\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n });\n}\n//# sourceMappingURL=catchError.js.map"],"mappings":"AAAA,SAASA,SAAS,QAAQ,yBAAyB;AACnD,SAASC,wBAAwB,QAAQ,sBAAsB;AAC/D,SAASC,OAAO,QAAQ,cAAc;AACtC,OAAO,SAASC,UAAUA,CAACC,QAAQ,EAAE;EACjC,OAAOF,OAAO,CAAC,UAAUG,MAAM,EAAEC,UAAU,EAAE;IACzC,IAAIC,QAAQ,GAAG,IAAI;IACnB,IAAIC,SAAS,GAAG,KAAK;IACrB,IAAIC,aAAa;IACjBF,QAAQ,GAAGF,MAAM,CAACK,SAAS,CAACT,wBAAwB,CAACK,UAAU,EAAEK,SAAS,EAAEA,SAAS,EAAE,UAAUC,GAAG,EAAE;MAClGH,aAAa,GAAGT,SAAS,CAACI,QAAQ,CAACQ,GAAG,EAAET,UAAU,CAACC,QAAQ,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC;MACtE,IAAIE,QAAQ,EAAE;QACVA,QAAQ,CAACM,WAAW,CAAC,CAAC;QACtBN,QAAQ,GAAG,IAAI;QACfE,aAAa,CAACC,SAAS,CAACJ,UAAU,CAAC;MACvC,CAAC,MACI;QACDE,SAAS,GAAG,IAAI;MACpB;IACJ,CAAC,CAAC,CAAC;IACH,IAAIA,SAAS,EAAE;MACXD,QAAQ,CAACM,WAAW,CAAC,CAAC;MACtBN,QAAQ,GAAG,IAAI;MACfE,aAAa,CAACC,SAAS,CAACJ,UAAU,CAAC;IACvC;EACJ,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","map":{"version":3,"names":["createErrorClass","createImpl","_super","instance","Error","call","stack","ctorFunc","prototype","Object","create","constructor"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js"],"sourcesContent":["export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map"],"mappings":"AAAA,OAAO,SAASA,gBAAgBA,CAACC,UAAU,EAAE;EACzC,IAAIC,MAAM,GAAG,SAAAA,CAAUC,QAAQ,EAAE;IAC7BC,KAAK,CAACC,IAAI,CAACF,QAAQ,CAAC;IACpBA,QAAQ,CAACG,KAAK,GAAG,IAAIF,KAAK,CAAC,CAAC,CAACE,KAAK;EACtC,CAAC;EACD,IAAIC,QAAQ,GAAGN,UAAU,CAACC,MAAM,CAAC;EACjCK,QAAQ,CAACC,SAAS,GAAGC,MAAM,CAACC,MAAM,CAACN,KAAK,CAACI,SAAS,CAAC;EACnDD,QAAQ,CAACC,SAAS,CAACG,WAAW,GAAGJ,QAAQ;EACzC,OAAOA,QAAQ;AACnB;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { fn } from 'storybook/test';\nimport { ButtonComponent } from './button.component';\n// More on how to set up stories at: https://storybook.js.org/docs/writing-stories\nconst meta = {\n title: 'Example/Button',\n component: ButtonComponent,\n tags: ['autodocs'],\n argTypes: {\n backgroundColor: {\n control: 'color'\n }\n },\n // Use `fn` to spy on the onClick arg, which will appear in the actions panel once invoked: https://storybook.js.org/docs/essentials/actions#action-args\n args: {\n onClick: fn()\n }\n};\nexport default meta;\n// More on writing stories with args: https://storybook.js.org/docs/writing-stories/args\nexport const Primary = {\n args: {\n primary: true,\n label: 'Button'\n }\n};\nexport const Secondary = {\n args: {\n label: 'Button'\n }\n};\nexport const Large = {\n args: {\n size: 'large',\n label: 'Button'\n }\n};\nexport const Small = {\n args: {\n size: 'small',\n label: 'Button'\n }\n};","map":{"version":3,"names":["fn","ButtonComponent","meta","title","component","tags","argTypes","backgroundColor","control","args","onClick","Primary","primary","label","Secondary","Large","size","Small"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/src/stories/button.stories.ts"],"sourcesContent":["import { fn } from 'storybook/test';\nimport { ButtonComponent } from './button.component';\n// More on how to set up stories at: https://storybook.js.org/docs/writing-stories\nconst meta = {\n title: 'Example/Button',\n component: ButtonComponent,\n tags: ['autodocs'],\n argTypes: {\n backgroundColor: {\n control: 'color',\n },\n },\n // Use `fn` to spy on the onClick arg, which will appear in the actions panel once invoked: https://storybook.js.org/docs/essentials/actions#action-args\n args: { onClick: fn() },\n};\nexport default meta;\n// More on writing stories with args: https://storybook.js.org/docs/writing-stories/args\nexport const Primary = {\n args: {\n primary: true,\n label: 'Button',\n },\n};\nexport const Secondary = {\n args: {\n label: 'Button',\n },\n};\nexport const Large = {\n args: {\n size: 'large',\n label: 'Button',\n },\n};\nexport const Small = {\n args: {\n size: 'small',\n label: 'Button',\n },\n};\n"],"mappings":"AAAA,SAASA,EAAE,QAAQ,gBAAgB;AACnC,SAASC,eAAe,QAAQ,oBAAoB;AACpD;AACA,MAAMC,IAAI,GAAG;EACTC,KAAK,EAAE,gBAAgB;EACvBC,SAAS,EAAEH,eAAe;EAC1BI,IAAI,EAAE,CAAC,UAAU,CAAC;EAClBC,QAAQ,EAAE;IACNC,eAAe,EAAE;MACbC,OAAO,EAAE;IACb;EACJ,CAAC;EACD;EACAC,IAAI,EAAE;IAAEC,OAAO,EAAEV,EAAE,CAAC;EAAE;AAC1B,CAAC;AACD,eAAeE,IAAI;AACnB;AACA,OAAO,MAAMS,OAAO,GAAG;EACnBF,IAAI,EAAE;IACFG,OAAO,EAAE,IAAI;IACbC,KAAK,EAAE;EACX;AACJ,CAAC;AACD,OAAO,MAAMC,SAAS,GAAG;EACrBL,IAAI,EAAE;IACFI,KAAK,EAAE;EACX;AACJ,CAAC;AACD,OAAO,MAAME,KAAK,GAAG;EACjBN,IAAI,EAAE;IACFO,IAAI,EAAE,OAAO;IACbH,KAAK,EAAE;EACX;AACJ,CAAC;AACD,OAAO,MAAMI,KAAK,GAAG;EACjBR,IAAI,EAAE;IACFO,IAAI,EAAE,OAAO;IACbH,KAAK,EAAE;EACX;AACJ,CAAC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { __read, __spreadArray } from \"tslib\";\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { raceWith } from './raceWith';\nexport function race() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return raceWith.apply(void 0, __spreadArray([], __read(argsOrArgArray(args))));\n}\n//# sourceMappingURL=race.js.map","map":{"version":3,"names":["__read","__spreadArray","argsOrArgArray","raceWith","race","args","_i","arguments","length","apply"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/race.js"],"sourcesContent":["import { __read, __spreadArray } from \"tslib\";\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { raceWith } from './raceWith';\nexport function race() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return raceWith.apply(void 0, __spreadArray([], __read(argsOrArgArray(args))));\n}\n//# sourceMappingURL=race.js.map"],"mappings":"AAAA,SAASA,MAAM,EAAEC,aAAa,QAAQ,OAAO;AAC7C,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,QAAQ,QAAQ,YAAY;AACrC,OAAO,SAASC,IAAIA,CAAA,EAAG;EACnB,IAAIC,IAAI,GAAG,EAAE;EACb,KAAK,IAAIC,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGC,SAAS,CAACC,MAAM,EAAEF,EAAE,EAAE,EAAE;IAC1CD,IAAI,CAACC,EAAE,CAAC,GAAGC,SAAS,CAACD,EAAE,CAAC;EAC5B;EACA,OAAOH,QAAQ,CAACM,KAAK,CAAC,KAAK,CAAC,EAAER,aAAa,CAAC,EAAE,EAAED,MAAM,CAACE,cAAc,CAACG,IAAI,CAAC,CAAC,CAAC,CAAC;AAClF;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nexport function bufferWhen(closingSelector) {\n return operate(function (source, subscriber) {\n var buffer = null;\n var closingSubscriber = null;\n var openBuffer = function () {\n closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe();\n var b = buffer;\n buffer = [];\n b && subscriber.next(b);\n innerFrom(closingSelector()).subscribe(closingSubscriber = createOperatorSubscriber(subscriber, openBuffer, noop));\n };\n openBuffer();\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n return buffer === null || buffer === void 0 ? void 0 : buffer.push(value);\n }, function () {\n buffer && subscriber.next(buffer);\n subscriber.complete();\n }, undefined, function () {\n return buffer = closingSubscriber = null;\n }));\n });\n}\n//# sourceMappingURL=bufferWhen.js.map","map":{"version":3,"names":["operate","noop","createOperatorSubscriber","innerFrom","bufferWhen","closingSelector","source","subscriber","buffer","closingSubscriber","openBuffer","unsubscribe","b","next","subscribe","value","push","complete","undefined"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/bufferWhen.js"],"sourcesContent":["import { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nexport function bufferWhen(closingSelector) {\n return operate(function (source, subscriber) {\n var buffer = null;\n var closingSubscriber = null;\n var openBuffer = function () {\n closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe();\n var b = buffer;\n buffer = [];\n b && subscriber.next(b);\n innerFrom(closingSelector()).subscribe((closingSubscriber = createOperatorSubscriber(subscriber, openBuffer, noop)));\n };\n openBuffer();\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return buffer === null || buffer === void 0 ? void 0 : buffer.push(value); }, function () {\n buffer && subscriber.next(buffer);\n subscriber.complete();\n }, undefined, function () { return (buffer = closingSubscriber = null); }));\n });\n}\n//# sourceMappingURL=bufferWhen.js.map"],"mappings":"AAAA,SAASA,OAAO,QAAQ,cAAc;AACtC,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,wBAAwB,QAAQ,sBAAsB;AAC/D,SAASC,SAAS,QAAQ,yBAAyB;AACnD,OAAO,SAASC,UAAUA,CAACC,eAAe,EAAE;EACxC,OAAOL,OAAO,CAAC,UAAUM,MAAM,EAAEC,UAAU,EAAE;IACzC,IAAIC,MAAM,GAAG,IAAI;IACjB,IAAIC,iBAAiB,GAAG,IAAI;IAC5B,IAAIC,UAAU,GAAG,SAAAA,CAAA,EAAY;MACzBD,iBAAiB,KAAK,IAAI,IAAIA,iBAAiB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,iBAAiB,CAACE,WAAW,CAAC,CAAC;MACrG,IAAIC,CAAC,GAAGJ,MAAM;MACdA,MAAM,GAAG,EAAE;MACXI,CAAC,IAAIL,UAAU,CAACM,IAAI,CAACD,CAAC,CAAC;MACvBT,SAAS,CAACE,eAAe,CAAC,CAAC,CAAC,CAACS,SAAS,CAAEL,iBAAiB,GAAGP,wBAAwB,CAACK,UAAU,EAAEG,UAAU,EAAET,IAAI,CAAE,CAAC;IACxH,CAAC;IACDS,UAAU,CAAC,CAAC;IACZJ,MAAM,CAACQ,SAAS,CAACZ,wBAAwB,CAACK,UAAU,EAAE,UAAUQ,KAAK,EAAE;MAAE,OAAOP,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,MAAM,CAACQ,IAAI,CAACD,KAAK,CAAC;IAAE,CAAC,EAAE,YAAY;MAC/JP,MAAM,IAAID,UAAU,CAACM,IAAI,CAACL,MAAM,CAAC;MACjCD,UAAU,CAACU,QAAQ,CAAC,CAAC;IACzB,CAAC,EAAEC,SAAS,EAAE,YAAY;MAAE,OAAQV,MAAM,GAAGC,iBAAiB,GAAG,IAAI;IAAG,CAAC,CAAC,CAAC;EAC/E,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { asyncScheduler } from '../scheduler/async';\nimport { sample } from './sample';\nimport { interval } from '../observable/interval';\nexport function sampleTime(period, scheduler) {\n if (scheduler === void 0) {\n scheduler = asyncScheduler;\n }\n return sample(interval(period, scheduler));\n}\n//# sourceMappingURL=sampleTime.js.map","map":{"version":3,"names":["asyncScheduler","sample","interval","sampleTime","period","scheduler"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/sampleTime.js"],"sourcesContent":["import { asyncScheduler } from '../scheduler/async';\nimport { sample } from './sample';\nimport { interval } from '../observable/interval';\nexport function sampleTime(period, scheduler) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n return sample(interval(period, scheduler));\n}\n//# sourceMappingURL=sampleTime.js.map"],"mappings":"AAAA,SAASA,cAAc,QAAQ,oBAAoB;AACnD,SAASC,MAAM,QAAQ,UAAU;AACjC,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,OAAO,SAASC,UAAUA,CAACC,MAAM,EAAEC,SAAS,EAAE;EAC1C,IAAIA,SAAS,KAAK,KAAK,CAAC,EAAE;IAAEA,SAAS,GAAGL,cAAc;EAAE;EACxD,OAAOC,MAAM,CAACC,QAAQ,CAACE,MAAM,EAAEC,SAAS,CAAC,CAAC;AAC9C;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nexport function defer(observableFactory) {\n return new Observable(function (subscriber) {\n innerFrom(observableFactory()).subscribe(subscriber);\n });\n}\n//# sourceMappingURL=defer.js.map","map":{"version":3,"names":["Observable","innerFrom","defer","observableFactory","subscriber","subscribe"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/observable/defer.js"],"sourcesContent":["import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nexport function defer(observableFactory) {\n return new Observable(function (subscriber) {\n innerFrom(observableFactory()).subscribe(subscriber);\n });\n}\n//# sourceMappingURL=defer.js.map"],"mappings":"AAAA,SAASA,UAAU,QAAQ,eAAe;AAC1C,SAASC,SAAS,QAAQ,aAAa;AACvC,OAAO,SAASC,KAAKA,CAACC,iBAAiB,EAAE;EACrC,OAAO,IAAIH,UAAU,CAAC,UAAUI,UAAU,EAAE;IACxCH,SAAS,CAACE,iBAAiB,CAAC,CAAC,CAAC,CAACE,SAAS,CAACD,UAAU,CAAC;EACxD,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.highSurrogateTo = exports.highSurrogateFrom = exports.getCodePoint = exports.fromCodePoint = void 0;\nexports.fromCodePoint = String.fromCodePoint || function (astralCodePoint) {\n return String.fromCharCode(Math.floor((astralCodePoint - 0x10000) / 0x400) + 0xd800, (astralCodePoint - 0x10000) % 0x400 + 0xdc00);\n};\n// @ts-expect-error - String.prototype.codePointAt might not exist in older node versions\nexports.getCodePoint = String.prototype.codePointAt ? function (input, position) {\n return input.codePointAt(position);\n} : function (input, position) {\n return (input.charCodeAt(position) - 0xd800) * 0x400 + input.charCodeAt(position + 1) - 0xdc00 + 0x10000;\n};\nexports.highSurrogateFrom = 0xd800;\nexports.highSurrogateTo = 0xdbff;\n//# sourceMappingURL=surrogate-pairs.js.map","map":{"version":3,"names":["Object","defineProperty","exports","value","highSurrogateTo","highSurrogateFrom","getCodePoint","fromCodePoint","String","astralCodePoint","fromCharCode","Math","floor","prototype","codePointAt","input","position","charCodeAt"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/html-entities/dist/commonjs/surrogate-pairs.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.highSurrogateTo = exports.highSurrogateFrom = exports.getCodePoint = exports.fromCodePoint = void 0;\nexports.fromCodePoint = String.fromCodePoint ||\n function (astralCodePoint) {\n return String.fromCharCode(Math.floor((astralCodePoint - 0x10000) / 0x400) + 0xd800, ((astralCodePoint - 0x10000) % 0x400) + 0xdc00);\n };\n// @ts-expect-error - String.prototype.codePointAt might not exist in older node versions\nexports.getCodePoint = String.prototype.codePointAt\n ? function (input, position) {\n return input.codePointAt(position);\n }\n : function (input, position) {\n return (input.charCodeAt(position) - 0xd800) * 0x400 + input.charCodeAt(position + 1) - 0xdc00 + 0x10000;\n };\nexports.highSurrogateFrom = 0xd800;\nexports.highSurrogateTo = 0xdbff;\n//# sourceMappingURL=surrogate-pairs.js.map"],"mappings":"AAAA,YAAY;;AACZA,MAAM,CAACC,cAAc,CAACC,OAAO,EAAE,YAAY,EAAE;EAAEC,KAAK,EAAE;AAAK,CAAC,CAAC;AAC7DD,OAAO,CAACE,eAAe,GAAGF,OAAO,CAACG,iBAAiB,GAAGH,OAAO,CAACI,YAAY,GAAGJ,OAAO,CAACK,aAAa,GAAG,KAAK,CAAC;AAC3GL,OAAO,CAACK,aAAa,GAAGC,MAAM,CAACD,aAAa,IACxC,UAAUE,eAAe,EAAE;EACvB,OAAOD,MAAM,CAACE,YAAY,CAACC,IAAI,CAACC,KAAK,CAAC,CAACH,eAAe,GAAG,OAAO,IAAI,KAAK,CAAC,GAAG,MAAM,EAAG,CAACA,eAAe,GAAG,OAAO,IAAI,KAAK,GAAI,MAAM,CAAC;AACxI,CAAC;AACL;AACAP,OAAO,CAACI,YAAY,GAAGE,MAAM,CAACK,SAAS,CAACC,WAAW,GAC7C,UAAUC,KAAK,EAAEC,QAAQ,EAAE;EACzB,OAAOD,KAAK,CAACD,WAAW,CAACE,QAAQ,CAAC;AACtC,CAAC,GACC,UAAUD,KAAK,EAAEC,QAAQ,EAAE;EACzB,OAAO,CAACD,KAAK,CAACE,UAAU,CAACD,QAAQ,CAAC,GAAG,MAAM,IAAI,KAAK,GAAGD,KAAK,CAACE,UAAU,CAACD,QAAQ,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO;AAC5G,CAAC;AACLd,OAAO,CAACG,iBAAiB,GAAG,MAAM;AAClCH,OAAO,CAACE,eAAe,GAAG,MAAM;AAChC","ignoreList":[]},"metadata":{},"sourceType":"script","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { combineLatestAll } from './combineLatestAll';\nexport var combineAll = combineLatestAll;\n//# sourceMappingURL=combineAll.js.map","map":{"version":3,"names":["combineLatestAll","combineAll"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/combineAll.js"],"sourcesContent":["import { combineLatestAll } from './combineLatestAll';\nexport var combineAll = combineLatestAll;\n//# sourceMappingURL=combineAll.js.map"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,oBAAoB;AACrD,OAAO,IAAIC,UAAU,GAAGD,gBAAgB;AACxC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { __read, __spreadArray } from \"tslib\";\nimport { operate } from '../util/lift';\nimport { concatAll } from './concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from '../observable/from';\nexport function concat() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n return operate(function (source, subscriber) {\n concatAll()(from(__spreadArray([source], __read(args)), scheduler)).subscribe(subscriber);\n });\n}\n//# sourceMappingURL=concat.js.map","map":{"version":3,"names":["__read","__spreadArray","operate","concatAll","popScheduler","from","concat","args","_i","arguments","length","scheduler","source","subscriber","subscribe"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/concat.js"],"sourcesContent":["import { __read, __spreadArray } from \"tslib\";\nimport { operate } from '../util/lift';\nimport { concatAll } from './concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from '../observable/from';\nexport function concat() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n return operate(function (source, subscriber) {\n concatAll()(from(__spreadArray([source], __read(args)), scheduler)).subscribe(subscriber);\n });\n}\n//# sourceMappingURL=concat.js.map"],"mappings":"AAAA,SAASA,MAAM,EAAEC,aAAa,QAAQ,OAAO;AAC7C,SAASC,OAAO,QAAQ,cAAc;AACtC,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,YAAY,QAAQ,cAAc;AAC3C,SAASC,IAAI,QAAQ,oBAAoB;AACzC,OAAO,SAASC,MAAMA,CAAA,EAAG;EACrB,IAAIC,IAAI,GAAG,EAAE;EACb,KAAK,IAAIC,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGC,SAAS,CAACC,MAAM,EAAEF,EAAE,EAAE,EAAE;IAC1CD,IAAI,CAACC,EAAE,CAAC,GAAGC,SAAS,CAACD,EAAE,CAAC;EAC5B;EACA,IAAIG,SAAS,GAAGP,YAAY,CAACG,IAAI,CAAC;EAClC,OAAOL,OAAO,CAAC,UAAUU,MAAM,EAAEC,UAAU,EAAE;IACzCV,SAAS,CAAC,CAAC,CAACE,IAAI,CAACJ,aAAa,CAAC,CAACW,MAAM,CAAC,EAAEZ,MAAM,CAACO,IAAI,CAAC,CAAC,EAAEI,SAAS,CAAC,CAAC,CAACG,SAAS,CAACD,UAAU,CAAC;EAC7F,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\nimport { innerFrom } from '../observable/innerFrom';\nexport function distinct(keySelector, flushes) {\n return operate(function (source, subscriber) {\n var distinctKeys = new Set();\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var key = keySelector ? keySelector(value) : value;\n if (!distinctKeys.has(key)) {\n distinctKeys.add(key);\n subscriber.next(value);\n }\n }));\n flushes && innerFrom(flushes).subscribe(createOperatorSubscriber(subscriber, function () {\n return distinctKeys.clear();\n }, noop));\n });\n}\n//# sourceMappingURL=distinct.js.map","map":{"version":3,"names":["operate","createOperatorSubscriber","noop","innerFrom","distinct","keySelector","flushes","source","subscriber","distinctKeys","Set","subscribe","value","key","has","add","next","clear"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/distinct.js"],"sourcesContent":["import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\nimport { innerFrom } from '../observable/innerFrom';\nexport function distinct(keySelector, flushes) {\n return operate(function (source, subscriber) {\n var distinctKeys = new Set();\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var key = keySelector ? keySelector(value) : value;\n if (!distinctKeys.has(key)) {\n distinctKeys.add(key);\n subscriber.next(value);\n }\n }));\n flushes && innerFrom(flushes).subscribe(createOperatorSubscriber(subscriber, function () { return distinctKeys.clear(); }, noop));\n });\n}\n//# sourceMappingURL=distinct.js.map"],"mappings":"AAAA,SAASA,OAAO,QAAQ,cAAc;AACtC,SAASC,wBAAwB,QAAQ,sBAAsB;AAC/D,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,SAAS,QAAQ,yBAAyB;AACnD,OAAO,SAASC,QAAQA,CAACC,WAAW,EAAEC,OAAO,EAAE;EAC3C,OAAON,OAAO,CAAC,UAAUO,MAAM,EAAEC,UAAU,EAAE;IACzC,IAAIC,YAAY,GAAG,IAAIC,GAAG,CAAC,CAAC;IAC5BH,MAAM,CAACI,SAAS,CAACV,wBAAwB,CAACO,UAAU,EAAE,UAAUI,KAAK,EAAE;MACnE,IAAIC,GAAG,GAAGR,WAAW,GAAGA,WAAW,CAACO,KAAK,CAAC,GAAGA,KAAK;MAClD,IAAI,CAACH,YAAY,CAACK,GAAG,CAACD,GAAG,CAAC,EAAE;QACxBJ,YAAY,CAACM,GAAG,CAACF,GAAG,CAAC;QACrBL,UAAU,CAACQ,IAAI,CAACJ,KAAK,CAAC;MAC1B;IACJ,CAAC,CAAC,CAAC;IACHN,OAAO,IAAIH,SAAS,CAACG,OAAO,CAAC,CAACK,SAAS,CAACV,wBAAwB,CAACO,UAAU,EAAE,YAAY;MAAE,OAAOC,YAAY,CAACQ,KAAK,CAAC,CAAC;IAAE,CAAC,EAAEf,IAAI,CAAC,CAAC;EACrI,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function takeWhile(predicate, inclusive) {\n if (inclusive === void 0) {\n inclusive = false;\n }\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var result = predicate(value, index++);\n (result || inclusive) && subscriber.next(value);\n !result && subscriber.complete();\n }));\n });\n}\n//# sourceMappingURL=takeWhile.js.map","map":{"version":3,"names":["operate","createOperatorSubscriber","takeWhile","predicate","inclusive","source","subscriber","index","subscribe","value","result","next","complete"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/takeWhile.js"],"sourcesContent":["import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function takeWhile(predicate, inclusive) {\n if (inclusive === void 0) { inclusive = false; }\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var result = predicate(value, index++);\n (result || inclusive) && subscriber.next(value);\n !result && subscriber.complete();\n }));\n });\n}\n//# sourceMappingURL=takeWhile.js.map"],"mappings":"AAAA,SAASA,OAAO,QAAQ,cAAc;AACtC,SAASC,wBAAwB,QAAQ,sBAAsB;AAC/D,OAAO,SAASC,SAASA,CAACC,SAAS,EAAEC,SAAS,EAAE;EAC5C,IAAIA,SAAS,KAAK,KAAK,CAAC,EAAE;IAAEA,SAAS,GAAG,KAAK;EAAE;EAC/C,OAAOJ,OAAO,CAAC,UAAUK,MAAM,EAAEC,UAAU,EAAE;IACzC,IAAIC,KAAK,GAAG,CAAC;IACbF,MAAM,CAACG,SAAS,CAACP,wBAAwB,CAACK,UAAU,EAAE,UAAUG,KAAK,EAAE;MACnE,IAAIC,MAAM,GAAGP,SAAS,CAACM,KAAK,EAAEF,KAAK,EAAE,CAAC;MACtC,CAACG,MAAM,IAAIN,SAAS,KAAKE,UAAU,CAACK,IAAI,CAACF,KAAK,CAAC;MAC/C,CAACC,MAAM,IAAIJ,UAAU,CAACM,QAAQ,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;EACP,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","map":{"version":3,"names":["isFunction","value"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/util/isFunction.js"],"sourcesContent":["export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map"],"mappings":"AAAA,OAAO,SAASA,UAAUA,CAACC,KAAK,EAAE;EAC9B,OAAO,OAAOA,KAAK,KAAK,UAAU;AACtC;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = {\n errorThrown: false,\n error: null\n };\n }\n cb();\n if (isRoot) {\n var _a = context,\n errorThrown = _a.errorThrown,\n error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","map":{"version":3,"names":["config","context","errorContext","cb","useDeprecatedSynchronousErrorHandling","isRoot","errorThrown","error","_a","captureError","err"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/util/errorContext.js"],"sourcesContent":["import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map"],"mappings":"AAAA,SAASA,MAAM,QAAQ,WAAW;AAClC,IAAIC,OAAO,GAAG,IAAI;AAClB,OAAO,SAASC,YAAYA,CAACC,EAAE,EAAE;EAC7B,IAAIH,MAAM,CAACI,qCAAqC,EAAE;IAC9C,IAAIC,MAAM,GAAG,CAACJ,OAAO;IACrB,IAAII,MAAM,EAAE;MACRJ,OAAO,GAAG;QAAEK,WAAW,EAAE,KAAK;QAAEC,KAAK,EAAE;MAAK,CAAC;IACjD;IACAJ,EAAE,CAAC,CAAC;IACJ,IAAIE,MAAM,EAAE;MACR,IAAIG,EAAE,GAAGP,OAAO;QAAEK,WAAW,GAAGE,EAAE,CAACF,WAAW;QAAEC,KAAK,GAAGC,EAAE,CAACD,KAAK;MAChEN,OAAO,GAAG,IAAI;MACd,IAAIK,WAAW,EAAE;QACb,MAAMC,KAAK;MACf;IACJ;EACJ,CAAC,MACI;IACDJ,EAAE,CAAC,CAAC;EACR;AACJ;AACA,OAAO,SAASM,YAAYA,CAACC,GAAG,EAAE;EAC9B,IAAIV,MAAM,CAACI,qCAAqC,IAAIH,OAAO,EAAE;IACzDA,OAAO,CAACK,WAAW,GAAG,IAAI;IAC1BL,OAAO,CAACM,KAAK,GAAGG,GAAG;EACvB;AACJ;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { Subject } from '../Subject';\nimport { Observable } from '../Observable';\nimport { defer } from './defer';\nvar DEFAULT_CONFIG = {\n connector: function () {\n return new Subject();\n },\n resetOnDisconnect: true\n};\nexport function connectable(source, config) {\n if (config === void 0) {\n config = DEFAULT_CONFIG;\n }\n var connection = null;\n var connector = config.connector,\n _a = config.resetOnDisconnect,\n resetOnDisconnect = _a === void 0 ? true : _a;\n var subject = connector();\n var result = new Observable(function (subscriber) {\n return subject.subscribe(subscriber);\n });\n result.connect = function () {\n if (!connection || connection.closed) {\n connection = defer(function () {\n return source;\n }).subscribe(subject);\n if (resetOnDisconnect) {\n connection.add(function () {\n return subject = connector();\n });\n }\n }\n return connection;\n };\n return result;\n}\n//# sourceMappingURL=connectable.js.map","map":{"version":3,"names":["Subject","Observable","defer","DEFAULT_CONFIG","connector","resetOnDisconnect","connectable","source","config","connection","_a","subject","result","subscriber","subscribe","connect","closed","add"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/observable/connectable.js"],"sourcesContent":["import { Subject } from '../Subject';\nimport { Observable } from '../Observable';\nimport { defer } from './defer';\nvar DEFAULT_CONFIG = {\n connector: function () { return new Subject(); },\n resetOnDisconnect: true,\n};\nexport function connectable(source, config) {\n if (config === void 0) { config = DEFAULT_CONFIG; }\n var connection = null;\n var connector = config.connector, _a = config.resetOnDisconnect, resetOnDisconnect = _a === void 0 ? true : _a;\n var subject = connector();\n var result = new Observable(function (subscriber) {\n return subject.subscribe(subscriber);\n });\n result.connect = function () {\n if (!connection || connection.closed) {\n connection = defer(function () { return source; }).subscribe(subject);\n if (resetOnDisconnect) {\n connection.add(function () { return (subject = connector()); });\n }\n }\n return connection;\n };\n return result;\n}\n//# sourceMappingURL=connectable.js.map"],"mappings":"AAAA,SAASA,OAAO,QAAQ,YAAY;AACpC,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASC,KAAK,QAAQ,SAAS;AAC/B,IAAIC,cAAc,GAAG;EACjBC,SAAS,EAAE,SAAAA,CAAA,EAAY;IAAE,OAAO,IAAIJ,OAAO,CAAC,CAAC;EAAE,CAAC;EAChDK,iBAAiB,EAAE;AACvB,CAAC;AACD,OAAO,SAASC,WAAWA,CAACC,MAAM,EAAEC,MAAM,EAAE;EACxC,IAAIA,MAAM,KAAK,KAAK,CAAC,EAAE;IAAEA,MAAM,GAAGL,cAAc;EAAE;EAClD,IAAIM,UAAU,GAAG,IAAI;EACrB,IAAIL,SAAS,GAAGI,MAAM,CAACJ,SAAS;IAAEM,EAAE,GAAGF,MAAM,CAACH,iBAAiB;IAAEA,iBAAiB,GAAGK,EAAE,KAAK,KAAK,CAAC,GAAG,IAAI,GAAGA,EAAE;EAC9G,IAAIC,OAAO,GAAGP,SAAS,CAAC,CAAC;EACzB,IAAIQ,MAAM,GAAG,IAAIX,UAAU,CAAC,UAAUY,UAAU,EAAE;IAC9C,OAAOF,OAAO,CAACG,SAAS,CAACD,UAAU,CAAC;EACxC,CAAC,CAAC;EACFD,MAAM,CAACG,OAAO,GAAG,YAAY;IACzB,IAAI,CAACN,UAAU,IAAIA,UAAU,CAACO,MAAM,EAAE;MAClCP,UAAU,GAAGP,KAAK,CAAC,YAAY;QAAE,OAAOK,MAAM;MAAE,CAAC,CAAC,CAACO,SAAS,CAACH,OAAO,CAAC;MACrE,IAAIN,iBAAiB,EAAE;QACnBI,UAAU,CAACQ,GAAG,CAAC,YAAY;UAAE,OAAQN,OAAO,GAAGP,SAAS,CAAC,CAAC;QAAG,CAAC,CAAC;MACnE;IACJ;IACA,OAAOK,UAAU;EACrB,CAAC;EACD,OAAOG,MAAM;AACjB;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { mergeMap } from './mergeMap';\nexport var flatMap = mergeMap;\n//# sourceMappingURL=flatMap.js.map","map":{"version":3,"names":["mergeMap","flatMap"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/flatMap.js"],"sourcesContent":["import { mergeMap } from './mergeMap';\nexport var flatMap = mergeMap;\n//# sourceMappingURL=flatMap.js.map"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,YAAY;AACrC,OAAO,IAAIC,OAAO,GAAGD,QAAQ;AAC7B","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { operate } from '../util/lift';\nimport { scanInternals } from './scanInternals';\nexport function scan(accumulator, seed) {\n return operate(scanInternals(accumulator, seed, arguments.length >= 2, true));\n}\n//# sourceMappingURL=scan.js.map","map":{"version":3,"names":["operate","scanInternals","scan","accumulator","seed","arguments","length"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/scan.js"],"sourcesContent":["import { operate } from '../util/lift';\nimport { scanInternals } from './scanInternals';\nexport function scan(accumulator, seed) {\n return operate(scanInternals(accumulator, seed, arguments.length >= 2, true));\n}\n//# sourceMappingURL=scan.js.map"],"mappings":"AAAA,SAASA,OAAO,QAAQ,cAAc;AACtC,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,OAAO,SAASC,IAAIA,CAACC,WAAW,EAAEC,IAAI,EAAE;EACpC,OAAOJ,OAAO,CAACC,aAAa,CAACE,WAAW,EAAEC,IAAI,EAAEC,SAAS,CAACC,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACjF;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { switchMap } from './switchMap';\nimport { identity } from '../util/identity';\nexport function switchAll() {\n return switchMap(identity);\n}\n//# sourceMappingURL=switchAll.js.map","map":{"version":3,"names":["switchMap","identity","switchAll"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/switchAll.js"],"sourcesContent":["import { switchMap } from './switchMap';\nimport { identity } from '../util/identity';\nexport function switchAll() {\n return switchMap(identity);\n}\n//# sourceMappingURL=switchAll.js.map"],"mappings":"AAAA,SAASA,SAAS,QAAQ,aAAa;AACvC,SAASC,QAAQ,QAAQ,kBAAkB;AAC3C,OAAO,SAASC,SAASA,CAAA,EAAG;EACxB,OAAOF,SAAS,CAACC,QAAQ,CAAC;AAC9B;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { Observable } from '../Observable';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { noop } from '../util/noop';\nimport { innerFrom } from './innerFrom';\nexport function onErrorResumeNext() {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n var nextSources = argsOrArgArray(sources);\n return new Observable(function (subscriber) {\n var sourceIndex = 0;\n var subscribeNext = function () {\n if (sourceIndex < nextSources.length) {\n var nextSource = void 0;\n try {\n nextSource = innerFrom(nextSources[sourceIndex++]);\n } catch (err) {\n subscribeNext();\n return;\n }\n var innerSubscriber = new OperatorSubscriber(subscriber, undefined, noop, noop);\n nextSource.subscribe(innerSubscriber);\n innerSubscriber.add(subscribeNext);\n } else {\n subscriber.complete();\n }\n };\n subscribeNext();\n });\n}\n//# sourceMappingURL=onErrorResumeNext.js.map","map":{"version":3,"names":["Observable","argsOrArgArray","OperatorSubscriber","noop","innerFrom","onErrorResumeNext","sources","_i","arguments","length","nextSources","subscriber","sourceIndex","subscribeNext","nextSource","err","innerSubscriber","undefined","subscribe","add","complete"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/observable/onErrorResumeNext.js"],"sourcesContent":["import { Observable } from '../Observable';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { noop } from '../util/noop';\nimport { innerFrom } from './innerFrom';\nexport function onErrorResumeNext() {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n var nextSources = argsOrArgArray(sources);\n return new Observable(function (subscriber) {\n var sourceIndex = 0;\n var subscribeNext = function () {\n if (sourceIndex < nextSources.length) {\n var nextSource = void 0;\n try {\n nextSource = innerFrom(nextSources[sourceIndex++]);\n }\n catch (err) {\n subscribeNext();\n return;\n }\n var innerSubscriber = new OperatorSubscriber(subscriber, undefined, noop, noop);\n nextSource.subscribe(innerSubscriber);\n innerSubscriber.add(subscribeNext);\n }\n else {\n subscriber.complete();\n }\n };\n subscribeNext();\n });\n}\n//# sourceMappingURL=onErrorResumeNext.js.map"],"mappings":"AAAA,SAASA,UAAU,QAAQ,eAAe;AAC1C,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,kBAAkB,QAAQ,iCAAiC;AACpE,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,SAAS,QAAQ,aAAa;AACvC,OAAO,SAASC,iBAAiBA,CAAA,EAAG;EAChC,IAAIC,OAAO,GAAG,EAAE;EAChB,KAAK,IAAIC,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGC,SAAS,CAACC,MAAM,EAAEF,EAAE,EAAE,EAAE;IAC1CD,OAAO,CAACC,EAAE,CAAC,GAAGC,SAAS,CAACD,EAAE,CAAC;EAC/B;EACA,IAAIG,WAAW,GAAGT,cAAc,CAACK,OAAO,CAAC;EACzC,OAAO,IAAIN,UAAU,CAAC,UAAUW,UAAU,EAAE;IACxC,IAAIC,WAAW,GAAG,CAAC;IACnB,IAAIC,aAAa,GAAG,SAAAA,CAAA,EAAY;MAC5B,IAAID,WAAW,GAAGF,WAAW,CAACD,MAAM,EAAE;QAClC,IAAIK,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI;UACAA,UAAU,GAAGV,SAAS,CAACM,WAAW,CAACE,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC,CACD,OAAOG,GAAG,EAAE;UACRF,aAAa,CAAC,CAAC;UACf;QACJ;QACA,IAAIG,eAAe,GAAG,IAAId,kBAAkB,CAACS,UAAU,EAAEM,SAAS,EAAEd,IAAI,EAAEA,IAAI,CAAC;QAC/EW,UAAU,CAACI,SAAS,CAACF,eAAe,CAAC;QACrCA,eAAe,CAACG,GAAG,CAACN,aAAa,CAAC;MACtC,CAAC,MACI;QACDF,UAAU,CAACS,QAAQ,CAAC,CAAC;MACzB;IACJ,CAAC;IACDP,aAAa,CAAC,CAAC;EACnB,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { __extends } from \"tslib\";\nimport { AsyncScheduler } from './AsyncScheduler';\nvar AnimationFrameScheduler = function (_super) {\n __extends(AnimationFrameScheduler, _super);\n function AnimationFrameScheduler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n AnimationFrameScheduler.prototype.flush = function (action) {\n this._active = true;\n var flushId;\n if (action) {\n flushId = action.id;\n } else {\n flushId = this._scheduled;\n this._scheduled = undefined;\n }\n var actions = this.actions;\n var error;\n action = action || actions.shift();\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n this._active = false;\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AnimationFrameScheduler;\n}(AsyncScheduler);\nexport { AnimationFrameScheduler };\n//# sourceMappingURL=AnimationFrameScheduler.js.map","map":{"version":3,"names":["__extends","AsyncScheduler","AnimationFrameScheduler","_super","apply","arguments","prototype","flush","action","_active","flushId","id","_scheduled","undefined","actions","error","shift","execute","state","delay","unsubscribe"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/scheduler/AnimationFrameScheduler.js"],"sourcesContent":["import { __extends } from \"tslib\";\nimport { AsyncScheduler } from './AsyncScheduler';\nvar AnimationFrameScheduler = (function (_super) {\n __extends(AnimationFrameScheduler, _super);\n function AnimationFrameScheduler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n AnimationFrameScheduler.prototype.flush = function (action) {\n this._active = true;\n var flushId;\n if (action) {\n flushId = action.id;\n }\n else {\n flushId = this._scheduled;\n this._scheduled = undefined;\n }\n var actions = this.actions;\n var error;\n action = action || actions.shift();\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n this._active = false;\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AnimationFrameScheduler;\n}(AsyncScheduler));\nexport { AnimationFrameScheduler };\n//# sourceMappingURL=AnimationFrameScheduler.js.map"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,cAAc,QAAQ,kBAAkB;AACjD,IAAIC,uBAAuB,GAAI,UAAUC,MAAM,EAAE;EAC7CH,SAAS,CAACE,uBAAuB,EAAEC,MAAM,CAAC;EAC1C,SAASD,uBAAuBA,CAAA,EAAG;IAC/B,OAAOC,MAAM,KAAK,IAAI,IAAIA,MAAM,CAACC,KAAK,CAAC,IAAI,EAAEC,SAAS,CAAC,IAAI,IAAI;EACnE;EACAH,uBAAuB,CAACI,SAAS,CAACC,KAAK,GAAG,UAAUC,MAAM,EAAE;IACxD,IAAI,CAACC,OAAO,GAAG,IAAI;IACnB,IAAIC,OAAO;IACX,IAAIF,MAAM,EAAE;MACRE,OAAO,GAAGF,MAAM,CAACG,EAAE;IACvB,CAAC,MACI;MACDD,OAAO,GAAG,IAAI,CAACE,UAAU;MACzB,IAAI,CAACA,UAAU,GAAGC,SAAS;IAC/B;IACA,IAAIC,OAAO,GAAG,IAAI,CAACA,OAAO;IAC1B,IAAIC,KAAK;IACTP,MAAM,GAAGA,MAAM,IAAIM,OAAO,CAACE,KAAK,CAAC,CAAC;IAClC,GAAG;MACC,IAAKD,KAAK,GAAGP,MAAM,CAACS,OAAO,CAACT,MAAM,CAACU,KAAK,EAAEV,MAAM,CAACW,KAAK,CAAC,EAAG;QACtD;MACJ;IACJ,CAAC,QAAQ,CAACX,MAAM,GAAGM,OAAO,CAAC,CAAC,CAAC,KAAKN,MAAM,CAACG,EAAE,KAAKD,OAAO,IAAII,OAAO,CAACE,KAAK,CAAC,CAAC;IAC1E,IAAI,CAACP,OAAO,GAAG,KAAK;IACpB,IAAIM,KAAK,EAAE;MACP,OAAO,CAACP,MAAM,GAAGM,OAAO,CAAC,CAAC,CAAC,KAAKN,MAAM,CAACG,EAAE,KAAKD,OAAO,IAAII,OAAO,CAACE,KAAK,CAAC,CAAC,EAAE;QACtER,MAAM,CAACY,WAAW,CAAC,CAAC;MACxB;MACA,MAAML,KAAK;IACf;EACJ,CAAC;EACD,OAAOb,uBAAuB;AAClC,CAAC,CAACD,cAAc,CAAE;AAClB,SAASC,uBAAuB;AAChC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { EmptyError } from './util/EmptyError';\nexport function lastValueFrom(source, config) {\n var hasConfig = typeof config === 'object';\n return new Promise(function (resolve, reject) {\n var _hasValue = false;\n var _value;\n source.subscribe({\n next: function (value) {\n _value = value;\n _hasValue = true;\n },\n error: reject,\n complete: function () {\n if (_hasValue) {\n resolve(_value);\n } else if (hasConfig) {\n resolve(config.defaultValue);\n } else {\n reject(new EmptyError());\n }\n }\n });\n });\n}\n//# sourceMappingURL=lastValueFrom.js.map","map":{"version":3,"names":["EmptyError","lastValueFrom","source","config","hasConfig","Promise","resolve","reject","_hasValue","_value","subscribe","next","value","error","complete","defaultValue"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/lastValueFrom.js"],"sourcesContent":["import { EmptyError } from './util/EmptyError';\nexport function lastValueFrom(source, config) {\n var hasConfig = typeof config === 'object';\n return new Promise(function (resolve, reject) {\n var _hasValue = false;\n var _value;\n source.subscribe({\n next: function (value) {\n _value = value;\n _hasValue = true;\n },\n error: reject,\n complete: function () {\n if (_hasValue) {\n resolve(_value);\n }\n else if (hasConfig) {\n resolve(config.defaultValue);\n }\n else {\n reject(new EmptyError());\n }\n },\n });\n });\n}\n//# sourceMappingURL=lastValueFrom.js.map"],"mappings":"AAAA,SAASA,UAAU,QAAQ,mBAAmB;AAC9C,OAAO,SAASC,aAAaA,CAACC,MAAM,EAAEC,MAAM,EAAE;EAC1C,IAAIC,SAAS,GAAG,OAAOD,MAAM,KAAK,QAAQ;EAC1C,OAAO,IAAIE,OAAO,CAAC,UAAUC,OAAO,EAAEC,MAAM,EAAE;IAC1C,IAAIC,SAAS,GAAG,KAAK;IACrB,IAAIC,MAAM;IACVP,MAAM,CAACQ,SAAS,CAAC;MACbC,IAAI,EAAE,SAAAA,CAAUC,KAAK,EAAE;QACnBH,MAAM,GAAGG,KAAK;QACdJ,SAAS,GAAG,IAAI;MACpB,CAAC;MACDK,KAAK,EAAEN,MAAM;MACbO,QAAQ,EAAE,SAAAA,CAAA,EAAY;QAClB,IAAIN,SAAS,EAAE;UACXF,OAAO,CAACG,MAAM,CAAC;QACnB,CAAC,MACI,IAAIL,SAAS,EAAE;UAChBE,OAAO,CAACH,MAAM,CAACY,YAAY,CAAC;QAChC,CAAC,MACI;UACDR,MAAM,CAAC,IAAIP,UAAU,CAAC,CAAC,CAAC;QAC5B;MACJ;IACJ,CAAC,CAAC;EACN,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"var isArray = Array.isArray;\nexport function argsOrArgArray(args) {\n return args.length === 1 && isArray(args[0]) ? args[0] : args;\n}\n//# sourceMappingURL=argsOrArgArray.js.map","map":{"version":3,"names":["isArray","Array","argsOrArgArray","args","length"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/util/argsOrArgArray.js"],"sourcesContent":["var isArray = Array.isArray;\nexport function argsOrArgArray(args) {\n return args.length === 1 && isArray(args[0]) ? args[0] : args;\n}\n//# sourceMappingURL=argsOrArgArray.js.map"],"mappings":"AAAA,IAAIA,OAAO,GAAGC,KAAK,CAACD,OAAO;AAC3B,OAAO,SAASE,cAAcA,CAACC,IAAI,EAAE;EACjC,OAAOA,IAAI,CAACC,MAAM,KAAK,CAAC,IAAIJ,OAAO,CAACG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAGA,IAAI,CAAC,CAAC,CAAC,GAAGA,IAAI;AACjE;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { __read, __spreadArray } from \"tslib\";\nimport { map } from \"../operators/map\";\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n return map(function (args) {\n return callOrApply(fn, args);\n });\n}\n//# sourceMappingURL=mapOneOrManyArgs.js.map","map":{"version":3,"names":["__read","__spreadArray","map","isArray","Array","callOrApply","fn","args","apply","mapOneOrManyArgs"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js"],"sourcesContent":["import { __read, __spreadArray } from \"tslib\";\nimport { map } from \"../operators/map\";\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n return map(function (args) { return callOrApply(fn, args); });\n}\n//# sourceMappingURL=mapOneOrManyArgs.js.map"],"mappings":"AAAA,SAASA,MAAM,EAAEC,aAAa,QAAQ,OAAO;AAC7C,SAASC,GAAG,QAAQ,kBAAkB;AACtC,IAAIC,OAAO,GAAGC,KAAK,CAACD,OAAO;AAC3B,SAASE,WAAWA,CAACC,EAAE,EAAEC,IAAI,EAAE;EAC3B,OAAOJ,OAAO,CAACI,IAAI,CAAC,GAAGD,EAAE,CAACE,KAAK,CAAC,KAAK,CAAC,EAAEP,aAAa,CAAC,EAAE,EAAED,MAAM,CAACO,IAAI,CAAC,CAAC,CAAC,GAAGD,EAAE,CAACC,IAAI,CAAC;AACvF;AACA,OAAO,SAASE,gBAAgBA,CAACH,EAAE,EAAE;EACjC,OAAOJ,GAAG,CAAC,UAAUK,IAAI,EAAE;IAAE,OAAOF,WAAW,CAACC,EAAE,EAAEC,IAAI,CAAC;EAAE,CAAC,CAAC;AACjE;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function refCount() {\n return operate(function (source, subscriber) {\n var connection = null;\n source._refCount++;\n var refCounter = createOperatorSubscriber(subscriber, undefined, undefined, undefined, function () {\n if (!source || source._refCount <= 0 || 0 < --source._refCount) {\n connection = null;\n return;\n }\n var sharedConnection = source._connection;\n var conn = connection;\n connection = null;\n if (sharedConnection && (!conn || sharedConnection === conn)) {\n sharedConnection.unsubscribe();\n }\n subscriber.unsubscribe();\n });\n source.subscribe(refCounter);\n if (!refCounter.closed) {\n connection = source.connect();\n }\n });\n}\n//# sourceMappingURL=refCount.js.map","map":{"version":3,"names":["operate","createOperatorSubscriber","refCount","source","subscriber","connection","_refCount","refCounter","undefined","sharedConnection","_connection","conn","unsubscribe","subscribe","closed","connect"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/refCount.js"],"sourcesContent":["import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function refCount() {\n return operate(function (source, subscriber) {\n var connection = null;\n source._refCount++;\n var refCounter = createOperatorSubscriber(subscriber, undefined, undefined, undefined, function () {\n if (!source || source._refCount <= 0 || 0 < --source._refCount) {\n connection = null;\n return;\n }\n var sharedConnection = source._connection;\n var conn = connection;\n connection = null;\n if (sharedConnection && (!conn || sharedConnection === conn)) {\n sharedConnection.unsubscribe();\n }\n subscriber.unsubscribe();\n });\n source.subscribe(refCounter);\n if (!refCounter.closed) {\n connection = source.connect();\n }\n });\n}\n//# sourceMappingURL=refCount.js.map"],"mappings":"AAAA,SAASA,OAAO,QAAQ,cAAc;AACtC,SAASC,wBAAwB,QAAQ,sBAAsB;AAC/D,OAAO,SAASC,QAAQA,CAAA,EAAG;EACvB,OAAOF,OAAO,CAAC,UAAUG,MAAM,EAAEC,UAAU,EAAE;IACzC,IAAIC,UAAU,GAAG,IAAI;IACrBF,MAAM,CAACG,SAAS,EAAE;IAClB,IAAIC,UAAU,GAAGN,wBAAwB,CAACG,UAAU,EAAEI,SAAS,EAAEA,SAAS,EAAEA,SAAS,EAAE,YAAY;MAC/F,IAAI,CAACL,MAAM,IAAIA,MAAM,CAACG,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAEH,MAAM,CAACG,SAAS,EAAE;QAC5DD,UAAU,GAAG,IAAI;QACjB;MACJ;MACA,IAAII,gBAAgB,GAAGN,MAAM,CAACO,WAAW;MACzC,IAAIC,IAAI,GAAGN,UAAU;MACrBA,UAAU,GAAG,IAAI;MACjB,IAAII,gBAAgB,KAAK,CAACE,IAAI,IAAIF,gBAAgB,KAAKE,IAAI,CAAC,EAAE;QAC1DF,gBAAgB,CAACG,WAAW,CAAC,CAAC;MAClC;MACAR,UAAU,CAACQ,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IACFT,MAAM,CAACU,SAAS,CAACN,UAAU,CAAC;IAC5B,IAAI,CAACA,UAAU,CAACO,MAAM,EAAE;MACpBT,UAAU,GAAGF,MAAM,CAACY,OAAO,CAAC,CAAC;IACjC;EACJ,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"export * from '@mdx-js/react';","map":{"version":3,"names":[],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/@storybook/addon-docs/dist/shims/mdx-react-shim.mjs"],"sourcesContent":["export * from '@mdx-js/react';\n"],"mappings":"AAAA,cAAc,eAAe","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nexport function debounce(durationSelector) {\n return operate(function (source, subscriber) {\n var hasValue = false;\n var lastValue = null;\n var durationSubscriber = null;\n var emit = function () {\n durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n durationSubscriber = null;\n if (hasValue) {\n hasValue = false;\n var value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n };\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n hasValue = true;\n lastValue = value;\n durationSubscriber = createOperatorSubscriber(subscriber, emit, noop);\n innerFrom(durationSelector(value)).subscribe(durationSubscriber);\n }, function () {\n emit();\n subscriber.complete();\n }, undefined, function () {\n lastValue = durationSubscriber = null;\n }));\n });\n}\n//# sourceMappingURL=debounce.js.map","map":{"version":3,"names":["operate","noop","createOperatorSubscriber","innerFrom","debounce","durationSelector","source","subscriber","hasValue","lastValue","durationSubscriber","emit","unsubscribe","value","next","subscribe","complete","undefined"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/debounce.js"],"sourcesContent":["import { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nexport function debounce(durationSelector) {\n return operate(function (source, subscriber) {\n var hasValue = false;\n var lastValue = null;\n var durationSubscriber = null;\n var emit = function () {\n durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n durationSubscriber = null;\n if (hasValue) {\n hasValue = false;\n var value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n };\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n hasValue = true;\n lastValue = value;\n durationSubscriber = createOperatorSubscriber(subscriber, emit, noop);\n innerFrom(durationSelector(value)).subscribe(durationSubscriber);\n }, function () {\n emit();\n subscriber.complete();\n }, undefined, function () {\n lastValue = durationSubscriber = null;\n }));\n });\n}\n//# sourceMappingURL=debounce.js.map"],"mappings":"AAAA,SAASA,OAAO,QAAQ,cAAc;AACtC,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,wBAAwB,QAAQ,sBAAsB;AAC/D,SAASC,SAAS,QAAQ,yBAAyB;AACnD,OAAO,SAASC,QAAQA,CAACC,gBAAgB,EAAE;EACvC,OAAOL,OAAO,CAAC,UAAUM,MAAM,EAAEC,UAAU,EAAE;IACzC,IAAIC,QAAQ,GAAG,KAAK;IACpB,IAAIC,SAAS,GAAG,IAAI;IACpB,IAAIC,kBAAkB,GAAG,IAAI;IAC7B,IAAIC,IAAI,GAAG,SAAAA,CAAA,EAAY;MACnBD,kBAAkB,KAAK,IAAI,IAAIA,kBAAkB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,kBAAkB,CAACE,WAAW,CAAC,CAAC;MACxGF,kBAAkB,GAAG,IAAI;MACzB,IAAIF,QAAQ,EAAE;QACVA,QAAQ,GAAG,KAAK;QAChB,IAAIK,KAAK,GAAGJ,SAAS;QACrBA,SAAS,GAAG,IAAI;QAChBF,UAAU,CAACO,IAAI,CAACD,KAAK,CAAC;MAC1B;IACJ,CAAC;IACDP,MAAM,CAACS,SAAS,CAACb,wBAAwB,CAACK,UAAU,EAAE,UAAUM,KAAK,EAAE;MACnEH,kBAAkB,KAAK,IAAI,IAAIA,kBAAkB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,kBAAkB,CAACE,WAAW,CAAC,CAAC;MACxGJ,QAAQ,GAAG,IAAI;MACfC,SAAS,GAAGI,KAAK;MACjBH,kBAAkB,GAAGR,wBAAwB,CAACK,UAAU,EAAEI,IAAI,EAAEV,IAAI,CAAC;MACrEE,SAAS,CAACE,gBAAgB,CAACQ,KAAK,CAAC,CAAC,CAACE,SAAS,CAACL,kBAAkB,CAAC;IACpE,CAAC,EAAE,YAAY;MACXC,IAAI,CAAC,CAAC;MACNJ,UAAU,CAACS,QAAQ,CAAC,CAAC;IACzB,CAAC,EAAEC,SAAS,EAAE,YAAY;MACtBR,SAAS,GAAGC,kBAAkB,GAAG,IAAI;IACzC,CAAC,CAAC,CAAC;EACP,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"export function isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n//# sourceMappingURL=isDate.js.map","map":{"version":3,"names":["isValidDate","value","Date","isNaN"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/util/isDate.js"],"sourcesContent":["export function isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n//# sourceMappingURL=isDate.js.map"],"mappings":"AAAA,OAAO,SAASA,WAAWA,CAACC,KAAK,EAAE;EAC/B,OAAOA,KAAK,YAAYC,IAAI,IAAI,CAACC,KAAK,CAACF,KAAK,CAAC;AACjD;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { combineLatest } from '../observable/combineLatest';\nimport { joinAllInternals } from './joinAllInternals';\nexport function combineLatestAll(project) {\n return joinAllInternals(combineLatest, project);\n}\n//# sourceMappingURL=combineLatestAll.js.map","map":{"version":3,"names":["combineLatest","joinAllInternals","combineLatestAll","project"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/combineLatestAll.js"],"sourcesContent":["import { combineLatest } from '../observable/combineLatest';\nimport { joinAllInternals } from './joinAllInternals';\nexport function combineLatestAll(project) {\n return joinAllInternals(combineLatest, project);\n}\n//# sourceMappingURL=combineLatestAll.js.map"],"mappings":"AAAA,SAASA,aAAa,QAAQ,6BAA6B;AAC3D,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,OAAO,SAASC,gBAAgBA,CAACC,OAAO,EAAE;EACtC,OAAOF,gBAAgB,CAACD,aAAa,EAAEG,OAAO,CAAC;AACnD;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nexport function mergeScan(accumulator, seed, concurrent) {\n if (concurrent === void 0) {\n concurrent = Infinity;\n }\n return operate(function (source, subscriber) {\n var state = seed;\n return mergeInternals(source, subscriber, function (value, index) {\n return accumulator(state, value, index);\n }, concurrent, function (value) {\n state = value;\n }, false, undefined, function () {\n return state = null;\n });\n });\n}\n//# sourceMappingURL=mergeScan.js.map","map":{"version":3,"names":["operate","mergeInternals","mergeScan","accumulator","seed","concurrent","Infinity","source","subscriber","state","value","index","undefined"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/operators/mergeScan.js"],"sourcesContent":["import { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nexport function mergeScan(accumulator, seed, concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n return operate(function (source, subscriber) {\n var state = seed;\n return mergeInternals(source, subscriber, function (value, index) { return accumulator(state, value, index); }, concurrent, function (value) {\n state = value;\n }, false, undefined, function () { return (state = null); });\n });\n}\n//# sourceMappingURL=mergeScan.js.map"],"mappings":"AAAA,SAASA,OAAO,QAAQ,cAAc;AACtC,SAASC,cAAc,QAAQ,kBAAkB;AACjD,OAAO,SAASC,SAASA,CAACC,WAAW,EAAEC,IAAI,EAAEC,UAAU,EAAE;EACrD,IAAIA,UAAU,KAAK,KAAK,CAAC,EAAE;IAAEA,UAAU,GAAGC,QAAQ;EAAE;EACpD,OAAON,OAAO,CAAC,UAAUO,MAAM,EAAEC,UAAU,EAAE;IACzC,IAAIC,KAAK,GAAGL,IAAI;IAChB,OAAOH,cAAc,CAACM,MAAM,EAAEC,UAAU,EAAE,UAAUE,KAAK,EAAEC,KAAK,EAAE;MAAE,OAAOR,WAAW,CAACM,KAAK,EAAEC,KAAK,EAAEC,KAAK,CAAC;IAAE,CAAC,EAAEN,UAAU,EAAE,UAAUK,KAAK,EAAE;MACzID,KAAK,GAAGC,KAAK;IACjB,CAAC,EAAE,KAAK,EAAEE,SAAS,EAAE,YAAY;MAAE,OAAQH,KAAK,GAAG,IAAI;IAAG,CAAC,CAAC;EAChE,CAAC,CAAC;AACN;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map","map":{"version":3,"names":["scheduled","innerFrom","from","input","scheduler"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/rxjs/dist/esm5/internal/observable/from.js"],"sourcesContent":["import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map"],"mappings":"AAAA,SAASA,SAAS,QAAQ,wBAAwB;AAClD,SAASC,SAAS,QAAQ,aAAa;AACvC,OAAO,SAASC,IAAIA,CAACC,KAAK,EAAEC,SAAS,EAAE;EACnC,OAAOA,SAAS,GAAGJ,SAAS,CAACG,KAAK,EAAEC,SAAS,CAAC,GAAGH,SAAS,CAACE,KAAK,CAAC;AACrE;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

View file

@ -1 +0,0 @@
{"ast":null,"code":"/**\n * @license Angular v20.1.4\n * (c) 2010-2025 Google LLC. https://angular.io/\n * License: MIT\n */\n\nfunction parseCookieValue(cookieStr, name) {\n name = encodeURIComponent(name);\n for (const cookie of cookieStr.split(';')) {\n const eqIndex = cookie.indexOf('=');\n const [cookieName, cookieValue] = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)];\n if (cookieName.trim() === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n return null;\n}\n\n/**\n * A wrapper around the `XMLHttpRequest` constructor.\n *\n * @publicApi\n */\nclass XhrFactory {}\nexport { XhrFactory, parseCookieValue };\n//# sourceMappingURL=xhr.mjs.map","map":{"version":3,"names":["parseCookieValue","cookieStr","name","encodeURIComponent","cookie","split","eqIndex","indexOf","cookieName","cookieValue","slice","trim","decodeURIComponent","XhrFactory"],"sources":["/home/poule/encrypted/stockage-syncable/www/development/html/ng-implementation/implem/node_modules/@angular/common/fesm2022/xhr.mjs"],"sourcesContent":["/**\n * @license Angular v20.1.4\n * (c) 2010-2025 Google LLC. https://angular.io/\n * License: MIT\n */\n\nfunction parseCookieValue(cookieStr, name) {\n name = encodeURIComponent(name);\n for (const cookie of cookieStr.split(';')) {\n const eqIndex = cookie.indexOf('=');\n const [cookieName, cookieValue] = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)];\n if (cookieName.trim() === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n return null;\n}\n\n/**\n * A wrapper around the `XMLHttpRequest` constructor.\n *\n * @publicApi\n */\nclass XhrFactory {\n}\n\nexport { XhrFactory, parseCookieValue };\n//# sourceMappingURL=xhr.mjs.map\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA,SAASA,gBAAgBA,CAACC,SAAS,EAAEC,IAAI,EAAE;EACvCA,IAAI,GAAGC,kBAAkB,CAACD,IAAI,CAAC;EAC/B,KAAK,MAAME,MAAM,IAAIH,SAAS,CAACI,KAAK,CAAC,GAAG,CAAC,EAAE;IACvC,MAAMC,OAAO,GAAGF,MAAM,CAACG,OAAO,CAAC,GAAG,CAAC;IACnC,MAAM,CAACC,UAAU,EAAEC,WAAW,CAAC,GAAGH,OAAO,IAAI,CAAC,CAAC,GAAG,CAACF,MAAM,EAAE,EAAE,CAAC,GAAG,CAACA,MAAM,CAACM,KAAK,CAAC,CAAC,EAAEJ,OAAO,CAAC,EAAEF,MAAM,CAACM,KAAK,CAACJ,OAAO,GAAG,CAAC,CAAC,CAAC;IACtH,IAAIE,UAAU,CAACG,IAAI,CAAC,CAAC,KAAKT,IAAI,EAAE;MAC5B,OAAOU,kBAAkB,CAACH,WAAW,CAAC;IAC1C;EACJ;EACA,OAAO,IAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAMI,UAAU,CAAC;AAGjB,SAASA,UAAU,EAAEb,gBAAgB;AACrC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}

Some files were not shown because too many files have changed in this diff Show more