forked from dart-lang/site-www
-
Notifications
You must be signed in to change notification settings - Fork 0
/
firebase.json
347 lines (341 loc) · 32.1 KB
/
firebase.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
{
"hosting": {
"public": "_site",
"cleanUrls": true,
"trailingSlash": false,
"headers": [
{
"source": "**/*.@(avif|jpg|jpeg|gif|png|md|txt|json|webp|webm|svg|css|js)",
"headers": [
{ "key": "Cache-Control", "value": "max-age=28800" },
{ "key": "Access-Control-Allow-Origin", "value": "*" }
]
},
{
"source": "/assets/img/*.@(jpg|jpeg|png|webp|avif)",
"headers": [
{ "key": "Cache-Control", "value": "max-age=604800" },
{ "key": "Access-Control-Allow-Origin", "value": "*" }
]
},
{
"source": "**",
"headers": [
{ "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin"},
{ "key": "X-Content-Type-Options", "value": "nosniff"},
{ "key": "X-XSS-Protection", "value": "1;mode=block"}
]
}
],
"redirects": [
{ "source": "/+", "destination": "/community", "type": 301 },
{ "source": "/+dart2js", "destination": "/tools/dart-compile#js", "type": 301 },
{ "source": "/+isolates", "destination": "/language/concurrency", "type": 301 },
{ "source": "/+lexicalscope", "destination": "/language/functions#lexical-scope", "type": 301 },
{ "source": "/+pub", "destination": "/tools/pub", "type": 301 },
{ "source": "/2.0", "destination": "/guides/language/evolution#dart-20", "type": 301 },
{ "source": "/\\)", "destination": "/", "type": 301 },
{ "source": "/angular{,/**}", "destination": "https://github.com/angulardart", "type": 301 },
{ "source": "/api", "destination": "https://api.dart.dev", "type": 301 },
{ "source": "/articles", "destination": "https://medium.com/dartlang", "type": 301 },
{ "source": "/articles/api-naming-guide{,/**}", "destination": "/effective-dart/design", "type": 301 },
{ "source": "/articles/archive", "destination": "https://medium.com/dartlang", "type": 301 },
{ "source": "/articles/archive/converters-and-codecs", "destination": "/libraries/convert/converters-and-codecs", "type": 301 },
{ "source": "/articles/archive/dart-2", "destination": "/guides/language/evolution#dart-20", "type": 301 },
{ "source": "/articles/archive/event-loop", "destination": "https://medium.com/dartlang/dart-asynchronous-programming-isolates-and-event-loops-bffc3e296a6a", "type": 301 },
{ "source": "/articles/archive/numeric-computation", "destination": "/guides/language/numbers", "type": 301 },
{ "source": "/articles/archive/zones", "destination": "/libraries/async/zones", "type": 301 },
{ "source": "/articles/await-async", "destination": "/libraries/async/async-await", "type": 301 },
{ "source": "/articles/broadcast-streams", "destination": "https://medium.com/dartlang/dart-asynchronous-programming-streams-dab952023ed7", "type": 301 },
{ "source": "/articles/converters-and-codecs", "destination": "/libraries/convert/converters-and-codecs", "type": 301 },
{ "source": "/articles/creating-streams", "destination": "/libraries/async/creating-streams", "type": 301 },
{ "source": "/articles/dart-unit-tests{,/**}", "destination": "https://pub.dev/packages/test#writing-tests", "type": 301 },
{ "source": "/articles/dart-vm/io", "destination": "/articles/libraries/dart-io", "type": 301 },
{ "source": "/articles/dart-vm/native-extensions", "destination": "/server/c-interop-native-extensions", "type": 301 },
{ "source": "/articles/dart-vm/numeric-computation", "destination": "/guides/language/numbers", "type": 301 },
{ "source": "/articles/dart-vm/snapshots", "destination": "/tools/dart-compile", "type": 301 },
{ "source": "/articles/design-decisions/why-dart-types", "destination": "/resources/faq#types", "type": 301 },
{ "source": "/articles/doc-comment-guidelines", "destination": "/effective-dart/documentation", "type": 301 },
{ "source": "/articles/event-loop", "destination": "https://medium.com/dartlang/dart-asynchronous-programming-isolates-and-event-loops-bffc3e296a6a", "type": 301 },
{ "source": "/articles/feet-wet-streams{,/**}", "destination": "/libraries/async/using-streams", "type": 301 },
{ "source": "/articles/futures-and-error-handling", "destination": "/libraries/async/futures-error-handling", "type": 301 },
{ "source": "/articles/idiomatic-dart{,/**}", "destination": "/effective-dart", "type": 301 },
{ "source": "/articles/io", "destination": "/articles/libraries/dart-io", "type": 301 },
{ "source": "/articles/js-dart-interop", "destination": "/web/libraries#js-interop", "type": 301 },
{ "source": "/articles/json-web-service", "destination": "/guides/json", "type": 301 },
{ "source": "/articles/language", "destination": "/language", "type": 301 },
{ "source": "/articles/language/await-async", "destination": "/libraries/async/async-await", "type": 301 },
{ "source": "/articles/language/mixins", "destination": "/language/mixins", "type": 301 },
{ "source": "/articles/language/optional-types", "destination": "/resources/faq#types", "type": 301 },
{ "source": "/articles/libraries", "destination": "/libraries", "type": 301 },
{ "source": "/articles/libraries/converters-and-codecs", "destination": "/libraries/convert/converters-and-codecs", "type": 301 },
{ "source": "/articles/libraries/creating-streams", "destination": "/libraries/async/creating-streams", "type": 301 },
{ "source": "/articles/libraries/dart-io", "destination": "/libraries/dart-io", "type": 301 },
{ "source": "/articles/libraries/zones", "destination": "/libraries/async/zones", "type": 301 },
{ "source": "/articles/libraries*{,/**}", "destination": "/libraries", "type": 301 },
{ "source": "/articles/m*{,/**}", "destination": "/guides/language/evolution", "type": 301 },
{ "source": "/articles/mixins", "destination": "/language/mixins", "type": 301 },
{ "source": "/articles/mocking-with-dart", "destination": "https://pub.dev/packages/mockito", "type": 301 },
{ "source": "/articles/native-extensions-for-standalone-dart-vm", "destination": "/server/c-interop-native-extensions", "type": 301 },
{ "source": "/articles/numeric-computation", "destination": "/guides/language/numbers", "type": 301 },
{ "source": "/articles/optional-types", "destination": "/resources/faq#types", "type": 301 },
{ "source": "/articles/serialization", "destination": "/guides/json", "type": 301 },
{ "source": "/articles/server/native-extensions", "destination": "/server/c-interop-native-extensions", "type": 301 },
{ "source": "/articles/server{,/**}", "destination": "/server", "type": 301 },
{ "source": "/articles/snapshots", "destination": "/tools/dart-compile", "type": 301 },
{ "source": "/articles/style-guide{,/**}", "destination": "/effective-dart/style", "type": 301 },
{ "source": "/articles/using-future-based-apis{,/**}", "destination": "/libraries/async/async-await", "type": 301 },
{ "source": "/articles/why-dart-types", "destination": "/resources/faq#types", "type": 301 },
{ "source": "/articles/zones", "destination": "/libraries/async/zones", "type": 301 },
{ "source": "/assets/dart-logo-for-shares*.png", "destination": "/assets/img/logo/dart-logo-for-shares.png", "type": 301 },
{ "source": "/assets/dart-logo-wordmark*.png", "destination": "/assets/img/logo/dart-logo-for-shares.png", "type": 301 },
{ "source": "/assets/shared/dart/icon/64.png", "destination": "/assets/img/logo/dart-64.png", "type": 301 },
{ "source": "/books", "destination": "/resources/books", "type": 301 },
{ "source": "/bug", "destination": "https://dartbug.com", "type": 301 },
{ "source": "/bug/:rest*", "destination": "https://dartbug.com/:rest*", "type": 301 },
{ "source": "/cl", "destination": "https://dart-review.googlesource.com/q/status:open+-is:wip", "type": 301 },
{ "source": "/cl/:rest*", "destination": "https://dart-review.googlesource.com/c/sdk/+/:rest*", "type": 301 },
{ "source": "/cloud{,/**}", "destination": "/server/google-cloud", "type": 301 },
{ "source": "/codelabs", "destination": "/tutorials", "type": 301 },
{ "source": "/codelabs/async-await", "destination": "/libraries/async/async-await", "type": 301 },
{ "source": "/codelabs/dart-cheatsheet", "destination": "/resources/dart-cheatsheet", "type": 301 },
{ "source": "/codelabs/null-safety{,/**}", "destination": "/null-safety/understanding-null-safety", "type": 301 },
{ "source": "/codelabs/server{,/**}", "destination": "/tutorials/server/httpserver", "type": 301 },
{ "source": "/code-of-conduct", "destination": "/community/code-of-conduct", "type": 301 },
{ "source": "/concurrency", "destination": "/language/concurrency", "type": 301 },
{ "source": "/dart", "destination": "/overview", "type": 301 },
{ "source": "/dart-2", "destination": "/guides/language/evolution#dart-20", "type": 301 },
{ "source": "/dart-2.0", "destination": "/guides/language/evolution#dart-20", "type": 301 },
{ "source": "/dart-3", "destination": "/resources/dart-3-migration", "type": 301 },
{ "source": "/dart-by-example", "destination": "/samples", "type": 301 },
{ "source": "/dart-team-packages", "destination": "/resources/dart-team-packages", "type": 301 },
{ "source": "/dart-tips{,/**}", "destination": "/effective-dart", "type": 301 },
{ "source": "/dart-vm", "destination": "/server", "type": 301 },
{ "source": "/dart-vm/:page*", "destination": "/server/:page*", "type": 301 },
{ "source": "/dart2js-reflection", "destination": "https://github.com/dart-lang/sdk/issues/21654", "type": 301 },
{ "source": "/dartium{,/**}", "destination": "/tools#editors", "type": 301 },
{ "source": "/devices", "destination": "/overview#platform", "type": 301 },
{ "source": "/dev{,/**}", "destination": "https://api.dart.dev/dev", "type": 301 },
{ "source": "/diagnostics", "destination": "/tools/diagnostic-messages", "type": 301 },
{ "source": "/diagnostics/:code*", "destination": "/tools/diagnostic-messages?utm_source=dartdev&utm_medium=redir&utm_id=diagcode&utm_content=:code#:code", "type": 301 },
{ "source": "/docs/api{,/**}", "destination": "https://api.dart.dev", "type": 301 },
{ "source": "/docs/cookbook", "destination": "/language", "type": 301 },
{ "source": "/docs/dart-up-and-running/**/ch02?(.html)", "destination": "/language", "type": 301 },
{ "source": "/docs/dart-up-and-running/**/ch03?(.html)", "destination": "/libraries", "type": 301 },
{ "source": "/docs/dart-up-and-running/contents/ch04-tools-dart2js?(.html)", "destination": "/tools/dart-compile#js", "type": 301 },
{ "source": "/docs/dart-up-and-running/contents/ch04-tools-dart_analyzer?(.html)", "destination": "/tools/dart-analyze", "type": 301 },
{ "source": "/docs/dart-up-and-running/contents/ch04-tools-dartium?(.html)", "destination": "/tools#editors", "type": 301 },
{ "source": "/docs/dart-up-and-running{,/**}", "destination": "/resources/books", "type": 301 },
{ "source": "/docs/editor", "destination": "/tools", "type": 301 },
{ "source": "/docs/editor/getting-started?(.html)", "destination": "/overview", "type": 301 },
{ "source": "/docs/getting-started{,/**}", "destination": "/overview", "type": 301 },
{ "source": "/docs/language-tour", "destination": "/language", "type": 301 },
{ "source": "/docs/library-tour", "destination": "/libraries", "type": 301 },
{ "source": "/docs/pub-package-manager", "destination": "/tools/pub", "type": 301 },
{ "source": "/docs/pub-package-manager/pubspec{,/**}", "destination": "/tools/pub/pubspec", "type": 301 },
{ "source": "/docs/serverguide?(.html)", "destination": "/server", "type": 301 },
{ "source": "/docs/spec/EnumsTC52draft.pdf", "destination": "/language/enum", "type": 301 },
{ "source": "/docs/spec/deferred-loading?(.html)", "destination": "/language/libraries#lazily-loading-a-library", "type": 301 },
{ "source": "/docs/spec{,/**}", "destination": "/guides/language/spec", "type": 301 },
{ "source": "/docs/technical-overview{,/**}", "destination": "/overview", "type": 301 },
{ "source": "/docs/tutorials/add-elements", "destination": "/library/dart-html", "type": 301 },
{ "source": "/docs/tutorials/cmdline", "destination": "/tutorials/server/cmdline", "type": 301 },
{ "source": "/docs/tutorials/connect-dart-html", "destination": "/library/dart-html", "type": 301 },
{ "source": "/docs/tutorials/fetchdata", "destination": "/tutorials/server/fetch-data", "type": 301 },
{ "source": "/docs/tutorials/futures", "destination": "/libraries/async/async-await", "type": 301 },
{ "source": "/docs/tutorials/get-started", "destination": "/tutorials/server/get-started", "type": 301 },
{ "source": "/docs/tutorials/httpserver", "destination": "/tutorials/server/httpserver", "type": 301 },
{ "source": "/docs/tutorials/indexeddb{,/**}", "destination": "https://api.dart.dev/stable/dart-indexed_db/dart-indexed_db-library.html", "type": 301 },
{ "source": "/docs/tutorials/remove-elements", "destination": "/library/dart-html", "type": 301 },
{ "source": "/docs/tutorials/shared-pkgs", "destination": "/guides/packages", "type": 301 },
{ "source": "/docs/tutorials/streams", "destination": "/libraries/async/using-streams", "type": 301 },
{ "source": "/docs/tutorials{,/**}", "destination": "/tutorials", "type": 301 },
{ "source": "/docs{,/**}", "destination": "/guides", "type": 301 },
{ "source": "/downloads{,.html,/**}", "destination": "/get-dart", "type": 301 },
{ "source": "/eclipse{,/**}", "destination": "/tools#editors", "type": 301 },
{ "source": "/editor{,/**}", "destination": "/tools#editors", "type": 301 },
{ "source": "/events/2015{,/**}", "destination": "https://www.youtube.com/watch?list=PLOU2XLYxmsIIQorIS8gagUiMau9S84vZV&v=FiXiI2Atexc", "type": 301 },
{ "source": "/events/2016{,/**}", "destination": "https://events.dartlang.org/2016/summit", "type": 301 },
{ "source": "/events{,/**}", "destination": "https://events.dartlang.org", "type": 301 },
{ "source": "/faq", "destination": "/resources/faq", "type": 301 },
{ "source": "/flutter", "destination": "https://flutter.dev", "type": 301 },
{ "source": "/glossary", "destination": "/resources/glossary", "type": 301 },
{ "source": "/glossary/:entry", "destination": "/resources/glossary#:entry", "type": 301 },
{ "source": "/go/analysis-server-protocol", "destination": "https://htmlpreview.github.io/?https://github.com/dart-lang/sdk/blob/main/pkg/analysis_server/doc/api.html", "type": 301 },
{ "source": "/go/automated-publishing", "destination": "/tools/pub/automated-publishing", "type": 301 },
{ "source": "/go/cloud", "destination": "/server/google-cloud?utm_source=go-link&utm_medium=referral&utm_campaign=go-cloud", "type": 301 },
{ "source": "/go/json-codable", "destination": "/language/macros#the-jsoncodable-macro", "type": 301 },
{ "source": "/go/content-hashes", "destination": "/tools/pub/glossary#content-hashes", "type": 301 },
{ "source": "/go/core-lints", "destination": "https://github.com/dart-lang/lints", "type": 301 },
{ "source": "/go/dart-fix", "destination": "/tools/dart-fix", "type": 301 },
{ "source": "/go/dart2js-info", "destination": "https://github.com/dart-lang/sdk/tree/main/pkg/dart2js_info", "type": 301 },
{ "source": "/go/dartdoc-options-file", "destination": "https://github.com/dart-lang/dartdoc#dartdoc_optionsyaml", "type": 301 },
{ "source": "/go/data-driven-fixes", "destination": "https://github.com/flutter/flutter/wiki/Data-driven-Fixes", "type": 301 },
{ "source": "/go/dot-packages-deprecation", "destination": "https://github.com/dart-lang/language/blob/main/accepted/2.8/language-versioning/package-config-file-v2.md", "type": 301 },
{ "source": "/go/experiments", "destination": "/tools/experiment-flags", "type": 301 },
{ "source": "/go/false-secrets", "destination": "/tools/pub/pubspec#false_secrets", "type": 301 },
{ "source": "/go/ffi", "destination": "/interop/c-interop", "type": 301 },
{ "source": "/go/flutter-upper-bound-deprecation", "destination": "https://github.com/flutter/flutter/issues/68143", "type": 301 },
{ "source": "/go/macros", "destination": "/language/macros", "type": 301 },
{ "source": "/go/pub-workspaces", "destination": "https://flutter.dev/go/pub-workspace", "type": 301 },
{ "source": "/go/non-promo-conflicting-getter", "destination": "/tools/non-promotion-reasons#getter-name", "type": 301 },
{ "source": "/go/non-promo-conflicting-non-promotable-field", "destination": "/tools/non-promotion-reasons#field-name", "type": 301 },
{ "source": "/go/non-promo-conflicting-noSuchMethod-forwarder", "destination": "/tools/non-promotion-reasons#nosuchmethod", "type": 301 },
{ "source": "/go/non-promo-external-field", "destination": "/tools/non-promotion-reasons#external", "type": 301 },
{ "source": "/go/non-promo-field-promotion-unavailable", "destination": "/tools/non-promotion-reasons#language-version", "type": 301 },
{ "source": "/go/non-promo-non-field", "destination": "/tools/non-promotion-reasons#not-field", "type": 301 },
{ "source": "/go/non-promo-non-final-field", "destination": "/tools/non-promotion-reasons#final", "type": 301 },
{ "source": "/go/non-promo-property", "destination": "/tools/non-promotion-reasons#property", "type": 301 },
{ "source": "/go/non-promo-public-field", "destination": "/tools/non-promotion-reasons#private", "type": 301 },
{ "source": "/go/non-promo-this", "destination": "/tools/non-promotion-reasons#this", "type": 301 },
{ "source": "/go/non-promo-write", "destination": "/tools/non-promotion-reasons#write", "type": 301 },
{ "source": "/go/next-gen-js-interop", "destination": "/interop/js-interop", "type": 301 },
{ "source": "/go/null-safety-migration", "destination": "/null-safety/migration-guide", "type": 301 },
{ "source": "/go/downgrade-testing", "destination": "/tools/pub/dependencies#test-with-downgraded-dependencies", "type": 301 },
{ "source": "/go/package-discontinue", "destination": "/tools/pub/publishing#discontinue", "type": 301 },
{ "source": "/go/package-retraction", "destination": "/tools/pub/publishing#retract", "type": 301 },
{ "source": "/go/package-web", "destination": "/interop/js-interop/package-web", "type": 301 },
{ "source": "/go/pub-cache", "destination": "/tools/pub/cmd/pub-cache", "type": 301 },
{ "source": "/go/pubignore", "destination": "/tools/pub/publishing#what-files-are-published", "type": 301 },
{ "source": "/go/publishing-from-github", "destination": "/tools/pub/automated-publishing#publishing-packages-using-github-actions", "type": 301 },
{ "source": "/go/publishing-with-service-account", "destination": "/tools/pub/automated-publishing#publishing-from-google-cloud-build", "type": 301 },
{ "source": "/go/sdk-constraint", "destination": "/tools/pub/pubspec#sdk-constraints", "type": 301 },
{ "source": "/go/sdk-version-pinning", "destination": "https://github.com/dart-lang/sdk/blob/main/docs/Flutter-Pinned-Packages.md", "type": 301 },
{ "source": "/go/pub-security-advisories", "destination": "/tools/pub/security-advisories", "type": 301 },
{ "source": "/go/test-docs/:page*", "destination": "https://github.com/dart-lang/test/blob/master/pkgs/test/doc/:page*", "type": 301 },
{ "source": "/go/unsound-null-safety", "destination": "/null-safety/unsound-null-safety", "type": 301 },
{ "source": "/googleapis", "destination": "https://github.com/dart-lang/googleapis", "type": 301 },
{ "source": "/guides/get-started", "destination": "/overview", "type": 301 },
{ "source": "/guides/google-apis", "destination": "/resources/google-apis", "type": 301 },
{ "source": "/guides/language/analysis-options", "destination": "/tools/analysis", "type": 301 },
{ "source": "/guides/language/cheatsheet", "destination": "/language", "type": 301 },
{ "source": "/guides/language/coming-from/js-to-dart", "destination": "/resources/coming-from/js-to-dart", "type": 301 },
{ "source": "/guides/language/coming-from/swift-to-dart", "destination": "/resources/coming-from/swift-to-dart", "type": 301 },
{ "source": "/guides/language/common-prob", "destination": "/guides/language/sound-problems", "type": 301 },
{ "source": "/guides/language/concurrency", "destination": "/language/concurrency", "type": 301 },
{ "source": "/guides/language/effective-dart", "destination": "/effective-dart", "type": 301 },
{ "source": "/guides/language/effective-dart/:page*", "destination": "/effective-dart/:page*", "type": 301 },
{ "source": "/guides/language/extension-methods", "destination": "/language/extension-methods", "type": 301 },
{ "source": "/guides/language/formatting", "destination": "/tools/dart-format", "type": 301 },
{ "source": "/guides/language/library-tour", "destination": "/libraries", "type": 301 },
{ "source": "/guides/language/sound-dart", "destination": "/language/type-system", "type": 301 },
{ "source": "/guides/language/sound-faq", "destination": "/language/type-system", "type": 301 },
{ "source": "/guides/language/specifications/DartLangSpec-v2.2.pdf", "destination": "https://github.com/dart-lang/site-www/blob/a7f170389e210adc2aef810cc9a6fdbfa78059a5/src/guides/language/specifications/DartLangSpec-v2.2.pdf", "type": 301 },
{ "source": "/guides/language/type-system", "destination": "/language/type-system", "type": 301 },
{ "source": "/guides/libraries", "destination": "/libraries", "type": 301 },
{ "source": "/guides/libraries/create-library-packages", "destination": "/guides/libraries/create-packages", "type": 301 },
{ "source": "/guides/libraries/futures-error-handling", "destination": "/libraries/async/futures-error-handling", "type": 301 },
{ "source": "/guides/libraries/java-interop", "destination": "/interop/java-interop", "type": 301 },
{ "source": "/guides/libraries/objective-c-interop", "destination": "/interop/objective-c-interop", "type": 301 },
{ "source": "/guides/libraries/c-interop", "destination": "/interop/c-interop", "type": 301 },
{ "source": "/guides/libraries/writing-package-pages", "destination": "/tools/pub/writing-package-pages", "type": 301 },
{ "source": "/guides/libraries/useful-libraries", "destination": "/resources/useful-packages", "type": 301 },
{ "source": "/guides/platforms", "destination": "/overview#platform", "type": 301 },
{ "source": "/install", "destination": "/get-dart", "type": 301 },
{ "source": "/install/**", "destination": "/get-dart", "type": 301 },
{ "source": "/install/archive", "destination": "/get-dart/archive", "type": 301 },
{ "source": "/jobs", "destination": "https://docs.flutter.dev/jobs", "type": 301 },
{ "source": "/language-tour", "destination": "/language", "type": 301 },
{ "source": "/language/basics", "destination": "/language", "type": 301 },
{ "source": "/language/callable-classes", "destination": "/language/callable-objects", "type": 301 },
{ "source": "/language/collection-types", "destination": "/language/collections", "type": 301 },
{ "source": "/language/control-flow", "destination": "/language/loops", "type": 301 },
{ "source": "/language/enum", "destination": "/language/enums", "type": 301 },
{ "source": "/language/generators", "destination": "/language/functions#generators", "type": 301 },
{ "source": "/linter/lints/:lint*", "destination": "/tools/linter-rules/:lint", "type": 301 },
{ "source": "/lints", "destination": "/tools/linter-rules", "type": 301 },
{ "source": "/lints/:lint*", "destination": "/tools/linter-rules/:lint", "type": 301 },
{ "source": "/logos", "destination": "/brand", "type": 301 },
{ "source": "/mailing-list", "destination": "https://groups.google.com/a/dartlang.org/forum/#!forum/misc", "type": 301 },
{ "source": "/mobile", "destination": "/multiplatform-apps", "type": 301 },
{ "source": "/news{,/**}", "destination": "https://medium.com/dartlang", "type": 301 },
{ "source": "/null-safety/tour", "destination": "/null-safety/understanding-null-safety", "type": 301 },
{ "source": "/observatory{,/**}", "destination": "/tools/dart-devtools", "type": 301 },
{ "source": "/packages", "destination": "https://pub.dev", "type": 301 },
{ "source": "/platforms", "destination": "/overview#platform", "type": 301 },
{ "source": "/posters{,/**}", "destination": "https://github.com/dart-archive/www.dartlang.org/tree/f5f235e56e51d38d9f4d01f949d0a485f3828056/src/site/posters", "type": 301 },
{ "source": "/pub/tools/editor", "destination": "/tools", "type": 301 },
{ "source": "/redirects/sdk-download-*", "destination": "/get-dart", "type": 301 },
{ "source": "/resources/dart-tips*{,/**}", "destination": "/effective-dart", "type": 301 },
{ "source": "/resources/dartpad-best-practices", "destination": "https://doi.org/10.1145/3397537.3397558", "type": 301 },
{ "source": "/resources/dartpad-tutorials.pdf", "destination": "https://doi.org/10.1145/3397537.3397558", "type": 301 },
{ "source": "/samples", "destination": "/language", "type": 301 },
{ "source": "/samples/spirodraw{,/**}", "destination": "/language", "type": 301 },
{ "source": "/samples/todomvc{,/**}", "destination": "/language", "type": 301 },
{ "source": "/samples/video{,/**}", "destination": "/language", "type": 301 },
{ "source": "/samples/sunflower{,/**}", "destination": "https://gist.github.com/5c0e154dd50af4a9ac856908061291bc", "type": 301 },
{ "source": "/samples/{,/**}", "destination": "https://github.com/dart-lang/samples/", "type": 301 },
{ "source": "/sdk-changelog-2.4.0", "destination": "https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md#240---2019-06-27", "type": 301 },
{ "source": "/server/app-engine{,/**}", "destination": "/server/google-cloud", "type": 301 },
{ "source": "/server/c-interop", "destination": "/interop/c-interop", "type": 301 },
{ "source": "/server/google-cloud-platform{,/**}", "destination": "/server/google-cloud", "type": 301 },
{ "source": "/server/io-library-tour", "destination": "/libraries/dart-io", "type": 301 },
{ "source": "/server/tls-ssl?(.html)", "destination": "https://api.dart.dev/stable/dart-io/SecurityContext-class.html", "type": 301 },
{ "source": "/server/tools", "destination": "/tools", "type": 301 },
{ "source": "/server/tools/dart-vm", "destination": "/tools/dart-run", "type": 301 },
{ "source": "/stable{,/**}", "destination": "https://api.dart.dev/stable", "type": 301 },
{ "source": "/support/faq?(.html)", "destination": "/resources/faq", "type": 301 },
{ "source": "/support{,/**}", "destination": "/community", "type": 301 },
{ "source": "/to/main-function", "destination": "/language/functions#main", "type": 301 },
{ "source": "/tools/**/download{,.html,/**}", "destination": "/get-dart", "type": 301 },
{ "source": "/tools/**/private-files?(.html)", "destination": "/guides/libraries/private-files", "type": 301 },
{ "source": "/tools/analyzer", "destination": "/tools/dart-analyze", "type": 301 },
{ "source": "/tools/dart-pub", "destination": "/tools/pub/cmd", "type": 301 },
{ "source": "/tools/dart-vm", "destination": "/tools/dart-run", "type": 301 },
{ "source": "/tools/dart2aot", "destination": "/tools/dart-compile", "type": 301 },
{ "source": "/tools/dart2native", "destination": "/tools/dart-compile", "type": 301 },
{ "source": "/tools/dartanalyzer", "destination": "/tools/dart-analyze", "type": 301 },
{ "source": "/tools/dartdevc/**", "destination": "/tools/dartdevc", "type": 301 },
{ "source": "/tools/dartdoc", "destination": "/tools/dart-doc", "type": 301 },
{ "source": "/tools/dartdocgen{,/**}", "destination": "/tools/dart-doc", "type": 301 },
{ "source": "/tools/dartfix", "destination": "/tools/dart-fix", "type": 301 },
{ "source": "/tools/dartfmt", "destination": "/tools/dart-format", "type": 301 },
{ "source": "/tools/dartium?(.html)", "destination": "/tools#editors", "type": 301 },
{ "source": "/tools/dartpad/dartpad-best-practices", "destination": "https://doi.org/10.1145/3397537.3397558", "type": 301 },
{ "source": "/tools/debian?(.html)", "destination": "/get-dart", "type": 301 },
{ "source": "/tools/docgen{,/**}", "destination": "/tools/dart-doc", "type": 301 },
{ "source": "/tools/download-archive{,/**}", "destination": "/get-dart/archive", "type": 301 },
{ "source": "/tools/download-editor?(.html)", "destination": "/tools", "type": 301 },
{ "source": "/tools/eclipse-plugin", "destination": "/tools#editors", "type": 301 },
{ "source": "/tools/editor{,/**}", "destination": "/tools", "type": 301 },
{ "source": "/tools/faq?(.html)", "destination": "/resources/faq", "type": 301 },
{ "source": "/tools/observatory{,/**}", "destination": "/tools/dart-devtools", "type": 301 },
{ "source": "/tools/pub", "destination": "/tools/pub/cmd", "type": 301 },
{ "source": "/tools/pub/assets-and-*transformers?(.html)", "destination": "https://github.com/dart-lang/build", "type": 301 },
{ "source": "/tools/pub/cmd/pub-build?(.html)", "destination": "/tools/webdev", "type": 301 },
{ "source": "/tools/pub/cmd/pub-run?(.html)", "destination": "/tools/dart-run", "type": 301 },
{ "source": "/tools/pub/cmd/pub-serve?(.html)", "destination": "/tools/webdev", "type": 301 },
{ "source": "/tools/pub/cmd/pub-uploader?(.html)", "destination": "/tools/pub/publishing#uploaders", "type": 301 },
{ "source": "/tools/pub/create-library-packages?(.html)", "destination": "/guides/libraries/create-packages", "type": 301 },
{ "source": "/tools/pub/faq?(.html)", "destination": "/tools/faq#pub", "type": 301 },
{ "source": "/tools/pub/get-started?(.html)", "destination": "/guides/packages", "type": 301 },
{ "source": "/tools/pub/installing?(.html)", "destination": "/tools/pub/environment-variables", "type": 301 },
{ "source": "/tools/pub/transformers{,/**}", "destination": "https://github.com/dart-lang/build", "type": 301 },
{ "source": "/tools/sdk/archive?(.html|.)", "destination": "/get-dart/archive", "type": 301 },
{ "source": "/tools/webstorm?(.html)", "destination": "/tools#editors", "type": 301 },
{ "source": "/tos@(|.htm|.html)", "destination": "/terms", "type": 301 },
{ "source": "/tutorials/dart-vm", "destination": "/tutorials/server", "type": 301 },
{ "source": "/tutorials/dart-vm/:page*", "destination": "/tutorials/server/:page*", "type": 301 },
{ "source": "/tutorials/language", "destination": "/language", "type": 301 },
{ "source": "/tutorials/language/futures", "destination": "/libraries/async/async-await", "type": 301 },
{ "source": "/tutorials/language/streams", "destination": "/libraries/async/using-streams", "type": 301 },
{ "source": "/tutorials/libraries", "destination": "/libraries", "type": 301 },
{ "source": "/tutorials/libraries/shared-pkgs", "destination": "/guides/packages", "type": 301 },
{ "source": "/tutorials/web", "destination": "/web/get-started", "type": 301 },
{ "source": "/tutorials/web/fetch-data", "destination": "/tutorials/server/fetch-data", "type": 301 },
{ "source": "/tutorials/web/get-started", "destination": "/web/get-started", "type": 301 },
{ "source": "/tutorials/web/low-level-html", "destination": "/web/get-started", "type": 301 },
{ "source": "/tutorials/web/low-level-html/:rest*", "destination": "/libraries/dart-html", "type": 301 },
{ "source": "/web-ui/observables{,/**}", "destination": "https://pub.dev/packages/observable", "type": 301 },
{ "source": "/web/dart-2?(.html)", "destination": "/tools/webdev", "type": 301 },
{ "source": "/web/js-interop", "destination": "/interop/js-interop", "type": 301 },
{ "source": "/{docs,tools}/{pub-package-manager,pub/cmd,pub/tools/pub}/glossary?(.html)", "destination": "/tools/pub/glossary", "type": 301 }
]
},
"emulators": {
"hosting": {
"port": 5500,
"host": "0.0.0.0"
}
}
}