@greenpandastudios/aug-cli 0.19.0 → 0.20.1
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/README.md +9 -6
- package/THIRD_PARTY_NOTICES.md +4 -0
- package/bin/aug.mjs +12 -2
- package/docs/about.md +27 -0
- package/docs/api/crypto.md +103 -69
- package/docs/api/io.md +35 -33
- package/docs/api/json.md +3 -3
- package/docs/api/memory.md +23 -19
- package/docs/api/time.md +10 -9
- package/docs/api/web.md +33 -38
- package/docs/compatibility.md +3 -3
- package/docs/contributing-benchmarks.md +38 -0
- package/docs/dev-containers.md +95 -0
- package/docs/diagnostics.md +15 -5
- package/docs/docker.md +174 -12
- package/docs/editor.md +35 -0
- package/docs/example-projects.json +206 -24
- package/docs/examples/approved-design/counters.md +34 -126
- package/docs/examples/approved-design/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/approved-design/domain/app.md +13 -77
- package/docs/examples/approved-design/domain/export.md +5 -19
- package/docs/examples/approved-design/domain/models.md +4 -23
- package/docs/examples/approved-design/domain/numbers.md +24 -114
- package/docs/examples/approved-design/index.md +16 -7
- package/docs/examples/approved-design/main.md +19 -96
- package/docs/examples/benchmark/index.md +6 -5
- package/docs/examples/benchmark/main.md +7 -35
- package/docs/examples/cli-args/index.md +6 -5
- package/docs/examples/cli-args/main.md +6 -31
- package/docs/examples/collections/index.md +6 -5
- package/docs/examples/collections/main.md +7 -35
- package/docs/examples/collections-benchmark/index.md +6 -5
- package/docs/examples/collections-benchmark/main.md +7 -35
- package/docs/examples/cpu-benchmark/index.md +6 -5
- package/docs/examples/cpu-benchmark/main.md +5 -24
- package/docs/examples/developer-workflow/calculator.md +39 -186
- package/docs/examples/developer-workflow/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/developer-workflow/index.md +16 -7
- package/docs/examples/developer-workflow/logging/console.md +10 -56
- package/docs/examples/developer-workflow/logging/export.md +4 -14
- package/docs/examples/developer-workflow/logging/logger.md +7 -43
- package/docs/examples/developer-workflow/main.md +17 -69
- package/docs/examples/drop/index.md +6 -5
- package/docs/examples/drop/main.md +7 -27
- package/docs/examples/drop/resource.md +7 -30
- package/docs/examples/errors/errors.md +7 -27
- package/docs/examples/errors/index.md +6 -5
- package/docs/examples/errors/main.md +7 -28
- package/docs/examples/ffi/index.md +6 -5
- package/docs/examples/ffi/main.md +6 -20
- package/docs/examples/ffi/native.md +8 -34
- package/docs/examples/generic-di/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/generic-di/index.md +6 -5
- package/docs/examples/generic-di/main.md +9 -39
- package/docs/examples/generic-di/types.md +23 -92
- package/docs/examples/generics/index.md +6 -5
- package/docs/examples/generics/main.md +10 -47
- package/docs/examples/generics/types.md +25 -100
- package/docs/examples/hello/app/export.md +4 -12
- package/docs/examples/hello/app/greeter.md +13 -91
- package/docs/examples/hello/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/hello/index.md +17 -6
- package/docs/examples/hello/logging/console.md +10 -54
- package/docs/examples/hello/logging/export.md +4 -14
- package/docs/examples/hello/logging/logger.md +7 -45
- package/docs/examples/hello/main.md +9 -39
- package/docs/examples/http-benchmark/index.md +6 -5
- package/docs/examples/http-benchmark/main.md +6 -20
- package/docs/examples/http-benchmark/routes.md +9 -31
- package/docs/examples/index.md +46 -29
- package/docs/examples/interceptors/app.md +20 -139
- package/docs/examples/interceptors/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/interceptors/index.md +6 -5
- package/docs/examples/interceptors/interceptors.md +24 -148
- package/docs/examples/interceptors/logging.md +13 -76
- package/docs/examples/interceptors/main.md +10 -65
- package/docs/examples/json-benchmark/data.md +4 -20
- package/docs/examples/json-benchmark/dependencies/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +67 -0
- package/docs/examples/json-benchmark/index.md +7 -5
- package/docs/examples/json-benchmark/main-yaml.md +20 -0
- package/docs/examples/json-benchmark/main.md +10 -49
- package/docs/examples/new-syntax/console.md +10 -52
- package/docs/examples/new-syntax/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/new-syntax/greeter.md +13 -71
- package/docs/examples/new-syntax/index.md +6 -5
- package/docs/examples/new-syntax/logger.md +7 -43
- package/docs/examples/new-syntax/main.md +10 -53
- package/docs/examples/new-syntax/math.md +6 -24
- package/docs/examples/oidc-login/client/contracts.md +10 -61
- package/docs/examples/oidc-login/client/endpoints.md +32 -154
- package/docs/examples/oidc-login/client/export.md +5 -23
- package/docs/examples/oidc-login/client/login.md +234 -344
- package/docs/examples/oidc-login/client/logout.md +38 -143
- package/docs/examples/oidc-login/client/protocol.md +183 -304
- package/docs/examples/oidc-login/client/session.md +41 -149
- package/docs/examples/oidc-login/client/views.md +13 -58
- package/docs/examples/oidc-login/common/export.md +6 -26
- package/docs/examples/oidc-login/common/headers.md +42 -72
- package/docs/examples/oidc-login/common/keys.md +40 -164
- package/docs/examples/oidc-login/common/settings.md +24 -40
- package/docs/examples/oidc-login/common/views.md +7 -28
- package/docs/examples/oidc-login/dependencies/packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.md +205 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +67 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +267 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md +415 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.md +271 -0
- package/docs/examples/oidc-login/dependencies/packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +89 -0
- package/docs/examples/oidc-login/index.md +8 -7
- package/docs/examples/oidc-login/main-yaml.md +7 -0
- package/docs/examples/oidc-login/main.md +26 -153
- package/docs/examples/oidc-login/provider/authorization.md +232 -275
- package/docs/examples/oidc-login/provider/contracts.md +24 -146
- package/docs/examples/oidc-login/provider/credentials.md +24 -57
- package/docs/examples/oidc-login/provider/discovery.md +48 -122
- package/docs/examples/oidc-login/provider/export.md +11 -37
- package/docs/examples/oidc-login/provider/token.md +159 -237
- package/docs/examples/oidc-login/provider/userinfo.md +47 -102
- package/docs/examples/oidc-login/provider/views.md +13 -53
- package/docs/examples/ownership/counter.md +17 -63
- package/docs/examples/ownership/index.md +6 -5
- package/docs/examples/ownership/main.md +7 -30
- package/docs/examples/ownership-transfer/dependencies/august/0.20.1/io/contracts.md +178 -0
- package/docs/examples/ownership-transfer/index.md +6 -5
- package/docs/examples/ownership-transfer/main.md +10 -52
- package/docs/examples/ownership-transfer/resource.md +15 -67
- package/docs/examples/packages-app/dependencies/packages/@example/aug-math/0.1.0/arithmetic.md +12 -50
- package/docs/examples/packages-app/index.md +7 -6
- package/docs/examples/packages-app/main.md +7 -25
- package/docs/examples/packages-math/aug-package-json.md +1 -1
- package/docs/examples/packages-math/index.md +7 -6
- package/docs/examples/packages-math/src/arithmetic.md +12 -50
- package/docs/examples/packages-math/src/export.md +4 -12
- package/docs/examples/startup-benchmark/index.md +6 -5
- package/docs/examples/startup-benchmark/main.md +5 -17
- package/docs/examples/visibility/counter.md +19 -67
- package/docs/examples/visibility/index.md +6 -5
- package/docs/examples/visibility/main.md +7 -31
- package/docs/examples/weather-api/forecasts.md +168 -0
- package/docs/examples/weather-api/index.md +42 -0
- package/docs/examples/weather-api/main-yaml.md +21 -0
- package/docs/examples/weather-api/main.md +65 -0
- package/docs/examples.json +10 -0
- package/docs/getting-started.md +105 -2
- package/docs/grammar.md +6 -4
- package/docs/guides/change-a-module.md +64 -0
- package/docs/guides/index.md +27 -0
- package/docs/index.md +51 -29
- package/docs/language-conformance.md +1 -1
- package/docs/language-constructs.md +22 -22
- package/docs/language-design-audit.md +1 -1
- package/docs/learn/data-and-errors.md +77 -0
- package/docs/learn/index.md +30 -0
- package/docs/learn/modules-and-dependencies.md +73 -0
- package/docs/learn/state-and-tests.md +71 -0
- package/docs/learn/values-and-functions.md +62 -0
- package/docs/lesson-failures.json +8 -0
- package/docs/maintaining-docs.md +16 -4
- package/docs/packages.md +72 -126
- package/docs/performance.md +13 -41
- package/docs/production-readiness.md +5 -4
- package/docs/public/downloads/approved-design.zip +0 -0
- package/docs/public/downloads/benchmark.zip +0 -0
- package/docs/public/downloads/cli-args.zip +0 -0
- package/docs/public/downloads/collections-benchmark.zip +0 -0
- package/docs/public/downloads/collections.zip +0 -0
- package/docs/public/downloads/cpu-benchmark.zip +0 -0
- package/docs/public/downloads/developer-workflow.zip +0 -0
- package/docs/public/downloads/drop.zip +0 -0
- package/docs/public/downloads/errors.zip +0 -0
- package/docs/public/downloads/ffi.zip +0 -0
- package/docs/public/downloads/generic-di.zip +0 -0
- package/docs/public/downloads/generics.zip +0 -0
- package/docs/public/downloads/hello.zip +0 -0
- package/docs/public/downloads/http-benchmark.zip +0 -0
- package/docs/public/downloads/interceptors.zip +0 -0
- package/docs/public/downloads/json-benchmark.zip +0 -0
- package/docs/public/downloads/new-syntax.zip +0 -0
- package/docs/public/downloads/oidc-login.zip +0 -0
- package/docs/public/downloads/ownership-transfer.zip +0 -0
- package/docs/public/downloads/ownership.zip +0 -0
- package/docs/public/downloads/packages-app.zip +0 -0
- package/docs/public/downloads/packages-math.zip +0 -0
- package/docs/public/downloads/startup-benchmark.zip +0 -0
- package/docs/public/downloads/visibility.zip +0 -0
- package/docs/public/downloads/weather-api.zip +0 -0
- package/docs/reference.md +23 -17
- package/docs/releasing.md +29 -15
- package/docs/research/code-to-natural-language.md +108 -0
- package/docs/research/ecosystem-workflow.md +41 -0
- package/docs/research/wiki-editorial-design.md +71 -0
- package/docs/roadmap.md +1 -1
- package/docs/specifications.md +27 -11
- package/docs/testing.md +19 -5
- package/docs/tooling.md +25 -12
- package/docs/weather-api.md +65 -0
- package/docs/web.md +50 -18
- package/docs/writing-docs.md +49 -0
- package/examples/{hello/.aug-spec/august/0.19.0 → approved-design/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
- package/examples/approved-design/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/approved-design/.aug-spec/manifest.json +3 -3
- package/examples/approved-design/counters.aug +5 -4
- package/examples/approved-design/counters.aug.md +25 -132
- package/examples/approved-design/domain/app.aug +2 -1
- package/examples/approved-design/domain/app.aug.md +10 -80
- package/examples/approved-design/domain/export.aug +1 -0
- package/examples/approved-design/domain/export.aug.md +4 -20
- package/examples/approved-design/domain/models.aug +1 -0
- package/examples/approved-design/domain/models.aug.md +3 -25
- package/examples/approved-design/domain/numbers.aug +3 -2
- package/examples/approved-design/domain/numbers.aug.md +19 -116
- package/examples/approved-design/main.aug +1 -0
- package/examples/approved-design/main.aug.md +12 -95
- package/examples/benchmark/.aug-spec/manifest.json +1 -1
- package/examples/benchmark/main.aug +1 -0
- package/examples/benchmark/main.aug.md +6 -36
- package/examples/cli-args/.aug-spec/manifest.json +1 -1
- package/examples/cli-args/main.aug +1 -0
- package/examples/cli-args/main.aug.md +5 -32
- package/examples/collections/.aug-spec/manifest.json +1 -1
- package/examples/collections/main.aug +1 -0
- package/examples/collections/main.aug.md +6 -36
- package/examples/{generic-di/.aug-spec/august/0.19.0 → developer-workflow/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
- package/examples/developer-workflow/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/developer-workflow/.aug-spec/manifest.json +3 -3
- package/examples/developer-workflow/calculator.aug +3 -2
- package/examples/developer-workflow/calculator.aug.md +28 -189
- package/examples/developer-workflow/logging/console.aug +2 -1
- package/examples/developer-workflow/logging/console.aug.md +7 -57
- package/examples/developer-workflow/logging/export.aug +1 -0
- package/examples/developer-workflow/logging/export.aug.md +3 -15
- package/examples/developer-workflow/logging/logger.aug +1 -0
- package/examples/developer-workflow/logging/logger.aug.md +6 -46
- package/examples/developer-workflow/main.aug +1 -0
- package/examples/developer-workflow/main.aug.md +10 -68
- package/examples/drop/.aug-spec/manifest.json +1 -1
- package/examples/drop/main.aug +1 -0
- package/examples/drop/main.aug.md +6 -28
- package/examples/drop/resource.aug +1 -0
- package/examples/drop/resource.aug.md +6 -34
- package/examples/errors/.aug-spec/manifest.json +1 -1
- package/examples/errors/errors.aug +2 -1
- package/examples/errors/errors.aug.md +4 -27
- package/examples/errors/main.aug +1 -0
- package/examples/errors/main.aug.md +6 -29
- package/examples/ffi/.aug-spec/manifest.json +1 -1
- package/examples/ffi/main.aug +1 -0
- package/examples/ffi/main.aug.md +5 -21
- package/examples/ffi/native.aug +2 -1
- package/examples/ffi/native.aug.md +5 -35
- package/examples/{approved-design/.aug-spec/august/0.19.0 → generic-di/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
- package/examples/generic-di/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/generic-di/.aug-spec/manifest.json +3 -3
- package/examples/generic-di/main.aug +1 -0
- package/examples/generic-di/main.aug.md +8 -40
- package/examples/generic-di/types.aug +3 -2
- package/examples/generic-di/types.aug.md +18 -97
- package/examples/generics/.aug-spec/manifest.json +1 -1
- package/examples/generics/main.aug +1 -0
- package/examples/generics/main.aug.md +9 -48
- package/examples/generics/types.aug +4 -3
- package/examples/generics/types.aug.md +18 -104
- package/examples/{developer-workflow/.aug-spec/august/0.19.0 → hello/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
- package/examples/hello/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/hello/.aug-spec/manifest.json +3 -3
- package/examples/hello/app/export.aug +1 -0
- package/examples/hello/app/export.aug.md +3 -13
- package/examples/hello/app/greeter.aug +2 -1
- package/examples/hello/app/greeter.aug.md +10 -94
- package/examples/hello/logging/console.aug +2 -1
- package/examples/hello/logging/console.aug.md +7 -55
- package/examples/hello/logging/export.aug +1 -0
- package/examples/hello/logging/export.aug.md +3 -15
- package/examples/hello/logging/logger.aug +1 -0
- package/examples/hello/logging/logger.aug.md +6 -48
- package/examples/hello/main.aug +1 -0
- package/examples/hello/main.aug.md +8 -40
- package/examples/interceptors/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
- package/examples/interceptors/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/interceptors/.aug-spec/manifest.json +3 -3
- package/examples/interceptors/app.aug +3 -2
- package/examples/interceptors/app.aug.md +15 -141
- package/examples/interceptors/interceptors.aug +3 -2
- package/examples/interceptors/interceptors.aug.md +19 -152
- package/examples/interceptors/logging.aug +2 -1
- package/examples/interceptors/logging.aug.md +10 -79
- package/examples/interceptors/main.aug +1 -0
- package/examples/interceptors/main.aug.md +9 -66
- package/examples/new-syntax/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
- package/examples/new-syntax/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/new-syntax/.aug-spec/manifest.json +3 -3
- package/examples/new-syntax/console.aug +2 -1
- package/examples/new-syntax/console.aug.md +7 -53
- package/examples/new-syntax/greeter.aug +2 -1
- package/examples/new-syntax/greeter.aug.md +10 -74
- package/examples/new-syntax/logger.aug +1 -0
- package/examples/new-syntax/logger.aug.md +6 -46
- package/examples/new-syntax/main.aug +1 -0
- package/examples/new-syntax/main.aug.md +9 -54
- package/examples/new-syntax/math.aug +2 -1
- package/examples/new-syntax/math.aug.md +3 -24
- package/examples/oidc-login/.aug-spec/manifest.json +13 -13
- package/examples/oidc-login/.aug-spec/packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.aug.md +71 -0
- package/examples/oidc-login/.aug-spec/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +17 -0
- package/examples/oidc-login/.aug-spec/packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +125 -0
- package/examples/oidc-login/.aug-spec/{august/0.19.0/crypto → packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40}/contracts.aug +12 -11
- package/examples/oidc-login/.aug-spec/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.aug.md +244 -0
- package/examples/oidc-login/.aug-spec/{august/0.19.0/crypto → packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40}/jose.aug +6 -5
- package/examples/oidc-login/.aug-spec/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.aug.md +71 -0
- package/examples/oidc-login/.aug-spec/packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +30 -0
- package/examples/oidc-login/aug.lock.json +100 -0
- package/examples/oidc-login/client/contracts.aug +1 -0
- package/examples/oidc-login/client/contracts.aug.md +9 -66
- package/examples/oidc-login/client/endpoints.aug +6 -5
- package/examples/oidc-login/client/endpoints.aug.md +13 -145
- package/examples/oidc-login/client/export.aug +1 -0
- package/examples/oidc-login/client/export.aug.md +4 -24
- package/examples/oidc-login/client/login.aug +7 -6
- package/examples/oidc-login/client/login.aug.md +25 -303
- package/examples/oidc-login/client/logout.aug +5 -4
- package/examples/oidc-login/client/logout.aug.md +13 -135
- package/examples/oidc-login/client/protocol.aug +7 -6
- package/examples/oidc-login/client/protocol.aug.md +36 -283
- package/examples/oidc-login/client/session.aug +5 -4
- package/examples/oidc-login/client/session.aug.md +12 -139
- package/examples/oidc-login/client/views.aug +3 -2
- package/examples/oidc-login/client/views.aug.md +8 -57
- package/examples/oidc-login/common/export.aug +1 -0
- package/examples/oidc-login/common/export.aug.md +5 -27
- package/examples/oidc-login/common/headers.aug +4 -3
- package/examples/oidc-login/common/headers.aug.md +9 -67
- package/examples/oidc-login/common/keys.aug +6 -5
- package/examples/oidc-login/common/keys.aug.md +29 -165
- package/examples/oidc-login/common/settings.aug +2 -1
- package/examples/oidc-login/common/settings.aug.md +5 -39
- package/examples/oidc-login/common/views.aug +2 -1
- package/examples/oidc-login/common/views.aug.md +4 -28
- package/examples/oidc-login/main.aug +6 -16
- package/examples/oidc-login/main.aug.md +17 -146
- package/examples/oidc-login/main.yaml +7 -0
- package/examples/oidc-login/provider/authorization.aug +7 -6
- package/examples/oidc-login/provider/authorization.aug.md +23 -238
- package/examples/oidc-login/provider/contracts.aug +1 -0
- package/examples/oidc-login/provider/contracts.aug.md +23 -158
- package/examples/oidc-login/provider/credentials.aug +3 -2
- package/examples/oidc-login/provider/credentials.aug.md +9 -53
- package/examples/oidc-login/provider/discovery.aug +4 -3
- package/examples/oidc-login/provider/discovery.aug.md +11 -118
- package/examples/oidc-login/provider/export.aug +1 -0
- package/examples/oidc-login/provider/export.aug.md +6 -34
- package/examples/oidc-login/provider/token.aug +6 -5
- package/examples/oidc-login/provider/token.aug.md +16 -204
- package/examples/oidc-login/provider/userinfo.aug +4 -3
- package/examples/oidc-login/provider/userinfo.aug.md +10 -92
- package/examples/oidc-login/provider/views.aug +3 -2
- package/examples/oidc-login/provider/views.aug.md +8 -52
- package/examples/ownership/.aug-spec/manifest.json +1 -1
- package/examples/ownership/counter.aug +3 -2
- package/examples/ownership/counter.aug.md +12 -66
- package/examples/ownership/main.aug +1 -0
- package/examples/ownership/main.aug.md +6 -31
- package/examples/ownership-transfer/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
- package/examples/ownership-transfer/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
- package/examples/ownership-transfer/.aug-spec/manifest.json +3 -3
- package/examples/ownership-transfer/main.aug +1 -0
- package/examples/ownership-transfer/main.aug.md +9 -53
- package/examples/ownership-transfer/resource.aug +2 -1
- package/examples/ownership-transfer/resource.aug.md +12 -71
- package/examples/packages/app/.aug-spec/manifest.json +1 -1
- package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug +2 -1
- package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug.md +9 -51
- package/examples/packages/app/main.aug +1 -0
- package/examples/packages/app/main.aug.md +6 -26
- package/examples/packages/math/.aug-spec/manifest.json +1 -1
- package/examples/packages/math/aug-package.json +1 -1
- package/examples/packages/math/src/arithmetic.aug +2 -1
- package/examples/packages/math/src/arithmetic.aug.md +9 -51
- package/examples/packages/math/src/export.aug +1 -0
- package/examples/packages/math/src/export.aug.md +3 -13
- package/examples/visibility/.aug-spec/manifest.json +1 -1
- package/examples/visibility/counter.aug +4 -3
- package/examples/visibility/counter.aug.md +12 -68
- package/examples/visibility/main.aug +1 -0
- package/examples/visibility/main.aug.md +6 -32
- package/examples/weather-api/.aug-spec/manifest.json +8 -0
- package/examples/weather-api/AGENTS.md +17 -0
- package/examples/weather-api/README.md +19 -0
- package/examples/weather-api/forecasts.aug +47 -0
- package/examples/weather-api/forecasts.aug.md +32 -0
- package/examples/weather-api/main.aug +4 -0
- package/examples/weather-api/main.aug.md +15 -0
- package/examples/weather-api/main.yaml +5 -0
- package/examples/weather-api/weather.http +5 -0
- package/package.json +3 -4
- package/scripts/bootstrap-native.mjs +181 -106
- package/scripts/native-setup.mjs +98 -0
- package/scripts/native-toolchain.mjs +28 -0
- package/src/builtins.js +1 -1
- package/src/checker.js +259 -72
- package/src/cli.js +114 -20
- package/src/codegen.js +1 -1
- package/src/config.js +1 -1
- package/src/contracts.js +10 -0
- package/src/editor.js +71 -16
- package/src/fixes.js +90 -2
- package/src/formatter.js +19 -8
- package/src/git-packages.js +110 -0
- package/src/help.js +24 -23
- package/src/http-contracts.js +14 -0
- package/src/http-policies.js +5 -5
- package/src/libraries.js +1 -1
- package/src/lsp.js +14 -5
- package/src/native.js +19 -13
- package/src/navigation.js +4 -2
- package/src/openapi.js +5 -4
- package/src/package-locking.js +45 -0
- package/src/package-manager.js +251 -67
- package/src/parser.js +13 -5
- package/src/policies.js +3 -3
- package/src/project-init.js +78 -4
- package/src/project.js +9 -7
- package/src/semantic.js +46 -2
- package/src/snippets.js +59 -0
- package/src/spec-hints.js +56 -0
- package/src/spec-tree.js +241 -0
- package/src/spec.js +626 -303
- package/docs/examples/approved-design/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/developer-workflow/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/generic-di/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/hello/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/interceptors/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/json-benchmark/dependencies/august/0.19.0/json/contracts.md +0 -103
- package/docs/examples/new-syntax/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/contracts.md +0 -925
- package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/jose.md +0 -434
- package/docs/examples/oidc-login/dependencies/august/0.19.0/json/contracts.md +0 -103
- package/docs/examples/oidc-login/dependencies/august/0.19.0/memory/store.md +0 -374
- package/docs/examples/oidc-login/dependencies/august/0.19.0/time/contracts.md +0 -150
- package/docs/examples/oidc-login/dependencies/august/0.19.0/web/contracts.md +0 -532
- package/docs/examples/ownership-transfer/dependencies/august/0.19.0/io/contracts.md +0 -395
- package/examples/approved-design/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/developer-workflow/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/generic-di/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/hello/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
- package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
- package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/contracts.aug.md +0 -791
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug.md +0 -266
- package/examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug.md +0 -55
- package/examples/oidc-login/.aug-spec/august/0.19.0/memory/store.aug.md +0 -250
- package/examples/oidc-login/.aug-spec/august/0.19.0/time/contracts.aug.md +0 -96
- package/examples/oidc-login/.aug-spec/august/0.19.0/web/contracts.aug.md +0 -420
- package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
- package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
- /package/examples/oidc-login/.aug-spec/{august/0.19.0/memory → packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/store.aug +0 -0
- /package/examples/oidc-login/.aug-spec/{august/0.19.0/json → packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
- /package/examples/oidc-login/.aug-spec/{august/0.19.0/web → packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
- /package/examples/oidc-login/.aug-spec/{august/0.19.0/time → packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
|
@@ -49,7 +49,8 @@ pageClass: aug-example-page
|
|
|
49
49
|
::: code-group
|
|
50
50
|
|
|
51
51
|
```aug [Indentation]
|
|
52
|
-
|
|
52
|
+
// aug-spec: "keys.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
53
|
+
import Crypto from crypto
|
|
53
54
|
KeyError() implements Error:
|
|
54
55
|
pass
|
|
55
56
|
/** Keys are initialized explicitly in main and expose distinct provider and session roles. */
|
|
@@ -59,34 +60,35 @@ capability SigningKeys:
|
|
|
59
60
|
session() returns RsaPrivateKey uses SigningKeys.session unless KeyError
|
|
60
61
|
MemorySigningKeys() implements SigningKeys:
|
|
61
62
|
Shared<Map<string,RsaPrivateKey>> _keys = Shared(value=Map<string, RsaPrivateKey>())
|
|
62
|
-
configure(RsaPrivateKey provider, RsaPrivateKey session)
|
|
63
|
+
configure(RsaPrivateKey provider, RsaPrivateKey session):
|
|
63
64
|
lock _keys as keys:
|
|
64
65
|
if keys.length() != 0:
|
|
65
66
|
throw KeyError()
|
|
66
67
|
keys.set(key="provider", value=provider)
|
|
67
68
|
keys.set(key="session", value=session)
|
|
68
|
-
provider()
|
|
69
|
+
provider():
|
|
69
70
|
lock _keys as keys:
|
|
70
71
|
match keys.get(key="provider"):
|
|
71
72
|
when null:
|
|
72
73
|
throw KeyError()
|
|
73
74
|
when some key:
|
|
74
75
|
return key
|
|
75
|
-
session()
|
|
76
|
+
session():
|
|
76
77
|
lock _keys as keys:
|
|
77
78
|
match keys.get(key="session"):
|
|
78
79
|
when null:
|
|
79
80
|
throw KeyError()
|
|
80
81
|
when some key:
|
|
81
82
|
return key
|
|
82
|
-
initializeKeys(resolve Crypto crypto, resolve SigningKeys keys)
|
|
83
|
+
initializeKeys(resolve Crypto crypto, resolve SigningKeys keys):
|
|
83
84
|
provider = crypto.generateRsa()
|
|
84
85
|
session = crypto.generateRsa()
|
|
85
86
|
keys.configure(provider, session)
|
|
86
87
|
```
|
|
87
88
|
|
|
88
89
|
```aug [Braces]
|
|
89
|
-
|
|
90
|
+
// aug-spec: "keys.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
91
|
+
import Crypto from crypto
|
|
90
92
|
KeyError() implements Error {
|
|
91
93
|
pass
|
|
92
94
|
}
|
|
@@ -98,7 +100,7 @@ capability SigningKeys {
|
|
|
98
100
|
}
|
|
99
101
|
MemorySigningKeys() implements SigningKeys {
|
|
100
102
|
Shared<Map<string,RsaPrivateKey>> _keys = Shared(value=Map<string, RsaPrivateKey>())
|
|
101
|
-
configure(RsaPrivateKey provider, RsaPrivateKey session)
|
|
103
|
+
configure(RsaPrivateKey provider, RsaPrivateKey session) {
|
|
102
104
|
lock _keys as keys {
|
|
103
105
|
if keys.length() != 0 {
|
|
104
106
|
throw KeyError()
|
|
@@ -107,7 +109,7 @@ MemorySigningKeys() implements SigningKeys {
|
|
|
107
109
|
keys.set(key="session", value=session)
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
|
-
provider()
|
|
112
|
+
provider() {
|
|
111
113
|
lock _keys as keys {
|
|
112
114
|
match keys.get(key="provider") {
|
|
113
115
|
when null {
|
|
@@ -119,7 +121,7 @@ MemorySigningKeys() implements SigningKeys {
|
|
|
119
121
|
}
|
|
120
122
|
}
|
|
121
123
|
}
|
|
122
|
-
session()
|
|
124
|
+
session() {
|
|
123
125
|
lock _keys as keys {
|
|
124
126
|
match keys.get(key="session") {
|
|
125
127
|
when null {
|
|
@@ -132,7 +134,7 @@ MemorySigningKeys() implements SigningKeys {
|
|
|
132
134
|
}
|
|
133
135
|
}
|
|
134
136
|
}
|
|
135
|
-
initializeKeys(resolve Crypto crypto, resolve SigningKeys keys)
|
|
137
|
+
initializeKeys(resolve Crypto crypto, resolve SigningKeys keys) {
|
|
136
138
|
provider = crypto.generateRsa()
|
|
137
139
|
session = crypto.generateRsa()
|
|
138
140
|
keys.configure(provider, session)
|
|
@@ -147,189 +149,63 @@ initializeKeys(resolve Crypto crypto, resolve SigningKeys keys) uses crypto.gene
|
|
|
147
149
|
|
|
148
150
|
## Compiled specification {#specification}
|
|
149
151
|
|
|
150
|
-
|
|
152
|
+
### `KeyError` · class · [source](keys.md#code) {#symbol-KeyError}
|
|
151
153
|
|
|
152
|
-
|
|
154
|
+
It implements `Error`.
|
|
153
155
|
|
|
154
|
-
|
|
155
|
-
- [`SigningKeys`](keys.md#symbol-SigningKeys) is a capability interface.
|
|
156
|
-
- [`MemorySigningKeys`](keys.md#symbol-MemorySigningKeys) is a class implementing `SigningKeys`.
|
|
157
|
-
- [`initializeKeys`](keys.md#symbol-initializeKeys) is a function.
|
|
158
|
-
|
|
159
|
-
### `KeyError` {#symbol-KeyError}
|
|
160
|
-
|
|
161
|
-
[source](keys.md#code)
|
|
162
|
-
|
|
163
|
-
Behavioral class.
|
|
164
|
-
|
|
165
|
-
Satisfies `Error`.
|
|
166
|
-
|
|
167
|
-
### `SigningKeys` {#symbol-SigningKeys}
|
|
168
|
-
|
|
169
|
-
[source](keys.md#code)
|
|
170
|
-
|
|
171
|
-
Capability interface.
|
|
172
|
-
|
|
173
|
-
**Author documentation**
|
|
156
|
+
### `SigningKeys` · capability interface · [source](keys.md#code) {#symbol-SigningKeys}
|
|
174
157
|
|
|
175
158
|
Keys are initialized explicitly in main and expose distinct provider and session roles.
|
|
176
159
|
|
|
177
|
-
#### `SigningKeys.configure` {#symbol-SigningKeys.configure}
|
|
178
|
-
|
|
179
|
-
[source](keys.md#code)
|
|
180
|
-
|
|
181
|
-
**Inputs**
|
|
182
|
-
|
|
183
|
-
- `provider` (`RsaPrivateKey`) — required labeled input.
|
|
184
|
-
- `session` (`RsaPrivateKey`) — required labeled input.
|
|
185
|
-
|
|
186
|
-
Returns: no value.
|
|
187
|
-
|
|
188
|
-
Capabilities: [`SigningKeys.configure`](keys.md#symbol-SigningKeys.configure).
|
|
189
|
-
|
|
190
|
-
Can fail with `KeyError`. Callers must catch or propagate these errors.
|
|
191
|
-
|
|
192
|
-
Interface contract. A selected implementation supplies the behavior.
|
|
193
|
-
|
|
194
|
-
#### `SigningKeys.provider` {#symbol-SigningKeys.provider}
|
|
195
|
-
|
|
196
|
-
[source](keys.md#code)
|
|
197
|
-
|
|
198
|
-
Returns: `RsaPrivateKey`.
|
|
199
|
-
|
|
200
|
-
Capabilities: [`SigningKeys.provider`](keys.md#symbol-SigningKeys.provider).
|
|
201
|
-
|
|
202
|
-
Can fail with `KeyError`. Callers must catch or propagate these errors.
|
|
203
|
-
|
|
204
|
-
Interface contract. A selected implementation supplies the behavior.
|
|
205
|
-
|
|
206
|
-
#### `SigningKeys.session` {#symbol-SigningKeys.session}
|
|
207
|
-
|
|
208
|
-
[source](keys.md#code)
|
|
209
|
-
|
|
210
|
-
Returns: `RsaPrivateKey`.
|
|
211
|
-
|
|
212
|
-
Capabilities: [`SigningKeys.session`](keys.md#symbol-SigningKeys.session).
|
|
213
|
-
|
|
214
|
-
Can fail with `KeyError`. Callers must catch or propagate these errors.
|
|
215
|
-
|
|
216
|
-
Interface contract. A selected implementation supplies the behavior.
|
|
217
|
-
|
|
218
|
-
### `MemorySigningKeys` {#symbol-MemorySigningKeys}
|
|
219
|
-
|
|
220
|
-
[source](keys.md#code)
|
|
221
|
-
|
|
222
|
-
Behavioral class.
|
|
223
|
-
|
|
224
|
-
Satisfies [`SigningKeys`](keys.md#symbol-SigningKeys).
|
|
225
|
-
|
|
226
|
-
**Field initialization**
|
|
227
|
-
|
|
228
|
-
- Initialize `_keys` of type `Shared<Map<string,RsaPrivateKey>>` to call `Shared` with `value` = an empty map from `string` to `RsaPrivateKey`. Read-only storage, private to this class.
|
|
229
|
-
|
|
230
|
-
#### `MemorySigningKeys.configure` {#symbol-MemorySigningKeys.configure}
|
|
231
|
-
|
|
232
|
-
[source](keys.md#code)
|
|
233
|
-
|
|
234
|
-
**Inputs**
|
|
235
|
-
|
|
236
|
-
- `provider` (`RsaPrivateKey`) — required labeled input.
|
|
237
|
-
- `session` (`RsaPrivateKey`) — required labeled input.
|
|
238
|
-
|
|
239
|
-
Returns: no value.
|
|
240
|
-
|
|
241
|
-
Capabilities: [`SigningKeys.configure`](keys.md#symbol-SigningKeys.configure).
|
|
242
|
-
|
|
243
|
-
Can fail with `KeyError`. Callers must catch or propagate these errors.
|
|
244
|
-
|
|
245
|
-
**What it does**
|
|
246
|
-
|
|
247
|
-
- Lock `_keys`, expose its mutable value as `keys`, and release the lock on every exit:
|
|
248
|
-
- If call `length` on `keys` does not equal `0`:
|
|
249
|
-
- Fail with call [`KeyError`](keys.md#symbol-KeyError). Transfer control to a matching catch or propagate the failure.
|
|
250
|
-
- Call `set` on `keys` with `key` = `"provider"`; `value` = `provider`.
|
|
251
|
-
- Call `set` on `keys` with `key` = `"session"`; `value` = `session`.
|
|
252
|
-
|
|
253
|
-
#### `MemorySigningKeys.provider` {#symbol-MemorySigningKeys.provider}
|
|
254
|
-
|
|
255
|
-
[source](keys.md#code)
|
|
256
|
-
|
|
257
|
-
Returns: `RsaPrivateKey`.
|
|
258
|
-
|
|
259
|
-
Capabilities: [`SigningKeys.provider`](keys.md#symbol-SigningKeys.provider).
|
|
260
|
-
|
|
261
|
-
Can fail with `KeyError`. Callers must catch or propagate these errors.
|
|
262
|
-
|
|
263
|
-
**What it does**
|
|
264
|
-
|
|
265
|
-
- Lock `_keys`, expose its mutable value as `keys`, and release the lock on every exit:
|
|
266
|
-
- Select the matching case for call `get` on `keys` with `key` = `"provider"`:
|
|
267
|
-
- A null value, including omitted optional input:
|
|
268
|
-
- Fail with call [`KeyError`](keys.md#symbol-KeyError). Transfer control to a matching catch or propagate the failure.
|
|
269
|
-
- A present, non-null value, named `key`:
|
|
270
|
-
- Return `key`.
|
|
271
|
-
|
|
272
|
-
#### `MemorySigningKeys.session` {#symbol-MemorySigningKeys.session}
|
|
273
|
-
|
|
274
|
-
[source](keys.md#code)
|
|
160
|
+
#### `SigningKeys.configure` · [source](keys.md#code) {#symbol-SigningKeys.configure}
|
|
275
161
|
|
|
276
|
-
|
|
162
|
+
It takes `provider` and `session` as `RsaPrivateKey`. It can call [`SigningKeys.configure`](keys.md#symbol-SigningKeys.configure). Failures can raise [`KeyError`](keys.md#symbol-KeyError).
|
|
277
163
|
|
|
278
|
-
|
|
164
|
+
#### `SigningKeys.provider` · [source](keys.md#code) {#symbol-SigningKeys.provider}
|
|
279
165
|
|
|
280
|
-
|
|
166
|
+
It returns `RsaPrivateKey`. It can call [`SigningKeys.provider`](keys.md#symbol-SigningKeys.provider). Failures can raise [`KeyError`](keys.md#symbol-KeyError).
|
|
281
167
|
|
|
282
|
-
|
|
168
|
+
#### `SigningKeys.session` · [source](keys.md#code) {#symbol-SigningKeys.session}
|
|
283
169
|
|
|
284
|
-
|
|
285
|
-
- Select the matching case for call `get` on `keys` with `key` = `"session"`:
|
|
286
|
-
- A null value, including omitted optional input:
|
|
287
|
-
- Fail with call [`KeyError`](keys.md#symbol-KeyError). Transfer control to a matching catch or propagate the failure.
|
|
288
|
-
- A present, non-null value, named `key`:
|
|
289
|
-
- Return `key`.
|
|
170
|
+
It returns `RsaPrivateKey`. It can call [`SigningKeys.session`](keys.md#symbol-SigningKeys.session). Failures can raise [`KeyError`](keys.md#symbol-KeyError).
|
|
290
171
|
|
|
291
|
-
### `
|
|
172
|
+
### `MemorySigningKeys` · class · [source](keys.md#code) {#symbol-MemorySigningKeys}
|
|
292
173
|
|
|
293
|
-
[
|
|
174
|
+
It implements [`SigningKeys`](keys.md#symbol-SigningKeys). The read-only, private field `_keys` has type `Shared<Map<string,RsaPrivateKey>>` and starts as a `Shared` with `value` from an empty map from `string` to `RsaPrivateKey`.
|
|
294
175
|
|
|
295
|
-
|
|
176
|
+
#### `MemorySigningKeys.configure` · [source](keys.md#code) {#symbol-MemorySigningKeys.configure}
|
|
296
177
|
|
|
297
|
-
|
|
298
|
-
- `keys` ([`SigningKeys`](keys.md#symbol-SigningKeys)) — injected; callers omit it.
|
|
178
|
+
It takes `provider` and `session` as `RsaPrivateKey`. Failures can raise [`KeyError`](keys.md#symbol-KeyError).
|
|
299
179
|
|
|
300
|
-
|
|
180
|
+
While holding the lock on `_keys` as mutable `keys`, it checks that the number of elements in `keys` equals `0`. It raises a [`KeyError`](keys.md#symbol-KeyError) at the first failed check. It stores `provider` in `keys` under `"provider"`. It stores `session` in `keys` under `"session"`.
|
|
301
181
|
|
|
302
|
-
|
|
182
|
+
Release this lock when the block exits, including on return or failure.
|
|
303
183
|
|
|
304
|
-
|
|
184
|
+
#### `MemorySigningKeys.provider` · [source](keys.md#code) {#symbol-MemorySigningKeys.provider}
|
|
305
185
|
|
|
306
|
-
|
|
186
|
+
Failures can raise [`KeyError`](keys.md#symbol-KeyError).
|
|
307
187
|
|
|
308
|
-
|
|
309
|
-
- Set `session` to call [`Crypto.generateRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.generateRsa) on `crypto`.
|
|
310
|
-
- Call [`SigningKeys.configure`](keys.md#symbol-SigningKeys.configure) on `keys` with `provider` = `provider`; `session` = `session`.
|
|
188
|
+
While holding the lock on `_keys` as mutable `keys`, it obtains the value under `"provider"` in `keys`. If no value is found, it raises a [`KeyError`](keys.md#symbol-KeyError). The non-null result becomes `key`. It returns `key`.
|
|
311
189
|
|
|
312
|
-
|
|
190
|
+
Release this lock when the block exits, including on return or failure.
|
|
313
191
|
|
|
314
|
-
|
|
192
|
+
#### `MemorySigningKeys.session` · [source](keys.md#code) {#symbol-MemorySigningKeys.session}
|
|
315
193
|
|
|
316
|
-
|
|
194
|
+
Failures can raise [`KeyError`](keys.md#symbol-KeyError).
|
|
317
195
|
|
|
318
|
-
|
|
196
|
+
While holding the lock on `_keys` as mutable `keys`, it obtains the value under `"session"` in `keys`. If no value is found, it raises a [`KeyError`](keys.md#symbol-KeyError). The non-null result becomes `key`. It returns `key`.
|
|
319
197
|
|
|
320
|
-
|
|
198
|
+
Release this lock when the block exits, including on return or failure.
|
|
321
199
|
|
|
322
|
-
###
|
|
200
|
+
### `initializeKeys` · [source](keys.md#code) {#symbol-initializeKeys}
|
|
323
201
|
|
|
324
|
-
|
|
325
|
-
- `Map<string, RsaPrivateKey>.length` (no inputs) → `int`: Read the number of elements.
|
|
326
|
-
- `Map<string, RsaPrivateKey>.set` (`key`: `string`, `value`: `RsaPrivateKey`) → `void`: Insert or replace an entry with exclusive mutable access. Changes the receiver.
|
|
202
|
+
It gets `crypto` ([`Crypto`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto)) and `keys` ([`SigningKeys`](keys.md#symbol-SigningKeys)) from dependency injection. Failures can raise `CryptoError` and [`KeyError`](keys.md#symbol-KeyError). It sets `provider` and `session` separately, each to [`crypto.generateRsa`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.generateRsa). It calls [`keys.configure`](keys.md#symbol-SigningKeys.configure) with `provider` and `session`.
|
|
327
203
|
|
|
328
|
-
|
|
204
|
+
### Dependencies
|
|
329
205
|
|
|
330
|
-
|
|
206
|
+
It uses [`Crypto`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto) ([`generateRsa`](../dependencies/packages/%40git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md#symbol-Crypto.generateRsa)) from `crypto`.
|
|
331
207
|
|
|
332
|
-
|
|
208
|
+
Built-in operations follow the [language reference](https://greenpandastudios.github.io/augscript/language-constructs).
|
|
333
209
|
|
|
334
210
|
::::
|
|
335
211
|
|
|
@@ -49,17 +49,33 @@ pageClass: aug-example-page
|
|
|
49
49
|
::: code-group
|
|
50
50
|
|
|
51
51
|
```aug [Indentation]
|
|
52
|
+
// aug-spec: "settings.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
52
53
|
/** Explicit loopback development settings. The provider accepts one registered client and its exact callback URI. */
|
|
53
54
|
record Settings(string baseUrl, string issuer, string clientId, string callback, int sessionSeconds, bool secureCookies)
|
|
54
|
-
settings()
|
|
55
|
-
return Settings(
|
|
55
|
+
settings():
|
|
56
|
+
return Settings(
|
|
57
|
+
baseUrl="http://127.0.0.1:8787",
|
|
58
|
+
issuer="http://127.0.0.1:8787/provider",
|
|
59
|
+
clientId="august-login-app",
|
|
60
|
+
callback="http://127.0.0.1:8787/login/callback",
|
|
61
|
+
sessionSeconds=900,
|
|
62
|
+
secureCookies=false
|
|
63
|
+
)
|
|
56
64
|
```
|
|
57
65
|
|
|
58
66
|
```aug [Braces]
|
|
67
|
+
// aug-spec: "settings.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
59
68
|
/** Explicit loopback development settings. The provider accepts one registered client and its exact callback URI. */
|
|
60
69
|
record Settings(string baseUrl, string issuer, string clientId, string callback, int sessionSeconds, bool secureCookies)
|
|
61
|
-
settings()
|
|
62
|
-
return Settings(
|
|
70
|
+
settings() {
|
|
71
|
+
return Settings(
|
|
72
|
+
baseUrl="http://127.0.0.1:8787",
|
|
73
|
+
issuer="http://127.0.0.1:8787/provider",
|
|
74
|
+
clientId="august-login-app",
|
|
75
|
+
callback="http://127.0.0.1:8787/login/callback",
|
|
76
|
+
sessionSeconds=900,
|
|
77
|
+
secureCookies=false
|
|
78
|
+
)
|
|
63
79
|
}
|
|
64
80
|
```
|
|
65
81
|
|
|
@@ -71,45 +87,13 @@ settings() returns Settings {
|
|
|
71
87
|
|
|
72
88
|
## Compiled specification {#specification}
|
|
73
89
|
|
|
74
|
-
|
|
90
|
+
### `Settings` · immutable record · [source](settings.md#code) {#symbol-Settings}
|
|
75
91
|
|
|
76
|
-
|
|
92
|
+
Explicit loopback development settings. The provider accepts one registered client and its exact callback URI. It takes `baseUrl`, `issuer`, `clientId`, and `callback` as strings, kept read-only, `sessionSeconds` as an integer, kept read-only, and `secureCookies` as a boolean, kept read-only.
|
|
77
93
|
|
|
78
|
-
|
|
79
|
-
- [`settings`](settings.md#symbol-settings) is a function returning `Settings`.
|
|
94
|
+
### `settings` · [source](settings.md#code) {#symbol-settings}
|
|
80
95
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
[source](settings.md#code)
|
|
84
|
-
|
|
85
|
-
Immutable record.
|
|
86
|
-
|
|
87
|
-
**Author documentation**
|
|
88
|
-
|
|
89
|
-
Explicit loopback development settings. The provider accepts one registered client and its exact callback URI.
|
|
90
|
-
|
|
91
|
-
**Inputs**
|
|
92
|
-
|
|
93
|
-
- `baseUrl` (`string`) — required labeled input — stored as `baseUrl` and read-only after initialization.
|
|
94
|
-
- `issuer` (`string`) — required labeled input — stored as `issuer` and read-only after initialization.
|
|
95
|
-
- `clientId` (`string`) — required labeled input — stored as `clientId` and read-only after initialization.
|
|
96
|
-
- `callback` (`string`) — required labeled input — stored as `callback` and read-only after initialization.
|
|
97
|
-
- `sessionSeconds` (`int`) — required labeled input — stored as `sessionSeconds` and read-only after initialization.
|
|
98
|
-
- `secureCookies` (`bool`) — required labeled input — stored as `secureCookies` and read-only after initialization.
|
|
99
|
-
|
|
100
|
-
### `settings` {#symbol-settings}
|
|
101
|
-
|
|
102
|
-
[source](settings.md#code)
|
|
103
|
-
|
|
104
|
-
Returns: [`Settings`](settings.md#symbol-Settings).
|
|
105
|
-
|
|
106
|
-
**What it does**
|
|
107
|
-
|
|
108
|
-
- Return call [`Settings`](settings.md#symbol-Settings) with `baseUrl` = `"http://127.0.0.1:8787"`; `issuer` = `"http://127.0.0.1:8787/provider"`; `clientId` = `"august-login-app"`; `callback` = `"http://127.0.0.1:8787/login/callback"`; `sessionSeconds` = `900`; `secureCookies` = `false`.
|
|
109
|
-
|
|
110
|
-
### Shared language rules
|
|
111
|
-
|
|
112
|
-
See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
|
|
96
|
+
It returns a [`Settings`](settings.md#symbol-Settings) with `baseUrl` `"http://127.0.0.1:8787"`, `issuer` `"http://127.0.0.1:8787/provider"`, `clientId` `"august-login-app"`, `callback` `"http://127.0.0.1:8787/login/callback"`, `sessionSeconds` `900`, and `secureCookies` `false`.
|
|
113
97
|
|
|
114
98
|
::::
|
|
115
99
|
|
|
@@ -49,14 +49,16 @@ pageClass: aug-example-page
|
|
|
49
49
|
::: code-group
|
|
50
50
|
|
|
51
51
|
```aug [Indentation]
|
|
52
|
+
// aug-spec: "views.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
52
53
|
/** Small server components keep each page's behavior and dependencies visible. */
|
|
53
|
-
Page(string title, List<Html> children)
|
|
54
|
+
Page(string title, List<Html> children):
|
|
54
55
|
return <html lang={"en"}><head><meta charset={"utf-8"} /><meta name={"viewport"} content={"width=device-width, initial-scale=1"} /><title>{title} — August</title></head><body style={"margin:0;background:#f3f5f9;color:#17233a;font:17px system-ui,sans-serif;line-height:1.6"}><main style={"max-width:640px;margin:48px auto;padding:28px;background:white;border-radius:20px;box-shadow:0 12px 48px #17233a12"}><nav><a href={"/"} style={"color:#4852d7;font-weight:750;text-decoration:none"}>August · OpenID Connect</a></nav><h1>{title}</h1>{children}</main></body></html>
|
|
55
56
|
```
|
|
56
57
|
|
|
57
58
|
```aug [Braces]
|
|
59
|
+
// aug-spec: "views.aug.md" explains this file. Read it before changes; refresh with aug spec.
|
|
58
60
|
/** Small server components keep each page's behavior and dependencies visible. */
|
|
59
|
-
Page(string title, List<Html> children)
|
|
61
|
+
Page(string title, List<Html> children) {
|
|
60
62
|
return <html lang={"en"}><head><meta charset={"utf-8"} /><meta name={"viewport"} content={"width=device-width, initial-scale=1"} /><title>{title} — August</title></head><body style={"margin:0;background:#f3f5f9;color:#17233a;font:17px system-ui,sans-serif;line-height:1.6"}><main style={"max-width:640px;margin:48px auto;padding:28px;background:white;border-radius:20px;box-shadow:0 12px 48px #17233a12"}><nav><a href={"/"} style={"color:#4852d7;font-weight:750;text-decoration:none"}>August · OpenID Connect</a></nav><h1>{title}</h1>{children}</main></body></html>
|
|
61
63
|
}
|
|
62
64
|
```
|
|
@@ -69,34 +71,11 @@ Page(string title, List<Html> children) returns Html {
|
|
|
69
71
|
|
|
70
72
|
## Compiled specification {#specification}
|
|
71
73
|
|
|
72
|
-
|
|
74
|
+
### `Page` · [source](views.md#code) {#symbol-Page}
|
|
73
75
|
|
|
74
|
-
|
|
76
|
+
Small server components keep each page's behavior and dependencies visible. It takes `title` as a string and `children` as `List<Html>`.
|
|
75
77
|
|
|
76
|
-
-
|
|
77
|
-
|
|
78
|
-
### `Page` {#symbol-Page}
|
|
79
|
-
|
|
80
|
-
[source](views.md#code)
|
|
81
|
-
|
|
82
|
-
**Inputs**
|
|
83
|
-
|
|
84
|
-
- `title` (`string`) — required labeled input.
|
|
85
|
-
- `children` (`List<Html>`) — required labeled input.
|
|
86
|
-
|
|
87
|
-
Returns: `Html`.
|
|
88
|
-
|
|
89
|
-
**What it does**
|
|
90
|
-
|
|
91
|
-
- Return the HTML element `html` with `lang` = `"en"` containing the HTML element `head` containing the HTML element `meta` with `charset` = `"utf-8"` (rendered on the server with embedded text escaped), the HTML element `meta` with `name` = `"viewport"`, `content` = `"width=device-width, initial-scale=1"` (rendered on the server with embedded text escaped), the HTML element `title` containing `title`, ` — August` (rendered on the server with embedded text escaped) (rendered on the server with embedded text escaped), the HTML element `body` with `style` = `"margin:0;background:#f3f5f9;color:#17233a;font:17px system-ui,sans-serif;line-height:1.6"` containing the HTML element `main` with `style` = `"max-width:640px;margin:48px auto;padding:28px;background:white;border-radius:20px;box-shadow:0 12px 48px #17233a12"` containing the HTML element `nav` containing the HTML element `a` with `href` = `"/"`, `style` = `"color:#4852d7;font-weight:750;text-decoration:none"` containing `August · OpenID Connect` (rendered on the server with embedded text escaped) (rendered on the server with embedded text escaped), the HTML element `h1` containing `title` (rendered on the server with embedded text escaped), `children` (rendered on the server with embedded text escaped) (rendered on the server with embedded text escaped) (rendered on the server with embedded text escaped).
|
|
92
|
-
|
|
93
|
-
**Author documentation**
|
|
94
|
-
|
|
95
|
-
Small server components keep each page's behavior and dependencies visible.
|
|
96
|
-
|
|
97
|
-
### Shared language rules
|
|
98
|
-
|
|
99
|
-
See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
|
|
78
|
+
It returns the HTML element `html` with `lang` = `"en"` containing the HTML element `head` containing the HTML element `meta` with `charset` = `"utf-8"` with escaped text, the HTML element `meta` with `name` = `"viewport"`, `content` = `"width=device-width, initial-scale=1"` with escaped text, the HTML element `title` containing `title`, ` — August` with escaped text with escaped text, the HTML element `body` with `style` = `"margin:0;background:#f3f5f9;color:#17233a;font:17px system-ui,sans-serif;line-height:1.6"` containing the HTML element `main` with `style` = `"max-width:640px;margin:48px auto;padding:28px;background:white;border-radius:20px;box-shadow:0 12px 48px #17233a12"` containing the HTML element `nav` containing a link with `href` = `"/"`, `style` = `"color:#4852d7;font-weight:750;text-decoration:none"` containing `August · OpenID Connect` with escaped text with escaped text, a heading containing `title` with escaped text, `children` with escaped text with escaped text with escaped text.
|
|
100
79
|
|
|
101
80
|
::::
|
|
102
81
|
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.aug · OpenID Connect login application"
|
|
3
|
+
generated: true
|
|
4
|
+
source: "examples/oidc-login/.aug-spec/packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.aug"
|
|
5
|
+
editLink: false
|
|
6
|
+
prev: false
|
|
7
|
+
next: false
|
|
8
|
+
outline: [2, 3]
|
|
9
|
+
search: false
|
|
10
|
+
pageClass: aug-example-page
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# `packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.aug`
|
|
14
|
+
|
|
15
|
+
[OpenID Connect login application](../../../../../index.md) · Dependency source and specification
|
|
16
|
+
|
|
17
|
+
This is the exact dependency version used by this example.
|
|
18
|
+
|
|
19
|
+
::::: example-compare
|
|
20
|
+
|
|
21
|
+
:::: example-code
|
|
22
|
+
|
|
23
|
+
## Code {#code}
|
|
24
|
+
|
|
25
|
+
::: code-group
|
|
26
|
+
|
|
27
|
+
```aug [Indentation]
|
|
28
|
+
/** The bounded store could not accept another live entry. */
|
|
29
|
+
StoreFull() implements Error:
|
|
30
|
+
pass
|
|
31
|
+
record _Entry<T implements Data>(T value, int expires)
|
|
32
|
+
/** A bounded, expiring capability for immutable values. Each generic DI binding has its own table. */
|
|
33
|
+
capability ExpiringStore<T implements Data>:
|
|
34
|
+
/** Remove expired entries, then store at most 512 live entries. Time is supplied by the caller. */
|
|
35
|
+
put(string key, T value, int expires, int now) uses ExpiringStore.put unless StoreFull
|
|
36
|
+
/** Atomically remove a value. Expired or absent entries return null. */
|
|
37
|
+
take(string key, int now) returns optional T uses ExpiringStore.take
|
|
38
|
+
/** Read a live value without consuming it. */
|
|
39
|
+
get(string key, int now) returns optional T uses ExpiringStore.get
|
|
40
|
+
/** A synchronized table with short critical sections and no I/O while locked. */
|
|
41
|
+
MemoryStore<T implements Data>() implements ExpiringStore<T>:
|
|
42
|
+
Shared<Map<string,_Entry<T>>> _entries = Shared(value=Map<string, _Entry<T>>())
|
|
43
|
+
put(string key, T value, int expires, int now) unless StoreFull:
|
|
44
|
+
entry = _Entry<T>(value=value, expires=expires)
|
|
45
|
+
lock _entries as entries:
|
|
46
|
+
for (name, saved) in entries:
|
|
47
|
+
if saved.expires <= now:
|
|
48
|
+
entries.take(key=name)
|
|
49
|
+
if entries.length() >= 512 and (not entries.contains(key=key)):
|
|
50
|
+
throw StoreFull()
|
|
51
|
+
entries.set(key=key, value=entry)
|
|
52
|
+
take(string key, int now) returns optional T:
|
|
53
|
+
lock _entries as entries:
|
|
54
|
+
match entries.take(key=key):
|
|
55
|
+
when null:
|
|
56
|
+
return null
|
|
57
|
+
when some saved:
|
|
58
|
+
if saved.expires <= now:
|
|
59
|
+
return null
|
|
60
|
+
return saved.value
|
|
61
|
+
get(string key, int now) returns optional T:
|
|
62
|
+
lock _entries as entries:
|
|
63
|
+
match entries.get(key=key):
|
|
64
|
+
when null:
|
|
65
|
+
return null
|
|
66
|
+
when some saved:
|
|
67
|
+
if saved.expires <= now:
|
|
68
|
+
return null
|
|
69
|
+
return saved.value
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
```aug [Braces]
|
|
73
|
+
/** The bounded store could not accept another live entry. */
|
|
74
|
+
StoreFull() implements Error {
|
|
75
|
+
pass
|
|
76
|
+
}
|
|
77
|
+
record _Entry<T implements Data>(T value, int expires)
|
|
78
|
+
/** A bounded, expiring capability for immutable values. Each generic DI binding has its own table. */
|
|
79
|
+
capability ExpiringStore<T implements Data> {
|
|
80
|
+
/** Remove expired entries, then store at most 512 live entries. Time is supplied by the caller. */
|
|
81
|
+
put(string key, T value, int expires, int now) uses ExpiringStore.put unless StoreFull
|
|
82
|
+
/** Atomically remove a value. Expired or absent entries return null. */
|
|
83
|
+
take(string key, int now) returns optional T uses ExpiringStore.take
|
|
84
|
+
/** Read a live value without consuming it. */
|
|
85
|
+
get(string key, int now) returns optional T uses ExpiringStore.get
|
|
86
|
+
}
|
|
87
|
+
/** A synchronized table with short critical sections and no I/O while locked. */
|
|
88
|
+
MemoryStore<T implements Data>() implements ExpiringStore<T> {
|
|
89
|
+
Shared<Map<string,_Entry<T>>> _entries = Shared(value=Map<string, _Entry<T>>())
|
|
90
|
+
put(string key, T value, int expires, int now) unless StoreFull {
|
|
91
|
+
entry = _Entry<T>(value=value, expires=expires)
|
|
92
|
+
lock _entries as entries {
|
|
93
|
+
for (name, saved) in entries {
|
|
94
|
+
if saved.expires <= now {
|
|
95
|
+
entries.take(key=name)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if entries.length() >= 512 and (not entries.contains(key=key)) {
|
|
99
|
+
throw StoreFull()
|
|
100
|
+
}
|
|
101
|
+
entries.set(key=key, value=entry)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
take(string key, int now) returns optional T {
|
|
105
|
+
lock _entries as entries {
|
|
106
|
+
match entries.take(key=key) {
|
|
107
|
+
when null {
|
|
108
|
+
return null
|
|
109
|
+
}
|
|
110
|
+
when some saved {
|
|
111
|
+
if saved.expires <= now {
|
|
112
|
+
return null
|
|
113
|
+
}
|
|
114
|
+
return saved.value
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
get(string key, int now) returns optional T {
|
|
120
|
+
lock _entries as entries {
|
|
121
|
+
match entries.get(key=key) {
|
|
122
|
+
when null {
|
|
123
|
+
return null
|
|
124
|
+
}
|
|
125
|
+
when some saved {
|
|
126
|
+
if saved.expires <= now {
|
|
127
|
+
return null
|
|
128
|
+
}
|
|
129
|
+
return saved.value
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
:::
|
|
138
|
+
|
|
139
|
+
::::
|
|
140
|
+
|
|
141
|
+
:::: example-spec
|
|
142
|
+
|
|
143
|
+
## Compiled specification {#specification}
|
|
144
|
+
|
|
145
|
+
### `StoreFull` · class · [source](store.md#code) {#symbol-StoreFull}
|
|
146
|
+
|
|
147
|
+
The bounded store could not accept another live entry. It implements `Error`.
|
|
148
|
+
|
|
149
|
+
### `ExpiringStore` · capability interface · [source](store.md#code) {#symbol-ExpiringStore}
|
|
150
|
+
|
|
151
|
+
A bounded, expiring capability for immutable values. Each generic DI binding has its own table. The type parameters are `T` which must satisfy `Data`.
|
|
152
|
+
|
|
153
|
+
#### `ExpiringStore.put` · [source](store.md#code) {#symbol-ExpiringStore.put}
|
|
154
|
+
|
|
155
|
+
Remove expired entries, then store at most 512 live entries. Time is supplied by the caller. It takes `key` as a string, `value` as `T`, and `expires` and `now` as integers.
|
|
156
|
+
|
|
157
|
+
It can call [`ExpiringStore.put`](store.md#symbol-ExpiringStore.put). Failures can raise [`StoreFull`](store.md#symbol-StoreFull).
|
|
158
|
+
|
|
159
|
+
#### `ExpiringStore.take` · [source](store.md#code) {#symbol-ExpiringStore.take}
|
|
160
|
+
|
|
161
|
+
Atomically remove a value. Expired or absent entries return null. It takes `key` as a string and `now` as an integer.
|
|
162
|
+
|
|
163
|
+
It returns `optional T`. It can call [`ExpiringStore.take`](store.md#symbol-ExpiringStore.take).
|
|
164
|
+
|
|
165
|
+
#### `ExpiringStore.get` · [source](store.md#code) {#symbol-ExpiringStore.get}
|
|
166
|
+
|
|
167
|
+
Read a live value without consuming it. It takes `key` as a string and `now` as an integer. It returns `optional T`. It can call [`ExpiringStore.get`](store.md#symbol-ExpiringStore.get).
|
|
168
|
+
|
|
169
|
+
### `MemoryStore` · class · [source](store.md#code) {#symbol-MemoryStore}
|
|
170
|
+
|
|
171
|
+
A synchronized table with short critical sections and no I/O while locked. It implements [`ExpiringStore<T>`](store.md#symbol-ExpiringStore). The type parameters are `T` which must satisfy `Data`. The read-only, private field `_entries` has type `Shared<Map<string,_Entry<T>>>` and starts as a `Shared` with `value` from an empty map from `string` to [`_Entry<T>`](store.md#symbol-_Entry).
|
|
172
|
+
|
|
173
|
+
#### `MemoryStore.put` · [source](store.md#code) {#symbol-MemoryStore.put}
|
|
174
|
+
|
|
175
|
+
Remove expired entries, then store at most 512 live entries. Time is supplied by the caller. It takes `key` as a string, `value` as `T`, and `expires` and `now` as integers. Failures can raise [`StoreFull`](store.md#symbol-StoreFull).
|
|
176
|
+
|
|
177
|
+
It sets `entry` to a [`_Entry`](store.md#symbol-_Entry) for `T` with `value` and `expires`. While holding the lock on `_entries` as mutable `entries`, for each `name` and `saved` in a snapshot of `entries`, if `saved.expires` is at most `now`, it removes the key `name` from `entries`. After the loop, it checks that the number of elements in `entries` is less than `512` or whether `entries` contains the key `key` returns true. It raises a [`StoreFull`](store.md#symbol-StoreFull) at the first failed check.
|
|
178
|
+
|
|
179
|
+
It stores `entry` in `entries` under `key`. Release this lock when the block exits, including on return or failure.
|
|
180
|
+
|
|
181
|
+
#### `MemoryStore.take` · [source](store.md#code) {#symbol-MemoryStore.take}
|
|
182
|
+
|
|
183
|
+
Atomically remove a value. Expired or absent entries return null. It takes `key` as a string and `now` as an integer.
|
|
184
|
+
|
|
185
|
+
While holding the lock on `_entries` as mutable `entries`, it obtains `entries.take` with `key`. If no value is found, it returns null. The non-null result becomes `saved`. It returns null if `saved.expires` is at most `now`, or `saved.value` otherwise.
|
|
186
|
+
|
|
187
|
+
Release this lock when the block exits, including on return or failure.
|
|
188
|
+
|
|
189
|
+
#### `MemoryStore.get` · [source](store.md#code) {#symbol-MemoryStore.get}
|
|
190
|
+
|
|
191
|
+
Read a live value without consuming it. It takes `key` as a string and `now` as an integer.
|
|
192
|
+
|
|
193
|
+
While holding the lock on `_entries` as mutable `entries`, it obtains the value under `key` in `entries`. If no value is found, it returns null. The non-null result becomes `saved`. It returns null if `saved.expires` is at most `now`, or `saved.value` otherwise.
|
|
194
|
+
|
|
195
|
+
Release this lock when the block exits, including on return or failure.
|
|
196
|
+
|
|
197
|
+
### `_Entry` · immutable record · [source](store.md#code) {#symbol-_Entry}
|
|
198
|
+
|
|
199
|
+
It is private to this file. The type parameters are `T` which must satisfy `Data`. It takes `value` as `T`, kept read-only and `expires` as an integer, kept read-only.
|
|
200
|
+
|
|
201
|
+
Built-in operations follow the [language reference](https://greenpandastudios.github.io/augscript/language-constructs).
|
|
202
|
+
|
|
203
|
+
::::
|
|
204
|
+
|
|
205
|
+
:::::
|