captive-stack-detector 0.6.1 → 0.7.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 487472525c07acc23f340602eca8aae3b4ef8d98c88a80e37d25f5802a45df1e
4
- data.tar.gz: c18427405c1190c106b75eb64b082943e54e703d43fa17b5b340f639668d6321
3
+ metadata.gz: d7799cc8a4c640bb12eca8a85e86e4d4e59eaae472764cc07d255f1481d8592c
4
+ data.tar.gz: e9481131febb4b7d7e9558ba629941d5d19025fd548b91afe458c71c51280f41
5
5
  SHA512:
6
- metadata.gz: 8bebc550e548d55b8f50c87eb781f9954086b574602c51d494585bc7d519d391fedc905cc74c802033b77f8940f718431b6452bf8e06d860e4f9aa775460baeb
7
- data.tar.gz: e1f7a93e4bb0e747537139c047d75789b89b0c85232951b807a4ab93b918e43851c8bc0d85ba8fe84972a676775e673ae6611b2be27956abb9ed287b5bc15418
6
+ metadata.gz: ba37a8e26e9356235db1f390d9d80eefae0eb585f1709f9bb1ef5d8b90ee8c2c82e50506ddebe9fa8ae3a337b096a675e48abd95d8c586130c4ed6416d8c89cf
7
+ data.tar.gz: cb1e564350c211cfc8bc1906857e413e099fbe368f5d5d9029a2c7074dbaf168034aa85d5924596606f9ca9d5ded9dcd617559fb95f7befe58e647eaf161078b
data/docs/stacks.md CHANGED
@@ -65,6 +65,23 @@ Si votre `package.json` dépend de `next`, `nuxt`, `@sveltejs/kit` ou d'un paque
65
65
  - `@supabase/supabase-js` ou `@supabase/ssr` provisionne un backend Supabase.
66
66
  - Une ligne `worker: <commande>` dans un `Procfile` lance un worker.
67
67
 
68
+
69
+ ### Variables exposées au navigateur
70
+
71
+ Une variable n'arrive dans le code du navigateur que si elle porte le préfixe de votre bundler. Captive le déduit de vos dépendances :
72
+
73
+ | Dépendance | Préfixe |
74
+ | --- | --- |
75
+ | `expo` | `EXPO_PUBLIC_` |
76
+ | `next` | `NEXT_PUBLIC_` |
77
+ | `vite` | `VITE_` |
78
+
79
+ Si plusieurs sont présentes, c'est le premier de la liste qui l'emporte (`vite` est souvent là pour les tests seulement).
80
+
81
+ Avec un backend Supabase, Captive pose l'URL et la clé publique sous ce préfixe, avec les deux noms de clé en usage : `VITE_SUPABASE_URL`, `VITE_SUPABASE_ANON_KEY` et `VITE_SUPABASE_PUBLISHABLE_KEY` pour une application Vite, par exemple. Côté serveur, les mêmes valeurs sont disponibles sans préfixe : `SUPABASE_URL` et `SUPABASE_ANON_KEY`.
82
+
83
+ Ces variables sont lues **au build** : après en avoir changé une, redéployez.
84
+
68
85
  ## Expo
69
86
 
70
87
  Condition : un `package.json` à la racine avec la dépendance `expo` (dans `dependencies` ou `devDependencies`). Aucun script n'est exigé.
@@ -22,6 +22,7 @@ module CaptiveStackDetector
22
22
  runtime: Runtime.new(ruby: nil, node: @reader.node_version),
23
23
  env_vars: {},
24
24
  system_packages: [],
25
+ public_env_prefix: @analyzer.public_env_prefix,
25
26
  )
26
27
  end
27
28
 
@@ -5,6 +5,7 @@ require_relative "ssr_framework_detector"
5
5
 
6
6
  module CaptiveStackDetector
7
7
  class PackageJsonAnalyzer
8
+ PUBLIC_ENV_PREFIXES = { "expo" => "EXPO_PUBLIC_", "next" => "NEXT_PUBLIC_", "vite" => "VITE_" }.freeze
8
9
  # Des clients, pas des ORM : Prisma ou Drizzle parlent aussi MySQL et SQLite, leur
9
10
  # présence ne dit pas que l'app attend une base Postgres.
10
11
  POSTGRES_CLIENTS = %w[pg postgres].freeze
@@ -41,6 +42,12 @@ module CaptiveStackDetector
41
42
  any_dep?(SUPABASE_CLIENTS) ? "supabase" : nil
42
43
  end
43
44
 
45
+ # Le premier bundler trouvé, dans l'ordre du type : vite en dernier, parce qu'il arrive
46
+ # souvent avec Vitest sans construire le front.
47
+ def public_env_prefix
48
+ PUBLIC_ENV_PREFIXES.find { |dependance, _| deps.key?(dependance) }&.last
49
+ end
50
+
44
51
  private
45
52
 
46
53
  def any_dep?(names)
@@ -4,7 +4,12 @@ module CaptiveStackDetector
4
4
  Services = Data.define(:database, :queue, :backend)
5
5
  Worker = Data.define(:command)
6
6
  Runtime = Data.define(:ruby, :node)
7
- Result = Data.define(:type, :subtype, :services, :worker, :runtime, :env_vars, :system_packages)
7
+ # public_env_prefix : préfixe des variables que le bundler expose au navigateur
8
+ # (VITE_, NEXT_PUBLIC_, EXPO_PUBLIC_), nil sans bundler front (PackageJsonAnalyzer).
9
+ Result = Data.define(:type, :subtype, :services, :worker, :runtime, :env_vars, :system_packages,
10
+ :public_env_prefix) do
11
+ def initialize(public_env_prefix: nil, **) = super
12
+ end
8
13
 
9
14
  # reason : :no_manifest, :no_rails ou :no_node_entry, pour que l'appelant explique le refus.
10
15
  class UnsupportedStack < StandardError
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CaptiveStackDetector
4
- VERSION = "0.6.1"
4
+ VERSION = "0.7.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: captive-stack-detector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Captive Studio