@tmdjr/coding-labs-contracts 0.0.1 → 0.0.2

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.
@@ -115,6 +115,134 @@ export interface paths {
115
115
  patch: operations["ExampleCrudController_unarchive"];
116
116
  trace?: never;
117
117
  };
118
+ "/labs": {
119
+ parameters: {
120
+ query?: never;
121
+ header?: never;
122
+ path?: never;
123
+ cookie?: never;
124
+ };
125
+ get: operations["LabsController_findAll"];
126
+ put?: never;
127
+ post: operations["LabsController_create"];
128
+ delete?: never;
129
+ options?: never;
130
+ head?: never;
131
+ patch?: never;
132
+ trace?: never;
133
+ };
134
+ "/labs/{labId}": {
135
+ parameters: {
136
+ query?: never;
137
+ header?: never;
138
+ path?: never;
139
+ cookie?: never;
140
+ };
141
+ get: operations["LabsController_findOne"];
142
+ put?: never;
143
+ post?: never;
144
+ delete: operations["LabsController_remove"];
145
+ options?: never;
146
+ head?: never;
147
+ patch: operations["LabsController_update"];
148
+ trace?: never;
149
+ };
150
+ "/labs/{labId}/versions/draft": {
151
+ parameters: {
152
+ query?: never;
153
+ header?: never;
154
+ path?: never;
155
+ cookie?: never;
156
+ };
157
+ get?: never;
158
+ put?: never;
159
+ post: operations["LabVersionsController_createDraft"];
160
+ delete?: never;
161
+ options?: never;
162
+ head?: never;
163
+ patch?: never;
164
+ trace?: never;
165
+ };
166
+ "/labs/{labId}/versions": {
167
+ parameters: {
168
+ query?: never;
169
+ header?: never;
170
+ path?: never;
171
+ cookie?: never;
172
+ };
173
+ get: operations["LabVersionsController_findAll"];
174
+ put?: never;
175
+ post?: never;
176
+ delete?: never;
177
+ options?: never;
178
+ head?: never;
179
+ patch?: never;
180
+ trace?: never;
181
+ };
182
+ "/labs/{labId}/versions/{versionId}": {
183
+ parameters: {
184
+ query?: never;
185
+ header?: never;
186
+ path?: never;
187
+ cookie?: never;
188
+ };
189
+ get: operations["LabVersionsController_findOne"];
190
+ put?: never;
191
+ post?: never;
192
+ delete?: never;
193
+ options?: never;
194
+ head?: never;
195
+ patch: operations["LabVersionsController_patchDraft"];
196
+ trace?: never;
197
+ };
198
+ "/labs/{labId}/versions/{versionId}/publish": {
199
+ parameters: {
200
+ query?: never;
201
+ header?: never;
202
+ path?: never;
203
+ cookie?: never;
204
+ };
205
+ get?: never;
206
+ put?: never;
207
+ post: operations["LabVersionsController_publish"];
208
+ delete?: never;
209
+ options?: never;
210
+ head?: never;
211
+ patch?: never;
212
+ trace?: never;
213
+ };
214
+ "/embeds": {
215
+ parameters: {
216
+ query?: never;
217
+ header?: never;
218
+ path?: never;
219
+ cookie?: never;
220
+ };
221
+ get: operations["LabEmbedsController_findAll"];
222
+ put?: never;
223
+ post: operations["LabEmbedsController_create"];
224
+ delete?: never;
225
+ options?: never;
226
+ head?: never;
227
+ patch?: never;
228
+ trace?: never;
229
+ };
230
+ "/embeds/{embedId}": {
231
+ parameters: {
232
+ query?: never;
233
+ header?: never;
234
+ path?: never;
235
+ cookie?: never;
236
+ };
237
+ get?: never;
238
+ put?: never;
239
+ post?: never;
240
+ delete: operations["LabEmbedsController_remove"];
241
+ options?: never;
242
+ head?: never;
243
+ patch?: never;
244
+ trace?: never;
245
+ };
118
246
  }
119
247
  export type webhooks = Record<string, never>;
