@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.
- package/README.md +37 -0
- package/dist/__tests__/events.test.d.ts +2 -0
- package/dist/__tests__/events.test.d.ts.map +1 -0
- package/dist/__tests__/events.test.js +63 -0
- package/dist/__tests__/events.test.js.map +1 -0
- package/dist/__tests__/idGenerator.test.d.ts +5 -0
- package/dist/__tests__/idGenerator.test.d.ts.map +1 -0
- package/dist/__tests__/idGenerator.test.js +98 -0
- package/dist/__tests__/idGenerator.test.js.map +1 -0
- package/dist/__tests__/platform.test.d.ts +2 -0
- package/dist/__tests__/platform.test.d.ts.map +1 -0
- package/dist/__tests__/platform.test.js +37 -0
- package/dist/__tests__/platform.test.js.map +1 -0
- package/dist/__tests__/plugin.test.d.ts +2 -0
- package/dist/__tests__/plugin.test.d.ts.map +1 -0
- package/dist/__tests__/plugin.test.js +72 -0
- package/dist/__tests__/plugin.test.js.map +1 -0
- package/dist/converters/MarkdownConverter.d.ts +15 -0
- package/dist/converters/MarkdownConverter.d.ts.map +1 -0
- package/dist/converters/MarkdownConverter.js +519 -0
- package/dist/converters/MarkdownConverter.js.map +1 -0
- package/dist/document/index.d.ts +4 -0
- package/dist/document/index.d.ts.map +1 -0
- package/dist/document/index.js +8 -0
- package/dist/document/index.js.map +1 -0
- package/dist/events/EventEmitter.d.ts +20 -0
- package/dist/events/EventEmitter.d.ts.map +1 -0
- package/dist/events/EventEmitter.js +51 -0
- package/dist/events/EventEmitter.js.map +1 -0
- package/dist/events/index.d.ts +2 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +18 -0
- package/dist/events/index.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +118 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/__tests__/parser.test.d.ts +2 -0
- package/dist/parser/__tests__/parser.test.d.ts.map +1 -0
- package/dist/parser/__tests__/parser.test.js +72 -0
- package/dist/parser/__tests__/parser.test.js.map +1 -0
- package/dist/parser/__tests__/serializer.test.d.ts +2 -0
- package/dist/parser/__tests__/serializer.test.d.ts.map +1 -0
- package/dist/parser/__tests__/serializer.test.js +60 -0
- package/dist/parser/__tests__/serializer.test.js.map +1 -0
- package/dist/parser/__tests__/tokenizer.test.d.ts +2 -0
- package/dist/parser/__tests__/tokenizer.test.d.ts.map +1 -0
- package/dist/parser/__tests__/tokenizer.test.js +76 -0
- package/dist/parser/__tests__/tokenizer.test.js.map +1 -0
- package/dist/parser/__tests__/validator.test.d.ts +2 -0
- package/dist/parser/__tests__/validator.test.d.ts.map +1 -0
- package/dist/parser/__tests__/validator.test.js +281 -0
- package/dist/parser/__tests__/validator.test.js.map +1 -0
- package/dist/parser/serializer.d.ts +28 -0
- package/dist/parser/serializer.d.ts.map +1 -0
- package/dist/parser/serializer.js +157 -0
- package/dist/parser/serializer.js.map +1 -0
- package/dist/parser/tokenizer.new.d.ts +31 -0
- package/dist/parser/tokenizer.new.d.ts.map +1 -0
- package/dist/parser/tokenizer.new.js +181 -0
- package/dist/parser/tokenizer.new.js.map +1 -0
- package/dist/parser/v3/BlockParser.d.ts +11 -0
- package/dist/parser/v3/BlockParser.d.ts.map +1 -0
- package/dist/parser/v3/BlockParser.js +93 -0
- package/dist/parser/v3/BlockParser.js.map +1 -0
- package/dist/parser/v3/DocumentParser.d.ts +8 -0
- package/dist/parser/v3/DocumentParser.d.ts.map +1 -0
- package/dist/parser/v3/DocumentParser.js +109 -0
- package/dist/parser/v3/DocumentParser.js.map +1 -0
- package/dist/parser/v3/Parser.d.ts +11 -0
- package/dist/parser/v3/Parser.d.ts.map +1 -0
- package/dist/parser/v3/Parser.js +25 -0
- package/dist/parser/v3/Parser.js.map +1 -0
- package/dist/parser/validator.d.ts +24 -0
- package/dist/parser/validator.d.ts.map +1 -0
- package/dist/parser/validator.js +177 -0
- package/dist/parser/validator.js.map +1 -0
- package/dist/platform/NullPlatformAdapter.d.ts +18 -0
- package/dist/platform/NullPlatformAdapter.d.ts.map +1 -0
- package/dist/platform/NullPlatformAdapter.js +41 -0
- package/dist/platform/NullPlatformAdapter.js.map +1 -0
- package/dist/platform/PlatformAdapter.d.ts +22 -0
- package/dist/platform/PlatformAdapter.d.ts.map +1 -0
- package/dist/platform/PlatformAdapter.js +7 -0
- package/dist/platform/PlatformAdapter.js.map +1 -0
- package/dist/platform/index.d.ts +3 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +19 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/plugin/PluginSystem.d.ts +46 -0
- package/dist/plugin/PluginSystem.d.ts.map +1 -0
- package/dist/plugin/PluginSystem.js +58 -0
- package/dist/plugin/PluginSystem.js.map +1 -0
- package/dist/plugin/index.d.ts +2 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +18 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/types/ast.d.ts +118 -0
- package/dist/types/ast.d.ts.map +1 -0
- package/dist/types/ast.js +331 -0
- package/dist/types/ast.js.map +1 -0
- package/dist/types/enums.d.ts +67 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +278 -0
- package/dist/types/enums.js.map +1 -0
- package/dist/utils/idGenerator.d.ts +34 -0
- package/dist/utils/idGenerator.d.ts.map +1 -0
- package/dist/utils/idGenerator.js +105 -0
- package/dist/utils/idGenerator.js.map +1 -0
- package/dist/version.d.ts +7 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- 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":"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"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,OAAO,WAAW,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -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
|
+
}
|