eternal-timer 2.5.0 → 2.5.1
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.
- package/README.md +2 -2
- package/dist/cjs/TimersManager/{JSONLTimersManager.cjs → JSONLTimersManager.js} +2 -2
- package/dist/cjs/TimersManager/{PlainTextTimersManager.cjs → PlainTextTimersManager.js} +2 -2
- package/dist/cjs/TimersManager/{TimersManager.cjs → TimersManager.js} +2 -2
- package/dist/cjs/TimersStore/{JSONLTimersStore.cjs → JSONLTimersStore.js} +1 -1
- package/dist/cjs/TimersStore/{PlainTextTimersStore.cjs → PlainTextTimersStore.js} +1 -1
- package/dist/cjs/TimersStore/{TimersStore.cjs → TimersStore.js} +4 -4
- package/dist/cjs/TimersStore/TimersStore.js.map +1 -0
- package/dist/cjs/{index.cjs → index.js} +2 -2
- package/dist/cjs/package.json +3 -0
- package/dist/esm/TimersStore/TimersStore.js +4 -4
- package/dist/esm/TimersStore/TimersStore.js.map +1 -1
- package/dist/esm/package.json +3 -0
- package/package.json +10 -17
- package/dist/cjs/TimersStore/TimersStore.cjs.map +0 -1
- /package/dist/cjs/{Log.cjs → Log.js} +0 -0
- /package/dist/cjs/{Log.cjs.map → Log.js.map} +0 -0
- /package/dist/cjs/TimersManager/{JSONLTimersManager.cjs.map → JSONLTimersManager.js.map} +0 -0
- /package/dist/cjs/TimersManager/{PlainTextTimersManager.cjs.map → PlainTextTimersManager.js.map} +0 -0
- /package/dist/cjs/TimersManager/{TimersManager.cjs.map → TimersManager.js.map} +0 -0
- /package/dist/cjs/TimersStore/{JSONLTimersStore.cjs.map → JSONLTimersStore.js.map} +0 -0
- /package/dist/cjs/TimersStore/{PlainTextTimersStore.cjs.map → PlainTextTimersStore.js.map} +0 -0
- /package/dist/cjs/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/{searchRoot.cjs → searchRoot.js} +0 -0
- /package/dist/cjs/{searchRoot.cjs.map → searchRoot.js.map} +0 -0
- /package/dist/cjs/{types.cjs → types.js} +0 -0
- /package/dist/cjs/{types.cjs.map → types.js.map} +0 -0
package/README.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|

