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,9 @@
1
+ import type { CursorContext, Position, StatementContext } from './base.ts';
2
+ import { TreeBase } from './base.ts';
3
+ export declare class TreeJson extends TreeBase {
4
+ #private;
5
+ static init(): Promise<TreeJson>;
6
+ getCursorContext(uri: string, position: Position): CursorContext | null;
7
+ getStatementContext(uri: string, position: Position): StatementContext | null;
8
+ getSiblingKeys(uri: string, position: Position): string[];
9
+ }
@@ -0,0 +1,376 @@
1
+ import { resolve } from 'node:path';
2
+ import { Language } from 'web-tree-sitter';
3
+ import { TreeBase } from "./base.js";
4
+ export class TreeJson extends TreeBase {
5
+ static async init() {
6
+ const grammarDir = resolve(import.meta.dirname, '../../grammars');
7
+ const language = await Language.load(resolve(grammarDir, 'tree-sitter-json.wasm'));
8
+ return new TreeJson(language);
9
+ }
10
+ getCursorContext(uri, position) {
11
+ const node = this.getNodeAtPosition(uri, position);
12
+ if (!node)
13
+ return null;
14
+ const nodeBefore = position.column > 0 ? this.getNodeAtPosition(uri, { line: position.line, column: position.column - 1 }) : null;
15
+ // Cursor right after closing quote — no completions
16
+ if (this.#isCursorAfterClosingQuote(nodeBefore))
17
+ return null;
18
+ // Cursor inside an array but outside any string — no completions
19
+ if (this.#isCursorOutsideStringInArray(node, nodeBefore))
20
+ return null;
21
+ // JSON requires cursor to be inside a string (after/within quotes)
22
+ if (!this.#isInsideString(node) && (!nodeBefore || !this.#isInsideString(nodeBefore)))
23
+ return null;
24
+ let statementObject = this.#findStatementObject(node);
25
+ if (!statementObject && nodeBefore) {
26
+ statementObject = this.#findStatementObject(nodeBefore);
27
+ }
28
+ if (!statementObject)
29
+ return null;
30
+ const context1 = this.#resolveCursorContext(node, statementObject, position);
31
+ const context2 = nodeBefore ? this.#resolveCursorContext(nodeBefore, statementObject, position) : null;
32
+ return this.#pickBestCursorContext(context1, context2);
33
+ }
34
+ getStatementContext(uri, position) {
35
+ const node = this.getNodeAtPosition(uri, position);
36
+ if (!node)
37
+ return null;
38
+ let statementObject = this.#findStatementObject(node);
39
+ if (!statementObject && position.column > 0) {
40
+ const nodeBefore = this.getNodeAtPosition(uri, { line: position.line, column: position.column - 1 });
41
+ if (nodeBefore)
42
+ statementObject = this.#findStatementObject(nodeBefore);
43
+ }
44
+ if (!statementObject)
45
+ return null;
46
+ return this.#extractStatementContext(statementObject);
47
+ }
48
+ getSiblingKeys(uri, position) {
49
+ const node = this.getNodeAtPosition(uri, position);
50
+ if (!node)
51
+ return [];
52
+ let statementObject = this.#findStatementObject(node);
53
+ if (!statementObject && position.column > 0) {
54
+ const nodeBefore = this.getNodeAtPosition(uri, { line: position.line, column: position.column - 1 });
55
+ if (nodeBefore)
56
+ statementObject = this.#findStatementObject(nodeBefore);
57
+ }
58
+ if (!statementObject)
59
+ return [];
60
+ return this.#collectExistingKeys(this.#findInnermostObject(node, statementObject));
61
+ }
62
+ #resolveCursorContext(node, statementObject, position) {
63
+ const cursorPath = this.#buildCursorPath(node, statementObject, position);
64
+ return { ...cursorPath, policyFormat: 'standard' };
65
+ }
66
+ #pickBestCursorContext(a, b) {
67
+ if (!a)
68
+ return b;
69
+ if (!b)
70
+ return a;
71
+ if (a.partial === '' && b.partial !== '')
72
+ return b;
73
+ if (a.partial === '' && b.partial === '' && b.keys.length > a.keys.length)
74
+ return b;
75
+ return a;
76
+ }
77
+ /**
78
+ * Walk up from cursor to statement object, building the chain of pair
79
+ * keys crossed along the way.
80
+ */
81
+ #buildCursorPath(cursorNode, statementObject, position) {
82
+ const keys = [];
83
+ let role = null;
84
+ let previous = null;
85
+ let current = cursorNode;
86
+ while (current && current.id !== statementObject.id) {
87
+ if (current.type === 'object' && role === null) {
88
+ role = 'key';
89
+ }
90
+ if (current.type === 'pair') {
91
+ const pairKey = this.#getPairKeyText(current);
92
+ if (role === null) {
93
+ if (previous && current.namedChildren[0] && previous.id === current.namedChildren[0].id) {
94
+ role = 'key';
95
+ }
96
+ else {
97
+ role = 'value';
98
+ if (pairKey)
99
+ keys.unshift(pairKey);
100
+ }
101
+ }
102
+ else {
103
+ if (pairKey)
104
+ keys.unshift(pairKey);
105
+ }
106
+ }
107
+ previous = current;
108
+ current = current.parent;
109
+ }
110
+ // When cursor falls on the statementObject (e.g., after an incomplete pair like
111
+ // "Effect": ), check if a child pair is on the same line — if so, the cursor
112
+ // is in that pair's value area.
113
+ if (role === null && cursorNode.id === statementObject.id) {
114
+ const pairOnLine = statementObject.namedChildren.find((child) => child.type === 'pair' && child.startPosition.row === position.line);
115
+ if (pairOnLine) {
116
+ const pairKey = this.#getPairKeyText(pairOnLine);
117
+ if (pairKey) {
118
+ keys.unshift(pairKey);
119
+ role = 'value';
120
+ }
121
+ }
122
+ }
123
+ if (role === null)
124
+ role = 'key';
125
+ const partial = this.#extractPartial(cursorNode, position);
126
+ return { keys, role, partial };
127
+ }
128
+ /**
129
+ * Walk up from a node to find an object that sits inside a Statement array.
130
+ */
131
+ #findStatementObject(node) {
132
+ let current = node;
133
+ while (current) {
134
+ if (current.type === 'object' && this.#isInsideStatementArray(current)) {
135
+ return current;
136
+ }
137
+ current = current.parent;
138
+ }
139
+ return null;
140
+ }
141
+ /**
142
+ * Check that an object is a direct child of an array whose parent pair
143
+ * has the key "Statement".
144
+ */
145
+ #isInsideStatementArray(object) {
146
+ if (object.parent?.type !== 'array')
147
+ return false;
148
+ const pair = object.parent.parent;
149
+ if (pair?.type !== 'pair')
150
+ return false;
151
+ return this.#getPairKeyText(pair) === 'Statement';
152
+ }
153
+ /**
154
+ * Get the text content of a pair's key (first named child string).
155
+ */
156
+ #getPairKeyText(pair) {
157
+ const keyString = pair.namedChildren[0];
158
+ if (keyString?.type !== 'string')
159
+ return null;
160
+ const content = keyString.namedChildren.find((child) => child.type === 'string_content');
161
+ return content?.text ?? null;
162
+ }
163
+ /**
164
+ * Find the first object between node and stmtObject (inclusive of node).
165
+ */
166
+ #findInnermostObject(node, statementObject) {
167
+ let current = node;
168
+ while (current && current.id !== statementObject.id) {
169
+ if (current.type === 'object')
170
+ return current;
171
+ current = current.parent;
172
+ }
173
+ return statementObject;
174
+ }
175
+ /**
176
+ * Collect all key names from pair children of an object.
177
+ */
178
+ #collectExistingKeys(object) {
179
+ return object.namedChildren
180
+ .filter((child) => child.type === 'pair')
181
+ .map((pair) => this.#getPairKeyText(pair))
182
+ .filter((key) => key !== null);
183
+ }
184
+ /**
185
+ * Check if a node is inside a string (i.e. cursor is after/within quotes).
186
+ */
187
+ #isInsideString(node) {
188
+ let current = node;
189
+ while (current) {
190
+ if (current.type === 'string' || current.type === 'string_content')
191
+ return true;
192
+ if (current.type === '"') {
193
+ // Opening quote means cursor is inside the string; closing quote means outside.
194
+ const parent = current.parent;
195
+ if (parent?.type === 'string' && current.id === parent.lastChild?.id)
196
+ return false;
197
+ return true;
198
+ }
199
+ if (current.type === 'pair' || current.type === 'object' || current.type === 'array')
200
+ return false;
201
+ current = current.parent;
202
+ }
203
+ return false;
204
+ }
205
+ /**
206
+ * Check if the cursor is right after a closing quote. The node at the cursor
207
+ * position may still be inside the string, but the user has finished the string.
208
+ */
209
+ #isCursorAfterClosingQuote(nodeBefore) {
210
+ if (!nodeBefore || nodeBefore.type !== '"')
211
+ return false;
212
+ const parent = nodeBefore.parent;
213
+ if (parent?.type !== 'string')
214
+ return false;
215
+ return nodeBefore.id === parent.lastChild?.id;
216
+ }
217
+ /**
218
+ * Check if the cursor is inside an array value but not inside any string.
219
+ * This is the case for the known `json_no-quote` test failures where the cursor
220
+ * is between array elements or after `[` but before any `"`.
221
+ */
222
+ #isCursorOutsideStringInArray(node, nodeBefore) {
223
+ const target = nodeBefore ?? node;
224
+ let current = target;
225
+ while (current) {
226
+ if (current.type === 'string' || current.type === 'string_content')
227
+ return false;
228
+ if (current.type === 'array')
229
+ return !this.#isInsideString(node) && (!nodeBefore || !this.#isInsideString(nodeBefore));
230
+ if (current.type === 'object')
231
+ return false;
232
+ current = current.parent;
233
+ }
234
+ return false;
235
+ }
236
+ /**
237
+ * Extract the partial text the user has typed, from the nearest string_content
238
+ * node up to the cursor position.
239
+ */
240
+ #extractPartial(node, position) {
241
+ let current = node;
242
+ while (current) {
243
+ if (current.type === 'string_content') {
244
+ if (position.line === current.startPosition.row) {
245
+ return current.text.slice(0, position.column - current.startPosition.column);
246
+ }
247
+ return current.text;
248
+ }
249
+ if (current.type === 'object' || current.type === 'pair')
250
+ break;
251
+ current = current.parent;
252
+ }
253
+ return '';
254
+ }
255
+ /**
256
+ * Read string values from a JSON pair's value (string or array of strings).
257
+ */
258
+ #readPairStringValues(pair) {
259
+ const valueNode = pair.namedChildren[1];
260
+ if (!valueNode)
261
+ return [];
262
+ if (valueNode.type === 'string') {
263
+ const content = valueNode.namedChildren.find((child) => child.type === 'string_content');
264
+ return content?.text ? [content.text] : [];
265
+ }
266
+ if (valueNode.type === 'array') {
267
+ const values = [];
268
+ for (const element of valueNode.namedChildren) {
269
+ if (element.type !== 'string')
270
+ continue;
271
+ const content = element.namedChildren.find((child) => child.type === 'string_content');
272
+ if (content?.text)
273
+ values.push(content.text);
274
+ }
275
+ return values;
276
+ }
277
+ return [];
278
+ }
279
+ /**
280
+ * Extract the statement structure from a JSON statement object.
281
+ */
282
+ #extractStatementContext(statementObject) {
283
+ const context = {};
284
+ for (const child of statementObject.namedChildren) {
285
+ if (child.type !== 'pair')
286
+ continue;
287
+ const key = this.#getPairKeyText(child);
288
+ if (key === 'Sid') {
289
+ const values = this.#readPairStringValues(child);
290
+ if (values.length > 0)
291
+ context.Sid = values[0];
292
+ }
293
+ else if (key === 'Effect') {
294
+ const values = this.#readPairStringValues(child);
295
+ if (values.length > 0)
296
+ context.Effect = values[0];
297
+ }
298
+ else if (key === 'Action') {
299
+ context.Action = this.#readPairStringValues(child);
300
+ }
301
+ else if (key === 'NotAction') {
302
+ context.NotAction = this.#readPairStringValues(child);
303
+ }
304
+ else if (key === 'Resource') {
305
+ context.Resource = this.#readPairStringValues(child);
306
+ }
307
+ else if (key === 'NotResource') {
308
+ context.NotResource = this.#readPairStringValues(child);
309
+ }
310
+ else if (key === 'Principal' || key === 'NotPrincipal') {
311
+ const value = this.#readPrincipalValue(child);
312
+ if (value) {
313
+ if (key === 'Principal')
314
+ context.Principal = value;
315
+ else
316
+ context.NotPrincipal = value;
317
+ }
318
+ }
319
+ else if (key === 'Condition') {
320
+ context.Condition = this.#readConditionValue(child);
321
+ }
322
+ }
323
+ return context;
324
+ }
325
+ /**
326
+ * Read a Principal/NotPrincipal value: either "*" or a mapping of type → values.
327
+ */
328
+ #readPrincipalValue(pair) {
329
+ const values = this.#readPairStringValues(pair);
330
+ if (values.length === 1 && values[0] === '*')
331
+ return '*';
332
+ const valueNode = pair.namedChildren[1];
333
+ if (!valueNode || valueNode.type !== 'object')
334
+ return null;
335
+ const result = {};
336
+ for (const child of valueNode.namedChildren) {
337
+ if (child.type !== 'pair')
338
+ continue;
339
+ const typeKey = this.#getPairKeyText(child);
340
+ if (typeKey)
341
+ result[typeKey] = this.#readPairStringValues(child);
342
+ }
343
+ return Object.keys(result).length > 0 ? result : null;
344
+ }
345
+ /**
346
+ * Read a Condition block: mapping of operator → (mapping of key → values).
347
+ */
348
+ #readConditionValue(pair) {
349
+ const result = {};
350
+ const valueNode = pair.namedChildren[1];
351
+ if (!valueNode || valueNode.type !== 'object')
352
+ return result;
353
+ for (const operatorPair of valueNode.namedChildren) {
354
+ if (operatorPair.type !== 'pair')
355
+ continue;
356
+ const operator = this.#getPairKeyText(operatorPair);
357
+ if (!operator)
358
+ continue;
359
+ const innerObject = operatorPair.namedChildren[1];
360
+ if (!innerObject || innerObject.type !== 'object') {
361
+ result[operator] = {};
362
+ continue;
363
+ }
364
+ const keys = {};
365
+ for (const keyPair of innerObject.namedChildren) {
366
+ if (keyPair.type !== 'pair')
367
+ continue;
368
+ const conditionKey = this.#getPairKeyText(keyPair);
369
+ if (conditionKey)
370
+ keys[conditionKey] = this.#readPairStringValues(keyPair);
371
+ }
372
+ result[operator] = keys;
373
+ }
374
+ return result;
375
+ }
376
+ }
@@ -0,0 +1,9 @@
1
+ import type { TreeBase } from './base.ts';
2
+ export type DocumentFormat = 'yaml' | 'json' | 'hcl';
3
+ export declare class TreeManager {
4
+ #private;
5
+ openDocument(uri: string, content: string, languageId: string): Promise<void>;
6
+ updateDocument(uri: string, content: string): Promise<void>;
7
+ closeDocument(uri: string): void;
8
+ getLanguageHandler(uri: string): TreeBase | null;
9
+ }
@@ -0,0 +1,66 @@
1
+ import { TreeHcl } from "./hcl.js";
2
+ import { TreeJson } from "./json.js";
3
+ import { TreeYaml } from "./yaml.js";
4
+ const languages = {
5
+ yaml: TreeYaml,
6
+ json: TreeJson,
7
+ hcl: TreeHcl,
8
+ };
9
+ export class TreeManager {
10
+ #trees = {
11
+ yaml: null,
12
+ json: null,
13
+ hcl: null,
14
+ };
15
+ #uriToFormat = new Map();
16
+ async openDocument(uri, content, languageId) {
17
+ const format = TreeManager.#detectFormat(uri, languageId);
18
+ if (!format)
19
+ return;
20
+ this.#uriToFormat.set(uri, format);
21
+ if (!this.#trees[format]) {
22
+ this.#trees[format] = await languages[format].init();
23
+ }
24
+ this.#trees[format].openDocument(uri, content);
25
+ }
26
+ async updateDocument(uri, content) {
27
+ const format = this.#uriToFormat.get(uri);
28
+ if (!format)
29
+ return;
30
+ if (!this.#trees[format]) {
31
+ this.#trees[format] = await languages[format].init();
32
+ }
33
+ this.#trees[format].updateDocument(uri, content);
34
+ }
35
+ closeDocument(uri) {
36
+ const format = this.#uriToFormat.get(uri);
37
+ if (!format)
38
+ return;
39
+ if (this.#trees[format]) {
40
+ this.#trees[format].closeDocument(uri);
41
+ }
42
+ this.#uriToFormat.delete(uri);
43
+ }
44
+ getLanguageHandler(uri) {
45
+ const format = this.#uriToFormat.get(uri);
46
+ if (!format)
47
+ return null;
48
+ return this.#trees[format] || null;
49
+ }
50
+ static #detectFormat(uri, languageId) {
51
+ const id = languageId.toLowerCase();
52
+ if (id.startsWith('yaml'))
53
+ return 'yaml';
54
+ if (id.startsWith('json'))
55
+ return 'json';
56
+ if (id === 'terraform' || id === 'hcl' || id === 'tofu')
57
+ return 'hcl';
58
+ if (uri.endsWith('.yaml') || uri.endsWith('.yml'))
59
+ return 'yaml';
60
+ if (uri.endsWith('.json'))
61
+ return 'json';
62
+ if (uri.endsWith('.tf') || uri.endsWith('.tofu'))
63
+ return 'hcl';
64
+ return undefined;
65
+ }
66
+ }
@@ -0,0 +1,9 @@
1
+ import type { CursorContext, Position, StatementContext } from './base.ts';
2
+ import { TreeBase } from './base.ts';
3
+ export declare class TreeYaml extends TreeBase {
4
+ #private;
5
+ static init(): Promise<TreeYaml>;
6
+ getCursorContext(uri: string, position: Position): CursorContext | null;
7
+ getStatementContext(uri: string, position: Position): StatementContext | null;
8
+ getSiblingKeys(uri: string, position: Position): string[];
9
+ }