achilles 1.1.0 → 1.1.2

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: d393e3c7e9d04d6a472ba4e41c727fffca5fa3088f5d064a08a0f9cd4b2bfcf2
4
- data.tar.gz: 911efcf9ddc72755b3b26b9a8ae3d0a5538d4d33ba2f8476d6c4ae4c8aa54e8e
3
+ metadata.gz: b4d4c63799a2a26d7d7a819ec2e17559de59d80be593e5b28d2cc6445864ccda
4
+ data.tar.gz: 8fe623f377d068436dc08beed221ad293ed85159a46930aa5868e24aece5a1ca
5
5
  SHA512:
6
- metadata.gz: a480a6ca6a9b154cdf723aa53560a1caa2a82f41f569a3e2d79dafbd80e50d1dea7a9c9b18d29f69c8eb9d693af79b358929929b9842a014645eaf939105dea5
7
- data.tar.gz: 52f50f6c02b169e7d592363571da480961aa6ac52a856aaca72dc3f26f4e5c557e9b5c918e24f18bdfec6d5d37685936e49678e093ea182d4dc8730bad6d898c
6
+ metadata.gz: 5a1b4835b8cc60697ac3eb8d44e23c8799f76fa0d82f9a481b6a1a8cbdfe77373b91e1443dfcb62b6d733430bae427cd5bf624b3390f8a4f59ce5c632e223292
7
+ data.tar.gz: f6eed0197de6d71b6c74f4dfedf63920207f798fd4260a1d22076d7459587624fa2aa3d6fa88dc51d90fbe3be2735b687265122eb1222a67cfe25d9a94960f66
data/CHANGELOG.md CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  All notable changes to Achilles will be documented in this file.
4
4
 
5
+ ## 1.1.2
6
+
7
+ ### Fixed
8
+
9
+ - Fixed Turbo Frame rendering so registered components in the outgoing frame are
10
+ torn down and deregistered immediately before Turbo invokes the frame renderer.
11
+
12
+ ## 1.1.1
13
+
14
+ ### Fixed
15
+
16
+ - Fixed Turbo browser history restoration so components restored from cached DOM
17
+ are registered and set up again when their registry entries were already
18
+ removed.
19
+ - Fixed component subtree deregistration so child components are removed with
20
+ their parent and cannot block later re-registration.
21
+ - Added browser system coverage for back, forward, restored nested components,
22
+ restored form-field listeners, Turbo-replaced form restoration, and duplicate
23
+ listener prevention.
24
+
5
25
  ## 1.1.0
6
26
 
7
27
  ### Added
data/README.md CHANGED
@@ -8,6 +8,11 @@ Achilles scans the page for elements with `data-component-class`, instantiates
8
8
  the matching JavaScript class, and calls `setup` and `teardown` as Turbo renders
9
9
  new pages or new component markup is inserted.
10
10
 
11
+ Current applications should use Achilles `1.1.2`. If you are upgrading an
12
+ existing app, start with the [1.1.0 upgrade guide](docs/upgrading-to-1.1.0.md)
13
+ and then read the [1.1.1](docs/releases/v1.1.1.md) and
14
+ [1.1.2](docs/releases/v1.1.2.md) release notes.
15
+
11
16
  ## Why Achilles?
12
17
 
13
18
  Rails and Turbo make server-rendered interfaces productive, but many apps still
