extwee 2.0.6 → 2.2.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.
Files changed (216) hide show
  1. package/.eslintrc.json +25 -25
  2. package/.github/FUNDING.yml +3 -0
  3. package/.github/dependabot.yml +11 -0
  4. package/.github/workflows/nodejs.yml +25 -24
  5. package/.travis.yml +13 -13
  6. package/CODE_OF_CONDUCT.md +82 -82
  7. package/LICENSE +21 -21
  8. package/README.md +173 -36
  9. package/SECURITY.md +12 -12
  10. package/babel.config.json +18 -22
  11. package/build/extwee +0 -0
  12. package/build/extwee.exe +0 -0
  13. package/build/extwee.web.min.js +2 -0
  14. package/build/extwee.web.min.js.LICENSE.txt +1 -0
  15. package/docs/.nojekyll +0 -0
  16. package/docs/README.md +167 -0
  17. package/docs/_sidebar.md +19 -0
  18. package/docs/examples/dynamicPassages.md +28 -0
  19. package/docs/examples/jsonToTwee.md +23 -0
  20. package/docs/examples/twsToTwee.md +25 -0
  21. package/docs/formats/json.md +17 -0
  22. package/docs/formats/twee.md +13 -0
  23. package/docs/formats/twine1HTML.md +13 -0
  24. package/docs/formats/twine2ArchiveHTML.md +13 -0
  25. package/docs/formats/twine2HTML.md +13 -0
  26. package/docs/formats/tws.md +9 -0
  27. package/docs/index.html +26 -0
  28. package/docs/install/binaries.md +9 -0
  29. package/docs/install/npm.md +20 -0
  30. package/docs/install/npx.md +9 -0
  31. package/docs/objects/passage.md +47 -0
  32. package/docs/objects/story.md +70 -0
  33. package/docs/objects/storyformat.md +27 -0
  34. package/index.html +22 -0
  35. package/index.js +29 -31
  36. package/package.json +65 -58
  37. package/src/JSON/parse.js +128 -0
  38. package/src/Passage.js +298 -202
  39. package/src/Story.js +650 -523
  40. package/src/StoryFormat/parse.js +134 -0
  41. package/src/StoryFormat.js +259 -300
  42. package/src/TWS/parse.js +86 -0
  43. package/src/Twee/parse.js +157 -0
  44. package/src/Twine1HTML/compile.js +58 -0
  45. package/src/Twine1HTML/parse.js +134 -0
  46. package/src/Twine2ArchiveHTML/compile.js +36 -0
  47. package/src/Twine2ArchiveHTML/parse.js +49 -0
  48. package/src/Twine2HTML/compile.js +35 -0
  49. package/src/Twine2HTML/parse.js +348 -0
  50. package/src/extwee.js +206 -0
  51. package/test/CLI/CLI.test.js +49 -0
  52. package/test/CLI/files/example.json +1 -0
  53. package/test/CLI/files/example6.twee +22 -0
  54. package/test/{Roundtrip → CLI/files}/harlowe.js +2 -2
  55. package/test/CLI/{input.html → files/input.html} +47 -47
  56. package/test/CLI/files/output/test.twee +0 -0
  57. package/test/CLI/{tweeExample.twee → files/tweeExample.twee} +17 -17
  58. package/test/CLI/files/twine1/LICENSE.txt +32 -0
  59. package/test/CLI/files/twine1/code.js +5 -0
  60. package/test/CLI/files/twine1/engine.js +43 -0
  61. package/test/CLI/files/twine1/header.html +325 -0
  62. package/test/CLI/files/twine1Test.html +371 -0
  63. package/test/CLI/{twineExample.html → files/twineExample.html} +16 -15
  64. package/test/JSON/JSON.Parse.test.js +316 -0
  65. package/test/Passage.test.js +175 -104
  66. package/test/Roundtrip/{Example1.html → Files/Example1.html} +63 -63
  67. package/test/Roundtrip/Files/LICENSE +19 -0
  68. package/test/Roundtrip/Files/example1.twee +10 -0
  69. package/test/Roundtrip/{example2.twee → Files/example2.twee} +27 -18
  70. package/test/Roundtrip/{example4.twee → Files/example4.twee} +27 -27
  71. package/test/{StoryFormatParser → Roundtrip/Files}/harlowe.js +2 -2
  72. package/test/Roundtrip/{round.html → Files/round.html} +6 -4
  73. package/test/Roundtrip/Roundtrip.test.js +54 -0
  74. package/test/Story.test.js +638 -423
  75. package/test/StoryFormat/StoryFormat.Parse.test.js +91 -0
  76. package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/example.js +3 -3
  77. package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/example2.js +3 -3
  78. package/test/{CLI → StoryFormat/StoryFormatParser}/harlowe.js +2 -2
  79. package/test/StoryFormat.test.js +152 -152
  80. package/test/TWS/Parse.test.js +78 -0
  81. package/test/TWS/TWSParser/Example1.tws +150 -0
  82. package/test/TWS/TWSParser/Example5.tws +414 -0
  83. package/test/TWS/TWSParser/noscale.tws +0 -0
  84. package/test/TWS/TWSParser/nostory.tws +0 -0
  85. package/test/Twee/Twee.Parse.test.js +76 -0
  86. package/test/{TweeParser → Twee/TweeParser}/emptytags.twee +2 -2
  87. package/test/{TweeParser → Twee/TweeParser}/example.twee +32 -32
  88. package/test/{TweeParser → Twee/TweeParser}/missing.twee +19 -19
  89. package/test/{TweeParser → Twee/TweeParser}/multipleScriptPassages.twee +19 -19
  90. package/test/{TweeParser → Twee/TweeParser}/multipleStyleTag.twee +19 -19
  91. package/test/{TweeParser → Twee/TweeParser}/multipletags.twee +10 -10
  92. package/test/{TweeParser → Twee/TweeParser}/noTitle.twee +2 -2
  93. package/test/{TweeParser → Twee/TweeParser}/notes.twee +16 -16
  94. package/test/{TweeParser → Twee/TweeParser}/pasagemetadataerror.twee +2 -2
  95. package/test/{TweeParser → Twee/TweeParser}/scriptPassage.twee +16 -16
  96. package/test/{TweeParser → Twee/TweeParser}/singletag.twee +13 -13
  97. package/test/{TweeParser → Twee/TweeParser}/startMetadata.twee +14 -14
  98. package/test/{TweeParser → Twee/TweeParser}/storydataerror.twee +25 -25
  99. package/test/{TweeParser → Twee/TweeParser}/stylePassage.twee +16 -16
  100. package/test/{Story → Twee/TweeParser}/test.twee +25 -25
  101. package/test/Twine1HTML/Twine1HTML.Compile.test.js +180 -0
  102. package/test/Twine1HTML/Twine1HTML.Parse.test.js +183 -0
  103. package/test/Twine1HTML/Twine1HTMLCompiler/Twine1/LICENSE +674 -0
  104. package/test/Twine1HTML/Twine1HTMLCompiler/Twine1/engine.js +43 -0
  105. package/test/Twine1HTML/Twine1HTMLCompiler/Twine1/jquery.js +4 -0
  106. package/test/Twine1HTML/Twine1HTMLCompiler/Twine1/modernizr.js +4 -0
  107. package/test/Twine1HTML/Twine1HTMLCompiler/engineTest.html +1 -0
  108. package/test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/LICENSE +32 -0
  109. package/test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/code.js +4 -0
  110. package/test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/header.html +327 -0
  111. package/test/Twine1HTML/Twine1HTMLCompiler/test.html +0 -0
  112. package/test/Twine1HTML/Twine1HTMLCompiler/test1.html +6 -0
  113. package/test/Twine1HTML/Twine1HTMLCompiler/test2.html +6 -0
  114. package/test/Twine1HTML/Twine1HTMLCompiler/test3.html +43 -0
  115. package/test/Twine1HTML/Twine1HTMLCompiler/test4.html +372 -0
  116. package/test/Twine1HTML/Twine1HTMLCompiler/test5.html +372 -0
  117. package/test/Twine2ArchiveHTML/Twine2ArchiveHTML.Compile.test.js +35 -0
  118. package/test/Twine2ArchiveHTML/Twine2ArchiveHTML.Parse.test.js +25 -0
  119. package/test/Twine2ArchiveHTML/Twine2ArchiveHTMLCompiler/test1.html +6 -0
  120. package/test/Twine2ArchiveHTML/Twine2ArchiveHTMLParser/test1.html +3 -0
  121. package/test/Twine2HTML/Twine2HTML.Compile.test.js +224 -0
  122. package/test/Twine2HTML/Twine2HTML.Parse.test.js +172 -0
  123. package/test/{HTMLWriter → Twine2HTML/Twine2HTMLCompiler}/creator.html +4 -4
  124. package/test/{CLI → Twine2HTML/Twine2HTMLCompiler}/example6.twee +15 -15
  125. package/test/{HTMLWriter → Twine2HTML/Twine2HTMLCompiler}/missingStoryTitle.twee +29 -29
  126. package/test/{HTMLWriter → Twine2HTML/Twine2HTMLCompiler}/test2.html +10 -8
  127. package/test/{HTMLWriter → Twine2HTML/Twine2HTMLCompiler}/test3.html +1 -1
  128. package/test/{HTMLWriter → Twine2HTML/Twine2HTMLCompiler}/test4.html +4 -4
  129. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/Example1.html +52 -52
  130. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/Tags.html +15 -15
  131. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/lyingStartnode.html +15 -15
  132. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/lyingTagColors.html +48 -48
  133. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingCreator.html +11 -11
  134. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingCreatorVersion.html +11 -11
  135. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingFormat.html +11 -11
  136. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingFormatVersion.html +11 -11
  137. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingIFID.html +11 -11
  138. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingName.html +33 -33
  139. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingPID.html +15 -15
  140. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingPassageName.html +15 -15
  141. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingPassageTags.html +15 -15
  142. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingPosition.html +15 -15
  143. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingScript.html +14 -14
  144. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingSize.html +35 -35
  145. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingStartnode.html +11 -11
  146. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingStyle.html +14 -14
  147. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/missingZoom.html +11 -11
  148. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/twineExample.html +23 -23
  149. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/twineExample2.html +15 -15
  150. package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/twineExample3.html +15 -15
  151. package/web-index.js +29 -0
  152. package/webpack.config.js +12 -0
  153. package/bin/extwee.js +0 -47
  154. package/src/FileReader.js +0 -33
  155. package/src/HTMLParser.js +0 -345
  156. package/src/HTMLWriter.js +0 -231
  157. package/src/StoryFormatParser.js +0 -142
  158. package/src/TweeParser.js +0 -161
  159. package/src/TweeWriter.js +0 -121
  160. package/story-formats/chapbook-1.2.0/format.js +0 -1
  161. package/story-formats/chapbook-1.2.0/logo.svg +0 -1
  162. package/story-formats/harlowe-1.2.4/format.js +0 -1
  163. package/story-formats/harlowe-1.2.4/icon.svg +0 -78
  164. package/story-formats/harlowe-2.1.0/format.js +0 -2
  165. package/story-formats/harlowe-2.1.0/icon.svg +0 -78
  166. package/story-formats/harlowe-3.1.0/format.js +0 -3
  167. package/story-formats/harlowe-3.1.0/icon.svg +0 -78
  168. package/story-formats/paperthin-1.0.0/format.js +0 -1
  169. package/story-formats/paperthin-1.0.0/icon.svg +0 -5
  170. package/story-formats/snowman-1.4.0/format.js +0 -1
  171. package/story-formats/snowman-1.4.0/icon.svg +0 -436
  172. package/story-formats/snowman-2.0.2/format.js +0 -1
  173. package/story-formats/snowman-2.0.2/icon.svg +0 -436
  174. package/story-formats/sugarcube-1.0.35/LICENSE +0 -23
  175. package/story-formats/sugarcube-1.0.35/format.js +0 -1
  176. package/story-formats/sugarcube-1.0.35/icon.svg +0 -56
  177. package/story-formats/sugarcube-2.31.1/LICENSE +0 -22
  178. package/story-formats/sugarcube-2.31.1/format.js +0 -1
  179. package/story-formats/sugarcube-2.31.1/icon.svg +0 -56
  180. package/test/CLI/test2.html +0 -45
  181. package/test/CLI.test.js +0 -30
  182. package/test/FileReader/t1.txt +0 -1
  183. package/test/FileReader.test.js +0 -14
  184. package/test/HTMLParser.test.js +0 -177
  185. package/test/HTMLWriter/example6.twee +0 -16
  186. package/test/HTMLWriter.test.js +0 -287
  187. package/test/Roundtrip/example1.twee +0 -21
  188. package/test/Roundtrip.test.js +0 -48
  189. package/test/Story/startmeta.twee +0 -29
  190. package/test/StoryFormatParser.test.js +0 -91
  191. package/test/TweeParser/test.twee +0 -25
  192. package/test/TweeParser.test.js +0 -79
  193. package/test/TweeWriter/test1.twee +0 -18
  194. package/test/TweeWriter/test3.twee +0 -12
  195. package/test/TweeWriter/test4.twee +0 -14
  196. package/test/TweeWriter/test5.twee +0 -20
  197. package/test/TweeWriter/test6.twee +0 -15
  198. package/test/TweeWriter/test7.twee +0 -15
  199. package/test/TweeWriter.test.js +0 -107
  200. /package/test/CLI/{test.twee → files/test.twee} +0 -0
  201. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/format.js +0 -0
  202. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/format_doublename.js +0 -0
  203. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/missingAuthor.js +0 -0
  204. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/missingDescription.js +0 -0
  205. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/missingImage.js +0 -0
  206. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/missingLicense.js +0 -0
  207. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/missingName.js +0 -0
  208. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/missingProofing.js +0 -0
  209. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/missingSource.js +0 -0
  210. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/missingURL.js +0 -0
  211. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/missingVersion.js +0 -0
  212. /package/test/{StoryFormatParser → StoryFormat/StoryFormatParser}/versionWrong.js +0 -0
  213. /package/test/{HTMLWriter → Twine2HTML/Twine2HTMLCompiler}/TestTags.html +0 -0
  214. /package/test/{HTMLWriter → Twine2HTML/Twine2HTMLCompiler}/test11.html +0 -0
  215. /package/test/{HTMLWriter → Twine2HTML/Twine2HTMLCompiler}/test6.html +0 -0
  216. /package/test/{HTMLParser → Twine2HTML/Twine2HTMLParser}/tagColors.html +0 -0
