renommage de lib, rendre buildable
This commit is contained in:
parent
1706c64713
commit
a89007a81b
9896 changed files with 478996 additions and 496 deletions
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
22
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
22
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
|
@ -0,0 +1,22 @@
|
|||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="HtmlUnknownTag" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="myValues">
|
||||
<value>
|
||||
<list size="7">
|
||||
<item index="0" class="java.lang.String" itemvalue="nobr" />
|
||||
<item index="1" class="java.lang.String" itemvalue="noembed" />
|
||||
<item index="2" class="java.lang.String" itemvalue="comment" />
|
||||
<item index="3" class="java.lang.String" itemvalue="noscript" />
|
||||
<item index="4" class="java.lang.String" itemvalue="embed" />
|
||||
<item index="5" class="java.lang.String" itemvalue="script" />
|
||||
<item index="6" class="java.lang.String" itemvalue="Placeholder" />
|
||||
</list>
|
||||
</value>
|
||||
</option>
|
||||
<option name="myCustomValuesEnabled" value="true" />
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/ng-implementation.iml" filepath="$PROJECT_DIR$/.idea/ng-implementation.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
8
.idea/ng-implementation.iml
generated
Normal file
8
.idea/ng-implementation.iml
generated
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
19
.idea/php.xml
generated
Normal file
19
.idea/php.xml
generated
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="MessDetectorOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PHPCSFixerOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PHPCodeSnifferOptionsConfiguration">
|
||||
<option name="highlightLevel" value="WARNING" />
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PhpStanOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PsalmOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
|
@ -2,3 +2,5 @@
|
|||
initialiser une app Angular latest,
|
||||
importer le dépot ng-demo
|
||||
et utiliser ses composants.
|
||||
|
||||
Faire un store redux pour les applications.
|
|
@ -1,37 +0,0 @@
|
|||
<div id="main_page">
|
||||
<app-top-navigation></app-top-navigation>
|
||||
<main>
|
||||
|
||||
<h2 class="title">
|
||||
CSC Solution Matcher helps match client questions with similar previous cases using
|
||||
<span class="magic-text">
|
||||
|
||||
AI technology
|
||||
<i class="ri-sparkling-fill"></i>
|
||||
</span>
|
||||
</h2>
|
||||
<!-- traduction de requête-->
|
||||
<div id="translation_request">
|
||||
|
||||
<div class="helper">
|
||||
Original question
|
||||
<i class="ri-arrow-right-line"></i>
|
||||
</div>
|
||||
|
||||
<lib-translate-texts></lib-translate-texts>
|
||||
</div>
|
||||
<!-- analyse de question-->
|
||||
<div id="question_alaysis">
|
||||
<!--filters-->
|
||||
<!-- advanced filters-->
|
||||
<lib-filters-group></lib-filters-group>
|
||||
</div>
|
||||
</main>
|
||||
<footer>
|
||||
|
||||
<!-- bottom nav -->
|
||||
<!-- bottom fixed bar -->
|
||||
<!-- search button-->
|
||||
<app-bottom-navigation></app-bottom-navigation>
|
||||
</footer>
|
||||
</div>
|
|
@ -1,21 +0,0 @@
|
|||
import { Component } from '@angular/core';
|
||||
import {TopNavigation} from '../../shared/navigation/top-navigation/top-navigation';
|
||||
import {TranslateTexts} from '../../../../../my-workspace/projects/my-lib/translate-texts/translate-texts';
|
||||
import {FiltersGroup} from '../../../../../my-workspace/projects/my-lib/filters/filters-group/filters-group';
|
||||
import {BottomNavigation} from '../../shared/navigation/bottom-navigation/bottom-navigation';
|
||||
|
||||
|
||||
@Component({
|
||||
selector: 'app-main',
|
||||
imports: [
|
||||
TopNavigation,
|
||||
TranslateTexts,
|
||||
FiltersGroup,
|
||||
BottomNavigation
|
||||
],
|
||||
templateUrl: './main.html',
|
||||
styleUrl: './main.scss'
|
||||
})
|
||||
export class Main {
|
||||
|
||||
}
|
|
@ -1,96 +0,0 @@
|
|||
<div class="similar-cases">
|
||||
|
||||
<header>
|
||||
<div class="row">
|
||||
|
||||
<button class="button">
|
||||
toggle
|
||||
</button>
|
||||
<div class="title-box">
|
||||
Work stoppage case for CFM56-7B engine (ESN: 802379)...
|
||||
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<button class="button">
|
||||
new question
|
||||
</button>
|
||||
<button class="button">
|
||||
Search similar cases
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row filters-row">
|
||||
<lib-filters-group></lib-filters-group>
|
||||
</div>
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<div class="row bot-talks">
|
||||
<lib-bot-talks></lib-bot-talks>
|
||||
|
||||
</div>
|
||||
<div class="tabs-container">
|
||||
<div class="tabs-selector">
|
||||
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<div class="tab-button is-active">
|
||||
Similar cases
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="tab-button is-active">
|
||||
Technical manual
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tabs-body">
|
||||
|
||||
|
||||
@if (displayedTab == 'similar-cases') {
|
||||
<div id="similar_cases_tab">
|
||||
<div class="top-bar">
|
||||
<!-- <input type="text" class="search-input" [(ngModel)]="searchInput">-->
|
||||
<div class="chips-container">
|
||||
<button class="button chips">
|
||||
|
||||
DICA
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="columns">
|
||||
<div class="found-infos column">
|
||||
24 cases found, 3 cases suggested by AI
|
||||
</div>
|
||||
<div class="toggle-ai-suggestion column">
|
||||
AI suggestions
|
||||
<!-- applied-->
|
||||
<!-- disabled-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row cases-results">
|
||||
|
||||
<!-- boucle des résultats-->
|
||||
<app-case-result></app-case-result>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
} @else {
|
||||
|
||||
<div id="technical_manuals_tab">
|
||||
<lib-bot-talks></lib-bot-talks>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<footer>
|
||||
<app-bottom-navigation></app-bottom-navigation>
|
||||
</footer>
|
||||
</div>
|
|
@ -1,25 +0,0 @@
|
|||
import { Component } from '@angular/core';
|
||||
import {FiltersGroup} from '../../../../../my-workspace/projects/my-lib/filters/filters-group/filters-group';
|
||||
import {BotTalks} from '../../../../../my-workspace/projects/my-lib/chatbot/bot-talks/bot-talks';
|
||||
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
|
||||
import {CaseResult} from './case-result/case-result';
|
||||
import {BottomNavigation} from '../../shared/navigation/bottom-navigation/bottom-navigation';
|
||||
|
||||
@Component({
|
||||
selector: 'app-similar-cases',
|
||||
imports: [
|
||||
FiltersGroup,
|
||||
BotTalks,
|
||||
// ReactiveFormsModule,
|
||||
CaseResult,
|
||||
BottomNavigation,
|
||||
// FormsModule
|
||||
],
|
||||
templateUrl: './similar-cases.html',
|
||||
styleUrl: './similar-cases.scss'
|
||||
})
|
||||
export class SimilarCases {
|
||||
public searchInput: string = '';
|
||||
public displayedTab: 'similar-cases' | 'technical-manual' = 'similar-cases';
|
||||
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
// from global to more precise
|
||||
// sass lang utils
|
||||
@use "sass:color";
|
||||
@use "app/styles/app.scss";
|
|
@ -1,59 +1,3 @@
|
|||
# MyWorkspace
|
||||
# SAE Design system
|
||||
|
||||
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.1.4.
|
||||
|
||||
## Development server
|
||||
|
||||
To start a local development server, run:
|
||||
|
||||
```bash
|
||||
ng serve
|
||||
```
|
||||
|
||||
Once the server is running, open your browser and navigate to `http://localhost:4200/`. The application will automatically reload whenever you modify any of the source files.
|
||||
|
||||
## Code scaffolding
|
||||
|
||||
Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
|
||||
|
||||
```bash
|
||||
ng generate component component-name
|
||||
```
|
||||
|
||||
For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
|
||||
|
||||
```bash
|
||||
ng generate --help
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
To build the project run:
|
||||
|
||||
```bash
|
||||
ng build
|
||||
```
|
||||
|
||||
This will compile your project and store the build artifacts in the `dist/` directory. By default, the production build optimizes your application for performance and speed.
|
||||
|
||||
## Running unit tests
|
||||
|
||||
To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
|
||||
|
||||
```bash
|
||||
ng test
|
||||
```
|
||||
|
||||
## Running end-to-end tests
|
||||
|
||||
For end-to-end (e2e) testing, run:
|
||||
|
||||
```bash
|
||||
ng e2e
|
||||
```
|
||||
|
||||
Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
|
||||
|
||||
## Additional Resources
|
||||
|
||||
For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
||||
Le design system Aero utilisé pour les chatbots de la maison.
|
||||
|
|
|
@ -3,20 +3,20 @@
|
|||
"version": 1,
|
||||
"newProjectRoot": "projects",
|
||||
"projects": {
|
||||
"my-lib": {
|
||||
"sae-lib": {
|
||||
"projectType": "library",
|
||||
"root": "projects/my-lib",
|
||||
"sourceRoot": "projects/my-lib/src",
|
||||
"prefix": "lib",
|
||||
"root": "projects/sae-lib",
|
||||
"sourceRoot": "projects/sae-lib/src",
|
||||
"prefix": "sae",
|
||||
"architect": {
|
||||
"build": {
|
||||
"builder": "@angular/build:ng-packagr",
|
||||
"configurations": {
|
||||
"production": {
|
||||
"tsConfig": "projects/my-lib/tsconfig.lib.prod.json"
|
||||
"tsConfig": "projects/sae-lib/tsconfig.lib.prod.json"
|
||||
},
|
||||
"development": {
|
||||
"tsConfig": "projects/my-lib/tsconfig.lib.json"
|
||||
"tsConfig": "projects/sae-lib/tsconfig.lib.json"
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": "production"
|
||||
|
@ -24,17 +24,17 @@
|
|||
"test": {
|
||||
"builder": "@angular/build:karma",
|
||||
"options": {
|
||||
"tsConfig": "projects/my-lib/tsconfig.spec.json"
|
||||
"tsConfig": "projects/sae-lib/tsconfig.spec.json"
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"builder": "@angular-eslint/builder:lint",
|
||||
"options": {
|
||||
"lintFilePatterns": [
|
||||
"projects/my-lib/**/*.ts",
|
||||
"projects/my-lib/**/*.html"
|
||||
"projects/sae-lib/**/*.ts",
|
||||
"projects/sae-lib/**/*.html"
|
||||
],
|
||||
"eslintConfig": "projects/my-lib/eslint.config.js"
|
||||
"eslintConfig": "projects/sae-lib/eslint.config.js"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,63 +0,0 @@
|
|||
# MyLib
|
||||
|
||||
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.1.0.
|
||||
|
||||
## Code scaffolding
|
||||
|
||||
Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
|
||||
|
||||
```bash
|
||||
ng generate component component-name
|
||||
```
|
||||
|
||||
For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
|
||||
|
||||
```bash
|
||||
ng generate --help
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
To build the library, run:
|
||||
|
||||
```bash
|
||||
ng build my-lib
|
||||
```
|
||||
|
||||
This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
|
||||
|
||||
### Publishing the Library
|
||||
|
||||
Once the project is built, you can publish your library by following these steps:
|
||||
|
||||
1. Navigate to the `dist` directory:
|
||||
```bash
|
||||
cd dist/my-lib
|
||||
```
|
||||
|
||||
2. Run the `npm publish` command to publish your library to the npm registry:
|
||||
```bash
|
||||
npm publish
|
||||
```
|
||||
|
||||
## Running unit tests
|
||||
|
||||
To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
|
||||
|
||||
```bash
|
||||
ng test
|
||||
```
|
||||
|
||||
## Running end-to-end tests
|
||||
|
||||
For end-to-end (e2e) testing, run:
|
||||
|
||||
```bash
|
||||
ng e2e
|
||||
```
|
||||
|
||||
Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
|
||||
|
||||
## Additional Resources
|
||||
|
||||
For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
|
@ -1,17 +0,0 @@
|
|||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'lib-bot-talks',
|
||||
imports: [],
|
||||
templateUrl: './bot-talks.html',
|
||||
styleUrl: './bot-talks.css'
|
||||
})
|
||||
export class BotTalks {
|
||||
public message = 'I found useful document(s) which can help to answer to this question ! Check if these documents are applied to similar cases';
|
||||
public links: any = [
|
||||
{
|
||||
title: 'Refusal notice :',
|
||||
label: 'DMP-00051341: Avis de refus',
|
||||
url: 'https://www.cipherbliss.com/fake-link',
|
||||
}]
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
import {Component, Input, OnInit} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'lib-color-display',
|
||||
standalone: true,
|
||||
imports: [
|
||||
CommonModule
|
||||
],
|
||||
templateUrl: './color-display.html',
|
||||
styleUrl: './color-display.scss'
|
||||
})
|
||||
export class ColorDisplay implements OnInit {
|
||||
@Input() public hexaCode: string = '#cc0000';
|
||||
@Input() public name: string = 'color name';
|
||||
@Input() public backgroundColor: string = '';
|
||||
|
||||
ngOnInit() {
|
||||
if (this.hexaCode) {
|
||||
this.backgroundColor = this.hexaCode
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'lib-essai',
|
||||
imports: [],
|
||||
templateUrl: './essai.html',
|
||||
styleUrl: './essai.css'
|
||||
})
|
||||
export class Essai {
|
||||
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'lib-filters-group',
|
||||
imports: [],
|
||||
templateUrl: './filters-group.html',
|
||||
styleUrl: './filters-group.css'
|
||||
})
|
||||
export class FiltersGroup {
|
||||
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
|
||||
"dest": "../../dist/my-lib",
|
||||
"lib": {
|
||||
"entryFile": "src/public-api.ts"
|
||||
}
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"name": "my-lib",
|
||||
"version": "0.0.1",
|
||||
"peerDependencies": {
|
||||
"@angular/common": "^20.1.0",
|
||||
"@angular/core": "^20.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
"sideEffects": false
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { MyLib } from './my-lib';
|
||||
|
||||
describe('MyLib', () => {
|
||||
let component: MyLib;
|
||||
let fixture: ComponentFixture<MyLib>;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [MyLib]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(MyLib);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,15 +0,0 @@
|
|||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'lib-my-lib',
|
||||
imports: [],
|
||||
template: `
|
||||
<p>
|
||||
my-lib works!
|
||||
</p>
|
||||
`,
|
||||
styles: ``
|
||||
})
|
||||
export class MyLib {
|
||||
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
/*
|
||||
* Public API Surface of my-lib
|
||||
*/
|
||||
|
||||
export * from './lib/my-lib';
|
|
@ -1,16 +0,0 @@
|
|||
<div class="translate-texts">
|
||||
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
|
||||
<!-- delete button from_text-->
|
||||
<button class="delete-button button" (click)="emptyText('fromText')">x</button>
|
||||
<textarea name="from_text" id="from_text" cols="30" rows="10" [(ngModel)]="fromText"></textarea>
|
||||
</div>
|
||||
<div class="column">
|
||||
|
||||
<button class="delete-button button" (click)="emptyText('toText')">x</button>
|
||||
<textarea name="from_text" id="from_text" cols="30" rows="10" [(ngModel)]="toText"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,19 +0,0 @@
|
|||
import { Component } from '@angular/core';
|
||||
import {FormsModule} from '@angular/forms';
|
||||
|
||||
@Component({
|
||||
selector: 'lib-translate-texts',
|
||||
imports: [
|
||||
FormsModule
|
||||
],
|
||||
templateUrl: './translate-texts.html',
|
||||
styleUrl: './translate-texts.css'
|
||||
})
|
||||
export class TranslateTexts {
|
||||
public fromText : string = ''
|
||||
public toText : 'fromText' | 'toText' | '' = ''
|
||||
|
||||
emptyText(someText: 'fromText' | 'toText'){
|
||||
this[someText] = '';
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
/* 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/lib",
|
||||
"declaration": true,
|
||||
"declarationMap": true,
|
||||
"inlineSources": true,
|
||||
"types": []
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts"
|
||||
],
|
||||
"exclude": [
|
||||
"**/*.spec.ts"
|
||||
]
|
||||
}
|
63
my-workspace/projects/sae-lib/README.md
Normal file
63
my-workspace/projects/sae-lib/README.md
Normal file
|
@ -0,0 +1,63 @@
|
|||
# SaeLib
|
||||
|
||||
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.1.0.
|
||||
|
||||
## Code scaffolding
|
||||
|
||||
Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
|
||||
|
||||
```bash
|
||||
ng generate component component-name
|
||||
```
|
||||
|
||||
For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
|
||||
|
||||
```bash
|
||||
ng generate --help
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
To build the library, run:
|
||||
|
||||
```bash
|
||||
ng build sae-lib
|
||||
```
|
||||
|
||||
This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
|
||||
|
||||
### Publishing the Library
|
||||
|
||||
Once the project is built, you can publish your library by following these steps:
|
||||
|
||||
1. Navigate to the `dist` directory:
|
||||
```bash
|
||||
cd dist/sae-lib
|
||||
```
|
||||
|
||||
2. Run the `npm publish` command to publish your library to the npm registry:
|
||||
```bash
|
||||
npm publish
|
||||
```
|
||||
|
||||
## Running unit tests
|
||||
|
||||
To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
|
||||
|
||||
```bash
|
||||
ng test
|
||||
```
|
||||
|
||||
## Running end-to-end tests
|
||||
|
||||
For end-to-end (e2e) testing, run:
|
||||
|
||||
```bash
|
||||
ng e2e
|
||||
```
|
||||
|
||||
Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
|
||||
|
||||
## Additional Resources
|
||||
|
||||
For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
17
my-workspace/projects/sae-lib/chatbot/bot-talks/bot-talks.ts
Normal file
17
my-workspace/projects/sae-lib/chatbot/bot-talks/bot-talks.ts
Normal file
|
@ -0,0 +1,17 @@
|
|||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'sae-bot-talks',
|
||||
imports: [],
|
||||
templateUrl: './bot-talks.html',
|
||||
styleUrl: './bot-talks.css'
|
||||
})
|
||||
export class BotTalks {
|
||||
public message = 'I found useful document(s) which can help to answer to this question ! Check if these documents are applied to similar cases';
|
||||
public links: any = [
|
||||
{
|
||||
title: 'Refusal notice :',
|
||||
label: 'DMP-00051341: Avis de refus',
|
||||
url: 'https://www.cipherbliss.com/fake-link',
|
||||
}]
|
||||
}
|
23
my-workspace/projects/sae-lib/color-display/color-display.ts
Normal file
23
my-workspace/projects/sae-lib/color-display/color-display.ts
Normal file
|
@ -0,0 +1,23 @@
|
|||
import {Component, Input, OnInit} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'sae-color-display',
|
||||
standalone: true,
|
||||
imports: [
|
||||
CommonModule
|
||||
],
|
||||
templateUrl: './color-display.html',
|
||||
styleUrl: './color-display.scss'
|
||||
})
|
||||
export class ColorDisplay implements OnInit {
|
||||
@Input() public hexaCode: string = '#cc0000';
|
||||
@Input() public name: string = 'color name';
|
||||
@Input() public backgroundColor: string = '';
|
||||
|
||||
ngOnInit() {
|
||||
if (this.hexaCode) {
|
||||
this.backgroundColor = this.hexaCode
|
||||
}
|
||||
}
|
||||
}
|
11
my-workspace/projects/sae-lib/essai/essai.ts
Normal file
11
my-workspace/projects/sae-lib/essai/essai.ts
Normal file
|
@ -0,0 +1,11 @@
|
|||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'sae-essai',
|
||||
imports: [],
|
||||
templateUrl: './essai.html',
|
||||
styleUrl: './essai.css'
|
||||
})
|
||||
export class Essai {
|
||||
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'sae-filters-group',
|
||||
imports: [],
|
||||
templateUrl: './filters-group.html',
|
||||
styleUrl: './filters-group.css'
|
||||
})
|
||||
export class FiltersGroup {
|
||||
|
||||
}
|
7
my-workspace/projects/sae-lib/ng-package.json
Normal file
7
my-workspace/projects/sae-lib/ng-package.json
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
|
||||
"dest": "../../dist/sae-lib",
|
||||
"lib": {
|
||||
"entryFile": "src/public-api.ts"
|
||||
}
|
||||
}
|
176
my-workspace/projects/sae-lib/node_modules/.package-lock.json
generated
vendored
Normal file
176
my-workspace/projects/sae-lib/node_modules/.package-lock.json
generated
vendored
Normal file
|
@ -0,0 +1,176 @@
|
|||
{
|
||||
"name": "my-lib",
|
||||
"version": "0.0.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"node_modules/@angular/common": {
|
||||
"version": "20.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@angular/common/-/common-20.1.6.tgz",
|
||||
"integrity": "sha512-VwV6u5y5NQg5u+Z5A50MCJNpxseny9Rv+csZe9zckH0ylqy9tLowbG6L7jrts36Ze2lwqRag0b+wB0TgrvaT0w==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/core": "20.1.6",
|
||||
"rxjs": "^6.5.3 || ^7.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/core": {
|
||||
"version": "20.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@angular/core/-/core-20.1.6.tgz",
|
||||
"integrity": "sha512-Nz62f9FNcvjOxUivi50YtmEfSdrS7xqpPDoN/jwLkT5VmFfIUFF77sabTF5KTWHCDbp420e2UON6uEblfiRfaw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/compiler": "20.1.6",
|
||||
"rxjs": "^6.5.3 || ^7.4.0",
|
||||
"zone.js": "~0.15.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@angular/compiler": {
|
||||
"optional": true
|
||||
},
|
||||
"zone.js": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/forms": {
|
||||
"version": "20.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.1.6.tgz",
|
||||
"integrity": "sha512-9gLaiX8c2qOCu4jVukATCnSAANJuLKWGLZpZyLdJGHpZWM7ECf6hpsDKOq+AytqqYKWqZvjcI8AujUroU6aUtg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/common": "20.1.6",
|
||||
"@angular/core": "20.1.6",
|
||||
"@angular/platform-browser": "20.1.6",
|
||||
"rxjs": "^6.5.3 || ^7.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/platform-browser": {
|
||||
"version": "20.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.1.6.tgz",
|
||||
"integrity": "sha512-0FmqP1+JdzrT74JZLbf5IpC8nn0AeJ3Mk1IlXRVcK5olyh3SiEZIGBw89mYwmgP3gQqnjoakooTMA3wwy4Evxw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/animations": "20.1.6",
|
||||
"@angular/common": "20.1.6",
|
||||
"@angular/core": "20.1.6"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@angular/animations": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/core": {
|
||||
"version": "1.7.3",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz",
|
||||
"integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@floating-ui/utils": "^0.2.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/dom": {
|
||||
"version": "1.7.3",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.3.tgz",
|
||||
"integrity": "sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@floating-ui/core": "^1.7.3",
|
||||
"@floating-ui/utils": "^0.2.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/utils": {
|
||||
"version": "0.2.10",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
|
||||
"integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@scarf/scarf": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz",
|
||||
"integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/bulma": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/bulma/-/bulma-1.0.4.tgz",
|
||||
"integrity": "sha512-Ffb6YGXDiZYX3cqvSbHWqQ8+LkX6tVoTcZuVB3lm93sbAVXlO0D6QlOTMnV6g18gILpAXqkG2z9hf9z4hCjz2g==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/deepmerge-ts": {
|
||||
"version": "7.1.5",
|
||||
"resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz",
|
||||
"integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==",
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/remixicon": {
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/remixicon/-/remixicon-4.6.0.tgz",
|
||||
"integrity": "sha512-bKM5odjqE1yzVxEZGJE7F79WHhNrJFIKHXR+GG+P1IWXn8AnJZhl8SbIRDJsNAvIqx4VPkNwjuHfc42tutMDpQ==",
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/rxjs": {
|
||||
"version": "7.8.2",
|
||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
|
||||
"integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"tslib": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/shepherd.js": {
|
||||
"version": "14.5.1",
|
||||
"resolved": "https://registry.npmjs.org/shepherd.js/-/shepherd.js-14.5.1.tgz",
|
||||
"integrity": "sha512-VuvPvLG1QjNOLP7AIm2HGyfmxEIz8QdskvWOHwUcxLDibYWjLRBmCWd8LSL5FlwhBW7D/GU+3gNVC/ASxAWdxg==",
|
||||
"license": "AGPL-3.0",
|
||||
"dependencies": {
|
||||
"@floating-ui/dom": "^1.7.0",
|
||||
"@scarf/scarf": "^1.4.0",
|
||||
"deepmerge-ts": "^7.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "18.* || >= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
||||
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
||||
"license": "0BSD"
|
||||
}
|
||||
}
|
||||
}
|
21
my-workspace/projects/sae-lib/node_modules/@angular/common/LICENSE
generated
vendored
Executable file
21
my-workspace/projects/sae-lib/node_modules/@angular/common/LICENSE
generated
vendored
Executable file
|
@ -0,0 +1,21 @@
|
|||
The MIT License
|
||||
|
||||
Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
8
my-workspace/projects/sae-lib/node_modules/@angular/common/README.md
generated
vendored
Executable file
8
my-workspace/projects/sae-lib/node_modules/@angular/common/README.md
generated
vendored
Executable file
|
@ -0,0 +1,8 @@
|
|||
Angular
|
||||
=======
|
||||
|
||||
The sources for this package are in the main [Angular](https://github.com/angular/angular) repo. Please file issues and pull requests against that repo.
|
||||
|
||||
Usage information and reference details can be found in [Angular documentation](https://angular.dev/overview).
|
||||
|
||||
License: MIT
|
1968
my-workspace/projects/sae-lib/node_modules/@angular/common/common_module.d.d.ts
generated
vendored
Executable file
1968
my-workspace/projects/sae-lib/node_modules/@angular/common/common_module.d.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load diff
2047
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/common.mjs
generated
vendored
Executable file
2047
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/common.mjs
generated
vendored
Executable file
File diff suppressed because it is too large
Load diff
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/common.mjs.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/common.mjs.map
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
4659
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/common_module.mjs
generated
vendored
Executable file
4659
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/common_module.mjs
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/common_module.mjs.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/common_module.mjs.map
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
422
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/http.mjs
generated
vendored
Executable file
422
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/http.mjs
generated
vendored
Executable file
|
@ -0,0 +1,422 @@
|
|||
/**
|
||||
* @license Angular v20.1.6
|
||||
* (c) 2010-2025 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
import { HttpHeaders, HttpParams, HttpRequest, HttpEventType, HttpErrorResponse, HttpClient, HTTP_ROOT_INTERCEPTOR_FNS, HttpResponse } from './module.mjs';
|
||||
export { FetchBackend, HTTP_INTERCEPTORS, HttpBackend, HttpClientJsonpModule, HttpClientModule, HttpClientXsrfModule, HttpContext, HttpContextToken, HttpFeatureKind, HttpHandler, HttpHeaderResponse, HttpResponseBase, HttpStatusCode, HttpUrlEncodingCodec, HttpXhrBackend, HttpXsrfTokenExtractor, JsonpClientBackend, JsonpInterceptor, provideHttpClient, withFetch, withInterceptors, withInterceptorsFromDi, withJsonpSupport, withNoXsrfProtection, withRequestsMadeViaParent, withXsrfConfiguration, HttpInterceptorHandler as ɵHttpInterceptingHandler, HttpInterceptorHandler as ɵHttpInterceptorHandler, REQUESTS_CONTRIBUTE_TO_STABILITY as ɵREQUESTS_CONTRIBUTE_TO_STABILITY } from './module.mjs';
|
||||
import { assertInInjectionContext, inject, Injector, ɵResourceImpl as _ResourceImpl, linkedSignal, computed, signal, ɵencapsulateResourceError as _encapsulateResourceError, ɵRuntimeError as _RuntimeError, InjectionToken, ɵperformanceMarkFeature as _performanceMarkFeature, APP_BOOTSTRAP_LISTENER, ApplicationRef, TransferState, makeStateKey, ɵtruncateMiddle as _truncateMiddle, ɵformatRuntimeError as _formatRuntimeError } from '@angular/core';
|
||||
import { of } from 'rxjs';
|
||||
import { tap } from 'rxjs/operators';
|
||||
import './xhr.mjs';
|
||||
|
||||
/**
|
||||
* `httpResource` makes a reactive HTTP request and exposes the request status and response value as
|
||||
* a `WritableResource`. By default, it assumes that the backend will return JSON data. To make a
|
||||
* request that expects a different kind of data, you can use a sub-constructor of `httpResource`,
|
||||
* such as `httpResource.text`.
|
||||
*
|
||||
* @experimental 19.2
|
||||
* @initializerApiFunction
|
||||
*/
|
||||
const httpResource = (() => {
|
||||
const jsonFn = makeHttpResourceFn('json');
|
||||
jsonFn.arrayBuffer = makeHttpResourceFn('arraybuffer');
|
||||
jsonFn.blob = makeHttpResourceFn('blob');
|
||||
jsonFn.text = makeHttpResourceFn('text');
|
||||
return jsonFn;
|
||||
})();
|
||||
function makeHttpResourceFn(responseType) {
|
||||
return function httpResource(request, options) {
|
||||
if (ngDevMode && !options?.injector) {
|
||||
assertInInjectionContext(httpResource);
|
||||
}
|
||||
const injector = options?.injector ?? inject(Injector);
|
||||
return new HttpResourceImpl(injector, () => normalizeRequest(request, responseType), options?.defaultValue, options?.parse, options?.equal);
|
||||
};
|
||||
}
|
||||
function normalizeRequest(request, responseType) {
|
||||
let unwrappedRequest = typeof request === 'function' ? request() : request;
|
||||
if (unwrappedRequest === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
else if (typeof unwrappedRequest === 'string') {
|
||||
unwrappedRequest = { url: unwrappedRequest };
|
||||
}
|
||||
const headers = unwrappedRequest.headers instanceof HttpHeaders
|
||||
? unwrappedRequest.headers
|
||||
: new HttpHeaders(unwrappedRequest.headers);
|
||||
const params = unwrappedRequest.params instanceof HttpParams
|
||||
? unwrappedRequest.params
|
||||
: new HttpParams({ fromObject: unwrappedRequest.params });
|
||||
return new HttpRequest(unwrappedRequest.method ?? 'GET', unwrappedRequest.url, unwrappedRequest.body ?? null, {
|
||||
headers,
|
||||
params,
|
||||
reportProgress: unwrappedRequest.reportProgress,
|
||||
withCredentials: unwrappedRequest.withCredentials,
|
||||
keepalive: unwrappedRequest.keepalive,
|
||||
cache: unwrappedRequest.cache,
|
||||
priority: unwrappedRequest.priority,
|
||||
mode: unwrappedRequest.mode,
|
||||
redirect: unwrappedRequest.redirect,
|
||||
responseType,
|
||||
context: unwrappedRequest.context,
|
||||
transferCache: unwrappedRequest.transferCache,
|
||||
credentials: unwrappedRequest.credentials,
|
||||
timeout: unwrappedRequest.timeout,
|
||||
});
|
||||
}
|
||||
class HttpResourceImpl extends _ResourceImpl {
|
||||
client;
|
||||
_headers = linkedSignal({
|
||||
source: this.extRequest,
|
||||
computation: () => undefined,
|
||||
});
|
||||
_progress = linkedSignal({
|
||||
source: this.extRequest,
|
||||
computation: () => undefined,
|
||||
});
|
||||
_statusCode = linkedSignal({
|
||||
source: this.extRequest,
|
||||
computation: () => undefined,
|
||||
});
|
||||
headers = computed(() => this.status() === 'resolved' || this.status() === 'error' ? this._headers() : undefined, ...(ngDevMode ? [{ debugName: "headers" }] : []));
|
||||
progress = this._progress.asReadonly();
|
||||
statusCode = this._statusCode.asReadonly();
|
||||
constructor(injector, request, defaultValue, parse, equal) {
|
||||
super(request, ({ params: request, abortSignal }) => {
|
||||
let sub;
|
||||
// Track the abort listener so it can be removed if the Observable completes (as a memory
|
||||
// optimization).
|
||||
const onAbort = () => sub.unsubscribe();
|
||||
abortSignal.addEventListener('abort', onAbort);
|
||||
// Start off stream as undefined.
|
||||
const stream = signal({ value: undefined }, ...(ngDevMode ? [{ debugName: "stream" }] : []));
|
||||
let resolve;
|
||||
const promise = new Promise((r) => (resolve = r));
|
||||
const send = (value) => {
|
||||
stream.set(value);
|
||||
resolve?.(stream);
|
||||
resolve = undefined;
|
||||
};
|
||||
sub = this.client.request(request).subscribe({
|
||||
next: (event) => {
|
||||
switch (event.type) {
|
||||
case HttpEventType.Response:
|
||||
this._headers.set(event.headers);
|
||||
this._statusCode.set(event.status);
|
||||
try {
|
||||
send({ value: parse ? parse(event.body) : event.body });
|
||||
}
|
||||
catch (error) {
|
||||
send({ error: _encapsulateResourceError(error) });
|
||||
}
|
||||
break;
|
||||
case HttpEventType.DownloadProgress:
|
||||
this._progress.set(event);
|
||||
break;
|
||||
}
|
||||
},
|
||||
error: (error) => {
|
||||
if (error instanceof HttpErrorResponse) {
|
||||
this._headers.set(error.headers);
|
||||
this._statusCode.set(error.status);
|
||||
}
|
||||
send({ error });
|
||||
abortSignal.removeEventListener('abort', onAbort);
|
||||
},
|
||||
complete: () => {
|
||||
if (resolve) {
|
||||
send({
|
||||
error: new _RuntimeError(991 /* ɵRuntimeErrorCode.RESOURCE_COMPLETED_BEFORE_PRODUCING_VALUE */, ngDevMode && 'Resource completed before producing a value'),
|
||||
});
|
||||
}
|
||||
abortSignal.removeEventListener('abort', onAbort);
|
||||
},
|
||||
});
|
||||
return promise;
|
||||
}, defaultValue, equal, injector);
|
||||
this.client = injector.get(HttpClient);
|
||||
}
|
||||
set(value) {
|
||||
super.set(value);
|
||||
this._headers.set(undefined);
|
||||
this._progress.set(undefined);
|
||||
this._statusCode.set(undefined);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If your application uses different HTTP origins to make API calls (via `HttpClient`) on the server and
|
||||
* on the client, the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token allows you to establish a mapping
|
||||
* between those origins, so that `HttpTransferCache` feature can recognize those requests as the same
|
||||
* ones and reuse the data cached on the server during hydration on the client.
|
||||
*
|
||||
* **Important note**: the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token should *only* be provided in
|
||||
* the *server* code of your application (typically in the `app.server.config.ts` script). Angular throws an
|
||||
* error if it detects that the token is defined while running on the client.
|
||||
*
|
||||
* @usageNotes
|
||||
*
|
||||
* When the same API endpoint is accessed via `http://internal-domain.com:8080` on the server and
|
||||
* via `https://external-domain.com` on the client, you can use the following configuration:
|
||||
* ```ts
|
||||
* // in app.server.config.ts
|
||||
* {
|
||||
* provide: HTTP_TRANSFER_CACHE_ORIGIN_MAP,
|
||||
* useValue: {
|
||||
* 'http://internal-domain.com:8080': 'https://external-domain.com'
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
const HTTP_TRANSFER_CACHE_ORIGIN_MAP = new InjectionToken(ngDevMode ? 'HTTP_TRANSFER_CACHE_ORIGIN_MAP' : '');
|
||||
/**
|
||||
* Keys within cached response data structure.
|
||||
*/
|
||||
const BODY = 'b';
|
||||
const HEADERS = 'h';
|
||||
const STATUS = 's';
|
||||
const STATUS_TEXT = 'st';
|
||||
const REQ_URL = 'u';
|
||||
const RESPONSE_TYPE = 'rt';
|
||||
const CACHE_OPTIONS = new InjectionToken(ngDevMode ? 'HTTP_TRANSFER_STATE_CACHE_OPTIONS' : '');
|
||||
/**
|
||||
* A list of allowed HTTP methods to cache.
|
||||
*/
|
||||
const ALLOWED_METHODS = ['GET', 'HEAD'];
|
||||
function transferCacheInterceptorFn(req, next) {
|
||||
const { isCacheActive, ...globalOptions } = inject(CACHE_OPTIONS);
|
||||
const { transferCache: requestOptions, method: requestMethod } = req;
|
||||
// In the following situations we do not want to cache the request
|
||||
if (!isCacheActive ||
|
||||
requestOptions === false ||
|
||||
// POST requests are allowed either globally or at request level
|
||||
(requestMethod === 'POST' && !globalOptions.includePostRequests && !requestOptions) ||
|
||||
(requestMethod !== 'POST' && !ALLOWED_METHODS.includes(requestMethod)) ||
|
||||
// Do not cache request that require authorization when includeRequestsWithAuthHeaders is falsey
|
||||
(!globalOptions.includeRequestsWithAuthHeaders && hasAuthHeaders(req)) ||
|
||||
globalOptions.filter?.(req) === false) {
|
||||
return next(req);
|
||||
}
|
||||
const transferState = inject(TransferState);
|
||||
const originMap = inject(HTTP_TRANSFER_CACHE_ORIGIN_MAP, {
|
||||
optional: true,
|
||||
});
|
||||
if (typeof ngServerMode !== 'undefined' && !ngServerMode && originMap) {
|
||||
throw new _RuntimeError(2803 /* RuntimeErrorCode.HTTP_ORIGIN_MAP_USED_IN_CLIENT */, ngDevMode &&
|
||||
'Angular detected that the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token is configured and ' +
|
||||
'present in the client side code. Please ensure that this token is only provided in the ' +
|
||||
'server code of the application.');
|
||||
}
|
||||
const requestUrl = typeof ngServerMode !== 'undefined' && ngServerMode && originMap
|
||||
? mapRequestOriginUrl(req.url, originMap)
|
||||
: req.url;
|
||||
const storeKey = makeCacheKey(req, requestUrl);
|
||||
const response = transferState.get(storeKey, null);
|
||||
let headersToInclude = globalOptions.includeHeaders;
|
||||
if (typeof requestOptions === 'object' && requestOptions.includeHeaders) {
|
||||
// Request-specific config takes precedence over the global config.
|
||||
headersToInclude = requestOptions.includeHeaders;
|
||||
}
|
||||
if (response) {
|
||||
const { [BODY]: undecodedBody, [RESPONSE_TYPE]: responseType, [HEADERS]: httpHeaders, [STATUS]: status, [STATUS_TEXT]: statusText, [REQ_URL]: url, } = response;
|
||||
// Request found in cache. Respond using it.
|
||||
let body = undecodedBody;
|
||||
switch (responseType) {
|
||||
case 'arraybuffer':
|
||||
body = new TextEncoder().encode(undecodedBody).buffer;
|
||||
break;
|
||||
case 'blob':
|
||||
body = new Blob([undecodedBody]);
|
||||
break;
|
||||
}
|
||||
// We want to warn users accessing a header provided from the cache
|
||||
// That HttpTransferCache alters the headers
|
||||
// The warning will be logged a single time by HttpHeaders instance
|
||||
let headers = new HttpHeaders(httpHeaders);
|
||||
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
||||
// Append extra logic in dev mode to produce a warning when a header
|
||||
// that was not transferred to the client is accessed in the code via `get`
|
||||
// and `has` calls.
|
||||
headers = appendMissingHeadersDetection(req.url, headers, headersToInclude ?? []);
|
||||
}
|
||||
return of(new HttpResponse({
|
||||
body,
|
||||
headers,
|
||||
status,
|
||||
statusText,
|
||||
url,
|
||||
}));
|
||||
}
|
||||
const event$ = next(req);
|
||||
if (typeof ngServerMode !== 'undefined' && ngServerMode) {
|
||||
// Request not found in cache. Make the request and cache it if on the server.
|
||||
return event$.pipe(tap((event) => {
|
||||
// Only cache successful HTTP responses.
|
||||
if (event instanceof HttpResponse) {
|
||||
transferState.set(storeKey, {
|
||||
[BODY]: event.body,
|
||||
[HEADERS]: getFilteredHeaders(event.headers, headersToInclude),
|
||||
[STATUS]: event.status,
|
||||
[STATUS_TEXT]: event.statusText,
|
||||
[REQ_URL]: requestUrl,
|
||||
[RESPONSE_TYPE]: req.responseType,
|
||||
});
|
||||
}
|
||||
}));
|
||||
}
|
||||
return event$;
|
||||
}
|
||||
/** @returns true when the requests contains autorization related headers. */
|
||||
function hasAuthHeaders(req) {
|
||||
return req.headers.has('authorization') || req.headers.has('proxy-authorization');
|
||||
}
|
||||
function getFilteredHeaders(headers, includeHeaders) {
|
||||
if (!includeHeaders) {
|
||||
return {};
|
||||
}
|
||||
const headersMap = {};
|
||||
for (const key of includeHeaders) {
|
||||
const values = headers.getAll(key);
|
||||
if (values !== null) {
|
||||
headersMap[key] = values;
|
||||
}
|
||||
}
|
||||
return headersMap;
|
||||
}
|
||||
function sortAndConcatParams(params) {
|
||||
return [...params.keys()]
|
||||
.sort()
|
||||
.map((k) => `${k}=${params.getAll(k)}`)
|
||||
.join('&');
|
||||
}
|
||||
function makeCacheKey(request, mappedRequestUrl) {
|
||||
// make the params encoded same as a url so it's easy to identify
|
||||
const { params, method, responseType } = request;
|
||||
const encodedParams = sortAndConcatParams(params);
|
||||
let serializedBody = request.serializeBody();
|
||||
if (serializedBody instanceof URLSearchParams) {
|
||||
serializedBody = sortAndConcatParams(serializedBody);
|
||||
}
|
||||
else if (typeof serializedBody !== 'string') {
|
||||
serializedBody = '';
|
||||
}
|
||||
const key = [method, responseType, mappedRequestUrl, serializedBody, encodedParams].join('|');
|
||||
const hash = generateHash(key);
|
||||
return makeStateKey(hash);
|
||||
}
|
||||
/**
|
||||
* A method that returns a hash representation of a string using a variant of DJB2 hash
|
||||
* algorithm.
|
||||
*
|
||||
* This is the same hashing logic that is used to generate component ids.
|
||||
*/
|
||||
function generateHash(value) {
|
||||
let hash = 0;
|
||||
for (const char of value) {
|
||||
hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;
|
||||
}
|
||||
// Force positive number hash.
|
||||
// 2147483647 = equivalent of Integer.MAX_VALUE.
|
||||
hash += 2147483647 + 1;
|
||||
return hash.toString();
|
||||
}
|
||||
/**
|
||||
* Returns the DI providers needed to enable HTTP transfer cache.
|
||||
*
|
||||
* By default, when using server rendering, requests are performed twice: once on the server and
|
||||
* other one on the browser.
|
||||
*
|
||||
* When these providers are added, requests performed on the server are cached and reused during the
|
||||
* bootstrapping of the application in the browser thus avoiding duplicate requests and reducing
|
||||
* load time.
|
||||
*
|
||||
*/
|
||||
function withHttpTransferCache(cacheOptions) {
|
||||
return [
|
||||
{
|
||||
provide: CACHE_OPTIONS,
|
||||
useFactory: () => {
|
||||
_performanceMarkFeature('NgHttpTransferCache');
|
||||
return { isCacheActive: true, ...cacheOptions };
|
||||
},
|
||||
},
|
||||
{
|
||||
provide: HTTP_ROOT_INTERCEPTOR_FNS,
|
||||
useValue: transferCacheInterceptorFn,
|
||||
multi: true,
|
||||
},
|
||||
{
|
||||
provide: APP_BOOTSTRAP_LISTENER,
|
||||
multi: true,
|
||||
useFactory: () => {
|
||||
const appRef = inject(ApplicationRef);
|
||||
const cacheState = inject(CACHE_OPTIONS);
|
||||
return () => {
|
||||
appRef.whenStable().then(() => {
|
||||
cacheState.isCacheActive = false;
|
||||
});
|
||||
};
|
||||
},
|
||||
},
|
||||
];
|
||||
}
|
||||
/**
|
||||
* This function will add a proxy to an HttpHeader to intercept calls to get/has
|
||||
* and log a warning if the header entry requested has been removed
|
||||
*/
|
||||
function appendMissingHeadersDetection(url, headers, headersToInclude) {
|
||||
const warningProduced = new Set();
|
||||
return new Proxy(headers, {
|
||||
get(target, prop) {
|
||||
const value = Reflect.get(target, prop);
|
||||
const methods = new Set(['get', 'has', 'getAll']);
|
||||
if (typeof value !== 'function' || !methods.has(prop)) {
|
||||
return value;
|
||||
}
|
||||
return (headerName) => {
|
||||
// We log when the key has been removed and a warning hasn't been produced for the header
|
||||
const key = (prop + ':' + headerName).toLowerCase(); // e.g. `get:cache-control`
|
||||
if (!headersToInclude.includes(headerName) && !warningProduced.has(key)) {
|
||||
warningProduced.add(key);
|
||||
const truncatedUrl = _truncateMiddle(url);
|
||||
// TODO: create Error guide for this warning
|
||||
console.warn(_formatRuntimeError(2802 /* RuntimeErrorCode.HEADERS_ALTERED_BY_TRANSFER_CACHE */, `Angular detected that the \`${headerName}\` header is accessed, but the value of the header ` +
|
||||
`was not transferred from the server to the client by the HttpTransferCache. ` +
|
||||
`To include the value of the \`${headerName}\` header for the \`${truncatedUrl}\` request, ` +
|
||||
`use the \`includeHeaders\` list. The \`includeHeaders\` can be defined either ` +
|
||||
`on a request level by adding the \`transferCache\` parameter, or on an application ` +
|
||||
`level by adding the \`httpCacheTransfer.includeHeaders\` argument to the ` +
|
||||
`\`provideClientHydration()\` call. `));
|
||||
}
|
||||
// invoking the original method
|
||||
return value.apply(target, [headerName]);
|
||||
};
|
||||
},
|
||||
});
|
||||
}
|
||||
function mapRequestOriginUrl(url, originMap) {
|
||||
const origin = new URL(url, 'resolve://').origin;
|
||||
const mappedOrigin = originMap[origin];
|
||||
if (!mappedOrigin) {
|
||||
return url;
|
||||
}
|
||||
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
||||
verifyMappedOrigin(mappedOrigin);
|
||||
}
|
||||
return url.replace(origin, mappedOrigin);
|
||||
}
|
||||
function verifyMappedOrigin(url) {
|
||||
if (new URL(url, 'resolve://').pathname !== '/') {
|
||||
throw new _RuntimeError(2804 /* RuntimeErrorCode.HTTP_ORIGIN_MAP_CONTAINS_PATH */, 'Angular detected a URL with a path segment in the value provided for the ' +
|
||||
`\`HTTP_TRANSFER_CACHE_ORIGIN_MAP\` token: ${url}. The map should only contain origins ` +
|
||||
'without any other segments.');
|
||||
}
|
||||
}
|
||||
|
||||
export { HTTP_TRANSFER_CACHE_ORIGIN_MAP, HttpClient, HttpErrorResponse, HttpEventType, HttpHeaders, HttpParams, HttpRequest, HttpResponse, httpResource, HTTP_ROOT_INTERCEPTOR_FNS as ɵHTTP_ROOT_INTERCEPTOR_FNS, withHttpTransferCache as ɵwithHttpTransferCache };
|
||||
//# sourceMappingURL=http.mjs.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/http.mjs.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/http.mjs.map
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
361
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/http/testing.mjs
generated
vendored
Executable file
361
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/http/testing.mjs
generated
vendored
Executable file
|
@ -0,0 +1,361 @@
|
|||
/**
|
||||
* @license Angular v20.1.6
|
||||
* (c) 2010-2025 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
import * as i0 from '@angular/core';
|
||||
import { Injectable, NgModule } from '@angular/core';
|
||||
import { Observable } from 'rxjs';
|
||||
import { HttpHeaders, HttpResponse, HttpErrorResponse, HttpStatusCode, HttpEventType, HttpBackend, REQUESTS_CONTRIBUTE_TO_STABILITY, HttpClientModule } from '../module.mjs';
|
||||
import 'rxjs/operators';
|
||||
import '../xhr.mjs';
|
||||
|
||||
/**
|
||||
* Controller to be injected into tests, that allows for mocking and flushing
|
||||
* of requests.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class HttpTestingController {
|
||||
}
|
||||
|
||||
/**
|
||||
* A mock requests that was received and is ready to be answered.
|
||||
*
|
||||
* This interface allows access to the underlying `HttpRequest`, and allows
|
||||
* responding with `HttpEvent`s or `HttpErrorResponse`s.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class TestRequest {
|
||||
request;
|
||||
observer;
|
||||
/**
|
||||
* Whether the request was cancelled after it was sent.
|
||||
*/
|
||||
get cancelled() {
|
||||
return this._cancelled;
|
||||
}
|
||||
/**
|
||||
* @internal set by `HttpClientTestingBackend`
|
||||
*/
|
||||
_cancelled = false;
|
||||
constructor(request, observer) {
|
||||
this.request = request;
|
||||
this.observer = observer;
|
||||
}
|
||||
/**
|
||||
* Resolve the request by returning a body plus additional HTTP information (such as response
|
||||
* headers) if provided.
|
||||
* If the request specifies an expected body type, the body is converted into the requested type.
|
||||
* Otherwise, the body is converted to `JSON` by default.
|
||||
*
|
||||
* Both successful and unsuccessful responses can be delivered via `flush()`.
|
||||
*/
|
||||
flush(body, opts = {}) {
|
||||
if (this.cancelled) {
|
||||
throw new Error(`Cannot flush a cancelled request.`);
|
||||
}
|
||||
const url = this.request.urlWithParams;
|
||||
const headers = opts.headers instanceof HttpHeaders ? opts.headers : new HttpHeaders(opts.headers);
|
||||
body = _maybeConvertBody(this.request.responseType, body);
|
||||
let statusText = opts.statusText;
|
||||
let status = opts.status !== undefined ? opts.status : HttpStatusCode.Ok;
|
||||
if (opts.status === undefined) {
|
||||
if (body === null) {
|
||||
status = HttpStatusCode.NoContent;
|
||||
statusText ||= 'No Content';
|
||||
}
|
||||
else {
|
||||
statusText ||= 'OK';
|
||||
}
|
||||
}
|
||||
if (statusText === undefined) {
|
||||
throw new Error('statusText is required when setting a custom status.');
|
||||
}
|
||||
if (status >= 200 && status < 300) {
|
||||
this.observer.next(new HttpResponse({ body, headers, status, statusText, url }));
|
||||
this.observer.complete();
|
||||
}
|
||||
else {
|
||||
this.observer.error(new HttpErrorResponse({ error: body, headers, status, statusText, url }));
|
||||
}
|
||||
}
|
||||
error(error, opts = {}) {
|
||||
if (this.cancelled) {
|
||||
throw new Error(`Cannot return an error for a cancelled request.`);
|
||||
}
|
||||
const headers = opts.headers instanceof HttpHeaders ? opts.headers : new HttpHeaders(opts.headers);
|
||||
this.observer.error(new HttpErrorResponse({
|
||||
error,
|
||||
headers,
|
||||
status: opts.status || 0,
|
||||
statusText: opts.statusText || '',
|
||||
url: this.request.urlWithParams,
|
||||
}));
|
||||
}
|
||||
/**
|
||||
* Deliver an arbitrary `HttpEvent` (such as a progress event) on the response stream for this
|
||||
* request.
|
||||
*/
|
||||
event(event) {
|
||||
if (this.cancelled) {
|
||||
throw new Error(`Cannot send events to a cancelled request.`);
|
||||
}
|
||||
this.observer.next(event);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Helper function to convert a response body to an ArrayBuffer.
|
||||
*/
|
||||
function _toArrayBufferBody(body) {
|
||||
if (typeof ArrayBuffer === 'undefined') {
|
||||
throw new Error('ArrayBuffer responses are not supported on this platform.');
|
||||
}
|
||||
if (body instanceof ArrayBuffer) {
|
||||
return body;
|
||||
}
|
||||
throw new Error('Automatic conversion to ArrayBuffer is not supported for response type.');
|
||||
}
|
||||
/**
|
||||
* Helper function to convert a response body to a Blob.
|
||||
*/
|
||||
function _toBlob(body) {
|
||||
if (typeof Blob === 'undefined') {
|
||||
throw new Error('Blob responses are not supported on this platform.');
|
||||
}
|
||||
if (body instanceof Blob) {
|
||||
return body;
|
||||
}
|
||||
if (ArrayBuffer && body instanceof ArrayBuffer) {
|
||||
return new Blob([body]);
|
||||
}
|
||||
throw new Error('Automatic conversion to Blob is not supported for response type.');
|
||||
}
|
||||
/**
|
||||
* Helper function to convert a response body to JSON data.
|
||||
*/
|
||||
function _toJsonBody(body, format = 'JSON') {
|
||||
if (typeof ArrayBuffer !== 'undefined' && body instanceof ArrayBuffer) {
|
||||
throw new Error(`Automatic conversion to ${format} is not supported for ArrayBuffers.`);
|
||||
}
|
||||
if (typeof Blob !== 'undefined' && body instanceof Blob) {
|
||||
throw new Error(`Automatic conversion to ${format} is not supported for Blobs.`);
|
||||
}
|
||||
if (typeof body === 'string' ||
|
||||
typeof body === 'number' ||
|
||||
typeof body === 'object' ||
|
||||
typeof body === 'boolean' ||
|
||||
Array.isArray(body)) {
|
||||
return body;
|
||||
}
|
||||
throw new Error(`Automatic conversion to ${format} is not supported for response type.`);
|
||||
}
|
||||
/**
|
||||
* Helper function to convert a response body to a string.
|
||||
*/
|
||||
function _toTextBody(body) {
|
||||
if (typeof body === 'string') {
|
||||
return body;
|
||||
}
|
||||
if (typeof ArrayBuffer !== 'undefined' && body instanceof ArrayBuffer) {
|
||||
throw new Error('Automatic conversion to text is not supported for ArrayBuffers.');
|
||||
}
|
||||
if (typeof Blob !== 'undefined' && body instanceof Blob) {
|
||||
throw new Error('Automatic conversion to text is not supported for Blobs.');
|
||||
}
|
||||
return JSON.stringify(_toJsonBody(body, 'text'));
|
||||
}
|
||||
/**
|
||||
* Convert a response body to the requested type.
|
||||
*/
|
||||
function _maybeConvertBody(responseType, body) {
|
||||
if (body === null) {
|
||||
return null;
|
||||
}
|
||||
switch (responseType) {
|
||||
case 'arraybuffer':
|
||||
return _toArrayBufferBody(body);
|
||||
case 'blob':
|
||||
return _toBlob(body);
|
||||
case 'json':
|
||||
return _toJsonBody(body);
|
||||
case 'text':
|
||||
return _toTextBody(body);
|
||||
default:
|
||||
throw new Error(`Unsupported responseType: ${responseType}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A testing backend for `HttpClient` which both acts as an `HttpBackend`
|
||||
* and as the `HttpTestingController`.
|
||||
*
|
||||
* `HttpClientTestingBackend` works by keeping a list of all open requests.
|
||||
* As requests come in, they're added to the list. Users can assert that specific
|
||||
* requests were made and then flush them. In the end, a verify() method asserts
|
||||
* that no unexpected requests were made.
|
||||
*
|
||||
*
|
||||
*/
|
||||
class HttpClientTestingBackend {
|
||||
/**
|
||||
* List of pending requests which have not yet been expected.
|
||||
*/
|
||||
open = [];
|
||||
/**
|
||||
* Used when checking if we need to throw the NOT_USING_FETCH_BACKEND_IN_SSR error
|
||||
*/
|
||||
isTestingBackend = true;
|
||||
/**
|
||||
* Handle an incoming request by queueing it in the list of open requests.
|
||||
*/
|
||||
handle(req) {
|
||||
return new Observable((observer) => {
|
||||
const testReq = new TestRequest(req, observer);
|
||||
this.open.push(testReq);
|
||||
observer.next({ type: HttpEventType.Sent });
|
||||
return () => {
|
||||
testReq._cancelled = true;
|
||||
};
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Helper function to search for requests in the list of open requests.
|
||||
*/
|
||||
_match(match) {
|
||||
if (typeof match === 'string') {
|
||||
return this.open.filter((testReq) => testReq.request.urlWithParams === match);
|
||||
}
|
||||
else if (typeof match === 'function') {
|
||||
return this.open.filter((testReq) => match(testReq.request));
|
||||
}
|
||||
else {
|
||||
return this.open.filter((testReq) => (!match.method || testReq.request.method === match.method.toUpperCase()) &&
|
||||
(!match.url || testReq.request.urlWithParams === match.url));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Search for requests in the list of open requests, and return all that match
|
||||
* without asserting anything about the number of matches.
|
||||
*/
|
||||
match(match) {
|
||||
const results = this._match(match);
|
||||
results.forEach((result) => {
|
||||
const index = this.open.indexOf(result);
|
||||
if (index !== -1) {
|
||||
this.open.splice(index, 1);
|
||||
}
|
||||
});
|
||||
return results;
|
||||
}
|
||||
/**
|
||||
* Expect that a single outstanding request matches the given matcher, and return
|
||||
* it.
|
||||
*
|
||||
* Requests returned through this API will no longer be in the list of open requests,
|
||||
* and thus will not match twice.
|
||||
*/
|
||||
expectOne(match, description) {
|
||||
description ||= this.descriptionFromMatcher(match);
|
||||
const matches = this.match(match);
|
||||
if (matches.length > 1) {
|
||||
throw new Error(`Expected one matching request for criteria "${description}", found ${matches.length} requests.`);
|
||||
}
|
||||
if (matches.length === 0) {
|
||||
let message = `Expected one matching request for criteria "${description}", found none.`;
|
||||
if (this.open.length > 0) {
|
||||
// Show the methods and URLs of open requests in the error, for convenience.
|
||||
const requests = this.open.map(describeRequest).join(', ');
|
||||
message += ` Requests received are: ${requests}.`;
|
||||
}
|
||||
throw new Error(message);
|
||||
}
|
||||
return matches[0];
|
||||
}
|
||||
/**
|
||||
* Expect that no outstanding requests match the given matcher, and throw an error
|
||||
* if any do.
|
||||
*/
|
||||
expectNone(match, description) {
|
||||
description ||= this.descriptionFromMatcher(match);
|
||||
const matches = this.match(match);
|
||||
if (matches.length > 0) {
|
||||
throw new Error(`Expected zero matching requests for criteria "${description}", found ${matches.length}.`);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Validate that there are no outstanding requests.
|
||||
*/
|
||||
verify(opts = {}) {
|
||||
let open = this.open;
|
||||
// It's possible that some requests may be cancelled, and this is expected.
|
||||
// The user can ask to ignore open requests which have been cancelled.
|
||||
if (opts.ignoreCancelled) {
|
||||
open = open.filter((testReq) => !testReq.cancelled);
|
||||
}
|
||||
if (open.length > 0) {
|
||||
// Show the methods and URLs of open requests in the error, for convenience.
|
||||
const requests = open.map(describeRequest).join(', ');
|
||||
throw new Error(`Expected no open requests, found ${open.length}: ${requests}`);
|
||||
}
|
||||
}
|
||||
descriptionFromMatcher(matcher) {
|
||||
if (typeof matcher === 'string') {
|
||||
return `Match URL: ${matcher}`;
|
||||
}
|
||||
else if (typeof matcher === 'object') {
|
||||
const method = matcher.method || '(any)';
|
||||
const url = matcher.url || '(any)';
|
||||
return `Match method: ${method}, URL: ${url}`;
|
||||
}
|
||||
else {
|
||||
return `Match by function: ${matcher.name}`;
|
||||
}
|
||||
}
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: HttpClientTestingBackend, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
||||
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: HttpClientTestingBackend });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: HttpClientTestingBackend, decorators: [{
|
||||
type: Injectable
|
||||
}] });
|
||||
function describeRequest(testRequest) {
|
||||
const url = testRequest.request.urlWithParams;
|
||||
const method = testRequest.request.method;
|
||||
return `${method} ${url}`;
|
||||
}
|
||||
|
||||
function provideHttpClientTesting() {
|
||||
return [
|
||||
HttpClientTestingBackend,
|
||||
{ provide: HttpBackend, useExisting: HttpClientTestingBackend },
|
||||
{ provide: HttpTestingController, useExisting: HttpClientTestingBackend },
|
||||
{ provide: REQUESTS_CONTRIBUTE_TO_STABILITY, useValue: false },
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures `HttpClientTestingBackend` as the `HttpBackend` used by `HttpClient`.
|
||||
*
|
||||
* Inject `HttpTestingController` to expect and flush requests in your tests.
|
||||
*
|
||||
* @publicApi
|
||||
*
|
||||
* @deprecated Add `provideHttpClientTesting()` to your providers instead.
|
||||
*/
|
||||
class HttpClientTestingModule {
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: HttpClientTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
||||
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.6", ngImport: i0, type: HttpClientTestingModule, imports: [HttpClientModule] });
|
||||
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: HttpClientTestingModule, providers: [provideHttpClientTesting()], imports: [HttpClientModule] });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: HttpClientTestingModule, decorators: [{
|
||||
type: NgModule,
|
||||
args: [{
|
||||
imports: [HttpClientModule],
|
||||
providers: [provideHttpClientTesting()],
|
||||
}]
|
||||
}] });
|
||||
|
||||
export { HttpClientTestingModule, HttpTestingController, TestRequest, provideHttpClientTesting };
|
||||
//# sourceMappingURL=testing.mjs.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/http/testing.mjs.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/http/testing.mjs.map
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
637
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/location.mjs
generated
vendored
Executable file
637
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/location.mjs
generated
vendored
Executable file
|
@ -0,0 +1,637 @@
|
|||
/**
|
||||
* @license Angular v20.1.6
|
||||
* (c) 2010-2025 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
import * as i0 from '@angular/core';
|
||||
import { inject, Injectable, InjectionToken, DOCUMENT, Optional, Inject, ɵɵinject as __inject } from '@angular/core';
|
||||
import { Subject } from 'rxjs';
|
||||
|
||||
let _DOM = null;
|
||||
function getDOM() {
|
||||
return _DOM;
|
||||
}
|
||||
function setRootDomAdapter(adapter) {
|
||||
_DOM ??= adapter;
|
||||
}
|
||||
/**
|
||||
* Provides DOM operations in an environment-agnostic way.
|
||||
*
|
||||
* @security Tread carefully! Interacting with the DOM directly is dangerous and
|
||||
* can introduce XSS risks.
|
||||
*/
|
||||
class DomAdapter {
|
||||
}
|
||||
|
||||
/**
|
||||
* This class should not be used directly by an application developer. Instead, use
|
||||
* {@link Location}.
|
||||
*
|
||||
* `PlatformLocation` encapsulates all calls to DOM APIs, which allows the Router to be
|
||||
* platform-agnostic.
|
||||
* This means that we can have different implementation of `PlatformLocation` for the different
|
||||
* platforms that Angular supports. For example, `@angular/platform-browser` provides an
|
||||
* implementation specific to the browser environment, while `@angular/platform-server` provides
|
||||
* one suitable for use with server-side rendering.
|
||||
*
|
||||
* The `PlatformLocation` class is used directly by all implementations of {@link LocationStrategy}
|
||||
* when they need to interact with the DOM APIs like pushState, popState, etc.
|
||||
*
|
||||
* {@link LocationStrategy} in turn is used by the {@link Location} service which is used directly
|
||||
* by the {@link /api/router/Router Router} in order to navigate between routes. Since all interactions between
|
||||
* {@link /api/router/Router Router} /
|
||||
* {@link Location} / {@link LocationStrategy} and DOM APIs flow through the `PlatformLocation`
|
||||
* class, they are all platform-agnostic.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class PlatformLocation {
|
||||
historyGo(relativePosition) {
|
||||
throw new Error(ngDevMode ? 'Not implemented' : '');
|
||||
}
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: PlatformLocation, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
||||
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: PlatformLocation, providedIn: 'platform', useFactory: () => inject(BrowserPlatformLocation) });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: PlatformLocation, decorators: [{
|
||||
type: Injectable,
|
||||
args: [{ providedIn: 'platform', useFactory: () => inject(BrowserPlatformLocation) }]
|
||||
}] });
|
||||
/**
|
||||
* @description
|
||||
* Indicates when a location is initialized.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
const LOCATION_INITIALIZED = new InjectionToken(ngDevMode ? 'Location Initialized' : '');
|
||||
/**
|
||||
* `PlatformLocation` encapsulates all of the direct calls to platform APIs.
|
||||
* This class should not be used directly by an application developer. Instead, use
|
||||
* {@link Location}.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class BrowserPlatformLocation extends PlatformLocation {
|
||||
_location;
|
||||
_history;
|
||||
_doc = inject(DOCUMENT);
|
||||
constructor() {
|
||||
super();
|
||||
this._location = window.location;
|
||||
this._history = window.history;
|
||||
}
|
||||
getBaseHrefFromDOM() {
|
||||
return getDOM().getBaseHref(this._doc);
|
||||
}
|
||||
onPopState(fn) {
|
||||
const window = getDOM().getGlobalEventTarget(this._doc, 'window');
|
||||
window.addEventListener('popstate', fn, false);
|
||||
return () => window.removeEventListener('popstate', fn);
|
||||
}
|
||||
onHashChange(fn) {
|
||||
const window = getDOM().getGlobalEventTarget(this._doc, 'window');
|
||||
window.addEventListener('hashchange', fn, false);
|
||||
return () => window.removeEventListener('hashchange', fn);
|
||||
}
|
||||
get href() {
|
||||
return this._location.href;
|
||||
}
|
||||
get protocol() {
|
||||
return this._location.protocol;
|
||||
}
|
||||
get hostname() {
|
||||
return this._location.hostname;
|
||||
}
|
||||
get port() {
|
||||
return this._location.port;
|
||||
}
|
||||
get pathname() {
|
||||
return this._location.pathname;
|
||||
}
|
||||
get search() {
|
||||
return this._location.search;
|
||||
}
|
||||
get hash() {
|
||||
return this._location.hash;
|
||||
}
|
||||
set pathname(newPath) {
|
||||
this._location.pathname = newPath;
|
||||
}
|
||||
pushState(state, title, url) {
|
||||
this._history.pushState(state, title, url);
|
||||
}
|
||||
replaceState(state, title, url) {
|
||||
this._history.replaceState(state, title, url);
|
||||
}
|
||||
forward() {
|
||||
this._history.forward();
|
||||
}
|
||||
back() {
|
||||
this._history.back();
|
||||
}
|
||||
historyGo(relativePosition = 0) {
|
||||
this._history.go(relativePosition);
|
||||
}
|
||||
getState() {
|
||||
return this._history.state;
|
||||
}
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: BrowserPlatformLocation, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
||||
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: BrowserPlatformLocation, providedIn: 'platform', useFactory: () => new BrowserPlatformLocation() });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: BrowserPlatformLocation, decorators: [{
|
||||
type: Injectable,
|
||||
args: [{
|
||||
providedIn: 'platform',
|
||||
useFactory: () => new BrowserPlatformLocation(),
|
||||
}]
|
||||
}], ctorParameters: () => [] });
|
||||
|
||||
/**
|
||||
* Joins two parts of a URL with a slash if needed.
|
||||
*
|
||||
* @param start URL string
|
||||
* @param end URL string
|
||||
*
|
||||
*
|
||||
* @returns The joined URL string.
|
||||
*/
|
||||
function joinWithSlash(start, end) {
|
||||
// If `start` is an empty string, return `end` as the result.
|
||||
if (!start)
|
||||
return end;
|
||||
// If `end` is an empty string, return `start` as the result.
|
||||
if (!end)
|
||||
return start;
|
||||
// If `start` ends with a slash, remove the leading slash from `end`.
|
||||
if (start.endsWith('/')) {
|
||||
return end.startsWith('/') ? start + end.slice(1) : start + end;
|
||||
}
|
||||
// If `start` doesn't end with a slash, add one if `end` doesn't start with a slash.
|
||||
return end.startsWith('/') ? start + end : `${start}/${end}`;
|
||||
}
|
||||
/**
|
||||
* Removes a trailing slash from a URL string if needed.
|
||||
* Looks for the first occurrence of either `#`, `?`, or the end of the
|
||||
* line as `/` characters and removes the trailing slash if one exists.
|
||||
*
|
||||
* @param url URL string.
|
||||
*
|
||||
* @returns The URL string, modified if needed.
|
||||
*/
|
||||
function stripTrailingSlash(url) {
|
||||
// Find the index of the first occurrence of `#`, `?`, or the end of the string.
|
||||
// This marks the start of the query string, fragment, or the end of the URL path.
|
||||
const pathEndIdx = url.search(/#|\?|$/);
|
||||
// Check if the character before `pathEndIdx` is a trailing slash.
|
||||
// If it is, remove the trailing slash and return the modified URL.
|
||||
// Otherwise, return the URL as is.
|
||||
return url[pathEndIdx - 1] === '/' ? url.slice(0, pathEndIdx - 1) + url.slice(pathEndIdx) : url;
|
||||
}
|
||||
/**
|
||||
* Normalizes URL parameters by prepending with `?` if needed.
|
||||
*
|
||||
* @param params String of URL parameters.
|
||||
*
|
||||
* @returns The normalized URL parameters string.
|
||||
*/
|
||||
function normalizeQueryParams(params) {
|
||||
return params && params[0] !== '?' ? `?${params}` : params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables the `Location` service to read route state from the browser's URL.
|
||||
* Angular provides two strategies:
|
||||
* `HashLocationStrategy` and `PathLocationStrategy`.
|
||||
*
|
||||
* Applications should use the `Router` or `Location` services to
|
||||
* interact with application route state.
|
||||
*
|
||||
* For instance, `HashLocationStrategy` produces URLs like
|
||||
* <code class="no-auto-link">http://example.com/#/foo</code>,
|
||||
* and `PathLocationStrategy` produces
|
||||
* <code class="no-auto-link">http://example.com/foo</code> as an equivalent URL.
|
||||
*
|
||||
* See these two classes for more.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class LocationStrategy {
|
||||
historyGo(relativePosition) {
|
||||
throw new Error(ngDevMode ? 'Not implemented' : '');
|
||||
}
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: LocationStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
||||
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: LocationStrategy, providedIn: 'root', useFactory: () => inject(PathLocationStrategy) });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: LocationStrategy, decorators: [{
|
||||
type: Injectable,
|
||||
args: [{ providedIn: 'root', useFactory: () => inject(PathLocationStrategy) }]
|
||||
}] });
|
||||
/**
|
||||
* A predefined DI token for the base href
|
||||
* to be used with the `PathLocationStrategy`.
|
||||
* The base href is the URL prefix that should be preserved when generating
|
||||
* and recognizing URLs.
|
||||
*
|
||||
* @usageNotes
|
||||
*
|
||||
* The following example shows how to use this token to configure the root app injector
|
||||
* with a base href value, so that the DI framework can supply the dependency anywhere in the app.
|
||||
*
|
||||
* ```ts
|
||||
* import {NgModule} from '@angular/core';
|
||||
* import {APP_BASE_HREF} from '@angular/common';
|
||||
*
|
||||
* @NgModule({
|
||||
* providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}]
|
||||
* })
|
||||
* class AppModule {}
|
||||
* ```
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
const APP_BASE_HREF = new InjectionToken(ngDevMode ? 'appBaseHref' : '');
|
||||
/**
|
||||
* @description
|
||||
* A {@link LocationStrategy} used to configure the {@link Location} service to
|
||||
* represent its state in the
|
||||
* [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the
|
||||
* browser's URL.
|
||||
*
|
||||
* If you're using `PathLocationStrategy`, you may provide a {@link APP_BASE_HREF}
|
||||
* or add a `<base href>` element to the document to override the default.
|
||||
*
|
||||
* For instance, if you provide an `APP_BASE_HREF` of `'/my/app/'` and call
|
||||
* `location.go('/foo')`, the browser's URL will become
|
||||
* `example.com/my/app/foo`. To ensure all relative URIs resolve correctly,
|
||||
* the `<base href>` and/or `APP_BASE_HREF` should end with a `/`.
|
||||
*
|
||||
* Similarly, if you add `<base href='/my/app/'/>` to the document and call
|
||||
* `location.go('/foo')`, the browser's URL will become
|
||||
* `example.com/my/app/foo`.
|
||||
*
|
||||
* Note that when using `PathLocationStrategy`, neither the query nor
|
||||
* the fragment in the `<base href>` will be preserved, as outlined
|
||||
* by the [RFC](https://tools.ietf.org/html/rfc3986#section-5.2.2).
|
||||
*
|
||||
* @usageNotes
|
||||
*
|
||||
* ### Example
|
||||
*
|
||||
* {@example common/location/ts/path_location_component.ts region='LocationComponent'}
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class PathLocationStrategy extends LocationStrategy {
|
||||
_platformLocation;
|
||||
_baseHref;
|
||||
_removeListenerFns = [];
|
||||
constructor(_platformLocation, href) {
|
||||
super();
|
||||
this._platformLocation = _platformLocation;
|
||||
this._baseHref =
|
||||
href ??
|
||||
this._platformLocation.getBaseHrefFromDOM() ??
|
||||
inject(DOCUMENT).location?.origin ??
|
||||
'';
|
||||
}
|
||||
/** @docs-private */
|
||||
ngOnDestroy() {
|
||||
while (this._removeListenerFns.length) {
|
||||
this._removeListenerFns.pop()();
|
||||
}
|
||||
}
|
||||
onPopState(fn) {
|
||||
this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));
|
||||
}
|
||||
getBaseHref() {
|
||||
return this._baseHref;
|
||||
}
|
||||
prepareExternalUrl(internal) {
|
||||
return joinWithSlash(this._baseHref, internal);
|
||||
}
|
||||
path(includeHash = false) {
|
||||
const pathname = this._platformLocation.pathname + normalizeQueryParams(this._platformLocation.search);
|
||||
const hash = this._platformLocation.hash;
|
||||
return hash && includeHash ? `${pathname}${hash}` : pathname;
|
||||
}
|
||||
pushState(state, title, url, queryParams) {
|
||||
const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));
|
||||
this._platformLocation.pushState(state, title, externalUrl);
|
||||
}
|
||||
replaceState(state, title, url, queryParams) {
|
||||
const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));
|
||||
this._platformLocation.replaceState(state, title, externalUrl);
|
||||
}
|
||||
forward() {
|
||||
this._platformLocation.forward();
|
||||
}
|
||||
back() {
|
||||
this._platformLocation.back();
|
||||
}
|
||||
getState() {
|
||||
return this._platformLocation.getState();
|
||||
}
|
||||
historyGo(relativePosition = 0) {
|
||||
this._platformLocation.historyGo?.(relativePosition);
|
||||
}
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: PathLocationStrategy, deps: [{ token: PlatformLocation }, { token: APP_BASE_HREF, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
||||
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: PathLocationStrategy, providedIn: 'root' });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: PathLocationStrategy, decorators: [{
|
||||
type: Injectable,
|
||||
args: [{ providedIn: 'root' }]
|
||||
}], ctorParameters: () => [{ type: PlatformLocation }, { type: undefined, decorators: [{
|
||||
type: Optional
|
||||
}, {
|
||||
type: Inject,
|
||||
args: [APP_BASE_HREF]
|
||||
}] }] });
|
||||
|
||||
/**
|
||||
* @description
|
||||
*
|
||||
* A service that applications can use to interact with a browser's URL.
|
||||
*
|
||||
* Depending on the `LocationStrategy` used, `Location` persists
|
||||
* to the URL's path or the URL's hash segment.
|
||||
*
|
||||
* @usageNotes
|
||||
*
|
||||
* It's better to use the `Router.navigate()` service to trigger route changes. Use
|
||||
* `Location` only if you need to interact with or create normalized URLs outside of
|
||||
* routing.
|
||||
*
|
||||
* `Location` is responsible for normalizing the URL against the application's base href.
|
||||
* A normalized URL is absolute from the URL host, includes the application's base href, and has no
|
||||
* trailing slash:
|
||||
* - `/my/app/user/123` is normalized
|
||||
* - `my/app/user/123` **is not** normalized
|
||||
* - `/my/app/user/123/` **is not** normalized
|
||||
*
|
||||
* ### Example
|
||||
*
|
||||
* {@example common/location/ts/path_location_component.ts region='LocationComponent'}
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class Location {
|
||||
/** @internal */
|
||||
_subject = new Subject();
|
||||
/** @internal */
|
||||
_basePath;
|
||||
/** @internal */
|
||||
_locationStrategy;
|
||||
/** @internal */
|
||||
_urlChangeListeners = [];
|
||||
/** @internal */
|
||||
_urlChangeSubscription = null;
|
||||
constructor(locationStrategy) {
|
||||
this._locationStrategy = locationStrategy;
|
||||
const baseHref = this._locationStrategy.getBaseHref();
|
||||
// Note: This class's interaction with base HREF does not fully follow the rules
|
||||
// outlined in the spec https://www.freesoft.org/CIE/RFC/1808/18.htm.
|
||||
// Instead of trying to fix individual bugs with more and more code, we should
|
||||
// investigate using the URL constructor and providing the base as a second
|
||||
// argument.
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/URL/URL#parameters
|
||||
this._basePath = _stripOrigin(stripTrailingSlash(_stripIndexHtml(baseHref)));
|
||||
this._locationStrategy.onPopState((ev) => {
|
||||
this._subject.next({
|
||||
'url': this.path(true),
|
||||
'pop': true,
|
||||
'state': ev.state,
|
||||
'type': ev.type,
|
||||
});
|
||||
});
|
||||
}
|
||||
/** @docs-private */
|
||||
ngOnDestroy() {
|
||||
this._urlChangeSubscription?.unsubscribe();
|
||||
this._urlChangeListeners = [];
|
||||
}
|
||||
/**
|
||||
* Normalizes the URL path for this location.
|
||||
*
|
||||
* @param includeHash True to include an anchor fragment in the path.
|
||||
*
|
||||
* @returns The normalized URL path.
|
||||
*/
|
||||
// TODO: vsavkin. Remove the boolean flag and always include hash once the deprecated router is
|
||||
// removed.
|
||||
path(includeHash = false) {
|
||||
return this.normalize(this._locationStrategy.path(includeHash));
|
||||
}
|
||||
/**
|
||||
* Reports the current state of the location history.
|
||||
* @returns The current value of the `history.state` object.
|
||||
*/
|
||||
getState() {
|
||||
return this._locationStrategy.getState();
|
||||
}
|
||||
/**
|
||||
* Normalizes the given path and compares to the current normalized path.
|
||||
*
|
||||
* @param path The given URL path.
|
||||
* @param query Query parameters.
|
||||
*
|
||||
* @returns True if the given URL path is equal to the current normalized path, false
|
||||
* otherwise.
|
||||
*/
|
||||
isCurrentPathEqualTo(path, query = '') {
|
||||
return this.path() == this.normalize(path + normalizeQueryParams(query));
|
||||
}
|
||||
/**
|
||||
* Normalizes a URL path by stripping any trailing slashes.
|
||||
*
|
||||
* @param url String representing a URL.
|
||||
*
|
||||
* @returns The normalized URL string.
|
||||
*/
|
||||
normalize(url) {
|
||||
return Location.stripTrailingSlash(_stripBasePath(this._basePath, _stripIndexHtml(url)));
|
||||
}
|
||||
/**
|
||||
* Normalizes an external URL path.
|
||||
* If the given URL doesn't begin with a leading slash (`'/'`), adds one
|
||||
* before normalizing. Adds a hash if `HashLocationStrategy` is
|
||||
* in use, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.
|
||||
*
|
||||
* @param url String representing a URL.
|
||||
*
|
||||
* @returns A normalized platform-specific URL.
|
||||
*/
|
||||
prepareExternalUrl(url) {
|
||||
if (url && url[0] !== '/') {
|
||||
url = '/' + url;
|
||||
}
|
||||
return this._locationStrategy.prepareExternalUrl(url);
|
||||
}
|
||||
// TODO: rename this method to pushState
|
||||
/**
|
||||
* Changes the browser's URL to a normalized version of a given URL, and pushes a
|
||||
* new item onto the platform's history.
|
||||
*
|
||||
* @param path URL path to normalize.
|
||||
* @param query Query parameters.
|
||||
* @param state Location history state.
|
||||
*
|
||||
*/
|
||||
go(path, query = '', state = null) {
|
||||
this._locationStrategy.pushState(state, '', path, query);
|
||||
this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);
|
||||
}
|
||||
/**
|
||||
* Changes the browser's URL to a normalized version of the given URL, and replaces
|
||||
* the top item on the platform's history stack.
|
||||
*
|
||||
* @param path URL path to normalize.
|
||||
* @param query Query parameters.
|
||||
* @param state Location history state.
|
||||
*/
|
||||
replaceState(path, query = '', state = null) {
|
||||
this._locationStrategy.replaceState(state, '', path, query);
|
||||
this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);
|
||||
}
|
||||
/**
|
||||
* Navigates forward in the platform's history.
|
||||
*/
|
||||
forward() {
|
||||
this._locationStrategy.forward();
|
||||
}
|
||||
/**
|
||||
* Navigates back in the platform's history.
|
||||
*/
|
||||
back() {
|
||||
this._locationStrategy.back();
|
||||
}
|
||||
/**
|
||||
* Navigate to a specific page from session history, identified by its relative position to the
|
||||
* current page.
|
||||
*
|
||||
* @param relativePosition Position of the target page in the history relative to the current
|
||||
* page.
|
||||
* A negative value moves backwards, a positive value moves forwards, e.g. `location.historyGo(2)`
|
||||
* moves forward two pages and `location.historyGo(-2)` moves back two pages. When we try to go
|
||||
* beyond what's stored in the history session, we stay in the current page. Same behaviour occurs
|
||||
* when `relativePosition` equals 0.
|
||||
* @see https://developer.mozilla.org/en-US/docs/Web/API/History_API#Moving_to_a_specific_point_in_history
|
||||
*/
|
||||
historyGo(relativePosition = 0) {
|
||||
this._locationStrategy.historyGo?.(relativePosition);
|
||||
}
|
||||
/**
|
||||
* Registers a URL change listener. Use to catch updates performed by the Angular
|
||||
* framework that are not detectible through "popstate" or "hashchange" events.
|
||||
*
|
||||
* @param fn The change handler function, which take a URL and a location history state.
|
||||
* @returns A function that, when executed, unregisters a URL change listener.
|
||||
*/
|
||||
onUrlChange(fn) {
|
||||
this._urlChangeListeners.push(fn);
|
||||
this._urlChangeSubscription ??= this.subscribe((v) => {
|
||||
this._notifyUrlChangeListeners(v.url, v.state);
|
||||
});
|
||||
return () => {
|
||||
const fnIndex = this._urlChangeListeners.indexOf(fn);
|
||||
this._urlChangeListeners.splice(fnIndex, 1);
|
||||
if (this._urlChangeListeners.length === 0) {
|
||||
this._urlChangeSubscription?.unsubscribe();
|
||||
this._urlChangeSubscription = null;
|
||||
}
|
||||
};
|
||||
}
|
||||
/** @internal */
|
||||
_notifyUrlChangeListeners(url = '', state) {
|
||||
this._urlChangeListeners.forEach((fn) => fn(url, state));
|
||||
}
|
||||
/**
|
||||
* Subscribes to the platform's `popState` events.
|
||||
*
|
||||
* Note: `Location.go()` does not trigger the `popState` event in the browser. Use
|
||||
* `Location.onUrlChange()` to subscribe to URL changes instead.
|
||||
*
|
||||
* @param value Event that is triggered when the state history changes.
|
||||
* @param exception The exception to throw.
|
||||
*
|
||||
* @see [onpopstate](https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate)
|
||||
*
|
||||
* @returns Subscribed events.
|
||||
*/
|
||||
subscribe(onNext, onThrow, onReturn) {
|
||||
return this._subject.subscribe({
|
||||
next: onNext,
|
||||
error: onThrow ?? undefined,
|
||||
complete: onReturn ?? undefined,
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Normalizes URL parameters by prepending with `?` if needed.
|
||||
*
|
||||
* @param params String of URL parameters.
|
||||
*
|
||||
* @returns The normalized URL parameters string.
|
||||
*/
|
||||
static normalizeQueryParams = normalizeQueryParams;
|
||||
/**
|
||||
* Joins two parts of a URL with a slash if needed.
|
||||
*
|
||||
* @param start URL string
|
||||
* @param end URL string
|
||||
*
|
||||
*
|
||||
* @returns The joined URL string.
|
||||
*/
|
||||
static joinWithSlash = joinWithSlash;
|
||||
/**
|
||||
* Removes a trailing slash from a URL string if needed.
|
||||
* Looks for the first occurrence of either `#`, `?`, or the end of the
|
||||
* line as `/` characters and removes the trailing slash if one exists.
|
||||
*
|
||||
* @param url URL string.
|
||||
*
|
||||
* @returns The URL string, modified if needed.
|
||||
*/
|
||||
static stripTrailingSlash = stripTrailingSlash;
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: Location, deps: [{ token: LocationStrategy }], target: i0.ɵɵFactoryTarget.Injectable });
|
||||
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: Location, providedIn: 'root', useFactory: createLocation });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: Location, decorators: [{
|
||||
type: Injectable,
|
||||
args: [{
|
||||
providedIn: 'root',
|
||||
// See #23917
|
||||
useFactory: createLocation,
|
||||
}]
|
||||
}], ctorParameters: () => [{ type: LocationStrategy }] });
|
||||
function createLocation() {
|
||||
return new Location(__inject(LocationStrategy));
|
||||
}
|
||||
function _stripBasePath(basePath, url) {
|
||||
if (!basePath || !url.startsWith(basePath)) {
|
||||
return url;
|
||||
}
|
||||
const strippedUrl = url.substring(basePath.length);
|
||||
if (strippedUrl === '' || ['/', ';', '?', '#'].includes(strippedUrl[0])) {
|
||||
return strippedUrl;
|
||||
}
|
||||
return url;
|
||||
}
|
||||
function _stripIndexHtml(url) {
|
||||
return url.replace(/\/index.html$/, '');
|
||||
}
|
||||
function _stripOrigin(baseHref) {
|
||||
// DO NOT REFACTOR! Previously, this check looked like this:
|
||||
// `/^(https?:)?\/\//.test(baseHref)`, but that resulted in
|
||||
// syntactically incorrect code after Closure Compiler minification.
|
||||
// This was likely caused by a bug in Closure Compiler, but
|
||||
// for now, the check is rewritten to use `new RegExp` instead.
|
||||
const isAbsoluteUrl = new RegExp('^(https?:)?//').test(baseHref);
|
||||
if (isAbsoluteUrl) {
|
||||
const [, pathname] = baseHref.split(/\/\/[^\/]+/);
|
||||
return pathname;
|
||||
}
|
||||
return baseHref;
|
||||
}
|
||||
|
||||
export { APP_BASE_HREF, BrowserPlatformLocation, DomAdapter, LOCATION_INITIALIZED, Location, LocationStrategy, PathLocationStrategy, PlatformLocation, getDOM, joinWithSlash, normalizeQueryParams, setRootDomAdapter };
|
||||
//# sourceMappingURL=location.mjs.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/location.mjs.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/location.mjs.map
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
3121
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/module.mjs
generated
vendored
Executable file
3121
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/module.mjs
generated
vendored
Executable file
File diff suppressed because it is too large
Load diff
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/module.mjs.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/module.mjs.map
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
24
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/platform_navigation.mjs
generated
vendored
Executable file
24
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/platform_navigation.mjs
generated
vendored
Executable file
|
@ -0,0 +1,24 @@
|
|||
/**
|
||||
* @license Angular v20.1.6
|
||||
* (c) 2010-2025 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
import * as i0 from '@angular/core';
|
||||
import { Injectable } from '@angular/core';
|
||||
|
||||
/**
|
||||
* This class wraps the platform Navigation API which allows server-specific and test
|
||||
* implementations.
|
||||
*/
|
||||
class PlatformNavigation {
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: PlatformNavigation, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
||||
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: PlatformNavigation, providedIn: 'platform', useFactory: () => window.navigation });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: PlatformNavigation, decorators: [{
|
||||
type: Injectable,
|
||||
args: [{ providedIn: 'platform', useFactory: () => window.navigation }]
|
||||
}] });
|
||||
|
||||
export { PlatformNavigation };
|
||||
//# sourceMappingURL=platform_navigation.mjs.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/platform_navigation.mjs.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/platform_navigation.mjs.map
generated
vendored
Executable file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"platform_navigation.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-46c76129e412/bin/packages/common/src/navigation/platform_navigation.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n Injectable,\n ɵNavigateEvent as NavigateEvent,\n ɵNavigation as Navigation,\n ɵNavigationCurrentEntryChangeEvent as NavigationCurrentEntryChangeEvent,\n ɵNavigationHistoryEntry as NavigationHistoryEntry,\n ɵNavigationNavigateOptions as NavigationNavigateOptions,\n ɵNavigationOptions as NavigationOptions,\n ɵNavigationReloadOptions as NavigationReloadOptions,\n ɵNavigationResult as NavigationResult,\n ɵNavigationTransition as NavigationTransition,\n ɵNavigationUpdateCurrentEntryOptions as NavigationUpdateCurrentEntryOptions,\n} from '@angular/core';\n\n/**\n * This class wraps the platform Navigation API which allows server-specific and test\n * implementations.\n */\n@Injectable({providedIn: 'platform', useFactory: () => (window as any).navigation})\nexport abstract class PlatformNavigation implements Navigation {\n abstract entries(): NavigationHistoryEntry[];\n abstract currentEntry: NavigationHistoryEntry | null;\n abstract updateCurrentEntry(options: NavigationUpdateCurrentEntryOptions): void;\n abstract transition: NavigationTransition | null;\n abstract canGoBack: boolean;\n abstract canGoForward: boolean;\n abstract navigate(url: string, options?: NavigationNavigateOptions | undefined): NavigationResult;\n abstract reload(options?: NavigationReloadOptions | undefined): NavigationResult;\n abstract traverseTo(key: string, options?: NavigationOptions | undefined): NavigationResult;\n abstract back(options?: NavigationOptions | undefined): NavigationResult;\n abstract forward(options?: NavigationOptions | undefined): NavigationResult;\n abstract onnavigate: ((this: Navigation, ev: NavigateEvent) => any) | null;\n abstract onnavigatesuccess: ((this: Navigation, ev: Event) => any) | null;\n abstract onnavigateerror: ((this: Navigation, ev: ErrorEvent) => any) | null;\n abstract oncurrententrychange:\n | ((this: Navigation, ev: NavigationCurrentEntryChangeEvent) => any)\n | null;\n abstract addEventListener(type: unknown, listener: unknown, options?: unknown): void;\n abstract removeEventListener(type: unknown, listener: unknown, options?: unknown): void;\n abstract dispatchEvent(event: Event): boolean;\n}\n"],"names":[],"mappings":";;;;;;;;;AAsBA;;;AAGG;MAEmB,kBAAkB,CAAA;kHAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;sHAAlB,kBAAkB,EAAA,UAAA,EADf,UAAU,EAAc,UAAA,EAAA,MAAO,MAAc,CAAC,UAAU,EAAA,CAAA;;sGAC3D,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA,EAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAO,MAAc,CAAC,UAAU,EAAC;;;;;"}
|
596
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/testing.mjs
generated
vendored
Executable file
596
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/testing.mjs
generated
vendored
Executable file
|
@ -0,0 +1,596 @@
|
|||
/**
|
||||
* @license Angular v20.1.6
|
||||
* (c) 2010-2025 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
import { ɵnormalizeQueryParams as _normalizeQueryParams, LocationStrategy } from '@angular/common';
|
||||
import * as i0 from '@angular/core';
|
||||
import { InjectionToken, Injectable, Inject, Optional, inject, DOCUMENT } from '@angular/core';
|
||||
import { Subject } from 'rxjs';
|
||||
import { PlatformNavigation } from './platform_navigation.mjs';
|
||||
import { ɵFakeNavigation as _FakeNavigation } from '@angular/core/testing';
|
||||
export { ɵFakeNavigation } from '@angular/core/testing';
|
||||
import { PlatformLocation, Location, LocationStrategy as LocationStrategy$1 } from './location.mjs';
|
||||
|
||||
/**
|
||||
* Parser from https://tools.ietf.org/html/rfc3986#appendix-B
|
||||
* ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
|
||||
* 12 3 4 5 6 7 8 9
|
||||
*
|
||||
* Example: http://www.ics.uci.edu/pub/ietf/uri/#Related
|
||||
*
|
||||
* Results in:
|
||||
*
|
||||
* $1 = http:
|
||||
* $2 = http
|
||||
* $3 = //www.ics.uci.edu
|
||||
* $4 = www.ics.uci.edu
|
||||
* $5 = /pub/ietf/uri/
|
||||
* $6 = <undefined>
|
||||
* $7 = <undefined>
|
||||
* $8 = #Related
|
||||
* $9 = Related
|
||||
*/
|
||||
const urlParse = /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
|
||||
function parseUrl(urlStr, baseHref) {
|
||||
const verifyProtocol = /^((http[s]?|ftp):\/\/)/;
|
||||
let serverBase;
|
||||
// URL class requires full URL. If the URL string doesn't start with protocol, we need to add
|
||||
// an arbitrary base URL which can be removed afterward.
|
||||
if (!verifyProtocol.test(urlStr)) {
|
||||
serverBase = 'http://empty.com/';
|
||||
}
|
||||
let parsedUrl;
|
||||
try {
|
||||
parsedUrl = new URL(urlStr, serverBase);
|
||||
}
|
||||
catch (e) {
|
||||
const result = urlParse.exec(serverBase || '' + urlStr);
|
||||
if (!result) {
|
||||
throw new Error(`Invalid URL: ${urlStr} with base: ${baseHref}`);
|
||||
}
|
||||
const hostSplit = result[4].split(':');
|
||||
parsedUrl = {
|
||||
protocol: result[1],
|
||||
hostname: hostSplit[0],
|
||||
port: hostSplit[1] || '',
|
||||
pathname: result[5],
|
||||
search: result[6],
|
||||
hash: result[8],
|
||||
};
|
||||
}
|
||||
if (parsedUrl.pathname && parsedUrl.pathname.indexOf(baseHref) === 0) {
|
||||
parsedUrl.pathname = parsedUrl.pathname.substring(baseHref.length);
|
||||
}
|
||||
return {
|
||||
hostname: (!serverBase && parsedUrl.hostname) || '',
|
||||
protocol: (!serverBase && parsedUrl.protocol) || '',
|
||||
port: (!serverBase && parsedUrl.port) || '',
|
||||
pathname: parsedUrl.pathname || '/',
|
||||
search: parsedUrl.search || '',
|
||||
hash: parsedUrl.hash || '',
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Provider for mock platform location config
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
const MOCK_PLATFORM_LOCATION_CONFIG = new InjectionToken('MOCK_PLATFORM_LOCATION_CONFIG');
|
||||
/**
|
||||
* Mock implementation of URL state.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class MockPlatformLocation {
|
||||
baseHref = '';
|
||||
hashUpdate = new Subject();
|
||||
popStateSubject = new Subject();
|
||||
urlChangeIndex = 0;
|
||||
urlChanges = [{ hostname: '', protocol: '', port: '', pathname: '/', search: '', hash: '', state: null }];
|
||||
constructor(config) {
|
||||
if (config) {
|
||||
this.baseHref = config.appBaseHref || '';
|
||||
const parsedChanges = this.parseChanges(null, config.startUrl || 'http://_empty_/', this.baseHref);
|
||||
this.urlChanges[0] = { ...parsedChanges };
|
||||
}
|
||||
}
|
||||
get hostname() {
|
||||
return this.urlChanges[this.urlChangeIndex].hostname;
|
||||
}
|
||||
get protocol() {
|
||||
return this.urlChanges[this.urlChangeIndex].protocol;
|
||||
}
|
||||
get port() {
|
||||
return this.urlChanges[this.urlChangeIndex].port;
|
||||
}
|
||||
get pathname() {
|
||||
return this.urlChanges[this.urlChangeIndex].pathname;
|
||||
}
|
||||
get search() {
|
||||
return this.urlChanges[this.urlChangeIndex].search;
|
||||
}
|
||||
get hash() {
|
||||
return this.urlChanges[this.urlChangeIndex].hash;
|
||||
}
|
||||
get state() {
|
||||
return this.urlChanges[this.urlChangeIndex].state;
|
||||
}
|
||||
getBaseHrefFromDOM() {
|
||||
return this.baseHref;
|
||||
}
|
||||
onPopState(fn) {
|
||||
const subscription = this.popStateSubject.subscribe(fn);
|
||||
return () => subscription.unsubscribe();
|
||||
}
|
||||
onHashChange(fn) {
|
||||
const subscription = this.hashUpdate.subscribe(fn);
|
||||
return () => subscription.unsubscribe();
|
||||
}
|
||||
get href() {
|
||||
let url = `${this.protocol}//${this.hostname}${this.port ? ':' + this.port : ''}`;
|
||||
url += `${this.pathname === '/' ? '' : this.pathname}${this.search}${this.hash}`;
|
||||
return url;
|
||||
}
|
||||
get url() {
|
||||
return `${this.pathname}${this.search}${this.hash}`;
|
||||
}
|
||||
parseChanges(state, url, baseHref = '') {
|
||||
// When the `history.state` value is stored, it is always copied.
|
||||
state = JSON.parse(JSON.stringify(state));
|
||||
return { ...parseUrl(url, baseHref), state };
|
||||
}
|
||||
replaceState(state, title, newUrl) {
|
||||
const { pathname, search, state: parsedState, hash } = this.parseChanges(state, newUrl);
|
||||
this.urlChanges[this.urlChangeIndex] = {
|
||||
...this.urlChanges[this.urlChangeIndex],
|
||||
pathname,
|
||||
search,
|
||||
hash,
|
||||
state: parsedState,
|
||||
};
|
||||
}
|
||||
pushState(state, title, newUrl) {
|
||||
const { pathname, search, state: parsedState, hash } = this.parseChanges(state, newUrl);
|
||||
if (this.urlChangeIndex > 0) {
|
||||
this.urlChanges.splice(this.urlChangeIndex + 1);
|
||||
}
|
||||
this.urlChanges.push({
|
||||
...this.urlChanges[this.urlChangeIndex],
|
||||
pathname,
|
||||
search,
|
||||
hash,
|
||||
state: parsedState,
|
||||
});
|
||||
this.urlChangeIndex = this.urlChanges.length - 1;
|
||||
}
|
||||
forward() {
|
||||
const oldUrl = this.url;
|
||||
const oldHash = this.hash;
|
||||
if (this.urlChangeIndex < this.urlChanges.length) {
|
||||
this.urlChangeIndex++;
|
||||
}
|
||||
this.emitEvents(oldHash, oldUrl);
|
||||
}
|
||||
back() {
|
||||
const oldUrl = this.url;
|
||||
const oldHash = this.hash;
|
||||
if (this.urlChangeIndex > 0) {
|
||||
this.urlChangeIndex--;
|
||||
}
|
||||
this.emitEvents(oldHash, oldUrl);
|
||||
}
|
||||
historyGo(relativePosition = 0) {
|
||||
const oldUrl = this.url;
|
||||
const oldHash = this.hash;
|
||||
const nextPageIndex = this.urlChangeIndex + relativePosition;
|
||||
if (nextPageIndex >= 0 && nextPageIndex < this.urlChanges.length) {
|
||||
this.urlChangeIndex = nextPageIndex;
|
||||
}
|
||||
this.emitEvents(oldHash, oldUrl);
|
||||
}
|
||||
getState() {
|
||||
return this.state;
|
||||
}
|
||||
/**
|
||||
* Browsers are inconsistent in when they fire events and perform the state updates
|
||||
* The most easiest thing to do in our mock is synchronous and that happens to match
|
||||
* Firefox and Chrome, at least somewhat closely
|
||||
*
|
||||
* https://github.com/WICG/navigation-api#watching-for-navigations
|
||||
* https://docs.google.com/document/d/1Pdve-DJ1JCGilj9Yqf5HxRJyBKSel5owgOvUJqTauwU/edit#heading=h.3ye4v71wsz94
|
||||
* popstate is always sent before hashchange:
|
||||
* https://developer.mozilla.org/en-US/docs/Web/API/Window/popstate_event#when_popstate_is_sent
|
||||
*/
|
||||
emitEvents(oldHash, oldUrl) {
|
||||
this.popStateSubject.next({
|
||||
type: 'popstate',
|
||||
state: this.getState(),
|
||||
oldUrl,
|
||||
newUrl: this.url,
|
||||
});
|
||||
if (oldHash !== this.hash) {
|
||||
this.hashUpdate.next({
|
||||
type: 'hashchange',
|
||||
state: null,
|
||||
oldUrl,
|
||||
newUrl: this.url,
|
||||
});
|
||||
}
|
||||
}
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MockPlatformLocation, deps: [{ token: MOCK_PLATFORM_LOCATION_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
||||
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MockPlatformLocation });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MockPlatformLocation, decorators: [{
|
||||
type: Injectable
|
||||
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
||||
type: Inject,
|
||||
args: [MOCK_PLATFORM_LOCATION_CONFIG]
|
||||
}, {
|
||||
type: Optional
|
||||
}] }] });
|
||||
/**
|
||||
* Mock implementation of URL state.
|
||||
*/
|
||||
class FakeNavigationPlatformLocation {
|
||||
_platformNavigation;
|
||||
constructor() {
|
||||
const platformNavigation = inject(PlatformNavigation);
|
||||
if (!(platformNavigation instanceof _FakeNavigation)) {
|
||||
throw new Error('FakePlatformNavigation cannot be used without FakeNavigation. Use ' +
|
||||
'`provideFakeNavigation` to have all these services provided together.');
|
||||
}
|
||||
this._platformNavigation = platformNavigation;
|
||||
}
|
||||
config = inject(MOCK_PLATFORM_LOCATION_CONFIG, { optional: true });
|
||||
getBaseHrefFromDOM() {
|
||||
return this.config?.appBaseHref ?? '';
|
||||
}
|
||||
onPopState(fn) {
|
||||
this._platformNavigation.window.addEventListener('popstate', fn);
|
||||
return () => this._platformNavigation.window.removeEventListener('popstate', fn);
|
||||
}
|
||||
onHashChange(fn) {
|
||||
this._platformNavigation.window.addEventListener('hashchange', fn);
|
||||
return () => this._platformNavigation.window.removeEventListener('hashchange', fn);
|
||||
}
|
||||
get href() {
|
||||
return this._platformNavigation.currentEntry.url;
|
||||
}
|
||||
get protocol() {
|
||||
return new URL(this._platformNavigation.currentEntry.url).protocol;
|
||||
}
|
||||
get hostname() {
|
||||
return new URL(this._platformNavigation.currentEntry.url).hostname;
|
||||
}
|
||||
get port() {
|
||||
return new URL(this._platformNavigation.currentEntry.url).port;
|
||||
}
|
||||
get pathname() {
|
||||
return new URL(this._platformNavigation.currentEntry.url).pathname;
|
||||
}
|
||||
get search() {
|
||||
return new URL(this._platformNavigation.currentEntry.url).search;
|
||||
}
|
||||
get hash() {
|
||||
return new URL(this._platformNavigation.currentEntry.url).hash;
|
||||
}
|
||||
pushState(state, title, url) {
|
||||
this._platformNavigation.pushState(state, title, url);
|
||||
}
|
||||
replaceState(state, title, url) {
|
||||
this._platformNavigation.replaceState(state, title, url);
|
||||
}
|
||||
forward() {
|
||||
this._platformNavigation.forward();
|
||||
}
|
||||
back() {
|
||||
this._platformNavigation.back();
|
||||
}
|
||||
historyGo(relativePosition = 0) {
|
||||
this._platformNavigation.go(relativePosition);
|
||||
}
|
||||
getState() {
|
||||
return this._platformNavigation.currentEntry.getHistoryState();
|
||||
}
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: FakeNavigationPlatformLocation, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
||||
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: FakeNavigationPlatformLocation });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: FakeNavigationPlatformLocation, decorators: [{
|
||||
type: Injectable
|
||||
}], ctorParameters: () => [] });
|
||||
|
||||
const FAKE_NAVIGATION = new InjectionToken('fakeNavigation', {
|
||||
providedIn: 'root',
|
||||
factory: () => {
|
||||
const config = inject(MOCK_PLATFORM_LOCATION_CONFIG, { optional: true });
|
||||
const baseFallback = 'http://_empty_/';
|
||||
const startUrl = new URL(config?.startUrl || baseFallback, baseFallback);
|
||||
const fakeNavigation = new _FakeNavigation(inject(DOCUMENT), startUrl.href);
|
||||
fakeNavigation.setSynchronousTraversalsForTesting(true);
|
||||
return fakeNavigation;
|
||||
},
|
||||
});
|
||||
/**
|
||||
* Return a provider for the `FakeNavigation` in place of the real Navigation API.
|
||||
*/
|
||||
function provideFakePlatformNavigation() {
|
||||
return [
|
||||
{
|
||||
provide: PlatformNavigation,
|
||||
useFactory: () => inject(FAKE_NAVIGATION),
|
||||
},
|
||||
{ provide: PlatformLocation, useClass: FakeNavigationPlatformLocation },
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* A spy for {@link Location} that allows tests to fire simulated location events.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class SpyLocation {
|
||||
urlChanges = [];
|
||||
_history = [new LocationState('', '', null)];
|
||||
_historyIndex = 0;
|
||||
/** @internal */
|
||||
_subject = new Subject();
|
||||
/** @internal */
|
||||
_basePath = '';
|
||||
/** @internal */
|
||||
_locationStrategy = null;
|
||||
/** @internal */
|
||||
_urlChangeListeners = [];
|
||||
/** @internal */
|
||||
_urlChangeSubscription = null;
|
||||
/** @docs-private */
|
||||
ngOnDestroy() {
|
||||
this._urlChangeSubscription?.unsubscribe();
|
||||
this._urlChangeListeners = [];
|
||||
}
|
||||
setInitialPath(url) {
|
||||
this._history[this._historyIndex].path = url;
|
||||
}
|
||||
setBaseHref(url) {
|
||||
this._basePath = url;
|
||||
}
|
||||
path() {
|
||||
return this._history[this._historyIndex].path;
|
||||
}
|
||||
getState() {
|
||||
return this._history[this._historyIndex].state;
|
||||
}
|
||||
isCurrentPathEqualTo(path, query = '') {
|
||||
const givenPath = path.endsWith('/') ? path.substring(0, path.length - 1) : path;
|
||||
const currPath = this.path().endsWith('/')
|
||||
? this.path().substring(0, this.path().length - 1)
|
||||
: this.path();
|
||||
return currPath == givenPath + (query.length > 0 ? '?' + query : '');
|
||||
}
|
||||
simulateUrlPop(pathname) {
|
||||
this._subject.next({ 'url': pathname, 'pop': true, 'type': 'popstate' });
|
||||
}
|
||||
simulateHashChange(pathname) {
|
||||
const path = this.prepareExternalUrl(pathname);
|
||||
this.pushHistory(path, '', null);
|
||||
this.urlChanges.push('hash: ' + pathname);
|
||||
// the browser will automatically fire popstate event before each `hashchange` event, so we need
|
||||
// to simulate it.
|
||||
this._subject.next({ 'url': pathname, 'pop': true, 'type': 'popstate' });
|
||||
this._subject.next({ 'url': pathname, 'pop': true, 'type': 'hashchange' });
|
||||
}
|
||||
prepareExternalUrl(url) {
|
||||
if (url.length > 0 && !url.startsWith('/')) {
|
||||
url = '/' + url;
|
||||
}
|
||||
return this._basePath + url;
|
||||
}
|
||||
go(path, query = '', state = null) {
|
||||
path = this.prepareExternalUrl(path);
|
||||
this.pushHistory(path, query, state);
|
||||
const locationState = this._history[this._historyIndex - 1];
|
||||
if (locationState.path == path && locationState.query == query) {
|
||||
return;
|
||||
}
|
||||
const url = path + (query.length > 0 ? '?' + query : '');
|
||||
this.urlChanges.push(url);
|
||||
this._notifyUrlChangeListeners(path + _normalizeQueryParams(query), state);
|
||||
}
|
||||
replaceState(path, query = '', state = null) {
|
||||
path = this.prepareExternalUrl(path);
|
||||
const history = this._history[this._historyIndex];
|
||||
history.state = state;
|
||||
if (history.path == path && history.query == query) {
|
||||
return;
|
||||
}
|
||||
history.path = path;
|
||||
history.query = query;
|
||||
const url = path + (query.length > 0 ? '?' + query : '');
|
||||
this.urlChanges.push('replace: ' + url);
|
||||
this._notifyUrlChangeListeners(path + _normalizeQueryParams(query), state);
|
||||
}
|
||||
forward() {
|
||||
if (this._historyIndex < this._history.length - 1) {
|
||||
this._historyIndex++;
|
||||
this._subject.next({
|
||||
'url': this.path(),
|
||||
'state': this.getState(),
|
||||
'pop': true,
|
||||
'type': 'popstate',
|
||||
});
|
||||
}
|
||||
}
|
||||
back() {
|
||||
if (this._historyIndex > 0) {
|
||||
this._historyIndex--;
|
||||
this._subject.next({
|
||||
'url': this.path(),
|
||||
'state': this.getState(),
|
||||
'pop': true,
|
||||
'type': 'popstate',
|
||||
});
|
||||
}
|
||||
}
|
||||
historyGo(relativePosition = 0) {
|
||||
const nextPageIndex = this._historyIndex + relativePosition;
|
||||
if (nextPageIndex >= 0 && nextPageIndex < this._history.length) {
|
||||
this._historyIndex = nextPageIndex;
|
||||
this._subject.next({
|
||||
'url': this.path(),
|
||||
'state': this.getState(),
|
||||
'pop': true,
|
||||
'type': 'popstate',
|
||||
});
|
||||
}
|
||||
}
|
||||
onUrlChange(fn) {
|
||||
this._urlChangeListeners.push(fn);
|
||||
this._urlChangeSubscription ??= this.subscribe((v) => {
|
||||
this._notifyUrlChangeListeners(v.url, v.state);
|
||||
});
|
||||
return () => {
|
||||
const fnIndex = this._urlChangeListeners.indexOf(fn);
|
||||
this._urlChangeListeners.splice(fnIndex, 1);
|
||||
if (this._urlChangeListeners.length === 0) {
|
||||
this._urlChangeSubscription?.unsubscribe();
|
||||
this._urlChangeSubscription = null;
|
||||
}
|
||||
};
|
||||
}
|
||||
/** @internal */
|
||||
_notifyUrlChangeListeners(url = '', state) {
|
||||
this._urlChangeListeners.forEach((fn) => fn(url, state));
|
||||
}
|
||||
subscribe(onNext, onThrow, onReturn) {
|
||||
return this._subject.subscribe({
|
||||
next: onNext,
|
||||
error: onThrow ?? undefined,
|
||||
complete: onReturn ?? undefined,
|
||||
});
|
||||
}
|
||||
normalize(url) {
|
||||
return null;
|
||||
}
|
||||
pushHistory(path, query, state) {
|
||||
if (this._historyIndex > 0) {
|
||||
this._history.splice(this._historyIndex + 1);
|
||||
}
|
||||
this._history.push(new LocationState(path, query, state));
|
||||
this._historyIndex = this._history.length - 1;
|
||||
}
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: SpyLocation, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
||||
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: SpyLocation });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: SpyLocation, decorators: [{
|
||||
type: Injectable
|
||||
}] });
|
||||
class LocationState {
|
||||
path;
|
||||
query;
|
||||
state;
|
||||
constructor(path, query, state) {
|
||||
this.path = path;
|
||||
this.query = query;
|
||||
this.state = state;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A mock implementation of {@link LocationStrategy} that allows tests to fire simulated
|
||||
* location events.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class MockLocationStrategy extends LocationStrategy {
|
||||
internalBaseHref = '/';
|
||||
internalPath = '/';
|
||||
internalTitle = '';
|
||||
urlChanges = [];
|
||||
/** @internal */
|
||||
_subject = new Subject();
|
||||
stateChanges = [];
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
simulatePopState(url) {
|
||||
this.internalPath = url;
|
||||
this._subject.next(new _MockPopStateEvent(this.path()));
|
||||
}
|
||||
path(includeHash = false) {
|
||||
return this.internalPath;
|
||||
}
|
||||
prepareExternalUrl(internal) {
|
||||
if (internal.startsWith('/') && this.internalBaseHref.endsWith('/')) {
|
||||
return this.internalBaseHref + internal.substring(1);
|
||||
}
|
||||
return this.internalBaseHref + internal;
|
||||
}
|
||||
pushState(ctx, title, path, query) {
|
||||
// Add state change to changes array
|
||||
this.stateChanges.push(ctx);
|
||||
this.internalTitle = title;
|
||||
const url = path + (query.length > 0 ? '?' + query : '');
|
||||
this.internalPath = url;
|
||||
const externalUrl = this.prepareExternalUrl(url);
|
||||
this.urlChanges.push(externalUrl);
|
||||
}
|
||||
replaceState(ctx, title, path, query) {
|
||||
// Reset the last index of stateChanges to the ctx (state) object
|
||||
this.stateChanges[(this.stateChanges.length || 1) - 1] = ctx;
|
||||
this.internalTitle = title;
|
||||
const url = path + (query.length > 0 ? '?' + query : '');
|
||||
this.internalPath = url;
|
||||
const externalUrl = this.prepareExternalUrl(url);
|
||||
this.urlChanges.push('replace: ' + externalUrl);
|
||||
}
|
||||
onPopState(fn) {
|
||||
this._subject.subscribe({ next: fn });
|
||||
}
|
||||
getBaseHref() {
|
||||
return this.internalBaseHref;
|
||||
}
|
||||
back() {
|
||||
if (this.urlChanges.length > 0) {
|
||||
this.urlChanges.pop();
|
||||
this.stateChanges.pop();
|
||||
const nextUrl = this.urlChanges.length > 0 ? this.urlChanges[this.urlChanges.length - 1] : '';
|
||||
this.simulatePopState(nextUrl);
|
||||
}
|
||||
}
|
||||
forward() {
|
||||
throw 'not implemented';
|
||||
}
|
||||
getState() {
|
||||
return this.stateChanges[(this.stateChanges.length || 1) - 1];
|
||||
}
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MockLocationStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
||||
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MockLocationStrategy });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MockLocationStrategy, decorators: [{
|
||||
type: Injectable
|
||||
}], ctorParameters: () => [] });
|
||||
class _MockPopStateEvent {
|
||||
newUrl;
|
||||
pop = true;
|
||||
type = 'popstate';
|
||||
constructor(newUrl) {
|
||||
this.newUrl = newUrl;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns mock providers for the `Location` and `LocationStrategy` classes.
|
||||
* The mocks are helpful in tests to fire simulated location events.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
function provideLocationMocks() {
|
||||
return [
|
||||
{ provide: Location, useClass: SpyLocation },
|
||||
{ provide: LocationStrategy$1, useClass: MockLocationStrategy },
|
||||
];
|
||||
}
|
||||
|
||||
export { MOCK_PLATFORM_LOCATION_CONFIG, MockLocationStrategy, MockPlatformLocation, SpyLocation, provideLocationMocks, provideFakePlatformNavigation as ɵprovideFakePlatformNavigation };
|
||||
//# sourceMappingURL=testing.mjs.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/testing.mjs.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/testing.mjs.map
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
899
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/upgrade.mjs
generated
vendored
Executable file
899
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/upgrade.mjs
generated
vendored
Executable file
|
@ -0,0 +1,899 @@
|
|||
/**
|
||||
* @license Angular v20.1.6
|
||||
* (c) 2010-2025 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
import * as i0 from '@angular/core';
|
||||
import { ɵisPromise as _isPromise, InjectionToken, Inject, Optional, NgModule } from '@angular/core';
|
||||
import { ReplaySubject } from 'rxjs';
|
||||
import { UpgradeModule } from '@angular/upgrade/static';
|
||||
import { Location, PlatformLocation, LocationStrategy, APP_BASE_HREF, PathLocationStrategy } from './location.mjs';
|
||||
import { CommonModule, HashLocationStrategy } from './common_module.mjs';
|
||||
|
||||
function deepEqual(a, b) {
|
||||
if (a === b) {
|
||||
return true;
|
||||
}
|
||||
else if (!a || !b) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
try {
|
||||
if (a.prototype !== b.prototype || (Array.isArray(a) && Array.isArray(b))) {
|
||||
return false;
|
||||
}
|
||||
return JSON.stringify(a) === JSON.stringify(b);
|
||||
}
|
||||
catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
function isAnchor(el) {
|
||||
return el.href !== undefined;
|
||||
}
|
||||
|
||||
const PATH_MATCH = /^([^?#]*)(\?([^#]*))?(#(.*))?$/;
|
||||
const DOUBLE_SLASH_REGEX = /^\s*[\\/]{2,}/;
|
||||
const IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i;
|
||||
const DEFAULT_PORTS = {
|
||||
'http:': 80,
|
||||
'https:': 443,
|
||||
'ftp:': 21,
|
||||
};
|
||||
/**
|
||||
* Location service that provides a drop-in replacement for the $location service
|
||||
* provided in AngularJS.
|
||||
*
|
||||
* @see [Using the Angular Unified Location Service](guide/upgrade#using-the-unified-angular-location-service)
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class $locationShim {
|
||||
location;
|
||||
platformLocation;
|
||||
urlCodec;
|
||||
locationStrategy;
|
||||
initializing = true;
|
||||
updateBrowser = false;
|
||||
$$absUrl = '';
|
||||
$$url = '';
|
||||
$$protocol;
|
||||
$$host = '';
|
||||
$$port;
|
||||
$$replace = false;
|
||||
$$path = '';
|
||||
$$search = '';
|
||||
$$hash = '';
|
||||
$$state;
|
||||
$$changeListeners = [];
|
||||
cachedState = null;
|
||||
urlChanges = new ReplaySubject(1);
|
||||
removeOnUrlChangeFn;
|
||||
constructor($injector, location, platformLocation, urlCodec, locationStrategy) {
|
||||
this.location = location;
|
||||
this.platformLocation = platformLocation;
|
||||
this.urlCodec = urlCodec;
|
||||
this.locationStrategy = locationStrategy;
|
||||
const initialUrl = this.browserUrl();
|
||||
let parsedUrl = this.urlCodec.parse(initialUrl);
|
||||
if (typeof parsedUrl === 'string') {
|
||||
throw 'Invalid URL';
|
||||
}
|
||||
this.$$protocol = parsedUrl.protocol;
|
||||
this.$$host = parsedUrl.hostname;
|
||||
this.$$port = parseInt(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;
|
||||
this.$$parseLinkUrl(initialUrl, initialUrl);
|
||||
this.cacheState();
|
||||
this.$$state = this.browserState();
|
||||
this.removeOnUrlChangeFn = this.location.onUrlChange((newUrl, newState) => {
|
||||
this.urlChanges.next({ newUrl, newState });
|
||||
});
|
||||
if (_isPromise($injector)) {
|
||||
$injector.then(($i) => this.initialize($i));
|
||||
}
|
||||
else {
|
||||
this.initialize($injector);
|
||||
}
|
||||
}
|
||||
initialize($injector) {
|
||||
const $rootScope = $injector.get('$rootScope');
|
||||
const $rootElement = $injector.get('$rootElement');
|
||||
$rootElement.on('click', (event) => {
|
||||
if (event.ctrlKey ||
|
||||
event.metaKey ||
|
||||
event.shiftKey ||
|
||||
event.which === 2 ||
|
||||
event.button === 2) {
|
||||
return;
|
||||
}
|
||||
let elm = event.target;
|
||||
// traverse the DOM up to find first A tag
|
||||
while (elm && elm.nodeName.toLowerCase() !== 'a') {
|
||||
// ignore rewriting if no A tag (reached root element, or no parent - removed from document)
|
||||
if (elm === $rootElement[0] || !(elm = elm.parentNode)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!isAnchor(elm)) {
|
||||
return;
|
||||
}
|
||||
const absHref = elm.href;
|
||||
const relHref = elm.getAttribute('href');
|
||||
// Ignore when url is started with javascript: or mailto:
|
||||
if (IGNORE_URI_REGEXP.test(absHref)) {
|
||||
return;
|
||||
}
|
||||
if (absHref && !elm.getAttribute('target') && !event.isDefaultPrevented()) {
|
||||
if (this.$$parseLinkUrl(absHref, relHref)) {
|
||||
// We do a preventDefault for all urls that are part of the AngularJS application,
|
||||
// in html5mode and also without, so that we are able to abort navigation without
|
||||
// getting double entries in the location history.
|
||||
event.preventDefault();
|
||||
// update location manually
|
||||
if (this.absUrl() !== this.browserUrl()) {
|
||||
$rootScope.$apply();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
this.urlChanges.subscribe(({ newUrl, newState }) => {
|
||||
const oldUrl = this.absUrl();
|
||||
const oldState = this.$$state;
|
||||
this.$$parse(newUrl);
|
||||
newUrl = this.absUrl();
|
||||
this.$$state = newState;
|
||||
const defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl, newState, oldState).defaultPrevented;
|
||||
// if the location was changed by a `$locationChangeStart` handler then stop
|
||||
// processing this location change
|
||||
if (this.absUrl() !== newUrl)
|
||||
return;
|
||||
// If default was prevented, set back to old state. This is the state that was locally
|
||||
// cached in the $location service.
|
||||
if (defaultPrevented) {
|
||||
this.$$parse(oldUrl);
|
||||
this.state(oldState);
|
||||
this.setBrowserUrlWithFallback(oldUrl, false, oldState);
|
||||
this.$$notifyChangeListeners(this.url(), this.$$state, oldUrl, oldState);
|
||||
}
|
||||
else {
|
||||
this.initializing = false;
|
||||
$rootScope.$broadcast('$locationChangeSuccess', newUrl, oldUrl, newState, oldState);
|
||||
this.resetBrowserUpdate();
|
||||
}
|
||||
if (!$rootScope.$$phase) {
|
||||
$rootScope.$digest();
|
||||
}
|
||||
});
|
||||
// Synchronize the browser's URL and state with the application.
|
||||
// Note: There is no need to save the `$watch` return value (deregister listener)
|
||||
// into a variable because `$scope.$$watchers` is automatically cleaned up when
|
||||
// the root scope is destroyed.
|
||||
$rootScope.$watch(() => {
|
||||
if (this.initializing || this.updateBrowser) {
|
||||
this.updateBrowser = false;
|
||||
const oldUrl = this.browserUrl();
|
||||
const newUrl = this.absUrl();
|
||||
const oldState = this.browserState();
|
||||
let currentReplace = this.$$replace;
|
||||
const urlOrStateChanged = !this.urlCodec.areEqual(oldUrl, newUrl) || oldState !== this.$$state;
|
||||
// Fire location changes one time to on initialization. This must be done on the
|
||||
// next tick (thus inside $evalAsync()) in order for listeners to be registered
|
||||
// before the event fires. Mimicing behavior from $locationWatch:
|
||||
// https://github.com/angular/angular.js/blob/master/src/ng/location.js#L983
|
||||
if (this.initializing || urlOrStateChanged) {
|
||||
this.initializing = false;
|
||||
$rootScope.$evalAsync(() => {
|
||||
// Get the new URL again since it could have changed due to async update
|
||||
const newUrl = this.absUrl();
|
||||
const defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl, this.$$state, oldState).defaultPrevented;
|
||||
// if the location was changed by a `$locationChangeStart` handler then stop
|
||||
// processing this location change
|
||||
if (this.absUrl() !== newUrl)
|
||||
return;
|
||||
if (defaultPrevented) {
|
||||
this.$$parse(oldUrl);
|
||||
this.$$state = oldState;
|
||||
}
|
||||
else {
|
||||
// This block doesn't run when initializing because it's going to perform the update
|
||||
// to the URL which shouldn't be needed when initializing.
|
||||
if (urlOrStateChanged) {
|
||||
this.setBrowserUrlWithFallback(newUrl, currentReplace, oldState === this.$$state ? null : this.$$state);
|
||||
this.$$replace = false;
|
||||
}
|
||||
$rootScope.$broadcast('$locationChangeSuccess', newUrl, oldUrl, this.$$state, oldState);
|
||||
if (urlOrStateChanged) {
|
||||
this.$$notifyChangeListeners(this.url(), this.$$state, oldUrl, oldState);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
this.$$replace = false;
|
||||
});
|
||||
$rootScope.$on('$destroy', () => {
|
||||
this.removeOnUrlChangeFn();
|
||||
// Complete the subject to release all active observers when the root
|
||||
// scope is destroyed. Before this change, we subscribed to the `urlChanges`
|
||||
// subject, and the subscriber captured `this`, leading to a memory leak
|
||||
// after the root scope was destroyed.
|
||||
this.urlChanges.complete();
|
||||
});
|
||||
}
|
||||
resetBrowserUpdate() {
|
||||
this.$$replace = false;
|
||||
this.$$state = this.browserState();
|
||||
this.updateBrowser = false;
|
||||
this.lastBrowserUrl = this.browserUrl();
|
||||
}
|
||||
lastHistoryState;
|
||||
lastBrowserUrl = '';
|
||||
browserUrl(url, replace, state) {
|
||||
// In modern browsers `history.state` is `null` by default; treating it separately
|
||||
// from `undefined` would cause `$browser.url('/foo')` to change `history.state`
|
||||
// to undefined via `pushState`. Instead, let's change `undefined` to `null` here.
|
||||
if (typeof state === 'undefined') {
|
||||
state = null;
|
||||
}
|
||||
// setter
|
||||
if (url) {
|
||||
let sameState = this.lastHistoryState === state;
|
||||
// Normalize the inputted URL
|
||||
url = this.urlCodec.parse(url).href;
|
||||
// Don't change anything if previous and current URLs and states match.
|
||||
if (this.lastBrowserUrl === url && sameState) {
|
||||
return this;
|
||||
}
|
||||
this.lastBrowserUrl = url;
|
||||
this.lastHistoryState = state;
|
||||
// Remove server base from URL as the Angular APIs for updating URL require
|
||||
// it to be the path+.
|
||||
url = this.stripBaseUrl(this.getServerBase(), url) || url;
|
||||
// Set the URL
|
||||
if (replace) {
|
||||
this.locationStrategy.replaceState(state, '', url, '');
|
||||
}
|
||||
else {
|
||||
this.locationStrategy.pushState(state, '', url, '');
|
||||
}
|
||||
this.cacheState();
|
||||
return this;
|
||||
// getter
|
||||
}
|
||||
else {
|
||||
return this.platformLocation.href;
|
||||
}
|
||||
}
|
||||
// This variable should be used *only* inside the cacheState function.
|
||||
lastCachedState = null;
|
||||
cacheState() {
|
||||
// This should be the only place in $browser where `history.state` is read.
|
||||
this.cachedState = this.platformLocation.getState();
|
||||
if (typeof this.cachedState === 'undefined') {
|
||||
this.cachedState = null;
|
||||
}
|
||||
// Prevent callbacks fo fire twice if both hashchange & popstate were fired.
|
||||
if (deepEqual(this.cachedState, this.lastCachedState)) {
|
||||
this.cachedState = this.lastCachedState;
|
||||
}
|
||||
this.lastCachedState = this.cachedState;
|
||||
this.lastHistoryState = this.cachedState;
|
||||
}
|
||||
/**
|
||||
* This function emulates the $browser.state() function from AngularJS. It will cause
|
||||
* history.state to be cached unless changed with deep equality check.
|
||||
*/
|
||||
browserState() {
|
||||
return this.cachedState;
|
||||
}
|
||||
stripBaseUrl(base, url) {
|
||||
if (url.startsWith(base)) {
|
||||
return url.slice(base.length);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
getServerBase() {
|
||||
const { protocol, hostname, port } = this.platformLocation;
|
||||
const baseHref = this.locationStrategy.getBaseHref();
|
||||
let url = `${protocol}//${hostname}${port ? ':' + port : ''}${baseHref || '/'}`;
|
||||
return url.endsWith('/') ? url : url + '/';
|
||||
}
|
||||
parseAppUrl(url) {
|
||||
if (DOUBLE_SLASH_REGEX.test(url)) {
|
||||
throw new Error(`Bad Path - URL cannot start with double slashes: ${url}`);
|
||||
}
|
||||
let prefixed = url.charAt(0) !== '/';
|
||||
if (prefixed) {
|
||||
url = '/' + url;
|
||||
}
|
||||
let match = this.urlCodec.parse(url, this.getServerBase());
|
||||
if (typeof match === 'string') {
|
||||
throw new Error(`Bad URL - Cannot parse URL: ${url}`);
|
||||
}
|
||||
let path = prefixed && match.pathname.charAt(0) === '/' ? match.pathname.substring(1) : match.pathname;
|
||||
this.$$path = this.urlCodec.decodePath(path);
|
||||
this.$$search = this.urlCodec.decodeSearch(match.search);
|
||||
this.$$hash = this.urlCodec.decodeHash(match.hash);
|
||||
// make sure path starts with '/';
|
||||
if (this.$$path && this.$$path.charAt(0) !== '/') {
|
||||
this.$$path = '/' + this.$$path;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Registers listeners for URL changes. This API is used to catch updates performed by the
|
||||
* AngularJS framework. These changes are a subset of the `$locationChangeStart` and
|
||||
* `$locationChangeSuccess` events which fire when AngularJS updates its internally-referenced
|
||||
* version of the browser URL.
|
||||
*
|
||||
* It's possible for `$locationChange` events to happen, but for the browser URL
|
||||
* (window.location) to remain unchanged. This `onChange` callback will fire only when AngularJS
|
||||
* actually updates the browser URL (window.location).
|
||||
*
|
||||
* @param fn The callback function that is triggered for the listener when the URL changes.
|
||||
* @param err The callback function that is triggered when an error occurs.
|
||||
*/
|
||||
onChange(fn, err = (e) => { }) {
|
||||
this.$$changeListeners.push([fn, err]);
|
||||
}
|
||||
/** @internal */
|
||||
$$notifyChangeListeners(url = '', state, oldUrl = '', oldState) {
|
||||
this.$$changeListeners.forEach(([fn, err]) => {
|
||||
try {
|
||||
fn(url, state, oldUrl, oldState);
|
||||
}
|
||||
catch (e) {
|
||||
err(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Parses the provided URL, and sets the current URL to the parsed result.
|
||||
*
|
||||
* @param url The URL string.
|
||||
*/
|
||||
$$parse(url) {
|
||||
let pathUrl;
|
||||
if (url.startsWith('/')) {
|
||||
pathUrl = url;
|
||||
}
|
||||
else {
|
||||
// Remove protocol & hostname if URL starts with it
|
||||
pathUrl = this.stripBaseUrl(this.getServerBase(), url);
|
||||
}
|
||||
if (typeof pathUrl === 'undefined') {
|
||||
throw new Error(`Invalid url "${url}", missing path prefix "${this.getServerBase()}".`);
|
||||
}
|
||||
this.parseAppUrl(pathUrl);
|
||||
this.$$path ||= '/';
|
||||
this.composeUrls();
|
||||
}
|
||||
/**
|
||||
* Parses the provided URL and its relative URL.
|
||||
*
|
||||
* @param url The full URL string.
|
||||
* @param relHref A URL string relative to the full URL string.
|
||||
*/
|
||||
$$parseLinkUrl(url, relHref) {
|
||||
// When relHref is passed, it should be a hash and is handled separately
|
||||
if (relHref && relHref[0] === '#') {
|
||||
this.hash(relHref.slice(1));
|
||||
return true;
|
||||
}
|
||||
let rewrittenUrl;
|
||||
let appUrl = this.stripBaseUrl(this.getServerBase(), url);
|
||||
if (typeof appUrl !== 'undefined') {
|
||||
rewrittenUrl = this.getServerBase() + appUrl;
|
||||
}
|
||||
else if (this.getServerBase() === url + '/') {
|
||||
rewrittenUrl = this.getServerBase();
|
||||
}
|
||||
// Set the URL
|
||||
if (rewrittenUrl) {
|
||||
this.$$parse(rewrittenUrl);
|
||||
}
|
||||
return !!rewrittenUrl;
|
||||
}
|
||||
setBrowserUrlWithFallback(url, replace, state) {
|
||||
const oldUrl = this.url();
|
||||
const oldState = this.$$state;
|
||||
try {
|
||||
this.browserUrl(url, replace, state);
|
||||
// Make sure $location.state() returns referentially identical (not just deeply equal)
|
||||
// state object; this makes possible quick checking if the state changed in the digest
|
||||
// loop. Checking deep equality would be too expensive.
|
||||
this.$$state = this.browserState();
|
||||
}
|
||||
catch (e) {
|
||||
// Restore old values if pushState fails
|
||||
this.url(oldUrl);
|
||||
this.$$state = oldState;
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
composeUrls() {
|
||||
this.$$url = this.urlCodec.normalize(this.$$path, this.$$search, this.$$hash);
|
||||
this.$$absUrl = this.getServerBase() + this.$$url.slice(1); // remove '/' from front of URL
|
||||
this.updateBrowser = true;
|
||||
}
|
||||
/**
|
||||
* Retrieves the full URL representation with all segments encoded according to
|
||||
* rules specified in
|
||||
* [RFC 3986](https://tools.ietf.org/html/rfc3986).
|
||||
*
|
||||
*
|
||||
* ```js
|
||||
* // given URL http://example.com/#/some/path?foo=bar&baz=xoxo
|
||||
* let absUrl = $location.absUrl();
|
||||
* // => "http://example.com/#/some/path?foo=bar&baz=xoxo"
|
||||
* ```
|
||||
*/
|
||||
absUrl() {
|
||||
return this.$$absUrl;
|
||||
}
|
||||
url(url) {
|
||||
if (typeof url === 'string') {
|
||||
if (!url.length) {
|
||||
url = '/';
|
||||
}
|
||||
const match = PATH_MATCH.exec(url);
|
||||
if (!match)
|
||||
return this;
|
||||
if (match[1] || url === '')
|
||||
this.path(this.urlCodec.decodePath(match[1]));
|
||||
if (match[2] || match[1] || url === '')
|
||||
this.search(match[3] || '');
|
||||
this.hash(match[5] || '');
|
||||
// Chainable method
|
||||
return this;
|
||||
}
|
||||
return this.$$url;
|
||||
}
|
||||
/**
|
||||
* Retrieves the protocol of the current URL.
|
||||
*
|
||||
* ```js
|
||||
* // given URL http://example.com/#/some/path?foo=bar&baz=xoxo
|
||||
* let protocol = $location.protocol();
|
||||
* // => "http"
|
||||
* ```
|
||||
*/
|
||||
protocol() {
|
||||
return this.$$protocol;
|
||||
}
|
||||
/**
|
||||
* Retrieves the protocol of the current URL.
|
||||
*
|
||||
* In contrast to the non-AngularJS version `location.host` which returns `hostname:port`, this
|
||||
* returns the `hostname` portion only.
|
||||
*
|
||||
*
|
||||
* ```js
|
||||
* // given URL http://example.com/#/some/path?foo=bar&baz=xoxo
|
||||
* let host = $location.host();
|
||||
* // => "example.com"
|
||||
*
|
||||
* // given URL http://user:password@example.com:8080/#/some/path?foo=bar&baz=xoxo
|
||||
* host = $location.host();
|
||||
* // => "example.com"
|
||||
* host = location.host;
|
||||
* // => "example.com:8080"
|
||||
* ```
|
||||
*/
|
||||
host() {
|
||||
return this.$$host;
|
||||
}
|
||||
/**
|
||||
* Retrieves the port of the current URL.
|
||||
*
|
||||
* ```js
|
||||
* // given URL http://example.com/#/some/path?foo=bar&baz=xoxo
|
||||
* let port = $location.port();
|
||||
* // => 80
|
||||
* ```
|
||||
*/
|
||||
port() {
|
||||
return this.$$port;
|
||||
}
|
||||
path(path) {
|
||||
if (typeof path === 'undefined') {
|
||||
return this.$$path;
|
||||
}
|
||||
// null path converts to empty string. Prepend with "/" if needed.
|
||||
path = path !== null ? path.toString() : '';
|
||||
path = path.charAt(0) === '/' ? path : '/' + path;
|
||||
this.$$path = path;
|
||||
this.composeUrls();
|
||||
return this;
|
||||
}
|
||||
search(search, paramValue) {
|
||||
switch (arguments.length) {
|
||||
case 0:
|
||||
return this.$$search;
|
||||
case 1:
|
||||
if (typeof search === 'string' || typeof search === 'number') {
|
||||
this.$$search = this.urlCodec.decodeSearch(search.toString());
|
||||
}
|
||||
else if (typeof search === 'object' && search !== null) {
|
||||
// Copy the object so it's never mutated
|
||||
search = { ...search };
|
||||
// remove object undefined or null properties
|
||||
for (const key in search) {
|
||||
if (search[key] == null)
|
||||
delete search[key];
|
||||
}
|
||||
this.$$search = search;
|
||||
}
|
||||
else {
|
||||
throw new Error('LocationProvider.search(): First argument must be a string or an object.');
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (typeof search === 'string') {
|
||||
const currentSearch = this.search();
|
||||
if (typeof paramValue === 'undefined' || paramValue === null) {
|
||||
delete currentSearch[search];
|
||||
return this.search(currentSearch);
|
||||
}
|
||||
else {
|
||||
currentSearch[search] = paramValue;
|
||||
return this.search(currentSearch);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.composeUrls();
|
||||
return this;
|
||||
}
|
||||
hash(hash) {
|
||||
if (typeof hash === 'undefined') {
|
||||
return this.$$hash;
|
||||
}
|
||||
this.$$hash = hash !== null ? hash.toString() : '';
|
||||
this.composeUrls();
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Changes to `$location` during the current `$digest` will replace the current
|
||||
* history record, instead of adding a new one.
|
||||
*/
|
||||
replace() {
|
||||
this.$$replace = true;
|
||||
return this;
|
||||
}
|
||||
state(state) {
|
||||
if (typeof state === 'undefined') {
|
||||
return this.$$state;
|
||||
}
|
||||
this.$$state = state;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* The factory function used to create an instance of the `$locationShim` in Angular,
|
||||
* and provides an API-compatible `$locationProvider` for AngularJS.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class $locationShimProvider {
|
||||
ngUpgrade;
|
||||
location;
|
||||
platformLocation;
|
||||
urlCodec;
|
||||
locationStrategy;
|
||||
constructor(ngUpgrade, location, platformLocation, urlCodec, locationStrategy) {
|
||||
this.ngUpgrade = ngUpgrade;
|
||||
this.location = location;
|
||||
this.platformLocation = platformLocation;
|
||||
this.urlCodec = urlCodec;
|
||||
this.locationStrategy = locationStrategy;
|
||||
}
|
||||
/**
|
||||
* Factory method that returns an instance of the $locationShim
|
||||
*/
|
||||
$get() {
|
||||
return new $locationShim(this.ngUpgrade.$injector, this.location, this.platformLocation, this.urlCodec, this.locationStrategy);
|
||||
}
|
||||
/**
|
||||
* Stub method used to keep API compatible with AngularJS. This setting is configured through
|
||||
* the LocationUpgradeModule's `config` method in your Angular app.
|
||||
*/
|
||||
hashPrefix(prefix) {
|
||||
throw new Error('Configure LocationUpgrade through LocationUpgradeModule.config method.');
|
||||
}
|
||||
/**
|
||||
* Stub method used to keep API compatible with AngularJS. This setting is configured through
|
||||
* the LocationUpgradeModule's `config` method in your Angular app.
|
||||
*/
|
||||
html5Mode(mode) {
|
||||
throw new Error('Configure LocationUpgrade through LocationUpgradeModule.config method.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A codec for encoding and decoding URL parts.
|
||||
*
|
||||
* @publicApi
|
||||
**/
|
||||
class UrlCodec {
|
||||
}
|
||||
/**
|
||||
* A `UrlCodec` that uses logic from AngularJS to serialize and parse URLs
|
||||
* and URL parameters.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class AngularJSUrlCodec {
|
||||
// https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L15
|
||||
encodePath(path) {
|
||||
const segments = path.split('/');
|
||||
let i = segments.length;
|
||||
while (i--) {
|
||||
// decode forward slashes to prevent them from being double encoded
|
||||
segments[i] = encodeUriSegment(segments[i].replace(/%2F/g, '/'));
|
||||
}
|
||||
path = segments.join('/');
|
||||
return _stripIndexHtml(((path && path[0] !== '/' && '/') || '') + path);
|
||||
}
|
||||
// https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L42
|
||||
encodeSearch(search) {
|
||||
if (typeof search === 'string') {
|
||||
search = parseKeyValue(search);
|
||||
}
|
||||
search = toKeyValue(search);
|
||||
return search ? '?' + search : '';
|
||||
}
|
||||
// https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L44
|
||||
encodeHash(hash) {
|
||||
hash = encodeUriSegment(hash);
|
||||
return hash ? '#' + hash : '';
|
||||
}
|
||||
// https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L27
|
||||
decodePath(path, html5Mode = true) {
|
||||
const segments = path.split('/');
|
||||
let i = segments.length;
|
||||
while (i--) {
|
||||
segments[i] = decodeURIComponent(segments[i]);
|
||||
if (html5Mode) {
|
||||
// encode forward slashes to prevent them from being mistaken for path separators
|
||||
segments[i] = segments[i].replace(/\//g, '%2F');
|
||||
}
|
||||
}
|
||||
return segments.join('/');
|
||||
}
|
||||
// https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L72
|
||||
decodeSearch(search) {
|
||||
return parseKeyValue(search);
|
||||
}
|
||||
// https://github.com/angular/angular.js/blob/864c7f0/src/ng/location.js#L73
|
||||
decodeHash(hash) {
|
||||
hash = decodeURIComponent(hash);
|
||||
return hash[0] === '#' ? hash.substring(1) : hash;
|
||||
}
|
||||
normalize(pathOrHref, search, hash, baseUrl) {
|
||||
if (arguments.length === 1) {
|
||||
const parsed = this.parse(pathOrHref, baseUrl);
|
||||
if (typeof parsed === 'string') {
|
||||
return parsed;
|
||||
}
|
||||
const serverUrl = `${parsed.protocol}://${parsed.hostname}${parsed.port ? ':' + parsed.port : ''}`;
|
||||
return this.normalize(this.decodePath(parsed.pathname), this.decodeSearch(parsed.search), this.decodeHash(parsed.hash), serverUrl);
|
||||
}
|
||||
else {
|
||||
const encPath = this.encodePath(pathOrHref);
|
||||
const encSearch = (search && this.encodeSearch(search)) || '';
|
||||
const encHash = (hash && this.encodeHash(hash)) || '';
|
||||
let joinedPath = (baseUrl || '') + encPath;
|
||||
if (!joinedPath.length || joinedPath[0] !== '/') {
|
||||
joinedPath = '/' + joinedPath;
|
||||
}
|
||||
return joinedPath + encSearch + encHash;
|
||||
}
|
||||
}
|
||||
areEqual(valA, valB) {
|
||||
return this.normalize(valA) === this.normalize(valB);
|
||||
}
|
||||
// https://github.com/angular/angular.js/blob/864c7f0/src/ng/urlUtils.js#L60
|
||||
parse(url, base) {
|
||||
try {
|
||||
// Safari 12 throws an error when the URL constructor is called with an undefined base.
|
||||
const parsed = !base ? new URL(url) : new URL(url, base);
|
||||
return {
|
||||
href: parsed.href,
|
||||
protocol: parsed.protocol ? parsed.protocol.replace(/:$/, '') : '',
|
||||
host: parsed.host,
|
||||
search: parsed.search ? parsed.search.replace(/^\?/, '') : '',
|
||||
hash: parsed.hash ? parsed.hash.replace(/^#/, '') : '',
|
||||
hostname: parsed.hostname,
|
||||
port: parsed.port,
|
||||
pathname: parsed.pathname.charAt(0) === '/' ? parsed.pathname : '/' + parsed.pathname,
|
||||
};
|
||||
}
|
||||
catch (e) {
|
||||
throw new Error(`Invalid URL (${url}) with base (${base})`);
|
||||
}
|
||||
}
|
||||
}
|
||||
function _stripIndexHtml(url) {
|
||||
return url.replace(/\/index.html$/, '');
|
||||
}
|
||||
/**
|
||||
* Tries to decode the URI component without throwing an exception.
|
||||
*
|
||||
* @param str value potential URI component to check.
|
||||
* @returns the decoded URI if it can be decoded or else `undefined`.
|
||||
*/
|
||||
function tryDecodeURIComponent(value) {
|
||||
try {
|
||||
return decodeURIComponent(value);
|
||||
}
|
||||
catch (e) {
|
||||
// Ignore any invalid uri component.
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Parses an escaped url query string into key-value pairs. Logic taken from
|
||||
* https://github.com/angular/angular.js/blob/864c7f0/src/Angular.js#L1382
|
||||
*/
|
||||
function parseKeyValue(keyValue) {
|
||||
const obj = {};
|
||||
(keyValue || '').split('&').forEach((keyValue) => {
|
||||
let splitPoint, key, val;
|
||||
if (keyValue) {
|
||||
key = keyValue = keyValue.replace(/\+/g, '%20');
|
||||
splitPoint = keyValue.indexOf('=');
|
||||
if (splitPoint !== -1) {
|
||||
key = keyValue.substring(0, splitPoint);
|
||||
val = keyValue.substring(splitPoint + 1);
|
||||
}
|
||||
key = tryDecodeURIComponent(key);
|
||||
if (typeof key !== 'undefined') {
|
||||
val = typeof val !== 'undefined' ? tryDecodeURIComponent(val) : true;
|
||||
if (!obj.hasOwnProperty(key)) {
|
||||
obj[key] = val;
|
||||
}
|
||||
else if (Array.isArray(obj[key])) {
|
||||
obj[key].push(val);
|
||||
}
|
||||
else {
|
||||
obj[key] = [obj[key], val];
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return obj;
|
||||
}
|
||||
/**
|
||||
* Serializes into key-value pairs. Logic taken from
|
||||
* https://github.com/angular/angular.js/blob/864c7f0/src/Angular.js#L1409
|
||||
*/
|
||||
function toKeyValue(obj) {
|
||||
const parts = [];
|
||||
for (const key in obj) {
|
||||
let value = obj[key];
|
||||
if (Array.isArray(value)) {
|
||||
value.forEach((arrayValue) => {
|
||||
parts.push(encodeUriQuery(key, true) +
|
||||
(arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));
|
||||
});
|
||||
}
|
||||
else {
|
||||
parts.push(encodeUriQuery(key, true) +
|
||||
(value === true ? '' : '=' + encodeUriQuery(value, true)));
|
||||
}
|
||||
}
|
||||
return parts.length ? parts.join('&') : '';
|
||||
}
|
||||
/**
|
||||
* We need our custom method because encodeURIComponent is too aggressive and doesn't follow
|
||||
* https://tools.ietf.org/html/rfc3986 with regards to the character set (pchar) allowed in path
|
||||
* segments:
|
||||
* segment = *pchar
|
||||
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
|
||||
* pct-encoded = "%" HEXDIG HEXDIG
|
||||
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
|
||||
* sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
|
||||
* / "*" / "+" / "," / ";" / "="
|
||||
*
|
||||
* Logic from https://github.com/angular/angular.js/blob/864c7f0/src/Angular.js#L1437
|
||||
*/
|
||||
function encodeUriSegment(val) {
|
||||
return encodeUriQuery(val, true).replace(/%26/g, '&').replace(/%3D/gi, '=').replace(/%2B/gi, '+');
|
||||
}
|
||||
/**
|
||||
* This method is intended for encoding *key* or *value* parts of query component. We need a custom
|
||||
* method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
|
||||
* encoded per https://tools.ietf.org/html/rfc3986:
|
||||
* query = *( pchar / "/" / "?" )
|
||||
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
|
||||
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
|
||||
* pct-encoded = "%" HEXDIG HEXDIG
|
||||
* sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
|
||||
* / "*" / "+" / "," / ";" / "="
|
||||
*
|
||||
* Logic from https://github.com/angular/angular.js/blob/864c7f0/src/Angular.js#L1456
|
||||
*/
|
||||
function encodeUriQuery(val, pctEncodeSpaces = false) {
|
||||
return encodeURIComponent(val)
|
||||
.replace(/%40/g, '@')
|
||||
.replace(/%3A/gi, ':')
|
||||
.replace(/%24/g, '$')
|
||||
.replace(/%2C/gi, ',')
|
||||
.replace(/%3B/gi, ';')
|
||||
.replace(/%20/g, pctEncodeSpaces ? '%20' : '+');
|
||||
}
|
||||
|
||||
/**
|
||||
* A provider token used to configure the location upgrade module.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
const LOCATION_UPGRADE_CONFIGURATION = new InjectionToken(ngDevMode ? 'LOCATION_UPGRADE_CONFIGURATION' : '');
|
||||
const APP_BASE_HREF_RESOLVED = new InjectionToken(ngDevMode ? 'APP_BASE_HREF_RESOLVED' : '');
|
||||
/**
|
||||
* `NgModule` used for providing and configuring Angular's Unified Location Service for upgrading.
|
||||
*
|
||||
* @see [Using the Unified Angular Location Service](https://angular.io/guide/upgrade#using-the-unified-angular-location-service)
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class LocationUpgradeModule {
|
||||
static config(config) {
|
||||
return {
|
||||
ngModule: LocationUpgradeModule,
|
||||
providers: [
|
||||
Location,
|
||||
{
|
||||
provide: $locationShim,
|
||||
useFactory: provide$location,
|
||||
deps: [UpgradeModule, Location, PlatformLocation, UrlCodec, LocationStrategy],
|
||||
},
|
||||
{ provide: LOCATION_UPGRADE_CONFIGURATION, useValue: config ? config : {} },
|
||||
{ provide: UrlCodec, useFactory: provideUrlCodec, deps: [LOCATION_UPGRADE_CONFIGURATION] },
|
||||
{
|
||||
provide: APP_BASE_HREF_RESOLVED,
|
||||
useFactory: provideAppBaseHref,
|
||||
deps: [LOCATION_UPGRADE_CONFIGURATION, [new Inject(APP_BASE_HREF), new Optional()]],
|
||||
},
|
||||
{
|
||||
provide: LocationStrategy,
|
||||
useFactory: provideLocationStrategy,
|
||||
deps: [PlatformLocation, APP_BASE_HREF_RESOLVED, LOCATION_UPGRADE_CONFIGURATION],
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: LocationUpgradeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
||||
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.6", ngImport: i0, type: LocationUpgradeModule, imports: [CommonModule] });
|
||||
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: LocationUpgradeModule, imports: [CommonModule] });
|
||||
}
|
||||
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: LocationUpgradeModule, decorators: [{
|
||||
type: NgModule,
|
||||
args: [{ imports: [CommonModule] }]
|
||||
}] });
|
||||
function provideAppBaseHref(config, appBaseHref) {
|
||||
if (config && config.appBaseHref != null) {
|
||||
return config.appBaseHref;
|
||||
}
|
||||
else if (appBaseHref != null) {
|
||||
return appBaseHref;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
function provideUrlCodec(config) {
|
||||
const codec = (config && config.urlCodec) || AngularJSUrlCodec;
|
||||
return new codec();
|
||||
}
|
||||
function provideLocationStrategy(platformLocation, baseHref, options = {}) {
|
||||
return options.useHash
|
||||
? new HashLocationStrategy(platformLocation, baseHref)
|
||||
: new PathLocationStrategy(platformLocation, baseHref);
|
||||
}
|
||||
function provide$location(ngUpgrade, location, platformLocation, urlCodec, locationStrategy) {
|
||||
const $locationProvider = new $locationShimProvider(ngUpgrade, location, platformLocation, urlCodec, locationStrategy);
|
||||
return $locationProvider.$get();
|
||||
}
|
||||
|
||||
export { $locationShim, $locationShimProvider, AngularJSUrlCodec, LOCATION_UPGRADE_CONFIGURATION, LocationUpgradeModule, UrlCodec };
|
||||
//# sourceMappingURL=upgrade.mjs.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/upgrade.mjs.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/upgrade.mjs.map
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
28
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/xhr.mjs
generated
vendored
Executable file
28
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/xhr.mjs
generated
vendored
Executable file
|
@ -0,0 +1,28 @@
|
|||
/**
|
||||
* @license Angular v20.1.6
|
||||
* (c) 2010-2025 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
function parseCookieValue(cookieStr, name) {
|
||||
name = encodeURIComponent(name);
|
||||
for (const cookie of cookieStr.split(';')) {
|
||||
const eqIndex = cookie.indexOf('=');
|
||||
const [cookieName, cookieValue] = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)];
|
||||
if (cookieName.trim() === name) {
|
||||
return decodeURIComponent(cookieValue);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* A wrapper around the `XMLHttpRequest` constructor.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
class XhrFactory {
|
||||
}
|
||||
|
||||
export { XhrFactory, parseCookieValue };
|
||||
//# sourceMappingURL=xhr.mjs.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/xhr.mjs.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/fesm2022/xhr.mjs.map
generated
vendored
Executable file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"xhr.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-46c76129e412/bin/packages/common/src/cookie.ts","../../../../../darwin_arm64-fastbuild-ST-46c76129e412/bin/packages/common/src/xhr.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nexport function parseCookieValue(cookieStr: string, name: string): string | null {\n name = encodeURIComponent(name);\n for (const cookie of cookieStr.split(';')) {\n const eqIndex = cookie.indexOf('=');\n const [cookieName, cookieValue]: string[] =\n 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 * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * A wrapper around the `XMLHttpRequest` constructor.\n *\n * @publicApi\n */\nexport abstract class XhrFactory {\n abstract build(): XMLHttpRequest;\n}\n"],"names":[],"mappings":";;;;;;AAQgB,SAAA,gBAAgB,CAAC,SAAiB,EAAE,IAAY,EAAA;AAC9D,IAAA,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AACnC,QAAA,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAC7B,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AACtF,QAAA,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;AAC9B,YAAA,OAAO,kBAAkB,CAAC,WAAW,CAAC;;;AAG1C,IAAA,OAAO,IAAI;AACb;;ACXA;;;;AAIG;MACmB,UAAU,CAAA;AAE/B;;;;"}
|
4099
my-workspace/projects/sae-lib/node_modules/@angular/common/http/index.d.ts
generated
vendored
Executable file
4099
my-workspace/projects/sae-lib/node_modules/@angular/common/http/index.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load diff
182
my-workspace/projects/sae-lib/node_modules/@angular/common/http/testing/index.d.ts
generated
vendored
Executable file
182
my-workspace/projects/sae-lib/node_modules/@angular/common/http/testing/index.d.ts
generated
vendored
Executable file
|
@ -0,0 +1,182 @@
|
|||
/**
|
||||
* @license Angular v20.1.6
|
||||
* (c) 2010-2025 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
import { HttpRequest, HttpEvent, HttpHeaders, HttpClientModule } from '../../module.d.js';
|
||||
import { Observer } from 'rxjs';
|
||||
import * as i0 from '@angular/core';
|
||||
import { Provider } from '@angular/core';
|
||||
|
||||
/**
|
||||
* Type that describes options that can be used to create an error
|
||||
* in `TestRequest`.
|
||||
*/
|
||||
type TestRequestErrorOptions = {
|
||||
headers?: HttpHeaders | {
|
||||
[name: string]: string | string[];
|
||||
};
|
||||
status?: number;
|
||||
statusText?: string;
|
||||
};
|
||||
/**
|
||||
* A mock requests that was received and is ready to be answered.
|
||||
*
|
||||
* This interface allows access to the underlying `HttpRequest`, and allows
|
||||
* responding with `HttpEvent`s or `HttpErrorResponse`s.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
declare class TestRequest {
|
||||
request: HttpRequest<any>;
|
||||
private observer;
|
||||
/**
|
||||
* Whether the request was cancelled after it was sent.
|
||||
*/
|
||||
get cancelled(): boolean;
|
||||
constructor(request: HttpRequest<any>, observer: Observer<HttpEvent<any>>);
|
||||
/**
|
||||
* Resolve the request by returning a body plus additional HTTP information (such as response
|
||||
* headers) if provided.
|
||||
* If the request specifies an expected body type, the body is converted into the requested type.
|
||||
* Otherwise, the body is converted to `JSON` by default.
|
||||
*
|
||||
* Both successful and unsuccessful responses can be delivered via `flush()`.
|
||||
*/
|
||||
flush(body: ArrayBuffer | Blob | boolean | string | number | Object | (boolean | string | number | Object | null)[] | null, opts?: {
|
||||
headers?: HttpHeaders | {
|
||||
[name: string]: string | string[];
|
||||
};
|
||||
status?: number;
|
||||
statusText?: string;
|
||||
}): void;
|
||||
/**
|
||||
* Resolve the request by returning an `ErrorEvent` (e.g. simulating a network failure).
|
||||
* @deprecated Http requests never emit an `ErrorEvent`. Please specify a `ProgressEvent`.
|
||||
*/
|
||||
error(error: ErrorEvent, opts?: TestRequestErrorOptions): void;
|
||||
/**
|
||||
* Resolve the request by returning an `ProgressEvent` (e.g. simulating a network failure).
|
||||
*/
|
||||
error(error: ProgressEvent, opts?: TestRequestErrorOptions): void;
|
||||
/**
|
||||
* Deliver an arbitrary `HttpEvent` (such as a progress event) on the response stream for this
|
||||
* request.
|
||||
*/
|
||||
event(event: HttpEvent<any>): void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines a matcher for requests based on URL, method, or both.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
interface RequestMatch {
|
||||
method?: string;
|
||||
url?: string;
|
||||
}
|
||||
/**
|
||||
* Controller to be injected into tests, that allows for mocking and flushing
|
||||
* of requests.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
declare abstract class HttpTestingController {
|
||||
/**
|
||||
* Search for requests that match the given parameter, without any expectations.
|
||||
*/
|
||||
abstract match(match: string | RequestMatch | ((req: HttpRequest<any>) => boolean)): TestRequest[];
|
||||
/**
|
||||
* Expect that a single request has been made which matches the given URL, and return its
|
||||
* mock.
|
||||
*
|
||||
* If no such request has been made, or more than one such request has been made, fail with an
|
||||
* error message including the given request description, if any.
|
||||
*/
|
||||
abstract expectOne(url: string, description?: string): TestRequest;
|
||||
/**
|
||||
* Expect that a single request has been made which matches the given parameters, and return
|
||||
* its mock.
|
||||
*
|
||||
* If no such request has been made, or more than one such request has been made, fail with an
|
||||
* error message including the given request description, if any.
|
||||
*/
|
||||
abstract expectOne(params: RequestMatch, description?: string): TestRequest;
|
||||
/**
|
||||
* Expect that a single request has been made which matches the given predicate function, and
|
||||
* return its mock.
|
||||
*
|
||||
* If no such request has been made, or more than one such request has been made, fail with an
|
||||
* error message including the given request description, if any.
|
||||
*/
|
||||
abstract expectOne(matchFn: (req: HttpRequest<any>) => boolean, description?: string): TestRequest;
|
||||
/**
|
||||
* Expect that a single request has been made which matches the given condition, and return
|
||||
* its mock.
|
||||
*
|
||||
* If no such request has been made, or more than one such request has been made, fail with an
|
||||
* error message including the given request description, if any.
|
||||
*/
|
||||
abstract expectOne(match: string | RequestMatch | ((req: HttpRequest<any>) => boolean), description?: string): TestRequest;
|
||||
/**
|
||||
* Expect that no requests have been made which match the given URL.
|
||||
*
|
||||
* If a matching request has been made, fail with an error message including the given request
|
||||
* description, if any.
|
||||
*/
|
||||
abstract expectNone(url: string, description?: string): void;
|
||||
/**
|
||||
* Expect that no requests have been made which match the given parameters.
|
||||
*
|
||||
* If a matching request has been made, fail with an error message including the given request
|
||||
* description, if any.
|
||||
*/
|
||||
abstract expectNone(params: RequestMatch, description?: string): void;
|
||||
/**
|
||||
* Expect that no requests have been made which match the given predicate function.
|
||||
*
|
||||
* If a matching request has been made, fail with an error message including the given request
|
||||
* description, if any.
|
||||
*/
|
||||
abstract expectNone(matchFn: (req: HttpRequest<any>) => boolean, description?: string): void;
|
||||
/**
|
||||
* Expect that no requests have been made which match the given condition.
|
||||
*
|
||||
* If a matching request has been made, fail with an error message including the given request
|
||||
* description, if any.
|
||||
*/
|
||||
abstract expectNone(match: string | RequestMatch | ((req: HttpRequest<any>) => boolean), description?: string): void;
|
||||
/**
|
||||
* Verify that no unmatched requests are outstanding.
|
||||
*
|
||||
* If any requests are outstanding, fail with an error message indicating which requests were not
|
||||
* handled.
|
||||
*
|
||||
* If `ignoreCancelled` is not set (the default), `verify()` will also fail if cancelled requests
|
||||
* were not explicitly matched.
|
||||
*/
|
||||
abstract verify(opts?: {
|
||||
ignoreCancelled?: boolean;
|
||||
}): void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures `HttpClientTestingBackend` as the `HttpBackend` used by `HttpClient`.
|
||||
*
|
||||
* Inject `HttpTestingController` to expect and flush requests in your tests.
|
||||
*
|
||||
* @publicApi
|
||||
*
|
||||
* @deprecated Add `provideHttpClientTesting()` to your providers instead.
|
||||
*/
|
||||
declare class HttpClientTestingModule {
|
||||
static ɵfac: i0.ɵɵFactoryDeclaration<HttpClientTestingModule, never>;
|
||||
static ɵmod: i0.ɵɵNgModuleDeclaration<HttpClientTestingModule, never, [typeof HttpClientModule], never>;
|
||||
static ɵinj: i0.ɵɵInjectorDeclaration<HttpClientTestingModule>;
|
||||
}
|
||||
|
||||
declare function provideHttpClientTesting(): Provider[];
|
||||
|
||||
export { HttpClientTestingModule, HttpTestingController, TestRequest, provideHttpClientTesting };
|
||||
export type { RequestMatch };
|
1241
my-workspace/projects/sae-lib/node_modules/@angular/common/index.d.ts
generated
vendored
Executable file
1241
my-workspace/projects/sae-lib/node_modules/@angular/common/index.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load diff
22
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af-NA.d.ts
generated
vendored
Executable file
22
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af-NA.d.ts
generated
vendored
Executable file
|
@ -0,0 +1,22 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
declare function plural(val: number): number;
|
||||
declare const _default: (string | number | number[] | (string | undefined)[] | typeof plural | (string[] | undefined)[] | {
|
||||
BYN: (string | undefined)[];
|
||||
CAD: (string | undefined)[];
|
||||
JPY: string[];
|
||||
MXN: (string | undefined)[];
|
||||
NAD: string[];
|
||||
PHP: (string | undefined)[];
|
||||
RON: (string | undefined)[];
|
||||
THB: string[];
|
||||
TWD: string[];
|
||||
USD: (string | undefined)[];
|
||||
ZAR: string[];
|
||||
} | undefined)[];
|
||||
export default _default;
|
17
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af-NA.js
generated
vendored
Executable file
17
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af-NA.js
generated
vendored
Executable file
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
// THIS CODE IS GENERATED - DO NOT MODIFY.
|
||||
const u = undefined;
|
||||
function plural(val) {
|
||||
const n = val;
|
||||
if (n === 1)
|
||||
return 1;
|
||||
return 5;
|
||||
}
|
||||
export default ["af-NA", [["v", "n"], ["vm.", "nm."], u], u, [["S", "M", "D", "W", "D", "V", "S"], ["So.", "Ma.", "Di.", "Wo.", "Do.", "Vr.", "Sa."], ["Sondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag"], ["So.", "Ma.", "Di.", "Wo.", "Do.", "Vr.", "Sa."]], u, [["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], ["Jan.", "Feb.", "Mrt.", "Apr.", "Mei", "Jun.", "Jul.", "Aug.", "Sep.", "Okt.", "Nov.", "Des."], ["Januarie", "Februarie", "Maart", "April", "Mei", "Junie", "Julie", "Augustus", "September", "Oktober", "November", "Desember"]], u, [["v.C.", "n.C."], u, ["voor Christus", "na Christus"]], 1, [6, 0], ["y-MM-dd", "dd MMM y", "dd MMMM y", "EEEE dd MMMM y"], ["h:mm a", "h:mm:ss a", "h:mm:ss a z", "h:mm:ss a zzzz"], ["{1} {0}", u, u, u], [",", " ", ";", "%", "+", "-", "E", "×", "‰", "∞", "NaN", ":"], ["#,##0.###", "#,##0%", "¤#,##0.00", "#E0"], "ZAR", "R", "Suid-Afrikaanse rand", { "BYN": [u, "р."], "CAD": [u, "$"], "JPY": ["JP¥", "¥"], "MXN": [u, "$"], "NAD": ["$"], "PHP": [u, "₱"], "RON": [u, "leu"], "THB": ["฿"], "TWD": ["NT$"], "USD": [u, "$"], "ZAR": ["R"] }, "ltr", plural];
|
||||
//# sourceMappingURL=af-NA.js.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af-NA.js.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af-NA.js.map
generated
vendored
Executable file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"af-NA.js","sourceRoot":"","sources":["af-NA.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,0CAA0C;AAC1C,MAAM,CAAC,GAAG,SAAS,CAAC;AAEpB,SAAS,MAAM,CAAC,GAAW;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC;IAEd,IAAI,CAAC,KAAK,CAAC;QACP,OAAO,CAAC,CAAC;IACb,OAAO,CAAC,CAAC;AACT,CAAC;AAED,eAAe,CAAC,OAAO,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,QAAQ,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,WAAW,EAAC,QAAQ,EAAC,UAAU,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,CAAC,EAAC,CAAC,UAAU,EAAC,WAAW,EAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,OAAO,EAAC,OAAO,EAAC,UAAU,EAAC,WAAW,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,MAAM,EAAC,MAAM,CAAC,EAAC,CAAC,EAAC,CAAC,eAAe,EAAC,aAAa,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,WAAW,EAAC,gBAAgB,CAAC,EAAC,CAAC,QAAQ,EAAC,WAAW,EAAC,aAAa,EAAC,gBAAgB,CAAC,EAAC,CAAC,SAAS,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,CAAC,EAAC,CAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,KAAK,CAAC,EAAC,KAAK,EAAC,GAAG,EAAC,sBAAsB,EAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n// THIS CODE IS GENERATED - DO NOT MODIFY.\nconst u = undefined;\n\nfunction plural(val: number): number {\nconst n = val;\n\nif (n === 1)\n return 1;\nreturn 5;\n}\n\nexport default [\"af-NA\",[[\"v\",\"n\"],[\"vm.\",\"nm.\"],u],u,[[\"S\",\"M\",\"D\",\"W\",\"D\",\"V\",\"S\"],[\"So.\",\"Ma.\",\"Di.\",\"Wo.\",\"Do.\",\"Vr.\",\"Sa.\"],[\"Sondag\",\"Maandag\",\"Dinsdag\",\"Woensdag\",\"Donderdag\",\"Vrydag\",\"Saterdag\"],[\"So.\",\"Ma.\",\"Di.\",\"Wo.\",\"Do.\",\"Vr.\",\"Sa.\"]],u,[[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],[\"Jan.\",\"Feb.\",\"Mrt.\",\"Apr.\",\"Mei\",\"Jun.\",\"Jul.\",\"Aug.\",\"Sep.\",\"Okt.\",\"Nov.\",\"Des.\"],[\"Januarie\",\"Februarie\",\"Maart\",\"April\",\"Mei\",\"Junie\",\"Julie\",\"Augustus\",\"September\",\"Oktober\",\"November\",\"Desember\"]],u,[[\"v.C.\",\"n.C.\"],u,[\"voor Christus\",\"na Christus\"]],1,[6,0],[\"y-MM-dd\",\"dd MMM y\",\"dd MMMM y\",\"EEEE dd MMMM y\"],[\"h:mm a\",\"h:mm:ss a\",\"h:mm:ss a z\",\"h:mm:ss a zzzz\"],[\"{1} {0}\",u,u,u],[\",\",\" \",\";\",\"%\",\"+\",\"-\",\"E\",\"×\",\"‰\",\"∞\",\"NaN\",\":\"],[\"#,##0.###\",\"#,##0%\",\"¤#,##0.00\",\"#E0\"],\"ZAR\",\"R\",\"Suid-Afrikaanse rand\",{\"BYN\":[u,\"р.\"],\"CAD\":[u,\"$\"],\"JPY\":[\"JP¥\",\"¥\"],\"MXN\":[u,\"$\"],\"NAD\":[\"$\"],\"PHP\":[u,\"₱\"],\"RON\":[u,\"leu\"],\"THB\":[\"฿\"],\"TWD\":[\"NT$\"],\"USD\":[u,\"$\"],\"ZAR\":[\"R\"]},\"ltr\", plural];\n"]}
|
21
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af.d.ts
generated
vendored
Executable file
21
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af.d.ts
generated
vendored
Executable file
|
@ -0,0 +1,21 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
declare function plural(val: number): number;
|
||||
declare const _default: (string | number | number[] | (string | undefined)[] | typeof plural | (string[] | undefined)[] | {
|
||||
BYN: (string | undefined)[];
|
||||
CAD: (string | undefined)[];
|
||||
JPY: string[];
|
||||
MXN: (string | undefined)[];
|
||||
PHP: (string | undefined)[];
|
||||
RON: (string | undefined)[];
|
||||
THB: string[];
|
||||
TWD: string[];
|
||||
USD: (string | undefined)[];
|
||||
ZAR: string[];
|
||||
} | undefined)[];
|
||||
export default _default;
|
17
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af.js
generated
vendored
Executable file
17
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af.js
generated
vendored
Executable file
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
// THIS CODE IS GENERATED - DO NOT MODIFY.
|
||||
const u = undefined;
|
||||
function plural(val) {
|
||||
const n = val;
|
||||
if (n === 1)
|
||||
return 1;
|
||||
return 5;
|
||||
}
|
||||
export default ["af", [["v", "n"], ["vm.", "nm."], u], u, [["S", "M", "D", "W", "D", "V", "S"], ["So.", "Ma.", "Di.", "Wo.", "Do.", "Vr.", "Sa."], ["Sondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag"], ["So.", "Ma.", "Di.", "Wo.", "Do.", "Vr.", "Sa."]], u, [["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], ["Jan.", "Feb.", "Mrt.", "Apr.", "Mei", "Jun.", "Jul.", "Aug.", "Sep.", "Okt.", "Nov.", "Des."], ["Januarie", "Februarie", "Maart", "April", "Mei", "Junie", "Julie", "Augustus", "September", "Oktober", "November", "Desember"]], u, [["v.C.", "n.C."], u, ["voor Christus", "na Christus"]], 0, [6, 0], ["y-MM-dd", "dd MMM y", "dd MMMM y", "EEEE dd MMMM y"], ["HH:mm", "HH:mm:ss", "HH:mm:ss z", "HH:mm:ss zzzz"], ["{1} {0}", u, u, u], [",", " ", ";", "%", "+", "-", "E", "×", "‰", "∞", "NaN", ":"], ["#,##0.###", "#,##0%", "¤#,##0.00", "#E0"], "ZAR", "R", "Suid-Afrikaanse rand", { "BYN": [u, "р."], "CAD": [u, "$"], "JPY": ["JP¥", "¥"], "MXN": [u, "$"], "PHP": [u, "₱"], "RON": [u, "leu"], "THB": ["฿"], "TWD": ["NT$"], "USD": [u, "$"], "ZAR": ["R"] }, "ltr", plural];
|
||||
//# sourceMappingURL=af.js.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af.js.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/af.js.map
generated
vendored
Executable file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"af.js","sourceRoot":"","sources":["af.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,0CAA0C;AAC1C,MAAM,CAAC,GAAG,SAAS,CAAC;AAEpB,SAAS,MAAM,CAAC,GAAW;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC;IAEd,IAAI,CAAC,KAAK,CAAC;QACP,OAAO,CAAC,CAAC;IACb,OAAO,CAAC,CAAC;AACT,CAAC;AAED,eAAe,CAAC,IAAI,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,QAAQ,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,WAAW,EAAC,QAAQ,EAAC,UAAU,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,CAAC,EAAC,CAAC,UAAU,EAAC,WAAW,EAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,OAAO,EAAC,OAAO,EAAC,UAAU,EAAC,WAAW,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,MAAM,EAAC,MAAM,CAAC,EAAC,CAAC,EAAC,CAAC,eAAe,EAAC,aAAa,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,WAAW,EAAC,gBAAgB,CAAC,EAAC,CAAC,OAAO,EAAC,UAAU,EAAC,YAAY,EAAC,eAAe,CAAC,EAAC,CAAC,SAAS,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,CAAC,EAAC,CAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,KAAK,CAAC,EAAC,KAAK,EAAC,GAAG,EAAC,sBAAsB,EAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n// THIS CODE IS GENERATED - DO NOT MODIFY.\nconst u = undefined;\n\nfunction plural(val: number): number {\nconst n = val;\n\nif (n === 1)\n return 1;\nreturn 5;\n}\n\nexport default [\"af\",[[\"v\",\"n\"],[\"vm.\",\"nm.\"],u],u,[[\"S\",\"M\",\"D\",\"W\",\"D\",\"V\",\"S\"],[\"So.\",\"Ma.\",\"Di.\",\"Wo.\",\"Do.\",\"Vr.\",\"Sa.\"],[\"Sondag\",\"Maandag\",\"Dinsdag\",\"Woensdag\",\"Donderdag\",\"Vrydag\",\"Saterdag\"],[\"So.\",\"Ma.\",\"Di.\",\"Wo.\",\"Do.\",\"Vr.\",\"Sa.\"]],u,[[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],[\"Jan.\",\"Feb.\",\"Mrt.\",\"Apr.\",\"Mei\",\"Jun.\",\"Jul.\",\"Aug.\",\"Sep.\",\"Okt.\",\"Nov.\",\"Des.\"],[\"Januarie\",\"Februarie\",\"Maart\",\"April\",\"Mei\",\"Junie\",\"Julie\",\"Augustus\",\"September\",\"Oktober\",\"November\",\"Desember\"]],u,[[\"v.C.\",\"n.C.\"],u,[\"voor Christus\",\"na Christus\"]],0,[6,0],[\"y-MM-dd\",\"dd MMM y\",\"dd MMMM y\",\"EEEE dd MMMM y\"],[\"HH:mm\",\"HH:mm:ss\",\"HH:mm:ss z\",\"HH:mm:ss zzzz\"],[\"{1} {0}\",u,u,u],[\",\",\" \",\";\",\"%\",\"+\",\"-\",\"E\",\"×\",\"‰\",\"∞\",\"NaN\",\":\"],[\"#,##0.###\",\"#,##0%\",\"¤#,##0.00\",\"#E0\"],\"ZAR\",\"R\",\"Suid-Afrikaanse rand\",{\"BYN\":[u,\"р.\"],\"CAD\":[u,\"$\"],\"JPY\":[\"JP¥\",\"¥\"],\"MXN\":[u,\"$\"],\"PHP\":[u,\"₱\"],\"RON\":[u,\"leu\"],\"THB\":[\"฿\"],\"TWD\":[\"NT$\"],\"USD\":[u,\"$\"],\"ZAR\":[\"R\"]},\"ltr\", plural];\n"]}
|
13
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/agq.d.ts
generated
vendored
Executable file
13
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/agq.d.ts
generated
vendored
Executable file
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
declare function plural(val: number): number;
|
||||
declare const _default: (string | number | number[] | (string | undefined)[] | typeof plural | (string[] | undefined)[] | {
|
||||
JPY: string[];
|
||||
USD: string[];
|
||||
} | undefined)[];
|
||||
export default _default;
|
15
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/agq.js
generated
vendored
Executable file
15
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/agq.js
generated
vendored
Executable file
|
@ -0,0 +1,15 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
// THIS CODE IS GENERATED - DO NOT MODIFY.
|
||||
const u = undefined;
|
||||
function plural(val) {
|
||||
const n = val;
|
||||
return 5;
|
||||
}
|
||||
export default ["agq", [["a.g", "a.k"], u, u], u, [["n", "k", "g", "t", "u", "g", "d"], ["nts", "kpa", "ghɔ", "tɔm", "ume", "ghɨ", "dzk"], ["tsuʔntsɨ", "tsuʔukpà", "tsuʔughɔe", "tsuʔutɔ̀mlò", "tsuʔumè", "tsuʔughɨ̂m", "tsuʔndzɨkɔʔɔ"], ["nts", "kpa", "ghɔ", "tɔm", "ume", "ghɨ", "dzk"]], u, [["n", "k", "t", "t", "s", "z", "k", "f", "d", "l", "c", "f"], ["nùm", "kɨz", "tɨd", "taa", "see", "nzu", "dum", "fɔe", "dzu", "lɔm", "kaa", "fwo"], ["ndzɔ̀ŋɔ̀nùm", "ndzɔ̀ŋɔ̀kƗ̀zùʔ", "ndzɔ̀ŋɔ̀tƗ̀dʉ̀ghà", "ndzɔ̀ŋɔ̀tǎafʉ̄ghā", "ndzɔ̀ŋèsèe", "ndzɔ̀ŋɔ̀nzùghò", "ndzɔ̀ŋɔ̀dùmlo", "ndzɔ̀ŋɔ̀kwîfɔ̀e", "ndzɔ̀ŋɔ̀tƗ̀fʉ̀ghàdzughù", "ndzɔ̀ŋɔ̀ghǔuwelɔ̀m", "ndzɔ̀ŋɔ̀chwaʔàkaa wo", "ndzɔ̀ŋèfwòo"]], u, [["SK", "BK"], u, ["Sěe Kɨ̀lesto", "Bǎa Kɨ̀lesto"]], 1, [6, 0], ["d/M/y", "d MMM, y", "d MMMM y", "EEEE d MMMM y"], ["HH:mm", "HH:mm:ss", "HH:mm:ss z", "HH:mm:ss zzzz"], ["{1} {0}", u, u, u], [",", " ", ";", "%", "+", "-", "E", "×", "‰", "∞", "NaN", ":"], ["#,##0.###", "#,##0%", "#,##0.00¤", "#E0"], "XAF", "FCFA", "CFA Fàlâŋ BEAC", { "JPY": ["JP¥", "¥"], "USD": ["US$", "$"] }, "ltr", plural];
|
||||
//# sourceMappingURL=agq.js.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/agq.js.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/agq.js.map
generated
vendored
Executable file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"agq.js","sourceRoot":"","sources":["agq.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,0CAA0C;AAC1C,MAAM,CAAC,GAAG,SAAS,CAAC;AAEpB,SAAS,MAAM,CAAC,GAAW;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC;IAEd,OAAO,CAAC,CAAC;AACT,CAAC;AAED,eAAe,CAAC,KAAK,EAAC,CAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,WAAW,EAAC,aAAa,EAAC,SAAS,EAAC,YAAY,EAAC,cAAc,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,aAAa,EAAC,gBAAgB,EAAC,mBAAmB,EAAC,mBAAmB,EAAC,YAAY,EAAC,gBAAgB,EAAC,eAAe,EAAC,iBAAiB,EAAC,yBAAyB,EAAC,oBAAoB,EAAC,sBAAsB,EAAC,aAAa,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC,cAAc,EAAC,cAAc,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,OAAO,EAAC,UAAU,EAAC,UAAU,EAAC,eAAe,CAAC,EAAC,CAAC,OAAO,EAAC,UAAU,EAAC,YAAY,EAAC,eAAe,CAAC,EAAC,CAAC,SAAS,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,CAAC,EAAC,CAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,KAAK,CAAC,EAAC,KAAK,EAAC,MAAM,EAAC,gBAAgB,EAAC,EAAC,KAAK,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n// THIS CODE IS GENERATED - DO NOT MODIFY.\nconst u = undefined;\n\nfunction plural(val: number): number {\nconst n = val;\n\nreturn 5;\n}\n\nexport default [\"agq\",[[\"a.g\",\"a.k\"],u,u],u,[[\"n\",\"k\",\"g\",\"t\",\"u\",\"g\",\"d\"],[\"nts\",\"kpa\",\"ghɔ\",\"tɔm\",\"ume\",\"ghɨ\",\"dzk\"],[\"tsuʔntsɨ\",\"tsuʔukpà\",\"tsuʔughɔe\",\"tsuʔutɔ̀mlò\",\"tsuʔumè\",\"tsuʔughɨ̂m\",\"tsuʔndzɨkɔʔɔ\"],[\"nts\",\"kpa\",\"ghɔ\",\"tɔm\",\"ume\",\"ghɨ\",\"dzk\"]],u,[[\"n\",\"k\",\"t\",\"t\",\"s\",\"z\",\"k\",\"f\",\"d\",\"l\",\"c\",\"f\"],[\"nùm\",\"kɨz\",\"tɨd\",\"taa\",\"see\",\"nzu\",\"dum\",\"fɔe\",\"dzu\",\"lɔm\",\"kaa\",\"fwo\"],[\"ndzɔ̀ŋɔ̀nùm\",\"ndzɔ̀ŋɔ̀kƗ̀zùʔ\",\"ndzɔ̀ŋɔ̀tƗ̀dʉ̀ghà\",\"ndzɔ̀ŋɔ̀tǎafʉ̄ghā\",\"ndzɔ̀ŋèsèe\",\"ndzɔ̀ŋɔ̀nzùghò\",\"ndzɔ̀ŋɔ̀dùmlo\",\"ndzɔ̀ŋɔ̀kwîfɔ̀e\",\"ndzɔ̀ŋɔ̀tƗ̀fʉ̀ghàdzughù\",\"ndzɔ̀ŋɔ̀ghǔuwelɔ̀m\",\"ndzɔ̀ŋɔ̀chwaʔàkaa wo\",\"ndzɔ̀ŋèfwòo\"]],u,[[\"SK\",\"BK\"],u,[\"Sěe Kɨ̀lesto\",\"Bǎa Kɨ̀lesto\"]],1,[6,0],[\"d/M/y\",\"d MMM, y\",\"d MMMM y\",\"EEEE d MMMM y\"],[\"HH:mm\",\"HH:mm:ss\",\"HH:mm:ss z\",\"HH:mm:ss zzzz\"],[\"{1} {0}\",u,u,u],[\",\",\" \",\";\",\"%\",\"+\",\"-\",\"E\",\"×\",\"‰\",\"∞\",\"NaN\",\":\"],[\"#,##0.###\",\"#,##0%\",\"#,##0.00¤\",\"#E0\"],\"XAF\",\"FCFA\",\"CFA Fàlâŋ BEAC\",{\"JPY\":[\"JP¥\",\"¥\"],\"USD\":[\"US$\",\"$\"]},\"ltr\", plural];\n"]}
|
14
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ak.d.ts
generated
vendored
Executable file
14
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ak.d.ts
generated
vendored
Executable file
|
@ -0,0 +1,14 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
declare function plural(val: number): number;
|
||||
declare const _default: (string | number | number[] | (string | undefined)[] | typeof plural | (string[] | undefined)[] | {
|
||||
GHS: string[];
|
||||
JPY: string[];
|
||||
USD: string[];
|
||||
} | undefined)[];
|
||||
export default _default;
|
17
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ak.js
generated
vendored
Executable file
17
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ak.js
generated
vendored
Executable file
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
// THIS CODE IS GENERATED - DO NOT MODIFY.
|
||||
const u = undefined;
|
||||
function plural(val) {
|
||||
const n = val;
|
||||
if (n === Math.floor(n) && (n >= 0 && n <= 1))
|
||||
return 1;
|
||||
return 5;
|
||||
}
|
||||
export default ["ak", [["AN", "EW"], u, u], u, [["K", "D", "B", "W", "Y", "F", "M"], ["Kwe", "Dwo", "Ben", "Wuk", "Yaw", "Fia", "Mem"], ["Kwesida", "Dwowda", "Benada", "Wukuda", "Yawda", "Fida", "Memeneda"], ["Kwe", "Dwo", "Ben", "Wuk", "Yaw", "Fia", "Mem"]], u, [["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], ["S-Ɔ", "K-Ɔ", "E-Ɔ", "E-O", "E-K", "O-A", "A-K", "D-Ɔ", "F-Ɛ", "Ɔ-A", "Ɔ-O", "M-Ɔ"], ["Sanda-Ɔpɛpɔn", "Kwakwar-Ɔgyefuo", "Ebɔw-Ɔbenem", "Ebɔbira-Oforisuo", "Esusow Aketseaba-Kɔtɔnimba", "Obirade-Ayɛwohomumu", "Ayɛwoho-Kitawonsa", "Difuu-Ɔsandaa", "Fankwa-Ɛbɔ", "Ɔbɛsɛ-Ahinime", "Ɔberɛfɛw-Obubuo", "Mumu-Ɔpɛnimba"]], u, [["AK", "KE"], u, ["Ansa Kristo", "Kristo Ekyiri"]], 1, [6, 0], ["yy/MM/dd", "y MMM d", "y MMMM d", "EEEE, y MMMM dd"], ["h:mm a", "h:mm:ss a", "h:mm:ss a z", "h:mm:ss a zzzz"], ["{1} {0}", u, u, u], [".", ",", ";", "%", "+", "-", "E", "×", "‰", "∞", "NaN", ":"], ["#,##0.###", "#,##0%", "¤#,##0.00", "#E0"], "GHS", "GH₵", "Ghana Sidi", { "GHS": ["GH₵"], "JPY": ["JP¥", "¥"], "USD": ["US$", "$"] }, "ltr", plural];
|
||||
//# sourceMappingURL=ak.js.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ak.js.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ak.js.map
generated
vendored
Executable file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"ak.js","sourceRoot":"","sources":["ak.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,0CAA0C;AAC1C,MAAM,CAAC,GAAG,SAAS,CAAC;AAEpB,SAAS,MAAM,CAAC,GAAW;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC;IAEd,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC;IACb,OAAO,CAAC,CAAC;AACT,CAAC;AAED,eAAe,CAAC,IAAI,EAAC,CAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,SAAS,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,EAAC,OAAO,EAAC,MAAM,EAAC,UAAU,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,cAAc,EAAC,iBAAiB,EAAC,aAAa,EAAC,kBAAkB,EAAC,4BAA4B,EAAC,qBAAqB,EAAC,mBAAmB,EAAC,eAAe,EAAC,YAAY,EAAC,eAAe,EAAC,iBAAiB,EAAC,eAAe,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC,aAAa,EAAC,eAAe,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,iBAAiB,CAAC,EAAC,CAAC,QAAQ,EAAC,WAAW,EAAC,aAAa,EAAC,gBAAgB,CAAC,EAAC,CAAC,SAAS,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,CAAC,EAAC,CAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,KAAK,CAAC,EAAC,KAAK,EAAC,KAAK,EAAC,YAAY,EAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n// THIS CODE IS GENERATED - DO NOT MODIFY.\nconst u = undefined;\n\nfunction plural(val: number): number {\nconst n = val;\n\nif (n === Math.floor(n) && (n >= 0 && n <= 1))\n return 1;\nreturn 5;\n}\n\nexport default [\"ak\",[[\"AN\",\"EW\"],u,u],u,[[\"K\",\"D\",\"B\",\"W\",\"Y\",\"F\",\"M\"],[\"Kwe\",\"Dwo\",\"Ben\",\"Wuk\",\"Yaw\",\"Fia\",\"Mem\"],[\"Kwesida\",\"Dwowda\",\"Benada\",\"Wukuda\",\"Yawda\",\"Fida\",\"Memeneda\"],[\"Kwe\",\"Dwo\",\"Ben\",\"Wuk\",\"Yaw\",\"Fia\",\"Mem\"]],u,[[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],[\"S-Ɔ\",\"K-Ɔ\",\"E-Ɔ\",\"E-O\",\"E-K\",\"O-A\",\"A-K\",\"D-Ɔ\",\"F-Ɛ\",\"Ɔ-A\",\"Ɔ-O\",\"M-Ɔ\"],[\"Sanda-Ɔpɛpɔn\",\"Kwakwar-Ɔgyefuo\",\"Ebɔw-Ɔbenem\",\"Ebɔbira-Oforisuo\",\"Esusow Aketseaba-Kɔtɔnimba\",\"Obirade-Ayɛwohomumu\",\"Ayɛwoho-Kitawonsa\",\"Difuu-Ɔsandaa\",\"Fankwa-Ɛbɔ\",\"Ɔbɛsɛ-Ahinime\",\"Ɔberɛfɛw-Obubuo\",\"Mumu-Ɔpɛnimba\"]],u,[[\"AK\",\"KE\"],u,[\"Ansa Kristo\",\"Kristo Ekyiri\"]],1,[6,0],[\"yy/MM/dd\",\"y MMM d\",\"y MMMM d\",\"EEEE, y MMMM dd\"],[\"h:mm a\",\"h:mm:ss a\",\"h:mm:ss a z\",\"h:mm:ss a zzzz\"],[\"{1} {0}\",u,u,u],[\".\",\",\",\";\",\"%\",\"+\",\"-\",\"E\",\"×\",\"‰\",\"∞\",\"NaN\",\":\"],[\"#,##0.###\",\"#,##0%\",\"¤#,##0.00\",\"#E0\"],\"GHS\",\"GH₵\",\"Ghana Sidi\",{\"GHS\":[\"GH₵\"],\"JPY\":[\"JP¥\",\"¥\"],\"USD\":[\"US$\",\"$\"]},\"ltr\", plural];\n"]}
|
20
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/am.d.ts
generated
vendored
Executable file
20
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/am.d.ts
generated
vendored
Executable file
|
@ -0,0 +1,20 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
declare function plural(val: number): number;
|
||||
declare const _default: (string | number | number[] | (string | undefined)[] | typeof plural | (string[] | undefined)[] | {
|
||||
AUD: string[];
|
||||
BYN: (string | undefined)[];
|
||||
CNH: string[];
|
||||
ETB: string[];
|
||||
JPY: string[];
|
||||
PHP: (string | undefined)[];
|
||||
THB: string[];
|
||||
TWD: string[];
|
||||
USD: string[];
|
||||
} | undefined)[];
|
||||
export default _default;
|
17
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/am.js
generated
vendored
Executable file
17
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/am.js
generated
vendored
Executable file
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
// THIS CODE IS GENERATED - DO NOT MODIFY.
|
||||
const u = undefined;
|
||||
function plural(val) {
|
||||
const n = val, i = Math.floor(Math.abs(val));
|
||||
if (i === 0 || n === 1)
|
||||
return 1;
|
||||
return 5;
|
||||
}
|
||||
export default ["am", [["ጠ", "ከ"], ["ጥዋት", "ከሰዓት"], u], u, [["እ", "ሰ", "ማ", "ረ", "ሐ", "ዓ", "ቅ"], ["እሑድ", "ሰኞ", "ማክሰ", "ረቡዕ", "ሐሙስ", "ዓርብ", "ቅዳሜ"], ["እሑድ", "ሰኞ", "ማክሰኞ", "ረቡዕ", "ሐሙስ", "ዓርብ", "ቅዳሜ"], ["እ", "ሰ", "ማ", "ረ", "ሐ", "ዓ", "ቅ"]], u, [["ጃ", "ፌ", "ማ", "ኤ", "ሜ", "ጁ", "ጁ", "ኦ", "ሴ", "ኦ", "ኖ", "ዲ"], ["ጃንዩ", "ፌብሩ", "ማርች", "ኤፕሪ", "ሜይ", "ጁን", "ጁላይ", "ኦገስ", "ሴፕቴ", "ኦክቶ", "ኖቬም", "ዲሴም"], ["ጃንዩወሪ", "ፌብሩወሪ", "ማርች", "ኤፕሪል", "ሜይ", "ጁን", "ጁላይ", "ኦገስት", "ሴፕቴምበር", "ኦክቶበር", "ኖቬምበር", "ዲሴምበር"]], u, [["ዓ/ዓ", "ዓ/ም"], u, ["ዓመተ ዓለም", "ዓመተ ምሕረት"]], 0, [6, 0], ["dd/MM/y", "d MMM y", "d MMMM y", "y MMMM d, EEEE"], ["h:mm a", "h:mm:ss a", "h:mm:ss a z", "h:mm:ss a zzzz"], ["{1} {0}", u, u, u], [".", ",", ";", "%", "+", "-", "E", "×", "‰", "∞", "NaN", ":"], ["#,##0.###", "#,##0%", "¤#,##0.00", "#E0"], "ETB", "ብር", "የኢትዮጵያ ብር", { "AUD": ["AU$", "$"], "BYN": [u, "р."], "CNH": ["የቻይና ዩዋን"], "ETB": ["ብር"], "JPY": ["JP¥", "¥"], "PHP": [u, "₱"], "THB": ["฿"], "TWD": ["NT$"], "USD": ["US$", "$"] }, "ltr", plural];
|
||||
//# sourceMappingURL=am.js.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/am.js.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/am.js.map
generated
vendored
Executable file
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"am.js","sourceRoot":"","sources":["am.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,0CAA0C;AAC1C,MAAM,CAAC,GAAG,SAAS,CAAC;AAEpB,SAAS,MAAM,CAAC,GAAW;IAC3B,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAClB,OAAO,CAAC,CAAC;IACb,OAAO,CAAC,CAAC;AACT,CAAC;AAED,eAAe,CAAC,IAAI,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,KAAK,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,KAAK,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,SAAS,EAAC,UAAU,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,gBAAgB,CAAC,EAAC,CAAC,QAAQ,EAAC,WAAW,EAAC,aAAa,EAAC,gBAAgB,CAAC,EAAC,CAAC,SAAS,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,CAAC,EAAC,CAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,KAAK,CAAC,EAAC,KAAK,EAAC,IAAI,EAAC,WAAW,EAAC,EAAC,KAAK,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,UAAU,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n// THIS CODE IS GENERATED - DO NOT MODIFY.\nconst u = undefined;\n\nfunction plural(val: number): number {\nconst n = val, i = Math.floor(Math.abs(val));\n\nif (i === 0 || n === 1)\n return 1;\nreturn 5;\n}\n\nexport default [\"am\",[[\"ጠ\",\"ከ\"],[\"ጥዋት\",\"ከሰዓት\"],u],u,[[\"እ\",\"ሰ\",\"ማ\",\"ረ\",\"ሐ\",\"ዓ\",\"ቅ\"],[\"እሑድ\",\"ሰኞ\",\"ማክሰ\",\"ረቡዕ\",\"ሐሙስ\",\"ዓርብ\",\"ቅዳሜ\"],[\"እሑድ\",\"ሰኞ\",\"ማክሰኞ\",\"ረቡዕ\",\"ሐሙስ\",\"ዓርብ\",\"ቅዳሜ\"],[\"እ\",\"ሰ\",\"ማ\",\"ረ\",\"ሐ\",\"ዓ\",\"ቅ\"]],u,[[\"ጃ\",\"ፌ\",\"ማ\",\"ኤ\",\"ሜ\",\"ጁ\",\"ጁ\",\"ኦ\",\"ሴ\",\"ኦ\",\"ኖ\",\"ዲ\"],[\"ጃንዩ\",\"ፌብሩ\",\"ማርች\",\"ኤፕሪ\",\"ሜይ\",\"ጁን\",\"ጁላይ\",\"ኦገስ\",\"ሴፕቴ\",\"ኦክቶ\",\"ኖቬም\",\"ዲሴም\"],[\"ጃንዩወሪ\",\"ፌብሩወሪ\",\"ማርች\",\"ኤፕሪል\",\"ሜይ\",\"ጁን\",\"ጁላይ\",\"ኦገስት\",\"ሴፕቴምበር\",\"ኦክቶበር\",\"ኖቬምበር\",\"ዲሴምበር\"]],u,[[\"ዓ/ዓ\",\"ዓ/ም\"],u,[\"ዓመተ ዓለም\",\"ዓመተ ምሕረት\"]],0,[6,0],[\"dd/MM/y\",\"d MMM y\",\"d MMMM y\",\"y MMMM d, EEEE\"],[\"h:mm a\",\"h:mm:ss a\",\"h:mm:ss a z\",\"h:mm:ss a zzzz\"],[\"{1} {0}\",u,u,u],[\".\",\",\",\";\",\"%\",\"+\",\"-\",\"E\",\"×\",\"‰\",\"∞\",\"NaN\",\":\"],[\"#,##0.###\",\"#,##0%\",\"¤#,##0.00\",\"#E0\"],\"ETB\",\"ብር\",\"የኢትዮጵያ ብር\",{\"AUD\":[\"AU$\",\"$\"],\"BYN\":[u,\"р.\"],\"CNH\":[\"የቻይና ዩዋን\"],\"ETB\":[\"ብር\"],\"JPY\":[\"JP¥\",\"¥\"],\"PHP\":[u,\"₱\"],\"THB\":[\"฿\"],\"TWD\":[\"NT$\"],\"USD\":[\"US$\",\"$\"]},\"ltr\", plural];\n"]}
|
62
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-AE.d.ts
generated
vendored
Executable file
62
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-AE.d.ts
generated
vendored
Executable file
|
@ -0,0 +1,62 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
declare function plural(val: number): number;
|
||||
declare const _default: (string | number | number[] | (string | undefined)[] | typeof plural | (string[] | undefined)[] | {
|
||||
AED: string[];
|
||||
ARS: (string | undefined)[];
|
||||
AUD: string[];
|
||||
BBD: (string | undefined)[];
|
||||
BHD: string[];
|
||||
BMD: (string | undefined)[];
|
||||
BSD: (string | undefined)[];
|
||||
BYN: (string | undefined)[];
|
||||
BZD: (string | undefined)[];
|
||||
CAD: string[];
|
||||
CLP: (string | undefined)[];
|
||||
CNY: string[];
|
||||
COP: (string | undefined)[];
|
||||
CUP: (string | undefined)[];
|
||||
DOP: (string | undefined)[];
|
||||
DZD: string[];
|
||||
EGP: string[];
|
||||
FJD: (string | undefined)[];
|
||||
GBP: string[];
|
||||
GYD: (string | undefined)[];
|
||||
HKD: string[];
|
||||
IQD: string[];
|
||||
IRR: string[];
|
||||
JMD: (string | undefined)[];
|
||||
JOD: string[];
|
||||
JPY: string[];
|
||||
KWD: string[];
|
||||
KYD: (string | undefined)[];
|
||||
LBP: string[];
|
||||
LRD: (string | undefined)[];
|
||||
LYD: string[];
|
||||
MAD: string[];
|
||||
MRU: string[];
|
||||
MXN: string[];
|
||||
NZD: string[];
|
||||
OMR: string[];
|
||||
PHP: (string | undefined)[];
|
||||
QAR: string[];
|
||||
SAR: string[];
|
||||
SBD: (string | undefined)[];
|
||||
SDD: string[];
|
||||
SDG: string[];
|
||||
SRD: (string | undefined)[];
|
||||
SYP: string[];
|
||||
THB: string[];
|
||||
TND: string[];
|
||||
TTD: (string | undefined)[];
|
||||
TWD: string[];
|
||||
USD: string[];
|
||||
UYU: (string | undefined)[];
|
||||
YER: string[];
|
||||
} | undefined)[];
|
||||
export default _default;
|
25
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-AE.js
generated
vendored
Executable file
25
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-AE.js
generated
vendored
Executable file
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
// THIS CODE IS GENERATED - DO NOT MODIFY.
|
||||
const u = undefined;
|
||||
function plural(val) {
|
||||
const n = val;
|
||||
if (n === 0)
|
||||
return 0;
|
||||
if (n === 1)
|
||||
return 1;
|
||||
if (n === 2)
|
||||
return 2;
|
||||
if (n % 100 === Math.floor(n % 100) && (n % 100 >= 3 && n % 100 <= 10))
|
||||
return 3;
|
||||
if (n % 100 === Math.floor(n % 100) && (n % 100 >= 11 && n % 100 <= 99))
|
||||
return 4;
|
||||
return 5;
|
||||
}
|
||||
export default ["ar-AE", [["ص", "م"], u, u], [["ص", "م"], u, ["صباحًا", "مساءً"]], [["ح", "ن", "ث", "ر", "خ", "ج", "س"], ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"], u, ["أحد", "إثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت"]], u, [["ي", "ف", "م", "أ", "و", "ن", "ل", "غ", "س", "ك", "ب", "د"], ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], u], u, [["ق.م", "م"], u, ["قبل الميلاد", "ميلادي"]], 6, [6, 0], ["d/M/y", "dd/MM/y", "d MMMM y", "EEEE، d MMMM y"], ["h:mm a", "h:mm:ss a", "h:mm:ss a z", "h:mm:ss a zzzz"], ["{1}, {0}", u, "{1} في {0}", u], [".", ",", ";", "%", "+", "-", "E", "×", "‰", "∞", "ليس رقمًا", ":"], ["#,##0.###", "#,##0%", "¤ #,##0.00", "#E0"], "AED", "د.إ.", "درهم إماراتي", { "AED": ["د.إ."], "ARS": [u, "AR$"], "AUD": ["AU$"], "BBD": [u, "BB$"], "BHD": ["د.ب."], "BMD": [u, "BM$"], "BSD": [u, "BS$"], "BYN": [u, "р."], "BZD": [u, "BZ$"], "CAD": ["CA$"], "CLP": [u, "CL$"], "CNY": ["CN¥"], "COP": [u, "CO$"], "CUP": [u, "CU$"], "DOP": [u, "DO$"], "DZD": ["د.ج."], "EGP": ["ج.م.", "E£"], "FJD": [u, "FJ$"], "GBP": ["UK£"], "GYD": [u, "GY$"], "HKD": ["HK$"], "IQD": ["د.ع."], "IRR": ["ر.إ."], "JMD": [u, "JM$"], "JOD": ["د.أ."], "JPY": ["JP¥"], "KWD": ["د.ك."], "KYD": [u, "KY$"], "LBP": ["ل.ل.", "L£"], "LRD": [u, "$LR"], "LYD": ["د.ل."], "MAD": ["د.م."], "MRU": ["أ.م."], "MXN": ["MX$"], "NZD": ["NZ$"], "OMR": ["ر.ع."], "PHP": [u, "₱"], "QAR": ["ر.ق."], "SAR": ["ر.س."], "SBD": [u, "SB$"], "SDD": ["د.س."], "SDG": ["ج.س."], "SRD": [u, "SR$"], "SYP": ["ل.س.", "£"], "THB": ["฿"], "TND": ["د.ت."], "TTD": [u, "TT$"], "TWD": ["NT$"], "USD": ["US$"], "UYU": [u, "UY$"], "YER": ["ر.ي."] }, "rtl", plural];
|
||||
//# sourceMappingURL=ar-AE.js.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-AE.js.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-AE.js.map
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
63
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-BH.d.ts
generated
vendored
Executable file
63
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-BH.d.ts
generated
vendored
Executable file
|
@ -0,0 +1,63 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
declare function plural(val: number): number;
|
||||
declare const _default: (string | number | number[] | (string | undefined)[] | typeof plural | (string[] | undefined)[] | {
|
||||
AED: string[];
|
||||
ARS: (string | undefined)[];
|
||||
AUD: string[];
|
||||
BBD: (string | undefined)[];
|
||||
BHD: string[];
|
||||
BMD: (string | undefined)[];
|
||||
BND: (string | undefined)[];
|
||||
BSD: (string | undefined)[];
|
||||
BYN: (string | undefined)[];
|
||||
BZD: (string | undefined)[];
|
||||
CAD: string[];
|
||||
CLP: (string | undefined)[];
|
||||
CNY: string[];
|
||||
COP: (string | undefined)[];
|
||||
CUP: (string | undefined)[];
|
||||
DOP: (string | undefined)[];
|
||||
DZD: string[];
|
||||
EGP: string[];
|
||||
FJD: (string | undefined)[];
|
||||
GBP: string[];
|
||||
GYD: (string | undefined)[];
|
||||
HKD: string[];
|
||||
IQD: string[];
|
||||
IRR: string[];
|
||||
JMD: (string | undefined)[];
|
||||
JOD: string[];
|
||||
JPY: string[];
|
||||
KWD: string[];
|
||||
KYD: (string | undefined)[];
|
||||
LBP: string[];
|
||||
LRD: (string | undefined)[];
|
||||
LYD: string[];
|
||||
MAD: string[];
|
||||
MRU: string[];
|
||||
MXN: string[];
|
||||
NZD: string[];
|
||||
OMR: string[];
|
||||
PHP: (string | undefined)[];
|
||||
QAR: string[];
|
||||
SAR: string[];
|
||||
SBD: (string | undefined)[];
|
||||
SDD: string[];
|
||||
SDG: string[];
|
||||
SRD: (string | undefined)[];
|
||||
SYP: string[];
|
||||
THB: string[];
|
||||
TND: string[];
|
||||
TTD: (string | undefined)[];
|
||||
TWD: string[];
|
||||
USD: string[];
|
||||
UYU: (string | undefined)[];
|
||||
YER: string[];
|
||||
} | undefined)[];
|
||||
export default _default;
|
25
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-BH.js
generated
vendored
Executable file
25
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-BH.js
generated
vendored
Executable file
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
// THIS CODE IS GENERATED - DO NOT MODIFY.
|
||||
const u = undefined;
|
||||
function plural(val) {
|
||||
const n = val;
|
||||
if (n === 0)
|
||||
return 0;
|
||||
if (n === 1)
|
||||
return 1;
|
||||
if (n === 2)
|
||||
return 2;
|
||||
if (n % 100 === Math.floor(n % 100) && (n % 100 >= 3 && n % 100 <= 10))
|
||||
return 3;
|
||||
if (n % 100 === Math.floor(n % 100) && (n % 100 >= 11 && n % 100 <= 99))
|
||||
return 4;
|
||||
return 5;
|
||||
}
|
||||
export default ["ar-BH", [["ص", "م"], u, u], [["ص", "م"], u, ["صباحًا", "مساءً"]], [["ح", "ن", "ث", "ر", "خ", "ج", "س"], ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"], u, ["أحد", "إثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت"]], u, [["ي", "ف", "م", "أ", "و", "ن", "ل", "غ", "س", "ك", "ب", "د"], ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], u], u, [["ق.م", "م"], u, ["قبل الميلاد", "ميلادي"]], 6, [5, 6], ["d/M/y", "dd/MM/y", "d MMMM y", "EEEE، d MMMM y"], ["h:mm a", "h:mm:ss a", "h:mm:ss a z", "h:mm:ss a zzzz"], ["{1}, {0}", u, "{1} في {0}", u], [".", ",", ";", "%", "+", "-", "E", "×", "‰", "∞", "ليس رقمًا", ":"], ["#,##0.###", "#,##0%", "¤ #,##0.00", "#E0"], "BHD", "د.ب.", "دينار بحريني", { "AED": ["د.إ."], "ARS": [u, "AR$"], "AUD": ["AU$"], "BBD": [u, "BB$"], "BHD": ["د.ب."], "BMD": [u, "BM$"], "BND": [u, "BN$"], "BSD": [u, "BS$"], "BYN": [u, "р."], "BZD": [u, "BZ$"], "CAD": ["CA$"], "CLP": [u, "CL$"], "CNY": ["CN¥"], "COP": [u, "CO$"], "CUP": [u, "CU$"], "DOP": [u, "DO$"], "DZD": ["د.ج."], "EGP": ["ج.م.", "E£"], "FJD": [u, "FJ$"], "GBP": ["UK£"], "GYD": [u, "GY$"], "HKD": ["HK$"], "IQD": ["د.ع."], "IRR": ["ر.إ."], "JMD": [u, "JM$"], "JOD": ["د.أ."], "JPY": ["JP¥"], "KWD": ["د.ك."], "KYD": [u, "KY$"], "LBP": ["ل.ل.", "L£"], "LRD": [u, "$LR"], "LYD": ["د.ل."], "MAD": ["د.م."], "MRU": ["أ.م."], "MXN": ["MX$"], "NZD": ["NZ$"], "OMR": ["ر.ع."], "PHP": [u, "₱"], "QAR": ["ر.ق."], "SAR": ["ر.س."], "SBD": [u, "SB$"], "SDD": ["د.س."], "SDG": ["ج.س."], "SRD": [u, "SR$"], "SYP": ["ل.س.", "£"], "THB": ["฿"], "TND": ["د.ت."], "TTD": [u, "TT$"], "TWD": ["NT$"], "USD": ["US$"], "UYU": [u, "UY$"], "YER": ["ر.ي."] }, "rtl", plural];
|
||||
//# sourceMappingURL=ar-BH.js.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-BH.js.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-BH.js.map
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
64
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-DJ.d.ts
generated
vendored
Executable file
64
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-DJ.d.ts
generated
vendored
Executable file
|
@ -0,0 +1,64 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
declare function plural(val: number): number;
|
||||
declare const _default: (string | number | number[] | (string | undefined)[] | typeof plural | (string[] | undefined)[] | {
|
||||
AED: string[];
|
||||
ARS: (string | undefined)[];
|
||||
AUD: string[];
|
||||
BBD: (string | undefined)[];
|
||||
BHD: string[];
|
||||
BMD: (string | undefined)[];
|
||||
BND: (string | undefined)[];
|
||||
BSD: (string | undefined)[];
|
||||
BYN: (string | undefined)[];
|
||||
BZD: (string | undefined)[];
|
||||
CAD: string[];
|
||||
CLP: (string | undefined)[];
|
||||
CNY: string[];
|
||||
COP: (string | undefined)[];
|
||||
CUP: (string | undefined)[];
|
||||
DJF: string[];
|
||||
DOP: (string | undefined)[];
|
||||
DZD: string[];
|
||||
EGP: string[];
|
||||
FJD: (string | undefined)[];
|
||||
GBP: string[];
|
||||
GYD: (string | undefined)[];
|
||||
HKD: string[];
|
||||
IQD: string[];
|
||||
IRR: string[];
|
||||
JMD: (string | undefined)[];
|
||||
JOD: string[];
|
||||
JPY: string[];
|
||||
KWD: string[];
|
||||
KYD: (string | undefined)[];
|
||||
LBP: string[];
|
||||
LRD: (string | undefined)[];
|
||||
LYD: string[];
|
||||
MAD: string[];
|
||||
MRU: string[];
|
||||
MXN: string[];
|
||||
NZD: string[];
|
||||
OMR: string[];
|
||||
PHP: (string | undefined)[];
|
||||
QAR: string[];
|
||||
SAR: string[];
|
||||
SBD: (string | undefined)[];
|
||||
SDD: string[];
|
||||
SDG: string[];
|
||||
SRD: (string | undefined)[];
|
||||
SYP: string[];
|
||||
THB: string[];
|
||||
TND: string[];
|
||||
TTD: (string | undefined)[];
|
||||
TWD: string[];
|
||||
USD: string[];
|
||||
UYU: (string | undefined)[];
|
||||
YER: string[];
|
||||
} | undefined)[];
|
||||
export default _default;
|
25
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-DJ.js
generated
vendored
Executable file
25
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-DJ.js
generated
vendored
Executable file
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
// THIS CODE IS GENERATED - DO NOT MODIFY.
|
||||
const u = undefined;
|
||||
function plural(val) {
|
||||
const n = val;
|
||||
if (n === 0)
|
||||
return 0;
|
||||
if (n === 1)
|
||||
return 1;
|
||||
if (n === 2)
|
||||
return 2;
|
||||
if (n % 100 === Math.floor(n % 100) && (n % 100 >= 3 && n % 100 <= 10))
|
||||
return 3;
|
||||
if (n % 100 === Math.floor(n % 100) && (n % 100 >= 11 && n % 100 <= 99))
|
||||
return 4;
|
||||
return 5;
|
||||
}
|
||||
export default ["ar-DJ", [["ص", "م"], u, u], [["ص", "م"], u, ["صباحًا", "مساءً"]], [["ح", "ن", "ث", "ر", "خ", "ج", "س"], ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"], u, ["أحد", "إثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت"]], u, [["ي", "ف", "م", "أ", "و", "ن", "ل", "غ", "س", "ك", "ب", "د"], ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], u], u, [["ق.م", "م"], u, ["قبل الميلاد", "ميلادي"]], 6, [6, 0], ["d/M/y", "dd/MM/y", "d MMMM y", "EEEE، d MMMM y"], ["h:mm a", "h:mm:ss a", "h:mm:ss a z", "h:mm:ss a zzzz"], ["{1}, {0}", u, "{1} في {0}", u], [".", ",", ";", "%", "+", "-", "E", "×", "‰", "∞", "ليس رقمًا", ":"], ["#,##0.###", "#,##0%", "¤ #,##0.00", "#E0"], "DJF", "Fdj", "فرنك جيبوتي", { "AED": ["د.إ."], "ARS": [u, "AR$"], "AUD": ["AU$"], "BBD": [u, "BB$"], "BHD": ["د.ب."], "BMD": [u, "BM$"], "BND": [u, "BN$"], "BSD": [u, "BS$"], "BYN": [u, "р."], "BZD": [u, "BZ$"], "CAD": ["CA$"], "CLP": [u, "CL$"], "CNY": ["CN¥"], "COP": [u, "CO$"], "CUP": [u, "CU$"], "DJF": ["Fdj"], "DOP": [u, "DO$"], "DZD": ["د.ج."], "EGP": ["ج.م.", "E£"], "FJD": [u, "FJ$"], "GBP": ["UK£"], "GYD": [u, "GY$"], "HKD": ["HK$"], "IQD": ["د.ع."], "IRR": ["ر.إ."], "JMD": [u, "JM$"], "JOD": ["د.أ."], "JPY": ["JP¥"], "KWD": ["د.ك."], "KYD": [u, "KY$"], "LBP": ["ل.ل.", "L£"], "LRD": [u, "$LR"], "LYD": ["د.ل."], "MAD": ["د.م."], "MRU": ["أ.م."], "MXN": ["MX$"], "NZD": ["NZ$"], "OMR": ["ر.ع."], "PHP": [u, "₱"], "QAR": ["ر.ق."], "SAR": ["ر.س."], "SBD": [u, "SB$"], "SDD": ["د.س."], "SDG": ["ج.س."], "SRD": [u, "SR$"], "SYP": ["ل.س.", "£"], "THB": ["฿"], "TND": ["د.ت."], "TTD": [u, "TT$"], "TWD": ["NT$"], "USD": ["US$"], "UYU": [u, "UY$"], "YER": ["ر.ي."] }, "rtl", plural];
|
||||
//# sourceMappingURL=ar-DJ.js.map
|
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-DJ.js.map
generated
vendored
Executable file
1
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-DJ.js.map
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
63
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-DZ.d.ts
generated
vendored
Executable file
63
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-DZ.d.ts
generated
vendored
Executable file
|
@ -0,0 +1,63 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
declare function plural(val: number): number;
|
||||
declare const _default: (string | number | number[] | (string | undefined)[] | typeof plural | (string[] | undefined)[] | {
|
||||
AED: string[];
|
||||
ARS: (string | undefined)[];
|
||||
AUD: string[];
|
||||
BBD: (string | undefined)[];
|
||||
BHD: string[];
|
||||
BMD: (string | undefined)[];
|
||||
BND: (string | undefined)[];
|
||||
BSD: (string | undefined)[];
|
||||
BYN: (string | undefined)[];
|
||||
BZD: (string | undefined)[];
|
||||
CAD: string[];
|
||||
CLP: (string | undefined)[];
|
||||
CNY: string[];
|
||||
COP: (string | undefined)[];
|
||||
CUP: (string | undefined)[];
|
||||
DOP: (string | undefined)[];
|
||||
DZD: string[];
|
||||
EGP: string[];
|
||||
FJD: (string | undefined)[];
|
||||
GBP: string[];
|
||||
GYD: (string | undefined)[];
|
||||
HKD: string[];
|
||||
IQD: string[];
|
||||
IRR: string[];
|
||||
JMD: (string | undefined)[];
|
||||
JOD: string[];
|
||||
JPY: string[];
|
||||
KWD: string[];
|
||||
KYD: (string | undefined)[];
|
||||
LBP: string[];
|
||||
LRD: (string | undefined)[];
|
||||
LYD: string[];
|
||||
MAD: string[];
|
||||
MRU: string[];
|
||||
MXN: string[];
|
||||
NZD: string[];
|
||||
OMR: string[];
|
||||
PHP: (string | undefined)[];
|
||||
QAR: string[];
|
||||
SAR: string[];
|
||||
SBD: (string | undefined)[];
|
||||
SDD: string[];
|
||||
SDG: string[];
|
||||
SRD: (string | undefined)[];
|
||||
SYP: string[];
|
||||
THB: string[];
|
||||
TND: string[];
|
||||
TTD: (string | undefined)[];
|
||||
TWD: string[];
|
||||
USD: string[];
|
||||
UYU: (string | undefined)[];
|
||||
YER: string[];
|
||||
} | undefined)[];
|
||||
export default _default;
|
25
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-DZ.js
generated
vendored
Executable file
25
my-workspace/projects/sae-lib/node_modules/@angular/common/locales/ar-DZ.js
generated
vendored
Executable file
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google LLC All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.dev/license
|
||||
*/
|
||||
// THIS CODE IS GENERATED - DO NOT MODIFY.
|
||||
const u = undefined;
|
||||
function plural(val) {
|
||||
const n = val;
|
||||
if (n === 0)
|
||||
return 0;
|
||||
if (n === 1)
|
||||
return 1;
|
||||
if (n === 2)
|
||||
return 2;
|
||||
if (n % 100 === Math.floor(n % 100) && (n % 100 >= 3 && n % 100 <= 10))
|
||||
return 3;
|
||||
if (n % 100 === Math.floor(n % 100) && (n % 100 >= 11 && n % 100 <= 99))
|
||||
return 4;
|
||||
return 5;
|
||||
}
|
||||
export default ["ar-DZ", [["ص", "م"], u, u], [["ص", "م"], u, ["صباحًا", "مساءً"]], [["ح", "ن", "ث", "ر", "خ", "ج", "س"], ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"], u, ["أحد", "إثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت"]], u, [["ج", "ف", "م", "أ", "م", "ج", "ج", "أ", "س", "أ", "ن", "د"], ["جانفي", "فيفري", "مارس", "أفريل", "ماي", "جوان", "جويلية", "أوت", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], u], u, [["ق.م", "م"], u, ["قبل الميلاد", "ميلادي"]], 6, [5, 6], ["d/M/y", "dd/MM/y", "d MMMM y", "EEEE، d MMMM y"], ["h:mm a", "h:mm:ss a", "h:mm:ss a z", "h:mm:ss a zzzz"], ["{1}, {0}", u, "{1} في {0}", u], [",", ".", ";", "%", "+", "-", "E", "×", "‰", "∞", "ليس رقمًا", ":"], ["#,##0.###", "#,##0%", "¤ #,##0.00", "#E0"], "DZD", "د.ج.", "دينار جزائري", { "AED": ["د.إ."], "ARS": [u, "AR$"], "AUD": ["AU$"], "BBD": [u, "BB$"], "BHD": ["د.ب."], "BMD": [u, "BM$"], "BND": [u, "BN$"], "BSD": [u, "BS$"], "BYN": [u, "р."], "BZD": [u, "BZ$"], "CAD": ["CA$"], "CLP": [u, "CL$"], "CNY": ["CN¥"], "COP": [u, "CO$"], "CUP": [u, "CU$"], "DOP": [u, "DO$"], "DZD": ["د.ج."], "EGP": ["ج.م.", "E£"], "FJD": [u, "FJ$"], "GBP": ["UK£"], "GYD": [u, "GY$"], "HKD": ["HK$"], "IQD": ["د.ع."], "IRR": ["ر.إ."], "JMD": [u, "JM$"], "JOD": ["د.أ."], "JPY": ["JP¥"], "KWD": ["د.ك."], "KYD": [u, "KY$"], "LBP": ["ل.ل.", "L£"], "LRD": [u, "$LR"], "LYD": ["د.ل."], "MAD": ["د.م."], "MRU": ["أ.م."], "MXN": ["MX$"], "NZD": ["NZ$"], "OMR": ["ر.ع."], "PHP": [u, "₱"], "QAR": ["ر.ق."], "SAR": ["ر.س."], "SBD": [u, "SB$"], "SDD": ["د.س."], "SDG": ["ج.س."], "SRD": [u, "SR$"], "SYP": ["ل.س.", "£"], "THB": ["฿"], "TND": ["د.ت."], "TTD": [u, "TT$"], "TWD": ["NT$"], "USD": ["US$"], "UYU": [u, "UY$"], "YER": ["ر.ي."] }, "rtl", plural];
|
||||
//# sourceMappingURL=ar-DZ.js.map
|
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