@@ -79,6 +84,9 @@ achilles.componentsClassMapper.addComponentClass("CounterComponent", CounterComp
79
84
  achilles.start();
80
85
  ```
81
86
 
87
+ Call `start()` after registering component classes. Achilles parses the current
88
+ page and attaches Turbo lifecycle hooks when the application starts.
89
+
82
90
  Create components by extending `ComponentBase`:
83
91
 
84
92
  ```js
@@ -108,9 +116,10 @@ Mark the component root in your view:
108
116
  <button id="counter" data-component-class="CounterComponent">0</button>
109
117
  ```
110
118
 
111
- Every component root must have a unique `id`. Achilles uses that id to register
112
- the component, find its root element, and avoid running setup twice for the same
113
- DOM node.
119
+ Every component root must have a non-empty unique `id`. Achilles uses that id to
120
+ register the component, find its root element, and avoid running setup twice for
121
+ the same DOM node. Components without ids are skipped and reported in the browser
122
+ console.
114
123
 
115
124
  ## Dynamic Components
116
125
 
@@ -148,6 +157,26 @@ Register the component class once:
148
157
  achilles.componentsClassMapper.addComponentClass("NotificationComponent", NotificationComponent);
149
158
  ```
150
159
 
160
+ ## Nested Components
161
+
162
+ Achilles keeps a component tree rooted at a single synthetic `Page` component.
163
+ A component's parent is its nearest ancestor element with `data-component-class`.
164
+ If there is no component ancestor, its parent is `Page`.
165
+
166
+ ```erb
167
+ <div id="dashboard" data-component-class="DashboardComponent">
168
+ <div id="filters" data-component-class="FiltersComponent"></div>
169
+ </div>
170
+ ```
171
+
172
+ This creates the following component tree:
173
+
174
+ ```text
175
+ Page
176
+ dashboard
177
+ filters
178
+ ```
179
+
151
180
  ## Example App
152
181
 
153
182
  The dummy Rails app includes a working counter component. See
@@ -157,9 +186,21 @@ The dummy Rails app includes a working counter component. See
157
186
 
158
187
  - `setup()` runs after `turbo:load` and after new matching DOM nodes are inserted.
159
188
  - `teardown()` runs before Turbo renders a new page.
189
+ - Before Turbo renders replacement content in a frame, Achilles tears down and
190
+ deregisters registered components in the outgoing frame from children to
191
+ parents.
160
192
  - `setup()` and `teardown()` are called once per registered component instance.
193
+ - Parent components are set up before their children.
194
+ - Child components are torn down before their parents.
161
195
  - Components that attach listeners, timers, observers, subscriptions, or widgets
162
196
  should clean them up in `teardown()`.
197
+ - Lifecycle errors are logged and swallowed by default so one broken component
198
+ does not stop the page. Enable strict mode in tests or development when errors
199
+ should be re-raised:
200
+
201
+ ```js
202
+ achilles.strictLifecycleErrors = true;
203
+ ```
163
204
 
164
205
  ## API Reference
165
206
 
@@ -178,6 +219,7 @@ Useful properties:
178
219
 
179
220
  - `componentsClassMapper`: register component classes by name.
180
221
  - `componentRegistry`: inspect or manage registered component instances.
222
+ - `strictLifecycleErrors`: re-raise lifecycle errors after logging them.
181
223
  - `timezone`: access the configured app timezone.
182
224
 
183
225
  Call `start()` after registering component classes. Call `stop()` when an
@@ -219,7 +261,9 @@ Useful methods:
219
261
  ```
220
262
 
221
263
  The `data-component-class` value must match a class registered with
222
- `componentsClassMapper`.
264
+ `componentsClassMapper`. The element must also have a non-empty unique `id`.
265
+ Nested components are parented by DOM ancestry, with top-level components
266
+ parented by the synthetic `Page` component.
223
267
 
224
268
  ## Timezone
225
269
 
@@ -232,6 +276,13 @@ value through `achilles.timezone.timezoneString`.
232
276
 
233
277
  If no timezone is present, Achilles falls back to `Etc/UTC`.
234
278
 
279
+ ## Upgrading
280
+
281
+ Applications upgrading to `1.1.0` should read the
282
+ [1.1.0 upgrade guide](docs/upgrading-to-1.1.0.md). The complete upgrade index
283
+ lives in [docs/upgrading.md](docs/upgrading.md), and the current release note is
284
+ available at [docs/releases/v1.1.2.md](docs/releases/v1.1.2.md).
285
+
235
286
  ## Upgrading From 0.1.3
236
287
 
237
288
  Achilles `1.0.0` changes `rootElement()` to return a DOM element. It no longer
@@ -255,9 +306,8 @@ Or wrap explicitly if the application still uses jQuery:
255
306
  $(this.rootElement()).addClass("is-open");
256
307
  ```
257
308
 
258
- Applications upgrading Achilles should start with the
259
- [upgrade guide](docs/upgrading.md). Applications upgrading from `0.1.3` should
260
- also read the [v1 migration guide](docs/migrating-from-0.1.3-to-v1.md).
309
+ Applications upgrading from `0.1.3` should also read the
310
+ [v1 migration guide](docs/migrating-from-0.1.3-to-v1.md).
261
311
 
262
312
  ## Contributing
263
313
 
@@ -117,8 +117,8 @@ class Application {
117
117
  }
118
118
 
119
119
  deregisterAllComponentsExceptPage() {
120
- let pageComponent = this.componentRegistry.getRegisteredComponent(AppConstants.PageComponentId)
121
- pageComponent.subComponents.forEach((subComponentId) => {
120
+ let pageComponent = this.componentRegistry.getRegisteredComponent(AppConstants.PageComponentId);
121
+ [...pageComponent.subComponents].forEach((subComponentId) => {
122
122
  this.componentRegistry.deregisterComponent(subComponentId);
123
123
  })
124
124
  }
@@ -4,6 +4,7 @@ class Turbo {
4
4
  _teardownCallback;
5
5
  _setupHandler;
6
6
  _teardownHandler;
7
+ _frameRenderHandler;
7
8
  _started = false;
8
9
 
9
10
  constructor(application, setupCallback, teardownCallback) {
@@ -27,8 +28,24 @@ class Turbo {
27
28
  this._teardownCallback();
28
29
  };
29
30
 
31
+ this._frameRenderHandler = (event) => {
32
+ const frame = event.target;
33
+ const originalRender = event.detail?.render;
34
+
35
+ if (!frame || typeof originalRender !== "function") {
36
+ return;
37
+ }
38
+
39
+ const componentRegistry = this._application.componentRegistry;
40
+ event.detail.render = function(...args) {
41
+ componentRegistry.teardownAndDeregisterWithin(frame);
42
+ return Reflect.apply(originalRender, this, args);
43
+ };
44
+ };
45
+
30
46
  document.addEventListener("turbo:load", this._setupHandler);
31
47
  document.addEventListener("turbo:before-render", this._teardownHandler);
48
+ document.addEventListener("turbo:before-frame-render", this._frameRenderHandler);
32
49
  this._started = true;
33
50
  }
34
51
 
@@ -39,8 +56,10 @@ class Turbo {
39
56
 
40
57
  document.removeEventListener("turbo:load", this._setupHandler);
41
58
  document.removeEventListener("turbo:before-render", this._teardownHandler);
59
+ document.removeEventListener("turbo:before-frame-render", this._frameRenderHandler);
42
60
  this._setupHandler = null;
43
61
  this._teardownHandler = null;
62
+ this._frameRenderHandler = null;
44
63
  this._started = false;
45
64
  }
46
65
  }
@@ -22,7 +22,7 @@ class ComponentParser {
22
22
  console.error(elem);
23
23
  return;
24
24
  }
25
- if(elem.dataset.componentRegistered === 'true') {
25
+ if(elem.dataset.componentRegistered === 'true' && this._componentRegistry.getRegisteredComponent(elem.id)) {
26
26
  return;
27
27
  }
28
28
  try {
@@ -53,6 +53,10 @@ class ComponentsRegistry {
53
53
  if(!component)
54
54
  return;
55
55
 
56
+ [...component.subComponents].forEach((subComponentId) => {
57
+ this.deregisterComponent(subComponentId);
58
+ });
59
+
56
60
  let parentComponent = this.getRegisteredComponent(component.parentComponentId);
57
61
 
58
62
  if(parentComponent != null){
@@ -126,6 +130,39 @@ class ComponentsRegistry {
126
130
  this.deregisterComponent(id);
127
131
  }
128
132
 
133
+ teardownAndDeregisterWithin(rootElement) {
134
+ if(!rootElement || typeof rootElement.contains !== 'function')
135
+ return;
136
+
137
+ Object.values(this._registeredComponents)
138
+ .filter((component) => {
139
+ if(component.id === AppConstants.PageComponentId)
140
+ return false;
141
+
142
+ let element = this.elementForId(component.id);
143
+ return element && rootElement.contains(element);
144
+ })
145
+ .sort((firstComponent, secondComponent) => {
146
+ return this.elementDepth(secondComponent.id) - this.elementDepth(firstComponent.id);
147
+ })
148
+ .forEach((component) => {
149
+ if(this.getRegisteredComponent(component.id))
150
+ this.teardownAndDeregister(component.id);
151
+ });
152
+ }
153
+
154
+ elementDepth(id) {
155
+ let depth = 0;
156
+ let element = this.elementForId(id);
157
+
158
+ while(element?.parentElement) {
159
+ depth += 1;
160
+ element = element.parentElement;
161
+ }
162
+
163
+ return depth;
164
+ }
165
+
129
166
  elementNotFound(id) {
130
167
  console.error('Cannot find element while setup, so teardown & deregister. id: ' + id);
131
168
  this.teardownAndDeregister(id);
@@ -1,18 +1,29 @@
1
1
  # Release Checklist
2
2
 
3
- Use this checklist for `1.0.0.rc1` and future releases.
3
+ Use this checklist for every Achilles release. Replace `VERSION` with the
4
+ version being prepared, for example `1.1.0`.
4
5
 
5
- ## Before Building
6
+ ## Before Finalizing The Version
6
7
 
8
+ - Confirm the release type: patch, minor, major, or prerelease.
7
9
  - Confirm `lib/achilles/version.rb` has the intended version.
8
10
  - Confirm `CHANGELOG.md` has an entry for the intended version.
11
+ - Confirm application-facing changes have an upgrade note in `docs/upgrading.md`.
12
+ - Confirm release notes exist in `docs/releases/` when the release needs a
13
+ GitHub release body.
14
+ - Confirm package file expectations are covered by `test/gemspec_files_test.rb`
15
+ when adding source or documentation files.
16
+
17
+ ## Before Building
18
+
9
19
  - Confirm CI is green on GitHub.
10
20
  - Run the local verification commands:
11
21
 
12
22
  ```bash
13
23
  bin/rails test
24
+ node --test test/javascript/*_test.mjs
25
+ for file in $(rg --files app/javascript/achilles test/dummy/app/javascript test/javascript | rg "\.(js|mjs)$"); do node --input-type=module --check < "$file" || exit 1; done
14
26
  bin/rails test:system
15
- for file in $(find app/javascript/achilles test/dummy/app/javascript -name '*.js' -print); do node --input-type=module --check < "$file" || exit 1; done
16
27
  RAILS_ENV=test bin/rails app:assets:precompile
17
28
  ```
18
29
 
@@ -25,13 +36,13 @@ gem build achilles.gemspec
25
36
  Confirm the generated gem name matches the intended version:
26
37
 
27
38
  ```bash
28
- ls achilles-*.gem
39
+ ls achilles-VERSION.gem
29
40
  ```
30
41
 
31
42
  ## Test In A Real Application
32
43
 
33
- In one application that currently uses Achilles `0.1.3`, point the Gemfile to
34
- the local checkout or install the built prerelease gem.
44
+ Before a broad rollout, test the built gem in at least one real Rails + Turbo
45
+ application that already uses Achilles.
35
46
 
36
47
  Check:
37
48
 
@@ -45,30 +56,37 @@ Check:
45
56
  - components that attach window, document, timer, observer, or third-party
46
57
  widget state
47
58
 
48
- For v1, `rootElement()` returns a DOM element. If a component expects a jQuery
49
- object, update it to use DOM APIs or wrap explicitly with
50
- `$(this.rootElement())`.
59
+ For releases with breaking or compatibility-sensitive behavior, test one app
60
+ first, then roll out to the rest of the maintained apps gradually.
51
61
 
52
62
  ## Publish A Prerelease
53
63
 
54
- Only publish `1.0.0.rc1` after local checks and GitHub CI pass.
64
+ Publish a prerelease only when the release needs real-app validation before a
65
+ final tag.
55
66
 
56
67
  ```bash
57
- gem push achilles-1.0.0.rc1.gem
58
- git tag v1.0.0.rc1
59
- git push origin v1.0.0.rc1
68
+ git tag vVERSION
69
+ git push origin vVERSION
70
+ gem push achilles-VERSION.gem
60
71
  ```
61
72
 
62
- ## Publish Final v1.0.0
73
+ Mark the GitHub release as a prerelease and include the matching release notes.
63
74
 
64
- Publish final `1.0.0` only after at least one real application has successfully
65
- tested the release candidate.
75
+ ## Publish A Final Release
76
+
77
+ Publish a final release after local checks, GitHub CI, packaging verification,
78
+ and real-app testing are complete.
79
+
80
+ ```bash
81
+ git tag vVERSION
82
+ git push origin vVERSION
83
+ gem push achilles-VERSION.gem
84
+ ```
66
85
 
67
- Before final release:
86
+ After pushing:
68
87
 
69
- - update `lib/achilles/version.rb` to `1.0.0`
70
- - update `CHANGELOG.md` from `1.0.0.rc1` to `1.0.0`
71
- - run all local checks
72
- - confirm GitHub CI is green
73
- - build and push `achilles-1.0.0.gem`
74
- - tag `v1.0.0`
88
+ - Create or update the GitHub release for `vVERSION`.
89
+ - Paste the release note from `docs/releases/vVERSION.md` when one exists, for
90
+ example `docs/releases/v1.1.0.md`.
91
+ - Link the release back to the upgrade guide for application-facing changes.
92
+ - Confirm the pushed gem is visible on RubyGems.
@@ -0,0 +1,74 @@
1
+ # Achilles 1.1.0
2
+
3
+ Achilles `1.1.0` tightens the application lifecycle for Rails + Turbo apps and
4
+ adds stronger nested-component behavior. This release is intended for existing
5
+ Achilles users who want explicit startup, safer teardown ordering, and better
6
+ runtime behavior around Turbo navigation and dynamic markup.
7
+
8
+ ## Upgrade First
9
+
10
+ This release includes application-facing changes. Before upgrading an existing
11
+ app, read the full guide:
12
+
13
+ - [Upgrading to 1.1.0](../upgrading-to-1.1.0.md)
14
+
15
+ The most important change is explicit application startup:
16
+
17
+ ```js
18
+ const achilles = new Application();
19
+ achilles.componentsClassMapper.addComponentClass("MenuComponent", MenuComponent);
20
+ achilles.start();
21
+ ```
22
+
23
+ Call `start()` after registering component classes. Achilles no longer starts
24
+ from the `Application` constructor.
25
+
26
+ ## Highlights
27
+
28
+ - Added explicit `Application#start` and `Application#stop` lifecycle methods.
29
+ - Added `Application#strictLifecycleErrors` for tests and development.
30
+ - Component parentage now follows DOM ancestry under the synthetic `Page` root.
31
+ - Component teardown now runs from children to parents.
32
+ - Elements with `data-component-class` must have a non-empty `id`; invalid roots
33
+ are skipped with a browser-console error.
34
+ - Achilles now requires `turbo-rails`, so Turbo importmap assets are available
35
+ to host applications.
36
+ - Added browser system coverage for nested components inside Turbo form
37
+ replacement and Turbo Drive navigation.
38
+
39
+ ## Breaking Or Compatibility-Sensitive Changes
40
+
41
+ Applications should check these items before updating:
42
+
43
+ - Search for `new Application` and make sure each Achilles instance calls
44
+ `start()` after all component classes are registered.
45
+ - Search for `data-component-class` and make sure every component root has a
46
+ non-empty unique `id`.
47
+ - Review parent components whose `teardown()` removes DOM nodes, shared event
48
+ targets, widgets, or state that child components also use during cleanup.
49
+ - If you have tests that should fail on lifecycle errors, enable strict mode:
50
+
51
+ ```js
52
+ achilles.strictLifecycleErrors = true;
53
+ ```
54
+
55
+ ## Verification
56
+
57
+ This release line was verified with:
58
+
59
+ ```bash
60
+ bin/rails test
61
+ node --test test/javascript/*_test.mjs
62
+ bin/rails test:system
63
+ RAILS_ENV=test bin/rails app:assets:precompile
64
+ gem build achilles.gemspec
65
+ ```
66
+
67
+ One real application has also been updated successfully. Continue testing in
68
+ your own Rails + Turbo apps before rolling the update through every project.
69
+
70
+ ## Links
71
+
72
+ - [Changelog](../../CHANGELOG.md)
73
+ - [Upgrade index](../upgrading.md)
74
+ - [1.1.0 upgrade guide](../upgrading-to-1.1.0.md)
@@ -0,0 +1,46 @@
1
+ # Achilles 1.1.1
2
+
3
+ Achilles `1.1.1` is a patch release for Rails + Turbo applications using
4
+ browser history restoration. It fixes restored component markup that appeared on
5
+ screen after browser back or forward navigation but no longer had active
6
+ Achilles event listeners.
7
+
8
+ ## Who Should Upgrade
9
+
10
+ Upgrade from `1.1.0` if your application uses Turbo Drive navigation and users
11
+ can return to Achilles-managed pages with the browser back or forward buttons.
12
+
13
+ There are no new application setup requirements in this patch release. Apps
14
+ upgrading from versions before `1.1.0` should still read the
15
+ [1.1.0 upgrade guide](../upgrading-to-1.1.0.md).
16
+
17
+ ## Fixed
18
+
19
+ - Restored Turbo-cached DOM with stale `data-component-registered="true"` flags
20
+ is now parsed correctly when Achilles no longer has a matching registry entry.
21
+ - Deregistering a parent component now deregisters its child component subtree,
22
+ preventing orphaned child registry entries from blocking future setup.
23
+ - Page-level deregistration now iterates over a stable copy of child component
24
+ ids while the registry is being mutated.
25
+
26
+ ## Verification
27
+
28
+ This release was verified with:
29
+
30
+ ```bash
31
+ bin/rails test
32
+ node --test test/javascript/*_test.mjs
33
+ bin/rails test:system
34
+ RAILS_ENV=test bin/rails app:assets:precompile
35
+ gem build achilles.gemspec
36
+ ```
37
+
38
+ The system suite includes browser back, browser forward, restored nested
39
+ components, restored form-field listeners, restored Turbo-replaced forms, and
40
+ duplicate listener prevention.
41
+
42
+ ## Links
43
+
44
+ - [Changelog](../../CHANGELOG.md)
45
+ - [Upgrade index](../upgrading.md)
46
+ - [1.1.0 upgrade guide](../upgrading-to-1.1.0.md)
@@ -0,0 +1,58 @@
1
+ # Achilles 1.1.2
2
+
3
+ Achilles `1.1.2` is a patch release for Rails + Turbo applications using Turbo
4
+ Frames. It fixes late component cleanup when Turbo replaces frame content.
5
+
6
+ ## Who Should Upgrade
7
+
8
+ Upgrade from `1.1.0` or `1.1.1` if your application registers
9
+ Achilles-managed components inside a Turbo Frame or on the frame root itself.
10
+
11
+ There are no new application setup requirements in this patch release. Apps
12
+ upgrading from versions before `1.1.0` should still read the
13
+ [1.1.0 upgrade guide](../upgrading-to-1.1.0.md).
14
+
15
+ ## Fixed
16
+
17
+ - Registered components in an outgoing Turbo Frame are now torn down and
18
+ deregistered immediately before Turbo invokes the frame renderer.
19
+ - Cleanup runs from children to parents and includes the frame root when it is
20
+ registered as a component.
21
+ - The original Turbo renderer keeps its receiver, arguments, return value, and
22
+ error behavior.
23
+ - Incoming components continue to register through the existing DOM observer,
24
+ while ordinary non-Turbo removal behavior remains unchanged.
25
+ - Starting and stopping an Achilles application manages the frame-render
26
+ listener without creating duplicates.
27
+
28
+ ## Compatibility
29
+
30
+ This backward-compatible `1.1.x` patch intentionally moves frame-contained
31
+ teardown earlier, while the outgoing component elements are still present,
32
+ instead of relying on missing-element recovery after replacement.
33
+
34
+ Achilles continues to require Turbo Rails `2.0.11` or newer. This release does
35
+ not add dependencies or require an application migration.
36
+
37
+ ## Verification
38
+
39
+ This release was verified with:
40
+
41
+ ```bash
42
+ bin/rails test
43
+ node --test test/javascript/*_test.mjs
44
+ for file in $(rg --files app/javascript/achilles test/dummy/app/javascript test/javascript | rg "\.(js|mjs)$"); do node --input-type=module --check < "$file" || exit 1; done
45
+ bin/rails test:system
46
+ RAILS_ENV=test bin/rails app:assets:precompile
47
+ gem build achilles.gemspec
48
+ ```
49
+
50
+ The system suite covers a native Turbo Frame replacement with a registered
51
+ frame root, nested outgoing components, incoming component registration and
52
+ interaction, and browser-console error checks.
53
+
54
+ ## Links
55
+
56
+ - [Changelog](../../CHANGELOG.md)
57
+ - [Upgrade index](../upgrading.md)
58
+ - [1.1.0 upgrade guide](../upgrading-to-1.1.0.md)
data/docs/upgrading.md CHANGED
@@ -10,6 +10,12 @@ setup, component markup, lifecycle behavior, or public APIs.
10
10
  - [Upgrading to 1.1.0](upgrading-to-1.1.0.md)
11
11
  - [Migrating from 0.1.3 to v1](migrating-from-0.1.3-to-v1.md)
12
12
 
13
+ ## Release Notes
14
+
15
+ - [Achilles 1.1.2](releases/v1.1.2.md)
16
+ - [Achilles 1.1.1](releases/v1.1.1.md)
17
+ - [Achilles 1.1.0](releases/v1.1.0.md)
18
+
13
19
  ## Upgrade Policy
14
20
 
15
21
  Before upgrading an existing application:
@@ -1,3 +1,3 @@
1
1
  module Achilles
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: achilles
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jey Geethan
@@ -90,6 +90,9 @@ files:
90
90
  - docs/core-js-gaps.md
91
91
  - docs/migrating-from-0.1.3-to-v1.md
92
92
  - docs/release-checklist.md
93
+ - docs/releases/v1.1.0.md
94
+ - docs/releases/v1.1.1.md
95
+ - docs/releases/v1.1.2.md
93
96
  - docs/upgrading-to-1.1.0.md
94
97
  - docs/upgrading.md
95
98
  - docs/v1-roadmap.md