projen 0.51.9 → 0.51.13

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.
Files changed (118) hide show
  1. package/.jsii +2 -2
  2. package/changelog.md +1 -1
  3. package/lib/awscdk/auto-discover.js +1 -1
  4. package/lib/awscdk/awscdk-app-java.js +1 -1
  5. package/lib/awscdk/awscdk-app-ts.js +1 -1
  6. package/lib/awscdk/awscdk-construct.js +2 -2
  7. package/lib/awscdk/awscdk-deps-java.js +1 -1
  8. package/lib/awscdk/awscdk-deps-js.js +1 -1
  9. package/lib/awscdk/awscdk-deps.js +1 -1
  10. package/lib/awscdk/cdk-config.js +1 -1
  11. package/lib/awscdk/cdk-tasks.js +1 -1
  12. package/lib/awscdk/integration-test.js +1 -1
  13. package/lib/awscdk/lambda-function.js +2 -2
  14. package/lib/build/build-workflow.js +1 -1
  15. package/lib/cdk/construct-lib.js +1 -1
  16. package/lib/cdk/jsii-docgen.js +1 -1
  17. package/lib/cdk/jsii-project.js +1 -1
  18. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  19. package/lib/cdk8s/cdk8s-construct.js +1 -1
  20. package/lib/cdktf/cdktf-construct.js +1 -1
  21. package/lib/component.js +1 -1
  22. package/lib/dependencies.js +1 -1
  23. package/lib/dev-env.js +1 -1
  24. package/lib/docker-compose.js +2 -2
  25. package/lib/file.js +1 -1
  26. package/lib/gitattributes.js +1 -1
  27. package/lib/github/auto-approve.js +1 -1
  28. package/lib/github/auto-merge.js +1 -1
  29. package/lib/github/dependabot.js +1 -1
  30. package/lib/github/github-project.js +1 -1
  31. package/lib/github/github.js +1 -1
  32. package/lib/github/mergify.js +1 -1
  33. package/lib/github/pr-template.js +1 -1
  34. package/lib/github/pull-request-lint.js +1 -1
  35. package/lib/github/stale.js +1 -1
  36. package/lib/github/task-workflow.js +1 -1
  37. package/lib/github/workflows.js +1 -1
  38. package/lib/gitlab/configuration.js +1 -1
  39. package/lib/gitlab/gitlab-configuration.js +1 -1
  40. package/lib/gitlab/nested-configuration.js +1 -1
  41. package/lib/gitpod.js +1 -1
  42. package/lib/ignore-file.js +1 -1
  43. package/lib/ini.js +1 -1
  44. package/lib/java/java-project.js +1 -1
  45. package/lib/java/junit.js +1 -1
  46. package/lib/java/maven-compile.js +1 -1
  47. package/lib/java/maven-packaging.js +1 -1
  48. package/lib/java/maven-sample.js +1 -1
  49. package/lib/java/pom.js +1 -1
  50. package/lib/java/projenrc.js +1 -1
  51. package/lib/javascript/bundler.js +1 -1
  52. package/lib/javascript/eslint.js +1 -1
  53. package/lib/javascript/jest.js +1 -1
  54. package/lib/javascript/node-package.js +1 -1
  55. package/lib/javascript/node-project.js +1 -1
  56. package/lib/javascript/npm-config.js +1 -1
  57. package/lib/javascript/prettier.js +1 -1
  58. package/lib/javascript/projenrc.js +1 -1
  59. package/lib/javascript/typescript-config.js +1 -1
  60. package/lib/javascript/upgrade-dependencies.js +2 -2
  61. package/lib/json.js +1 -1
  62. package/lib/license.js +1 -1
  63. package/lib/logger.js +1 -1
  64. package/lib/makefile.js +1 -1
  65. package/lib/object-file.js +1 -1
  66. package/lib/project-build.js +1 -1
  67. package/lib/project.js +1 -1
  68. package/lib/projects.js +1 -1
  69. package/lib/projenrc-json.js +1 -1
  70. package/lib/python/pip.js +1 -1
  71. package/lib/python/poetry.js +2 -2
  72. package/lib/python/projenrc.js +1 -1
  73. package/lib/python/pytest.js +1 -1
  74. package/lib/python/python-project.js +1 -1
  75. package/lib/python/python-sample.js +1 -1
  76. package/lib/python/requirements-file.js +1 -1
  77. package/lib/python/setuppy.js +1 -1
  78. package/lib/python/setuptools.js +1 -1
  79. package/lib/python/venv.js +1 -1
  80. package/lib/readme.js +1 -1
  81. package/lib/release/publisher.js +1 -1
  82. package/lib/release/release-trigger.js +1 -1
  83. package/lib/release/release.js +1 -1
  84. package/lib/sample-file.js +2 -2
  85. package/lib/semver.js +1 -1
  86. package/lib/source-code.js +1 -1
  87. package/lib/task-runtime.js +1 -1
  88. package/lib/task.js +1 -1
  89. package/lib/tasks.js +1 -1
  90. package/lib/testing.js +1 -1
  91. package/lib/textfile.js +1 -1
  92. package/lib/toml.js +1 -1
  93. package/lib/typescript/projenrc.js +1 -1
  94. package/lib/typescript/typescript-typedoc.js +1 -1
  95. package/lib/typescript/typescript.js +3 -3
  96. package/lib/version.js +1 -1
  97. package/lib/vscode/devcontainer.js +1 -1
  98. package/lib/vscode/launch-config.js +1 -1
  99. package/lib/vscode/vscode.js +1 -1
  100. package/lib/web/next.js +3 -3
  101. package/lib/web/postcss.js +1 -1
  102. package/lib/web/react.js +4 -4
  103. package/lib/web/tailwind.js +1 -1
  104. package/lib/xmlfile.js +1 -1
  105. package/lib/yaml.js +1 -1
  106. package/node_modules/resolve/.eslintrc +1 -0
  107. package/node_modules/resolve/bin/resolve +7 -4
  108. package/node_modules/resolve/lib/async.js +10 -1
  109. package/node_modules/resolve/lib/core.json +5 -5
  110. package/node_modules/resolve/lib/homedir.js +24 -0
  111. package/node_modules/resolve/lib/sync.js +10 -1
  112. package/node_modules/resolve/package.json +11 -6
  113. package/node_modules/resolve/test/home_paths.js +127 -0
  114. package/node_modules/resolve/test/home_paths_sync.js +114 -0
  115. package/node_modules/resolve/test/resolver_sync.js +230 -28
  116. package/package.json +2 -2
  117. package/releasetag.txt +1 -1
  118. package/version.txt +1 -1