120
248
  export interface components {
@@ -161,6 +289,120 @@ export interface components {
161
289
  /** Format: date-time */
162
290
  lastUpdated?: string;
163
291
  };
292
+ CreateLabDto: {
293
+ workshopId: string;
294
+ workshopDocumentGroupId?: string;
295
+ slug: string;
296
+ title: string;
297
+ summary?: string;
298
+ /** @default [] */
299
+ tags: string[];
300
+ /** @enum {string} */
301
+ difficulty?: "intro" | "easy" | "medium" | "hard";
302
+ estimatedMinutes?: number;
303
+ /**
304
+ * @default draft
305
+ * @enum {string}
306
+ */
307
+ status: "draft" | "published" | "archived";
308
+ createdBy: string;
309
+ updatedBy?: string;
310
+ };
311
+ HandsOnLabMongo: Record<string, never>;
312
+ UpdateLabDto: {
313
+ workshopId?: string;
314
+ workshopDocumentGroupId?: string;
315
+ slug?: string;
316
+ title?: string;
317
+ summary?: string;
318
+ /** @default [] */
319
+ tags: string[];
320
+ /** @enum {string} */
321
+ difficulty?: "intro" | "easy" | "medium" | "hard";
322
+ estimatedMinutes?: number;
323
+ /**
324
+ * @default draft
325
+ * @enum {string}
326
+ */
327
+ status: "draft" | "published" | "archived";
328
+ createdBy?: string;
329
+ updatedBy?: string;
330
+ };
331
+ ReferenceSolutionDto: {
332
+ code: string;
333
+ notesMarkdown?: string;
334
+ };
335
+ ComparatorDto: {
336
+ /** @enum {string} */
337
+ kind: "deepEqual" | "strictEqual" | "numberTolerance" | "stringNormalized" | "custom";
338
+ tolerance?: number;
339
+ normalizeWhitespace?: boolean;
340
+ ignoreCase?: boolean;
341
+ customComparatorId?: string;
342
+ };
343
+ LabTestCaseDto: {
344
+ _id?: string;
345
+ name: string;
346
+ /** @enum {string} */
347
+ kind: "io" | "unit";
348
+ input?: Record<string, never>;
349
+ expected?: Record<string, never>;
350
+ comparator?: components["schemas"]["ComparatorDto"];
351
+ testCode?: string;
352
+ /** @enum {string} */
353
+ framework?: "jest" | "vitest";
354
+ };
355
+ LabRunnerConfigDto: {
356
+ timeoutMs: number;
357
+ memoryMb?: number;
358
+ entryFnName?: string;
359
+ nodeVersion?: string;
360
+ };
361
+ CreateDraftVersionDto: {
362
+ /** @enum {string} */
363
+ language?: "typescript" | "javascript";
364
+ promptMarkdown?: string;
365
+ hints?: string[];
366
+ starterCode?: string;
367
+ referenceSolution?: components["schemas"]["ReferenceSolutionDto"];
368
+ sampleTests?: components["schemas"]["LabTestCaseDto"][];
369
+ hiddenTests?: components["schemas"]["LabTestCaseDto"][];
370
+ runner?: components["schemas"]["LabRunnerConfigDto"];
371
+ contentHash?: string;
372
+ createdBy: string;
373
+ };
374
+ HandsOnLabVersionMongo: Record<string, never>;
375
+ UpdateDraftVersionDto: {
376
+ /** @enum {string} */
377
+ language?: "typescript" | "javascript";
378
+ promptMarkdown?: string;
379
+ hints?: string[];
380
+ starterCode?: string;
381
+ referenceSolution?: components["schemas"]["ReferenceSolutionDto"];
382
+ sampleTests?: components["schemas"]["LabTestCaseDto"][];
383
+ hiddenTests?: components["schemas"]["LabTestCaseDto"][];
384
+ runner?: components["schemas"]["LabRunnerConfigDto"];
385
+ contentHash?: string;
386
+ createdBy?: string;
387
+ };
388
+ PublishVersionDto: {
389
+ publishedBy: string;
390
+ notes?: string;
391
+ };
392
+ CreateEmbedDto: {
393
+ labId: string;
394
+ workshopId: string;
395
+ workshopDocumentId: string;
396
+ blockId: string;
397
+ /**
398
+ * @default handsOnLab
399
+ * @enum {string}
400
+ */
401
+ blockType: "handsOnLab";
402
+ pinnedVersionId?: string;
403
+ createdBy: string;
404
+ };
405
+ HandsOnLabEmbedMongo: Record<string, never>;
164
406
  };
165
407
  responses: never;
166
408
  parameters: never;
@@ -381,4 +623,305 @@ export interface operations {
381
623
  };
382
624
  };
383
625
  };