package/index.js CHANGED
@@ -1,31 +1,29 @@
1
- import FileReader from './src/FileReader.js';
2
- import TweeParser from './src/TweeParser.js';
3
- import TweeWriter from './src/TweeWriter.js';
4
- import StoryFormatParser from './src/StoryFormatParser.js';
5
- import HTMLParser from './src/HTMLParser.js';
6
- import HTMLWriter from './src/HTMLWriter.js';
7
- import Story from './src/Story.js';
8
- import Passage from './src/Passage.js';
9
- import StoryFormat from './src/StoryFormat.js';
10
-
11
- export { FileReader };
12
- export { TweeParser };
13
- export { StoryFormat };
14
- export { Passage };
15
- export { Story };
16
- export { StoryFormatParser };
17
- export { HTMLParser };
18
- export { HTMLWriter };
19
-
20
- // Export everything by default
21
- export default {
22
- readFile: FileReader.read,
23
- parseTwee: TweeParser.parse,
24
- writeTwee: TweeWriter.write,
25
- StoryFormat,
26
- Passage,
27
- Story,
28
- parseStoryFormat: StoryFormatParser.parse,
29
- parseHTML: HTMLParser.parse,
30
- writeHTML: HTMLWriter.write
31
- };
1
+ import { parse as parseTwee } from './src/Twee/parse.js';
2
+ import { parse as parseJSON } from './src/JSON/parse.js';
3
+ import { parse as parseStoryFormat } from './src/StoryFormat/parse.js';
4
+ import { parse as parseTwine1HTML } from './src/Twine1HTML/parse.js';
5
+ import { parse as parseTwine2HTML } from './src/Twine2HTML/parse.js';
6
+ import { parse as parseTwine2ArchiveHTML } from './src/Twine2ArchiveHTML/parse.js';
7
+ import { parse as parseTWS } from './src/TWS/parse.js';
8
+ import { compile as compileTwine1HTML } from './src/Twine1HTML/compile.js';
9
+ import { compile as compileTwine2HTML } from './src/Twine2HTML/compile.js';
10
+ import { compile as compileTwine2ArchiveHTML } from './src/Twine2ArchiveHTML/compile.js';
11
+ import Story from './src/Story.js';
12
+ import Passage from './src/Passage.js';
13
+ import StoryFormat from './src/StoryFormat.js';
14
+
15
+ export {
16
+ parseTwee,
17
+ parseJSON,
18
+ parseTWS,
19
+ parseStoryFormat,
20
+ parseTwine1HTML,
21
+ parseTwine2HTML,
22
+ parseTwine2ArchiveHTML,
23
+ compileTwine1HTML,
24
+ compileTwine2HTML,
25
+ compileTwine2ArchiveHTML,
26
+ Story,
27
+ Passage,
28
+ StoryFormat
29
+ };
package/package.json CHANGED
@@ -1,58 +1,65 @@
1
- {
2
- "name": "extwee",
3
- "version": "2.0.6",
4
- "description": "A Twee 3 compiler written in JS.",
5
- "author": "Dan Cox",
6
- "main": "index.js",
7
- "bin": {
8
- "extwee": "bin/extwee.js"
9
- },
10
- "scripts": {
11
- "test": "jest --silent --runInBand --coverage --colors",
12
- "lint": "eslint ./src/**/*.js --fix",
13
- "lint:test": "eslint ./test/*.test.js --fix",
14
- "all": "npm run lint && npm run lint:test && npm run test"
15
- },
16
- "keywords": [
17
- "twine",
18
- "twee",
19
- "parser",
20
- "compiler"
21
- ],
22
- "license": "MIT",
23
- "dependencies": {
24
- "commander": "^9.3.0",
25
- "node-html-parser": "^5.3.3",
26
- "semver": "^7.3.7",
27
- "uuid": "^8.3.2"
28
- },
29
- "devDependencies": {
30
- "@babel/cli": "^7.17.10",
31
- "@babel/core": "^7.18.5",
32
- "@babel/eslint-parser": "^7.12.1",
33
- "@babel/eslint-plugin": "^7.12.1",
34
- "@babel/plugin-proposal-class-properties": "^7.12.1",
35
- "@babel/plugin-transform-runtime": "^7.18.5",
36
- "@babel/preset-env": "^7.18.2",
37
- "babel-loader": "^8.2.2",
38
- "core-js": "^3.22.8",
39
- "eslint": "^8.17.0",
40
- "eslint-config-standard": "^17.0.0",
41
- "eslint-plugin-import": "^2.20.1",
42
- "eslint-plugin-jest": "^26.5.3",
43
- "eslint-plugin-jsdoc": "^39.3.2",
44
- "eslint-plugin-node": "^11.0.0",
45
- "eslint-plugin-promise": "^6.0.0",
46
- "jest": "^28.1.1",
47
- "regenerator-runtime": "^0.13.9",
48
- "shelljs": "^0.8.4"
49
- },
50
- "repository": {
51
- "type": "git",
52
- "url": "https://github.com/videlais/extwee"
53
- },
54
- "bugs": {
55
- "url": "https://github.com/videlais/extwee/issues"
56
- },
57
- "type": "module"
58
- }
1
+ {
2
+ "name": "extwee",
3
+ "version": "2.2.0",
4
+ "description": "A story compiler tool using Twine-compatible formats",
5
+ "author": "Dan Cox",
6
+ "main": "index.js",
7
+ "bin": {
8
+ "extwee": "src/extwee.js"
9
+ },
10
+ "scripts": {
11
+ "test": "jest --silent --runInBand --coverage --colors",
12
+ "lint": "eslint ./src/**/*.js --fix",
13
+ "lint:test": "eslint ./test/**/*.test.js --fix",
14
+ "build:web": "webpack",
15
+ "build:bin": "esbuild ./src/extwee.js --bundle --platform=node --target=node12 --outfile=out.js && pkg -t node18-macos-x64 out.js --output ./build/extwee && rm out.js",
16
+ "all": "npm run lint && npm run lint:test && npm run test"
17
+ },
18
+ "keywords": [
19
+ "twine",
20
+ "twee",
21
+ "parser",
22
+ "compiler"
23
+ ],
24
+ "license": "MIT",
25
+ "dependencies": {
26
+ "commander": "^11.1.0",
27
+ "node-html-parser": "^6.1.11",
28
+ "pickleparser": "^0.2.1",
29
+ "semver": "^7.3.7",
30
+ "uuid": "^9.0.1"
31
+ },
32
+ "devDependencies": {
33
+ "@babel/cli": "^7.23.4",
34
+ "@babel/core": "^7.23.6",
35
+ "@babel/eslint-parser": "^7.23.3",
36
+ "@babel/eslint-plugin": "^7.23.5",
37
+ "@babel/preset-env": "^7.23.6",
38
+ "babel-loader": "^9.1.3",
39
+ "clean-jsdoc-theme": "^4.2.17",
40
+ "core-js": "^3.34.0",
41
+ "docsify-cli": "^4.4.4",
42
+ "esbuild": "0.19.10",
43
+ "eslint": "^8.56.0",
44
+ "eslint-config-standard": "^17.1.0",
45
+ "eslint-plugin-import": "^2.29.1",
46
+ "eslint-plugin-jest": "^27.6.0",
47
+ "eslint-plugin-jsdoc": "^46.9.1",
48
+ "eslint-plugin-node": "^11.0.0",
49
+ "eslint-plugin-promise": "^6.1.1",
50
+ "jest": "^29.7.0",
51
+ "pkg": "^5.8.1",
52
+ "regenerator-runtime": "^0.14.1",
53
+ "shelljs": "^0.8.4",
54
+ "webpack": "^5.89.0",
55
+ "webpack-cli": "^5.1.4"
56
+ },
57
+ "repository": {
58
+ "type": "git",
59
+ "url": "https://github.com/videlais/extwee"
60
+ },
61
+ "bugs": {
62
+ "url": "https://github.com/videlais/extwee/issues"
63
+ },
64
+ "type": "module"
65
+ }
@@ -0,0 +1,128 @@
1
+ import Story from '../Story.js';
2
+ import Passage from '../Passage.js';
3
+
4
+ /**
5
+ * Parse JSON representation into Story.
6
+ * @function parse
7
+ * @param {string} jsonString - JSON string to convert to Story.
8
+ * @returns {Story} Story object.
9
+ */
10
+ function parse (jsonString) {
11
+ // Create future object.
12
+ let result = {};
13
+
14
+ // Create Story.
15
+ const s = new Story();
16
+
17
+ // Try to parse the string.
18
+ try {
19
+ result = JSON.parse(jsonString);
20
+ } catch (error) {
21
+ throw new Error('Invalid JSON!');
22
+ }
23
+
24
+ // Name
25
+ if (Object.prototype.hasOwnProperty.call(result, 'name')) {
26
+ // Convert to String (if not String).
27
+ s.name = String(result.name);
28
+ }
29
+
30
+ // Start Passage
31
+ if (Object.prototype.hasOwnProperty.call(result, 'start')) {
32
+ // Convert to String (if not String).
33
+ s.start = String(result.start);
34
+ }
35
+
36
+ // IFID
37
+ if (Object.prototype.hasOwnProperty.call(result, 'ifid')) {
38
+ // Convert to String (if not String).
39
+ // Enforce the uppercase rule of Twine 2 and Twee 3.
40
+ s.IFID = String(result.ifid).toUpperCase();
41
+ }
42
+
43
+ // Format
44
+ if (Object.prototype.hasOwnProperty.call(result, 'format')) {
45
+ // Convert to String (if not String).
46
+ s.format = String(result.format);
47
+ }
48
+
49
+ // Format Version
50
+ if (Object.prototype.hasOwnProperty.call(result, 'formatVersion')) {
51
+ // Convert to String (if not String).
52
+ s.formatVersion = String(result.formatVersion);
53
+ }
54
+
55
+ // Creator
56
+ if (Object.prototype.hasOwnProperty.call(result, 'creator')) {
57
+ // Convert to String (if not String).
58
+ s.creator = String(result.creator);
59
+ }
60
+
61
+ // Creator Version
62
+ if (Object.prototype.hasOwnProperty.call(result, 'creatorVersion')) {
63
+ // Convert to String (if not String).
64
+ s.creatorVersion = String(result.creatorVersion);
65
+ }
66
+
67
+ // Zoom
68
+ if (Object.prototype.hasOwnProperty.call(result, 'zoom')) {
69
+ // Set Zoom.
70
+ s.zoom = result.zoom;
71
+ }
72
+
73
+ // Tag Colors
74
+ if (Object.prototype.hasOwnProperty.call(result, 'tagColors')) {
75
+ // Set tagColors.
76
+ s.tagColors = result.tagColors;
77
+ }
78
+
79
+ // Metadata
80
+ if (Object.prototype.hasOwnProperty.call(result, 'metadata')) {
81
+ // Set metadata.
82
+ s.metadata = result.metadata;
83
+ }
84
+
85
+ // Passages
86
+ if (Object.prototype.hasOwnProperty.call(result, 'passages')) {
87
+ // Is s an array?
88
+ if (Array.isArray(result.passages)) {
89
+ // For each passage, convert into Passage objects.
90
+ result.passages.forEach((p) => {
91
+ // Create default passage.
92
+ const newP = new Passage();
93
+
94
+ // Does s have a name?
95
+ if (Object.prototype.hasOwnProperty.call(p, 'name')) {
96
+ // Set name.
97
+ newP.name = p.name;
98
+ }
99
+
100
+ // Does s have tags?
101
+ if (Object.prototype.hasOwnProperty.call(p, 'tags')) {
102
+ // Set tags.
103
+ newP.tags = p.tags;
104
+ }
105
+
106
+ // Does s have metadata?
107
+ if (Object.prototype.hasOwnProperty.call(p, 'metadata')) {
108
+ // Set metadata.
109
+ newP.metadata = p.metadata;
110
+ }
111
+
112
+ // Does s have text?
113
+ if (Object.prototype.hasOwnProperty.call(p, 'text')) {
114
+ // Set text.
115
+ newP.text = p.text;
116
+ }
117
+
118
+ // Add the new passage.
119
+ s.addPassage(newP);
120
+ });
121
+ }
122
+ }
123
+
124
+ // Return Story.
125
+ return s;
126
+ }
127
+
128
+ export { parse };