@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.
Files changed (459) hide show
  1. package/README.md +9 -6
  2. package/THIRD_PARTY_NOTICES.md +4 -0
  3. package/bin/aug.mjs +12 -2
  4. package/docs/about.md +27 -0
  5. package/docs/api/crypto.md +103 -69
  6. package/docs/api/io.md +35 -33
  7. package/docs/api/json.md +3 -3
  8. package/docs/api/memory.md +23 -19
  9. package/docs/api/time.md +10 -9
  10. package/docs/api/web.md +33 -38
  11. package/docs/compatibility.md +3 -3
  12. package/docs/contributing-benchmarks.md +38 -0
  13. package/docs/dev-containers.md +95 -0
  14. package/docs/diagnostics.md +15 -5
  15. package/docs/docker.md +174 -12
  16. package/docs/editor.md +35 -0
  17. package/docs/example-projects.json +206 -24
  18. package/docs/examples/approved-design/counters.md +34 -126
  19. package/docs/examples/approved-design/dependencies/august/0.20.1/io/contracts.md +178 -0
  20. package/docs/examples/approved-design/domain/app.md +13 -77
  21. package/docs/examples/approved-design/domain/export.md +5 -19
  22. package/docs/examples/approved-design/domain/models.md +4 -23
  23. package/docs/examples/approved-design/domain/numbers.md +24 -114
  24. package/docs/examples/approved-design/index.md +16 -7
  25. package/docs/examples/approved-design/main.md +19 -96
  26. package/docs/examples/benchmark/index.md +6 -5
  27. package/docs/examples/benchmark/main.md +7 -35
  28. package/docs/examples/cli-args/index.md +6 -5
  29. package/docs/examples/cli-args/main.md +6 -31
  30. package/docs/examples/collections/index.md +6 -5
  31. package/docs/examples/collections/main.md +7 -35
  32. package/docs/examples/collections-benchmark/index.md +6 -5
  33. package/docs/examples/collections-benchmark/main.md +7 -35
  34. package/docs/examples/cpu-benchmark/index.md +6 -5
  35. package/docs/examples/cpu-benchmark/main.md +5 -24
  36. package/docs/examples/developer-workflow/calculator.md +39 -186
  37. package/docs/examples/developer-workflow/dependencies/august/0.20.1/io/contracts.md +178 -0
  38. package/docs/examples/developer-workflow/index.md +16 -7
  39. package/docs/examples/developer-workflow/logging/console.md +10 -56
  40. package/docs/examples/developer-workflow/logging/export.md +4 -14
  41. package/docs/examples/developer-workflow/logging/logger.md +7 -43
  42. package/docs/examples/developer-workflow/main.md +17 -69
  43. package/docs/examples/drop/index.md +6 -5
  44. package/docs/examples/drop/main.md +7 -27
  45. package/docs/examples/drop/resource.md +7 -30
  46. package/docs/examples/errors/errors.md +7 -27
  47. package/docs/examples/errors/index.md +6 -5
  48. package/docs/examples/errors/main.md +7 -28
  49. package/docs/examples/ffi/index.md +6 -5
  50. package/docs/examples/ffi/main.md +6 -20
  51. package/docs/examples/ffi/native.md +8 -34
  52. package/docs/examples/generic-di/dependencies/august/0.20.1/io/contracts.md +178 -0
  53. package/docs/examples/generic-di/index.md +6 -5
  54. package/docs/examples/generic-di/main.md +9 -39
  55. package/docs/examples/generic-di/types.md +23 -92
  56. package/docs/examples/generics/index.md +6 -5
  57. package/docs/examples/generics/main.md +10 -47
  58. package/docs/examples/generics/types.md +25 -100
  59. package/docs/examples/hello/app/export.md +4 -12
  60. package/docs/examples/hello/app/greeter.md +13 -91
  61. package/docs/examples/hello/dependencies/august/0.20.1/io/contracts.md +178 -0
  62. package/docs/examples/hello/index.md +17 -6
  63. package/docs/examples/hello/logging/console.md +10 -54
  64. package/docs/examples/hello/logging/export.md +4 -14
  65. package/docs/examples/hello/logging/logger.md +7 -45
  66. package/docs/examples/hello/main.md +9 -39
  67. package/docs/examples/http-benchmark/index.md +6 -5
  68. package/docs/examples/http-benchmark/main.md +6 -20
  69. package/docs/examples/http-benchmark/routes.md +9 -31
  70. package/docs/examples/index.md +46 -29
  71. package/docs/examples/interceptors/app.md +20 -139
  72. package/docs/examples/interceptors/dependencies/august/0.20.1/io/contracts.md +178 -0
  73. package/docs/examples/interceptors/index.md +6 -5
  74. package/docs/examples/interceptors/interceptors.md +24 -148
  75. package/docs/examples/interceptors/logging.md +13 -76
  76. package/docs/examples/interceptors/main.md +10 -65
  77. package/docs/examples/json-benchmark/data.md +4 -20
  78. package/docs/examples/json-benchmark/dependencies/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +67 -0
  79. package/docs/examples/json-benchmark/index.md +7 -5
  80. package/docs/examples/json-benchmark/main-yaml.md +20 -0
  81. package/docs/examples/json-benchmark/main.md +10 -49
  82. package/docs/examples/new-syntax/console.md +10 -52
  83. package/docs/examples/new-syntax/dependencies/august/0.20.1/io/contracts.md +178 -0
  84. package/docs/examples/new-syntax/greeter.md +13 -71
  85. package/docs/examples/new-syntax/index.md +6 -5
  86. package/docs/examples/new-syntax/logger.md +7 -43
  87. package/docs/examples/new-syntax/main.md +10 -53
  88. package/docs/examples/new-syntax/math.md +6 -24
  89. package/docs/examples/oidc-login/client/contracts.md +10 -61
  90. package/docs/examples/oidc-login/client/endpoints.md +32 -154
  91. package/docs/examples/oidc-login/client/export.md +5 -23
  92. package/docs/examples/oidc-login/client/login.md +234 -344
  93. package/docs/examples/oidc-login/client/logout.md +38 -143
  94. package/docs/examples/oidc-login/client/protocol.md +183 -304
  95. package/docs/examples/oidc-login/client/session.md +41 -149
  96. package/docs/examples/oidc-login/client/views.md +13 -58
  97. package/docs/examples/oidc-login/common/export.md +6 -26
  98. package/docs/examples/oidc-login/common/headers.md +42 -72
  99. package/docs/examples/oidc-login/common/keys.md +40 -164
  100. package/docs/examples/oidc-login/common/settings.md +24 -40
  101. package/docs/examples/oidc-login/common/views.md +7 -28
  102. package/docs/examples/oidc-login/dependencies/packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.md +205 -0
  103. package/docs/examples/oidc-login/dependencies/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +67 -0
  104. package/docs/examples/oidc-login/dependencies/packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +267 -0
  105. package/docs/examples/oidc-login/dependencies/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.md +415 -0
  106. package/docs/examples/oidc-login/dependencies/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.md +271 -0
  107. package/docs/examples/oidc-login/dependencies/packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.md +89 -0
  108. package/docs/examples/oidc-login/index.md +8 -7
  109. package/docs/examples/oidc-login/main-yaml.md +7 -0
  110. package/docs/examples/oidc-login/main.md +26 -153
  111. package/docs/examples/oidc-login/provider/authorization.md +232 -275
  112. package/docs/examples/oidc-login/provider/contracts.md +24 -146
  113. package/docs/examples/oidc-login/provider/credentials.md +24 -57
  114. package/docs/examples/oidc-login/provider/discovery.md +48 -122
  115. package/docs/examples/oidc-login/provider/export.md +11 -37
  116. package/docs/examples/oidc-login/provider/token.md +159 -237
  117. package/docs/examples/oidc-login/provider/userinfo.md +47 -102
  118. package/docs/examples/oidc-login/provider/views.md +13 -53
  119. package/docs/examples/ownership/counter.md +17 -63
  120. package/docs/examples/ownership/index.md +6 -5
  121. package/docs/examples/ownership/main.md +7 -30
  122. package/docs/examples/ownership-transfer/dependencies/august/0.20.1/io/contracts.md +178 -0
  123. package/docs/examples/ownership-transfer/index.md +6 -5
  124. package/docs/examples/ownership-transfer/main.md +10 -52
  125. package/docs/examples/ownership-transfer/resource.md +15 -67
  126. package/docs/examples/packages-app/dependencies/packages/@example/aug-math/0.1.0/arithmetic.md +12 -50
  127. package/docs/examples/packages-app/index.md +7 -6
  128. package/docs/examples/packages-app/main.md +7 -25
  129. package/docs/examples/packages-math/aug-package-json.md +1 -1
  130. package/docs/examples/packages-math/index.md +7 -6
  131. package/docs/examples/packages-math/src/arithmetic.md +12 -50
  132. package/docs/examples/packages-math/src/export.md +4 -12
  133. package/docs/examples/startup-benchmark/index.md +6 -5
  134. package/docs/examples/startup-benchmark/main.md +5 -17
  135. package/docs/examples/visibility/counter.md +19 -67
  136. package/docs/examples/visibility/index.md +6 -5
  137. package/docs/examples/visibility/main.md +7 -31
  138. package/docs/examples/weather-api/forecasts.md +168 -0
  139. package/docs/examples/weather-api/index.md +42 -0
  140. package/docs/examples/weather-api/main-yaml.md +21 -0
  141. package/docs/examples/weather-api/main.md +65 -0
  142. package/docs/examples.json +10 -0
  143. package/docs/getting-started.md +105 -2
  144. package/docs/grammar.md +6 -4
  145. package/docs/guides/change-a-module.md +64 -0
  146. package/docs/guides/index.md +27 -0
  147. package/docs/index.md +51 -29
  148. package/docs/language-conformance.md +1 -1
  149. package/docs/language-constructs.md +22 -22
  150. package/docs/language-design-audit.md +1 -1
  151. package/docs/learn/data-and-errors.md +77 -0
  152. package/docs/learn/index.md +30 -0
  153. package/docs/learn/modules-and-dependencies.md +73 -0
  154. package/docs/learn/state-and-tests.md +71 -0
  155. package/docs/learn/values-and-functions.md +62 -0
  156. package/docs/lesson-failures.json +8 -0
  157. package/docs/maintaining-docs.md +16 -4
  158. package/docs/packages.md +72 -126
  159. package/docs/performance.md +13 -41
  160. package/docs/production-readiness.md +5 -4
  161. package/docs/public/downloads/approved-design.zip +0 -0
  162. package/docs/public/downloads/benchmark.zip +0 -0
  163. package/docs/public/downloads/cli-args.zip +0 -0
  164. package/docs/public/downloads/collections-benchmark.zip +0 -0
  165. package/docs/public/downloads/collections.zip +0 -0
  166. package/docs/public/downloads/cpu-benchmark.zip +0 -0
  167. package/docs/public/downloads/developer-workflow.zip +0 -0
  168. package/docs/public/downloads/drop.zip +0 -0
  169. package/docs/public/downloads/errors.zip +0 -0
  170. package/docs/public/downloads/ffi.zip +0 -0
  171. package/docs/public/downloads/generic-di.zip +0 -0
  172. package/docs/public/downloads/generics.zip +0 -0
  173. package/docs/public/downloads/hello.zip +0 -0
  174. package/docs/public/downloads/http-benchmark.zip +0 -0
  175. package/docs/public/downloads/interceptors.zip +0 -0
  176. package/docs/public/downloads/json-benchmark.zip +0 -0
  177. package/docs/public/downloads/new-syntax.zip +0 -0
  178. package/docs/public/downloads/oidc-login.zip +0 -0
  179. package/docs/public/downloads/ownership-transfer.zip +0 -0
  180. package/docs/public/downloads/ownership.zip +0 -0
  181. package/docs/public/downloads/packages-app.zip +0 -0
  182. package/docs/public/downloads/packages-math.zip +0 -0
  183. package/docs/public/downloads/startup-benchmark.zip +0 -0
  184. package/docs/public/downloads/visibility.zip +0 -0
  185. package/docs/public/downloads/weather-api.zip +0 -0
  186. package/docs/reference.md +23 -17
  187. package/docs/releasing.md +29 -15
  188. package/docs/research/code-to-natural-language.md +108 -0
  189. package/docs/research/ecosystem-workflow.md +41 -0
  190. package/docs/research/wiki-editorial-design.md +71 -0
  191. package/docs/roadmap.md +1 -1
  192. package/docs/specifications.md +27 -11
  193. package/docs/testing.md +19 -5
  194. package/docs/tooling.md +25 -12
  195. package/docs/weather-api.md +65 -0
  196. package/docs/web.md +50 -18
  197. package/docs/writing-docs.md +49 -0
  198. package/examples/{hello/.aug-spec/august/0.19.0 → approved-design/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
  199. package/examples/approved-design/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  200. package/examples/approved-design/.aug-spec/manifest.json +3 -3
  201. package/examples/approved-design/counters.aug +5 -4
  202. package/examples/approved-design/counters.aug.md +25 -132
  203. package/examples/approved-design/domain/app.aug +2 -1
  204. package/examples/approved-design/domain/app.aug.md +10 -80
  205. package/examples/approved-design/domain/export.aug +1 -0
  206. package/examples/approved-design/domain/export.aug.md +4 -20
  207. package/examples/approved-design/domain/models.aug +1 -0
  208. package/examples/approved-design/domain/models.aug.md +3 -25
  209. package/examples/approved-design/domain/numbers.aug +3 -2
  210. package/examples/approved-design/domain/numbers.aug.md +19 -116
  211. package/examples/approved-design/main.aug +1 -0
  212. package/examples/approved-design/main.aug.md +12 -95
  213. package/examples/benchmark/.aug-spec/manifest.json +1 -1
  214. package/examples/benchmark/main.aug +1 -0
  215. package/examples/benchmark/main.aug.md +6 -36
  216. package/examples/cli-args/.aug-spec/manifest.json +1 -1
  217. package/examples/cli-args/main.aug +1 -0
  218. package/examples/cli-args/main.aug.md +5 -32
  219. package/examples/collections/.aug-spec/manifest.json +1 -1
  220. package/examples/collections/main.aug +1 -0
  221. package/examples/collections/main.aug.md +6 -36
  222. package/examples/{generic-di/.aug-spec/august/0.19.0 → developer-workflow/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
  223. package/examples/developer-workflow/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  224. package/examples/developer-workflow/.aug-spec/manifest.json +3 -3
  225. package/examples/developer-workflow/calculator.aug +3 -2
  226. package/examples/developer-workflow/calculator.aug.md +28 -189
  227. package/examples/developer-workflow/logging/console.aug +2 -1
  228. package/examples/developer-workflow/logging/console.aug.md +7 -57
  229. package/examples/developer-workflow/logging/export.aug +1 -0
  230. package/examples/developer-workflow/logging/export.aug.md +3 -15
  231. package/examples/developer-workflow/logging/logger.aug +1 -0
  232. package/examples/developer-workflow/logging/logger.aug.md +6 -46
  233. package/examples/developer-workflow/main.aug +1 -0
  234. package/examples/developer-workflow/main.aug.md +10 -68
  235. package/examples/drop/.aug-spec/manifest.json +1 -1
  236. package/examples/drop/main.aug +1 -0
  237. package/examples/drop/main.aug.md +6 -28
  238. package/examples/drop/resource.aug +1 -0
  239. package/examples/drop/resource.aug.md +6 -34
  240. package/examples/errors/.aug-spec/manifest.json +1 -1
  241. package/examples/errors/errors.aug +2 -1
  242. package/examples/errors/errors.aug.md +4 -27
  243. package/examples/errors/main.aug +1 -0
  244. package/examples/errors/main.aug.md +6 -29
  245. package/examples/ffi/.aug-spec/manifest.json +1 -1
  246. package/examples/ffi/main.aug +1 -0
  247. package/examples/ffi/main.aug.md +5 -21
  248. package/examples/ffi/native.aug +2 -1
  249. package/examples/ffi/native.aug.md +5 -35
  250. package/examples/{approved-design/.aug-spec/august/0.19.0 → generic-di/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
  251. package/examples/generic-di/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  252. package/examples/generic-di/.aug-spec/manifest.json +3 -3
  253. package/examples/generic-di/main.aug +1 -0
  254. package/examples/generic-di/main.aug.md +8 -40
  255. package/examples/generic-di/types.aug +3 -2
  256. package/examples/generic-di/types.aug.md +18 -97
  257. package/examples/generics/.aug-spec/manifest.json +1 -1
  258. package/examples/generics/main.aug +1 -0
  259. package/examples/generics/main.aug.md +9 -48
  260. package/examples/generics/types.aug +4 -3
  261. package/examples/generics/types.aug.md +18 -104
  262. package/examples/{developer-workflow/.aug-spec/august/0.19.0 → hello/.aug-spec/august/0.20.1}/io/contracts.aug +4 -3
  263. package/examples/hello/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  264. package/examples/hello/.aug-spec/manifest.json +3 -3
  265. package/examples/hello/app/export.aug +1 -0
  266. package/examples/hello/app/export.aug.md +3 -13
  267. package/examples/hello/app/greeter.aug +2 -1
  268. package/examples/hello/app/greeter.aug.md +10 -94
  269. package/examples/hello/logging/console.aug +2 -1
  270. package/examples/hello/logging/console.aug.md +7 -55
  271. package/examples/hello/logging/export.aug +1 -0
  272. package/examples/hello/logging/export.aug.md +3 -15
  273. package/examples/hello/logging/logger.aug +1 -0
  274. package/examples/hello/logging/logger.aug.md +6 -48
  275. package/examples/hello/main.aug +1 -0
  276. package/examples/hello/main.aug.md +8 -40
  277. package/examples/interceptors/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
  278. package/examples/interceptors/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  279. package/examples/interceptors/.aug-spec/manifest.json +3 -3
  280. package/examples/interceptors/app.aug +3 -2
  281. package/examples/interceptors/app.aug.md +15 -141
  282. package/examples/interceptors/interceptors.aug +3 -2
  283. package/examples/interceptors/interceptors.aug.md +19 -152
  284. package/examples/interceptors/logging.aug +2 -1
  285. package/examples/interceptors/logging.aug.md +10 -79
  286. package/examples/interceptors/main.aug +1 -0
  287. package/examples/interceptors/main.aug.md +9 -66
  288. package/examples/new-syntax/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
  289. package/examples/new-syntax/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  290. package/examples/new-syntax/.aug-spec/manifest.json +3 -3
  291. package/examples/new-syntax/console.aug +2 -1
  292. package/examples/new-syntax/console.aug.md +7 -53
  293. package/examples/new-syntax/greeter.aug +2 -1
  294. package/examples/new-syntax/greeter.aug.md +10 -74
  295. package/examples/new-syntax/logger.aug +1 -0
  296. package/examples/new-syntax/logger.aug.md +6 -46
  297. package/examples/new-syntax/main.aug +1 -0
  298. package/examples/new-syntax/main.aug.md +9 -54
  299. package/examples/new-syntax/math.aug +2 -1
  300. package/examples/new-syntax/math.aug.md +3 -24
  301. package/examples/oidc-login/.aug-spec/manifest.json +13 -13
  302. package/examples/oidc-login/.aug-spec/packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/store.aug.md +71 -0
  303. package/examples/oidc-login/.aug-spec/packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +17 -0
  304. package/examples/oidc-login/.aug-spec/packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +125 -0
  305. package/examples/oidc-login/.aug-spec/{august/0.19.0/crypto → packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40}/contracts.aug +12 -11
  306. package/examples/oidc-login/.aug-spec/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/contracts.aug.md +244 -0
  307. package/examples/oidc-login/.aug-spec/{august/0.19.0/crypto → packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40}/jose.aug +6 -5
  308. package/examples/oidc-login/.aug-spec/packages/@git/url_9ef654c66d34ab8f5527/0.0.0-git.b14a0f9aa41f1ce58bd51133bcdc424033e40d40/jose.aug.md +71 -0
  309. package/examples/oidc-login/.aug-spec/packages/@git/url_c092cd151499c4e1d8a1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301/contracts.aug.md +30 -0
  310. package/examples/oidc-login/aug.lock.json +100 -0
  311. package/examples/oidc-login/client/contracts.aug +1 -0
  312. package/examples/oidc-login/client/contracts.aug.md +9 -66
  313. package/examples/oidc-login/client/endpoints.aug +6 -5
  314. package/examples/oidc-login/client/endpoints.aug.md +13 -145
  315. package/examples/oidc-login/client/export.aug +1 -0
  316. package/examples/oidc-login/client/export.aug.md +4 -24
  317. package/examples/oidc-login/client/login.aug +7 -6
  318. package/examples/oidc-login/client/login.aug.md +25 -303
  319. package/examples/oidc-login/client/logout.aug +5 -4
  320. package/examples/oidc-login/client/logout.aug.md +13 -135
  321. package/examples/oidc-login/client/protocol.aug +7 -6
  322. package/examples/oidc-login/client/protocol.aug.md +36 -283
  323. package/examples/oidc-login/client/session.aug +5 -4
  324. package/examples/oidc-login/client/session.aug.md +12 -139
  325. package/examples/oidc-login/client/views.aug +3 -2
  326. package/examples/oidc-login/client/views.aug.md +8 -57
  327. package/examples/oidc-login/common/export.aug +1 -0
  328. package/examples/oidc-login/common/export.aug.md +5 -27
  329. package/examples/oidc-login/common/headers.aug +4 -3
  330. package/examples/oidc-login/common/headers.aug.md +9 -67
  331. package/examples/oidc-login/common/keys.aug +6 -5
  332. package/examples/oidc-login/common/keys.aug.md +29 -165
  333. package/examples/oidc-login/common/settings.aug +2 -1
  334. package/examples/oidc-login/common/settings.aug.md +5 -39
  335. package/examples/oidc-login/common/views.aug +2 -1
  336. package/examples/oidc-login/common/views.aug.md +4 -28
  337. package/examples/oidc-login/main.aug +6 -16
  338. package/examples/oidc-login/main.aug.md +17 -146
  339. package/examples/oidc-login/main.yaml +7 -0
  340. package/examples/oidc-login/provider/authorization.aug +7 -6
  341. package/examples/oidc-login/provider/authorization.aug.md +23 -238
  342. package/examples/oidc-login/provider/contracts.aug +1 -0
  343. package/examples/oidc-login/provider/contracts.aug.md +23 -158
  344. package/examples/oidc-login/provider/credentials.aug +3 -2
  345. package/examples/oidc-login/provider/credentials.aug.md +9 -53
  346. package/examples/oidc-login/provider/discovery.aug +4 -3
  347. package/examples/oidc-login/provider/discovery.aug.md +11 -118
  348. package/examples/oidc-login/provider/export.aug +1 -0
  349. package/examples/oidc-login/provider/export.aug.md +6 -34
  350. package/examples/oidc-login/provider/token.aug +6 -5
  351. package/examples/oidc-login/provider/token.aug.md +16 -204
  352. package/examples/oidc-login/provider/userinfo.aug +4 -3
  353. package/examples/oidc-login/provider/userinfo.aug.md +10 -92
  354. package/examples/oidc-login/provider/views.aug +3 -2
  355. package/examples/oidc-login/provider/views.aug.md +8 -52
  356. package/examples/ownership/.aug-spec/manifest.json +1 -1
  357. package/examples/ownership/counter.aug +3 -2
  358. package/examples/ownership/counter.aug.md +12 -66
  359. package/examples/ownership/main.aug +1 -0
  360. package/examples/ownership/main.aug.md +6 -31
  361. package/examples/ownership-transfer/.aug-spec/august/0.20.1/io/contracts.aug +37 -0
  362. package/examples/ownership-transfer/.aug-spec/august/0.20.1/io/contracts.aug.md +82 -0
  363. package/examples/ownership-transfer/.aug-spec/manifest.json +3 -3
  364. package/examples/ownership-transfer/main.aug +1 -0
  365. package/examples/ownership-transfer/main.aug.md +9 -53
  366. package/examples/ownership-transfer/resource.aug +2 -1
  367. package/examples/ownership-transfer/resource.aug.md +12 -71
  368. package/examples/packages/app/.aug-spec/manifest.json +1 -1
  369. package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug +2 -1
  370. package/examples/packages/app/.aug-spec/packages/@example/aug-math/0.1.0/arithmetic.aug.md +9 -51
  371. package/examples/packages/app/main.aug +1 -0
  372. package/examples/packages/app/main.aug.md +6 -26
  373. package/examples/packages/math/.aug-spec/manifest.json +1 -1
  374. package/examples/packages/math/aug-package.json +1 -1
  375. package/examples/packages/math/src/arithmetic.aug +2 -1
  376. package/examples/packages/math/src/arithmetic.aug.md +9 -51
  377. package/examples/packages/math/src/export.aug +1 -0
  378. package/examples/packages/math/src/export.aug.md +3 -13
  379. package/examples/visibility/.aug-spec/manifest.json +1 -1
  380. package/examples/visibility/counter.aug +4 -3
  381. package/examples/visibility/counter.aug.md +12 -68
  382. package/examples/visibility/main.aug +1 -0
  383. package/examples/visibility/main.aug.md +6 -32
  384. package/examples/weather-api/.aug-spec/manifest.json +8 -0
  385. package/examples/weather-api/AGENTS.md +17 -0
  386. package/examples/weather-api/README.md +19 -0
  387. package/examples/weather-api/forecasts.aug +47 -0
  388. package/examples/weather-api/forecasts.aug.md +32 -0
  389. package/examples/weather-api/main.aug +4 -0
  390. package/examples/weather-api/main.aug.md +15 -0
  391. package/examples/weather-api/main.yaml +5 -0
  392. package/examples/weather-api/weather.http +5 -0
  393. package/package.json +3 -4
  394. package/scripts/bootstrap-native.mjs +181 -106
  395. package/scripts/native-setup.mjs +98 -0
  396. package/scripts/native-toolchain.mjs +28 -0
  397. package/src/builtins.js +1 -1
  398. package/src/checker.js +259 -72
  399. package/src/cli.js +114 -20
  400. package/src/codegen.js +1 -1
  401. package/src/config.js +1 -1
  402. package/src/contracts.js +10 -0
  403. package/src/editor.js +71 -16
  404. package/src/fixes.js +90 -2
  405. package/src/formatter.js +19 -8
  406. package/src/git-packages.js +110 -0
  407. package/src/help.js +24 -23
  408. package/src/http-contracts.js +14 -0
  409. package/src/http-policies.js +5 -5
  410. package/src/libraries.js +1 -1
  411. package/src/lsp.js +14 -5
  412. package/src/native.js +19 -13
  413. package/src/navigation.js +4 -2
  414. package/src/openapi.js +5 -4
  415. package/src/package-locking.js +45 -0
  416. package/src/package-manager.js +251 -67
  417. package/src/parser.js +13 -5
  418. package/src/policies.js +3 -3
  419. package/src/project-init.js +78 -4
  420. package/src/project.js +9 -7
  421. package/src/semantic.js +46 -2
  422. package/src/snippets.js +59 -0
  423. package/src/spec-hints.js +56 -0
  424. package/src/spec-tree.js +241 -0
  425. package/src/spec.js +626 -303
  426. package/docs/examples/approved-design/dependencies/august/0.19.0/io/contracts.md +0 -395
  427. package/docs/examples/developer-workflow/dependencies/august/0.19.0/io/contracts.md +0 -395
  428. package/docs/examples/generic-di/dependencies/august/0.19.0/io/contracts.md +0 -395
  429. package/docs/examples/hello/dependencies/august/0.19.0/io/contracts.md +0 -395
  430. package/docs/examples/interceptors/dependencies/august/0.19.0/io/contracts.md +0 -395
  431. package/docs/examples/json-benchmark/dependencies/august/0.19.0/json/contracts.md +0 -103
  432. package/docs/examples/new-syntax/dependencies/august/0.19.0/io/contracts.md +0 -395
  433. package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/contracts.md +0 -925
  434. package/docs/examples/oidc-login/dependencies/august/0.19.0/crypto/jose.md +0 -434
  435. package/docs/examples/oidc-login/dependencies/august/0.19.0/json/contracts.md +0 -103
  436. package/docs/examples/oidc-login/dependencies/august/0.19.0/memory/store.md +0 -374
  437. package/docs/examples/oidc-login/dependencies/august/0.19.0/time/contracts.md +0 -150
  438. package/docs/examples/oidc-login/dependencies/august/0.19.0/web/contracts.md +0 -532
  439. package/docs/examples/ownership-transfer/dependencies/august/0.19.0/io/contracts.md +0 -395
  440. package/examples/approved-design/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  441. package/examples/developer-workflow/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  442. package/examples/generic-di/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  443. package/examples/hello/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  444. package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
  445. package/examples/interceptors/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  446. package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
  447. package/examples/new-syntax/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  448. package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/contracts.aug.md +0 -791
  449. package/examples/oidc-login/.aug-spec/august/0.19.0/crypto/jose.aug.md +0 -266
  450. package/examples/oidc-login/.aug-spec/august/0.19.0/json/contracts.aug.md +0 -55
  451. package/examples/oidc-login/.aug-spec/august/0.19.0/memory/store.aug.md +0 -250
  452. package/examples/oidc-login/.aug-spec/august/0.19.0/time/contracts.aug.md +0 -96
  453. package/examples/oidc-login/.aug-spec/august/0.19.0/web/contracts.aug.md +0 -420
  454. package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug +0 -36
  455. package/examples/ownership-transfer/.aug-spec/august/0.19.0/io/contracts.aug.md +0 -316
  456. /package/examples/oidc-login/.aug-spec/{august/0.19.0/memory → packages/@git/url_0eb7c89453c87681ed15/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/store.aug +0 -0
  457. /package/examples/oidc-login/.aug-spec/{august/0.19.0/json → packages/@git/url_2d3c37c690c0fa115be1/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
  458. /package/examples/oidc-login/.aug-spec/{august/0.19.0/web → packages/@git/url_897efafd565158fc4908/0.0.0-git.a39fc582565d4fca40be4f75fa304d71adc69301}/contracts.aug +0 -0
  459. /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
- import Crypto from august.crypto
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) uses SigningKeys.configure unless KeyError:
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() returns RsaPrivateKey uses SigningKeys.provider unless KeyError:
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() returns RsaPrivateKey uses SigningKeys.session unless KeyError:
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) uses crypto.generateRsa and keys.configure unless CryptoError and KeyError:
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
- import Crypto from august.crypto
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) uses SigningKeys.configure unless KeyError {
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() returns RsaPrivateKey uses SigningKeys.provider unless KeyError {
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() returns RsaPrivateKey uses SigningKeys.session unless KeyError {
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) uses crypto.generateRsa and keys.configure unless CryptoError and KeyError {
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
- August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
152
+ ### `KeyError` · class · [source](keys.md#code) {#symbol-KeyError}
151
153
 
152
- ### In this file
154
+ It implements `Error`.
153
155
 
154
- - [`KeyError`](keys.md#symbol-KeyError) is a class implementing `Error`.
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
- Returns: `RsaPrivateKey`.
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
- Capabilities: [`SigningKeys.session`](keys.md#symbol-SigningKeys.session).
164
+ #### `SigningKeys.provider` · [source](keys.md#code) {#symbol-SigningKeys.provider}
279
165
 
280
- Can fail with `KeyError`. Callers must catch or propagate these errors.
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
- **What it does**
168
+ #### `SigningKeys.session` · [source](keys.md#code) {#symbol-SigningKeys.session}
283
169
 
284
- - Lock `_keys`, expose its mutable value as `keys`, and release the lock on every exit:
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
- ### `initializeKeys` {#symbol-initializeKeys}
172
+ ### `MemorySigningKeys` · class · [source](keys.md#code) {#symbol-MemorySigningKeys}
292
173
 
293
- [source](keys.md#code)
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
- **Inputs**
176
+ #### `MemorySigningKeys.configure` · [source](keys.md#code) {#symbol-MemorySigningKeys.configure}
296
177
 
297
- - `crypto` ([`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto)) — injected; callers omit it.
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
- Returns: no value.
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
- Capabilities: [`crypto.generateRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.generateRsa), [`keys.configure`](keys.md#symbol-SigningKeys.configure).
182
+ Release this lock when the block exits, including on return or failure.
303
183
 
304
- Can fail with `CryptoError`, `KeyError`. Callers must catch or propagate these errors.
184
+ #### `MemorySigningKeys.provider` · [source](keys.md#code) {#symbol-MemorySigningKeys.provider}
305
185
 
306
- **What it does**
186
+ Failures can raise [`KeyError`](keys.md#symbol-KeyError).
307
187
 
308
- - Set `provider` to call [`Crypto.generateRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.generateRsa) on `crypto`.
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
- ### Dependencies used by this file
190
+ Release this lock when the block exits, including on return or failure.
313
191
 
314
- Only referenced types and operations appear here. Each name links to its complete specification.
192
+ #### `MemorySigningKeys.session` · [source](keys.md#code) {#symbol-MemorySigningKeys.session}
315
193
 
316
- #### [`Crypto`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto)
194
+ Failures can raise [`KeyError`](keys.md#symbol-KeyError).
317
195
 
318
- Capability interface from `august.crypto`.
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
- - [`Crypto.generateRsa`](../dependencies/august/0.19.0/crypto/contracts.md#symbol-Crypto.generateRsa) (no caller inputs) → `RsaPrivateKey`; can fail with `CryptoError`.
198
+ Release this lock when the block exits, including on return or failure.
321
199
 
322
- ### Built-in operations used by this file
200
+ ### `initializeKeys` · [source](keys.md#code) {#symbol-initializeKeys}
323
201
 
324
- - `Map<string, RsaPrivateKey>.get` (`key`: `string`) → `optional RsaPrivateKey`: Read a value by key; an absent key returns null. contains distinguishes an absent key from a stored null.
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
- [Full built-in reference](https://greenpandastudios.github.io/augscript/language-constructs).
204
+ ### Dependencies
329
205
 
330
- ### Shared language rules
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
- See the [language reference](https://greenpandastudios.github.io/augscript/reference) for numeric, equality, ownership, and task rules.
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() returns Settings:
55
- return Settings(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)
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() returns Settings {
62
- return Settings(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)
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
- August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
90
+ ### `Settings` · immutable record · [source](settings.md#code) {#symbol-Settings}
75
91
 
76
- ### In this file
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
- - [`Settings`](settings.md#symbol-Settings) is an immutable record.
79
- - [`settings`](settings.md#symbol-settings) is a function returning `Settings`.
94
+ ### `settings` · [source](settings.md#code) {#symbol-settings}
80
95
 
81
- ### `Settings` {#symbol-Settings}
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) returns Html:
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) returns Html {
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
- August 0.19.0. This document is compiled from checked code with deterministic wording guided by Simplified Technical English.
74
+ ### `Page` · [source](views.md#code) {#symbol-Page}
73
75
 
74
- ### In this file
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
- - [`Page`](views.md#symbol-Page) is a function returning `Html`.
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
+ :::::