@@ -5,6 +5,9 @@ var test = require('tape');
5
5
  var resolve = require('../');
6
6
  var sync = require('../sync');
7
7
 
8
+ var requireResolveSupportsPaths = require.resolve.length > 1
9
+ && (/^12\.[012]\./).test(process.version); // broken in v12.0-12.2, see https://github.com/nodejs/node/issues/27794
10
+
8
11
  test('`./sync` entry point', function (t) {
9
12
  t.equal(resolve.sync, sync, '`./sync` entry point is the same as `.sync` on `main`');
10
13
  t.end();
@@ -15,13 +18,29 @@ test('foo', function (t) {
15
18
 
16
19
  t.equal(
17
20
  resolve.sync('./foo', { basedir: dir }),
18
- path.join(dir, 'foo.js')
19
- );
21
+ path.join(dir, 'foo.js'),
22
+ './foo'
23
+ );
24
+ if (requireResolveSupportsPaths) {
25
+ t.equal(
26
+ resolve.sync('./foo', { basedir: dir }),
27
+ require.resolve('./foo', { paths: [dir] }),
28
+ './foo: resolve.sync === require.resolve'
29
+ );
30
+ }
20
31
 
21
32
  t.equal(
22
33
  resolve.sync('./foo.js', { basedir: dir }),
23
- path.join(dir, 'foo.js')
24
- );
34
+ path.join(dir, 'foo.js'),
35
+ './foo.js'
36
+ );
37
+ if (requireResolveSupportsPaths) {
38
+ t.equal(
39
+ resolve.sync('./foo.js', { basedir: dir }),
40
+ require.resolve('./foo.js', { paths: [dir] }),
41
+ './foo.js: resolve.sync === require.resolve'
42
+ );
43
+ }
25
44
 
26
45
  t.equal(
27
46
  resolve.sync('./foo.js', { basedir: dir, filename: path.join(dir, 'bar.js') }),
@@ -49,10 +68,21 @@ test('foo', function (t) {
49
68
  test('bar', function (t) {
50
69
  var dir = path.join(__dirname, 'resolver');
51
70
 
71
+ var basedir = path.join(dir, 'bar');
72
+
52
73
  t.equal(
53
- resolve.sync('foo', { basedir: path.join(dir, 'bar') }),
54
- path.join(dir, 'bar/node_modules/foo/index.js')
55
- );
74
+ resolve.sync('foo', { basedir: basedir }),
75
+ path.join(dir, 'bar/node_modules/foo/index.js'),
76
+ 'foo in bar'
77
+ );
78
+ if (requireResolveSupportsPaths) {
79
+ t.equal(
80
+ resolve.sync('foo', { basedir: basedir }),
81
+ require.resolve('foo', { paths: [basedir] }),
82
+ 'foo in bar: resolve.sync === require.resolve'
83
+ );
84
+ }
85
+
56
86
  t.end();
57
87
  });
58
88
 
@@ -61,52 +91,98 @@ test('baz', function (t) {
61
91
 
62
92
  t.equal(
63
93
  resolve.sync('./baz', { basedir: dir }),
64
- path.join(dir, 'baz/quux.js')
65
- );
94
+ path.join(dir, 'baz/quux.js'),
95
+ './baz'
96
+ );
97
+ if (requireResolveSupportsPaths) {
98
+ t.equal(
99
+ resolve.sync('./baz', { basedir: dir }),
100
+ require.resolve('./baz', { paths: [dir] }),
101
+ './baz: resolve.sync === require.resolve'
102
+ );
103
+ }
104
+
66
105
  t.end();
67
106
  });
68
107
 
69
108
  test('biz', function (t) {
70
109
  var dir = path.join(__dirname, 'resolver/biz/node_modules');
110
+
71
111
  t.equal(
72
112
  resolve.sync('./grux', { basedir: dir }),
73
113
  path.join(dir, 'grux/index.js')
74
114
  );
115
+ if (requireResolveSupportsPaths) {
116
+ t.equal(
117
+ resolve.sync('./grux', { basedir: dir }),
118
+ require.resolve('./grux', { paths: [dir] }),
119
+ './grux: resolve.sync === require.resolve'
120
+ );
121
+ }
75
122
 
123
+ var tivDir = path.join(dir, 'grux');
76
124
  t.equal(
77
- resolve.sync('tiv', { basedir: path.join(dir, 'grux') }),
125
+ resolve.sync('tiv', { basedir: tivDir }),
78
126
  path.join(dir, 'tiv/index.js')
79
127
  );
128
+ if (requireResolveSupportsPaths) {
129
+ t.equal(
130
+ resolve.sync('tiv', { basedir: tivDir }),
131
+ require.resolve('tiv', { paths: [tivDir] }),
132
+ 'tiv: resolve.sync === require.resolve'
133
+ );
134
+ }
80
135
 
136
+ var gruxDir = path.join(dir, 'tiv');
81
137
  t.equal(
82
- resolve.sync('grux', { basedir: path.join(dir, 'tiv') }),
138
+ resolve.sync('grux', { basedir: gruxDir }),
83
139
  path.join(dir, 'grux/index.js')
84
140
  );
141
+ if (requireResolveSupportsPaths) {
142
+ t.equal(
143
+ resolve.sync('grux', { basedir: gruxDir }),
144
+ require.resolve('grux', { paths: [gruxDir] }),
145
+ 'grux: resolve.sync === require.resolve'
146
+ );
147
+ }
148
+
85
149
  t.end();
86
150
  });
87
151
 
88
152
  test('normalize', function (t) {
89
153
  var dir = path.join(__dirname, 'resolver/biz/node_modules/grux');
154
+
90
155
  t.equal(
91
156
  resolve.sync('../grux', { basedir: dir }),
92
157
  path.join(dir, 'index.js')
93
158
  );
159
+ if (requireResolveSupportsPaths) {
160
+ t.equal(
161
+ resolve.sync('../grux', { basedir: dir }),
162
+ require.resolve('../grux', { paths: [dir] }),
163
+ '../grux: resolve.sync === require.resolve'
164
+ );
165
+ }
166
+
94
167
  t.end();
95
168
  });
96
169
 
97
170
  test('cup', function (t) {
98
171
  var dir = path.join(__dirname, 'resolver');
172
+
99
173
  t.equal(
100
174
  resolve.sync('./cup', {
101
175
  basedir: dir,
102
176
  extensions: ['.js', '.coffee']
103
177
  }),
104
- path.join(dir, 'cup.coffee')
178
+ path.join(dir, 'cup.coffee'),
179
+ './cup -> ./cup.coffee'
105
180
  );
106
181
 
107
182
  t.equal(
108
183
  resolve.sync('./cup.coffee', { basedir: dir }),
109
- path.join(dir, 'cup.coffee')
184
+ path.join(dir, 'cup.coffee'),
185
+ './cup.coffee'
110
186
  );
111
187
 
112
188
  t.throws(function () {
@@ -116,22 +192,40 @@ test('cup', function (t) {
116
192
  });
117
193
  });
118
194
 
195
+ if (requireResolveSupportsPaths) {
196
+ t.equal(
197
+ resolve.sync('./cup.coffee', { basedir: dir, extensions: ['.js', '.coffee'] }),
198
+ require.resolve('./cup.coffee', { paths: [dir] }),
199
+ './cup.coffee: resolve.sync === require.resolve'
200
+ );
201
+ }
202
+
119
203
  t.end();
120
204
  });
121
205
 
122
206
  test('mug', function (t) {
123
207
  var dir = path.join(__dirname, 'resolver');
208
+
124
209
  t.equal(
125
210
  resolve.sync('./mug', { basedir: dir }),
126
- path.join(dir, 'mug.js')
127
- );
211
+ path.join(dir, 'mug.js'),
212
+ './mug -> ./mug.js'
213
+ );
214
+ if (requireResolveSupportsPaths) {
215
+ t.equal(
216
+ resolve.sync('./mug', { basedir: dir }),
217
+ require.resolve('./mug', { paths: [dir] }),
218
+ './mug: resolve.sync === require.resolve'
219
+ );
220
+ }
128
221
 
129
222
  t.equal(
130
223
  resolve.sync('./mug', {
131
224
  basedir: dir,
132
225
  extensions: ['.coffee', '.js']
133
226
  }),
134
- path.join(dir, 'mug.coffee')
227
+ path.join(dir, 'mug.coffee'),
228
+ './mug -> ./mug.coffee'
135
229
  );
136
230
 
137
231
  t.equal(
@@ -139,7 +233,8 @@ test('mug', function (t) {
139
233
  basedir: dir,
140
234
  extensions: ['.js', '.coffee']
141
235
  }),
142
- path.join(dir, 'mug.js')
236
+ path.join(dir, 'mug.js'),
237
+ './mug -> ./mug.js'
143
238
  );
144
239
 
145
240
  t.end();
@@ -203,6 +298,13 @@ test('incorrect main', function (t) {
203
298
  resolve.sync('./incorrect_main', { basedir: resolverDir }),
204
299
  path.join(dir, 'index.js')
205
300
  );
301
+ if (requireResolveSupportsPaths) {
302
+ t.equal(
303
+ resolve.sync('./incorrect_main', { basedir: resolverDir }),
304
+ require.resolve('./incorrect_main', { paths: [resolverDir] }),
305
+ './incorrect_main: resolve.sync === require.resolve'
306
+ );
307
+ }
206
308
 
207
309
  t.end();
208
310
  });
@@ -233,29 +335,66 @@ test('#79 - re-throw non ENOENT errors from stat', function (t) {
233
335
 
234
336
  test('#52 - incorrectly resolves module-paths like "./someFolder/" when there is a file of the same name', function (t) {
235
337
  var dir = path.join(__dirname, 'resolver');
338
+ var basedir = path.join(dir, 'same_names');
236
339
 
237
340
  t.equal(
238
- resolve.sync('./foo', { basedir: path.join(dir, 'same_names') }),
341
+ resolve.sync('./foo', { basedir: basedir }),
239
342
  path.join(dir, 'same_names/foo.js')
240
343
  );
344
+ if (requireResolveSupportsPaths) {
345
+ t.equal(
346
+ resolve.sync('./foo', { basedir: basedir }),
347
+ require.resolve('./foo', { paths: [basedir] }),
348
+ './foo: resolve.sync === require.resolve'
349
+ );
350
+ }
351
+
241
352
  t.equal(
242
- resolve.sync('./foo/', { basedir: path.join(dir, 'same_names') }),
353
+ resolve.sync('./foo/', { basedir: basedir }),
243
354
  path.join(dir, 'same_names/foo/index.js')
244
355
  );
356
+ if (requireResolveSupportsPaths) {
357
+ t.equal(
358
+ resolve.sync('./foo/', { basedir: basedir }),
359
+ require.resolve('./foo/', { paths: [basedir] }),
360
+ './foo/: resolve.sync === require.resolve'
361
+ );
362
+ }
363
+
245
364
  t.end();
246
365
  });
247
366
 
248
367
  test('#211 - incorrectly resolves module-paths like "." when from inside a folder with a sibling file of the same name', function (t) {
249
368
  var dir = path.join(__dirname, 'resolver');
369
+ var basedir = path.join(dir, 'same_names/foo');
250
370
 
251
371
  t.equal(
252
- resolve.sync('./', { basedir: path.join(dir, 'same_names/foo') }),
253
- path.join(dir, 'same_names/foo/index.js')
254
- );
372
+ resolve.sync('./', { basedir: basedir }),
373
+ path.join(dir, 'same_names/foo/index.js'),
374
+ './'
375
+ );
376
+ if (requireResolveSupportsPaths) {
377
+ t.equal(
378
+ resolve.sync('./', { basedir: basedir }),
379
+ require.resolve('./', { paths: [basedir] }),
380
+ './: resolve.sync === require.resolve'
381
+ );
382
+ }
383
+
255
384
  t.equal(
256
- resolve.sync('.', { basedir: path.join(dir, 'same_names/foo') }),
257
- path.join(dir, 'same_names/foo/index.js')
258
- );
385
+ resolve.sync('.', { basedir: basedir }),
386
+ path.join(dir, 'same_names/foo/index.js'),
387
+ '.'
388
+ );
389
+ if (requireResolveSupportsPaths) {
390
+ t.equal(
391
+ resolve.sync('.', { basedir: basedir }),
392
+ require.resolve('.', { paths: [basedir] }),
393
+ '.: resolve.sync === require.resolve',
394
+ { todo: true }
395
+ );
396
+ }
397
+
259
398
  t.end();
260
399
  });
261
400
 
@@ -268,6 +407,12 @@ test('sync: #121 - treating an existing file as a dir when no basedir', function
268
407
  __filename,
269
408
  'sanity check'
270
409
  );
410
+ st.equal(
411
+ resolve.sync('./' + testFile),
412
+ require.resolve('./' + testFile),
413
+ 'sanity check: resolve.sync === require.resolve'
414
+ );
415
+
271
416
  st.end();
272
417
  });
273
418
 
@@ -295,15 +440,38 @@ test('sync: #121 - treating an existing file as a dir when no basedir', function
295
440
 
296
441
  test('sync dot main', function (t) {
297
442
  var start = new Date();
298
- t.equal(resolve.sync('./resolver/dot_main'), path.join(__dirname, 'resolver/dot_main/index.js'));
443
+
444
+ t.equal(
445
+ resolve.sync('./resolver/dot_main'),
446
+ path.join(__dirname, 'resolver/dot_main/index.js'),
447
+ './resolver/dot_main'
448
+ );
449
+ t.equal(
450
+ resolve.sync('./resolver/dot_main'),
451
+ require.resolve('./resolver/dot_main'),
452
+ './resolver/dot_main: resolve.sync === require.resolve'
453
+ );
454
+
299
455
  t.ok(new Date() - start < 50, 'resolve.sync timedout');
456
+
300
457
  t.end();
301
458
  });
302
459
 
303
460
  test('sync dot slash main', function (t) {
304
461
  var start = new Date();
305
- t.equal(resolve.sync('./resolver/dot_slash_main'), path.join(__dirname, 'resolver/dot_slash_main/index.js'));
462
+
463
+ t.equal(
464
+ resolve.sync('./resolver/dot_slash_main'),
465
+ path.join(__dirname, 'resolver/dot_slash_main/index.js')
466
+ );
467
+ t.equal(
468
+ resolve.sync('./resolver/dot_slash_main'),
469
+ require.resolve('./resolver/dot_slash_main'),
470
+ './resolver/dot_slash_main: resolve.sync === require.resolve'
471
+ );
472
+
306
473
  t.ok(new Date() - start < 50, 'resolve.sync timedout');
474
+
307
475
  t.end();
308
476
  });
309
477
 
@@ -372,27 +540,54 @@ test('absolute paths', function (t) {
372
540
  __filename,
373
541
  'absolute path to this file resolves'
374
542
  );
543
+ t.equal(
544
+ resolve.sync(__filename),
545
+ require.resolve(__filename),
546
+ 'absolute path to this file: resolve.sync === require.resolve'
547
+ );
548
+
375
549
  t.equal(
376
550
  resolve.sync(extensionless),
377
551
  __filename,
378
552
  'extensionless absolute path to this file resolves'
379
553
  );
554
+ t.equal(
555
+ resolve.sync(__filename),
556
+ require.resolve(__filename),
557
+ 'absolute path to this file: resolve.sync === require.resolve'
558
+ );
559
+
380
560
  t.equal(
381
561
  resolve.sync(__filename, { basedir: process.cwd() }),
382
562
  __filename,
383
563
  'absolute path to this file with a basedir resolves'
384
564
  );
565
+ if (requireResolveSupportsPaths) {
566
+ t.equal(
567
+ resolve.sync(__filename, { basedir: process.cwd() }),
568
+ require.resolve(__filename, { paths: [process.cwd()] }),
569
+ 'absolute path to this file + basedir: resolve.sync === require.resolve'
570
+ );
571
+ }
572
+
385
573
  t.equal(
386
574
  resolve.sync(extensionless, { basedir: process.cwd() }),
387
575
  __filename,
388
576
  'extensionless absolute path to this file with a basedir resolves'
389
577
  );
578
+ if (requireResolveSupportsPaths) {
579
+ t.equal(
580
+ resolve.sync(extensionless, { basedir: process.cwd() }),
581
+ require.resolve(extensionless, { paths: [process.cwd()] }),
582
+ 'extensionless absolute path to this file + basedir: resolve.sync === require.resolve'
583
+ );
584
+ }
390
585
 
391
586
  t.end();
392
587
  });
393
588
 
394
589
  test('malformed package.json', function (t) {
395
- t.plan(5);
590
+ t.plan(5 + (requireResolveSupportsPaths ? 1 : 0));
396
591
 
397
592
  var basedir = path.join(__dirname, 'resolver/malformed_package_json');
398
593
  var expected = path.join(basedir, 'index.js');
@@ -402,6 +597,13 @@ test('malformed package.json', function (t) {
402
597
  expected,
403
598
  'malformed package.json is silently ignored'
404
599
  );
600
+ if (requireResolveSupportsPaths) {
601
+ t.equal(
602
+ resolve.sync('./index.js', { basedir: basedir }),
603
+ require.resolve('./index.js', { paths: [basedir] }),
604
+ 'malformed package.json: resolve.sync === require.resolve'
605
+ );
606
+ }
405
607
 
406
608
  var res1 = resolve.sync(
407
609
  './index.js',
package/package.json CHANGED
@@ -69,7 +69,7 @@
69
69
  "jsii-diff": "^1.52.1",
70
70
  "jsii-docgen": "^1.8.110",
71
71
  "json-schema": "^0.4.0",
72
- "markmac": "^0.1.144",
72
+ "markmac": "^0.1.146",
73
73
  "npm-check-updates": "^12",
74
74
  "prettier": "^2.5.1",
75
75
  "standard-version": "^9",
@@ -117,7 +117,7 @@
117
117
  },
118
118
  "main": "lib/index.js",
119
119
  "license": "Apache-2.0",
120
- "version": "0.51.9",
120
+ "version": "0.51.13",
121
121
  "jest": {
122
122
  "testMatch": [
123
123
  "<rootDir>/src/**/__tests__/**/*.ts?(x)",
package/releasetag.txt CHANGED
@@ -1 +1 @@
1
- v0.51.9
1
+ v0.51.13
package/version.txt CHANGED
@@ -1 +1 @@
1
- 0.51.9
1
+ 0.51.13