aws-iam-ls 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (522) hide show
  1. package/.direnv/bin/nix-direnv-reload +19 -0
  2. package/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc +2156 -0
  3. package/.github/workflows/publish.yml +37 -0
  4. package/.github/workflows/test.yml +16 -0
  5. package/.vscodeignore +17 -0
  6. package/LICENSE +21 -0
  7. package/package.json +53 -0
  8. package/readme.md +25 -0
  9. package/src/data/condition-keys/global.json +362 -0
  10. package/src/data/servicereference/actions.json +1 -0
  11. package/src/data/servicereference/service-principals.json +1 -0
  12. package/src/data/servicereference/services/a2c.json +1 -0
  13. package/src/data/servicereference/services/a4b.json +1 -0
  14. package/src/data/servicereference/services/access-analyzer.json +1 -0
  15. package/src/data/servicereference/services/account.json +1 -0
  16. package/src/data/servicereference/services/acm-pca.json +1 -0
  17. package/src/data/servicereference/services/acm.json +1 -0
  18. package/src/data/servicereference/services/aco-automation.json +1 -0
  19. package/src/data/servicereference/services/action-recommendations.json +1 -0
  20. package/src/data/servicereference/services/activate.json +1 -0
  21. package/src/data/servicereference/services/aidevops.json +1 -0
  22. package/src/data/servicereference/services/aiops.json +1 -0
  23. package/src/data/servicereference/services/airflow-serverless.json +1 -0
  24. package/src/data/servicereference/services/airflow.json +1 -0
  25. package/src/data/servicereference/services/amplify.json +1 -0
  26. package/src/data/servicereference/services/amplifybackend.json +1 -0
  27. package/src/data/servicereference/services/amplifyuibuilder.json +1 -0
  28. package/src/data/servicereference/services/aoss.json +1 -0
  29. package/src/data/servicereference/services/apigateway.json +1 -0
  30. package/src/data/servicereference/services/app-integrations.json +1 -0
  31. package/src/data/servicereference/services/appconfig.json +1 -0
  32. package/src/data/servicereference/services/appfabric.json +1 -0
  33. package/src/data/servicereference/services/appflow.json +1 -0
  34. package/src/data/servicereference/services/application-autoscaling.json +1 -0
  35. package/src/data/servicereference/services/application-signals.json +1 -0
  36. package/src/data/servicereference/services/application-transformation.json +1 -0
  37. package/src/data/servicereference/services/applicationinsights.json +1 -0
  38. package/src/data/servicereference/services/appmesh-preview.json +1 -0
  39. package/src/data/servicereference/services/appmesh.json +1 -0
  40. package/src/data/servicereference/services/apprunner.json +1 -0
  41. package/src/data/servicereference/services/appstream.json +1 -0
  42. package/src/data/servicereference/services/appstudio.json +1 -0
  43. package/src/data/servicereference/services/appsync.json +1 -0
  44. package/src/data/servicereference/services/apptest.json +1 -0
  45. package/src/data/servicereference/services/aps.json +1 -0
  46. package/src/data/servicereference/services/arc-region-switch.json +1 -0
  47. package/src/data/servicereference/services/arc-zonal-shift.json +1 -0
  48. package/src/data/servicereference/services/arsenal.json +1 -0
  49. package/src/data/servicereference/services/artifact.json +1 -0
  50. package/src/data/servicereference/services/athena.json +1 -0
  51. package/src/data/servicereference/services/auditmanager.json +1 -0
  52. package/src/data/servicereference/services/autoscaling-plans.json +1 -0
  53. package/src/data/servicereference/services/autoscaling.json +1 -0
  54. package/src/data/servicereference/services/aws-marketplace-management.json +1 -0
  55. package/src/data/servicereference/services/aws-marketplace.json +1 -0
  56. package/src/data/servicereference/services/aws-mcp.json +1 -0
  57. package/src/data/servicereference/services/aws-portal.json +1 -0
  58. package/src/data/servicereference/services/awsconnector.json +1 -0
  59. package/src/data/servicereference/services/b2bi.json +1 -0
  60. package/src/data/servicereference/services/backup-gateway.json +1 -0
  61. package/src/data/servicereference/services/backup-search.json +1 -0
  62. package/src/data/servicereference/services/backup-storage.json +1 -0
  63. package/src/data/servicereference/services/backup.json +1 -0
  64. package/src/data/servicereference/services/batch.json +1 -0
  65. package/src/data/servicereference/services/bcm-dashboards.json +1 -0
  66. package/src/data/servicereference/services/bcm-data-exports.json +1 -0
  67. package/src/data/servicereference/services/bcm-pricing-calculator.json +1 -0
  68. package/src/data/servicereference/services/bcm-recommended-actions.json +1 -0
  69. package/src/data/servicereference/services/bedrock-agentcore.json +1 -0
  70. package/src/data/servicereference/services/bedrock-mantle.json +1 -0
  71. package/src/data/servicereference/services/bedrock.json +1 -0
  72. package/src/data/servicereference/services/billing.json +1 -0
  73. package/src/data/servicereference/services/billingconductor.json +1 -0
  74. package/src/data/servicereference/services/braket.json +1 -0
  75. package/src/data/servicereference/services/budgets.json +1 -0
  76. package/src/data/servicereference/services/bugbust.json +1 -0
  77. package/src/data/servicereference/services/cases.json +1 -0
  78. package/src/data/servicereference/services/cassandra.json +1 -0
  79. package/src/data/servicereference/services/ce.json +1 -0
  80. package/src/data/servicereference/services/chatbot.json +1 -0
  81. package/src/data/servicereference/services/chime.json +1 -0
  82. package/src/data/servicereference/services/cleanrooms-ml.json +1 -0
  83. package/src/data/servicereference/services/cleanrooms.json +1 -0
  84. package/src/data/servicereference/services/cloud9.json +1 -0
  85. package/src/data/servicereference/services/clouddirectory.json +1 -0
  86. package/src/data/servicereference/services/cloudformation.json +1 -0
  87. package/src/data/servicereference/services/cloudfront-keyvaluestore.json +1 -0
  88. package/src/data/servicereference/services/cloudfront.json +1 -0
  89. package/src/data/servicereference/services/cloudhsm.json +1 -0
  90. package/src/data/servicereference/services/cloudsearch.json +1 -0
  91. package/src/data/servicereference/services/cloudshell.json +1 -0
  92. package/src/data/servicereference/services/cloudtrail-data.json +1 -0
  93. package/src/data/servicereference/services/cloudtrail.json +1 -0
  94. package/src/data/servicereference/services/cloudwatch.json +1 -0
  95. package/src/data/servicereference/services/codeartifact.json +1 -0
  96. package/src/data/servicereference/services/codebuild.json +1 -0
  97. package/src/data/servicereference/services/codecatalyst.json +1 -0
  98. package/src/data/servicereference/services/codecommit.json +1 -0
  99. package/src/data/servicereference/services/codeconnections.json +1 -0
  100. package/src/data/servicereference/services/codedeploy-commands-secure.json +1 -0
  101. package/src/data/servicereference/services/codedeploy.json +1 -0
  102. package/src/data/servicereference/services/codeguru-profiler.json +1 -0
  103. package/src/data/servicereference/services/codeguru-reviewer.json +1 -0
  104. package/src/data/servicereference/services/codeguru-security.json +1 -0
  105. package/src/data/servicereference/services/codeguru.json +1 -0
  106. package/src/data/servicereference/services/codepipeline.json +1 -0
  107. package/src/data/servicereference/services/codestar-connections.json +1 -0
  108. package/src/data/servicereference/services/codestar-notifications.json +1 -0
  109. package/src/data/servicereference/services/codestar.json +1 -0
  110. package/src/data/servicereference/services/codewhisperer.json +1 -0
  111. package/src/data/servicereference/services/cognito-identity.json +1 -0
  112. package/src/data/servicereference/services/cognito-idp.json +1 -0
  113. package/src/data/servicereference/services/cognito-sync.json +1 -0
  114. package/src/data/servicereference/services/comprehend.json +1 -0
  115. package/src/data/servicereference/services/comprehendmedical.json +1 -0
  116. package/src/data/servicereference/services/compute-optimizer.json +1 -0
  117. package/src/data/servicereference/services/config.json +1 -0
  118. package/src/data/servicereference/services/connect-campaigns.json +1 -0
  119. package/src/data/servicereference/services/connect.json +1 -0
  120. package/src/data/servicereference/services/consoleapp.json +1 -0
  121. package/src/data/servicereference/services/consolidatedbilling.json +1 -0
  122. package/src/data/servicereference/services/controlcatalog.json +1 -0
  123. package/src/data/servicereference/services/controltower.json +1 -0
  124. package/src/data/servicereference/services/cost-optimization-hub.json +1 -0
  125. package/src/data/servicereference/services/cur.json +1 -0
  126. package/src/data/servicereference/services/customer-verification.json +1 -0
  127. package/src/data/servicereference/services/databrew.json +1 -0
  128. package/src/data/servicereference/services/dataexchange.json +1 -0
  129. package/src/data/servicereference/services/datapipeline.json +1 -0
  130. package/src/data/servicereference/services/datasync.json +1 -0
  131. package/src/data/servicereference/services/datazone.json +1 -0
  132. package/src/data/servicereference/services/dax.json +1 -0
  133. package/src/data/servicereference/services/dbqms.json +1 -0
  134. package/src/data/servicereference/services/deadline.json +1 -0
  135. package/src/data/servicereference/services/detective.json +1 -0
  136. package/src/data/servicereference/services/devicefarm.json +1 -0
  137. package/src/data/servicereference/services/devops-guru.json +1 -0
  138. package/src/data/servicereference/services/directconnect.json +1 -0
  139. package/src/data/servicereference/services/discovery.json +1 -0
  140. package/src/data/servicereference/services/dlm.json +1 -0
  141. package/src/data/servicereference/services/dms.json +1 -0
  142. package/src/data/servicereference/services/docdb-elastic.json +1 -0
  143. package/src/data/servicereference/services/drs.json +1 -0
  144. package/src/data/servicereference/services/ds-data.json +1 -0
  145. package/src/data/servicereference/services/ds.json +1 -0
  146. package/src/data/servicereference/services/dsql.json +1 -0
  147. package/src/data/servicereference/services/dynamodb.json +1 -0
  148. package/src/data/servicereference/services/ebs.json +1 -0
  149. package/src/data/servicereference/services/ec2-instance-connect.json +1 -0
  150. package/src/data/servicereference/services/ec2.json +1 -0
  151. package/src/data/servicereference/services/ec2messages.json +1 -0
  152. package/src/data/servicereference/services/ecr-public.json +1 -0
  153. package/src/data/servicereference/services/ecr.json +1 -0
  154. package/src/data/servicereference/services/ecs-mcp.json +1 -0
  155. package/src/data/servicereference/services/ecs.json +1 -0
  156. package/src/data/servicereference/services/eks-auth.json +1 -0
  157. package/src/data/servicereference/services/eks-mcp.json +1 -0
  158. package/src/data/servicereference/services/eks.json +1 -0
  159. package/src/data/servicereference/services/elasticache.json +1 -0
  160. package/src/data/servicereference/services/elasticbeanstalk.json +1 -0
  161. package/src/data/servicereference/services/elasticfilesystem.json +1 -0
  162. package/src/data/servicereference/services/elasticloadbalancing.json +1 -0
  163. package/src/data/servicereference/services/elasticmapreduce.json +1 -0
  164. package/src/data/servicereference/services/elastictranscoder.json +1 -0
  165. package/src/data/servicereference/services/elemental-activations.json +1 -0
  166. package/src/data/servicereference/services/elemental-appliances-software.json +1 -0
  167. package/src/data/servicereference/services/elemental-inference.json +1 -0
  168. package/src/data/servicereference/services/elemental-support-cases.json +1 -0
  169. package/src/data/servicereference/services/elemental-support-content.json +1 -0
  170. package/src/data/servicereference/services/emr-containers.json +1 -0
  171. package/src/data/servicereference/services/emr-serverless.json +1 -0
  172. package/src/data/servicereference/services/entityresolution.json +1 -0
  173. package/src/data/servicereference/services/es.json +1 -0
  174. package/src/data/servicereference/services/events.json +1 -0
  175. package/src/data/servicereference/services/evidently.json +1 -0
  176. package/src/data/servicereference/services/evs.json +1 -0
  177. package/src/data/servicereference/services/execute-api.json +1 -0
  178. package/src/data/servicereference/services/finspace-api.json +1 -0
  179. package/src/data/servicereference/services/finspace.json +1 -0
  180. package/src/data/servicereference/services/firehose.json +1 -0
  181. package/src/data/servicereference/services/fis.json +1 -0
  182. package/src/data/servicereference/services/fms.json +1 -0
  183. package/src/data/servicereference/services/forecast.json +1 -0
  184. package/src/data/servicereference/services/frauddetector.json +1 -0
  185. package/src/data/servicereference/services/freertos.json +1 -0
  186. package/src/data/servicereference/services/freetier.json +1 -0
  187. package/src/data/servicereference/services/fsx.json +1 -0
  188. package/src/data/servicereference/services/gamelift.json +1 -0
  189. package/src/data/servicereference/services/gameliftstreams.json +1 -0
  190. package/src/data/servicereference/services/geo-maps.json +1 -0
  191. package/src/data/servicereference/services/geo-places.json +1 -0
  192. package/src/data/servicereference/services/geo-routes.json +1 -0
  193. package/src/data/servicereference/services/geo.json +1 -0
  194. package/src/data/servicereference/services/glacier.json +1 -0
  195. package/src/data/servicereference/services/globalaccelerator.json +1 -0
  196. package/src/data/servicereference/services/glue.json +1 -0
  197. package/src/data/servicereference/services/grafana.json +1 -0
  198. package/src/data/servicereference/services/greengrass.json +1 -0
  199. package/src/data/servicereference/services/groundstation.json +1 -0
  200. package/src/data/servicereference/services/groundtruthlabeling.json +1 -0
  201. package/src/data/servicereference/services/guardduty.json +1 -0
  202. package/src/data/servicereference/services/health-agent.json +1 -0
  203. package/src/data/servicereference/services/health.json +1 -0
  204. package/src/data/servicereference/services/healthlake.json +1 -0
  205. package/src/data/servicereference/services/honeycode.json +1 -0
  206. package/src/data/servicereference/services/iam.json +1 -0
  207. package/src/data/servicereference/services/identity-sync.json +1 -0
  208. package/src/data/servicereference/services/identitystore-auth.json +1 -0
  209. package/src/data/servicereference/services/identitystore.json +1 -0
  210. package/src/data/servicereference/services/imagebuilder.json +1 -0
  211. package/src/data/servicereference/services/importexport.json +1 -0
  212. package/src/data/servicereference/services/inspector-scan.json +1 -0
  213. package/src/data/servicereference/services/inspector.json +1 -0
  214. package/src/data/servicereference/services/inspector2-telemetry.json +1 -0
  215. package/src/data/servicereference/services/inspector2.json +1 -0
  216. package/src/data/servicereference/services/interconnect.json +1 -0
  217. package/src/data/servicereference/services/internetmonitor.json +1 -0
  218. package/src/data/servicereference/services/invoicing.json +1 -0
  219. package/src/data/servicereference/services/iot-device-tester.json +1 -0
  220. package/src/data/servicereference/services/iot.json +1 -0
  221. package/src/data/servicereference/services/iotanalytics.json +1 -0
  222. package/src/data/servicereference/services/iotdeviceadvisor.json +1 -0
  223. package/src/data/servicereference/services/iotevents.json +1 -0
  224. package/src/data/servicereference/services/iotfleethub.json +1 -0
  225. package/src/data/servicereference/services/iotfleetwise.json +1 -0
  226. package/src/data/servicereference/services/iotjobsdata.json +1 -0
  227. package/src/data/servicereference/services/iotmanagedintegrations.json +1 -0
  228. package/src/data/servicereference/services/iotsitewise.json +1 -0
  229. package/src/data/servicereference/services/iottwinmaker.json +1 -0
  230. package/src/data/servicereference/services/iotwireless.json +1 -0
  231. package/src/data/servicereference/services/iq-permission.json +1 -0
  232. package/src/data/servicereference/services/iq.json +1 -0
  233. package/src/data/servicereference/services/ivs.json +1 -0
  234. package/src/data/servicereference/services/ivschat.json +1 -0
  235. package/src/data/servicereference/services/kafka-cluster.json +1 -0
  236. package/src/data/servicereference/services/kafka.json +1 -0
  237. package/src/data/servicereference/services/kafkaconnect.json +1 -0
  238. package/src/data/servicereference/services/kendra-ranking.json +1 -0
  239. package/src/data/servicereference/services/kendra.json +1 -0
  240. package/src/data/servicereference/services/kinesis.json +1 -0
  241. package/src/data/servicereference/services/kinesisanalytics.json +1 -0
  242. package/src/data/servicereference/services/kinesisvideo.json +1 -0
  243. package/src/data/servicereference/services/kms.json +1 -0
  244. package/src/data/servicereference/services/lakeformation.json +1 -0
  245. package/src/data/servicereference/services/lambda.json +1 -0
  246. package/src/data/servicereference/services/launchwizard.json +1 -0
  247. package/src/data/servicereference/services/lex.json +1 -0
  248. package/src/data/servicereference/services/license-manager-linux-subscriptions.json +1 -0
  249. package/src/data/servicereference/services/license-manager-user-subscriptions.json +1 -0
  250. package/src/data/servicereference/services/license-manager.json +1 -0
  251. package/src/data/servicereference/services/lightsail.json +1 -0
  252. package/src/data/servicereference/services/logs.json +1 -0
  253. package/src/data/servicereference/services/lookoutequipment.json +1 -0
  254. package/src/data/servicereference/services/lookoutmetrics.json +1 -0
  255. package/src/data/servicereference/services/lookoutvision.json +1 -0
  256. package/src/data/servicereference/services/m2.json +1 -0
  257. package/src/data/servicereference/services/machinelearning.json +1 -0
  258. package/src/data/servicereference/services/macie2.json +1 -0
  259. package/src/data/servicereference/services/managedblockchain-query.json +1 -0
  260. package/src/data/servicereference/services/managedblockchain.json +1 -0
  261. package/src/data/servicereference/services/mapcredits.json +1 -0
  262. package/src/data/servicereference/services/marketplacecommerceanalytics.json +1 -0
  263. package/src/data/servicereference/services/mechanicalturk.json +1 -0
  264. package/src/data/servicereference/services/mediaconnect.json +1 -0
  265. package/src/data/servicereference/services/mediaconvert.json +1 -0
  266. package/src/data/servicereference/services/mediaimport.json +1 -0
  267. package/src/data/servicereference/services/medialive.json +1 -0
  268. package/src/data/servicereference/services/mediapackage-vod.json +1 -0
  269. package/src/data/servicereference/services/mediapackage.json +1 -0
  270. package/src/data/servicereference/services/mediapackagev2.json +1 -0
  271. package/src/data/servicereference/services/mediastore.json +1 -0
  272. package/src/data/servicereference/services/mediatailor.json +1 -0
  273. package/src/data/servicereference/services/medical-imaging.json +1 -0
  274. package/src/data/servicereference/services/memorydb.json +1 -0
  275. package/src/data/servicereference/services/mgh.json +1 -0
  276. package/src/data/servicereference/services/mgn.json +1 -0
  277. package/src/data/servicereference/services/migrationhub-orchestrator.json +1 -0
  278. package/src/data/servicereference/services/migrationhub-strategy.json +1 -0
  279. package/src/data/servicereference/services/mobileanalytics.json +1 -0
  280. package/src/data/servicereference/services/mobiletargeting.json +1 -0
  281. package/src/data/servicereference/services/monitron.json +1 -0
  282. package/src/data/servicereference/services/mpa.json +1 -0
  283. package/src/data/servicereference/services/mq.json +1 -0
  284. package/src/data/servicereference/services/neptune-db.json +1 -0
  285. package/src/data/servicereference/services/neptune-graph.json +1 -0
  286. package/src/data/servicereference/services/network-firewall.json +1 -0
  287. package/src/data/servicereference/services/network-security-director.json +1 -0
  288. package/src/data/servicereference/services/networkflowmonitor.json +1 -0
  289. package/src/data/servicereference/services/networkmanager-chat.json +1 -0
  290. package/src/data/servicereference/services/networkmanager.json +1 -0
  291. package/src/data/servicereference/services/networkmonitor.json +1 -0
  292. package/src/data/servicereference/services/nimble.json +1 -0
  293. package/src/data/servicereference/services/notifications-contacts.json +1 -0
  294. package/src/data/servicereference/services/notifications.json +1 -0
  295. package/src/data/servicereference/services/nova-act.json +1 -0
  296. package/src/data/servicereference/services/oam.json +1 -0
  297. package/src/data/servicereference/services/observabilityadmin.json +1 -0
  298. package/src/data/servicereference/services/odb.json +1 -0
  299. package/src/data/servicereference/services/omics.json +1 -0
  300. package/src/data/servicereference/services/one.json +1 -0
  301. package/src/data/servicereference/services/opensearch.json +1 -0
  302. package/src/data/servicereference/services/opsworks-cm.json +1 -0
  303. package/src/data/servicereference/services/opsworks.json +1 -0
  304. package/src/data/servicereference/services/organizations.json +1 -0
  305. package/src/data/servicereference/services/osis.json +1 -0
  306. package/src/data/servicereference/services/outposts.json +1 -0
  307. package/src/data/servicereference/services/panorama.json +1 -0
  308. package/src/data/servicereference/services/partnercentral-account-management.json +1 -0
  309. package/src/data/servicereference/services/partnercentral.json +1 -0
  310. package/src/data/servicereference/services/payment-cryptography.json +1 -0
  311. package/src/data/servicereference/services/payments.json +1 -0
  312. package/src/data/servicereference/services/pca-connector-ad.json +1 -0
  313. package/src/data/servicereference/services/pca-connector-scep.json +1 -0
  314. package/src/data/servicereference/services/pcs.json +1 -0
  315. package/src/data/servicereference/services/personalize.json +1 -0
  316. package/src/data/servicereference/services/pi.json +1 -0
  317. package/src/data/servicereference/services/pipes.json +1 -0
  318. package/src/data/servicereference/services/polly.json +1 -0
  319. package/src/data/servicereference/services/pricing.json +1 -0
  320. package/src/data/servicereference/services/pricingplanmanager.json +1 -0
  321. package/src/data/servicereference/services/private-networks.json +1 -0
  322. package/src/data/servicereference/services/profile.json +1 -0
  323. package/src/data/servicereference/services/proton.json +1 -0
  324. package/src/data/servicereference/services/purchase-orders.json +1 -0
  325. package/src/data/servicereference/services/q.json +1 -0
  326. package/src/data/servicereference/services/qapps.json +1 -0
  327. package/src/data/servicereference/services/qbusiness.json +1 -0
  328. package/src/data/servicereference/services/qdeveloper.json +1 -0
  329. package/src/data/servicereference/services/qldb.json +1 -0
  330. package/src/data/servicereference/services/quicksight.json +1 -0
  331. package/src/data/servicereference/services/ram.json +1 -0
  332. package/src/data/servicereference/services/rbin.json +1 -0
  333. package/src/data/servicereference/services/rds-data.json +1 -0
  334. package/src/data/servicereference/services/rds-db.json +1 -0
  335. package/src/data/servicereference/services/rds.json +1 -0
  336. package/src/data/servicereference/services/redshift-data.json +1 -0
  337. package/src/data/servicereference/services/redshift-serverless.json +1 -0
  338. package/src/data/servicereference/services/redshift.json +1 -0
  339. package/src/data/servicereference/services/refactor-spaces.json +1 -0
  340. package/src/data/servicereference/services/rekognition.json +1 -0
  341. package/src/data/servicereference/services/repostspace.json +1 -0
  342. package/src/data/servicereference/services/resiliencehub.json +1 -0
  343. package/src/data/servicereference/services/resource-explorer-2.json +1 -0
  344. package/src/data/servicereference/services/resource-explorer.json +1 -0
  345. package/src/data/servicereference/services/resource-groups.json +1 -0
  346. package/src/data/servicereference/services/rhelkb.json +1 -0
  347. package/src/data/servicereference/services/robomaker.json +1 -0
  348. package/src/data/servicereference/services/rolesanywhere.json +1 -0
  349. package/src/data/servicereference/services/route53-recovery-cluster.json +1 -0
  350. package/src/data/servicereference/services/route53-recovery-control-config.json +1 -0
  351. package/src/data/servicereference/services/route53-recovery-readiness.json +1 -0
  352. package/src/data/servicereference/services/route53.json +1 -0
  353. package/src/data/servicereference/services/route53domains.json +1 -0
  354. package/src/data/servicereference/services/route53globalresolver.json +1 -0
  355. package/src/data/servicereference/services/route53profiles.json +1 -0
  356. package/src/data/servicereference/services/route53resolver.json +1 -0
  357. package/src/data/servicereference/services/rtbfabric.json +1 -0
  358. package/src/data/servicereference/services/rum.json +1 -0
  359. package/src/data/servicereference/services/s3-object-lambda.json +1 -0
  360. package/src/data/servicereference/services/s3-outposts.json +1 -0
  361. package/src/data/servicereference/services/s3.json +1 -0
  362. package/src/data/servicereference/services/s3express.json +1 -0
  363. package/src/data/servicereference/services/s3tables.json +1 -0
  364. package/src/data/servicereference/services/s3vectors.json +1 -0
  365. package/src/data/servicereference/services/sagemaker-data-science-assistant.json +1 -0
  366. package/src/data/servicereference/services/sagemaker-geospatial.json +1 -0
  367. package/src/data/servicereference/services/sagemaker-mlflow.json +1 -0
  368. package/src/data/servicereference/services/sagemaker-unified-studio-mcp.json +1 -0
  369. package/src/data/servicereference/services/sagemaker.json +1 -0
  370. package/src/data/servicereference/services/savingsplans.json +1 -0
  371. package/src/data/servicereference/services/scheduler.json +1 -0
  372. package/src/data/servicereference/services/schemas.json +1 -0
  373. package/src/data/servicereference/services/scn.json +1 -0
  374. package/src/data/servicereference/services/sdb.json +1 -0
  375. package/src/data/servicereference/services/secretsmanager.json +1 -0
  376. package/src/data/servicereference/services/security-ir.json +1 -0
  377. package/src/data/servicereference/services/securityagent.json +1 -0
  378. package/src/data/servicereference/services/securityhub.json +1 -0
  379. package/src/data/servicereference/services/securitylake.json +1 -0
  380. package/src/data/servicereference/services/serverlessrepo.json +1 -0
  381. package/src/data/servicereference/services/servicecatalog.json +1 -0
  382. package/src/data/servicereference/services/servicediscovery.json +1 -0
  383. package/src/data/servicereference/services/serviceextract.json +1 -0
  384. package/src/data/servicereference/services/servicequotas.json +1 -0
  385. package/src/data/servicereference/services/ses.json +1 -0
  386. package/src/data/servicereference/services/shield.json +1 -0
  387. package/src/data/servicereference/services/signer.json +1 -0
  388. package/src/data/servicereference/services/signin.json +1 -0
  389. package/src/data/servicereference/services/simspaceweaver.json +1 -0
  390. package/src/data/servicereference/services/sms-voice.json +1 -0
  391. package/src/data/servicereference/services/sms.json +1 -0
  392. package/src/data/servicereference/services/snow-device-management.json +1 -0
  393. package/src/data/servicereference/services/snowball.json +1 -0
  394. package/src/data/servicereference/services/sns.json +1 -0
  395. package/src/data/servicereference/services/social-messaging.json +1 -0
  396. package/src/data/servicereference/services/sqlworkbench.json +1 -0
  397. package/src/data/servicereference/services/sqs.json +1 -0
  398. package/src/data/servicereference/services/ssm-contacts.json +1 -0
  399. package/src/data/servicereference/services/ssm-guiconnect.json +1 -0
  400. package/src/data/servicereference/services/ssm-incidents.json +1 -0
  401. package/src/data/servicereference/services/ssm-quicksetup.json +1 -0
  402. package/src/data/servicereference/services/ssm-sap.json +1 -0
  403. package/src/data/servicereference/services/ssm.json +1 -0
  404. package/src/data/servicereference/services/ssmmessages.json +1 -0
  405. package/src/data/servicereference/services/sso-directory.json +1 -0
  406. package/src/data/servicereference/services/sso-oauth.json +1 -0
  407. package/src/data/servicereference/services/sso.json +1 -0
  408. package/src/data/servicereference/services/states.json +1 -0
  409. package/src/data/servicereference/services/storagegateway.json +1 -0
  410. package/src/data/servicereference/services/sts.json +1 -0
  411. package/src/data/servicereference/services/support-console.json +1 -0
  412. package/src/data/servicereference/services/support.json +1 -0
  413. package/src/data/servicereference/services/supportapp.json +1 -0
  414. package/src/data/servicereference/services/supportplans.json +1 -0
  415. package/src/data/servicereference/services/sustainability.json +1 -0
  416. package/src/data/servicereference/services/swf.json +1 -0
  417. package/src/data/servicereference/services/synthetics.json +1 -0
  418. package/src/data/servicereference/services/tag.json +1 -0
  419. package/src/data/servicereference/services/tax.json +1 -0
  420. package/src/data/servicereference/services/textract.json +1 -0
  421. package/src/data/servicereference/services/thinclient.json +1 -0
  422. package/src/data/servicereference/services/timestream-influxdb.json +1 -0
  423. package/src/data/servicereference/services/timestream.json +1 -0
  424. package/src/data/servicereference/services/tiros.json +1 -0
  425. package/src/data/servicereference/services/tnb.json +1 -0
  426. package/src/data/servicereference/services/transcribe.json +1 -0
  427. package/src/data/servicereference/services/transfer.json +1 -0
  428. package/src/data/servicereference/services/transform-custom.json +1 -0
  429. package/src/data/servicereference/services/transform.json +1 -0
  430. package/src/data/servicereference/services/translate.json +1 -0
  431. package/src/data/servicereference/services/trustedadvisor.json +1 -0
  432. package/src/data/servicereference/services/ts.json +1 -0
  433. package/src/data/servicereference/services/user-subscriptions.json +1 -0
  434. package/src/data/servicereference/services/uxc.json +1 -0
  435. package/src/data/servicereference/services/vendor-insights.json +1 -0
  436. package/src/data/servicereference/services/verified-access.json +1 -0
  437. package/src/data/servicereference/services/verifiedpermissions.json +1 -0
  438. package/src/data/servicereference/services/voiceid.json +1 -0
  439. package/src/data/servicereference/services/vpc-lattice-svcs.json +1 -0
  440. package/src/data/servicereference/services/vpc-lattice.json +1 -0
  441. package/src/data/servicereference/services/vpce.json +1 -0
  442. package/src/data/servicereference/services/waf-regional.json +1 -0
  443. package/src/data/servicereference/services/waf.json +1 -0
  444. package/src/data/servicereference/services/wafv2.json +1 -0
  445. package/src/data/servicereference/services/wam.json +1 -0
  446. package/src/data/servicereference/services/wellarchitected.json +1 -0
  447. package/src/data/servicereference/services/wickr.json +1 -0
  448. package/src/data/servicereference/services/wisdom.json +1 -0
  449. package/src/data/servicereference/services/workdocs.json +1 -0
  450. package/src/data/servicereference/services/worklink.json +1 -0
  451. package/src/data/servicereference/services/workmail.json +1 -0
  452. package/src/data/servicereference/services/workmailmessageflow.json +1 -0
  453. package/src/data/servicereference/services/workspaces-instances.json +1 -0
  454. package/src/data/servicereference/services/workspaces-web.json +1 -0
  455. package/src/data/servicereference/services/workspaces.json +1 -0
  456. package/src/data/servicereference/services/xray.json +1 -0
  457. package/src/data/servicereference/services.json +1 -0
  458. package/src/extension.d.ts +3 -0
  459. package/src/extension.js +23 -0
  460. package/src/grammars/tree-sitter-hcl.wasm +0 -0
  461. package/src/grammars/tree-sitter-json.wasm +0 -0
  462. package/src/grammars/tree-sitter-yaml.wasm +0 -0
  463. package/src/handlers/completion/action-value.d.ts +4 -0
  464. package/src/handlers/completion/action-value.js +46 -0
  465. package/src/handlers/completion/condition-block.d.ts +4 -0
  466. package/src/handlers/completion/condition-block.js +31 -0
  467. package/src/handlers/completion/condition-key.d.ts +4 -0
  468. package/src/handlers/completion/condition-key.js +80 -0
  469. package/src/handlers/completion/condition-operator.d.ts +4 -0
  470. package/src/handlers/completion/condition-operator.js +22 -0
  471. package/src/handlers/completion/effect-value.d.ts +4 -0
  472. package/src/handlers/completion/effect-value.js +14 -0
  473. package/src/handlers/completion/index.d.ts +14 -0
  474. package/src/handlers/completion/index.js +96 -0
  475. package/src/handlers/completion/principal-block-identifier.d.ts +4 -0
  476. package/src/handlers/completion/principal-block-identifier.js +4 -0
  477. package/src/handlers/completion/principal-block-type.d.ts +4 -0
  478. package/src/handlers/completion/principal-block-type.js +24 -0
  479. package/src/handlers/completion/principal-block.d.ts +4 -0
  480. package/src/handlers/completion/principal-block.js +28 -0
  481. package/src/handlers/completion/principal-identifier-completions.d.ts +2 -0
  482. package/src/handlers/completion/principal-identifier-completions.js +131 -0
  483. package/src/handlers/completion/principal-type.d.ts +4 -0
  484. package/src/handlers/completion/principal-type.js +23 -0
  485. package/src/handlers/completion/principal-typed-value.d.ts +4 -0
  486. package/src/handlers/completion/principal-typed-value.js +4 -0
  487. package/src/handlers/completion/principal-value.d.ts +4 -0
  488. package/src/handlers/completion/principal-value.js +18 -0
  489. package/src/handlers/completion/resource-value.d.ts +4 -0
  490. package/src/handlers/completion/resource-value.js +144 -0
  491. package/src/handlers/completion/statement-block.d.ts +10 -0
  492. package/src/handlers/completion/statement-block.js +51 -0
  493. package/src/handlers/completion/statement-key.d.ts +4 -0
  494. package/src/handlers/completion/statement-key.js +41 -0
  495. package/src/lib/iam-policy/condition-operators.d.ts +317 -0
  496. package/src/lib/iam-policy/condition-operators.js +129 -0
  497. package/src/lib/iam-policy/location.d.ts +71 -0
  498. package/src/lib/iam-policy/location.js +82 -0
  499. package/src/lib/iam-policy/partitions.d.ts +116 -0
  500. package/src/lib/iam-policy/partitions.js +51 -0
  501. package/src/lib/iam-policy/principals.d.ts +21 -0
  502. package/src/lib/iam-policy/principals.js +37 -0
  503. package/src/lib/iam-policy/reference/services.d.ts +22 -0
  504. package/src/lib/iam-policy/reference/services.js +99 -0
  505. package/src/lib/iam-policy/reference/types.d.ts +71 -0
  506. package/src/lib/iam-policy/reference/types.js +1 -0
  507. package/src/lib/iam-policy/statement-keys.d.ts +8 -0
  508. package/src/lib/iam-policy/statement-keys.js +159 -0
  509. package/src/lib/iam-policy/wildcard.d.ts +2 -0
  510. package/src/lib/iam-policy/wildcard.js +14 -0
  511. package/src/lib/treesitter/base.d.ts +35 -0
  512. package/src/lib/treesitter/base.js +50 -0
  513. package/src/lib/treesitter/hcl.d.ts +9 -0
  514. package/src/lib/treesitter/hcl.js +888 -0
  515. package/src/lib/treesitter/json.d.ts +9 -0
  516. package/src/lib/treesitter/json.js +376 -0
  517. package/src/lib/treesitter/manager.d.ts +9 -0
  518. package/src/lib/treesitter/manager.js +66 -0
  519. package/src/lib/treesitter/yaml.d.ts +9 -0
  520. package/src/lib/treesitter/yaml.js +878 -0
  521. package/src/server.d.ts +2 -0
  522. package/src/server.js +26 -0
