captive-stack-detector 0.5.1 → 0.6.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: 4e9e428da3aa769eed523957c25dafb05446311dbd29e682b6caf8ccb44f797f
4
- data.tar.gz: 5a0bbb4a14973a0e569ea748dccab9af30d65e59c299aa1f87a89e9624a312fb
3
+ metadata.gz: 6f6cc07b2aebaa064c700e3efc99f2e9c08dc9cd9682206b66f6dacbcdaef476
4
+ data.tar.gz: eeadaa4880a5673b9b89545333cd71895be4a8f04e6ab9503ce57d6051ce7416
5
5
  SHA512:
6
- metadata.gz: 4d8955a789e8574a8db3015729b013d9d0e1e941ac0773d8eae0a953345ca474fa2f2cb58190c7feed1769991c2ee7037bbc3ff046fdd20815799c2ac331eb2c
7
- data.tar.gz: ad7fd65af4bf2ae0261d83ac3391c85e2b499e4f46ccf3123d03c1ca26e654bb0b46b4058c29439e4e3bac1380c7811405b8c151dffb32e4cffdaed93870f56a
6
+ metadata.gz: 7940bd96414ba39c325e183e898c9135e63cafca546c0189690846b5881d02fa5271358608d7d0055f240e2fa7267e0837b1b8cc51a3dc1ba3abb4172394c43c
7
+ data.tar.gz: a646c1aebebdc27038f703f2ac779e764d1120e00c493a75dda43b1f717de7cb80f620d91997ed2263ca92c0c39750857bfcb318e685b037383ed19980e5f72f
@@ -12,7 +12,7 @@ module CaptiveStackDetector
12
12
 
13
13
  def detect
14
14
  type = @analyzer.type
15
- raise UnsupportedStack unless type
15
+ raise UnsupportedStack, :no_node_entry unless type
16
16
 
17
17
  Result.new(
18
18
  type: type,
@@ -5,13 +5,20 @@ require_relative "ssr_framework_detector"
5
5
 
6
6
  module CaptiveStackDetector
7
7
  class PackageJsonAnalyzer
8
+ # Des clients, pas des ORM : Prisma ou Drizzle parlent aussi MySQL et SQLite, leur
9
+ # présence ne dit pas que l'app attend une base Postgres.
10
+ POSTGRES_CLIENTS = %w[pg postgres].freeze
11
+ REDIS_CLIENTS = %w[redis ioredis].freeze
12
+ SUPABASE_CLIENTS = %w[@supabase/supabase-js @supabase/ssr].freeze
13
+
8
14
  def initialize(package_json)
9
15
  @parsed = JSON.parse(package_json)
10
16
  end
11
17
 
12
18
  def type
13
19
  return "expo" if deps.key?("expo")
14
- return "node" if @parsed.dig("scripts", "start")
20
+ # build seul : une SPA, buildée puis servie en statique
21
+ return "node" if @parsed.dig("scripts", "start") || @parsed.dig("scripts", "build")
15
22
 
16
23
  nil
17
24
  end
@@ -21,21 +28,25 @@ module CaptiveStackDetector
21
28
  end
22
29
 
23
30
  def database
24
- return "postgres" if deps.key?("pg") || backend
31
+ return "postgres" if any_dep?(POSTGRES_CLIENTS) || backend
25
32
 
26
33
  nil
27
34
  end
28
35
 
29
36
  def queue
30
- (deps.key?("redis") || deps.key?("ioredis")) ? "redis" : nil
37
+ any_dep?(REDIS_CLIENTS) ? "redis" : nil
31
38
  end
32
39
 
33
40
  def backend
34
- (deps.key?("@supabase/supabase-js") || deps.key?("@supabase/ssr")) ? "supabase" : nil
41
+ any_dep?(SUPABASE_CLIENTS) ? "supabase" : nil
35
42
  end
36
43
 
37
44
  private
38
45
 
46
+ def any_dep?(names)
47
+ names.any? { |name| deps.key?(name) }
48
+ end
49
+
39
50
  def deps
40
51
  @parsed.fetch("dependencies", {}).merge(@parsed.fetch("devDependencies", {}))
41
52
  end
@@ -12,7 +12,7 @@ module CaptiveStackDetector
12
12
  end
13
13
 
14
14
  def detect
15
- raise UnsupportedStack unless @analyzer.rails?
15
+ raise UnsupportedStack, :no_rails unless @analyzer.rails?
16
16
 
17
17
  Result.new(
18
18
  type: "rails",
@@ -6,5 +6,13 @@ module CaptiveStackDetector
6
6
  Runtime = Data.define(:ruby, :node)
7
7
  Result = Data.define(:type, :subtype, :services, :worker, :runtime, :env_vars, :system_packages)
8
8
 
9
- UnsupportedStack = Class.new(StandardError)
9
+ # reason : :no_manifest, :no_rails ou :no_node_entry, pour que l'appelant explique le refus.
10
+ class UnsupportedStack < StandardError
11
+ attr_reader :reason
12
+
13
+ def initialize(reason = nil)
14
+ @reason = reason
15
+ super(reason&.to_s || "unsupported stack")
16
+ end
17
+ end
10
18
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CaptiveStackDetector
4
- VERSION = "0.5.1"
4
+ VERSION = "0.6.0"
5
5
  end
@@ -20,7 +20,7 @@ module CaptiveStackDetector
20
20
  return RailsStackDetector.new(reader, GemfileAnalyzer.new(gemfile)).detect if gemfile
21
21
  return JsStackDetector.new(reader, package_json).detect if package_json
22
22
 
23
- raise UnsupportedStack
23
+ raise UnsupportedStack, :no_manifest
24
24
  end
25
25
  private_class_method :detect_from
26
26
  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.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Captive Studio