Compare commits
3 commits
51b48fb3ba
...
34f233ab60
Author | SHA1 | Date | |
---|---|---|---|
![]() |
34f233ab60 | ||
![]() |
3b95c7871c | ||
![]() |
92cbbb1595 |
386 changed files with 12358 additions and 57214 deletions
17
blueprint/.editorconfig
Normal file
17
blueprint/.editorconfig
Normal 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
42
blueprint/.gitignore
vendored
Normal 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
|
|
@ -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
98
blueprint/angular.json
Normal 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
10031
blueprint/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
49
blueprint/package.json
Normal file
49
blueprint/package.json
Normal 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"
|
||||
}
|
||||
}
|
BIN
blueprint/public/favicon.ico
Normal file
BIN
blueprint/public/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
37
blueprint/scripts/link-sae-lib.sh
Executable file
37
blueprint/scripts/link-sae-lib.sh
Executable 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."
|
12
blueprint/src/app/app.config.ts
Normal file
12
blueprint/src/app/app.config.ts
Normal 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)
|
||||
]
|
||||
};
|
7
blueprint/src/app/app.html
Normal file
7
blueprint/src/app/app.html
Normal file
|
@ -0,0 +1,7 @@
|
|||
<app-main-nav></app-main-nav>
|
||||
<sae-feedback-button></sae-feedback-button>
|
||||
<main>
|
||||
|
||||
|
||||
<router-outlet/>
|
||||
</main>
|
20
blueprint/src/app/app.routes.ts
Normal file
20
blueprint/src/app/app.routes.ts
Normal 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
|
||||
},
|
||||
|
||||
];
|
25
blueprint/src/app/app.scss
Normal file
25
blueprint/src/app/app.scss
Normal 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;
|
||||
}
|
23
blueprint/src/app/app.spec.ts
Normal file
23
blueprint/src/app/app.spec.ts
Normal 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
13
blueprint/src/app/app.ts
Normal 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');
|
||||
}
|
37
blueprint/src/app/nav/main-nav/main-nav.html
Normal file
37
blueprint/src/app/nav/main-nav/main-nav.html
Normal 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>
|
0
blueprint/src/app/nav/main-nav/main-nav.scss
Normal file
0
blueprint/src/app/nav/main-nav/main-nav.scss
Normal file
23
blueprint/src/app/nav/main-nav/main-nav.spec.ts
Normal file
23
blueprint/src/app/nav/main-nav/main-nav.spec.ts
Normal 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();
|
||||
});
|
||||
});
|
21
blueprint/src/app/nav/main-nav/main-nav.ts
Normal file
21
blueprint/src/app/nav/main-nav/main-nav.ts
Normal 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() {
|
||||
|
||||
}
|
||||
}
|
5
blueprint/src/app/pages/home/home.html
Normal file
5
blueprint/src/app/pages/home/home.html
Normal file
|
@ -0,0 +1,5 @@
|
|||
<div id="home">
|
||||
|
||||
page d'accueil
|
||||
|
||||
</div>
|
0
blueprint/src/app/pages/home/home.scss
Normal file
0
blueprint/src/app/pages/home/home.scss
Normal file
23
blueprint/src/app/pages/home/home.spec.ts
Normal file
23
blueprint/src/app/pages/home/home.spec.ts
Normal 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();
|
||||
});
|
||||
});
|
16
blueprint/src/app/pages/home/home.ts
Normal file
16
blueprint/src/app/pages/home/home.ts
Normal 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 {
|
||||
|
||||
}
|
3
blueprint/src/app/pages/results/results.html
Normal file
3
blueprint/src/app/pages/results/results.html
Normal file
|
@ -0,0 +1,3 @@
|
|||
<div id="results">
|
||||
résultats
|
||||
</div>
|
0
blueprint/src/app/pages/results/results.scss
Normal file
0
blueprint/src/app/pages/results/results.scss
Normal file
23
blueprint/src/app/pages/results/results.spec.ts
Normal file
23
blueprint/src/app/pages/results/results.spec.ts
Normal 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();
|
||||
});
|
||||
});
|
11
blueprint/src/app/pages/results/results.ts
Normal file
11
blueprint/src/app/pages/results/results.ts
Normal 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
13
blueprint/src/index.html
Normal 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
6
blueprint/src/main.ts
Normal 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
13
blueprint/src/styles.scss
Normal 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';
|
||||
|
15
blueprint/tsconfig.app.json
Normal file
15
blueprint/tsconfig.app.json
Normal 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
40
blueprint/tsconfig.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
14
blueprint/tsconfig.spec.json
Normal file
14
blueprint/tsconfig.spec.json
Normal 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
89
devops/README.md
Normal 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 l’application Angular et ses `package.json`
|
||||
- `./streamlit/` contient l’application 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 l’application (`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 l’appli 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 d’environnement 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
418
devops/auth.md
Normal file
|
@ -0,0 +1,418 @@
|
|||
# Authentification Cognito pour webapps Angular
|
||||
|
||||
Ce guide décrit comment intégrer l’authentification 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 d’autres 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 d’entré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 d’auth):
|
||||
|
||||
```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 l’utilisateur vers l’app.
|
||||
|
||||
## 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 n’expose 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 l’heure système (skew de plus de 5 min peut invalider les tokens)
|
||||
- Évitez d’exposer 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 l’app
|
||||
- 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 d’environnement + Guard Angular
|
||||
|
||||
Nous supportons un mode où l’authentification Cognito est optionnelle selon une variable d’environnement, et une Guard Angular assure la redirection vers une page de login configurable.
|
||||
|
||||
### Variables d’environnement
|
||||
|
||||
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 d’Angular
|
||||
|
||||
Nous utilisons les fichiers `.env` d’Angular 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 l’outillage Angular, l’accès peut être `import.meta.env.NG_APP_...` au lieu de l’indexation par chaîne. Gardez le préfixe `NG_APP_` pour garantir l’exposition 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 l’app.
|
||||
- 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 l’app.
|
||||
|
||||
### Guard Angular (générique)
|
||||
|
||||
Exemple de Guard compatible avec Amplify ou angular-oauth2-oidc: elle vérifie `requireAuth`. Si l’auth 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 l’utiliser comme ci‑dessus.
|
||||
|
||||
### 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 l’implé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 l’espace protégé.
|
||||
|
31
devops/design-system-dockerfile.yml
Normal file
31
devops/design-system-dockerfile.yml
Normal 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
418
devops/design-system.md
Normal file
|
@ -0,0 +1,418 @@
|
|||
# Authentification Cognito pour webapps Angular
|
||||
|
||||
Ce guide décrit comment intégrer l’authentification 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 d’autres 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 d’entré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 d’auth):
|
||||
|
||||
```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 l’utilisateur vers l’app.
|
||||
|
||||
## 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 n’expose 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 l’heure système (skew de plus de 5 min peut invalider les tokens)
|
||||
- Évitez d’exposer 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 l’app
|
||||
- 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 d’environnement + Guard Angular
|
||||
|
||||
Nous supportons un mode où l’authentification Cognito est optionnelle selon une variable d’environnement, et une Guard Angular assure la redirection vers une page de login configurable.
|
||||
|
||||
### Variables d’environnement
|
||||
|
||||
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 d’Angular
|
||||
|
||||
Nous utilisons les fichiers `.env` d’Angular 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 l’outillage Angular, l’accès peut être `import.meta.env.NG_APP_...` au lieu de l’indexation par chaîne. Gardez le préfixe `NG_APP_` pour garantir l’exposition 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 l’app.
|
||||
- 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 l’app.
|
||||
|
||||
### Guard Angular (générique)
|
||||
|
||||
Exemple de Guard compatible avec Amplify ou angular-oauth2-oidc: elle vérifie `requireAuth`. Si l’auth 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 l’utiliser comme ci‑dessus.
|
||||
|
||||
### 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 l’implé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 l’espace protégé.
|
||||
|
21
devops/docker-compose.yml
Normal file
21
devops/docker-compose.yml
Normal 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
|
||||
|
30
devops/frontend-dockerfile.yml
Normal file
30
devops/frontend-dockerfile.yml
Normal 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
140
devops/gitlab-ci.yml
Normal 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
|
||||
|
20
devops/streamlit-dockerfile.yml
Normal file
20
devops/streamlit-dockerfile.yml
Normal 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"]
|
238
devops/streamlit-to-swagger.py
Normal file
238
devops/streamlit-to-swagger.py
Normal 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())
|
||||
|
|
@ -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."
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
<app-main-nav></app-main-nav>
|
||||
<sae-feedback-button></sae-feedback-button>
|
||||
<main>
|
||||
|
||||
|
||||
<router-outlet/>
|
||||
</main>
|
|
@ -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;
|
||||
}
|
|
@ -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'
|
||||
})
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
@ -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
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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
|
@ -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":[]}
|
|
@ -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
|
@ -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":[]}
|
|
@ -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
|
@ -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":[]}
|
|
@ -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
|
@ -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":[]}
|
|
@ -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
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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
|
@ -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
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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
|
@ -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":[]}
|
|
@ -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":[]}
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue