@jotx-labs/core 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 (114) hide show
  1. package/README.md +37 -0
  2. package/dist/__tests__/events.test.d.ts +2 -0
  3. package/dist/__tests__/events.test.d.ts.map +1 -0
  4. package/dist/__tests__/events.test.js +63 -0
  5. package/dist/__tests__/events.test.js.map +1 -0
  6. package/dist/__tests__/idGenerator.test.d.ts +5 -0
  7. package/dist/__tests__/idGenerator.test.d.ts.map +1 -0
  8. package/dist/__tests__/idGenerator.test.js +98 -0
  9. package/dist/__tests__/idGenerator.test.js.map +1 -0
  10. package/dist/__tests__/platform.test.d.ts +2 -0
  11. package/dist/__tests__/platform.test.d.ts.map +1 -0
  12. package/dist/__tests__/platform.test.js +37 -0
  13. package/dist/__tests__/platform.test.js.map +1 -0
  14. package/dist/__tests__/plugin.test.d.ts +2 -0
  15. package/dist/__tests__/plugin.test.d.ts.map +1 -0
  16. package/dist/__tests__/plugin.test.js +72 -0
  17. package/dist/__tests__/plugin.test.js.map +1 -0
  18. package/dist/converters/MarkdownConverter.d.ts +15 -0
  19. package/dist/converters/MarkdownConverter.d.ts.map +1 -0
  20. package/dist/converters/MarkdownConverter.js +519 -0
  21. package/dist/converters/MarkdownConverter.js.map +1 -0
  22. package/dist/document/index.d.ts +4 -0
  23. package/dist/document/index.d.ts.map +1 -0
  24. package/dist/document/index.js +8 -0
  25. package/dist/document/index.js.map +1 -0
  26. package/dist/events/EventEmitter.d.ts +20 -0
  27. package/dist/events/EventEmitter.d.ts.map +1 -0
  28. package/dist/events/EventEmitter.js +51 -0
  29. package/dist/events/EventEmitter.js.map +1 -0
  30. package/dist/events/index.d.ts +2 -0
  31. package/dist/events/index.d.ts.map +1 -0
  32. package/dist/events/index.js +18 -0
  33. package/dist/events/index.js.map +1 -0
  34. package/dist/index.d.ts +47 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +118 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/parser/__tests__/parser.test.d.ts +2 -0
  39. package/dist/parser/__tests__/parser.test.d.ts.map +1 -0
  40. package/dist/parser/__tests__/parser.test.js +72 -0
  41. package/dist/parser/__tests__/parser.test.js.map +1 -0
  42. package/dist/parser/__tests__/serializer.test.d.ts +2 -0
  43. package/dist/parser/__tests__/serializer.test.d.ts.map +1 -0
  44. package/dist/parser/__tests__/serializer.test.js +60 -0
  45. package/dist/parser/__tests__/serializer.test.js.map +1 -0
  46. package/dist/parser/__tests__/tokenizer.test.d.ts +2 -0
  47. package/dist/parser/__tests__/tokenizer.test.d.ts.map +1 -0
  48. package/dist/parser/__tests__/tokenizer.test.js +76 -0
  49. package/dist/parser/__tests__/tokenizer.test.js.map +1 -0
  50. package/dist/parser/__tests__/validator.test.d.ts +2 -0
  51. package/dist/parser/__tests__/validator.test.d.ts.map +1 -0
  52. package/dist/parser/__tests__/validator.test.js +281 -0
  53. package/dist/parser/__tests__/validator.test.js.map +1 -0
  54. package/dist/parser/serializer.d.ts +28 -0
  55. package/dist/parser/serializer.d.ts.map +1 -0
  56. package/dist/parser/serializer.js +157 -0
  57. package/dist/parser/serializer.js.map +1 -0
  58. package/dist/parser/tokenizer.new.d.ts +31 -0
  59. package/dist/parser/tokenizer.new.d.ts.map +1 -0
  60. package/dist/parser/tokenizer.new.js +181 -0
  61. package/dist/parser/tokenizer.new.js.map +1 -0
  62. package/dist/parser/v3/BlockParser.d.ts +11 -0
  63. package/dist/parser/v3/BlockParser.d.ts.map +1 -0
  64. package/dist/parser/v3/BlockParser.js +93 -0
  65. package/dist/parser/v3/BlockParser.js.map +1 -0
  66. package/dist/parser/v3/DocumentParser.d.ts +8 -0
  67. package/dist/parser/v3/DocumentParser.d.ts.map +1 -0
  68. package/dist/parser/v3/DocumentParser.js +109 -0
  69. package/dist/parser/v3/DocumentParser.js.map +1 -0
  70. package/dist/parser/v3/Parser.d.ts +11 -0
  71. package/dist/parser/v3/Parser.d.ts.map +1 -0
  72. package/dist/parser/v3/Parser.js +25 -0
  73. package/dist/parser/v3/Parser.js.map +1 -0
  74. package/dist/parser/validator.d.ts +24 -0
  75. package/dist/parser/validator.d.ts.map +1 -0
  76. package/dist/parser/validator.js +177 -0
  77. package/dist/parser/validator.js.map +1 -0
  78. package/dist/platform/NullPlatformAdapter.d.ts +18 -0
  79. package/dist/platform/NullPlatformAdapter.d.ts.map +1 -0
  80. package/dist/platform/NullPlatformAdapter.js +41 -0
  81. package/dist/platform/NullPlatformAdapter.js.map +1 -0
  82. package/dist/platform/PlatformAdapter.d.ts +22 -0
  83. package/dist/platform/PlatformAdapter.d.ts.map +1 -0
  84. package/dist/platform/PlatformAdapter.js +7 -0
  85. package/dist/platform/PlatformAdapter.js.map +1 -0
  86. package/dist/platform/index.d.ts +3 -0
  87. package/dist/platform/index.d.ts.map +1 -0
  88. package/dist/platform/index.js +19 -0
  89. package/dist/platform/index.js.map +1 -0
  90. package/dist/plugin/PluginSystem.d.ts +46 -0
  91. package/dist/plugin/PluginSystem.d.ts.map +1 -0
  92. package/dist/plugin/PluginSystem.js +58 -0
  93. package/dist/plugin/PluginSystem.js.map +1 -0
  94. package/dist/plugin/index.d.ts +2 -0
  95. package/dist/plugin/index.d.ts.map +1 -0
  96. package/dist/plugin/index.js +18 -0
  97. package/dist/plugin/index.js.map +1 -0
  98. package/dist/types/ast.d.ts +118 -0
  99. package/dist/types/ast.d.ts.map +1 -0
  100. package/dist/types/ast.js +331 -0
  101. package/dist/types/ast.js.map +1 -0
  102. package/dist/types/enums.d.ts +67 -0
  103. package/dist/types/enums.d.ts.map +1 -0
  104. package/dist/types/enums.js +278 -0
  105. package/dist/types/enums.js.map +1 -0
  106. package/dist/utils/idGenerator.d.ts +34 -0
  107. package/dist/utils/idGenerator.d.ts.map +1 -0
  108. package/dist/utils/idGenerator.js +105 -0
  109. package/dist/utils/idGenerator.js.map +1 -0
  110. package/dist/version.d.ts +7 -0
  111. package/dist/version.d.ts.map +1 -0
  112. package/dist/version.js +10 -0
  113. package/dist/version.js.map +1 -0
  114. package/package.json +41 -0
@@ -0,0 +1,278 @@
1
+ "use strict";
2
+ /**
3
+ * Enum types for jotx block syntax
4
+ * All predefined keywords (no quotes in syntax)
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.VIDEO_TYPES = exports.FLOAT_POSITIONS = exports.IMAGE_ALIGNS = exports.COLORS = exports.MATH_FORMATS = exports.PROPERTY_TYPES = exports.DIVIDER_STYLES = exports.PRIORITIES = exports.LANGUAGES = exports.CALLOUT_TYPES = exports.LIST_TYPES = exports.BLOCK_TYPES = exports.DOCUMENT_SCHEMAS = exports.DOCUMENT_KINDS = exports.DOCUMENT_TYPES = void 0;
8
+ exports.isValidDocumentType = isValidDocumentType;
9
+ exports.isValidDocumentKind = isValidDocumentKind;
10
+ exports.isBlockAllowedInDocument = isBlockAllowedInDocument;
11
+ exports.getAllowedBlocks = getAllowedBlocks;
12
+ exports.isValidBlockType = isValidBlockType;
13
+ exports.isValidListType = isValidListType;
14
+ exports.isValidCalloutType = isValidCalloutType;
15
+ exports.isValidLanguage = isValidLanguage;
16
+ exports.isValidPriority = isValidPriority;
17
+ exports.isValidDividerStyle = isValidDividerStyle;
18
+ exports.isValidPropertyType = isValidPropertyType;
19
+ exports.isValidMathFormat = isValidMathFormat;
20
+ exports.isValidColor = isValidColor;
21
+ exports.isValidImageAlign = isValidImageAlign;
22
+ exports.isValidFloatPosition = isValidFloatPosition;
23
+ exports.isValidVideoType = isValidVideoType;
24
+ exports.isEnumProperty = isEnumProperty;
25
+ exports.validateEnumValue = validateEnumValue;
26
+ exports.DOCUMENT_TYPES = [
27
+ 'jotx' // .jot files (V3 syntax)
28
+ ];
29
+ function isValidDocumentType(type) {
30
+ return exports.DOCUMENT_TYPES.includes(type);
31
+ }
32
+ exports.DOCUMENT_KINDS = [
33
+ 'page',
34
+ 'article',
35
+ 'documentation',
36
+ 'report',
37
+ 'specification',
38
+ 'dashboard',
39
+ 'roadmap',
40
+ 'brainstorm',
41
+ 'journal',
42
+ 'meeting',
43
+ 'tasklist'
44
+ ];
45
+ function isValidDocumentKind(kind) {
46
+ return exports.DOCUMENT_KINDS.includes(kind);
47
+ }
48
+ // ============================================================================
49
+ // DOCUMENT TYPE SCHEMAS (Allowed blocks per document type)
50
+ // ============================================================================
51
+ /**
52
+ * Defines which blocks are allowed in each document type
53
+ */
54
+ exports.DOCUMENT_SCHEMAS = {
55
+ // .jot files with V3 syntax - all blocks allowed
56
+ jotx: [
57
+ 'heading', 'paragraph', 'quote',
58
+ 'list', 'listitem', 'checklist', 'taskitem', 'code', 'codereference', 'math', 'image', 'floatimage', 'video',
59
+ 'callout', 'section', 'table', 'properties', 'divider',
60
+ 'link', 'attach',
61
+ 'mermaid', 'chart', 'datetime', 'toggle', 'linkcard',
62
+ 'custom',
63
+ 'jotxlink', 'blockref',
64
+ // Table parts
65
+ 'row', 'cell', 'header'
66
+ ]
67
+ };
68
+ /**
69
+ * Check if a block type is allowed in a document type
70
+ */
71
+ function isBlockAllowedInDocument(blockType, documentType) {
72
+ const schema = exports.DOCUMENT_SCHEMAS[documentType];
73
+ if (!schema) {
74
+ // If document type is unknown, allow all blocks (be permissive)
75
+ return true;
76
+ }
77
+ return schema.includes(blockType);
78
+ }
79
+ /**
80
+ * Get all allowed blocks for a document type
81
+ */
82
+ function getAllowedBlocks(documentType) {
83
+ return exports.DOCUMENT_SCHEMAS[documentType];
84
+ }
85
+ exports.BLOCK_TYPES = [
86
+ 'heading',
87
+ 'paragraph',
88
+ 'quote',
89
+ 'list',
90
+ 'checklist',
91
+ 'code',
92
+ 'math',
93
+ 'image',
94
+ 'floatimage',
95
+ 'video',
96
+ 'codereference',
97
+ 'callout',
98
+ 'section',
99
+ 'table',
100
+ 'properties',
101
+ 'divider',
102
+ 'link',
103
+ 'attach', // Renamed from 'file'
104
+ 'mermaid',
105
+ 'chart',
106
+ 'datetime',
107
+ 'toggle',
108
+ 'linkcard',
109
+ 'custom',
110
+ 'jotxlink',
111
+ 'blockref',
112
+ 'listitem',
113
+ 'taskitem',
114
+ 'row',
115
+ 'cell',
116
+ 'header'
117
+ ];
118
+ function isValidBlockType(type) {
119
+ return exports.BLOCK_TYPES.includes(type);
120
+ }
121
+ exports.LIST_TYPES = ['bullet', 'bulleted', 'numbered'];
122
+ function isValidListType(type) {
123
+ return exports.LIST_TYPES.includes(type);
124
+ }
125
+ exports.CALLOUT_TYPES = [
126
+ 'info',
127
+ 'success',
128
+ 'warning',
129
+ 'error',
130
+ 'note'
131
+ ];
132
+ function isValidCalloutType(type) {
133
+ return exports.CALLOUT_TYPES.includes(type);
134
+ }
135
+ exports.LANGUAGES = [
136
+ 'typescript',
137
+ 'javascript',
138
+ 'python',
139
+ 'java',
140
+ 'c',
141
+ 'cpp',
142
+ 'csharp',
143
+ 'go',
144
+ 'rust',
145
+ 'html',
146
+ 'css',
147
+ 'scss',
148
+ 'json',
149
+ 'yaml',
150
+ 'xml',
151
+ 'markdown',
152
+ 'sql',
153
+ 'bash',
154
+ 'shell',
155
+ 'powershell',
156
+ 'dockerfile',
157
+ 'plain',
158
+ 'text'
159
+ ];
160
+ function isValidLanguage(lang) {
161
+ return exports.LANGUAGES.includes(lang);
162
+ }
163
+ exports.PRIORITIES = [
164
+ 'low',
165
+ 'medium',
166
+ 'high',
167
+ 'critical'
168
+ ];
169
+ function isValidPriority(priority) {
170
+ return exports.PRIORITIES.includes(priority);
171
+ }
172
+ exports.DIVIDER_STYLES = [
173
+ 'solid',
174
+ 'dashed',
175
+ 'dotted'
176
+ ];
177
+ function isValidDividerStyle(style) {
178
+ return exports.DIVIDER_STYLES.includes(style);
179
+ }
180
+ exports.PROPERTY_TYPES = [
181
+ 'text',
182
+ 'number',
183
+ 'select',
184
+ 'date',
185
+ 'checkbox',
186
+ 'url',
187
+ 'email'
188
+ ];
189
+ function isValidPropertyType(type) {
190
+ return exports.PROPERTY_TYPES.includes(type);
191
+ }
192
+ exports.MATH_FORMATS = ['latex', 'markdown'];
193
+ function isValidMathFormat(format) {
194
+ return exports.MATH_FORMATS.includes(format);
195
+ }
196
+ exports.COLORS = [
197
+ 'blue',
198
+ 'green',
199
+ 'yellow',
200
+ 'red',
201
+ 'purple',
202
+ 'pink',
203
+ 'gray',
204
+ 'orange'
205
+ ];
206
+ function isValidColor(color) {
207
+ return exports.COLORS.includes(color);
208
+ }
209
+ exports.IMAGE_ALIGNS = [
210
+ 'left',
211
+ 'center',
212
+ 'right',
213
+ 'full'
214
+ ];
215
+ function isValidImageAlign(align) {
216
+ return exports.IMAGE_ALIGNS.includes(align);
217
+ }
218
+ exports.FLOAT_POSITIONS = [
219
+ 'left',
220
+ 'right'
221
+ ];
222
+ function isValidFloatPosition(float) {
223
+ return exports.FLOAT_POSITIONS.includes(float);
224
+ }
225
+ exports.VIDEO_TYPES = [
226
+ 'youtube',
227
+ 'local'
228
+ ];
229
+ function isValidVideoType(type) {
230
+ return exports.VIDEO_TYPES.includes(type);
231
+ }
232
+ // ============================================================================
233
+ // ENUM DETECTION HELPER
234
+ // ============================================================================
235
+ /**
236
+ * Check if a property name expects an enum value (no quotes)
237
+ */
238
+ function isEnumProperty(propertyName) {
239
+ const enumProperties = [
240
+ 'type',
241
+ 'language',
242
+ 'priority',
243
+ 'style',
244
+ 'format',
245
+ 'checked',
246
+ 'collapsed',
247
+ 'locked',
248
+ 'hidden',
249
+ 'preview'
250
+ ];
251
+ return enumProperties.includes(propertyName);
252
+ }
253
+ /**
254
+ * Validate enum value for a given property
255
+ */
256
+ function validateEnumValue(propertyName, value) {
257
+ switch (propertyName) {
258
+ case 'type':
259
+ return isValidListType(value) || isValidCalloutType(value) || isValidPropertyType(value) || isValidDocumentKind(value);
260
+ case 'language':
261
+ return isValidLanguage(value);
262
+ case 'priority':
263
+ return isValidPriority(value);
264
+ case 'style':
265
+ return isValidDividerStyle(value);
266
+ case 'format':
267
+ return isValidMathFormat(value);
268
+ case 'checked':
269
+ case 'collapsed':
270
+ case 'locked':
271
+ case 'hidden':
272
+ case 'preview':
273
+ return value === 'true' || value === 'false';
274
+ default:
275
+ return false;
276
+ }
277
+ }
278
+ //# sourceMappingURL=enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/types/enums.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAYH,kDAEC;AA8BD,kDAEC;AA2BD,4DAUC;AAKD,4CAEC;AAmFD,4CAEC;AAaD,0CAEC;AAaD,gDAEC;AAsDD,0CAEC;AAYD,0CAEC;AAWD,kDAEC;AAeD,kDAEC;AAOD,8CAEC;AAgBD,oCAEC;AAYD,8CAEC;AAUD,oDAEC;AAUD,4CAEC;AASD,wCAcC;AAKD,8CAqBC;AA3ZY,QAAA,cAAc,GAA4B;IACrD,MAAM,CAAO,yBAAyB;CAC9B,CAAA;AAEV,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,OAAO,sBAAc,CAAC,QAAQ,CAAC,IAAoB,CAAC,CAAA;AACtD,CAAC;AAgBY,QAAA,cAAc,GAA4B;IACrD,MAAM;IACN,SAAS;IACT,eAAe;IACf,QAAQ;IACR,eAAe;IACf,WAAW;IACX,SAAS;IACT,YAAY;IACZ,SAAS;IACT,SAAS;IACT,UAAU;CACF,CAAA;AAEV,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,OAAO,sBAAc,CAAC,QAAQ,CAAC,IAAoB,CAAC,CAAA;AACtD,CAAC;AAED,+EAA+E;AAC/E,2DAA2D;AAC3D,+EAA+E;AAE/E;;GAEG;AACU,QAAA,gBAAgB,GAA+C;IAC1E,iDAAiD;IACjD,IAAI,EAAE;QACJ,SAAS,EAAE,WAAW,EAAE,OAAO;QAC/B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO;QAC5G,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS;QACtD,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU;QACpD,QAAQ;QACR,UAAU,EAAE,UAAU;QACtB,cAAc;QACd,KAAK,EAAE,MAAM,EAAE,QAAQ;KACf;CACX,CAAA;AAED;;GAEG;AACH,SAAgB,wBAAwB,CACtC,SAAoB,EACpB,YAA0B;IAE1B,MAAM,MAAM,GAAG,wBAAgB,CAAC,YAAY,CAAC,CAAA;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,gEAAgE;QAChE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AACnC,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,YAA0B;IACzD,OAAO,wBAAgB,CAAC,YAAY,CAAC,CAAA;AACvC,CAAC;AAiDY,QAAA,WAAW,GAAyB;IAC/C,SAAS;IACT,WAAW;IACX,OAAO;IACP,MAAM;IACN,WAAW;IACX,MAAM;IACN,MAAM;IACN,OAAO;IACP,YAAY;IACZ,OAAO;IACP,eAAe;IACf,SAAS;IACT,SAAS;IACT,OAAO;IACP,YAAY;IACZ,SAAS;IACT,MAAM;IACN,QAAQ,EAAG,sBAAsB;IACjC,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,KAAK;IACL,MAAM;IACN,QAAQ;CACA,CAAA;AAEV,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,OAAO,mBAAW,CAAC,QAAQ,CAAC,IAAiB,CAAC,CAAA;AAChD,CAAC;AAWY,QAAA,UAAU,GAAwB,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAU,CAAA;AAE1F,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,kBAAU,CAAC,QAAQ,CAAC,IAAgB,CAAC,CAAA;AAC9C,CAAC;AAKY,QAAA,aAAa,GAA2B;IACnD,MAAM;IACN,SAAS;IACT,SAAS;IACT,OAAO;IACP,MAAM;CACE,CAAA;AAEV,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,OAAO,qBAAa,CAAC,QAAQ,CAAC,IAAmB,CAAC,CAAA;AACpD,CAAC;AA4BY,QAAA,SAAS,GAAwB;IAC5C,YAAY;IACZ,YAAY;IACZ,QAAQ;IACR,MAAM;IACN,GAAG;IACH,KAAK;IACL,QAAQ;IACR,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,UAAU;IACV,KAAK;IACL,MAAM;IACN,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,OAAO;IACP,MAAM;CACE,CAAA;AAEV,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,iBAAS,CAAC,QAAQ,CAAC,IAAgB,CAAC,CAAA;AAC7C,CAAC;AAKY,QAAA,UAAU,GAAwB;IAC7C,KAAK;IACL,QAAQ;IACR,MAAM;IACN,UAAU;CACF,CAAA;AAEV,SAAgB,eAAe,CAAC,QAAgB;IAC9C,OAAO,kBAAU,CAAC,QAAQ,CAAC,QAAoB,CAAC,CAAA;AAClD,CAAC;AAKY,QAAA,cAAc,GAA4B;IACrD,OAAO;IACP,QAAQ;IACR,QAAQ;CACA,CAAA;AAEV,SAAgB,mBAAmB,CAAC,KAAa;IAC/C,OAAO,sBAAc,CAAC,QAAQ,CAAC,KAAqB,CAAC,CAAA;AACvD,CAAC;AAKY,QAAA,cAAc,GAA4B;IACrD,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,UAAU;IACV,KAAK;IACL,OAAO;CACC,CAAA;AAEV,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,OAAO,sBAAc,CAAC,QAAQ,CAAC,IAAoB,CAAC,CAAA;AACtD,CAAC;AAKY,QAAA,YAAY,GAA0B,CAAC,OAAO,EAAE,UAAU,CAAU,CAAA;AAEjF,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,OAAO,oBAAY,CAAC,QAAQ,CAAC,MAAoB,CAAC,CAAA;AACpD,CAAC;AAKY,QAAA,MAAM,GAAqB;IACtC,MAAM;IACN,OAAO;IACP,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,MAAM;IACN,MAAM;IACN,QAAQ;CACA,CAAA;AAEV,SAAgB,YAAY,CAAC,KAAa;IACxC,OAAO,cAAM,CAAC,QAAQ,CAAC,KAAc,CAAC,CAAA;AACxC,CAAC;AAKY,QAAA,YAAY,GAA0B;IACjD,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;CACE,CAAA;AAEV,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,OAAO,oBAAY,CAAC,QAAQ,CAAC,KAAmB,CAAC,CAAA;AACnD,CAAC;AAKY,QAAA,eAAe,GAA6B;IACvD,MAAM;IACN,OAAO;CACC,CAAA;AAEV,SAAgB,oBAAoB,CAAC,KAAa;IAChD,OAAO,uBAAe,CAAC,QAAQ,CAAC,KAAsB,CAAC,CAAA;AACzD,CAAC;AAKY,QAAA,WAAW,GAAyB;IAC/C,SAAS;IACT,OAAO;CACC,CAAA;AAEV,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,OAAO,mBAAW,CAAC,QAAQ,CAAC,IAAiB,CAAC,CAAA;AAChD,CAAC;AAED,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;GAEG;AACH,SAAgB,cAAc,CAAC,YAAoB;IACjD,MAAM,cAAc,GAAG;QACrB,MAAM;QACN,UAAU;QACV,UAAU;QACV,OAAO;QACP,QAAQ;QACR,SAAS;QACT,WAAW;QACX,QAAQ;QACR,QAAQ;QACR,SAAS;KACV,CAAA;IACD,OAAO,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;AAC9C,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,YAAoB,EAAE,KAAa;IACnE,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAA;QACxH,KAAK,UAAU;YACb,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;QAC/B,KAAK,UAAU;YACb,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;QAC/B,KAAK,OAAO;YACV,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAA;QACnC,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACjC,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,CAAA;QAC9C;YACE,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Block ID Generator - Short UUIDs for global uniqueness
3
+ *
4
+ * Generates 8-character lowercase alphanumeric IDs for blocks.
5
+ * Format: [0-9a-z]{8}
6
+ * Examples: "xk4h2p9d", "m3n8q7wz", "p2b5k9tx"
7
+ *
8
+ * Collision probability: ~1 in 2.8 trillion
9
+ * Safe for millions of blocks across thousands of documents
10
+ */
11
+ /**
12
+ * Generate a short, globally unique ID for blocks
13
+ * Uses crypto.getRandomValues for secure random generation
14
+ */
15
+ export declare function generateBlockId(): string;
16
+ /**
17
+ * Validate if a string is a valid block ID
18
+ * Accepts both new format (8-char alphanumeric) and legacy formats
19
+ */
20
+ export declare function isValidBlockId(id: string): boolean;
21
+ /**
22
+ * Generate multiple unique IDs at once
23
+ * Ensures no duplicates in the returned array
24
+ */
25
+ export declare function generateBlockIds(count: number): string[];
26
+ /**
27
+ * Check if an ID is in the new short UUID format
28
+ */
29
+ export declare function isShortUUID(id: string): boolean;
30
+ /**
31
+ * Check if an ID is in legacy sequential format (block_N, item_N, etc.)
32
+ */
33
+ export declare function isLegacySequentialId(id: string): boolean;
34
+ //# sourceMappingURL=idGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/idGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CA2BxC;AAcD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAalD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAMxD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAExD"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * Block ID Generator - Short UUIDs for global uniqueness
4
+ *
5
+ * Generates 8-character lowercase alphanumeric IDs for blocks.
6
+ * Format: [0-9a-z]{8}
7
+ * Examples: "xk4h2p9d", "m3n8q7wz", "p2b5k9tx"
8
+ *
9
+ * Collision probability: ~1 in 2.8 trillion
10
+ * Safe for millions of blocks across thousands of documents
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.generateBlockId = generateBlockId;
14
+ exports.isValidBlockId = isValidBlockId;
15
+ exports.generateBlockIds = generateBlockIds;
16
+ exports.isShortUUID = isShortUUID;
17
+ exports.isLegacySequentialId = isLegacySequentialId;
18
+ const ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz';
19
+ const ID_LENGTH = 8;
20
+ /**
21
+ * Generate a short, globally unique ID for blocks
22
+ * Uses crypto.getRandomValues for secure random generation
23
+ */
24
+ function generateBlockId() {
25
+ let id = '';
26
+ // Use crypto API for better randomness (works in Node.js 15+ and all modern browsers)
27
+ if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
28
+ const bytes = crypto.getRandomValues(new Uint8Array(ID_LENGTH));
29
+ for (let i = 0; i < ID_LENGTH; i++) {
30
+ id += ALPHABET[bytes[i] % ALPHABET.length];
31
+ }
32
+ }
33
+ else if (typeof require !== 'undefined') {
34
+ // Fallback for older Node.js environments
35
+ try {
36
+ const cryptoNode = require('crypto');
37
+ const bytes = cryptoNode.randomBytes(ID_LENGTH);
38
+ for (let i = 0; i < ID_LENGTH; i++) {
39
+ id += ALPHABET[bytes[i] % ALPHABET.length];
40
+ }
41
+ }
42
+ catch {
43
+ // Final fallback to Math.random (less secure but works everywhere)
44
+ id = fallbackGenerateId();
45
+ }
46
+ }
47
+ else {
48
+ // Fallback for environments without crypto
49
+ id = fallbackGenerateId();
50
+ }
51
+ return id;
52
+ }
53
+ /**
54
+ * Fallback ID generator using Math.random
55
+ * Less cryptographically secure but works in all environments
56
+ */
57
+ function fallbackGenerateId() {
58
+ let id = '';
59
+ for (let i = 0; i < ID_LENGTH; i++) {
60
+ id += ALPHABET[Math.floor(Math.random() * ALPHABET.length)];
61
+ }
62
+ return id;
63
+ }
64
+ /**
65
+ * Validate if a string is a valid block ID
66
+ * Accepts both new format (8-char alphanumeric) and legacy formats
67
+ */
68
+ function isValidBlockId(id) {
69
+ if (!id || typeof id !== 'string')
70
+ return false;
71
+ // New format: 8 lowercase alphanumeric characters
72
+ if (/^[0-9a-z]{8}$/.test(id))
73
+ return true;
74
+ // Legacy formats (for backward compatibility):
75
+ // - Sequential: block_1, block_123
76
+ // - Descriptive: h1, h2, p1, intro, etc.
77
+ // - Any alphanumeric with underscores
78
+ if (/^[a-zA-Z0-9_]+$/.test(id))
79
+ return true;
80
+ return false;
81
+ }
82
+ /**
83
+ * Generate multiple unique IDs at once
84
+ * Ensures no duplicates in the returned array
85
+ */
86
+ function generateBlockIds(count) {
87
+ const ids = new Set();
88
+ while (ids.size < count) {
89
+ ids.add(generateBlockId());
90
+ }
91
+ return Array.from(ids);
92
+ }
93
+ /**
94
+ * Check if an ID is in the new short UUID format
95
+ */
96
+ function isShortUUID(id) {
97
+ return /^[0-9a-z]{8}$/.test(id);
98
+ }
99
+ /**
100
+ * Check if an ID is in legacy sequential format (block_N, item_N, etc.)
101
+ */
102
+ function isLegacySequentialId(id) {
103
+ return /^[a-z]+_\d+$/i.test(id);
104
+ }
105
+ //# sourceMappingURL=idGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idGenerator.js","sourceRoot":"","sources":["../../src/utils/idGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Version information for jotx
3
+ * This file is auto-generated - do not edit manually
4
+ * Run `npm run version` at the root to sync versions
5
+ */
6
+ export declare const VERSION = "1.0.14";
7
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,OAAO,WAAW,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * Version information for jotx
4
+ * This file is auto-generated - do not edit manually
5
+ * Run `npm run version` at the root to sync versions
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.VERSION = void 0;
9
+ exports.VERSION = '1.0.14';
10
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEU,QAAA,OAAO,GAAG,QAAQ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@jotx-labs/core",
3
+ "version": "2.2.0",
4
+ "files": [
5
+ "dist"
6
+ ],
7
+ "description": "jotx core - modular parser, blocks, and document system",
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "bin": {
11
+ "jotx": "./dist/cli/index.js"
12
+ },
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "test": "jest",
16
+ "test:watch": "jest --watch",
17
+ "test:coverage": "jest --coverage",
18
+ "clean": "rm -rf dist"
19
+ },
20
+ "keywords": [
21
+ "parser",
22
+ "blocks",
23
+ "documents",
24
+ "notes",
25
+ "jotx"
26
+ ],
27
+ "author": "jotx",
28
+ "license": "MIT",
29
+ "devDependencies": {
30
+ "@types/jest": "^29.5.0",
31
+ "@types/node": "^20.0.0",
32
+ "jest": "^29.5.0",
33
+ "ts-jest": "^29.1.0",
34
+ "typescript": "^5.0.0"
35
+ },
36
+ "dependencies": {
37
+ "@types/marked": "^6.0.0",
38
+ "marked": "^17.0.1",
39
+ "@jotx/registry": "file:../registry"
40
+ }
41
+ }