db-modeling-markdown 2.0.1 → 2.1.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 (118) hide show
  1. package/README.md +168 -164
  2. package/dist/dialects/core/dbImportProvider.d.ts +5 -5
  3. package/dist/dialects/core/dbImportProvider.js +6 -6
  4. package/dist/dialects/core/dbProvider.d.ts +34 -34
  5. package/dist/dialects/core/dbProvider.js +119 -119
  6. package/dist/dialects/core/dbProvider.js.map +1 -1
  7. package/dist/dialects/core/dbUtils.d.ts +35 -35
  8. package/dist/dialects/core/dbUtils.js +157 -158
  9. package/dist/dialects/core/dbUtils.js.map +1 -1
  10. package/dist/dialects/core/providerFactory.d.ts +7 -7
  11. package/dist/dialects/core/providerFactory.js +63 -63
  12. package/dist/dialects/core/providerFactory.js.map +1 -1
  13. package/dist/dialects/db2/db2Provider.d.ts +19 -19
  14. package/dist/dialects/db2/db2Provider.js +185 -186
  15. package/dist/dialects/db2/db2Provider.js.map +1 -1
  16. package/dist/dialects/mariadb/mariaDbImportProvider.d.ts +19 -19
  17. package/dist/dialects/mariadb/mariaDbImportProvider.js +260 -253
  18. package/dist/dialects/mariadb/mariaDbImportProvider.js.map +1 -1
  19. package/dist/dialects/mariadb/mariaDbProvider.d.ts +18 -18
  20. package/dist/dialects/mariadb/mariaDbProvider.js +152 -153
  21. package/dist/dialects/mariadb/mariaDbProvider.js.map +1 -1
  22. package/dist/dialects/mariadb/mariaDbUtil.d.ts +6 -6
  23. package/dist/dialects/mariadb/mariaDbUtil.js +22 -22
  24. package/dist/dialects/mariadb/mariaDbUtil.js.map +1 -1
  25. package/dist/dialects/mssql/msSqlProvider.d.ts +21 -21
  26. package/dist/dialects/mssql/msSqlProvider.js +264 -265
  27. package/dist/dialects/mssql/msSqlProvider.js.map +1 -1
  28. package/dist/dialects/mysql/mySqlImportProvider.d.ts +3 -3
  29. package/dist/dialects/mysql/mySqlImportProvider.js +7 -7
  30. package/dist/dialects/mysql/mySqlProvider.d.ts +3 -3
  31. package/dist/dialects/mysql/mySqlProvider.js +7 -7
  32. package/dist/dialects/oracle/oracleProvider.d.ts +35 -35
  33. package/dist/dialects/oracle/oracleProvider.js +327 -327
  34. package/dist/dialects/oracle/oracleProvider.js.map +1 -1
  35. package/dist/dialects/postgresql/postgreSqlProvider.d.ts +19 -19
  36. package/dist/dialects/postgresql/postgreSqlProvider.js +172 -173
  37. package/dist/dialects/postgresql/postgreSqlProvider.js.map +1 -1
  38. package/dist/dialects/sqlite/sqliteSqlProvider.d.ts +23 -23
  39. package/dist/dialects/sqlite/sqliteSqlProvider.js +147 -148
  40. package/dist/dialects/sqlite/sqliteSqlProvider.js.map +1 -1
  41. package/dist/index.d.ts +10 -10
  42. package/dist/index.js +9 -9
  43. package/dist/lib/code-flow/codeFlow.d.ts +37 -37
  44. package/dist/lib/code-flow/codeFlow.js +61 -61
  45. package/dist/lib/markdown-object/markdownModel.d.ts +14 -14
  46. package/dist/lib/markdown-object/markdownModel.js +12 -12
  47. package/dist/lib/markdown-object/markdownModel.js.map +1 -1
  48. package/dist/lib/markdown-object/markdownReader.d.ts +39 -39
  49. package/dist/lib/markdown-object/markdownReader.js +261 -258
  50. package/dist/lib/markdown-object/markdownReader.js.map +1 -1
  51. package/dist/lib/markdown-object/markdownWriter.d.ts +36 -36
  52. package/dist/lib/markdown-object/markdownWriter.js +224 -223
  53. package/dist/lib/markdown-object/markdownWriter.js.map +1 -1
  54. package/dist/lib/markdown-object/readerContext.d.ts +12 -12
  55. package/dist/lib/markdown-object/readerContext.js +48 -48
  56. package/dist/lib/markdown-object/readerContext.js.map +1 -1
  57. package/dist/lib/utils/fileHelper.d.ts +14 -15
  58. package/dist/lib/utils/fileHelper.js +58 -57
  59. package/dist/lib/utils/fileHelper.js.map +1 -1
  60. package/dist/lib/utils/logger.d.ts +9 -9
  61. package/dist/lib/utils/logger.js +60 -60
  62. package/dist/lib/utils/logger.js.map +1 -1
  63. package/dist/lib/utils/markdownParser.d.ts +22 -22
  64. package/dist/lib/utils/markdownParser.js +99 -95
  65. package/dist/lib/utils/markdownParser.js.map +1 -1
  66. package/dist/lib/utils/sqlHelper.d.ts +3 -3
  67. package/dist/lib/utils/sqlHelper.js +23 -23
  68. package/dist/lib/utils/sqlHelper.js.map +1 -1
  69. package/dist/lib/utils/systemHelper.d.ts +2 -2
  70. package/dist/lib/utils/systemHelper.js +6 -6
  71. package/dist/lib/utils/textFileReader.d.ts +25 -25
  72. package/dist/lib/utils/textFileReader.js +57 -57
  73. package/dist/lib/utils/textFileReader.js.map +1 -1
  74. package/dist/lib/utils/textHelper.d.ts +21 -21
  75. package/dist/lib/utils/textHelper.js +75 -71
  76. package/dist/lib/utils/textHelper.js.map +1 -1
  77. package/dist/models/databaseTypes.d.ts +33 -33
  78. package/dist/models/databaseTypes.js +37 -37
  79. package/dist/models/databaseTypes.js.map +1 -1
  80. package/dist/models/dbColumn.d.ts +43 -43
  81. package/dist/models/dbColumn.js +2 -2
  82. package/dist/models/dbDiffModel.d.ts +43 -43
  83. package/dist/models/dbDiffModel.js +2 -2
  84. package/dist/models/dbForeignKey.d.ts +33 -33
  85. package/dist/models/dbForeignKey.js +2 -2
  86. package/dist/models/dbIndex.d.ts +28 -28
  87. package/dist/models/dbIndex.js +2 -2
  88. package/dist/models/dbIndexType.d.ts +8 -8
  89. package/dist/models/dbIndexType.js +12 -12
  90. package/dist/models/dbIndexType.js.map +1 -1
  91. package/dist/models/dbModel.d.ts +10 -10
  92. package/dist/models/dbModel.js +2 -2
  93. package/dist/models/dbPrimaryKey.d.ts +16 -16
  94. package/dist/models/dbPrimaryKey.js +2 -2
  95. package/dist/models/dbTable.d.ts +49 -49
  96. package/dist/models/dbTable.js +2 -2
  97. package/dist/models/dbTableMarkdown.d.ts +35 -34
  98. package/dist/models/dbTableMarkdown.js +2 -2
  99. package/dist/resources/mariadb/procAppUpgradeDB.sql +164 -0
  100. package/dist/resources/mariadb/sql-create-table-fk.njk +10 -0
  101. package/dist/resources/mariadb/sql-create-table.njk +12 -0
  102. package/dist/resources/mariadb/sql-create-tables.njk +9 -0
  103. package/dist/resources/mariadb/sql-drop-tables.njk +10 -0
  104. package/dist/resources/mariadb/sql-drop-then-create-tables.njk +4 -0
  105. package/dist/resources/mariadb/sql-upgrade-new-table.njk +15 -0
  106. package/dist/resources/mariadb/sql-upgrade-table-fk.njk +10 -0
  107. package/dist/resources/mariadb/sql-upgrade-table.njk +41 -0
  108. package/dist/resources/mariadb/sql-upgrade-tables.njk +19 -0
  109. package/dist/services/dbOptions.d.ts +35 -35
  110. package/dist/services/dbOptions.js +17 -17
  111. package/dist/services/dbmOptions.d.ts +28 -28
  112. package/dist/services/dbmOptions.js +34 -34
  113. package/dist/services/dbmService.d.ts +87 -87
  114. package/dist/services/dbmService.js +244 -246
  115. package/dist/services/dbmService.js.map +1 -1
  116. package/package.json +29 -34
  117. package/CHANGELOG.md +0 -81
  118. package/CONTRIBUTING.md +0 -82
