wuffle 0.41.5 → 0.42.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.
@@ -1 +1 @@
1
- {"version":3,"file":"service-worker.js","sources":["../../board/src/service-worker.js"],"sourcesContent":["import AVATAR_SVG from './avatar.svg';\n\nconst CACHE = 'wuffle-cache-v1';\n\nfunction precache() {\n return caches.open(CACHE).then(function(cache) {\n return cache.addAll([\n '/board',\n '/board/apple-touch-icon.png',\n '/board/bundle.css',\n '/board/bundle.css.map',\n '/board/bundle.js',\n '/board/bundle.js.map',\n '/board/favicon.png',\n '/board/global.css',\n '/board/logo-192.png',\n '/board/logo-512.png',\n '/board/logo.svg',\n '/board/manifest.json'\n ]).catch(err => console.error('caching failed', err));\n });\n}\n\nfunction cacheResponse(event, request, response) {\n\n return caches.open(CACHE).then(cache => {\n\n if (!event.clientId) {\n cache.put(request, response);\n\n return;\n }\n\n /* global clients */\n return clients.get(event.clientId).then(client => {\n\n return cache.match(request).then(matchingResponse => {\n\n if (matchingResponse) {\n\n const oldEtag = matchingResponse.headers.get('ETag');\n const newEtag = response.headers.get('ETag');\n\n if (oldEtag !== newEtag) {\n client.postMessage({\n message: 'resource.changed',\n url: request.url\n });\n }\n }\n\n cache.put(request, response);\n });\n });\n });\n}\n\nfunction fromNetwork(event, request) {\n\n return fetch(request).then(response => {\n\n if (response && response.status === 200) {\n const cachedResponse = response.clone();\n\n event.waitUntil(\n cacheResponse(event, request, cachedResponse)\n );\n }\n\n return response;\n });\n}\n\nfunction serveFallbackAvatar() {\n return Promise.resolve(new Response(AVATAR_SVG, {\n headers: {\n 'Content-Type': 'image/svg+xml'\n }\n }));\n}\n\nfunction fromCache(event, request) {\n return caches.open(CACHE).then(cache => {\n return cache.match(request).then(matching => {\n return matching || Promise.reject('not-in-cache');\n });\n });\n}\n\nself.addEventListener('install', event => {\n event.waitUntil(\n precache(event)\n );\n\n self.skipWaiting();\n});\n\nself.addEventListener('activate', function(event) {\n event.waitUntil(self.clients.claim());\n});\n\n// actual fetching logic ////////////\n\nself.addEventListener('fetch', function(event) {\n\n if (event.request.cache === 'only-if-cached' && event.request.mode !== 'same-origin') {\n return;\n }\n\n const { request } = event;\n\n const { url } = request;\n\n if (/^https:\\/\\/avatars[\\d]+\\.githubusercontent\\.com/.test(url)) {\n event.respondWith(\n fromCache(event, request)\n .catch(() => fromNetwork(event, request))\n .catch(() => serveFallbackAvatar())\n );\n\n return;\n }\n\n if (/\\/board\\?.*$/.test(url)) {\n\n const cachedRequest = new Request('/board');\n\n const remoteFetch = fromNetwork(event, cachedRequest);\n\n event.respondWith(\n fromCache(event, cachedRequest)\n .catch(() => remoteFetch)\n );\n\n event.waitUntil(remoteFetch);\n\n return;\n }\n\n if (!/\\/wuffle\\/.*/.test(url) || /\\/wuffle\\/board$/.test(url)) {\n const remoteFetch = fromNetwork(event, request);\n\n event.respondWith(\n fromCache(event, request)\n .catch(() => remoteFetch)\n );\n\n event.waitUntil(remoteFetch);\n\n return;\n }\n});"],"names":["CACHE","fromNetwork","event","request","fetch","then","response","status","cachedResponse","clone","waitUntil","caches","open","cache","clientId","clients","get","client","match","matchingResponse","headers","postMessage","message","url","put","cacheResponse","fromCache","matching","Promise","reject","self","addEventListener","addAll","catch","err","console","error","skipWaiting","claim","mode","test","respondWith","resolve","Response","Content-Type","cachedRequest","Request","remoteFetch"],"mappings":"yBAEA,MAAMA,EAAQ,kBAuDd,SAASC,EAAYC,EAAOC,GAE1B,OAAOC,MAAMD,GAASE,MAAKC,IAEzB,GAAIA,GAAgC,MAApBA,EAASC,OAAgB,CACvC,MAAMC,EAAiBF,EAASG,QAEhCP,EAAMQ,UAzCZ,SAAuBR,EAAOC,EAASG,GAErC,OAAOK,OAAOC,KAAKZ,GAAOK,MAAKQ,IAE7B,GAAKX,EAAMY,SAOX,OAAOC,QAAQC,IAAId,EAAMY,UAAUT,MAAKY,GAE/BJ,EAAMK,MAAMf,GAASE,MAAKc,IAE3BA,GAEcA,EAAiBC,QAAQJ,IAAI,UAC7BV,EAASc,QAAQJ,IAAI,SAGnCC,EAAOI,YAAY,CACjBC,QAAS,mBACTC,IAAKpB,EAAQoB,MAKnBV,EAAMW,IAAIrB,EAASG,QAvBrBO,EAAMW,IAAIrB,EAASG,MAqCjBmB,CAAcvB,EAAOC,EAASK,IAIlC,OAAOF,KAYX,SAASoB,EAAUxB,EAAOC,GACxB,OAAOQ,OAAOC,KAAKZ,GAAOK,MAAKQ,GACtBA,EAAMK,MAAMf,GAASE,MAAKsB,GACxBA,GAAYC,QAAQC,OAAO,oBAKxCC,KAAKC,iBAAiB,WAAW7B,IAC/BA,EAAMQ,UArFCC,OAAOC,KAAKZ,GAAOK,MAAK,SAASQ,GACtC,OAAOA,EAAMmB,OAAO,CAClB,SACA,8BACA,oBACA,wBACA,mBACA,uBACA,qBACA,oBACA,sBACA,sBACA,kBACA,yBACCC,OAAMC,GAAOC,QAAQC,MAAM,iBAAkBF,SA2ElDJ,KAAKO,iBAGPP,KAAKC,iBAAiB,YAAY,SAAS7B,GACzCA,EAAMQ,UAAUoB,KAAKf,QAAQuB,YAK/BR,KAAKC,iBAAiB,SAAS,SAAS7B,GAEtC,GAA4B,mBAAxBA,EAAMC,QAAQU,OAAqD,gBAAvBX,EAAMC,QAAQoC,KAC5D,OAGF,MAAMpC,QAAEA,GAAYD,GAEdqB,IAAEA,GAAQpB,EAEhB,GAAI,kDAAkDqC,KAAKjB,GACzDrB,EAAMuC,YACJf,EAAUxB,EAAOC,GACd8B,OAAM,IAAMhC,EAAYC,EAAOC,KAC/B8B,OAAM,IA3CNL,QAAQc,QAAQ,IAAIC,8SAAqB,CAC9CvB,QAAS,CACPwB,eAAgB,2BAqCpB,CAUA,GAAI,eAAeJ,KAAKjB,GAAM,CAE5B,MAAMsB,EAAgB,IAAIC,QAAQ,UAE5BC,EAAc9C,EAAYC,EAAO2C,GASvC,OAPA3C,EAAMuC,YACJf,EAAUxB,EAAO2C,GACdZ,OAAM,IAAMc,UAGjB7C,EAAMQ,UAAUqC,GAKlB,IAAK,eAAeP,KAAKjB,IAAQ,mBAAmBiB,KAAKjB,GAAM,CAC7D,MAAMwB,EAAc9C,EAAYC,EAAOC,GASvC,OAPAD,EAAMuC,YACJf,EAAUxB,EAAOC,GACd8B,OAAM,IAAMc,UAGjB7C,EAAMQ,UAAUqC"}
1
+ {"version":3,"file":"service-worker.js","sources":["../../board/src/service-worker.js"],"sourcesContent":["import AVATAR_SVG from './avatar.svg';\n\nconst CACHE = 'wuffle-cache-v1';\n\nfunction precache() {\n return caches.open(CACHE).then(function(cache) {\n return cache.addAll([\n '/board',\n '/board/apple-touch-icon.png',\n '/board/bundle.css',\n '/board/bundle.css.map',\n '/board/bundle.js',\n '/board/bundle.js.map',\n '/board/favicon.png',\n '/board/global.css',\n '/board/logo-192.png',\n '/board/logo-512.png',\n '/board/logo.svg',\n '/board/manifest.json'\n ]).catch(err => console.error('caching failed', err));\n });\n}\n\nfunction cacheResponse(event, request, response) {\n\n return caches.open(CACHE).then(cache => {\n\n if (!event.clientId) {\n cache.put(request, response);\n\n return;\n }\n\n /* global clients */\n return clients.get(event.clientId).then(client => {\n\n return cache.match(request).then(matchingResponse => {\n\n if (matchingResponse) {\n\n const oldEtag = matchingResponse.headers.get('ETag');\n const newEtag = response.headers.get('ETag');\n\n if (oldEtag !== newEtag) {\n client.postMessage({\n message: 'resource.changed',\n url: request.url\n });\n }\n }\n\n cache.put(request, response);\n });\n });\n });\n}\n\nfunction fromNetwork(event, request) {\n\n return fetch(request).then(response => {\n\n if (response && response.status === 200) {\n const cachedResponse = response.clone();\n\n event.waitUntil(\n cacheResponse(event, request, cachedResponse)\n );\n }\n\n return response;\n });\n}\n\nfunction serveFallbackAvatar() {\n return Promise.resolve(new Response(AVATAR_SVG, {\n headers: {\n 'Content-Type': 'image/svg+xml'\n }\n }));\n}\n\nfunction fromCache(event, request) {\n return caches.open(CACHE).then(cache => {\n return cache.match(request).then(matching => {\n return matching || Promise.reject('not-in-cache');\n });\n });\n}\n\nself.addEventListener('install', event => {\n event.waitUntil(\n precache()\n );\n\n self.skipWaiting();\n});\n\nself.addEventListener('activate', function(event) {\n event.waitUntil(self.clients.claim());\n});\n\n// actual fetching logic ////////////\n\nself.addEventListener('fetch', function(event) {\n\n if (event.request.cache === 'only-if-cached' && event.request.mode !== 'same-origin') {\n return;\n }\n\n const { request } = event;\n\n const { url } = request;\n\n if (/^https:\\/\\/avatars[\\d]+\\.githubusercontent\\.com/.test(url)) {\n event.respondWith(\n fromCache(event, request)\n .catch(() => fromNetwork(event, request))\n .catch(() => serveFallbackAvatar())\n );\n\n return;\n }\n\n if (/\\/board\\?.*$/.test(url)) {\n\n const cachedRequest = new Request('/board');\n\n const remoteFetch = fromNetwork(event, cachedRequest);\n\n event.respondWith(\n fromCache(event, cachedRequest)\n .catch(() => remoteFetch)\n );\n\n event.waitUntil(remoteFetch);\n\n return;\n }\n\n if (!/\\/wuffle\\/.*/.test(url) || /\\/wuffle\\/board$/.test(url)) {\n const remoteFetch = fromNetwork(event, request);\n\n event.respondWith(\n fromCache(event, request)\n .catch(() => remoteFetch)\n );\n\n event.waitUntil(remoteFetch);\n\n return;\n }\n});"],"names":["CACHE","fromNetwork","event","request","fetch","then","response","status","cachedResponse","clone","waitUntil","caches","open","cache","clientId","clients","get","client","match","matchingResponse","headers","postMessage","message","url","put","cacheResponse","fromCache","matching","Promise","reject","self","addEventListener","addAll","catch","err","console","error","skipWaiting","claim","mode","test","respondWith","resolve","Response","cachedRequest","Request","remoteFetch"],"mappings":"yBAEA,MAAMA,EAAQ,kBAuDd,SAASC,EAAYC,EAAOC,GAE1B,OAAOC,MAAMD,GAASE,MAAKC,IAEzB,GAAIA,GAAgC,MAApBA,EAASC,OAAgB,CACvC,MAAMC,EAAiBF,EAASG,QAEhCP,EAAMQ,UAzCZ,SAAuBR,EAAOC,EAASG,GAErC,OAAOK,OAAOC,KAAKZ,GAAOK,MAAKQ,IAE7B,GAAKX,EAAMY,SAOX,OAAOC,QAAQC,IAAId,EAAMY,UAAUT,MAAKY,GAE/BJ,EAAMK,MAAMf,GAASE,MAAKc,IAE3BA,GAEcA,EAAiBC,QAAQJ,IAAI,UAC7BV,EAASc,QAAQJ,IAAI,SAGnCC,EAAOI,YAAY,CACjBC,QAAS,mBACTC,IAAKpB,EAAQoB,MAKnBV,EAAMW,IAAIrB,EAASG,QAvBrBO,EAAMW,IAAIrB,EAASG,MAqCjBmB,CAAcvB,EAAOC,EAASK,IAIlC,OAAOF,KAYX,SAASoB,EAAUxB,EAAOC,GACxB,OAAOQ,OAAOC,KAAKZ,GAAOK,MAAKQ,GACtBA,EAAMK,MAAMf,GAASE,MAAKsB,GACxBA,GAAYC,QAAQC,OAAO,oBAKxCC,KAAKC,iBAAiB,WAAW7B,IAC/BA,EAAMQ,UArFCC,OAAOC,KAAKZ,GAAOK,MAAK,SAASQ,GACtC,OAAOA,EAAMmB,OAAO,CAClB,SACA,8BACA,oBACA,wBACA,mBACA,uBACA,qBACA,oBACA,sBACA,sBACA,kBACA,yBACCC,OAAMC,GAAOC,QAAQC,MAAM,iBAAkBF,SA2ElDJ,KAAKO,iBAGPP,KAAKC,iBAAiB,YAAY,SAAS7B,GACzCA,EAAMQ,UAAUoB,KAAKf,QAAQuB,YAK/BR,KAAKC,iBAAiB,SAAS,SAAS7B,GAEtC,GAA4B,mBAAxBA,EAAMC,QAAQU,OAAqD,gBAAvBX,EAAMC,QAAQoC,KAC5D,OAGF,MAAMpC,QAAEA,GAAYD,GAEdqB,IAAEA,GAAQpB,EAEhB,GAAI,kDAAkDqC,KAAKjB,GACzDrB,EAAMuC,YACJf,EAAUxB,EAAOC,GACd8B,OAAM,IAAMhC,EAAYC,EAAOC,KAC/B8B,OAAM,IA3CNL,QAAQc,QAAQ,IAAIC,8SAAqB,CAC9CvB,QAAS,CACP,eAAgB,2BAqCpB,CAUA,GAAI,eAAeoB,KAAKjB,GAAM,CAE5B,MAAMqB,EAAgB,IAAIC,QAAQ,UAE5BC,EAAc7C,EAAYC,EAAO0C,GASvC,OAPA1C,EAAMuC,YACJf,EAAUxB,EAAO0C,GACdX,OAAM,IAAMa,UAGjB5C,EAAMQ,UAAUoC,GAKlB,IAAK,eAAeN,KAAKjB,IAAQ,mBAAmBiB,KAAKjB,GAAM,CAC7D,MAAMuB,EAAc7C,EAAYC,EAAOC,GASvC,OAPAD,EAAMuC,YACJf,EAAUxB,EAAOC,GACd8B,OAAM,IAAMa,UAGjB5C,EAAMQ,UAAUoC"}
package/CHANGELOG.md DELETED
@@ -1,465 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to [wuffle](https://github.com/nikku/wuffle) are documented here. We use [semantic versioning](http://semver.org/) for releases.
4
-
5
- ## Unreleased
6
-
7
- _**Note:** Yet to be released changes appear here._
8
-
9
- ## 0.41.5
10
-
11
- * `CHORE`: push `latest` and `next` tags to [docker hub](https://hub.docker.com/repository/docker/nrehwaldt/wuffle) again
12
- * `DEPS`: patch bump dependencies
13
-
14
- ## 0.41.4
15
-
16
- * `CHORE`: control published files via `package.json#files`
17
-
18
- ## 0.41.3
19
-
20
- * `FIX`: distinguish requested review and commented states for PR participants
21
-
22
- ## 0.41.2
23
-
24
- * `FIX`: correctly disable loader interaction if hidden
25
-
26
- ## 0.41.1
27
-
28
- * `FIX`: open external project links with rel=noopener
29
-
30
- ## 0.41.0
31
-
32
- * `FEAT`: link documentation next to powered by icon
33
-
34
- ## 0.40.1
35
-
36
- * `FIX`: allow create issue repository hint selection via mouse
37
- * `FIX`: correct create issue repository hints navigation via keyboard
38
-
39
- ## 0.40.0
40
-
41
- * `FEAT`: filter board for collaborators
42
- * `FEAT`: apply board filters with `SHIFT` / `ALT` click modifiers only
43
- * `FEAT`: add create issue widget ([#65](https://github.com/nikku/wuffle/issues/65))
44
- * `FEAT`: improve navigation layout
45
- * `FIX`: workaround Chromium service worker bug ([`f6d20222`](https://github.com/nikku/wuffle/commit/f6d202227979935d3d9b62f1f2f02c43eedd9f54))
46
- * `CHORE`: adjust board filters
47
- * `DOCS`: document [board filters](./docs/BOARD_FILTERS.md)
48
-
49
- ### Breaking Changes
50
-
51
- * Filtering issues on the board via click now consistently requires a `SHIFT` or `ALT` modifier
52
-
53
- ## 0.39.0
54
-
55
- * `FIX`: do not swallow store import errors ([#114](https://github.com/nikku/wuffle/pull/114))
56
- * `CHORE`: improve error logging with context ([#114](https://github.com/nikku/wuffle/pull/114))
57
- * `DEPS`: bump to `probot@11.1.0`
58
-
59
- ## 0.38.1
60
-
61
- * `FIX`: bump docker file base image to Node@14
62
-
63
- ## 0.38.0
64
-
65
- * `FEAT`: implement first time setup
66
- * `FIX`: add `member` permission to app manifest
67
- * `FIX`: correct app default permmissions
68
- * `DOCS`: rewrite setup guide
69
-
70
- ## 0.37.0
71
-
72
- * `FEAT`: allow setup to be executed via app binary
73
- * `FEAT`: add explicit setup command
74
- * `FIX`: make `mkdirp` a production dependency
75
- * `CHORE`: use leak free in memory session store
76
-
77
- ## 0.36.0
78
-
79
- * `FEAT`: fetch user access repositories with max page size
80
- * `FEAT`: rework S3 data dump
81
- * `CHORE`: bump to `probot@11` ([`9e4c9339`](https://github.com/nikku/wuffle/commit/9e4c933910db82ef2e4416e2a9ea42a749d78d2b), [`cc8ad79a`](https://github.com/nikku/wuffle/commit/cc8ad79a9845e5447cc090332da96bb49c7bed3c))
82
- * `CHORE`: require Node@14 ([`45a335a7`](https://github.com/nikku/wuffle/commit/45a335a77b700b90abf088ec426867cc69504f30))
83
- * `DOCS`: add missing configuration entries
84
-
85
- ### Breaking Changes
86
-
87
- * `probot@11` update changes some internal APIs as well as webhook data
88
- * Persistent S3 task board storage requires `env.S3_REGION` to be configured
89
- * Minimal required NodeJS version is now 14
90
-
91
- ## 0.35.5
92
-
93
- * `CHORE`: patch bump dependency versions
94
-
95
- ## 0.35.4
96
-
97
- * `FIX`: correct login session not being established during initial app login
98
- * `CHORE`: add ability to disable background sync using environment variable
99
- * `CHORE`: relax same-site cookie setting
100
-
101
- ## 0.35.3
102
-
103
- * `FIX`: correct fetching of authenticated user repositories
104
-
105
- ## 0.35.2
106
-
107
- * `FIX`: correct _last month_ temporal filter completion
108
-
109
- ## 0.35.1
110
-
111
- * `FIX`: prevent long milestone labels from overflowing card
112
- * `FIX`: relax secure cookie setting
113
- * `CHORE`: allow to configure `TRUST_PROXY` to enable secure cookies
114
-
115
- ## 0.35.0
116
-
117
- * `FEAT(events-sync)`: support repository renaming ([#102](https://github.com/nikku/wuffle/issues/102))
118
- * `FEAT(events-sync)`: support issue transfer ([#92](https://github.com/nikku/wuffle/issues/92))
119
- * `FEAT(search)`: add `is:milestoned` filter ([`f6798cf3`](https://github.com/nikku/wuffle/commit/f6798cf39b31272d3474f29a1bc028e5d8003b01))
120
- * `FEAT(search)`: add `involves` filter ([#100](https://github.com/nikku/wuffle/issues/100))
121
- * `FEAT(search)`: add `created` and `updated` filters ([#98](https://github.com/nikku/wuffle/issues/98))
122
- * `FEAT(search)`: add `author` filter ([#97](https://github.com/nikku/wuffle/issues/97))
123
- * `FEAT(app)`: harden session cookie ([`b16639b5`](https://github.com/nikku/wuffle/commit/b16639b560af0d49b3b6c17af293e12700dbc1f8))
124
- * `FIX(background-sync)`: improve handling of removed repositories ([#101](https://github.com/nikku/wuffle/pull/101), [#93](https://github.com/nikku/wuffle/issues/93), [#90](https://github.com/nikku/wuffle/issues/90))
125
- * `CHORE(app)`: introduce type linting and cleanup `events` API ([#96](https://github.com/nikku/wuffle/issues/96))
126
-
127
- ### Breaking Changes
128
-
129
- * The API of the `events` service changed. For all APIs that take a priority the priority is now the optional, last argument.
130
-
131
- ## 0.34.0
132
-
133
- * `FEAT`: support `convert_to_draft` webhook to move PR back to IN_PROGESS ([#86](https://github.com/nikku/wuffle/issues/86))
134
- * `CHORE`: propagate user-access read errors
135
- * `CHORE`: back-off periodic checks on error
136
-
137
- ## 0.33.1
138
-
139
- * `FIX`: do not fail search on missing assignees
140
- * `CHORE`: make issue search fail safe
141
-
142
- ## 0.33.0
143
-
144
- * `FEAT`: log out user on wuffle once her GitHub access token expired
145
- * `FIX`: correctly handle invalid issue when updating store
146
-
147
- ## 0.32.0
148
-
149
- * `FEAT`: various performance improvements for logged in board access ([`2fe40483`](https://github.com/nikku/wuffle/commit/2fe404834c8b291335079c782dff1bbc7d2015f5), [`de5403da`](https://github.com/nikku/wuffle/commit/de5403da7eb7dc5dde71ded3add6f08e1ed7ff27))
150
- * `FEAT`: use app APIs to determine user repository access ([`579743a9`](https://github.com/nikku/wuffle/commit/579743a9002873a2a22f6116debfbcf335f5e7ed))
151
- * `FIX`: account for GitHub API changes breaking private repository display ([#80](https://github.com/nikku/wuffle/issues/80))
152
- * `CHORE`: bump dependency versions
153
-
154
- ## 0.31.0
155
-
156
- * `FEAT`: be able to specify default column collapsed state
157
- * `FIX`: prevent collapsed columns from breaking layout
158
- * `FIX`: correct collapsed column layout in Firefox
159
-
160
- ## 0.30.0
161
-
162
- * `FEAT`: support `connects` to create parent -> child relationship ([#78](https://github.com/nikku/wuffle/pull/78))
163
- * `FEAT`: add ability to whitelist enabled organizations ([#75](https://github.com/nikku/wuffle/issues/75))
164
- * `CHORE`: add sentry support, [inherited from Probot](https://probot.github.io/docs/deployment/#error-tracking)
165
- * `CHORE`: board update errors with context
166
- * `CHORE`: ensure the app restores before completing startup
167
- * `CHORE`: serialize board version on store dump
168
- * `FIX`: do not bump `updated_at` when synchronizing issue details
169
- * `FIX`: correct status sync failure on PR open
170
- * `FIX`: don't swallow changes on concurrent store updates
171
- * `FIX`: prevent accidental double background sync
172
- * `FIX`: handle deleted forks in pull request filters ([`2b40281f`](https://github.com/nikku/wuffle/commit/2b40281f756e31e16ced2b4a644d0f20784c03d8))
173
-
174
- ## 0.29.0
175
-
176
- * `FEAT`: improve background synchronization of pull request details ([#70](https://github.com/nikku/wuffle/issues/70))
177
- * `FEAT`: make background synchronization configurable via environment variables
178
-
179
- ## 0.28.0
180
-
181
- * `FEAT`: recognize full list of GitHub closes keywords ([#73](https://github.com/nikku/wuffle/pull/73))
182
- * `FEAT`: recognize colon in issue links ([#73](https://github.com/nikku/wuffle/pull/73))
183
- * `CHORE`: feat with maximum page size during background sync to avoid hitting GitHub rate limits
184
-
185
- _Special thanks goes to [@mjcarroll](https://github.com/mjcarroll) for contributing [#73](https://github.com/nikku/wuffle/pull/73)._
186
-
187
- ## 0.27.0
188
-
189
- * `FEAT`: reindex store on board configuration changes ([#69](https://github.com/nikku/wuffle/pull/69), [#49](https://github.com/nikku/wuffle/issues/49))
190
- * `FEAT`: allow to hook into store restore and serialize
191
-
192
- ## 0.26.1
193
-
194
- * `FIX(app)`: deduplicate check runs by name ([#66](https://github.com/nikku/wuffle/pull/66))
195
-
196
- ## 0.26.0
197
-
198
- * `FEAT`: integrate pull request checks and statuses ([#41](https://github.com/nikku/wuffle/issues/41))
199
- * `FEAT(board)`: provide better link titles ([`77cf5b2d`](https://github.com/nikku/wuffle/commit/77cf5b2d2374005bb6d4532d596bcb48d0129cfc))
200
- * `FEAT(board)`: add limited offline support
201
- * `FEAT(board)`: improve error handling and recovery
202
- * `FEAT(board)`: cache assets in front-end
203
- * `FEAT(board)`: make header responsive
204
- * `FIX(app)`: correct label update ([`3ff74c22`](https://github.com/nikku/wuffle/commit/3ff74c222f7547448f7913300fcfde2abfb9bf4d))
205
- * `FIX(app)`: update card on `pull_request.synchronize`, too
206
-
207
- ### Breaking Changes
208
-
209
- * The app requires read access to checks and statuses as well as the connected event subscriptions in order to display pull request states ([#41](https://github.com/nikku/wuffle/issues/41)).
210
-
211
-
212
- ## 0.25.1
213
-
214
- * `DOCS`: align app with project documentation
215
-
216
- ## 0.25.0
217
-
218
- * `FEAT`: publish as `wuffle` to npm
219
- * `FEAT`: validate presence of compiled board assets
220
- * `FEAT(app)`: log working directory when starting
221
- * `CHORE`: compile board assets to app
222
- * `CHORE(app)`: resolve `wuffle.config.js` in working directory
223
-
224
- ## 0.24.2
225
-
226
- * `CHORE(board)`: reduce amount of unused styles
227
-
228
- ## 0.24.1
229
-
230
- * `CHORE(board)`: add more a11y hints
231
- * `FIX`: correctly handle dismissed reviews
232
-
233
- ## 0.24.0
234
-
235
- * `FIX(board)`: ensure long card titles do not kill card layout
236
- * `FEAT(board)`: give card links full prominence
237
- * `FEAT(board)`: show assignees collapsed and expand them as needed
238
-
239
- ## 0.23.0
240
-
241
- * `FEAT(app)`: integrate reviews ([#22](https://github.com/nikku/wuffle/issues/22))
242
- * `FEAT(app)`: pick up milestone edits ([#46](https://github.com/nikku/wuffle/issues/46))
243
- * `FEAT(app)`: pick up label edits
244
- * `FEAT(app)`: allow partial issue updates
245
- * `FEAT(background-sync)`: add ability to hook up external behaviors
246
- * `FEAT(background-sync)`: batch update issues ([`1958c9d3`](https://github.com/nikku/wuffle/commit/1958c9d3e8a968d93f0779d99210be7ab1538069))
247
- * `FEAT(board)`: hide merged, non-closing PRs from cards ([`06794aa5`](https://github.com/nikku/wuffle/commit/06794aa54c745d85518473b5c1541c63512c7c57))
248
- * `FEAT(board)`: add numerous UI hints
249
- * `FEAT(board)`: improve assignee display
250
- * `FEAT(board)`: slightly adjust board styles, making it more pleasent to look at
251
- * `FEAT(store)`: serialize store updates ([`a5bdcbe5`](https://github.com/nikku/wuffle/commit/a5bdcbe5927b2e35fdd95d38463399ac5e32eea3))
252
-
253
- ## 0.22.0
254
-
255
- * `FEAT(search)`: include login/org in repository search
256
- * `FEAT(search)`: use includes to filter labels and repositories
257
- * `FEAT(board)`: deep link milestone to GitHub
258
- * `FIX(board)`: correct icon sizes displaying wrong in Firefox ([#48](https://github.com/nikku/wuffle/pull/48))
259
-
260
- ## 0.21.0
261
-
262
- * `FEAT(app)`: reduce re-ordering noise on the board by card order, if possible ([`62bea58d`](https://github.com/nikku/wuffle/commit/62bea58d447fcab6a5e64479e768f22828051c32))
263
- * `FEAT(app)`: do not move referenced issues via board ([`260d1e8a`](https://github.com/nikku/wuffle/commit/260d1e8a1077eaacf195a6b880fb870bd11f95c8))
264
- * `FEAT(board)`: provide card link titles
265
- * `FEAT(board)`: make card link icons and PR / epic icons clickable
266
- * `FEAT(board)`: show blocking links first in list
267
- * `FEAT(board)`: make title read-only
268
- * `FEAT(board)`: visualize open required by / closes issues as standard link types
269
- * `FIX(app)`: only move issues to top that move to new column
270
-
271
- ## 0.20.0
272
-
273
- * `FEAT(board)`: make click on issue numbers open the issue on GitHub as the default interaction again ([#35](https://github.com/nikku/wuffle/issues/35))
274
- * `FEAT(board)`: make filtering by issue reference, tag or milestone available as `SHIFT` / `CTRL` + click
275
- * `FEAT(board)`: make consecutive click on reference, tag or milestone toggle the relevant filter
276
- * `FEAT(board)`: escape card dragging on `ESC` key
277
-
278
- ## 0.19.1
279
-
280
- * `DOCS`: add troubleshooting document
281
- * `DOCS`: document column to state mappings
282
-
283
- ## 0.19.0
284
-
285
- * `FEAT(app)`: handle PRs from external like new issues ([`8e0919d5`](https://github.com/nikku/wuffle/commit/8e0919d5358d1642bde2c08f138b4d1385bc1745))
286
- * `FEAT(app)`: allow alternative column names and explicit state mappings ([`c2575b32`](https://github.com/nikku/wuffle/commit/c2575b3246195106a7c7a95c919cc2315c39a6fc))
287
- * `FEAT(app)`: validate board configuration ([#39](https://github.com/nikku/wuffle/issues/39))
288
- * `FEAT(app)`: crash on run failure ([`2d2ac864`](https://github.com/nikku/wuffle/commit/2d2ac864c31822546a7de7b25c3a375119a32048))
289
-
290
- ## 0.18.0
291
-
292
- * `FEAT(app)`: recognize list of linked issues with the same type
293
- * `DOCS`: document login callback url
294
- * `FIX(auth-routes)`: gracefully handle missing cached data in auth callback
295
-
296
- ## 0.17.0
297
-
298
- * `FEAT(background-sync)`: ignore archived repositories
299
- * `FEAT(apps/dump-store)`: allow usage of local dump store outside dev mode
300
- * `CHORE`: [di-ify](https://github.com/nikku/async-didi) app core
301
-
302
- ### Breaking Changes
303
-
304
- * We restructured internals and made apps expose their own APIs. Things changed.
305
-
306
- ## 0.16.0
307
-
308
- * `FEAT`: connect all repositories connected to GitHub app
309
-
310
- ### Breaking Changes
311
-
312
- * `config.repositories` is now obsolete
313
- * The board does not default to a repository for its name, configure a board name via `config.name`
314
-
315
- ## 0.15.1
316
-
317
- * `FIX(app)`: capture requested reviewer changes
318
-
319
- ## 0.15.0
320
-
321
- * `FEAT(app)`: mark column as `sorting=true` to incrementally sort cards based on links ([#29](https://github.com/nikku/wuffle/issues/29))
322
- * `FIX(app)`: correct GitHub app manifest
323
- * `FIX(board)`: correctly handle reordering updates
324
-
325
- ## 0.14.0
326
-
327
- * `DOCS`: new setup and run guide :tada:
328
- * `FIX`: correct various getting started / configuration glitches
329
- * `FIX`: validate `BASE_URL` in run script
330
-
331
- ## 0.13.0
332
-
333
- * `FEAT(board)`: filter by tags
334
- * `FIX(board)`: de-duplicate attached PR links
335
- * `FIX(app)`: properly update link sources if linked issue changes ([#33](https://github.com/nikku/wuffle/issues/33))
336
- * `CHORE(app)`: improve start validation and hints
337
-
338
- ## 0.12.0
339
-
340
- * `FEAT(board)`: add powered by link
341
- * `FEAT(app)`: allow searching by `ref`
342
- * `FEAT(app)`: inverse link related to issues
343
- * `FEAT(board)`: add ability to filter by issue with dependencies
344
- * `FEAT(board)`: show epic progress bar and completed count ([#27](https://github.com/nikku/wuffle/issues/27))
345
- * `FIX(apps/search)`: allow more special keys in search
346
-
347
- ## 0.11.0
348
-
349
- * `FEAT(board)`: display issue links ([#3](https://github.com/nikku/wuffle/issues/3))
350
- * `FEAT(board)`: display full issue key on hover
351
- * `FEAT(board)`: add epic icon and links ([#30](https://github.com/nikku/wuffle/pull/30))
352
- * `FEAT(app)`: add new/updated issues without order to column top
353
- * `FEAT(project)`: add [docker image](https://hub.docker.com/r/nrehwaldt/wuffle)
354
- * `FIX(board)`: allow scrolling while dragging card
355
-
356
- ## 0.10.0
357
-
358
- * `FEAT(app)`: add ability to force HTTPS redirect
359
- * `FEAT(project)`: provide pre-built docker images ([#25](https://github.com/nikku/wuffle/issues/25))
360
- * `FEAT(app)`: add run script
361
- * `FEAT(app)`: validate environment configuration before start
362
- * `FIX(app)`: expose required information for deleted issues
363
- * `DOCS(project)`: document environment variables
364
-
365
- ## 0.9.0
366
-
367
- * `FEAT(project)`: add `Procfile`
368
- * `FIX(dump-store-s3)`: correctly handle inbound data
369
- * `CHORE(dump-store-s3)`: set dump interval to five minutes
370
- * `CHORE(dump-store*)`: log pre-exit actions and timings
371
-
372
- ## 0.8.2
373
-
374
- * `FIX(search)`: recognize `_` in search values
375
- * `FIX(automatic-dev-flow)`: correct branch issue number globbing
376
-
377
- ## 0.8.1
378
-
379
- * `FIX(search)`: recognize dashes search values
380
-
381
- ## 0.8.0
382
-
383
- * `FEAT(background-sync)`: update only actually changed items
384
- * `FEAT(search)`: add `is:{ open, closed, issue, pull }` filters
385
- * `FEAT(search)`: ignore operators with empty values
386
- * `FEAT(board)`: focus board filter on `CTRL/CMD + F`
387
- * `FEAT(board)`: complete board filter qualifier values
388
-
389
- ## 0.7.0
390
-
391
- * `FEAT(background-sync)`: improve sync performance for closed issues
392
- * `FEAT(background-sync)`: expire and remove closed issues not updated for 60 days
393
- * `FEAT(board)`: simplify board filter
394
- * `FEAT(board)`: add initial focus hint to board filter
395
- * `FEAT(search)`: put negation char before operator
396
- * `FEAT(search)`: support `!` to negate a search operator
397
- * `FIX(dump-store)`: correct store not dumping on exit
398
-
399
- ## 0.6.0
400
-
401
- * `FEAT(search)`: add ability to negate search using `-`
402
- * `FEAT(links)`: unlink closed, unmerged PRs from issue
403
- * `FEAT(board)`: autoresize card titles on focus
404
- * `FIX(board)`: prevent shrinking of PR and collaborator icons
405
-
406
- ## 0.5.1
407
-
408
- * `FIX(board)`: prevent error on card filtering
409
-
410
- ## 0.5.0
411
-
412
- * `FEAT(app)`: optimize card fetching
413
- * `CHORE(app)`: cache board
414
- * `FEAT(board)`: incrementally render cards
415
- * `FIX(search)`: recognize colons in search values
416
-
417
- ## 0.4.1
418
-
419
- * `CHORE`: numerous error handling and logging improvements
420
- * `CHORE`: propagate board api errors
421
- * `CHORE`: recover from background sync failures
422
- * `FIX`: correctly handle _related to_ links
423
- * `FIX`: update all (including already existing) links
424
- * `FIX`: correctly reset org-auth installation cache
425
-
426
- ## 0.4.0
427
-
428
- #### General
429
-
430
- * `FEAT`: remove issues that failed to synchronize during background sync
431
- * `FEAT`: parse and publish issue links
432
-
433
- #### Board
434
-
435
- * `FEAT`: collapse issue and closing PR into single card
436
- * `FEAT`: add pull request icon
437
-
438
- ## 0.3.0
439
-
440
- #### General
441
-
442
- * `FEAT`: combine front-end and back-end into single app
443
- * `FEAT`: migrate front-end to [Svelte](https://svelte.dev) and [Bootstrap](https://getbootstrap.com)
444
- * `FEAT`: dump store on exit
445
- * `FEAT`: add ability to dump and restore store to/from S3
446
- * `FEAT`: enable response compression for public routes
447
- * `FEAT`: add ability to configure board via `BOARD_CONFIG` environment variable
448
- * `FEAT`: minimize amout of stored / transfered data
449
- * `FIX`: allow moving a card to end of column
450
-
451
- #### Search
452
-
453
- * `FEAT`: show search hints as you type
454
- * `FEAT`: show incremental / partial search results
455
- * `FEAT`: add search by reviewer
456
-
457
- #### Cards
458
-
459
- * `FEAT`: hide column labels
460
- * `FEAT`: display reviewers
461
- * `FEAT`: display all assignees
462
-
463
- ## 0.2.0
464
-
465
- _Initial version._