@greenpandastudios/aug-cli 0.19.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/LICENSE +21 -0
- package/README.md +13 -0
- package/THIRD_PARTY_NOTICES.md +18 -0
- package/bin/aug.mjs +3 -0
- package/docs/api/crypto.md +351 -0
- package/docs/api/io.md +207 -0
- package/docs/api/json.md +21 -0
- package/docs/api/memory.md +109 -0
- package/docs/api/time.md +54 -0
- package/docs/api/web.md +184 -0
- package/docs/assets/benchmarks/execution.svg +2978 -0
- package/docs/assets/benchmarks/http.svg +1674 -0
- package/docs/assets/benchmarks/improvements.svg +2315 -0
- package/docs/assets/benchmarks/memory.svg +1891 -0
- package/docs/benchmark-baseline.json +1087 -0
- package/docs/benchmark-results.json +91123 -0
- package/docs/benchmarks.json +38 -0
- package/docs/compatibility.md +42 -0
- package/docs/concurrency-implementation.md +18 -0
- package/docs/diagnostics.md +97 -0
- package/docs/docker.md +35 -0
- package/docs/example-projects.json +26 -0
- package/docs/examples/approved-design/counters.md +253 -0
- package/docs/examples/approved-design/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/approved-design/domain/app.md +165 -0
- package/docs/examples/approved-design/domain/export.md +83 -0
- package/docs/examples/approved-design/domain/models.md +80 -0
- package/docs/examples/approved-design/domain/numbers.md +248 -0
- package/docs/examples/approved-design/index.md +39 -0
- package/docs/examples/approved-design/main-yaml.md +24 -0
- package/docs/examples/approved-design/main.md +215 -0
- package/docs/examples/benchmark/index.md +33 -0
- package/docs/examples/benchmark/main-yaml.md +17 -0
- package/docs/examples/benchmark/main.md +117 -0
- package/docs/examples/cli-args/index.md +32 -0
- package/docs/examples/cli-args/main.md +107 -0
- package/docs/examples/collections/index.md +32 -0
- package/docs/examples/collections/main.md +118 -0
- package/docs/examples/collections-benchmark/index.md +34 -0
- package/docs/examples/collections-benchmark/main.md +115 -0
- package/docs/examples/cpu-benchmark/index.md +34 -0
- package/docs/examples/cpu-benchmark/main.md +90 -0
- package/docs/examples/developer-workflow/calculator.md +357 -0
- package/docs/examples/developer-workflow/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/developer-workflow/index.md +37 -0
- package/docs/examples/developer-workflow/logging/console.md +124 -0
- package/docs/examples/developer-workflow/logging/export.md +70 -0
- package/docs/examples/developer-workflow/logging/logger.md +111 -0
- package/docs/examples/developer-workflow/main.md +172 -0
- package/docs/examples/drop/index.md +33 -0
- package/docs/examples/drop/main.md +85 -0
- package/docs/examples/drop/resource.md +95 -0
- package/docs/examples/errors/errors.md +85 -0
- package/docs/examples/errors/index.md +33 -0
- package/docs/examples/errors/main.md +92 -0
- package/docs/examples/ffi/index.md +33 -0
- package/docs/examples/ffi/main.md +75 -0
- package/docs/examples/ffi/native.md +93 -0
- package/docs/examples/generic-di/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/generic-di/index.md +33 -0
- package/docs/examples/generic-di/main.md +111 -0
- package/docs/examples/generic-di/types.md +180 -0
- package/docs/examples/generics/index.md +33 -0
- package/docs/examples/generics/main.md +120 -0
- package/docs/examples/generics/types.md +189 -0
- package/docs/examples/hello/app/export.md +67 -0
- package/docs/examples/hello/app/greeter.md +190 -0
- package/docs/examples/hello/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/hello/index.md +37 -0
- package/docs/examples/hello/logging/console.md +121 -0
- package/docs/examples/hello/logging/export.md +71 -0
- package/docs/examples/hello/logging/logger.md +120 -0
- package/docs/examples/hello/main.md +115 -0
- package/docs/examples/http-benchmark/index.md +35 -0
- package/docs/examples/http-benchmark/main.md +79 -0
- package/docs/examples/http-benchmark/routes.md +88 -0
- package/docs/examples/index.md +60 -0
- package/docs/examples/interceptors/app.md +250 -0
- package/docs/examples/interceptors/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/interceptors/index.md +35 -0
- package/docs/examples/interceptors/interceptors.md +284 -0
- package/docs/examples/interceptors/logging.md +155 -0
- package/docs/examples/interceptors/main.md +162 -0
- package/docs/examples/json-benchmark/data.md +71 -0
- package/docs/examples/json-benchmark/dependencies/august/0.19.0/json/contracts.md +103 -0
- package/docs/examples/json-benchmark/index.md +35 -0
- package/docs/examples/json-benchmark/main.md +131 -0
- package/docs/examples/new-syntax/console.md +118 -0
- package/docs/examples/new-syntax/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/new-syntax/greeter.md +145 -0
- package/docs/examples/new-syntax/index.md +36 -0
- package/docs/examples/new-syntax/logger.md +111 -0
- package/docs/examples/new-syntax/main.md +135 -0
- package/docs/examples/new-syntax/math.md +79 -0
- package/docs/examples/oidc-login/client/contracts.md +151 -0
- package/docs/examples/oidc-login/client/endpoints.md +263 -0
- package/docs/examples/oidc-login/client/export.md +107 -0
- package/docs/examples/oidc-login/client/login.md +515 -0
- package/docs/examples/oidc-login/client/logout.md +249 -0
- package/docs/examples/oidc-login/client/protocol.md +595 -0
- package/docs/examples/oidc-login/client/session.md +297 -0
- package/docs/examples/oidc-login/client/views.md +144 -0
- package/docs/examples/oidc-login/common/export.md +115 -0
- package/docs/examples/oidc-login/common/headers.md +162 -0
- package/docs/examples/oidc-login/common/keys.md +336 -0
- package/docs/examples/oidc-login/common/settings.md +116 -0
- package/docs/examples/oidc-login/common/views.md +103 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/contracts.md +925 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/jose.md +434 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/json/contracts.md +103 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/memory/store.md +374 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/time/contracts.md +150 -0
- package/docs/examples/oidc-login/dependencies/august/0.19.0/web/contracts.md +532 -0
- package/docs/examples/oidc-login/index.md +57 -0
- package/docs/examples/oidc-login/main-yaml.md +28 -0
- package/docs/examples/oidc-login/main.md +283 -0
- package/docs/examples/oidc-login/provider/authorization.md +457 -0
- package/docs/examples/oidc-login/provider/contracts.md +267 -0
- package/docs/examples/oidc-login/provider/credentials.md +148 -0
- package/docs/examples/oidc-login/provider/discovery.md +215 -0
- package/docs/examples/oidc-login/provider/export.md +131 -0
- package/docs/examples/oidc-login/provider/token.md +364 -0
- package/docs/examples/oidc-login/provider/userinfo.md +228 -0
- package/docs/examples/oidc-login/provider/views.md +137 -0
- package/docs/examples/ownership/counter.md +140 -0
- package/docs/examples/ownership/index.md +33 -0
- package/docs/examples/ownership/main.md +90 -0
- package/docs/examples/ownership-transfer/dependencies/august/0.19.0/io/contracts.md +395 -0
- package/docs/examples/ownership-transfer/index.md +33 -0
- package/docs/examples/ownership-transfer/main.md +125 -0
- package/docs/examples/ownership-transfer/resource.md +150 -0
- package/docs/examples/packages-app/dependencies/packages/@example/aug-math/0.1.0/arithmetic.md +117 -0
- package/docs/examples/packages-app/index.md +34 -0
- package/docs/examples/packages-app/main-yaml.md +18 -0
- package/docs/examples/packages-app/main.md +80 -0
- package/docs/examples/packages-math/aug-package-json.md +24 -0
- package/docs/examples/packages-math/index.md +36 -0
- package/docs/examples/packages-math/package-json.md +25 -0
- package/docs/examples/packages-math/src/arithmetic.md +121 -0
- package/docs/examples/packages-math/src/export.md +63 -0
- package/docs/examples/startup-benchmark/index.md +34 -0
- package/docs/examples/startup-benchmark/main.md +68 -0
- package/docs/examples/visibility/counter.md +142 -0
- package/docs/examples/visibility/index.md +33 -0
- package/docs/examples/visibility/main.md +96 -0
- package/docs/examples.json +47 -0
- package/docs/getting-started.md +5 -0
- package/docs/grammar.md +136 -0
- package/docs/implementation-map.md +106 -0
- package/docs/index.md +46 -0
- package/docs/language-conformance.md +30 -0
- package/docs/language-constructs.md +1461 -0
- package/docs/language-design-audit.md +147 -0
- package/docs/maintaining-docs.md +43 -0
- package/docs/packages.md +184 -0
- package/docs/performance.md +535 -0
- package/docs/production-readiness.md +39 -0
- package/docs/reference.md +361 -0
- package/docs/release-review.md +23 -0
- package/docs/releasing.md +79 -0
- package/docs/roadmap.md +13 -0
- package/docs/specifications.md +86 -0
- package/docs/testing.md +120 -0
- package/docs/tooling.md +197 -0
- package/docs/web-implementation-plan.md +39 -0
- package/docs/web-library-gaps.md +27 -0
- package/docs/web.md +197 -0
- package/examples/approved-design/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/approved-design/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/approved-design/.aug-spec/manifest.json +14 -0
- package/examples/approved-design/counters.aug +22 -0
- package/examples/approved-design/counters.aug.md +177 -0
- package/examples/approved-design/domain/app.aug +12 -0
- package/examples/approved-design/domain/app.aug.md +97 -0
- package/examples/approved-design/domain/export.aug +5 -0
- package/examples/approved-design/domain/export.aug.md +25 -0
- package/examples/approved-design/domain/models.aug +2 -0
- package/examples/approved-design/domain/models.aug.md +30 -0
- package/examples/approved-design/domain/numbers.aug +29 -0
- package/examples/approved-design/domain/numbers.aug.md +141 -0
- package/examples/approved-design/main.aug +26 -0
- package/examples/approved-design/main.aug.md +108 -0
- package/examples/approved-design/main.yaml +8 -0
- package/examples/benchmark/.aug-spec/manifest.json +7 -0
- package/examples/benchmark/main.aug +17 -0
- package/examples/benchmark/main.aug.md +43 -0
- package/examples/benchmark/main.yaml +1 -0
- package/examples/cli-args/.aug-spec/manifest.json +7 -0
- package/examples/cli-args/main.aug +15 -0
- package/examples/cli-args/main.aug.md +38 -0
- package/examples/collections/.aug-spec/manifest.json +7 -0
- package/examples/collections/main.aug +18 -0
- package/examples/collections/main.aug.md +43 -0
- package/examples/developer-workflow/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/developer-workflow/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/developer-workflow/.aug-spec/manifest.json +13 -0
- package/examples/developer-workflow/calculator.aug +55 -0
- package/examples/developer-workflow/calculator.aug.md +228 -0
- package/examples/developer-workflow/logging/console.aug +8 -0
- package/examples/developer-workflow/logging/console.aug.md +67 -0
- package/examples/developer-workflow/logging/export.aug +2 -0
- package/examples/developer-workflow/logging/export.aug.md +19 -0
- package/examples/developer-workflow/logging/logger.aug +6 -0
- package/examples/developer-workflow/logging/logger.aug.md +57 -0
- package/examples/developer-workflow/main.aug +25 -0
- package/examples/developer-workflow/main.aug.md +79 -0
- package/examples/drop/.aug-spec/manifest.json +8 -0
- package/examples/drop/main.aug +3 -0
- package/examples/drop/main.aug.md +35 -0
- package/examples/drop/resource.aug +8 -0
- package/examples/drop/resource.aug.md +44 -0
- package/examples/errors/.aug-spec/manifest.json +8 -0
- package/examples/errors/errors.aug +6 -0
- package/examples/errors/errors.aug.md +33 -0
- package/examples/errors/main.aug +7 -0
- package/examples/errors/main.aug.md +36 -0
- package/examples/ffi/.aug-spec/manifest.json +8 -0
- package/examples/ffi/main.aug +2 -0
- package/examples/ffi/main.aug.md +27 -0
- package/examples/ffi/native.aug +6 -0
- package/examples/ffi/native.aug.md +43 -0
- package/examples/generic-di/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/generic-di/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/generic-di/.aug-spec/manifest.json +10 -0
- package/examples/generic-di/main.aug +9 -0
- package/examples/generic-di/main.aug.md +49 -0
- package/examples/generic-di/types.aug +17 -0
- package/examples/generic-di/types.aug.md +124 -0
- package/examples/generics/.aug-spec/manifest.json +8 -0
- package/examples/generics/main.aug +9 -0
- package/examples/generics/main.aug.md +58 -0
- package/examples/generics/types.aug +19 -0
- package/examples/generics/types.aug.md +132 -0
- package/examples/hello/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/hello/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/hello/.aug-spec/manifest.json +14 -0
- package/examples/hello/app/export.aug +1 -0
- package/examples/hello/app/export.aug.md +17 -0
- package/examples/hello/app/greeter.aug +22 -0
- package/examples/hello/app/greeter.aug.md +109 -0
- package/examples/hello/logging/console.aug +7 -0
- package/examples/hello/logging/console.aug.md +65 -0
- package/examples/hello/logging/export.aug +2 -0
- package/examples/hello/logging/export.aug.md +19 -0
- package/examples/hello/logging/logger.aug +9 -0
- package/examples/hello/logging/logger.aug.md +59 -0
- package/examples/hello/main.aug +9 -0
- package/examples/hello/main.aug.md +49 -0
- package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/interceptors/.aug-spec/manifest.json +12 -0
- package/examples/interceptors/app.aug +28 -0
- package/examples/interceptors/app.aug.md +162 -0
- package/examples/interceptors/interceptors.aug +40 -0
- package/examples/interceptors/interceptors.aug.md +180 -0
- package/examples/interceptors/logging.aug +12 -0
- package/examples/interceptors/logging.aug.md +96 -0
- package/examples/interceptors/main.aug +22 -0
- package/examples/interceptors/main.aug.md +76 -0
- package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/new-syntax/.aug-spec/manifest.json +13 -0
- package/examples/new-syntax/console.aug +7 -0
- package/examples/new-syntax/console.aug.md +63 -0
- package/examples/new-syntax/greeter.aug +10 -0
- package/examples/new-syntax/greeter.aug.md +89 -0
- package/examples/new-syntax/logger.aug +6 -0
- package/examples/new-syntax/logger.aug.md +57 -0
- package/examples/new-syntax/main.aug +12 -0
- package/examples/new-syntax/main.aug.md +64 -0
- package/examples/new-syntax/math.aug +3 -0
- package/examples/new-syntax/math.aug.md +29 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/contracts.aug +73 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/contracts.aug.md +791 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug +68 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug.md +266 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug +6 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug.md +55 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/memory/store.aug +45 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/memory/store.aug.md +250 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/time/contracts.aug +11 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/time/contracts.aug.md +96 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/web/contracts.aug +58 -0
- package/examples/oidc-login/.aug-spec/august/0.19.0/web/contracts.aug.md +420 -0
- package/examples/oidc-login/.aug-spec/manifest.json +40 -0
- package/examples/oidc-login/README.md +29 -0
- package/examples/oidc-login/client/contracts.aug +7 -0
- package/examples/oidc-login/client/contracts.aug.md +80 -0
- package/examples/oidc-login/client/endpoints.aug +21 -0
- package/examples/oidc-login/client/endpoints.aug.md +161 -0
- package/examples/oidc-login/client/export.aug +7 -0
- package/examples/oidc-login/client/export.aug.md +29 -0
- package/examples/oidc-login/client/login.aug +58 -0
- package/examples/oidc-login/client/login.aug.md +331 -0
- package/examples/oidc-login/client/logout.aug +18 -0
- package/examples/oidc-login/client/logout.aug.md +150 -0
- package/examples/oidc-login/client/protocol.aug +106 -0
- package/examples/oidc-login/client/protocol.aug.md +326 -0
- package/examples/oidc-login/client/session.aug +34 -0
- package/examples/oidc-login/client/session.aug.md +155 -0
- package/examples/oidc-login/client/views.aug +21 -0
- package/examples/oidc-login/client/views.aug.md +68 -0
- package/examples/oidc-login/common/export.aug +9 -0
- package/examples/oidc-login/common/export.aug.md +33 -0
- package/examples/oidc-login/common/headers.aug +11 -0
- package/examples/oidc-login/common/headers.aug.md +79 -0
- package/examples/oidc-login/common/keys.aug +37 -0
- package/examples/oidc-login/common/keys.aug.md +207 -0
- package/examples/oidc-login/common/settings.aug +4 -0
- package/examples/oidc-login/common/settings.aug.md +47 -0
- package/examples/oidc-login/common/views.aug +16 -0
- package/examples/oidc-login/common/views.aug.md +34 -0
- package/examples/oidc-login/main.aug +39 -0
- package/examples/oidc-login/main.aug.md +166 -0
- package/examples/oidc-login/main.yaml +12 -0
- package/examples/oidc-login/provider/authorization.aug +59 -0
- package/examples/oidc-login/provider/authorization.aug.md +264 -0
- package/examples/oidc-login/provider/contracts.aug +15 -0
- package/examples/oidc-login/provider/contracts.aug.md +193 -0
- package/examples/oidc-login/provider/credentials.aug +10 -0
- package/examples/oidc-login/provider/credentials.aug.md +64 -0
- package/examples/oidc-login/provider/discovery.aug +13 -0
- package/examples/oidc-login/provider/discovery.aug.md +133 -0
- package/examples/oidc-login/provider/export.aug +13 -0
- package/examples/oidc-login/provider/export.aug.md +41 -0
- package/examples/oidc-login/provider/token.aug +37 -0
- package/examples/oidc-login/provider/token.aug.md +223 -0
- package/examples/oidc-login/provider/userinfo.aug +26 -0
- package/examples/oidc-login/provider/userinfo.aug.md +104 -0
- package/examples/oidc-login/provider/views.aug +18 -0
- package/examples/oidc-login/provider/views.aug.md +63 -0
- package/examples/ownership/.aug-spec/manifest.json +8 -0
- package/examples/ownership/counter.aug +14 -0
- package/examples/ownership/counter.aug.md +85 -0
- package/examples/ownership/main.aug +4 -0
- package/examples/ownership/main.aug.md +38 -0
- package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug +36 -0
- package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug.md +316 -0
- package/examples/ownership-transfer/.aug-spec/manifest.json +10 -0
- package/examples/ownership-transfer/main.aug +9 -0
- package/examples/ownership-transfer/main.aug.md +63 -0
- package/examples/ownership-transfer/resource.aug +16 -0
- package/examples/ownership-transfer/resource.aug.md +89 -0
- package/examples/packages/README.md +15 -0
- package/examples/packages/app/.aug-spec/manifest.json +9 -0
- package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug +9 -0
- package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug.md +63 -0
- package/examples/packages/app/main.aug +2 -0
- package/examples/packages/app/main.aug.md +33 -0
- package/examples/packages/app/main.yaml +2 -0
- package/examples/packages/math/.aug-spec/manifest.json +8 -0
- package/examples/packages/math/README.md +3 -0
- package/examples/packages/math/aug-package.json +8 -0
- package/examples/packages/math/package.json +9 -0
- package/examples/packages/math/src/arithmetic.aug +8 -0
- package/examples/packages/math/src/arithmetic.aug.md +63 -0
- package/examples/packages/math/src/export.aug +1 -0
- package/examples/packages/math/src/export.aug.md +17 -0
- package/examples/visibility/.aug-spec/manifest.json +8 -0
- package/examples/visibility/counter.aug +14 -0
- package/examples/visibility/counter.aug.md +87 -0
- package/examples/visibility/main.aug +7 -0
- package/examples/visibility/main.aug.md +39 -0
- package/package.json +50 -0
- package/runtime/aug_crypto.c +121 -0
- package/runtime/aug_html.c +93 -0
- package/runtime/aug_http.c +829 -0
- package/runtime/aug_json.c +165 -0
- package/runtime/aug_runtime.c +792 -0
- package/runtime/aug_runtime.h +245 -0
- package/runtime/aug_tasks.c +172 -0
- package/runtime/aug_time.c +5 -0
- package/runtime/aug_values.c +80 -0
- package/scripts/bootstrap-native.mjs +121 -0
- package/scripts/native-dependencies.lock.json +65 -0
- package/scripts/native-home.mjs +11 -0
- package/src/actions.js +109 -0
- package/src/ast.js +19 -0
- package/src/builtins.js +93 -0
- package/src/checker.js +2896 -0
- package/src/cli.js +344 -0
- package/src/codegen.js +1159 -0
- package/src/config.js +149 -0
- package/src/continuation.js +110 -0
- package/src/di.js +24 -0
- package/src/documentation.js +27 -0
- package/src/editor.js +782 -0
- package/src/effects.js +29 -0
- package/src/fixes.js +222 -0
- package/src/formatter.js +296 -0
- package/src/freshness.js +154 -0
- package/src/help.js +212 -0
- package/src/html.js +27 -0
- package/src/http-policies.js +90 -0
- package/src/inference.js +16 -0
- package/src/interceptors.js +70 -0
- package/src/javadoc.js +67 -0
- package/src/lexer.js +199 -0
- package/src/libraries.js +31 -0
- package/src/lsp.js +180 -0
- package/src/native.js +144 -0
- package/src/navigation.js +162 -0
- package/src/openapi.js +220 -0
- package/src/ownership.js +232 -0
- package/src/package-manager.js +299 -0
- package/src/parser.js +1155 -0
- package/src/policies.js +130 -0
- package/src/project-init.js +19 -0
- package/src/project.js +292 -0
- package/src/schemas.js +62 -0
- package/src/semantic.js +255 -0
- package/src/spec.js +738 -0
- package/src/testing.js +186 -0
- package/src/types.js +10 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "provider/userinfo.aug · OpenID Connect login application"
|
|
3
|
+
generated: true
|
|
4
|
+
source: "examples/oidc-login/provider/userinfo.aug"
|
|
5
|
+
editLink: false
|
|
6
|
+
prev: false
|
|
7
|
+
next: false
|
|
8
|
+
outline: [2, 3]
|
|
9
|
+
pageClass: aug-example-page
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# `provider/userinfo.aug`
|
|
13
|
+
|
|
14
|
+
[OpenID Connect login application](../index.md) · Source and specification
|
|
15
|
+
|
|
16
|
+
::: details Files in this project
|
|
17
|
+
|
|
18
|
+
- [`main.aug`](../main.md)
|
|
19
|
+
- [`client/contracts.aug`](../client/contracts.md)
|
|
20
|
+
- [`client/endpoints.aug`](../client/endpoints.md)
|
|
21
|
+
- [`client/export.aug`](../client/export.md)
|
|
22
|
+
- [`client/login.aug`](../client/login.md)
|
|
23
|
+
- [`client/logout.aug`](../client/logout.md)
|
|
24
|
+
- [`client/protocol.aug`](../client/protocol.md)
|
|
25
|
+
- [`client/session.aug`](../client/session.md)
|
|
26
|
+
- [`client/views.aug`](../client/views.md)
|
|
27
|
+
- [`common/export.aug`](../common/export.md)
|
|
28
|
+
- [`common/headers.aug`](../common/headers.md)
|
|
29
|
+
- [`common/keys.aug`](../common/keys.md)
|
|
30
|
+
- [`common/settings.aug`](../common/settings.md)
|
|
31
|
+
- [`common/views.aug`](../common/views.md)
|
|
32
|
+
- [`provider/authorization.aug`](authorization.md)
|
|
33
|
+
- [`provider/contracts.aug`](contracts.md)
|
|
34
|
+
- [`provider/credentials.aug`](credentials.md)
|
|
35
|
+
- [`provider/discovery.aug`](discovery.md)
|
|
36
|
+
- [`provider/export.aug`](export.md)
|
|
37
|
+
- [`provider/token.aug`](token.md)
|
|
38
|
+
- [`provider/userinfo.aug`](userinfo.md)
|
|
39
|
+
- [`provider/views.aug`](views.md)
|
|
40
|
+
|
|
41
|
+
:::
|
|
42
|
+
|
|
43
|
+
::::: example-compare
|
|
44
|
+
|
|
45
|
+
:::: example-code
|
|
46
|
+
|
|
47
|
+
## Code {#code}
|
|
48
|
+
|
|
49
|
+
::: code-group
|
|
50
|
+
|
|
51
|
+
```aug [Indentation]
|
|
52
|
+
import UserInfo and AccessGrant from contracts
|
|
53
|
+
import securityHeaders from common
|
|
54
|
+
import Clock from august.time
|
|
55
|
+
import ExpiringStore from august.memory
|
|
56
|
+
/** The opaque access token is valid only at this provider. Missing, expired and malformed credentials receive the same response. */
|
|
57
|
+
endpoint GET "/provider/userinfo" as userinfo(optional string authorization from header, resolve Clock clock, resolve ExpiringStore<AccessGrant> access) returns HttpResponse<Json> uses clock.now and access.get unless TimeError and HttpError:
|
|
58
|
+
match authorization:
|
|
59
|
+
when null:
|
|
60
|
+
pass
|
|
61
|
+
when some header:
|
|
62
|
+
parts = header.split(separator=" ")
|
|
63
|
+
if parts.length() == 2:
|
|
64
|
+
try:
|
|
65
|
+
if parts.get(index=0) == "Bearer":
|
|
66
|
+
token = parts.get(index=1)
|
|
67
|
+
if token.isToken(min=43, max=43):
|
|
68
|
+
match access.get(key=token, now=clock.now()):
|
|
69
|
+
when null:
|
|
70
|
+
pass
|
|
71
|
+
when some grant:
|
|
72
|
+
return HttpResponse(body=Json(value=UserInfo(sub=grant.subject, name=grant.name)), headers=securityHeaders())
|
|
73
|
+
catch IndexError error:
|
|
74
|
+
pass
|
|
75
|
+
headers = securityHeaders().with(name="www-authenticate", value="Bearer error=\"invalid_token\"")
|
|
76
|
+
return HttpResponse(body=Json(value={"error": "invalid_token"}), status=401, headers=headers)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
```aug [Braces]
|
|
80
|
+
import UserInfo and AccessGrant from contracts
|
|
81
|
+
import securityHeaders from common
|
|
82
|
+
import Clock from august.time
|
|
83
|
+
import ExpiringStore from august.memory
|
|
84
|
+
/** The opaque access token is valid only at this provider. Missing, expired and malformed credentials receive the same response. */
|
|
85
|
+
endpoint GET "/provider/userinfo" as userinfo(optional string authorization from header, resolve Clock clock, resolve ExpiringStore<AccessGrant> access) returns HttpResponse<Json> uses clock.now and access.get unless TimeError and HttpError {
|
|
86
|
+
match authorization {
|
|
87
|
+
when null {
|
|
88
|
+
pass
|
|
89
|
+
}
|
|
90
|
+
when some header {
|
|
91
|
+
parts = header.split(separator=" ")
|
|
92
|
+
if parts.length() == 2 {
|
|
93
|
+
try {
|
|
94
|
+
if parts.get(index=0) == "Bearer" {
|
|
95
|
+
token = parts.get(index=1)
|
|
96
|
+
if token.isToken(min=43, max=43) {
|
|
97
|
+
match access.get(key=token, now=clock.now()) {
|
|
98
|
+
when null {
|
|
99
|
+
pass
|
|
100
|
+
}
|
|
101
|
+
when some grant {
|
|
102
|
+
return HttpResponse(body=Json(value=UserInfo(sub=grant.subject, name=grant.name)), headers=securityHeaders())
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch IndexError error {
|
|
109
|
+
pass
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
headers = securityHeaders().with(name="www-authenticate", value="Bearer error=\"invalid_token\"")
|
|
115
|
+
return HttpResponse(body=Json(value={"error": "invalid_token"}), status=401, headers=headers)
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
:::
|
|
120
|
+
|
|
121
|
+
::::
|
|
122
|
+
|
|
123
|
+
:::: example-spec
|
|
124
|
+
|
|
125
|
+
## Compiled specification {#specification}
|
|
126
|
+
|
|
127
|
+
August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
|
|
128
|
+
|
|
129
|
+
### In this file
|
|
130
|
+
|
|
131
|
+
- [`userinfo`](userinfo.md#symbol-userinfo) handles `GET` `/provider/userinfo` returning `HttpResponse<Json>`.
|
|
132
|
+
|
|
133
|
+
### `userinfo` {#symbol-userinfo}
|
|
134
|
+
|
|
135
|
+
[source](userinfo.md#code)
|
|
136
|
+
|
|
137
|
+
**Inputs**
|
|
138
|
+
|
|
139
|
+
- `authorization` (`optional string`) — read from the HTTP header; absent value becomes null.
|
|
140
|
+
- `clock` ([`Clock`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock)) — injected; callers omit it.
|
|
141
|
+
- `access` ([`ExpiringStore<AccessGrant>`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore)) — injected; callers omit it.
|
|
142
|
+
|
|
143
|
+
Returns: `HttpResponse<Json>`.
|
|
144
|
+
|
|
145
|
+
Capabilities: [`clock.now`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock.now), [`access.get`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.get).
|
|
146
|
+
|
|
147
|
+
Can fail with `TimeError`, `HttpError`. Callers must catch or propagate these errors.
|
|
148
|
+
|
|
149
|
+
HTTP route: `GET` `/provider/userinfo`. Use status 200 when the handler returns a body; a returned HttpResponse can set its own status. An unhandled request failure returns status 500 and cancels its request tasks.
|
|
150
|
+
|
|
151
|
+
**What it does**
|
|
152
|
+
|
|
153
|
+
- Select the matching case for `authorization`:
|
|
154
|
+
- A null value, including omitted optional input:
|
|
155
|
+
- Continue without another operation.
|
|
156
|
+
- A present, non-null value, named `header`:
|
|
157
|
+
- Set `parts` to call `split` on `header` with `separator` = `" "`.
|
|
158
|
+
- If call `length` on `parts` equals `2`:
|
|
159
|
+
- Try these operations:
|
|
160
|
+
- If call `get` on `parts` with `index` = `0` equals `"Bearer"`:
|
|
161
|
+
- Set `token` to call `get` on `parts` with `index` = `1`.
|
|
162
|
+
- If call `isToken` on `token` with `min` = `43`; `max` = `43` is true:
|
|
163
|
+
- Select the matching case for call [`ExpiringStore.get`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.get) on `access` with `key` = `token`; `now` = call [`Clock.now`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock.now) on `clock`:
|
|
164
|
+
- A null value, including omitted optional input:
|
|
165
|
+
- Continue without another operation.
|
|
166
|
+
- A present, non-null value, named `grant`:
|
|
167
|
+
- Return call `HttpResponse` with `body` = call `Json` with `value` = call [`UserInfo`](contracts.md#symbol-UserInfo) with `sub` = `subject` of `grant`; `name` = `name` of `grant`; `headers` = call [`securityHeaders`](../common/headers.md#symbol-securityHeaders).
|
|
168
|
+
- If they fail with `IndexError`, name the failure `error` and recover:
|
|
169
|
+
- Continue without another operation.
|
|
170
|
+
- Set `headers` to call `with` on call [`securityHeaders`](../common/headers.md#symbol-securityHeaders) with `name` = `"www-authenticate"`; `value` = `"Bearer error=\"invalid_token\""`.
|
|
171
|
+
- Return call `HttpResponse` with `body` = call `Json` with `value` = a map with `"error"` mapped to `"invalid_token"`; `status` = `401`; `headers` = `headers`.
|
|
172
|
+
|
|
173
|
+
**Author documentation**
|
|
174
|
+
|
|
175
|
+
The opaque access token is valid only at this provider. Missing, expired and malformed credentials receive the same response.
|
|
176
|
+
|
|
177
|
+
### Dependencies used by this file
|
|
178
|
+
|
|
179
|
+
Only referenced types and operations appear here. Each name links to its complete specification.
|
|
180
|
+
|
|
181
|
+
#### [`ExpiringStore`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore)
|
|
182
|
+
|
|
183
|
+
Capability interface from `august.memory`.
|
|
184
|
+
|
|
185
|
+
- [`ExpiringStore.get`](../dependencies/august/0.19.0/memory/store.md#symbol-ExpiringStore.get) (`key`: `string`, `now`: `int`) → `optional T`.
|
|
186
|
+
|
|
187
|
+
#### [`Clock`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock)
|
|
188
|
+
|
|
189
|
+
Capability interface from `august.time`.
|
|
190
|
+
|
|
191
|
+
- [`Clock.now`](../dependencies/august/0.19.0/time/contracts.md#symbol-Clock.now) (no caller inputs) → `int`; can fail with `TimeError`.
|
|
192
|
+
|
|
193
|
+
#### [`securityHeaders`](../common/headers.md#symbol-securityHeaders)
|
|
194
|
+
|
|
195
|
+
Function from `common`.
|
|
196
|
+
|
|
197
|
+
- [`securityHeaders`](../common/headers.md#symbol-securityHeaders) (no caller inputs) → `Headers`; can fail with `HttpError`.
|
|
198
|
+
|
|
199
|
+
#### [`AccessGrant`](contracts.md#symbol-AccessGrant)
|
|
200
|
+
|
|
201
|
+
Record from `contracts`.
|
|
202
|
+
|
|
203
|
+
- Read `name` (`string`).
|
|
204
|
+
- Read `subject` (`string`).
|
|
205
|
+
|
|
206
|
+
#### [`UserInfo`](contracts.md#symbol-UserInfo)
|
|
207
|
+
|
|
208
|
+
Record from `contracts`.
|
|
209
|
+
|
|
210
|
+
- Construct with `sub`: `string`, `name`: `string` → [`UserInfo`](contracts.md#symbol-UserInfo).
|
|
211
|
+
|
|
212
|
+
### Built-in operations used by this file
|
|
213
|
+
|
|
214
|
+
- `Headers.with` (`name`: `string`, `value`: `string`) → `Headers`: Return new headers with one additional validated field. Header names ignore case; duplicate values remain separate. Can fail with `HttpError`.
|
|
215
|
+
- `List<string>.get` (`index`: `int`) → `string`: Read a zero-based position. An invalid index raises checked IndexError. Reference results grant reading. Can fail with `IndexError`.
|
|
216
|
+
- `List<string>.length` (no inputs) → `int`: Read the number of elements.
|
|
217
|
+
- `string.isToken` (`min`: `int`, `max`: `int`) → `bool`: Require an ASCII RFC 3986 unreserved token with a bounded length.
|
|
218
|
+
- `string.split` (`separator`: `string`) → `List<string>`: Split at an exact separator, preserving empty parts.
|
|
219
|
+
|
|
220
|
+
[Full built-in reference](https://greenpandastudios.github.io/augscript/language-constructs).
|
|
221
|
+
|
|
222
|
+
### Shared language rules
|
|
223
|
+
|
|
224
|
+
See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
|
|
225
|
+
|
|
226
|
+
::::
|
|
227
|
+
|
|
228
|
+
:::::
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "provider/views.aug · OpenID Connect login application"
|
|
3
|
+
generated: true
|
|
4
|
+
source: "examples/oidc-login/provider/views.aug"
|
|
5
|
+
editLink: false
|
|
6
|
+
prev: false
|
|
7
|
+
next: false
|
|
8
|
+
outline: [2, 3]
|
|
9
|
+
pageClass: aug-example-page
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# `provider/views.aug`
|
|
13
|
+
|
|
14
|
+
[OpenID Connect login application](../index.md) · Source and specification
|
|
15
|
+
|
|
16
|
+
::: details Files in this project
|
|
17
|
+
|
|
18
|
+
- [`main.aug`](../main.md)
|
|
19
|
+
- [`client/contracts.aug`](../client/contracts.md)
|
|
20
|
+
- [`client/endpoints.aug`](../client/endpoints.md)
|
|
21
|
+
- [`client/export.aug`](../client/export.md)
|
|
22
|
+
- [`client/login.aug`](../client/login.md)
|
|
23
|
+
- [`client/logout.aug`](../client/logout.md)
|
|
24
|
+
- [`client/protocol.aug`](../client/protocol.md)
|
|
25
|
+
- [`client/session.aug`](../client/session.md)
|
|
26
|
+
- [`client/views.aug`](../client/views.md)
|
|
27
|
+
- [`common/export.aug`](../common/export.md)
|
|
28
|
+
- [`common/headers.aug`](../common/headers.md)
|
|
29
|
+
- [`common/keys.aug`](../common/keys.md)
|
|
30
|
+
- [`common/settings.aug`](../common/settings.md)
|
|
31
|
+
- [`common/views.aug`](../common/views.md)
|
|
32
|
+
- [`provider/authorization.aug`](authorization.md)
|
|
33
|
+
- [`provider/contracts.aug`](contracts.md)
|
|
34
|
+
- [`provider/credentials.aug`](credentials.md)
|
|
35
|
+
- [`provider/discovery.aug`](discovery.md)
|
|
36
|
+
- [`provider/export.aug`](export.md)
|
|
37
|
+
- [`provider/token.aug`](token.md)
|
|
38
|
+
- [`provider/userinfo.aug`](userinfo.md)
|
|
39
|
+
- [`provider/views.aug`](views.md)
|
|
40
|
+
|
|
41
|
+
:::
|
|
42
|
+
|
|
43
|
+
::::: example-compare
|
|
44
|
+
|
|
45
|
+
:::: example-code
|
|
46
|
+
|
|
47
|
+
## Code {#code}
|
|
48
|
+
|
|
49
|
+
::: code-group
|
|
50
|
+
|
|
51
|
+
```aug [Indentation]
|
|
52
|
+
import Page from common
|
|
53
|
+
/** A server form with a checked HTTP action. The browser submits to the provider endpoint. */
|
|
54
|
+
ProviderLogin(string requestId, string csrf, string message, HttpAction submit) returns Html:
|
|
55
|
+
return <Page title={"Sign in with the August provider"}><p>{message}</p><p style={"background:#f3f5f9;padding:12px;border-radius:8px"}>Demo account: <strong>ada</strong> · password <strong>august-demo</strong></p><form method={"post"} action={"/provider/login"} onSubmit={submit}><input type={"hidden"} name={"request_id"} value={requestId} /><input type={"hidden"} name={"csrf"} value={csrf} /><p><label for={"username"}>Username</label><br /><input id={"username"} name={"username"} autocomplete={"username"} value={"ada"} maxlength={"64"} required={true} style={"padding:10px;width:90%"} /></p><p><label for={"password"}>Password</label><br /><input id={"password"} type={"password"} name={"password"} autocomplete={"current-password"} maxlength={"256"} required={true} style={"padding:10px;width:90%"} /></p><button type={"submit"} style={"padding:12px 20px;border:0;border-radius:9px;background:#4852d7;color:white;font:inherit"}>Sign in and return to the app</button></form><p style={"font-size:14px;color:#677189"}>The provider and app run in the same executable. Authorization codes still travel through the OpenID Connect protocol.</p></Page>
|
|
56
|
+
ProviderFailure(string message) returns Html:
|
|
57
|
+
return <Page title={"Sign-in could not continue"}><p>{message}</p><a href={"/login/start"}>Start a new sign-in</a></Page>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```aug [Braces]
|
|
61
|
+
import Page from common
|
|
62
|
+
/** A server form with a checked HTTP action. The browser submits to the provider endpoint. */
|
|
63
|
+
ProviderLogin(string requestId, string csrf, string message, HttpAction submit) returns Html {
|
|
64
|
+
return <Page title={"Sign in with the August provider"}><p>{message}</p><p style={"background:#f3f5f9;padding:12px;border-radius:8px"}>Demo account: <strong>ada</strong> · password <strong>august-demo</strong></p><form method={"post"} action={"/provider/login"} onSubmit={submit}><input type={"hidden"} name={"request_id"} value={requestId} /><input type={"hidden"} name={"csrf"} value={csrf} /><p><label for={"username"}>Username</label><br /><input id={"username"} name={"username"} autocomplete={"username"} value={"ada"} maxlength={"64"} required={true} style={"padding:10px;width:90%"} /></p><p><label for={"password"}>Password</label><br /><input id={"password"} type={"password"} name={"password"} autocomplete={"current-password"} maxlength={"256"} required={true} style={"padding:10px;width:90%"} /></p><button type={"submit"} style={"padding:12px 20px;border:0;border-radius:9px;background:#4852d7;color:white;font:inherit"}>Sign in and return to the app</button></form><p style={"font-size:14px;color:#677189"}>The provider and app run in the same executable. Authorization codes still travel through the OpenID Connect protocol.</p></Page>
|
|
65
|
+
}
|
|
66
|
+
ProviderFailure(string message) returns Html {
|
|
67
|
+
return <Page title={"Sign-in could not continue"}><p>{message}</p><a href={"/login/start"}>Start a new sign-in</a></Page>
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
:::
|
|
72
|
+
|
|
73
|
+
::::
|
|
74
|
+
|
|
75
|
+
:::: example-spec
|
|
76
|
+
|
|
77
|
+
## Compiled specification {#specification}
|
|
78
|
+
|
|
79
|
+
August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
|
|
80
|
+
|
|
81
|
+
### In this file
|
|
82
|
+
|
|
83
|
+
- [`ProviderLogin`](views.md#symbol-ProviderLogin) is a function returning `Html`.
|
|
84
|
+
- [`ProviderFailure`](views.md#symbol-ProviderFailure) is a function returning `Html`.
|
|
85
|
+
|
|
86
|
+
### `ProviderLogin` {#symbol-ProviderLogin}
|
|
87
|
+
|
|
88
|
+
[source](views.md#code)
|
|
89
|
+
|
|
90
|
+
**Inputs**
|
|
91
|
+
|
|
92
|
+
- `requestId` (`string`) — required labeled input.
|
|
93
|
+
- `csrf` (`string`) — required labeled input.
|
|
94
|
+
- `message` (`string`) — required labeled input.
|
|
95
|
+
- `submit` (`HttpAction`) — required labeled input.
|
|
96
|
+
|
|
97
|
+
Returns: `Html`.
|
|
98
|
+
|
|
99
|
+
**What it does**
|
|
100
|
+
|
|
101
|
+
- Return the server component [`Page`](../common/views.md#symbol-Page) with `title` = `"Sign in with the August provider"` containing the HTML element `p` containing `message` (rendered on the server with embedded text escaped), the HTML element `p` with `style` = `"background:#f3f5f9;padding:12px;border-radius:8px"` containing `Demo account: `, the HTML element `strong` containing `ada` (rendered on the server with embedded text escaped), ` · password `, the HTML element `strong` containing `august-demo` (rendered on the server with embedded text escaped) (rendered on the server with embedded text escaped), the HTML element `form` with `method` = `"post"`, `action` = `"/provider/login"`, `onSubmit` = `submit` containing the HTML element `input` with `type` = `"hidden"`, `name` = `"request_id"`, `value` = `requestId` (rendered on the server with embedded text escaped), the HTML element `input` with `type` = `"hidden"`, `name` = `"csrf"`, `value` = `csrf` (rendered on the server with embedded text escaped), the HTML element `p` containing the HTML element `label` with `for` = `"username"` containing `Username` (rendered on the server with embedded text escaped), the HTML element `br` (rendered on the server with embedded text escaped), the HTML element `input` with `id` = `"username"`, `name` = `"username"`, `autocomplete` = `"username"`, `value` = `"ada"`, `maxlength` = `"64"`, `required` = `true`, `style` = `"padding:10px;width:90%"` (rendered on the server with embedded text escaped) (rendered on the server with embedded text escaped), the HTML element `p` containing the HTML element `label` with `for` = `"password"` containing `Password` (rendered on the server with embedded text escaped), the HTML element `br` (rendered on the server with embedded text escaped), the HTML element `input` with `id` = `"password"`, `type` = `"password"`, `name` = `"password"`, `autocomplete` = `"current-password"`, `maxlength` = `"256"`, `required` = `true`, `style` = `"padding:10px;width:90%"` (rendered on the server with embedded text escaped) (rendered on the server with embedded text escaped), the HTML element `button` with `type` = `"submit"`, `style` = `"padding:12px 20px;border:0;border-radius:9px;background:#4852d7;color:white;font:inherit"` containing `Sign in and return to the app` (rendered on the server with embedded text escaped) (rendered on the server with embedded text escaped), the HTML element `p` with `style` = `"font-size:14px;color:#677189"` containing `The provider and app run in the same executable. Authorization codes still travel through the OpenID Connect protocol.` (rendered on the server with embedded text escaped) (rendered on the server with embedded text escaped).
|
|
102
|
+
|
|
103
|
+
**Author documentation**
|
|
104
|
+
|
|
105
|
+
A server form with a checked HTTP action. The browser submits to the provider endpoint.
|
|
106
|
+
|
|
107
|
+
### `ProviderFailure` {#symbol-ProviderFailure}
|
|
108
|
+
|
|
109
|
+
[source](views.md#code)
|
|
110
|
+
|
|
111
|
+
**Inputs**
|
|
112
|
+
|
|
113
|
+
- `message` (`string`) — required labeled input.
|
|
114
|
+
|
|
115
|
+
Returns: `Html`.
|
|
116
|
+
|
|
117
|
+
**What it does**
|
|
118
|
+
|
|
119
|
+
- Return the server component [`Page`](../common/views.md#symbol-Page) with `title` = `"Sign-in could not continue"` containing the HTML element `p` containing `message` (rendered on the server with embedded text escaped), the HTML element `a` with `href` = `"/login/start"` containing `Start a new sign-in` (rendered on the server with embedded text escaped) (rendered on the server with embedded text escaped).
|
|
120
|
+
|
|
121
|
+
### Dependencies used by this file
|
|
122
|
+
|
|
123
|
+
Only referenced types and operations appear here. Each name links to its complete specification.
|
|
124
|
+
|
|
125
|
+
#### [`Page`](../common/views.md#symbol-Page)
|
|
126
|
+
|
|
127
|
+
Function from `common`.
|
|
128
|
+
|
|
129
|
+
- [`Page`](../common/views.md#symbol-Page) (`title`: `string`, `children`: `List<Html>`) → `Html`.
|
|
130
|
+
|
|
131
|
+
### Shared language rules
|
|
132
|
+
|
|
133
|
+
See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
|
|
134
|
+
|
|
135
|
+
::::
|
|
136
|
+
|
|
137
|
+
:::::
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "counter.aug · Read access and mutable borrows"
|
|
3
|
+
generated: true
|
|
4
|
+
source: "examples/ownership/counter.aug"
|
|
5
|
+
editLink: false
|
|
6
|
+
prev: false
|
|
7
|
+
next: false
|
|
8
|
+
outline: [2, 3]
|
|
9
|
+
pageClass: aug-example-page
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# `counter.aug`
|
|
13
|
+
|
|
14
|
+
[Read access and mutable borrows](index.md) · Source and specification
|
|
15
|
+
|
|
16
|
+
::: details Files in this project
|
|
17
|
+
|
|
18
|
+
- [`main.aug`](main.md)
|
|
19
|
+
- [`counter.aug`](counter.md)
|
|
20
|
+
|
|
21
|
+
:::
|
|
22
|
+
|
|
23
|
+
::::: example-compare
|
|
24
|
+
|
|
25
|
+
:::: example-code
|
|
26
|
+
|
|
27
|
+
## Code {#code}
|
|
28
|
+
|
|
29
|
+
::: code-group
|
|
30
|
+
|
|
31
|
+
```aug [Indentation]
|
|
32
|
+
Counter(mutable int value) implements ICounter:
|
|
33
|
+
increment() changes self:
|
|
34
|
+
borrow self:
|
|
35
|
+
value = value + 1
|
|
36
|
+
read() returns int:
|
|
37
|
+
return value
|
|
38
|
+
interface ICounter:
|
|
39
|
+
increment() changes self
|
|
40
|
+
read() returns int
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
```aug [Braces]
|
|
44
|
+
Counter(mutable int value) implements ICounter {
|
|
45
|
+
increment() changes self {
|
|
46
|
+
borrow self {
|
|
47
|
+
value = value + 1
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
read() returns int {
|
|
51
|
+
return value
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
interface ICounter {
|
|
55
|
+
increment() changes self
|
|
56
|
+
read() returns int
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
:::
|
|
61
|
+
|
|
62
|
+
::::
|
|
63
|
+
|
|
64
|
+
:::: example-spec
|
|
65
|
+
|
|
66
|
+
## Compiled specification {#specification}
|
|
67
|
+
|
|
68
|
+
August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
|
|
69
|
+
|
|
70
|
+
### In this file
|
|
71
|
+
|
|
72
|
+
- [`Counter`](counter.md#symbol-Counter) is a class implementing `ICounter`.
|
|
73
|
+
- [`ICounter`](counter.md#symbol-ICounter) is an interface.
|
|
74
|
+
|
|
75
|
+
### `Counter` {#symbol-Counter}
|
|
76
|
+
|
|
77
|
+
[source](counter.md#code)
|
|
78
|
+
|
|
79
|
+
Behavioral class.
|
|
80
|
+
|
|
81
|
+
Satisfies [`ICounter`](counter.md#symbol-ICounter).
|
|
82
|
+
|
|
83
|
+
**Inputs**
|
|
84
|
+
|
|
85
|
+
- `value` (`int`) — required labeled input — stored as `value` and mutable.
|
|
86
|
+
|
|
87
|
+
#### `Counter.increment` {#symbol-Counter.increment}
|
|
88
|
+
|
|
89
|
+
[source](counter.md#code)
|
|
90
|
+
|
|
91
|
+
Returns: no value.
|
|
92
|
+
|
|
93
|
+
May change: `self`.
|
|
94
|
+
|
|
95
|
+
**What it does**
|
|
96
|
+
|
|
97
|
+
- Grant exclusive mutable access to `self` for this block, then end the borrow:
|
|
98
|
+
- Set `value` to `value` plus `1`.
|
|
99
|
+
|
|
100
|
+
#### `Counter.read` {#symbol-Counter.read}
|
|
101
|
+
|
|
102
|
+
[source](counter.md#code)
|
|
103
|
+
|
|
104
|
+
Returns: `int`.
|
|
105
|
+
|
|
106
|
+
**What it does**
|
|
107
|
+
|
|
108
|
+
- Return `value`.
|
|
109
|
+
|
|
110
|
+
### `ICounter` {#symbol-ICounter}
|
|
111
|
+
|
|
112
|
+
[source](counter.md#code)
|
|
113
|
+
|
|
114
|
+
Interface.
|
|
115
|
+
|
|
116
|
+
#### `ICounter.increment` {#symbol-ICounter.increment}
|
|
117
|
+
|
|
118
|
+
[source](counter.md#code)
|
|
119
|
+
|
|
120
|
+
Returns: no value.
|
|
121
|
+
|
|
122
|
+
May change: `self`.
|
|
123
|
+
|
|
124
|
+
Interface contract. A selected implementation supplies the behavior.
|
|
125
|
+
|
|
126
|
+
#### `ICounter.read` {#symbol-ICounter.read}
|
|
127
|
+
|
|
128
|
+
[source](counter.md#code)
|
|
129
|
+
|
|
130
|
+
Returns: `int`.
|
|
131
|
+
|
|
132
|
+
Interface contract. A selected implementation supplies the behavior.
|
|
133
|
+
|
|
134
|
+
### Shared language rules
|
|
135
|
+
|
|
136
|
+
See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
|
|
137
|
+
|
|
138
|
+
::::
|
|
139
|
+
|
|
140
|
+
:::::
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Read access and mutable borrows"
|
|
3
|
+
generated: true
|
|
4
|
+
source: "examples/ownership"
|
|
5
|
+
editLink: false
|
|
6
|
+
prev: false
|
|
7
|
+
next: false
|
|
8
|
+
outline: [2, 3]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Read access and mutable borrows
|
|
12
|
+
|
|
13
|
+
Share a reference for reading and grant explicit access for mutation.
|
|
14
|
+
|
|
15
|
+
Read a file below to see its highlighted source and the Markdown produced by `aug spec`. Choose **Indentation** or **Braces** above the code. Both views describe the same checked program; your choice is kept when you open another file.
|
|
16
|
+
|
|
17
|
+
## Project files
|
|
18
|
+
|
|
19
|
+
- [`main.aug`](main.md)
|
|
20
|
+
- [`counter.aug`](counter.md)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## Try this project
|
|
24
|
+
|
|
25
|
+
From a repository checkout with August installed:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
aug check examples/ownership
|
|
29
|
+
aug spec examples/ownership
|
|
30
|
+
aug run examples/ownership
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
[Browse all examples](../index.md)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "main.aug · Read access and mutable borrows"
|
|
3
|
+
generated: true
|
|
4
|
+
source: "examples/ownership/main.aug"
|
|
5
|
+
editLink: false
|
|
6
|
+
prev: false
|
|
7
|
+
next: false
|
|
8
|
+
outline: [2, 3]
|
|
9
|
+
pageClass: aug-example-page
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# `main.aug`
|
|
13
|
+
|
|
14
|
+
[Read access and mutable borrows](index.md) · Source and specification
|
|
15
|
+
|
|
16
|
+
::: details Files in this project
|
|
17
|
+
|
|
18
|
+
- [`main.aug`](main.md)
|
|
19
|
+
- [`counter.aug`](counter.md)
|
|
20
|
+
|
|
21
|
+
:::
|
|
22
|
+
|
|
23
|
+
::::: example-compare
|
|
24
|
+
|
|
25
|
+
:::: example-code
|
|
26
|
+
|
|
27
|
+
## Code {#code}
|
|
28
|
+
|
|
29
|
+
::: code-group
|
|
30
|
+
|
|
31
|
+
```aug [Indentation]
|
|
32
|
+
import Counter from counter
|
|
33
|
+
own Counter counter = Counter(value=1)
|
|
34
|
+
counter.increment()
|
|
35
|
+
print(value=counter.read())
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```aug [Braces]
|
|
39
|
+
import Counter from counter
|
|
40
|
+
own Counter counter = Counter(value=1)
|
|
41
|
+
counter.increment()
|
|
42
|
+
print(value=counter.read())
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
:::
|
|
46
|
+
|
|
47
|
+
::::
|
|
48
|
+
|
|
49
|
+
:::: example-spec
|
|
50
|
+
|
|
51
|
+
## Compiled specification {#specification}
|
|
52
|
+
|
|
53
|
+
August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
|
|
54
|
+
|
|
55
|
+
### In this file
|
|
56
|
+
|
|
57
|
+
- Run 3 other startup steps in source order.
|
|
58
|
+
|
|
59
|
+
### Startup, in source order
|
|
60
|
+
|
|
61
|
+
- Set `counter` of type [`Counter`](counter.md#symbol-Counter) to call [`Counter`](counter.md#symbol-Counter) with `value` = `1`.
|
|
62
|
+
- This variable owns the value.
|
|
63
|
+
- Call [`Counter.increment`](counter.md#symbol-Counter.increment) on `counter`.
|
|
64
|
+
- Call `print` with `value` = call [`Counter.read`](counter.md#symbol-Counter.read) on `counter`.
|
|
65
|
+
|
|
66
|
+
### Dependencies used by this file
|
|
67
|
+
|
|
68
|
+
Only referenced types and operations appear here. Each name links to its complete specification.
|
|
69
|
+
|
|
70
|
+
#### [`Counter`](counter.md#symbol-Counter)
|
|
71
|
+
|
|
72
|
+
Class from `counter`.
|
|
73
|
+
|
|
74
|
+
- Construct with `value`: `int` → [`Counter`](counter.md#symbol-Counter).
|
|
75
|
+
- [`Counter.increment`](counter.md#symbol-Counter.increment) (no caller inputs) → `void`; changes `self`.
|
|
76
|
+
- [`Counter.read`](counter.md#symbol-Counter.read) (no caller inputs) → `int`.
|
|
77
|
+
|
|
78
|
+
### Built-in operations used by this file
|
|
79
|
+
|
|
80
|
+
- `print` (`value`: `any`) → `void`: Composition and test output. Other callables receive Console and declare uses console.write.
|
|
81
|
+
|
|
82
|
+
[Full built-in reference](https://greenpandastudios.github.io/augscript/language-constructs).
|
|
83
|
+
|
|
84
|
+
### Shared language rules
|
|
85
|
+
|
|
86
|
+
See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
|
|
87
|
+
|
|
88
|
+
::::
|
|
89
|
+
|
|
90
|
+
:::::
|