@@ -1,39 +1,39 @@
1
- declare type ObjectValueType = null | string | number | boolean;
2
- /**
3
- * Main functions:
4
- * read a markdown file into an object
5
- */
6
- export declare class MarkdownReader {
7
- path: string;
8
- constructor(path: string);
9
- private static createHeader;
10
- private static createListItem;
11
- private static handleHeader;
12
- private static handleList;
13
- private static handleTable;
14
- private static isArrayTable;
15
- private static mergeTableRow;
16
- static normalize(value: string, isPropertyName?: boolean): ObjectValueType;
17
- private static normalizeTableRow;
18
- private static readLine;
19
- toObject(): any;
20
- /**
21
- * convert the markdown object to the model object
22
- * @param table the markdown object
23
- * @returns the dbTable object
24
- */
25
- private static upgrade;
26
- /**
27
- * Version 1
28
- * @param table the markdown object
29
- * @returns the dbTable object
30
- */
31
- private static upgradeV1;
32
- /**
33
- * Version 2
34
- * @param table the markdown object
35
- * @returns the dbTable object
36
- */
37
- private static upgradeV2;
38
- }
39
- export {};
1
+ type ObjectValueType = null | string | number | boolean;
2
+ /**
3
+ * Main functions:
4
+ * read a markdown file into an object
5
+ */
6
+ export declare class MarkdownReader {
7
+ path: string;
8
+ constructor(path: string);
9
+ private static createHeader;
10
+ private static createListItem;
11
+ private static handleHeader;
12
+ private static handleList;
13
+ private static handleTable;
14
+ private static isArrayTable;
15
+ private static mergeTableRow;
16
+ static normalize(value: string, isPropertyName?: boolean): ObjectValueType;
17
+ private static normalizeTableRow;
18
+ private static readLine;
19
+ toObject(): any;
20
+ /**
21
+ * convert the markdown object to the model object
22
+ * @param table the markdown object
23
+ * @returns the dbTable object
24
+ */
25
+ private static upgrade;
26
+ /**
27
+ * Version 1
28
+ * @param table the markdown object
29
+ * @returns the dbTable object
30
+ */
31
+ private static upgradeV1;
32
+ /**
33
+ * Version 2
34
+ * @param table the markdown object
35
+ * @returns the dbTable object
36
+ */
37
+ private static upgradeV2;
38
+ }
39
+ export {};
@@ -1,259 +1,262 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MarkdownReader = void 0;
4
- const markdownParser_1 = require("../utils/markdownParser");
5
- const textFileReader_1 = require("../utils/textFileReader");
6
- const textHelper_1 = require("../utils/textHelper");
7
- const markdownModel_1 = require("./markdownModel");
8
- const readerContext_1 = require("./readerContext");
9
- /**
10
- * Main functions:
11
- * read a markdown file into an object
12
- */
13
- class MarkdownReader {
14
- constructor(path) {
15
- this.path = path;
16
- }
17
- static createHeader(array, context) {
18
- const element = {
19
- type: markdownModel_1.MarkdownElementType.header,
20
- level: array[1].length,
21
- name: array[2],
22
- };
23
- if (element.level <= 1) {
24
- return;
25
- }
26
- if (element.level <= context.currentLevel) {
27
- context.pop(element.level - 1);
28
- }
29
- let propertyName = MarkdownReader.normalize(element.name, true);
30
- // case: the property is an array
31
- if (propertyName.endsWith('[]')) {
32
- propertyName = propertyName.substring(0, propertyName.length - 2).trim();
33
- }
34
- // generate the property
35
- context.push(propertyName, null);
36
- }
37
- static createListItem(array, context) {
38
- const element = {
39
- type: markdownModel_1.MarkdownElementType.listItem,
40
- level: 0,
41
- name: array[1],
42
- value: array[2],
43
- };
44
- // TODO: case: multiple lines value
45
- context.setCurrentProperty(MarkdownReader.normalize(element.name, true), MarkdownReader.normalize(element.value));
46
- }
47
- static handleHeader(line, reader, context) {
48
- if (!line) {
49
- return true;
50
- }
51
- const result = markdownParser_1.MarkdownParser.matchHeader(line);
52
- if (result) {
53
- MarkdownReader.createHeader(result, context);
54
- return true;
55
- }
56
- return false;
57
- }
58
- static handleList(line, reader, context) {
59
- if (!line) {
60
- return true;
61
- }
62
- const result = markdownParser_1.MarkdownParser.matchListItem(line);
63
- if (result) {
64
- MarkdownReader.createListItem(result, context);
65
- return true;
66
- }
67
- return false;
68
- }
69
- static handleTable(line, reader, context) {
70
- if (!line) {
71
- // case: end of file
72
- return true;
73
- }
74
- let isValid = markdownParser_1.MarkdownParser.testTableHeader(line);
75
- if (!isValid) {
76
- return false;
77
- }
78
- // check if the next line is table line row
79
- const headerLine = line;
80
- let dataLine = reader.peak();
81
- if (!dataLine) {
82
- // case: end of file
83
- return true;
84
- }
85
- isValid = markdownParser_1.MarkdownParser.testTableLine(dataLine);
86
- if (!isValid) {
87
- return false;
88
- }
89
- reader.move();
90
- context.current = [];
91
- const headers = MarkdownReader.normalizeTableRow(headerLine, true);
92
- const isArray = MarkdownReader.isArrayTable(headers);
93
- // now: it is a table, read table rows
94
- while (reader.hasMore(1)) {
95
- dataLine = reader.peak().trim();
96
- if (!dataLine) {
97
- // case: end of file
98
- return true;
99
- }
100
- isValid = markdownParser_1.MarkdownParser.testTableRow(dataLine);
101
- if (!isValid) {
102
- // true: indicate we use these read lines
103
- return true;
104
- }
105
- reader.move();
106
- // read a data row
107
- const cells = MarkdownReader.normalizeTableRow(dataLine);
108
- if (isArray) {
109
- if (!context.current) {
110
- context.current = [];
111
- }
112
- context.current.push(cells);
113
- }
114
- else {
115
- // data row -> data row object
116
- const rowObject = {};
117
- headers.some((header, index) => {
118
- if (index >= cells.length) {
119
- return true;
120
- }
121
- rowObject[header] = cells[index];
122
- return false;
123
- });
124
- // put into the result
125
- if (!MarkdownReader.mergeTableRow(headers, rowObject, context)) {
126
- context.current.push(rowObject);
127
- }
128
- }
129
- }
130
- return false;
131
- }
132
- static isArrayTable(headers) {
133
- for (let i = 0; i < headers.length; i += 1) {
134
- if (headers[i].length > 0) {
135
- return false;
136
- }
137
- }
138
- return true;
139
- }
140
- static mergeTableRow(headers, rowObject, context) {
141
- if (context.current.length === 0 || rowObject[headers[0]] !== '' || rowObject[headers[1]] !== '') {
142
- return false;
143
- }
144
- const lastObject = context.current[context.current.length - 1];
145
- headers.forEach((header) => {
146
- const prop = rowObject[header];
147
- if (prop) {
148
- // TODO: merge with \r\n
149
- lastObject[header] = `${lastObject[header]} ${prop}`;
150
- }
151
- });
152
- return true;
153
- }
154
- static normalize(value, isPropertyName = false) {
155
- if (!value) {
156
- return value;
157
- }
158
- let newValue = textHelper_1.TextHelper.decodeMarkdown(value.trim());
159
- // case: inline code
160
- if (newValue.length >= 2 && newValue[0] === '`' && newValue[newValue.length - 1] === '`') {
161
- const blockValue = newValue.substring(1, newValue.length - 1);
162
- if (!isPropertyName) {
163
- if (blockValue.toLocaleLowerCase() === 'yes' || blockValue.toLocaleLowerCase() === 'true') {
164
- newValue = true;
165
- }
166
- else if (blockValue.toLocaleLowerCase() === 'no' || blockValue.toLocaleLowerCase() === 'false') {
167
- newValue = false;
168
- }
169
- else if (blockValue.toLocaleLowerCase() === 'null') {
170
- newValue = null;
171
- }
172
- else {
173
- const testValue = parseFloat(blockValue);
174
- // eslint-disable-next-line no-restricted-globals
175
- if (!isNaN(testValue)) {
176
- newValue = testValue;
177
- }
178
- }
179
- }
180
- else {
181
- newValue = newValue.substring(1, newValue.length - 1);
182
- }
183
- }
184
- // case: produce a good property name
185
- if (isPropertyName && typeof newValue === 'string' && newValue.length > 0) {
186
- // case: remove spaces
187
- newValue = newValue.replace(' ', '');
188
- // case: camelCase
189
- newValue = newValue[0].toLocaleLowerCase() + newValue.substr(1, newValue.length);
190
- }
191
- return newValue;
192
- }
193
- static normalizeTableRow(line, isName = false) {
194
- const values = markdownParser_1.MarkdownParser.splitTableRowToCells(line);
195
- return values.map((value) => MarkdownReader.normalize(value, isName));
196
- }
197
- static readLine(line, reader, context) {
198
- if (MarkdownReader.handleHeader(line, reader, context)) {
199
- return;
200
- }
201
- if (MarkdownReader.handleList(line, reader, context)) {
202
- return;
203
- }
204
- MarkdownReader.handleTable(line, reader, context);
205
- }
206
- toObject() {
207
- const reader = new textFileReader_1.TextFileReader();
208
- const context = new readerContext_1.ReadContext();
209
- reader.open(this.path);
210
- while (reader.hasMore()) {
211
- MarkdownReader.readLine(reader.read().trim(), reader, context);
212
- }
213
- return MarkdownReader.upgrade(context.root);
214
- }
215
- /**
216
- * convert the markdown object to the model object
217
- * @param table the markdown object
218
- * @returns the dbTable object
219
- */
220
- static upgrade(table) {
221
- if (table.name) {
222
- return MarkdownReader.upgradeV1(table);
223
- }
224
- return MarkdownReader.upgradeV2(table);
225
- }
226
- /**
227
- * Version 1
228
- * @param table the markdown object
229
- * @returns the dbTable object
230
- */
231
- static upgradeV1(table) {
232
- return {
233
- name: table.name,
234
- comment: table.comment,
235
- primaryKey: table.primaryKey,
236
- indexes: table.indexes || [],
237
- foreignKeys: table.foreignKeys || [],
238
- columns: table.columns || [],
239
- };
240
- }
241
- /**
242
- * Version 2
243
- * @param table the markdown object
244
- * @returns the dbTable object
245
- */
246
- static upgradeV2(table) {
247
- const basic = table.table && table.table.length > 0 ? table.table[0] : undefined;
248
- return {
249
- name: basic?.name,
250
- comment: basic?.comment,
251
- primaryKey: table.primaryKey?.length > 0 ? table.primaryKey[0] : undefined,
252
- indexes: table.indexes || [],
253
- foreignKeys: table.foreignKeys || [],
254
- columns: table.columns || [],
255
- };
256
- }
257
- }
258
- exports.MarkdownReader = MarkdownReader;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MarkdownReader = void 0;
4
+ /* eslint-disable no-restricted-syntax */
5
+ const markdownParser_1 = require("../utils/markdownParser");
6
+ const textFileReader_1 = require("../utils/textFileReader");
7
+ const textHelper_1 = require("../utils/textHelper");
8
+ const markdownModel_1 = require("./markdownModel");
9
+ const readerContext_1 = require("./readerContext");
10
+ /**
11
+ * Main functions:
12
+ * read a markdown file into an object
13
+ */
14
+ class MarkdownReader {
15
+ constructor(path) {
16
+ this.path = path;
17
+ }
18
+ static createHeader(array, context) {
19
+ const element = {
20
+ type: markdownModel_1.MarkdownElementType.header,
21
+ level: array[1].length,
22
+ name: array[2],
23
+ };
24
+ if (element.level <= 1) {
25
+ return;
26
+ }
27
+ if (element.level <= context.currentLevel) {
28
+ context.pop(element.level - 1);
29
+ }
30
+ let propertyName = MarkdownReader.normalize(element.name, true);
31
+ // case: the property is an array
32
+ if (propertyName.endsWith('[]')) {
33
+ propertyName = propertyName.substring(0, propertyName.length - 2).trim();
34
+ }
35
+ // generate the property
36
+ context.push(propertyName, null);
37
+ }
38
+ static createListItem(array, context) {
39
+ const element = {
40
+ type: markdownModel_1.MarkdownElementType.listItem,
41
+ level: 0,
42
+ name: array[1],
43
+ value: array[2],
44
+ };
45
+ // TODO: case: multiple lines value
46
+ context.setCurrentProperty(MarkdownReader.normalize(element.name, true), MarkdownReader.normalize(element.value));
47
+ }
48
+ static handleHeader(line, reader, context) {
49
+ if (!line) {
50
+ return true;
51
+ }
52
+ const result = markdownParser_1.MarkdownParser.matchHeader(line);
53
+ if (result) {
54
+ MarkdownReader.createHeader(result, context);
55
+ return true;
56
+ }
57
+ return false;
58
+ }
59
+ static handleList(line, reader, context) {
60
+ if (!line) {
61
+ return true;
62
+ }
63
+ const result = markdownParser_1.MarkdownParser.matchListItem(line);
64
+ if (result) {
65
+ MarkdownReader.createListItem(result, context);
66
+ return true;
67
+ }
68
+ return false;
69
+ }
70
+ static handleTable(line, reader, context) {
71
+ if (!line) {
72
+ // case: end of file
73
+ return true;
74
+ }
75
+ let isValid = markdownParser_1.MarkdownParser.testTableHeader(line);
76
+ if (!isValid) {
77
+ return false;
78
+ }
79
+ // check if the next line is table line row
80
+ const headerLine = line;
81
+ let dataLine = reader.peak();
82
+ if (!dataLine) {
83
+ // case: end of file
84
+ return true;
85
+ }
86
+ isValid = markdownParser_1.MarkdownParser.testTableLine(dataLine);
87
+ if (!isValid) {
88
+ return false;
89
+ }
90
+ reader.move();
91
+ context.current = [];
92
+ const headers = MarkdownReader.normalizeTableRow(headerLine, true);
93
+ const isArray = MarkdownReader.isArrayTable(headers);
94
+ // now: it is a table, read table rows
95
+ while (reader.hasMore(1)) {
96
+ dataLine = reader.peak().trim();
97
+ if (!dataLine) {
98
+ // case: end of file
99
+ return true;
100
+ }
101
+ isValid = markdownParser_1.MarkdownParser.testTableRow(dataLine);
102
+ if (!isValid) {
103
+ // true: indicate we use these read lines
104
+ return true;
105
+ }
106
+ reader.move();
107
+ // read a data row
108
+ const cells = MarkdownReader.normalizeTableRow(dataLine);
109
+ if (isArray) {
110
+ if (!context.current) {
111
+ context.current = [];
112
+ }
113
+ context.current.push(cells);
114
+ }
115
+ else {
116
+ // data row -> data row object
117
+ const rowObject = {};
118
+ headers.some((header, index) => {
119
+ if (index >= cells.length) {
120
+ return true;
121
+ }
122
+ rowObject[header] = cells[index];
123
+ return false;
124
+ });
125
+ // put into the result
126
+ if (!MarkdownReader.mergeTableRow(headers, rowObject, context)) {
127
+ context.current.push(rowObject);
128
+ }
129
+ }
130
+ }
131
+ return false;
132
+ }
133
+ static isArrayTable(headers) {
134
+ for (const element of headers) {
135
+ if (element.length > 0) {
136
+ return false;
137
+ }
138
+ }
139
+ return true;
140
+ }
141
+ static mergeTableRow(headers, rowObject, context) {
142
+ if (context.current.length === 0 ||
143
+ rowObject[headers[0]] !== '' ||
144
+ rowObject[headers[1]] !== '') {
145
+ return false;
146
+ }
147
+ const lastObject = context.current[context.current.length - 1];
148
+ headers.forEach((header) => {
149
+ const prop = rowObject[header];
150
+ if (prop) {
151
+ // TODO: merge with \r\n
152
+ lastObject[header] = `${lastObject[header]} ${prop}`;
153
+ }
154
+ });
155
+ return true;
156
+ }
157
+ static normalize(value, isPropertyName = false) {
158
+ if (!value) {
159
+ return value;
160
+ }
161
+ let newValue = textHelper_1.TextHelper.decodeMarkdown(value.trim());
162
+ // case: inline code
163
+ if (newValue.length >= 2 && newValue[0] === '`' && newValue[newValue.length - 1] === '`') {
164
+ const blockValue = newValue.substring(1, newValue.length - 1);
165
+ if (!isPropertyName) {
166
+ const lowerValue = blockValue.toLocaleLowerCase();
167
+ if (lowerValue === 'yes' || lowerValue === 'true') {
168
+ newValue = true;
169
+ }
170
+ else if (lowerValue === 'no' || lowerValue === 'false') {
171
+ newValue = false;
172
+ }
173
+ else if (lowerValue === 'null') {
174
+ newValue = null;
175
+ }
176
+ else {
177
+ const testValue = parseFloat(blockValue);
178
+ // eslint-disable-next-line no-restricted-globals
179
+ if (!isNaN(testValue)) {
180
+ newValue = testValue;
181
+ }
182
+ }
183
+ }
184
+ else {
185
+ newValue = newValue.substring(1, newValue.length - 1);
186
+ }
187
+ }
188
+ // case: produce a good property name
189
+ if (isPropertyName && typeof newValue === 'string' && newValue.length > 0) {
190
+ // case: remove spaces
191
+ newValue = newValue.replace(' ', '');
192
+ // case: camelCase
193
+ newValue = newValue[0].toLocaleLowerCase() + newValue.substr(1, newValue.length);
194
+ }
195
+ return newValue;
196
+ }
197
+ static normalizeTableRow(line, isName = false) {
198
+ const values = markdownParser_1.MarkdownParser.splitTableRowToCells(line);
199
+ return values.map((value) => MarkdownReader.normalize(value, isName));
200
+ }
201
+ static readLine(line, reader, context) {
202
+ if (MarkdownReader.handleHeader(line, reader, context)) {
203
+ return;
204
+ }
205
+ if (MarkdownReader.handleList(line, reader, context)) {
206
+ return;
207
+ }
208
+ MarkdownReader.handleTable(line, reader, context);
209
+ }
210
+ toObject() {
211
+ const reader = new textFileReader_1.TextFileReader();
212
+ const context = new readerContext_1.ReadContext();
213
+ reader.open(this.path);
214
+ while (reader.hasMore()) {
215
+ MarkdownReader.readLine(reader.read().trim(), reader, context);
216
+ }
217
+ return MarkdownReader.upgrade(context.root);
218
+ }
219
+ /**
220
+ * convert the markdown object to the model object
221
+ * @param table the markdown object
222
+ * @returns the dbTable object
223
+ */
224
+ static upgrade(table) {
225
+ if (table.name) {
226
+ return MarkdownReader.upgradeV1(table);
227
+ }
228
+ return MarkdownReader.upgradeV2(table);
229
+ }
230
+ /**
231
+ * Version 1
232
+ * @param table the markdown object
233
+ * @returns the dbTable object
234
+ */
235
+ static upgradeV1(table) {
236
+ return {
237
+ name: table.name,
238
+ comment: table.comment,
239
+ primaryKey: table.primaryKey,
240
+ indexes: table.indexes || [],
241
+ foreignKeys: table.foreignKeys || [],
242
+ columns: table.columns || [],
243
+ };
244
+ }
245
+ /**
246
+ * Version 2
247
+ * @param table the markdown object
248
+ * @returns the dbTable object
249
+ */
250
+ static upgradeV2(table) {
251
+ const basic = table.table && table.table.length > 0 ? table.table[0] : undefined;
252
+ return {
253
+ ...basic,
254
+ primaryKey: table.primaryKey?.length > 0 ? table.primaryKey[0] : undefined,
255
+ indexes: table.indexes || [],
256
+ foreignKeys: table.foreignKeys || [],
257
+ columns: table.columns || [],
258
+ };
259
+ }
260
+ }
261
+ exports.MarkdownReader = MarkdownReader;
259
262
  //# sourceMappingURL=markdownReader.js.map