upload_d_n_d 0.9.2 → 0.9.3

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: 42843fb0b96e9dcd1bad0a4717c11c86491c41d664af9d397c03987df2ec02ad
4
- data.tar.gz: 89bd283fe6e91eba3d6788bed02765f40e5945930acaab542f1bc53d5c8bd8f0
3
+ metadata.gz: 5c93f26a694496d5e6582aaeb7d7d2f723b58fd1684de65da9e6870f099d04b0
4
+ data.tar.gz: e23c03f1241c7f9488696230c73ebe56e0cf90cebebadaff5c4b76c40d9b77f3
5
5
  SHA512:
6
- metadata.gz: f5443f3cf50c7912b52bc919a9acdbcb142255d8be9d8c161d54370ced1a6d10ffb7a290fa6af9b925bfa88289a03ea34673f10a743bb6339d9a83705b4d2f1d
7
- data.tar.gz: 8803b33d5a96ba7329bf9d83ddd8ca2d6c635e9862f1fc76fc5606cc29de5061c84628ea87115ac780847ab35c71e5b3cb15e5dfdb117a0c349e9ccaf225117a
6
+ metadata.gz: 5f0b4d1593e58c8f0ebec99a3828f5f5754bf38bf3f3e0d8540b6b1f0b3034a23e6667a68a4f0dbb6a37f074bc258764af46c60a3232c19056bd4dc9333edc2f
7
+ data.tar.gz: 2fe89e1d9d7d865a309d90e3ec4b80e9bbdb68d12edc0b2848de55c61d58d7a663d0cdc1b87de600242d5ece0e62cc16b2c27a775123efdd4ae102e10b4360fb
data/docs/CHANGELOG.md CHANGED
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.9.3] - 2026-10-29
11
+
12
+ Correctifs d'empaquetage pour la consommation de la gem via jsbundling (bun/esbuild) et Tailwind. Patch, sans changement d'API.
13
+
14
+ ### Fixed
15
+ - **Paquet publié : `package.json` manquant** — la liste de fichiers du gemspec n'incluait pas `package.json`, absent de la gem publiée. Les apps qui compilent leurs assets avec jsbundling (bun/esbuild) et Tailwind ne pouvaient plus résoudre `import "upload_d_n_d"` ni `@import "upload_d_n_d/styles"` via `node_modules/upload_d_n_d` (« Could not resolve "upload_d_n_d" », « Can't resolve 'upload_d_n_d/styles' »). `package.json` est désormais embarqué ; un test construit la gem (`gem build`) et vérifie sa présence ainsi que celle des fichiers déclarés dans ses `exports`.
16
+ - **`upload_d_n_d:link_js` ne mettait pas le lien à jour** — la tâche ne (re)créait le lien `node_modules/upload_d_n_d` que lorsqu'il était absent (`exist?` suit le lien). Lors d'une montée de version, l'ancien lien vers la copie précédente de la gem était conservé ; si l'ancienne cible avait disparu, le lien cassé faisait échouer `ln_s` (lien déjà présent). La tâche compare désormais la cible **résolue** du lien au répertoire de la gem courante (résolution des deux chemins, pour qu'un chemin relatif ou un lien intermédiaire ne déclenche pas un remplacement inutile) et le remplace s'il diffère ou est cassé. Un vrai dossier ou fichier à cet emplacement (ex. paquet installé par npm) n'est **jamais** supprimé : la tâche avertit et le laisse en place. Logique extraite dans `UploadDND::JsLink`, idempotente.
17
+
10
18
  ## [0.9.2] - 2026-10-29
11
19
 
12
20
  Reconnaissance des formats `.ods`/`.heic`/`.heif` et affichage des extensions (au lieu des types MIME bruts) sous la zone de dépôt. Patch, sans changement d'API.
@@ -1,3 +1,5 @@
1
+ require "upload_d_n_d/js_link"
2
+
1
3
  namespace :upload_d_n_d do
2
4
  desc "Link gem JS into node_modules for jsbundling compatibility"
3
5
  task :link_js do
@@ -7,10 +9,13 @@ namespace :upload_d_n_d do
7
9
  gem_path = gem_spec.gem_dir
8
10
  link_path = Rails.root.join("node_modules", "upload_d_n_d")
9
11
 
10
- unless link_path.exist?
11
- FileUtils.mkdir_p(link_path.dirname)
12
- FileUtils.ln_s(gem_path, link_path.to_s)
13
- puts "upload_d_n_d: linked JS #{link_path} → #{gem_path}"
12
+ case UploadDND::JsLink.reconcile(link_path: link_path, target: gem_path)
13
+ when :created then puts "upload_d_n_d: linked JS #{link_path} → #{gem_path}"
14
+ when :updated then puts "upload_d_n_d: relinked JS #{link_path} → #{gem_path}"
15
+ when :conflict
16
+ warn "upload_d_n_d: #{link_path} existe et n'est pas un lien géré par la gem ; " \
17
+ "laissé tel quel (rien supprimé). Retirez-le pour permettre à " \
18
+ "`rake upload_d_n_d:link_js` de créer le lien vers #{gem_path}."
14
19
  end
15
20
  end
16
21
  end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+
5
+ module UploadDND
6
+ # Réconcilie le lien symbolique `node_modules/upload_d_n_d` utilisé par
7
+ # jsbundling (bun/esbuild) et Tailwind pour résoudre `upload_d_n_d` et
8
+ # `upload_d_n_d/styles` depuis le paquet de la gem.
9
+ #
10
+ # Idempotent, et corrige deux cas que la simple présence du lien masquait :
11
+ # un lien périmé pointant vers une version précédente de la gem (montée de
12
+ # version), et un lien cassé dont la cible a disparu (où `ln_s` échouerait,
13
+ # le lien existant déjà).
14
+ #
15
+ # Ne gère que les liens symboliques. Un vrai dossier ou fichier à cet
16
+ # emplacement (par ex. un paquet installé par npm) n'est jamais supprimé ni
17
+ # écrasé : la méthode signale un conflit (`:conflict`) et laisse l'appelant
18
+ # avertir.
19
+ module JsLink
20
+ module_function
21
+
22
+ # Crée ou met à jour le lien `link_path` vers `target`.
23
+ #
24
+ # @param link_path [String, Pathname] emplacement du lien (node_modules/upload_d_n_d)
25
+ # @param target [String, Pathname] répertoire cible (gem_dir de la gem courante)
26
+ # @return [Symbol] :created, :updated, :unchanged ou :conflict
27
+ def reconcile(link_path:, target:)
28
+ link = link_path.to_s
29
+ target = target.to_s
30
+
31
+ if File.symlink?(link)
32
+ return :unchanged if resolves_to?(link, target)
33
+
34
+ File.unlink(link) # lien périmé, cassé, ou pointant ailleurs
35
+ link!(link, target)
36
+ :updated
37
+ elsif File.exist?(link)
38
+ :conflict # vrai dossier/fichier (ex. installé par npm) : on n'y touche jamais
39
+ else
40
+ link!(link, target)
41
+ :created
42
+ end
43
+ end
44
+
45
+ # Confronte la cible réelle du lien au dossier de la gem, après résolution
46
+ # des deux chemins (chemin relatif, lien intermédiaire) : un lien qui pointe
47
+ # déjà vers la bonne gem par un chemin indirect n'est pas remplacé. Un lien
48
+ # cassé ne résout pas (ENOENT) et n'est donc jamais considéré comme à jour.
49
+ def resolves_to?(link, target)
50
+ File.realpath(link) == File.realpath(target)
51
+ rescue Errno::ENOENT
52
+ false
53
+ end
54
+ private_class_method :resolves_to?
55
+
56
+ def link!(link, target)
57
+ FileUtils.mkdir_p(File.dirname(link))
58
+ FileUtils.ln_s(target, link)
59
+ end
60
+ private_class_method :link!
61
+ end
62
+ end
@@ -1,3 +1,3 @@
1
1
  module UploadDND
2
- VERSION = "0.9.2"
2
+ VERSION = "0.9.3"
3
3
  end
data/lib/upload_d_n_d.rb CHANGED
@@ -9,6 +9,7 @@ require "upload_d_n_d/rejected_blob"
9
9
  require "upload_d_n_d/orphan_blobs"
10
10
  require "upload_d_n_d/file_validator"
11
11
  require "upload_d_n_d/mime_types"
12
+ require "upload_d_n_d/js_link"
12
13
  require "upload_d_n_d/uploadable"
13
14
  require "upload_d_n_d/controllers/uploadable"
14
15
 
data/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "upload_d_n_d",
3
+ "version": "0.9.3",
4
+ "type": "module",
5
+ "main": "app/javascript/upload_d_n_d/index.js",
6
+ "exports": {
7
+ ".": "./app/javascript/upload_d_n_d/index.js",
8
+ "./controllers/*": "./app/javascript/upload_d_n_d/controllers/*.js",
9
+ "./styles": {
10
+ "style": "./app/assets/stylesheets/upload_d_n_d/application.css"
11
+ }
12
+ },
13
+ "dependencies": {
14
+ "@rails/activestorage": "^7.2.3"
15
+ },
16
+ "peerDependencies": {
17
+ "@hotwired/stimulus": "^3.0.0"
18
+ }
19
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: upload_d_n_d
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre Cherbero
@@ -116,12 +116,14 @@ files:
116
116
  - lib/upload_d_n_d/field_constraints.rb
117
117
  - lib/upload_d_n_d/field_reference.rb
118
118
  - lib/upload_d_n_d/file_validator.rb
119
+ - lib/upload_d_n_d/js_link.rb
119
120
  - lib/upload_d_n_d/mime_types.rb
120
121
  - lib/upload_d_n_d/orphan_blobs.rb
121
122
  - lib/upload_d_n_d/rejected_blob.rb
122
123
  - lib/upload_d_n_d/session_id.rb
123
124
  - lib/upload_d_n_d/uploadable.rb
124
125
  - lib/upload_d_n_d/version.rb
126
+ - package.json
125
127
  homepage: https://github.com/Peyochanchan/upload_d_n_d
126
128
  licenses:
127
129
  - MIT