syzygy-foundation-rn 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +100 -0
- package/CHANGELOG.md +87 -0
- package/LICENSE +21 -0
- package/README.md +179 -0
- package/dist/__tests__/AuthToken.test.d.ts +2 -0
- package/dist/__tests__/AuthToken.test.d.ts.map +1 -0
- package/dist/__tests__/AuthToken.test.js +40 -0
- package/dist/__tests__/AuthToken.test.js.map +1 -0
- package/dist/__tests__/FixedTimeProvider.test.d.ts +2 -0
- package/dist/__tests__/FixedTimeProvider.test.d.ts.map +1 -0
- package/dist/__tests__/FixedTimeProvider.test.js +23 -0
- package/dist/__tests__/FixedTimeProvider.test.js.map +1 -0
- package/dist/__tests__/MockAuthProvider.test.d.ts +2 -0
- package/dist/__tests__/MockAuthProvider.test.d.ts.map +1 -0
- package/dist/__tests__/MockAuthProvider.test.js +46 -0
- package/dist/__tests__/MockAuthProvider.test.js.map +1 -0
- package/dist/__tests__/MockConnectivityProvider.test.d.ts +2 -0
- package/dist/__tests__/MockConnectivityProvider.test.d.ts.map +1 -0
- package/dist/__tests__/MockConnectivityProvider.test.js +34 -0
- package/dist/__tests__/MockConnectivityProvider.test.js.map +1 -0
- package/dist/__tests__/MockLogger.test.d.ts +2 -0
- package/dist/__tests__/MockLogger.test.d.ts.map +1 -0
- package/dist/__tests__/MockLogger.test.js +42 -0
- package/dist/__tests__/MockLogger.test.js.map +1 -0
- package/dist/__tests__/MockNetworkClient.test.d.ts +2 -0
- package/dist/__tests__/MockNetworkClient.test.d.ts.map +1 -0
- package/dist/__tests__/MockNetworkClient.test.js +41 -0
- package/dist/__tests__/MockNetworkClient.test.js.map +1 -0
- package/dist/__tests__/MockStorageProvider.test.d.ts +2 -0
- package/dist/__tests__/MockStorageProvider.test.d.ts.map +1 -0
- package/dist/__tests__/MockStorageProvider.test.js +38 -0
- package/dist/__tests__/MockStorageProvider.test.js.map +1 -0
- package/dist/__tests__/NetworkRequest.test.d.ts +2 -0
- package/dist/__tests__/NetworkRequest.test.d.ts.map +1 -0
- package/dist/__tests__/NetworkRequest.test.js +44 -0
- package/dist/__tests__/NetworkRequest.test.js.map +1 -0
- package/dist/__tests__/Page.test.d.ts +2 -0
- package/dist/__tests__/Page.test.d.ts.map +1 -0
- package/dist/__tests__/Page.test.js +53 -0
- package/dist/__tests__/Page.test.js.map +1 -0
- package/dist/__tests__/SpyAnalyticsProvider.test.d.ts +2 -0
- package/dist/__tests__/SpyAnalyticsProvider.test.d.ts.map +1 -0
- package/dist/__tests__/SpyAnalyticsProvider.test.js +40 -0
- package/dist/__tests__/SpyAnalyticsProvider.test.js.map +1 -0
- package/dist/__tests__/SyzygyEnvironment.test.d.ts +2 -0
- package/dist/__tests__/SyzygyEnvironment.test.d.ts.map +1 -0
- package/dist/__tests__/SyzygyEnvironment.test.js +21 -0
- package/dist/__tests__/SyzygyEnvironment.test.js.map +1 -0
- package/dist/__tests__/SyzygyErrorCode.test.d.ts +2 -0
- package/dist/__tests__/SyzygyErrorCode.test.d.ts.map +1 -0
- package/dist/__tests__/SyzygyErrorCode.test.js +31 -0
- package/dist/__tests__/SyzygyErrorCode.test.js.map +1 -0
- package/dist/__tests__/SyzygyID.test.d.ts +2 -0
- package/dist/__tests__/SyzygyID.test.d.ts.map +1 -0
- package/dist/__tests__/SyzygyID.test.js +43 -0
- package/dist/__tests__/SyzygyID.test.js.map +1 -0
- package/dist/__tests__/SyzygyTimestamp.test.d.ts +2 -0
- package/dist/__tests__/SyzygyTimestamp.test.d.ts.map +1 -0
- package/dist/__tests__/SyzygyTimestamp.test.js +36 -0
- package/dist/__tests__/SyzygyTimestamp.test.js.map +1 -0
- package/dist/__tests__/SyzygyVersion.test.d.ts +2 -0
- package/dist/__tests__/SyzygyVersion.test.d.ts.map +1 -0
- package/dist/__tests__/SyzygyVersion.test.js +9 -0
- package/dist/__tests__/SyzygyVersion.test.js.map +1 -0
- package/dist/__tests__/ValidationResult.test.d.ts +2 -0
- package/dist/__tests__/ValidationResult.test.d.ts.map +1 -0
- package/dist/__tests__/ValidationResult.test.js +25 -0
- package/dist/__tests__/ValidationResult.test.js.map +1 -0
- package/dist/contracts/analytics/AnalyticsEvent.d.ts +15 -0
- package/dist/contracts/analytics/AnalyticsEvent.d.ts.map +1 -0
- package/dist/contracts/analytics/AnalyticsEvent.js +8 -0
- package/dist/contracts/analytics/AnalyticsEvent.js.map +1 -0
- package/dist/contracts/analytics/AnalyticsProvider.d.ts +7 -0
- package/dist/contracts/analytics/AnalyticsProvider.d.ts.map +1 -0
- package/dist/contracts/analytics/AnalyticsProvider.js +3 -0
- package/dist/contracts/analytics/AnalyticsProvider.js.map +1 -0
- package/dist/contracts/auth/AuthProvider.d.ts +15 -0
- package/dist/contracts/auth/AuthProvider.d.ts.map +1 -0
- package/dist/contracts/auth/AuthProvider.js +3 -0
- package/dist/contracts/auth/AuthProvider.js.map +1 -0
- package/dist/contracts/auth/AuthState.d.ts +21 -0
- package/dist/contracts/auth/AuthState.d.ts.map +1 -0
- package/dist/contracts/auth/AuthState.js +14 -0
- package/dist/contracts/auth/AuthState.js.map +1 -0
- package/dist/contracts/auth/AuthToken.d.ts +8 -0
- package/dist/contracts/auth/AuthToken.d.ts.map +1 -0
- package/dist/contracts/auth/AuthToken.js +10 -0
- package/dist/contracts/auth/AuthToken.js.map +1 -0
- package/dist/contracts/connectivity/ConnectivityProvider.d.ts +13 -0
- package/dist/contracts/connectivity/ConnectivityProvider.d.ts.map +1 -0
- package/dist/contracts/connectivity/ConnectivityProvider.js +3 -0
- package/dist/contracts/connectivity/ConnectivityProvider.js.map +1 -0
- package/dist/contracts/connectivity/ConnectivityState.d.ts +3 -0
- package/dist/contracts/connectivity/ConnectivityState.d.ts.map +1 -0
- package/dist/contracts/connectivity/ConnectivityState.js +7 -0
- package/dist/contracts/connectivity/ConnectivityState.js.map +1 -0
- package/dist/contracts/logging/LogEntry.d.ts +19 -0
- package/dist/contracts/logging/LogEntry.d.ts.map +1 -0
- package/dist/contracts/logging/LogEntry.js +3 -0
- package/dist/contracts/logging/LogEntry.js.map +1 -0
- package/dist/contracts/logging/LogLevel.d.ts +8 -0
- package/dist/contracts/logging/LogLevel.d.ts.map +1 -0
- package/dist/contracts/logging/LogLevel.js +12 -0
- package/dist/contracts/logging/LogLevel.js.map +1 -0
- package/dist/contracts/logging/LoggerProtocol.d.ts +22 -0
- package/dist/contracts/logging/LoggerProtocol.d.ts.map +1 -0
- package/dist/contracts/logging/LoggerProtocol.js +28 -0
- package/dist/contracts/logging/LoggerProtocol.js.map +1 -0
- package/dist/contracts/network/NetworkClientProtocol.d.ts +6 -0
- package/dist/contracts/network/NetworkClientProtocol.d.ts.map +1 -0
- package/dist/contracts/network/NetworkClientProtocol.js +3 -0
- package/dist/contracts/network/NetworkClientProtocol.js.map +1 -0
- package/dist/contracts/network/NetworkMethod.d.ts +10 -0
- package/dist/contracts/network/NetworkMethod.d.ts.map +1 -0
- package/dist/contracts/network/NetworkMethod.js +12 -0
- package/dist/contracts/network/NetworkMethod.js.map +1 -0
- package/dist/contracts/network/NetworkRequest.d.ts +12 -0
- package/dist/contracts/network/NetworkRequest.d.ts.map +1 -0
- package/dist/contracts/network/NetworkRequest.js +7 -0
- package/dist/contracts/network/NetworkRequest.js.map +1 -0
- package/dist/contracts/network/NetworkResponse.d.ts +14 -0
- package/dist/contracts/network/NetworkResponse.d.ts.map +1 -0
- package/dist/contracts/network/NetworkResponse.js +12 -0
- package/dist/contracts/network/NetworkResponse.js.map +1 -0
- package/dist/contracts/storage/StorageKey.d.ts +6 -0
- package/dist/contracts/storage/StorageKey.d.ts.map +1 -0
- package/dist/contracts/storage/StorageKey.js +7 -0
- package/dist/contracts/storage/StorageKey.js.map +1 -0
- package/dist/contracts/storage/StorageProvider.d.ts +12 -0
- package/dist/contracts/storage/StorageProvider.d.ts.map +1 -0
- package/dist/contracts/storage/StorageProvider.js +3 -0
- package/dist/contracts/storage/StorageProvider.js.map +1 -0
- package/dist/errors/SyzygyError.d.ts +9 -0
- package/dist/errors/SyzygyError.d.ts.map +1 -0
- package/dist/errors/SyzygyError.js +3 -0
- package/dist/errors/SyzygyError.js.map +1 -0
- package/dist/errors/SyzygyErrorCode.d.ts +17 -0
- package/dist/errors/SyzygyErrorCode.d.ts.map +1 -0
- package/dist/errors/SyzygyErrorCode.js +26 -0
- package/dist/errors/SyzygyErrorCode.js.map +1 -0
- package/dist/errors/SyzygyErrorSeverity.d.ts +7 -0
- package/dist/errors/SyzygyErrorSeverity.d.ts.map +1 -0
- package/dist/errors/SyzygyErrorSeverity.js +11 -0
- package/dist/errors/SyzygyErrorSeverity.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/primitives/id/SyzygyID.d.ts +10 -0
- package/dist/primitives/id/SyzygyID.d.ts.map +1 -0
- package/dist/primitives/id/SyzygyID.js +25 -0
- package/dist/primitives/id/SyzygyID.js.map +1 -0
- package/dist/primitives/pagination/Page.d.ts +17 -0
- package/dist/primitives/pagination/Page.d.ts.map +1 -0
- package/dist/primitives/pagination/Page.js +13 -0
- package/dist/primitives/pagination/Page.js.map +1 -0
- package/dist/primitives/pagination/PaginationRequest.d.ts +7 -0
- package/dist/primitives/pagination/PaginationRequest.d.ts.map +1 -0
- package/dist/primitives/pagination/PaginationRequest.js +11 -0
- package/dist/primitives/pagination/PaginationRequest.js.map +1 -0
- package/dist/primitives/time/SyzygyDuration.d.ts +13 -0
- package/dist/primitives/time/SyzygyDuration.d.ts.map +1 -0
- package/dist/primitives/time/SyzygyDuration.js +18 -0
- package/dist/primitives/time/SyzygyDuration.js.map +1 -0
- package/dist/primitives/time/SyzygyTimestamp.d.ts +10 -0
- package/dist/primitives/time/SyzygyTimestamp.d.ts.map +1 -0
- package/dist/primitives/time/SyzygyTimestamp.js +17 -0
- package/dist/primitives/time/SyzygyTimestamp.js.map +1 -0
- package/dist/primitives/time/TimeProvider.d.ts +7 -0
- package/dist/primitives/time/TimeProvider.d.ts.map +1 -0
- package/dist/primitives/time/TimeProvider.js +3 -0
- package/dist/primitives/time/TimeProvider.js.map +1 -0
- package/dist/primitives/validation/ValidationResult.d.ts +14 -0
- package/dist/primitives/validation/ValidationResult.d.ts.map +1 -0
- package/dist/primitives/validation/ValidationResult.js +12 -0
- package/dist/primitives/validation/ValidationResult.js.map +1 -0
- package/dist/primitives/validation/ValidationRule.d.ts +5 -0
- package/dist/primitives/validation/ValidationRule.d.ts.map +1 -0
- package/dist/primitives/validation/ValidationRule.js +3 -0
- package/dist/primitives/validation/ValidationRule.js.map +1 -0
- package/dist/sharedtypes/SyzygyBuildInfo.d.ts +11 -0
- package/dist/sharedtypes/SyzygyBuildInfo.d.ts.map +1 -0
- package/dist/sharedtypes/SyzygyBuildInfo.js +3 -0
- package/dist/sharedtypes/SyzygyBuildInfo.js.map +1 -0
- package/dist/sharedtypes/SyzygyConfiguration.d.ts +10 -0
- package/dist/sharedtypes/SyzygyConfiguration.d.ts.map +1 -0
- package/dist/sharedtypes/SyzygyConfiguration.js +3 -0
- package/dist/sharedtypes/SyzygyConfiguration.js.map +1 -0
- package/dist/sharedtypes/SyzygyEnvironment.d.ts +9 -0
- package/dist/sharedtypes/SyzygyEnvironment.d.ts.map +1 -0
- package/dist/sharedtypes/SyzygyEnvironment.js +11 -0
- package/dist/sharedtypes/SyzygyEnvironment.js.map +1 -0
- package/dist/sharedtypes/SyzygyVersion.d.ts +13 -0
- package/dist/sharedtypes/SyzygyVersion.d.ts.map +1 -0
- package/dist/sharedtypes/SyzygyVersion.js +22 -0
- package/dist/sharedtypes/SyzygyVersion.js.map +1 -0
- package/dist/testing/fixtures/FixedTimeProvider.d.ts +10 -0
- package/dist/testing/fixtures/FixedTimeProvider.d.ts.map +1 -0
- package/dist/testing/fixtures/FixedTimeProvider.js +18 -0
- package/dist/testing/fixtures/FixedTimeProvider.js.map +1 -0
- package/dist/testing/fixtures/FixtureProvider.d.ts +20 -0
- package/dist/testing/fixtures/FixtureProvider.d.ts.map +1 -0
- package/dist/testing/fixtures/FixtureProvider.js +50 -0
- package/dist/testing/fixtures/FixtureProvider.js.map +1 -0
- package/dist/testing/mocks/MockAuthProvider.d.ts +22 -0
- package/dist/testing/mocks/MockAuthProvider.d.ts.map +1 -0
- package/dist/testing/mocks/MockAuthProvider.js +43 -0
- package/dist/testing/mocks/MockAuthProvider.js.map +1 -0
- package/dist/testing/mocks/MockConnectivityProvider.d.ts +12 -0
- package/dist/testing/mocks/MockConnectivityProvider.d.ts.map +1 -0
- package/dist/testing/mocks/MockConnectivityProvider.js +28 -0
- package/dist/testing/mocks/MockConnectivityProvider.js.map +1 -0
- package/dist/testing/mocks/MockLogger.d.ts +10 -0
- package/dist/testing/mocks/MockLogger.d.ts.map +1 -0
- package/dist/testing/mocks/MockLogger.js +21 -0
- package/dist/testing/mocks/MockLogger.js.map +1 -0
- package/dist/testing/mocks/MockNetworkClient.d.ts +10 -0
- package/dist/testing/mocks/MockNetworkClient.d.ts.map +1 -0
- package/dist/testing/mocks/MockNetworkClient.js +20 -0
- package/dist/testing/mocks/MockNetworkClient.js.map +1 -0
- package/dist/testing/mocks/MockStorageProvider.d.ts +11 -0
- package/dist/testing/mocks/MockStorageProvider.d.ts.map +1 -0
- package/dist/testing/mocks/MockStorageProvider.js +25 -0
- package/dist/testing/mocks/MockStorageProvider.js.map +1 -0
- package/dist/testing/spies/SpyAnalyticsProvider.d.ts +15 -0
- package/dist/testing/spies/SpyAnalyticsProvider.d.ts.map +1 -0
- package/dist/testing/spies/SpyAnalyticsProvider.js +24 -0
- package/dist/testing/spies/SpyAnalyticsProvider.js.map +1 -0
- package/dist/testing.d.ts +9 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +25 -0
- package/dist/testing.js.map +1 -0
- package/jest.config.js +6 -0
- package/package.json +31 -0
- package/src/__tests__/AuthToken.test.ts +46 -0
- package/src/__tests__/FixedTimeProvider.test.ts +23 -0
- package/src/__tests__/MockAuthProvider.test.ts +51 -0
- package/src/__tests__/MockConnectivityProvider.test.ts +36 -0
- package/src/__tests__/MockLogger.test.ts +46 -0
- package/src/__tests__/MockNetworkClient.test.ts +48 -0
- package/src/__tests__/MockStorageProvider.test.ts +42 -0
- package/src/__tests__/NetworkRequest.test.ts +49 -0
- package/src/__tests__/Page.test.ts +60 -0
- package/src/__tests__/SpyAnalyticsProvider.test.ts +43 -0
- package/src/__tests__/SyzygyEnvironment.test.ts +21 -0
- package/src/__tests__/SyzygyErrorCode.test.ts +32 -0
- package/src/__tests__/SyzygyID.test.ts +48 -0
- package/src/__tests__/SyzygyTimestamp.test.ts +41 -0
- package/src/__tests__/SyzygyVersion.test.ts +7 -0
- package/src/__tests__/ValidationResult.test.ts +28 -0
- package/src/contracts/analytics/AnalyticsEvent.ts +21 -0
- package/src/contracts/analytics/AnalyticsProvider.ts +7 -0
- package/src/contracts/auth/AuthProvider.ts +16 -0
- package/src/contracts/auth/AuthState.ts +18 -0
- package/src/contracts/auth/AuthToken.ts +12 -0
- package/src/contracts/connectivity/ConnectivityProvider.ts +14 -0
- package/src/contracts/connectivity/ConnectivityState.ts +5 -0
- package/src/contracts/logging/LogEntry.ts +19 -0
- package/src/contracts/logging/LogLevel.ts +7 -0
- package/src/contracts/logging/LoggerProtocol.ts +40 -0
- package/src/contracts/network/NetworkClientProtocol.ts +6 -0
- package/src/contracts/network/NetworkMethod.ts +10 -0
- package/src/contracts/network/NetworkRequest.ts +15 -0
- package/src/contracts/network/NetworkResponse.ts +21 -0
- package/src/contracts/storage/StorageKey.ts +8 -0
- package/src/contracts/storage/StorageProvider.ts +12 -0
- package/src/errors/SyzygyError.ts +9 -0
- package/src/errors/SyzygyErrorCode.ts +26 -0
- package/src/errors/SyzygyErrorSeverity.ts +6 -0
- package/src/index.ts +38 -0
- package/src/primitives/id/SyzygyID.ts +27 -0
- package/src/primitives/pagination/Page.ts +25 -0
- package/src/primitives/pagination/PaginationRequest.ts +13 -0
- package/src/primitives/time/SyzygyDuration.ts +22 -0
- package/src/primitives/time/SyzygyTimestamp.ts +19 -0
- package/src/primitives/time/TimeProvider.ts +7 -0
- package/src/primitives/validation/ValidationResult.ts +12 -0
- package/src/primitives/validation/ValidationRule.ts +5 -0
- package/src/sharedtypes/SyzygyBuildInfo.ts +10 -0
- package/src/sharedtypes/SyzygyConfiguration.ts +10 -0
- package/src/sharedtypes/SyzygyEnvironment.ts +9 -0
- package/src/sharedtypes/SyzygyVersion.ts +23 -0
- package/src/testing/fixtures/FixedTimeProvider.ts +21 -0
- package/src/testing/fixtures/FixtureProvider.ts +63 -0
- package/src/testing/mocks/MockAuthProvider.ts +46 -0
- package/src/testing/mocks/MockConnectivityProvider.ts +35 -0
- package/src/testing/mocks/MockLogger.ts +19 -0
- package/src/testing/mocks/MockNetworkClient.ts +17 -0
- package/src/testing/mocks/MockStorageProvider.ts +26 -0
- package/src/testing/spies/SpyAnalyticsProvider.ts +24 -0
- package/src/testing.ts +8 -0
- package/syzygy.yml +10 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ['**']
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
14
|
+
|
|
15
|
+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
|
16
|
+
with:
|
|
17
|
+
node-version: '20'
|
|
18
|
+
|
|
19
|
+
- name: Install
|
|
20
|
+
run: npm install
|
|
21
|
+
|
|
22
|
+
- name: Typecheck
|
|
23
|
+
run: npm run typecheck
|
|
24
|
+
|
|
25
|
+
- name: Fetch lint config
|
|
26
|
+
run: |
|
|
27
|
+
curl -fsSL https://raw.githubusercontent.com/Syzygy-Hub/.github/948d4cf819a30989d277c8abea615e585f37e188/engineering/tooling/rn/.eslintrc.ts.json \
|
|
28
|
+
-o .eslintrc.json
|
|
29
|
+
|
|
30
|
+
- name: Lint
|
|
31
|
+
run: npm run lint
|
|
32
|
+
|
|
33
|
+
- name: Test with coverage
|
|
34
|
+
run: npm test -- --coverage --coverageReporters=text-summary 2>&1 | tee /tmp/jest-output.txt
|
|
35
|
+
|
|
36
|
+
- name: Upload coverage
|
|
37
|
+
if: always()
|
|
38
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
39
|
+
with:
|
|
40
|
+
name: coverage
|
|
41
|
+
path: coverage
|
|
42
|
+
if-no-files-found: warn
|
|
43
|
+
|
|
44
|
+
- name: Coverage summary
|
|
45
|
+
run: |
|
|
46
|
+
{
|
|
47
|
+
echo "## Coverage Report"
|
|
48
|
+
echo "\`\`\`"
|
|
49
|
+
grep -A20 "Coverage summary" /tmp/jest-output.txt || echo "No coverage summary found."
|
|
50
|
+
echo "\`\`\`"
|
|
51
|
+
} >> "$GITHUB_STEP_SUMMARY"
|
|
52
|
+
|
|
53
|
+
release:
|
|
54
|
+
name: Release
|
|
55
|
+
needs: [build]
|
|
56
|
+
if: |
|
|
57
|
+
github.event_name == 'push' &&
|
|
58
|
+
github.ref == 'refs/heads/main' &&
|
|
59
|
+
startsWith(github.event.head_commit.message, 'release:')
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
permissions:
|
|
62
|
+
contents: write
|
|
63
|
+
id-token: write
|
|
64
|
+
steps:
|
|
65
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
66
|
+
|
|
67
|
+
- name: Set up Node
|
|
68
|
+
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
|
69
|
+
with:
|
|
70
|
+
node-version: '20'
|
|
71
|
+
registry-url: 'https://registry.npmjs.org'
|
|
72
|
+
|
|
73
|
+
- name: Read version from syzygy.yml
|
|
74
|
+
id: version
|
|
75
|
+
run: |
|
|
76
|
+
VERSION=$(grep '^version:' syzygy.yml | sed 's/version: //' | tr -d ' ')
|
|
77
|
+
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
|
78
|
+
|
|
79
|
+
- name: Install dependencies
|
|
80
|
+
run: npm install
|
|
81
|
+
|
|
82
|
+
- name: Build
|
|
83
|
+
run: npm run build
|
|
84
|
+
|
|
85
|
+
- name: Extract CHANGELOG entry
|
|
86
|
+
run: |
|
|
87
|
+
awk '/^## \[/{if(found) exit; found=1; next} found' CHANGELOG.md > release_notes.txt
|
|
88
|
+
|
|
89
|
+
- name: Create GitHub Release
|
|
90
|
+
env:
|
|
91
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
92
|
+
run: |
|
|
93
|
+
gh release create "${{ steps.version.outputs.VERSION }}" \
|
|
94
|
+
--title "${{ steps.version.outputs.VERSION }}" \
|
|
95
|
+
--notes-file release_notes.txt
|
|
96
|
+
|
|
97
|
+
- name: Publish to npm
|
|
98
|
+
run: npm publish --access=public --provenance
|
|
99
|
+
env:
|
|
100
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `syzygy-foundation-rn` are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## [Unreleased]
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## [1.0.0] - 2026-08-06
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
#### Primitives
|
|
18
|
+
- `SyzygyID<T>` — generic typed opaque identifier; `equals`, `compareTo`, `generate`, `toString`, `toJSON`; `createSyzygyID` factory
|
|
19
|
+
- `Page<T>` — paginated result container with `hasNextPage`, `hasPreviousPage`, `isEmpty`, `totalPages`; `createPage` factory
|
|
20
|
+
- `PaginationRequest` — cursor and page-number pagination parameters; `createPaginationRequest` factory
|
|
21
|
+
- `SyzygyTimestamp` — millisecond-precision timestamp value type; `toDate`; `SyzygyTimestamp.now()` static factory
|
|
22
|
+
- `SyzygyDuration` — duration value type; `SyzygyDuration.milliseconds`, `.seconds`, `.minutes`, `.hours` static factories
|
|
23
|
+
- `TimeProvider` — interface for injectable time source
|
|
24
|
+
- `ValidationResult` — discriminated union (`valid` / `invalid`); `ValidationResult.valid()` and `.invalid(messages)` factories
|
|
25
|
+
- `ValidationRule<T>` — generic validation rule interface
|
|
26
|
+
|
|
27
|
+
#### Contracts — Network
|
|
28
|
+
- `NetworkMethod` — union type + const namespace (`GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`)
|
|
29
|
+
- `NetworkRequest` — request value type with `url`, `method`, `headers`, `body`, `timeoutSeconds`; `createNetworkRequest` factory (default 30 s)
|
|
30
|
+
- `NetworkResponse` — response value type with `statusCode`, `data`, `headers`, `isSuccess`, `isClientError`, `isServerError`; `createNetworkResponse` factory
|
|
31
|
+
- `NetworkClientProtocol` — `execute(request): Promise<NetworkResponse>` interface
|
|
32
|
+
|
|
33
|
+
#### Contracts — Storage
|
|
34
|
+
- `StorageKey<T>` — typed key with `identifier` and optional `defaultValue`; `createStorageKey` factory
|
|
35
|
+
- `StorageProvider` — async `get`, `set`, `remove`, `clear` interface (Promise-based for AsyncStorage compatibility)
|
|
36
|
+
|
|
37
|
+
#### Contracts — Auth
|
|
38
|
+
- `AuthToken` — `accessToken`, optional `refreshToken`, optional `expiresAt`; `isExpired` helper
|
|
39
|
+
- `AuthState` — discriminated union (`unauthenticated`, `authenticated`, `expired`, `refreshing`); `AuthState` namespace with factory methods and helpers
|
|
40
|
+
- `AuthProvider` — callback-based auth contract with `subscribe`, `authenticate`, `refresh`, `signOut`; `AuthStateListener` type
|
|
41
|
+
|
|
42
|
+
#### Contracts — Analytics
|
|
43
|
+
- `AnalyticsEvent` — `name`, `properties: Record<string, unknown>`, `timestamp`; `createAnalyticsEvent` factory
|
|
44
|
+
- `AnalyticsProvider` — `track`, `identify`, `reset` interface
|
|
45
|
+
|
|
46
|
+
#### Contracts — Logging
|
|
47
|
+
- `LogLevel` — `Debug(0)`, `Info(1)`, `Warning(2)`, `Error(3)`, `Critical(4)` enum
|
|
48
|
+
- `LogEntry` — `level`, `message`, `timestamp`, `metadata: Record<string, string>`, optional `error`
|
|
49
|
+
- `LoggerProtocol` — interface with `log`, `debug`, `info`, `warning`, `error`, `critical`
|
|
50
|
+
- `BaseLogger` — abstract class implementing convenience methods on top of abstract `log(entry)`
|
|
51
|
+
|
|
52
|
+
#### Contracts — Connectivity
|
|
53
|
+
- `ConnectivityState` — union type `'connected' | 'disconnected' | 'unknown'`; `isConnected` helper
|
|
54
|
+
- `ConnectivityProvider` — controlled state contract with `state`, `isConnected`, `subscribe`; `ConnectivityStateListener` type
|
|
55
|
+
|
|
56
|
+
#### Shared Types
|
|
57
|
+
- `SyzygyEnvironment` — union type `'debug' | 'staging' | 'production'` with `isDebug`, `isProduction` helpers
|
|
58
|
+
- `SyzygyConfiguration` — top-level app configuration: `environment`, `baseURL`, `buildInfo`, `version`
|
|
59
|
+
- `SyzygyBuildInfo` — consumer-injected `appName`, `bundleId`, `buildNumber`, `version`
|
|
60
|
+
- `SyzygyVersion` — semver value type; `SyzygyVersion.create`, `.toString`, `.compare`, `.current` namespace
|
|
61
|
+
|
|
62
|
+
#### Errors
|
|
63
|
+
- `SyzygyErrorSeverity` — `Info(0)`, `Warning(1)`, `Error(2)`, `Critical(3)` enum
|
|
64
|
+
- `SyzygyErrorCode` — typed error code class with `equals`, `toString`; static codes: `unknown`, `cancelled`, `timeout`, `unauthenticated`, `forbidden`, `notFound`, `serverError`, `networkUnavailable`, `decodingFailed`, `encodingFailed`
|
|
65
|
+
- `SyzygyError` — interface extending `Error` with `code`, `severity`, optional `underlyingError`
|
|
66
|
+
|
|
67
|
+
#### Testing (`testing` entry point — `devDependencies` / test files only)
|
|
68
|
+
- `MockLogger` — extends `BaseLogger`; captures entries; `entriesForLevel`, `clear`
|
|
69
|
+
- `MockConnectivityProvider` — controllable connectivity state with `setState` and `subscribe`
|
|
70
|
+
- `MockAuthProvider` — full `AuthProvider` mock with call counts and configurable `refreshResult`
|
|
71
|
+
- `MockStorageProvider` — in-memory async storage with `inspect` helper
|
|
72
|
+
- `MockNetworkClient` — queue-based network client with `responses`, `requests`, configurable `error`
|
|
73
|
+
- `SpyAnalyticsProvider` — records `trackedEvents`, `identifiedUsers`, `resetCallCount`; `eventsNamed` helper
|
|
74
|
+
- `Fixtures` — namespace with `syzygyId`, `authToken`, `networkRequest`, `networkResponse`, `analyticsEvent`, `logEntry`, `syzygyVersion` factory methods
|
|
75
|
+
- `FixedTimeProvider` — `TimeProvider` implementation pinned to a configurable timestamp
|
|
76
|
+
|
|
77
|
+
#### Repository
|
|
78
|
+
- `syzygy.yml` manifest added
|
|
79
|
+
|
|
80
|
+
### Changed
|
|
81
|
+
- CI lint step now fetches `.eslintrc.json` and `.prettierrc` from `Syzygy-Hub/.github/main/engineering/tooling/rn/`
|
|
82
|
+
- CI coverage step added: `--coverage --coverageReporters=text-summary` + summary written to `GITHUB_STEP_SUMMARY`
|
|
83
|
+
- `tooling/rn/.eslintrc.json` updated with documentation-only comment header
|
|
84
|
+
- README rewritten to Syzygy engineering standard
|
|
85
|
+
|
|
86
|
+
[Unreleased]: https://github.com/Syzygy-Hub/syzygy-foundation-rn/compare/1.0.0...HEAD
|
|
87
|
+
[1.0.0]: https://github.com/Syzygy-Hub/syzygy-foundation-rn/releases/tag/1.0.0
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Syzygy Hub
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
[](https://reactnative.dev/) [](https://typescriptlang.org) [](https://github.com/Syzygy-Hub/syzygy-foundation-rn/actions/workflows/ci.yml) [](https://github.com/Syzygy-Hub/syzygy-foundation-rn/releases) [](LICENSE)
|
|
2
|
+
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/Syzygy-Hub/.github/main/brand/syzygy-banner-dark-1200.png">
|
|
5
|
+
<img src="https://raw.githubusercontent.com/Syzygy-Hub/.github/main/brand/syzygy-banner-light-1200.png" alt="Syzygy" width="600">
|
|
6
|
+
</picture>
|
|
7
|
+
|
|
8
|
+
# syzygy-foundation-rn
|
|
9
|
+
|
|
10
|
+
Contracts, primitives, and shared types for the React Native Syzygy ecosystem — zero implementation, zero dependencies.
|
|
11
|
+
|
|
12
|
+
## About
|
|
13
|
+
|
|
14
|
+
syzygy-foundation-rn is the base layer every other Syzygy React Native library depends on. It defines the interfaces that Services implements, the value types that UI and Core consume, and the error types the whole stack shares. Nothing in Foundation has behaviour beyond property storage — no network calls, no platform APIs, no business logic. Swap any implementation in Services or Core by conforming to these contracts; Foundation never needs to change.
|
|
15
|
+
|
|
16
|
+
## Platforms
|
|
17
|
+
|
|
18
|
+
| Platform | Min Version | Package Manager | Status |
|
|
19
|
+
|---|---|---|---|
|
|
20
|
+
| React Native | 0.71+ | npm | ✅ Supported |
|
|
21
|
+
|
|
22
|
+
## Requirements
|
|
23
|
+
|
|
24
|
+
- React Native 0.71+
|
|
25
|
+
- TypeScript 5.0+
|
|
26
|
+
- Node.js 20+
|
|
27
|
+
|
|
28
|
+
## Installation
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install syzygy-foundation-rn
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// Runtime
|
|
36
|
+
import { SyzygyID, NetworkClientProtocol } from 'syzygy-foundation-rn'
|
|
37
|
+
|
|
38
|
+
// Test support (test files only)
|
|
39
|
+
import { MockNetworkClient } from 'syzygy-foundation-rn/testing'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Architecture
|
|
43
|
+
|
|
44
|
+
SyzygyFoundation exposes two entry points:
|
|
45
|
+
|
|
46
|
+
- **index.ts** — runtime exports. Import in your app and library source files.
|
|
47
|
+
- **testing.ts** — test support exports. Import in test files only.
|
|
48
|
+
|
|
49
|
+
**Depends on:** nothing
|
|
50
|
+
|
|
51
|
+
**Used by:** syzygy-ui-rn, syzygy-core-rn, syzygy-services-rn
|
|
52
|
+
|
|
53
|
+
For the full ecosystem architecture see [syzygy-ecosystem.md](https://github.com/Syzygy-Hub/.github/blob/main/engineering/architecture/syzygy-ecosystem.md).
|
|
54
|
+
|
|
55
|
+
## API
|
|
56
|
+
|
|
57
|
+
### Primitives
|
|
58
|
+
|
|
59
|
+
- `SyzygyID<T>` — phantom-typed identifier preventing accidental ID mixing
|
|
60
|
+
- `Page<T>` / `PaginationRequest` — paginated data structures
|
|
61
|
+
- `SyzygyTimestamp` / `SyzygyDuration` / `TimeProvider` — cross-platform time primitives
|
|
62
|
+
- `ValidationResult` / `ValidationRule` — validation contract and result type
|
|
63
|
+
|
|
64
|
+
### Contracts
|
|
65
|
+
|
|
66
|
+
- `NetworkClientProtocol` / `NetworkRequest` / `NetworkResponse` — networking contract
|
|
67
|
+
- `StorageProvider` / `StorageKey` — type-safe storage contract
|
|
68
|
+
- `AuthProvider` / `AuthToken` / `AuthState` — authentication contract
|
|
69
|
+
- `AnalyticsProvider` / `AnalyticsEvent` — analytics contract
|
|
70
|
+
- `LoggerProtocol` / `LogLevel` / `LogEntry` — logging contract
|
|
71
|
+
- `ConnectivityProvider` / `ConnectivityState` — connectivity contract
|
|
72
|
+
|
|
73
|
+
### Shared Types
|
|
74
|
+
|
|
75
|
+
- `SyzygyEnvironment` — debug / staging / production
|
|
76
|
+
- `SyzygyConfiguration` — app configuration contract
|
|
77
|
+
- `SyzygyBuildInfo` — consumer-injected build metadata
|
|
78
|
+
- `SyzygyVersion` — semantic version with comparison support
|
|
79
|
+
|
|
80
|
+
### Errors
|
|
81
|
+
|
|
82
|
+
- `SyzygyError` — base error interface
|
|
83
|
+
- `SyzygyErrorCode` — typed, extensible error codes
|
|
84
|
+
- `SyzygyErrorSeverity` — error severity levels
|
|
85
|
+
|
|
86
|
+
### Testing Support
|
|
87
|
+
|
|
88
|
+
Import from `syzygy-foundation-rn/testing` in test files only.
|
|
89
|
+
|
|
90
|
+
- `MockLogger`, `MockConnectivityProvider`, `MockAuthProvider`, `MockStorageProvider`, `MockNetworkClient`
|
|
91
|
+
- `SpyAnalyticsProvider`
|
|
92
|
+
- `Fixtures`, `FixedTimeProvider`
|
|
93
|
+
|
|
94
|
+
## Usage
|
|
95
|
+
|
|
96
|
+
### Implementing a contract
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import { NetworkClientProtocol, NetworkRequest, NetworkResponse, createNetworkResponse } from 'syzygy-foundation-rn';
|
|
100
|
+
|
|
101
|
+
class FetchNetworkClient implements NetworkClientProtocol {
|
|
102
|
+
async execute(request: NetworkRequest): Promise<NetworkResponse> {
|
|
103
|
+
const res = await fetch(request.url, {
|
|
104
|
+
method: request.method,
|
|
105
|
+
headers: request.headers,
|
|
106
|
+
body: request.body ? JSON.stringify(request.body) : undefined,
|
|
107
|
+
});
|
|
108
|
+
const data = await res.arrayBuffer();
|
|
109
|
+
return createNetworkResponse({ statusCode: res.status, data, headers: {} });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Using a primitive
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
import { SyzygyID, createSyzygyID } from 'syzygy-foundation-rn';
|
|
118
|
+
|
|
119
|
+
type User = { id: SyzygyID<'User'>; name: string };
|
|
120
|
+
type Post = { id: SyzygyID<'Post'>; title: string };
|
|
121
|
+
|
|
122
|
+
const userId = createSyzygyID<'User'>();
|
|
123
|
+
const postId = createSyzygyID<'Post'>();
|
|
124
|
+
// TypeScript prevents comparing userId === postId across phantom types
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Using test support
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
import { MockNetworkClient, createNetworkResponse } from 'syzygy-foundation-rn/testing';
|
|
131
|
+
|
|
132
|
+
it('returns response from queue', async () => {
|
|
133
|
+
const client = new MockNetworkClient();
|
|
134
|
+
client.responses.push(createNetworkResponse({ statusCode: 200, data: new ArrayBuffer(0), headers: {} }));
|
|
135
|
+
const result = await client.execute({ url: 'https://example.com', method: 'GET', headers: {}, timeoutSeconds: 30 });
|
|
136
|
+
expect(result.statusCode).toBe(200);
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Platform Notes
|
|
141
|
+
|
|
142
|
+
- Async pattern: `Promise`
|
|
143
|
+
- `SyzygyError` extends `Error`
|
|
144
|
+
- `ConnectivityProvider`: controlled — pass `isOffline` prop (no first-party network detection)
|
|
145
|
+
- `SyzygyBuildInfo`: consumer-injected — populate at app startup
|
|
146
|
+
|
|
147
|
+
## Contributing
|
|
148
|
+
|
|
149
|
+
Contributions are welcome. Please follow the [Syzygy engineering standards](https://github.com/Syzygy-Hub/.github/tree/main/engineering/standards) when submitting pull requests.
|
|
150
|
+
|
|
151
|
+
### Local Development
|
|
152
|
+
|
|
153
|
+
| Script | Description |
|
|
154
|
+
|--------|-------------|
|
|
155
|
+
| `npm run build` | Compile TypeScript to `dist/` |
|
|
156
|
+
| `npm run clean` | Remove compiled output |
|
|
157
|
+
| `npm run lint` | Run ESLint |
|
|
158
|
+
| `npm run lint:fix` | Auto-fix lint violations |
|
|
159
|
+
| `npm run typecheck` | Type-check without emitting output |
|
|
160
|
+
| `npm run test` | Run Jest tests |
|
|
161
|
+
|
|
162
|
+
> `prepare` and `prebuild` are lifecycle hooks that run automatically — no need to call them directly.
|
|
163
|
+
|
|
164
|
+
## Releases
|
|
165
|
+
|
|
166
|
+
Releases follow the Syzygy commit-message flow:
|
|
167
|
+
|
|
168
|
+
1. Create branch `release/X.X.X`
|
|
169
|
+
2. Bump version in manifest and `syzygy.yml`
|
|
170
|
+
3. Update `CHANGELOG.md`
|
|
171
|
+
4. Open PR → `main`
|
|
172
|
+
5. Get approval and merge with commit message starting with **`release:`** (e.g. `release: 1.0.0`)
|
|
173
|
+
6. CI detects the `release:` prefix → reads version from `syzygy.yml` → creates git tag and GitHub Release automatically
|
|
174
|
+
|
|
175
|
+
See the [Syzygy Release Standard](https://github.com/Syzygy-Hub/.github/blob/main/engineering/standards/release-standard.md) for full details.
|
|
176
|
+
|
|
177
|
+
## License
|
|
178
|
+
|
|
179
|
+
MIT — see [LICENSE](LICENSE)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthToken.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/AuthToken.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const AuthToken_1 = require("../contracts/auth/AuthToken");
|
|
4
|
+
const AuthState_1 = require("../contracts/auth/AuthState");
|
|
5
|
+
const SyzygyTimestamp_1 = require("../primitives/time/SyzygyTimestamp");
|
|
6
|
+
describe('AuthToken.isExpired', () => {
|
|
7
|
+
it('is false when expiresAt is undefined', () => {
|
|
8
|
+
expect((0, AuthToken_1.isExpired)({ accessToken: 'tok' })).toBe(false);
|
|
9
|
+
});
|
|
10
|
+
it('is true when expiresAt is in the past', () => {
|
|
11
|
+
const past = (0, SyzygyTimestamp_1.createSyzygyTimestamp)(1);
|
|
12
|
+
expect((0, AuthToken_1.isExpired)({ accessToken: 'tok', expiresAt: past })).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
it('is false when expiresAt is in the future', () => {
|
|
15
|
+
const future = (0, SyzygyTimestamp_1.createSyzygyTimestamp)(Date.now() + 3600000);
|
|
16
|
+
expect((0, AuthToken_1.isExpired)({ accessToken: 'tok', expiresAt: future })).toBe(false);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
describe('AuthState', () => {
|
|
20
|
+
const token = { accessToken: 'tok' };
|
|
21
|
+
it('isAuthenticated is true only for authenticated', () => {
|
|
22
|
+
expect(AuthState_1.AuthState.isAuthenticated(AuthState_1.AuthState.authenticated(token))).toBe(true);
|
|
23
|
+
expect(AuthState_1.AuthState.isAuthenticated(AuthState_1.AuthState.unauthenticated())).toBe(false);
|
|
24
|
+
expect(AuthState_1.AuthState.isAuthenticated(AuthState_1.AuthState.expired(token))).toBe(false);
|
|
25
|
+
expect(AuthState_1.AuthState.isAuthenticated(AuthState_1.AuthState.refreshing())).toBe(false);
|
|
26
|
+
});
|
|
27
|
+
it('token returns the AuthToken for authenticated state', () => {
|
|
28
|
+
expect(AuthState_1.AuthState.token(AuthState_1.AuthState.authenticated(token))).toBe(token);
|
|
29
|
+
});
|
|
30
|
+
it('token returns the AuthToken for expired state', () => {
|
|
31
|
+
expect(AuthState_1.AuthState.token(AuthState_1.AuthState.expired(token))).toBe(token);
|
|
32
|
+
});
|
|
33
|
+
it('token returns undefined for unauthenticated', () => {
|
|
34
|
+
expect(AuthState_1.AuthState.token(AuthState_1.AuthState.unauthenticated())).toBeUndefined();
|
|
35
|
+
});
|
|
36
|
+
it('token returns undefined for refreshing', () => {
|
|
37
|
+
expect(AuthState_1.AuthState.token(AuthState_1.AuthState.refreshing())).toBeUndefined();
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=AuthToken.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthToken.test.js","sourceRoot":"","sources":["../../src/__tests__/AuthToken.test.ts"],"names":[],"mappings":";;AAAA,2DAAwD;AACxD,2DAAwD;AACxD,wEAA2E;AAE3E,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,IAAA,qBAAS,EAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,IAAA,uCAAqB,EAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,IAAA,qBAAS,EAAC,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,IAAA,uCAAqB,EAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAS,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAA,qBAAS,EAAC,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAErC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,qBAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,qBAAS,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3E,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,qBAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,qBAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FixedTimeProvider.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/FixedTimeProvider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const FixedTimeProvider_1 = require("../testing/fixtures/FixedTimeProvider");
|
|
4
|
+
const SyzygyTimestamp_1 = require("../primitives/time/SyzygyTimestamp");
|
|
5
|
+
describe('FixedTimeProvider', () => {
|
|
6
|
+
it('now() returns the fixed time', () => {
|
|
7
|
+
const fixed = (0, SyzygyTimestamp_1.createSyzygyTimestamp)(5000);
|
|
8
|
+
const provider = new FixedTimeProvider_1.FixedTimeProvider(fixed);
|
|
9
|
+
expect(provider.now().millisecondsSinceEpoch).toBe(5000);
|
|
10
|
+
});
|
|
11
|
+
it('since() computes duration from fixedTime to the given timestamp', () => {
|
|
12
|
+
const provider = new FixedTimeProvider_1.FixedTimeProvider((0, SyzygyTimestamp_1.createSyzygyTimestamp)(10000));
|
|
13
|
+
const earlier = (0, SyzygyTimestamp_1.createSyzygyTimestamp)(3000);
|
|
14
|
+
const duration = provider.since(earlier);
|
|
15
|
+
expect(duration.milliseconds).toBe(7000);
|
|
16
|
+
});
|
|
17
|
+
it('fixedTime can be mutated to advance time', () => {
|
|
18
|
+
const provider = new FixedTimeProvider_1.FixedTimeProvider((0, SyzygyTimestamp_1.createSyzygyTimestamp)(0));
|
|
19
|
+
provider.fixedTime = (0, SyzygyTimestamp_1.createSyzygyTimestamp)(99000);
|
|
20
|
+
expect(provider.now().millisecondsSinceEpoch).toBe(99000);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=FixedTimeProvider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FixedTimeProvider.test.js","sourceRoot":"","sources":["../../src/__tests__/FixedTimeProvider.test.ts"],"names":[],"mappings":";;AAAA,6EAA0E;AAC1E,wEAA2E;AAE3E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,IAAA,uCAAqB,EAAC,IAAK,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,qCAAiB,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,QAAQ,GAAG,IAAI,qCAAiB,CAAC,IAAA,uCAAqB,EAAC,KAAM,CAAC,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAA,uCAAqB,EAAC,IAAK,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,QAAQ,GAAG,IAAI,qCAAiB,CAAC,IAAA,uCAAqB,EAAC,CAAC,CAAC,CAAC,CAAC;QACjE,QAAQ,CAAC,SAAS,GAAG,IAAA,uCAAqB,EAAC,KAAM,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockAuthProvider.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/MockAuthProvider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const MockAuthProvider_1 = require("../testing/mocks/MockAuthProvider");
|
|
4
|
+
const AuthState_1 = require("../contracts/auth/AuthState");
|
|
5
|
+
describe('MockAuthProvider', () => {
|
|
6
|
+
let provider;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
provider = new MockAuthProvider_1.MockAuthProvider();
|
|
9
|
+
});
|
|
10
|
+
it('initial state is unauthenticated', () => {
|
|
11
|
+
expect(AuthState_1.AuthState.isAuthenticated(provider.state)).toBe(false);
|
|
12
|
+
});
|
|
13
|
+
it('authenticate transitions to authenticated', () => {
|
|
14
|
+
provider.authenticate({ accessToken: 'tok' });
|
|
15
|
+
expect(AuthState_1.AuthState.isAuthenticated(provider.state)).toBe(true);
|
|
16
|
+
});
|
|
17
|
+
it('token is accessible after authenticate', () => {
|
|
18
|
+
const token = { accessToken: 'tok' };
|
|
19
|
+
provider.authenticate(token);
|
|
20
|
+
expect(AuthState_1.AuthState.token(provider.state)).toBe(token);
|
|
21
|
+
});
|
|
22
|
+
it('signOut transitions to unauthenticated and increments signOutCallCount', () => {
|
|
23
|
+
provider.authenticate({ accessToken: 'tok' });
|
|
24
|
+
provider.signOut();
|
|
25
|
+
expect(AuthState_1.AuthState.isAuthenticated(provider.state)).toBe(false);
|
|
26
|
+
expect(provider.signOutCallCount).toBe(1);
|
|
27
|
+
});
|
|
28
|
+
it('signOut increments count on each call', () => {
|
|
29
|
+
provider.signOut();
|
|
30
|
+
provider.signOut();
|
|
31
|
+
expect(provider.signOutCallCount).toBe(2);
|
|
32
|
+
});
|
|
33
|
+
it('refresh increments refreshCallCount', async () => {
|
|
34
|
+
await provider.refresh();
|
|
35
|
+
await provider.refresh();
|
|
36
|
+
expect(provider.refreshCallCount).toBe(2);
|
|
37
|
+
});
|
|
38
|
+
it('subscribe notifies listener on state changes', () => {
|
|
39
|
+
const states = [];
|
|
40
|
+
provider.subscribe((s) => states.push(s));
|
|
41
|
+
provider.authenticate({ accessToken: 'tok' });
|
|
42
|
+
provider.signOut();
|
|
43
|
+
expect(states).toHaveLength(2);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=MockAuthProvider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockAuthProvider.test.js","sourceRoot":"","sources":["../../src/__tests__/MockAuthProvider.test.ts"],"names":[],"mappings":";;AAAA,wEAAqE;AACrE,2DAAwD;AAExD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,QAA0B,CAAC;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,IAAI,mCAAgB,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACrC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,CAAC,qBAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockConnectivityProvider.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/MockConnectivityProvider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const MockConnectivityProvider_1 = require("../testing/mocks/MockConnectivityProvider");
|
|
4
|
+
describe('MockConnectivityProvider', () => {
|
|
5
|
+
it('default initial state is connected', () => {
|
|
6
|
+
const provider = new MockConnectivityProvider_1.MockConnectivityProvider();
|
|
7
|
+
expect(provider.isConnected).toBe(true);
|
|
8
|
+
expect(provider.state).toBe('connected');
|
|
9
|
+
});
|
|
10
|
+
it('setState to disconnected updates isConnected', () => {
|
|
11
|
+
const provider = new MockConnectivityProvider_1.MockConnectivityProvider();
|
|
12
|
+
provider.setState('disconnected');
|
|
13
|
+
expect(provider.isConnected).toBe(false);
|
|
14
|
+
});
|
|
15
|
+
it('setState to unknown updates state', () => {
|
|
16
|
+
const provider = new MockConnectivityProvider_1.MockConnectivityProvider();
|
|
17
|
+
provider.setState('unknown');
|
|
18
|
+
expect(provider.state).toBe('unknown');
|
|
19
|
+
expect(provider.isConnected).toBe(false);
|
|
20
|
+
});
|
|
21
|
+
it('constructor initial state overrides default', () => {
|
|
22
|
+
const provider = new MockConnectivityProvider_1.MockConnectivityProvider('disconnected');
|
|
23
|
+
expect(provider.isConnected).toBe(false);
|
|
24
|
+
});
|
|
25
|
+
it('subscribe notifies listeners on state changes', () => {
|
|
26
|
+
const provider = new MockConnectivityProvider_1.MockConnectivityProvider();
|
|
27
|
+
const observed = [];
|
|
28
|
+
provider.subscribe((s) => observed.push(s));
|
|
29
|
+
provider.setState('disconnected');
|
|
30
|
+
provider.setState('connected');
|
|
31
|
+
expect(observed).toEqual(['disconnected', 'connected']);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=MockConnectivityProvider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockConnectivityProvider.test.js","sourceRoot":"","sources":["../../src/__tests__/MockConnectivityProvider.test.ts"],"names":[],"mappings":";;AAAA,wFAAqF;AAErF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,QAAQ,GAAG,IAAI,mDAAwB,EAAE,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,QAAQ,GAAG,IAAI,mDAAwB,EAAE,CAAC;QAChD,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,QAAQ,GAAG,IAAI,mDAAwB,EAAE,CAAC;QAChD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,QAAQ,GAAG,IAAI,mDAAwB,CAAC,cAAc,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,QAAQ,GAAG,IAAI,mDAAwB,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAClC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockLogger.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/MockLogger.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const MockLogger_1 = require("../testing/mocks/MockLogger");
|
|
4
|
+
const LogLevel_1 = require("../contracts/logging/LogLevel");
|
|
5
|
+
describe('MockLogger', () => {
|
|
6
|
+
let logger;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
logger = new MockLogger_1.MockLogger();
|
|
9
|
+
});
|
|
10
|
+
it('records entries via convenience methods', () => {
|
|
11
|
+
logger.info('hello');
|
|
12
|
+
logger.debug('world');
|
|
13
|
+
expect(logger.entries).toHaveLength(2);
|
|
14
|
+
});
|
|
15
|
+
it('entriesForLevel filters by log level', () => {
|
|
16
|
+
logger.info('info one');
|
|
17
|
+
logger.info('info two');
|
|
18
|
+
logger.warning('warn');
|
|
19
|
+
expect(logger.entriesForLevel(LogLevel_1.LogLevel.Info)).toHaveLength(2);
|
|
20
|
+
expect(logger.entriesForLevel(LogLevel_1.LogLevel.Warning)).toHaveLength(1);
|
|
21
|
+
expect(logger.entriesForLevel(LogLevel_1.LogLevel.Error)).toHaveLength(0);
|
|
22
|
+
});
|
|
23
|
+
it('clear empties all entries', () => {
|
|
24
|
+
logger.info('message');
|
|
25
|
+
logger.clear();
|
|
26
|
+
expect(logger.entries).toHaveLength(0);
|
|
27
|
+
});
|
|
28
|
+
it('entries preserve message and level', () => {
|
|
29
|
+
logger.error('something failed');
|
|
30
|
+
expect(logger.entries[0].message).toBe('something failed');
|
|
31
|
+
expect(logger.entries[0].level).toBe(LogLevel_1.LogLevel.Error);
|
|
32
|
+
});
|
|
33
|
+
it('critical records at critical level', () => {
|
|
34
|
+
logger.critical('fatal issue');
|
|
35
|
+
expect(logger.entriesForLevel(LogLevel_1.LogLevel.Critical)).toHaveLength(1);
|
|
36
|
+
});
|
|
37
|
+
it('debug records at debug level', () => {
|
|
38
|
+
logger.debug('verbose info');
|
|
39
|
+
expect(logger.entriesForLevel(LogLevel_1.LogLevel.Debug)).toHaveLength(1);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=MockLogger.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockLogger.test.js","sourceRoot":"","sources":["../../src/__tests__/MockLogger.test.ts"],"names":[],"mappings":";;AAAA,4DAAyD;AACzD,4DAAyD;AAEzD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,MAAkB,CAAC;IACvB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,uBAAU,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,mBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,mBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,mBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAQ,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,mBAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,mBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|