@@ -0,0 +1,22 @@
1
+ import { CompletionItemKind, MarkupKind } from 'vscode-languageserver';
2
+ import { conditionOperators } from "../../lib/iam-policy/condition-operators.js";
3
+ export function completeConditionOperator(location, context) {
4
+ const statement = context.handler.getStatementContext(context.uri, context.position);
5
+ const existingOperators = Object.keys(statement?.Condition ?? {});
6
+ const items = [];
7
+ for (const [name, operator] of Object.entries(conditionOperators)) {
8
+ if (existingOperators.includes(name))
9
+ continue;
10
+ if (location.partial && !name.toLowerCase().startsWith(location.partial.toLowerCase()))
11
+ continue;
12
+ items.push({
13
+ label: name,
14
+ kind: CompletionItemKind.Operator,
15
+ documentation: {
16
+ kind: MarkupKind.Markdown,
17
+ value: operator.description,
18
+ },
19
+ });
20
+ }
21
+ return { items, isIncomplete: false };
22
+ }
@@ -0,0 +1,4 @@
1
+ import type { CompletionList } from 'vscode-languageserver';
2
+ import type { EffectValueLocation } from '../../lib/iam-policy/location.ts';
3
+ import type { CompletionContext } from './index.ts';
4
+ export declare function completeEffectValue(location: EffectValueLocation, _context: CompletionContext): CompletionList;
@@ -0,0 +1,14 @@
1
+ import { CompletionItemKind } from 'vscode-languageserver';
2
+ export function completeEffectValue(location, _context) {
3
+ const potentialLabels = ['Allow', 'Deny'];
4
+ const items = [];
5
+ for (const label of potentialLabels) {
6
+ if (location.partial && !label.toLowerCase().startsWith(location.partial.toLowerCase()))
7
+ continue;
8
+ items.push({
9
+ label,
10
+ kind: CompletionItemKind.Enum,
11
+ });
12
+ }
13
+ return { items, isIncomplete: false };
14
+ }
@@ -0,0 +1,14 @@
1
+ import type { CompletionList, CompletionParams } from 'vscode-languageserver';
2
+ import type { TextDocuments } from 'vscode-languageserver/node.js';
3
+ import type { TextDocument } from 'vscode-languageserver-textdocument';
4
+ import type { TreeBase } from '../../lib/treesitter/base.ts';
5
+ import type { TreeManager } from '../../lib/treesitter/manager.ts';
6
+ export type CompletionContext = {
7
+ handler: TreeBase;
8
+ uri: string;
9
+ position: {
10
+ line: number;
11
+ column: number;
12
+ };
13
+ };
14
+ export declare function handleCompletionRequest(params: CompletionParams, _documents: TextDocuments<TextDocument>, treeManager: TreeManager): Promise<CompletionList>;
@@ -0,0 +1,96 @@
1
+ import { InsertTextFormat } from 'vscode-languageserver';
2
+ import { resolvePolicyLocation } from "../../lib/iam-policy/location.js";
3
+ import { completeActionValue } from "./action-value.js";
4
+ import { completeConditionBlock } from "./condition-block.js";
5
+ import { completeConditionKey } from "./condition-key.js";
6
+ import { completeConditionOperator } from "./condition-operator.js";
7
+ import { completeEffectValue } from "./effect-value.js";
8
+ import { completePrincipalBlock } from "./principal-block.js";
9
+ import { completePrincipalBlockIdentifier } from "./principal-block-identifier.js";
10
+ import { completePrincipalBlockType } from "./principal-block-type.js";
11
+ import { completePrincipalType } from "./principal-type.js";
12
+ import { completePrincipalTypedValue } from "./principal-typed-value.js";
13
+ import { completePrincipalValue } from "./principal-value.js";
14
+ import { completeResourceValue } from "./resource-value.js";
15
+ import { completeStatementBlock } from "./statement-block.js";
16
+ import { completeStatementKey } from "./statement-key.js";
17
+ const emptyResult = { items: [], isIncomplete: false };
18
+ export async function handleCompletionRequest(params, _documents, treeManager) {
19
+ const handler = treeManager.getLanguageHandler(params.textDocument.uri);
20
+ if (!handler)
21
+ return emptyResult;
22
+ const position = { line: params.position.line, column: params.position.character };
23
+ const cursorContext = handler.getCursorContext(params.textDocument.uri, position);
24
+ if (!cursorContext)
25
+ return emptyResult;
26
+ const location = resolvePolicyLocation(cursorContext);
27
+ const result = handleLocationCompletion(location, {
28
+ handler,
29
+ uri: params.textDocument.uri,
30
+ position,
31
+ });
32
+ result.items = result.items.map(toSnippet);
33
+ return result;
34
+ }
35
+ function handleLocationCompletion(location, context) {
36
+ if (location.type === 'statement-key') {
37
+ return completeStatementKey(location, context);
38
+ }
39
+ else if (location.type === 'statement-block') {
40
+ return completeStatementBlock(location, context);
41
+ }
42
+ else if (location.type === 'effect-value') {
43
+ return completeEffectValue(location, context);
44
+ }
45
+ else if (location.type === 'action-value') {
46
+ return completeActionValue(location, context);
47
+ }
48
+ else if (location.type === 'resource-value') {
49
+ return completeResourceValue(location, context);
50
+ }
51
+ else if (location.type === 'principal-value') {
52
+ return completePrincipalValue(location, context);
53
+ }
54
+ else if (location.type === 'principal-type') {
55
+ return completePrincipalType(location, context);
56
+ }
57
+ else if (location.type === 'principal-block') {
58
+ return completePrincipalBlock(location, context);
59
+ }
60
+ else if (location.type === 'principal-block-identifier') {
61
+ return completePrincipalBlockIdentifier(location, context);
62
+ }
63
+ else if (location.type === 'principal-block-type') {
64
+ return completePrincipalBlockType(location, context);
65
+ }
66
+ else if (location.type === 'principal-typed-value') {
67
+ return completePrincipalTypedValue(location, context);
68
+ }
69
+ else if (location.type === 'condition-block') {
70
+ return completeConditionBlock(location, context);
71
+ }
72
+ else if (location.type === 'condition-key') {
73
+ return completeConditionKey(location, context);
74
+ }
75
+ else if (location.type === 'condition-operator') {
76
+ return completeConditionOperator(location, context);
77
+ }
78
+ return emptyResult;
79
+ }
80
+ function toSnippet(item) {
81
+ const text = item.insertText ?? item.label;
82
+ const snippetPlaceholderPattern = /\$\{([^}]+)\}/g;
83
+ if (!snippetPlaceholderPattern.test(text))
84
+ return item;
85
+ let tabStop = 0;
86
+ const seen = new Map();
87
+ const snippetText = text.replace(snippetPlaceholderPattern, (_match, name) => {
88
+ if (!seen.has(name)) {
89
+ seen.set(name, ++tabStop);
90
+ }
91
+ return `\${${seen.get(name)}:${name}}`;
92
+ });
93
+ item.insertText = snippetText;
94
+ item.insertTextFormat = InsertTextFormat.Snippet;
95
+ return item;
96
+ }
@@ -0,0 +1,4 @@
1
+ import type { CompletionList } from 'vscode-languageserver';
2
+ import type { PrincipalBlockIdentifierLocation } from '../../lib/iam-policy/location.ts';
3
+ import type { CompletionContext } from './index.ts';
4
+ export declare function completePrincipalBlockIdentifier(location: PrincipalBlockIdentifierLocation, _context: CompletionContext): CompletionList;
@@ -0,0 +1,4 @@
1
+ import { completePrincipalIdentifier } from "./principal-identifier-completions.js";
2
+ export function completePrincipalBlockIdentifier(location, _context) {
3
+ return completePrincipalIdentifier(location.principalType, location.partial);
4
+ }
@@ -0,0 +1,4 @@
1
+ import type { CompletionList } from 'vscode-languageserver';
2
+ import type { PrincipalBlockTypeLocation } from '../../lib/iam-policy/location.ts';
3
+ import type { CompletionContext } from './index.ts';
4
+ export declare function completePrincipalBlockType(location: PrincipalBlockTypeLocation, _context: CompletionContext): CompletionList;
@@ -0,0 +1,24 @@
1
+ import { CompletionItemKind } from 'vscode-languageserver';
2
+ import { principalTypes } from "../../lib/iam-policy/principals.js";
3
+ export function completePrincipalBlockType(location, _context) {
4
+ const items = [];
5
+ for (const [_id, principalType] of Object.entries(Object.assign({}, principalTypes, {
6
+ '*': {
7
+ value: '*',
8
+ description: 'Public Unauthenticated Access',
9
+ patterns: ['*'],
10
+ },
11
+ }))) {
12
+ if (location.partial && !principalType.value.toLowerCase().startsWith(location.partial.toLowerCase()))
13
+ continue;
14
+ items.push({
15
+ label: principalType.value,
16
+ kind: CompletionItemKind.Enum,
17
+ documentation: {
18
+ kind: 'markdown',
19
+ value: principalType.description,
20
+ },
21
+ });
22
+ }
23
+ return { items, isIncomplete: false };
24
+ }
@@ -0,0 +1,4 @@
1
+ import type { CompletionList } from 'vscode-languageserver';
2
+ import type { PrincipalBlockLocation } from '../../lib/iam-policy/location.ts';
3
+ import type { CompletionContext } from './index.ts';
4
+ export declare function completePrincipalBlock(location: PrincipalBlockLocation, context: CompletionContext): CompletionList;
@@ -0,0 +1,28 @@
1
+ import { CompletionItemKind, MarkupKind } from 'vscode-languageserver';
2
+ const principalBlockAttributes = {
3
+ type: {
4
+ description: 'The type of principal. Valid values: `*`, `AWS`, `Service`, `Federated`, `CanonicalUser`.',
5
+ },
6
+ identifiers: {
7
+ description: 'List of principal identifiers. The format depends on the `type` attribute.',
8
+ },
9
+ };
10
+ export function completePrincipalBlock(location, context) {
11
+ const siblingKeys = context.handler.getSiblingKeys(context.uri, context.position);
12
+ const items = [];
13
+ for (const [name, attr] of Object.entries(principalBlockAttributes)) {
14
+ if (siblingKeys.includes(name))
15
+ continue;
16
+ if (location.partial && !name.toLowerCase().startsWith(location.partial.toLowerCase()))
17
+ continue;
18
+ items.push({
19
+ label: name,
20
+ kind: CompletionItemKind.Field,
21
+ documentation: {
22
+ kind: MarkupKind.Markdown,
23
+ value: attr.description,
24
+ },
25
+ });
26
+ }
27
+ return { items, isIncomplete: false };
28
+ }
@@ -0,0 +1,2 @@
1
+ import type { CompletionList } from 'vscode-languageserver';
2
+ export declare function completePrincipalIdentifier(principalType: string | null, partial: string): CompletionList;
@@ -0,0 +1,131 @@
1
+ import { CompletionItemKind } from 'vscode-languageserver';
2
+ import { partitions } from "../../lib/iam-policy/partitions.js";
3
+ import { principalTypes } from "../../lib/iam-policy/principals.js";
4
+ const PARTITION_PLACEHOLDER = `\${Partition}`;
5
+ const REGION_PLACEHOLDER = `\${Region}`;
6
+ const ACCOUNT_PLACEHOLDER = `\${Account}`;
7
+ function getPatternsForType(principalType) {
8
+ switch (principalType) {
9
+ case '*':
10
+ return { arn: [], nonArn: ['*'] };
11
+ case 'AWS':
12
+ return {
13
+ arn: principalTypes.aws.patterns.filter((pattern) => pattern.startsWith('arn:')),
14
+ nonArn: principalTypes.aws.patterns.filter((pattern) => !pattern.startsWith('arn:')),
15
+ };
16
+ case 'Federated':
17
+ return {
18
+ arn: principalTypes.federated.patterns.filter((pattern) => pattern.startsWith('arn:')),
19
+ nonArn: principalTypes.federated.patterns.filter((pattern) => !pattern.startsWith('arn:')),
20
+ };
21
+ case 'Service':
22
+ return { arn: [], nonArn: [...principalTypes.service.patterns] };
23
+ default:
24
+ return null;
25
+ }
26
+ }
27
+ export function completePrincipalIdentifier(principalType, partial) {
28
+ if (!principalType)
29
+ return { items: [], isIncomplete: false };
30
+ const config = getPatternsForType(principalType);
31
+ if (!config)
32
+ return { items: [], isIncomplete: false };
33
+ const items = [];
34
+ if (!partial) {
35
+ for (const pattern of [...config.nonArn, ...config.arn]) {
36
+ items.push({ label: pattern, kind: CompletionItemKind.Value });
37
+ }
38
+ return { items, isIncomplete: false };
39
+ }
40
+ const parts = partial.split(':');
41
+ if (parts.length === 1) {
42
+ if (config.arn.length > 0 && 'arn'.startsWith(partial.toLowerCase())) {
43
+ items.push({ label: 'arn', kind: CompletionItemKind.Constant });
44
+ }
45
+ for (const pattern of config.nonArn) {
46
+ if (pattern.toLowerCase().startsWith(partial.toLowerCase())) {
47
+ items.push({ label: pattern, kind: CompletionItemKind.Value });
48
+ }
49
+ }
50
+ }
51
+ else if (parts.length === 2) {
52
+ for (const [id, partition] of Object.entries(partitions)) {
53
+ const prefix = `${parts[0]}:${id}`;
54
+ if (prefix.toLowerCase().startsWith(partial.toLowerCase())) {
55
+ items.push({
56
+ label: id,
57
+ kind: CompletionItemKind.Enum,
58
+ documentation: { kind: 'markdown', value: partition.name },
59
+ });
60
+ }
61
+ }
62
+ }
63
+ else if (parts.length === 3) {
64
+ const services = [...new Set(config.arn.map((pattern) => pattern.split(':')[2]))];
65
+ for (const service of services) {
66
+ const prefix = `${parts[0]}:${parts[1]}:${service}`;
67
+ if (prefix.toLowerCase().startsWith(partial.toLowerCase())) {
68
+ items.push({ label: service, kind: CompletionItemKind.Enum });
69
+ }
70
+ }
71
+ }
72
+ else if (parts.length === 4) {
73
+ const service = parts[2];
74
+ const serviceArns = config.arn.filter((pattern) => pattern.split(':')[2] === service);
75
+ const hasRegionArn = serviceArns.some((pattern) => pattern.split(':')[3].length > 0);
76
+ if (!hasRegionArn) {
77
+ items.push({
78
+ label: ':',
79
+ kind: CompletionItemKind.Enum,
80
+ documentation: { kind: 'markdown', value: 'No region component for this service' },
81
+ });
82
+ }
83
+ else {
84
+ const partition = parts[1] === 'aws' || parts[1] === 'aws-us-gov' || parts[1] === 'aws-cn'
85
+ ? partitions[parts[1]]
86
+ : partitions.aws;
87
+ for (const region of partition.regions) {
88
+ const prefix = `${parts[0]}:${parts[1]}:${parts[2]}:${region.id}`;
89
+ if (prefix.toLowerCase().startsWith(partial.toLowerCase())) {
90
+ items.push({
91
+ label: region.id,
92
+ kind: CompletionItemKind.Enum,
93
+ documentation: { kind: 'markdown', value: region.name },
94
+ });
95
+ }
96
+ }
97
+ }
98
+ }
99
+ else if (parts.length === 5) {
100
+ items.push({
101
+ label: `${partial}:`,
102
+ kind: CompletionItemKind.Enum,
103
+ documentation: { kind: 'markdown', value: 'AWS Account ID' },
104
+ });
105
+ }
106
+ else {
107
+ const service = parts[2];
108
+ const region = parts[3];
109
+ const account = parts[4];
110
+ const matching = config.arn.filter((pattern) => {
111
+ const patternParts = pattern.split(':');
112
+ if (patternParts[2] !== service)
113
+ return false;
114
+ if (region.length > 0 !== patternParts[3].length > 0)
115
+ return false;
116
+ if (account.length > 0 !== patternParts[4].length > 0)
117
+ return false;
118
+ return true;
119
+ });
120
+ for (const pattern of matching) {
121
+ const label = pattern
122
+ .replace(PARTITION_PLACEHOLDER, parts[1])
123
+ .replace(REGION_PLACEHOLDER, region)
124
+ .replace(ACCOUNT_PLACEHOLDER, account);
125
+ if (!label.toLowerCase().startsWith(partial.toLowerCase()))
126
+ continue;
127
+ items.push({ label, kind: CompletionItemKind.Value });
128
+ }
129
+ }
130
+ return { items, isIncomplete: false };
131
+ }
@@ -0,0 +1,4 @@
1
+ import type { CompletionList } from 'vscode-languageserver';
2
+ import type { PrincipalTypeLocation } from '../../lib/iam-policy/location.ts';
3
+ import type { CompletionContext } from './index.ts';
4
+ export declare function completePrincipalType(location: PrincipalTypeLocation, context: CompletionContext): CompletionList;
@@ -0,0 +1,23 @@
1
+ import { CompletionItemKind } from 'vscode-languageserver';
2
+ import { principalTypes } from "../../lib/iam-policy/principals.js";
3
+ export function completePrincipalType(location, context) {
4
+ const statement = context.handler.getStatementContext(context.uri, context.position);
5
+ const principal = statement?.Principal ?? statement?.NotPrincipal;
6
+ const existingTypes = principal && typeof principal === 'object' ? Object.keys(principal) : [];
7
+ const items = [];
8
+ for (const [_id, principalType] of Object.entries(principalTypes)) {
9
+ if (existingTypes.includes(principalType.value))
10
+ continue;
11
+ if (location.partial && !principalType.value.toLowerCase().startsWith(location.partial.toLowerCase()))
12
+ continue;
13
+ items.push({
14
+ label: principalType.value,
15
+ kind: CompletionItemKind.Enum,
16
+ documentation: {
17
+ kind: 'markdown',
18
+ value: principalType.description,
19
+ },
20
+ });
21
+ }
22
+ return { items, isIncomplete: false };
23
+ }
@@ -0,0 +1,4 @@
1
+ import type { CompletionList } from 'vscode-languageserver';
2
+ import type { PrincipalTypedValueLocation } from '../../lib/iam-policy/location.ts';
3
+ import type { CompletionContext } from './index.ts';
4
+ export declare function completePrincipalTypedValue(location: PrincipalTypedValueLocation, _context: CompletionContext): CompletionList;
@@ -0,0 +1,4 @@
1
+ import { completePrincipalIdentifier } from "./principal-identifier-completions.js";
2
+ export function completePrincipalTypedValue(location, _context) {
3
+ return completePrincipalIdentifier(location.principalType, location.partial);
4
+ }
@@ -0,0 +1,4 @@
1
+ import type { CompletionList } from 'vscode-languageserver';
2
+ import type { PrincipalValueLocation } from '../../lib/iam-policy/location.ts';
3
+ import type { CompletionContext } from './index.ts';
4
+ export declare function completePrincipalValue(location: PrincipalValueLocation, _context: CompletionContext): CompletionList;
@@ -0,0 +1,18 @@
1
+ import { CompletionItemKind } from 'vscode-languageserver';
2
+ export function completePrincipalValue(location, _context) {
3
+ const potentialLabels = ['*'];
4
+ const items = [];
5
+ for (const label of potentialLabels) {
6
+ if (location.partial && !label.toLowerCase().startsWith(location.partial.toLowerCase()))
7
+ continue;
8
+ items.push({
9
+ label,
10
+ kind: CompletionItemKind.Enum,
11
+ documentation: {
12
+ kind: 'markdown',
13
+ value: 'Public Unauthenticated Access',
14
+ },
15
+ });
16
+ }
17
+ return { items, isIncomplete: false };
18
+ }
@@ -0,0 +1,4 @@
1
+ import type { CompletionList } from 'vscode-languageserver';
2
+ import type { ResourceValueLocation } from '../../lib/iam-policy/location.ts';
3
+ import type { CompletionContext } from './index.ts';
4
+ export declare function completeResourceValue(location: ResourceValueLocation, context: CompletionContext): CompletionList;
@@ -0,0 +1,144 @@
1
+ import { CompletionItemKind } from 'vscode-languageserver';
2
+ import { partitions } from "../../lib/iam-policy/partitions.js";
3
+ import { ServiceReference } from "../../lib/iam-policy/reference/services.js";
4
+ import { expandActionPattern } from "../../lib/iam-policy/wildcard.js";
5
+ export function completeResourceValue(location, context) {
6
+ const parts = location.partial.split(':');
7
+ const items = [];
8
+ const statement = context.handler.getStatementContext(context.uri, context.position);
9
+ const statementActions = statement?.Action ?? statement?.NotAction ?? [];
10
+ const expandedActions = statementActions.flatMap(expandActionPattern);
11
+ const resources = ServiceReference.getResourcesForActions(expandedActions);
12
+ for (const [arn, resource] of resources.entries()) {
13
+ if (location.partial && !arn.toLowerCase().startsWith(location.partial.toLowerCase()))
14
+ continue;
15
+ items.push({
16
+ label: arn,
17
+ sortText: `0-${arn}`,
18
+ kind: CompletionItemKind.Value,
19
+ detail: `${resource.service}/${resource.name}`,
20
+ documentation: {
21
+ kind: 'markdown',
22
+ value: [`**Condition Keys**:`, '', resource.conditionKeys.map((key) => `- \`${key}\``).join('\n')].join('\n'),
23
+ },
24
+ });
25
+ }
26
+ if (parts.length === 1) {
27
+ // suggest only arn
28
+ const label = 'arn';
29
+ if (!location.partial || label.toLowerCase().startsWith(location.partial.toLowerCase())) {
30
+ items.push({
31
+ label,
32
+ kind: CompletionItemKind.Constant,
33
+ });
34
+ }
35
+ }
36
+ else if (parts.length === 2) {
37
+ // suggest partitions
38
+ const potentialItems = Object.entries(partitions).map(([id, partition]) => ({
39
+ label: id,
40
+ kind: CompletionItemKind.Enum,
41
+ documentation: {
42
+ kind: 'markdown',
43
+ value: partition.name,
44
+ },
45
+ }));
46
+ for (const item of potentialItems) {
47
+ if (!location.partial || `${parts[0]}:${item.label.toLowerCase()}`.startsWith(location.partial.toLowerCase())) {
48
+ items.push(item);
49
+ }
50
+ }
51
+ }
52
+ else if (parts.length === 3) {
53
+ // suggest services
54
+ const services = ServiceReference.getAllServices();
55
+ for (const service of services) {
56
+ if (!location.partial ||
57
+ `${parts[0]}:${parts[1]}:${service}`.toLowerCase().startsWith(location.partial.toLowerCase())) {
58
+ items.push({
59
+ label: service,
60
+ kind: CompletionItemKind.Enum,
61
+ });
62
+ }
63
+ }
64
+ }
65
+ else if (parts.length === 4) {
66
+ // suggest regions
67
+ const partition = parts[1] === 'aws' || parts[1] === 'aws-us-gov' || parts[1] === 'aws-cn' ? partitions[parts[1]] : partitions.aws;
68
+ const service = parts[2];
69
+ const resources = ServiceReference.getResourcesForActions(expandActionPattern(`${service}:*`));
70
+ let hasRegionArn = false;
71
+ for (const arn of resources.keys()) {
72
+ if (arn.includes(`\${Region}`))
73
+ hasRegionArn = true;
74
+ }
75
+ if (!hasRegionArn) {
76
+ items.push({
77
+ label: ':',
78
+ kind: CompletionItemKind.Enum,
79
+ documentation: {
80
+ kind: 'markdown',
81
+ value: 'This service has no ARNs with a region component',
82
+ },
83
+ });
84
+ }
85
+ else {
86
+ for (const region of partition.regions) {
87
+ if (!location.partial ||
88
+ `${parts[0]}:${parts[1]}:${parts[2]}:${region.id}`.toLowerCase().startsWith(location.partial.toLowerCase())) {
89
+ items.push({
90
+ label: region.id,
91
+ kind: CompletionItemKind.Enum,
92
+ documentation: {
93
+ kind: 'markdown',
94
+ value: region.name,
95
+ },
96
+ });
97
+ }
98
+ }
99
+ }
100
+ }
101
+ else if (parts.length === 5) {
102
+ // suggest account
103
+ items.push({
104
+ label: `${location.partial}:`,
105
+ kind: CompletionItemKind.Enum,
106
+ documentation: {
107
+ kind: 'markdown',
108
+ value: '# AWS Account ID',
109
+ },
110
+ });
111
+ }
112
+ else {
113
+ // suggest service resources
114
+ const service = parts[2];
115
+ const region = parts[3];
116
+ const account = parts[4];
117
+ const resources = ServiceReference.getResourcesForActions(expandActionPattern(`${service}:*`));
118
+ for (const resource of resources.values()) {
119
+ const patternParts = resource.arn.split(':');
120
+ const patternRegion = patternParts[3];
121
+ const patternAccount = patternParts[4];
122
+ if (region.length > 0 !== patternRegion.length > 0)
123
+ continue;
124
+ if (account.length > 0 !== patternAccount.length > 0)
125
+ continue;
126
+ const label = resource.arn
127
+ .replace(`\${Partition}`, parts[1])
128
+ .replace(`\${Region}`, parts[3])
129
+ .replace(`\${Account}`, parts[4]);
130
+ if (location.partial && !label.toLowerCase().startsWith(location.partial.toLowerCase()))
131
+ continue;
132
+ items.push({
133
+ label,
134
+ kind: CompletionItemKind.Enum,
135
+ detail: resource.name,
136
+ documentation: {
137
+ kind: 'markdown',
138
+ value: [`**Condition Keys**:`, '', resource.conditionKeys.map((key) => `- \`${key}\``).join('\n')].join('\n'),
139
+ },
140
+ });
141
+ }
142
+ }
143
+ return { items, isIncomplete: false };
144
+ }
@@ -0,0 +1,10 @@
1
+ import type { CompletionList } from 'vscode-languageserver';
2
+ import type { StatementBlockLocation } from '../../lib/iam-policy/location.ts';
3
+ import type { CompletionContext } from './index.ts';
4
+ export declare function completeStatementBlock(location: StatementBlockLocation, context: CompletionContext): CompletionList;
5
+ export declare function findHclElement(key: string): {
6
+ policyTypes: Array<"identity" | "resource">;
7
+ description: string;
8
+ group: string;
9
+ hclKey: string;
10
+ } | null;
@@ -0,0 +1,51 @@
1
+ import { CompletionItemKind, MarkupKind } from 'vscode-languageserver';
2
+ import { StatementKeys } from "../../lib/iam-policy/statement-keys.js";
3
+ export function completeStatementBlock(location, context) {
4
+ const statement = context.handler.getStatementContext(context.uri, context.position);
5
+ const existingKeys = deriveExistingKeys(statement);
6
+ const existingGroups = new Set();
7
+ for (const key of existingKeys) {
8
+ const element = findHclElement(key);
9
+ if (element)
10
+ existingGroups.add(element.group);
11
+ }
12
+ const items = [];
13
+ for (const [, element] of Object.entries(StatementKeys)) {
14
+ if (existingKeys.includes(element.hclKey))
15
+ continue;
16
+ if (existingGroups.has(element.group))
17
+ continue;
18
+ if (location.partial && !element.hclKey.toLowerCase().startsWith(location.partial.toLowerCase()))
19
+ continue;
20
+ items.push({
21
+ label: element.hclKey,
22
+ kind: CompletionItemKind.Field,
23
+ documentation: {
24
+ kind: MarkupKind.Markdown,
25
+ value: element.description,
26
+ },
27
+ });
28
+ }
29
+ return { items, isIncomplete: false };
30
+ }
31
+ export function findHclElement(key) {
32
+ for (const [, element] of Object.entries(StatementKeys)) {
33
+ if (element.hclKey === key)
34
+ return element;
35
+ }
36
+ return null;
37
+ }
38
+ function deriveExistingKeys(statement) {
39
+ if (!statement)
40
+ return [];
41
+ const keys = [];
42
+ for (const [name, element] of Object.entries(StatementKeys)) {
43
+ // sub-blocks (condition, principals, not_principals) allow multiples — never exclude them
44
+ if (name === 'Condition' || name === 'Principal' || name === 'NotPrincipal')
45
+ continue;
46
+ if (name in statement) {
47
+ keys.push(element.hclKey);
48
+ }
49
+ }
50
+ return keys;
51
+ }
@@ -0,0 +1,4 @@
1
+ import type { CompletionList } from 'vscode-languageserver';
2
+ import type { StatementKeyLocation } from '../../lib/iam-policy/location.ts';
3
+ import type { CompletionContext } from './index.ts';
4
+ export declare function completeStatementKey(location: StatementKeyLocation, context: CompletionContext): CompletionList;