|
|
5
|
+
[](https://deepwiki.com/SUKEsann2000/eternal-timer)
|
|
5
6
|
|
|
6
7
|
A simple and persistent timer library for Node.js. Timers are saved to a file and maintain their state even after process restart.
|
|
7
8
|
|
|
@@ -218,11 +219,10 @@ type Timer<T extends StorageType> = {
|
|
|
218
219
|
|
|
219
220
|
## Scripts
|
|
220
221
|
|
|
221
|
-
- `npm run dev`: Run in development mode with nodemon
|
|
222
222
|
- `npm run build`: Compile TypeScript
|
|
223
|
-
- `npm start`: Run compiled JavaScript
|
|
224
223
|
- `npm run test`: Test the compiled code
|
|
225
224
|
- `npm run lint`: Lint all codes
|
|
225
|
+
- `npm run lint:fix`: Lint all codes and fix
|
|
226
226
|
|
|
227
227
|
## Storage Formats
|
|
228
228
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.JSONLTimersManager = void 0;
|
|
4
|
-
const TimersManager_js_1 = require("./TimersManager.
|
|
5
|
-
const JSONLTimersStore_js_1 = require("../TimersStore/JSONLTimersStore.
|
|
4
|
+
const TimersManager_js_1 = require("./TimersManager.js");
|
|
5
|
+
const JSONLTimersStore_js_1 = require("../TimersStore/JSONLTimersStore.js");
|
|
6
6
|
/**
|
|
7
7
|
* JSONLTimersManager
|
|
8
8
|
* @description
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PlainTextTimersManager = void 0;
|
|
4
|
-
const TimersManager_js_1 = require("./TimersManager.
|
|
5
|
-
const PlainTextTimersStore_js_1 = require("../TimersStore/PlainTextTimersStore.
|
|
4
|
+
const TimersManager_js_1 = require("./TimersManager.js");
|
|
5
|
+
const PlainTextTimersStore_js_1 = require("../TimersStore/PlainTextTimersStore.js");
|
|
6
6
|
/**
|
|
7
7
|
* PlainTextTimersManager
|
|
8
8
|
* @description
|
|
@@ -7,8 +7,8 @@ exports.TimersManager = void 0;
|
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
9
|
const uuid_1 = require("uuid");
|
|
10
|
-
const searchRoot_js_1 = __importDefault(require("../searchRoot.
|
|
11
|
-
const Log_js_1 = require("../Log.
|
|
10
|
+
const searchRoot_js_1 = __importDefault(require("../searchRoot.js"));
|
|
11
|
+
const Log_js_1 = require("../Log.js");
|
|
12
12
|
/**
|
|
13
13
|
* TimersManager
|
|
14
14
|
* @description
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.JSONLTimersStore = void 0;
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
|
-
const TimersStore_js_1 = require("./TimersStore.
|
|
5
|
+
const TimersStore_js_1 = require("./TimersStore.js");
|
|
6
6
|
class JSONLTimersStore extends TimersStore_js_1.TimersStore {
|
|
7
7
|
constructor(timerfile) {
|
|
8
8
|
super(timerfile);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PlainTextTimersStore = void 0;
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
|
-
const TimersStore_js_1 = require("./TimersStore.
|
|
5
|
+
const TimersStore_js_1 = require("./TimersStore.js");
|
|
6
6
|
class PlainTextTimersStore extends TimersStore_js_1.TimersStore {
|
|
7
7
|
constructor(timerfile) {
|
|
8
8
|
super(timerfile);
|
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.TimersStore = void 0;
|
|
7
|
-
const
|
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
8
8
|
class TimersStore {
|
|
9
9
|
timerfile;
|
|
10
10
|
constructor(timerfile) {
|
|
@@ -12,7 +12,7 @@ class TimersStore {
|
|
|
12
12
|
}
|
|
13
13
|
async loadTimers() {
|
|
14
14
|
try {
|
|
15
|
-
const data = await
|
|
15
|
+
const data = await promises_1.default.readFile(this.timerfile, "utf-8");
|
|
16
16
|
const timersData = this.parseTimers(data);
|
|
17
17
|
await this.checkTimerfileSyntax(timersData);
|
|
18
18
|
return timersData;
|
|
@@ -24,7 +24,7 @@ class TimersStore {
|
|
|
24
24
|
async saveTimers(timers) {
|
|
25
25
|
const data = this.toStringifyTimers(timers);
|
|
26
26
|
try {
|
|
27
|
-
await
|
|
27
|
+
await promises_1.default.writeFile(this.timerfile, data, "utf-8");
|
|
28
28
|
}
|
|
29
29
|
catch (e) {
|
|
30
30
|
throw new Error(`Error when saving timer data`, { cause: e });
|
|
@@ -32,7 +32,7 @@ class TimersStore {
|
|
|
32
32
|
}
|
|
33
33
|
async appendTimer(timer) {
|
|
34
34
|
try {
|
|
35
|
-
await
|
|
35
|
+
await promises_1.default.appendFile(this.timerfile, this.toStringifyTimers([timer]) + "\n");
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
38
|
catch (e) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA6B;AAI7B,MAAsB,WAAW;IACb,SAAS,CAAS;IAErC,YACC,SAAiB;QAEjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,UAAU,GAAe,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC;QACnB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAkB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC;YACJ,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAe;QACvC,IAAI,CAAC;YACJ,MAAM,kBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC5E,OAAO;QACR,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;CAKD;AA1CD,kCA0CC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PlainTextTimersManager = exports.JSONLTimersManager = void 0;
|
|
4
|
-
var JSONLTimersManager_js_1 = require("./TimersManager/JSONLTimersManager.
|
|
4
|
+
var JSONLTimersManager_js_1 = require("./TimersManager/JSONLTimersManager.js");
|
|
5
5
|
Object.defineProperty(exports, "JSONLTimersManager", { enumerable: true, get: function () { return JSONLTimersManager_js_1.JSONLTimersManager; } });
|
|
6
|
-
var PlainTextTimersManager_js_1 = require("./TimersManager/PlainTextTimersManager.
|
|
6
|
+
var PlainTextTimersManager_js_1 = require("./TimersManager/PlainTextTimersManager.js");
|
|
7
7
|
Object.defineProperty(exports, "PlainTextTimersManager", { enumerable: true, get: function () { return PlainTextTimersManager_js_1.PlainTextTimersManager; } });
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import fs from "fs";
|
|
1
|
+
import fs from "fs/promises";
|
|
2
2
|
export class TimersStore {
|
|
3
3
|
timerfile;
|
|
4
4
|
constructor(timerfile) {
|
|
@@ -6,7 +6,7 @@ export class TimersStore {
|
|
|
6
6
|
}
|
|
7
7
|
async loadTimers() {
|
|
8
8
|
try {
|
|
9
|
-
const data = await fs.
|
|
9
|
+
const data = await fs.readFile(this.timerfile, "utf-8");
|
|
10
10
|
const timersData = this.parseTimers(data);
|
|
11
11
|
await this.checkTimerfileSyntax(timersData);
|
|
12
12
|
return timersData;
|
|
@@ -18,7 +18,7 @@ export class TimersStore {
|
|
|
18
18
|
async saveTimers(timers) {
|
|
19
19
|
const data = this.toStringifyTimers(timers);
|
|
20
20
|
try {
|
|
21
|
-
await fs.
|
|
21
|
+
await fs.writeFile(this.timerfile, data, "utf-8");
|
|
22
22
|
}
|
|
23
23
|
catch (e) {
|
|
24
24
|
throw new Error(`Error when saving timer data`, { cause: e });
|
|
@@ -26,7 +26,7 @@ export class TimersStore {
|
|
|
26
26
|
}
|
|
27
27
|
async appendTimer(timer) {
|
|
28
28
|
try {
|
|
29
|
-
await fs.
|
|
29
|
+
await fs.appendFile(this.timerfile, this.toStringifyTimers([timer]) + "\n");
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
32
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAI7B,MAAM,OAAgB,WAAW;IACb,SAAS,CAAS;IAErC,YACC,SAAiB;QAEjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,UAAU,GAAe,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC;QACnB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAkB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAe;QACvC,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC5E,OAAO;QACR,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;CAKD"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eternal-timer",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"description": "timer for node.js package",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"lint": "npx eslint --fix --config ./eslint/eslint.config.ts",
|
|
6
|
+
"build": "tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && node scripts/move-package-json.js",
|
|
7
|
+
"lint": "npx eslint --config ./eslint/eslint.config.ts",
|
|
8
|
+
"lint:fix": "npx eslint --fix --config ./eslint/eslint.config.ts",
|
|
10
9
|
"test": "npm run build && node test/index.js"
|
|
11
10
|
},
|
|
12
11
|
"repository": {
|
|
@@ -18,7 +17,7 @@
|
|
|
18
17
|
"time-tracking",
|
|
19
18
|
"jsonl",
|
|
20
19
|
"append-only"
|
|
21
|
-
],
|
|
20
|
+
],
|
|
22
21
|
"author": "SUKEsann2000",
|
|
23
22
|
"license": "Apache-2.0",
|
|
24
23
|
"type": "module",
|
|
@@ -27,34 +26,28 @@
|
|
|
27
26
|
},
|
|
28
27
|
"homepage": "https://github.com/SUKEsann2000/eternal-timer#readme",
|
|
29
28
|
"devDependencies": {
|
|
30
|
-
"@types/node": "^25.0
|
|
29
|
+
"@types/node": "^25.5.0",
|
|
31
30
|
"eslint": "^9.39.2",
|
|
32
31
|
"globals": "^17.0.0",
|
|
33
32
|
"jiti": "^2.6.1",
|
|
34
|
-
"nodemon": "^3.1.11",
|
|
35
|
-
"ts-node": "^10.9.2",
|
|
36
33
|
"typescript": "^5.9.3",
|
|
37
34
|
"typescript-eslint": "^8.52.0"
|
|
38
35
|
},
|
|
39
36
|
"exports": {
|
|
40
37
|
".": {
|
|
38
|
+
"types": "./dist/esm/index.d.ts",
|
|
41
39
|
"import": "./dist/esm/index.js",
|
|
42
|
-
"require": "./dist/cjs/index.
|
|
43
|
-
"types": {
|
|
44
|
-
"import": "./dist/esm/index.d.ts",
|
|
45
|
-
"require": "./dist/cjs/index.d.ts"
|
|
46
|
-
}
|
|
40
|
+
"require": "./dist/cjs/index.js"
|
|
47
41
|
}
|
|
48
42
|
},
|
|
49
|
-
"types": "dist/
|
|
43
|
+
"types": "./dist/esm/index.d.ts",
|
|
50
44
|
"dependencies": {
|
|
51
45
|
"uuid": "^13.0.0"
|
|
52
46
|
},
|
|
53
47
|
"files": [
|
|
54
48
|
"dist"
|
|
55
49
|
],
|
|
56
|
-
"
|
|
57
|
-
"main": "./dist/cjs/index.cjs",
|
|
50
|
+
"main": "./dist/cjs/index.js",
|
|
58
51
|
"optionalDependencies": {
|
|
59
52
|
"@logtape/logtape": "^2.0.0"
|
|
60
53
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimersStore.js","sourceRoot":"","sources":["../../../src/TimersStore/TimersStore.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AAIpB,MAAsB,WAAW;IACb,SAAS,CAAS;IAErC,YACC,SAAiB;QAEjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,UAAU,GAAe,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC;QACnB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAkB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC;YACJ,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAe;QACvC,IAAI,CAAC;YACJ,MAAM,YAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACrF,OAAO;QACR,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;CAKD;AA1CD,kCA0CC"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/cjs/TimersManager/{PlainTextTimersManager.cjs.map → PlainTextTimersManager.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|