626
+ LabsController_findAll: {
627
+ parameters: {
628
+ query?: {
629
+ workshopId?: string;
630
+ status?: string;
631
+ tag?: string;
632
+ q?: string;
633
+ limit?: number;
634
+ skip?: number;
635
+ };
636
+ header?: never;
637
+ path?: never;
638
+ cookie?: never;
639
+ };
640
+ requestBody?: never;
641
+ responses: {
642
+ 200: {
643
+ headers: {
644
+ [name: string]: unknown;
645
+ };
646
+ content: {
647
+ "application/json": components["schemas"]["HandsOnLabMongo"][];
648
+ };
649
+ };
650
+ };
651
+ };
652
+ LabsController_create: {
653
+ parameters: {
654
+ query?: never;
655
+ header?: never;
656
+ path?: never;
657
+ cookie?: never;
658
+ };
659
+ requestBody: {
660
+ content: {
661
+ "application/json": components["schemas"]["CreateLabDto"];
662
+ };
663
+ };
664
+ responses: {
665
+ 201: {
666
+ headers: {
667
+ [name: string]: unknown;
668
+ };
669
+ content: {
670
+ "application/json": components["schemas"]["HandsOnLabMongo"];
671
+ };
672
+ };
673
+ };
674
+ };
675
+ LabsController_findOne: {
676
+ parameters: {
677
+ query?: never;
678
+ header?: never;
679
+ path: {
680
+ labId: string;
681
+ };
682
+ cookie?: never;
683
+ };
684
+ requestBody?: never;
685
+ responses: {
686
+ 200: {
687
+ headers: {
688
+ [name: string]: unknown;
689
+ };
690
+ content: {
691
+ "application/json": components["schemas"]["HandsOnLabMongo"];
692
+ };
693
+ };
694
+ };
695
+ };
696
+ LabsController_remove: {
697
+ parameters: {
698
+ query: {
699
+ archivedBy: string;
700
+ };
701
+ header?: never;
702
+ path: {
703
+ labId: string;
704
+ };
705
+ cookie?: never;
706
+ };
707
+ requestBody?: never;
708
+ responses: {
709
+ 204: {
710
+ headers: {
711
+ [name: string]: unknown;
712
+ };
713
+ content?: never;
714
+ };
715
+ };
716
+ };
717
+ LabsController_update: {
718
+ parameters: {
719
+ query?: never;
720
+ header?: never;
721
+ path: {
722
+ labId: string;
723
+ };
724
+ cookie?: never;
725
+ };
726
+ requestBody: {
727
+ content: {
728
+ "application/json": components["schemas"]["UpdateLabDto"];
729
+ };
730
+ };
731
+ responses: {
732
+ 200: {
733
+ headers: {
734
+ [name: string]: unknown;
735
+ };
736
+ content: {
737
+ "application/json": components["schemas"]["HandsOnLabMongo"];
738
+ };
739
+ };
740
+ };
741
+ };
742
+ LabVersionsController_createDraft: {
743
+ parameters: {
744
+ query?: never;
745
+ header?: never;
746
+ path: {
747
+ labId: string;
748
+ };
749
+ cookie?: never;
750
+ };
751
+ requestBody: {
752
+ content: {
753
+ "application/json": components["schemas"]["CreateDraftVersionDto"];
754
+ };
755
+ };
756
+ responses: {
757
+ 201: {
758
+ headers: {
759
+ [name: string]: unknown;
760
+ };
761
+ content: {
762
+ "application/json": components["schemas"]["HandsOnLabVersionMongo"];
763
+ };
764
+ };
765
+ };
766
+ };
767
+ LabVersionsController_findAll: {
768
+ parameters: {
769
+ query?: never;
770
+ header?: never;
771
+ path: {
772
+ labId: string;
773
+ };
774
+ cookie?: never;
775
+ };
776
+ requestBody?: never;
777
+ responses: {
778
+ 200: {
779
+ headers: {
780
+ [name: string]: unknown;
781
+ };
782
+ content: {
783
+ "application/json": components["schemas"]["HandsOnLabVersionMongo"][];
784
+ };
785
+ };
786
+ };
787
+ };
788
+ LabVersionsController_findOne: {
789
+ parameters: {
790
+ query?: never;
791
+ header?: never;
792
+ path: {
793
+ labId: string;
794
+ versionId: string;
795
+ };
796
+ cookie?: never;
797
+ };
798
+ requestBody?: never;
799
+ responses: {
800
+ 200: {
801
+ headers: {
802
+ [name: string]: unknown;
803
+ };
804
+ content: {
805
+ "application/json": components["schemas"]["HandsOnLabVersionMongo"];
806
+ };
807
+ };
808
+ };
809
+ };
810
+ LabVersionsController_patchDraft: {
811
+ parameters: {
812
+ query?: never;
813
+ header?: never;
814
+ path: {
815
+ labId: string;
816
+ versionId: string;
817
+ };
818
+ cookie?: never;
819
+ };
820
+ requestBody: {
821
+ content: {
822
+ "application/json": components["schemas"]["UpdateDraftVersionDto"];
823
+ };
824
+ };
825
+ responses: {
826
+ 200: {
827
+ headers: {
828
+ [name: string]: unknown;
829
+ };
830
+ content: {
831
+ "application/json": components["schemas"]["HandsOnLabVersionMongo"];
832
+ };
833
+ };
834
+ };
835
+ };
836
+ LabVersionsController_publish: {
837
+ parameters: {
838
+ query?: never;
839
+ header?: never;
840
+ path: {
841
+ labId: string;
842
+ versionId: string;
843
+ };
844
+ cookie?: never;
845
+ };
846
+ requestBody: {
847
+ content: {
848
+ "application/json": components["schemas"]["PublishVersionDto"];
849
+ };
850
+ };
851
+ responses: {
852
+ 200: {
853
+ headers: {
854
+ [name: string]: unknown;
855
+ };
856
+ content: {
857
+ "application/json": components["schemas"]["HandsOnLabVersionMongo"];
858
+ };
859
+ };
860
+ };
861
+ };
862
+ LabEmbedsController_findAll: {
863
+ parameters: {
864
+ query?: {
865
+ labId?: string;
866
+ workshopId?: string;
867
+ workshopDocumentId?: string;
868
+ };
869
+ header?: never;
870
+ path?: never;
871
+ cookie?: never;
872
+ };
873
+ requestBody?: never;
874
+ responses: {
875
+ 200: {
876
+ headers: {
877
+ [name: string]: unknown;
878
+ };
879
+ content: {
880
+ "application/json": components["schemas"]["HandsOnLabEmbedMongo"][];
881
+ };
882
+ };
883
+ };
884
+ };
885
+ LabEmbedsController_create: {
886
+ parameters: {
887
+ query?: never;
888
+ header?: never;
889
+ path?: never;
890
+ cookie?: never;
891
+ };
892
+ requestBody: {
893
+ content: {
894
+ "application/json": components["schemas"]["CreateEmbedDto"];
895
+ };
896
+ };
897
+ responses: {
898
+ 201: {
899
+ headers: {
900
+ [name: string]: unknown;
901
+ };
902
+ content: {
903
+ "application/json": components["schemas"]["HandsOnLabEmbedMongo"];
904
+ };
905
+ };
906
+ };
907
+ };
908
+ LabEmbedsController_remove: {
909
+ parameters: {
910
+ query?: never;
911
+ header?: never;
912
+ path: {
913
+ embedId: string;
914
+ };
915
+ cookie?: never;
916
+ };
917
+ requestBody?: never;
918
+ responses: {
919
+ 204: {
920
+ headers: {
921
+ [name: string]: unknown;
922
+ };
923
+ content?: never;
924
+ };
925
+ };
926
+ };
384
927
  }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,18 @@
1
1
  export type { AuthTestDto } from './models/AuthTestDto';
2
+ export type { ComparatorDto } from './models/ComparatorDto';
3
+ export type { CreateDraftVersionDto } from './models/CreateDraftVersionDto';
4
+ export type { CreateEmbedDto } from './models/CreateEmbedDto';
2
5
  export type { CreateExampleMongodbDocDto } from './models/CreateExampleMongodbDocDto';
6
+ export type { CreateLabDto } from './models/CreateLabDto';
3
7
  export type { ExampleMongodbDocDto } from './models/ExampleMongodbDocDto';
4
8
  export type { ExampleMongodbDocObjectDto } from './models/ExampleMongodbDocObjectDto';
9
+ export type { HandsOnLabEmbedMongo } from './models/HandsOnLabEmbedMongo';
10
+ export type { HandsOnLabMongo } from './models/HandsOnLabMongo';
11
+ export type { HandsOnLabVersionMongo } from './models/HandsOnLabVersionMongo';
12
+ export type { LabRunnerConfigDto } from './models/LabRunnerConfigDto';
13
+ export type { LabTestCaseDto } from './models/LabTestCaseDto';
14
+ export type { PublishVersionDto } from './models/PublishVersionDto';
15
+ export type { ReferenceSolutionDto } from './models/ReferenceSolutionDto';
16
+ export type { UpdateDraftVersionDto } from './models/UpdateDraftVersionDto';
5
17
  export type { UpdateExampleMongodbDocDto } from './models/UpdateExampleMongodbDocDto';
18
+ export type { UpdateLabDto } from './models/UpdateLabDto';
@@ -0,0 +1,7 @@
1
+ export type ComparatorDto = {
2
+ kind: 'deepEqual' | 'strictEqual' | 'numberTolerance' | 'stringNormalized' | 'custom';
3
+ tolerance?: number;
4
+ normalizeWhitespace?: boolean;
5
+ ignoreCase?: boolean;
6
+ customComparatorId?: string;
7
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { LabRunnerConfigDto } from './LabRunnerConfigDto';
2
+ import type { LabTestCaseDto } from './LabTestCaseDto';
3
+ import type { ReferenceSolutionDto } from './ReferenceSolutionDto';
4
+ export type CreateDraftVersionDto = {
5
+ language?: 'typescript' | 'javascript';
6
+ promptMarkdown?: string;
7
+ hints?: Array<string>;
8
+ starterCode?: string;
9
+ referenceSolution?: ReferenceSolutionDto;
10
+ sampleTests?: Array<LabTestCaseDto>;
11
+ hiddenTests?: Array<LabTestCaseDto>;
12
+ runner?: LabRunnerConfigDto;
13
+ contentHash?: string;
14
+ createdBy: string;
15
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ export type CreateEmbedDto = {
2
+ labId: string;
3
+ workshopId: string;
4
+ workshopDocumentId: string;
5
+ blockId: string;
6
+ blockType?: 'handsOnLab';
7
+ pinnedVersionId?: string;
8
+ createdBy: string;
9
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ export type CreateLabDto = {
2
+ workshopId: string;
3
+ workshopDocumentGroupId?: string;
4
+ slug: string;
5
+ title: string;
6
+ summary?: string;
7
+ tags?: Array<string>;
8
+ difficulty?: 'intro' | 'easy' | 'medium' | 'hard';
9
+ estimatedMinutes?: number;
10
+ status?: 'draft' | 'published' | 'archived';
11
+ createdBy: string;
12
+ updatedBy?: string;
13
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export type HandsOnLabEmbedMongo = {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export type HandsOnLabMongo = {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export type HandsOnLabVersionMongo = {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ export type LabRunnerConfigDto = {
2
+ timeoutMs: number;
3
+ memoryMb?: number;
4
+ entryFnName?: string;
5
+ nodeVersion?: string;
6
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import type { ComparatorDto } from './ComparatorDto';
2
+ export type LabTestCaseDto = {
3
+ _id?: string;
4
+ name: string;
5
+ kind: 'io' | 'unit';
6
+ input?: Record<string, any>;
7
+ expected?: Record<string, any>;
8
+ comparator?: ComparatorDto;
9
+ testCode?: string;
10
+ framework?: 'jest' | 'vitest';
11
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export type PublishVersionDto = {
2
+ publishedBy: string;
3
+ notes?: string;
4
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export type ReferenceSolutionDto = {
2
+ code: string;
3
+ notesMarkdown?: string;
4
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { LabRunnerConfigDto } from './LabRunnerConfigDto';
2
+ import type { LabTestCaseDto } from './LabTestCaseDto';
3
+ import type { ReferenceSolutionDto } from './ReferenceSolutionDto';
4
+ export type UpdateDraftVersionDto = {
5
+ language?: 'typescript' | 'javascript';
6
+ promptMarkdown?: string;
7
+ hints?: Array<string>;
8
+ starterCode?: string;
9
+ referenceSolution?: ReferenceSolutionDto;
10
+ sampleTests?: Array<LabTestCaseDto>;
11
+ hiddenTests?: Array<LabTestCaseDto>;
12
+ runner?: LabRunnerConfigDto;
13
+ contentHash?: string;
14
+ createdBy?: string;
15
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ export type UpdateLabDto = {
2
+ workshopId?: string;
3
+ workshopDocumentGroupId?: string;
4
+ slug?: string;
5
+ title?: string;
6
+ summary?: string;
7
+ tags?: Array<string>;
8
+ difficulty?: 'intro' | 'easy' | 'medium' | 'hard';
9
+ estimatedMinutes?: number;
10
+ status?: 'draft' | 'published' | 'archived';
11
+ createdBy?: string;
12
+ updatedBy?: string;
13
+ };
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tmdjr/coding-labs-contracts",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "Types & runtime enums generated from NGX coding-labs spec",
5
5
  "license": "MIT",
6
6
  "private": false,