@techspokes/typescript-wsdl-client 0.36.0 → 1.0.1

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 (37) hide show
  1. package/README.md +10 -8
  2. package/dist/app/generateApp.js +3 -3
  3. package/dist/cli.js +5 -6
  4. package/dist/compiler/schemaCompiler.d.ts +2 -2
  5. package/dist/compiler/schemaCompiler.d.ts.map +1 -1
  6. package/dist/compiler/schemaCompiler.js +3 -15
  7. package/dist/compiler/shapeResolver.js +1 -1
  8. package/dist/gateway/generators.d.ts.map +1 -1
  9. package/dist/gateway/generators.js +8 -2
  10. package/dist/openapi/security.d.ts +1 -1
  11. package/dist/openapi/security.d.ts.map +1 -1
  12. package/dist/openapi/security.js +1 -1
  13. package/docs/api-reference.md +4 -4
  14. package/docs/cli-reference.md +18 -16
  15. package/docs/file-naming-and-path-organization.md +1 -1
  16. package/docs/gateway-guide.md +5 -5
  17. package/docs/migration-playbook.md +18 -18
  18. package/docs/migration.md +35 -0
  19. package/docs/output-anatomy.md +2 -2
  20. package/docs/production.md +1 -1
  21. package/docs/releases/README.md +30 -0
  22. package/docs/releases/v0.37.0.md +33 -0
  23. package/docs/releases/v0.38.0.md +35 -0
  24. package/docs/releases/v0.39.0.md +35 -0
  25. package/docs/releases/v0.40.0.md +45 -0
  26. package/docs/releases/v0.40.1.md +34 -0
  27. package/docs/releases/v1.0.0.md +42 -0
  28. package/docs/releases/v1.0.1.md +38 -0
  29. package/docs/roadmap/README.md +11 -11
  30. package/docs/roadmap/v1.0-capability-conformance-framework.md +14 -12
  31. package/docs/roadmap/v1.0-contract-audit.md +3 -3
  32. package/docs/roadmap/v1.0-release-candidate-gates.md +13 -7
  33. package/docs/roadmap/v1.0-wsdl-coverage-matrix.md +14 -4
  34. package/docs/roadmap/v1.0-xs-anyattribute-wildcard-bag.md +52 -50
  35. package/docs/start-here.md +8 -8
  36. package/docs/testing.md +6 -6
  37. package/package.json +17 -9
@@ -1,8 +1,10 @@
1
1
  # xs:anyAttribute Wildcard Bag Implementation Plan
2
2
 
3
+ Status: shipped in `0.36.0`.
4
+
3
5
  ## Agentic Worker Requirement
4
6
 
5
- REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
7
+ REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [x]`) syntax for tracking.
6
8
 
7
9
  ## Goal
8
10
 
@@ -20,7 +22,7 @@ TypeScript strict mode, ESM, Node.js 24+, Vitest, OpenAPI 3.1 JSON Schema, Fasti
20
22
 
21
23
  Known attributes are emitted as peer TypeScript properties in `src/client/generateTypes.ts` and peer OpenAPI object properties in `src/openapi/generateSchemas.ts`. The generated client already serializes an input attribute bag from `attributesKeyIn`, default `$attributes`, into node-soap attributes in `src/client/generateClient.ts`.
22
24
 
23
- The compiler already retains `attributeWildcards` on compiled types in `src/compiler/schemaCompiler.ts`. The conformance row `xs-anyattribute` currently proves only metadata retention and asserts that generated TypeScript, OpenAPI, and gateway schemas do not expose a wildcard bag.
25
+ The compiler already retains `attributeWildcards` on compiled types in `src/compiler/schemaCompiler.ts`. Before `0.36.0`, the conformance row `xs-anyattribute` proved only metadata retention and asserted that generated TypeScript, OpenAPI, and gateway schemas did not expose a wildcard bag.
24
26
 
25
27
  ## Target Contract
26
28
 
@@ -83,7 +85,7 @@ Modify generated support docs through `npm run docs:support-matrix`, then manual
83
85
  - Modify: `test/unit/compiler-wildcards.test.ts`
84
86
  - Modify: `test/unit/mock-data.test.ts`
85
87
 
86
- - [ ] Step 1: Add a compiler test for local extension wildcard metadata
88
+ - [x] Step 1: Add a compiler test for local extension wildcard metadata
87
89
 
88
90
  Append this test inside the existing `describe("compiler: wildcard retention", () => { ... })` block in `test/unit/compiler-wildcards.test.ts`:
89
91
 
@@ -126,7 +128,7 @@ Append this test inside the existing `describe("compiler: wildcard retention", (
126
128
  });
127
129
  ```
128
130
 
129
- - [ ] Step 2: Add mock-data tests for wildcard bags
131
+ - [x] Step 2: Add mock-data tests for wildcard bags
130
132
 
131
133
  Add these tests after `it("generates attribute-only types (no elements)", ... )` in `test/unit/mock-data.test.ts`:
132
134
 
@@ -190,7 +192,7 @@ Add these tests after `it("generates attribute-only types (no elements)", ... )`
190
192
  });
191
193
  ```
192
194
 
193
- - [ ] Step 3: Run the focused tests and verify they fail
195
+ - [x] Step 3: Run the focused tests and verify they fail
194
196
 
195
197
  Run:
196
198
 
@@ -206,7 +208,7 @@ Expected result: the new compiler test fails because `localAttributeWildcards` i
206
208
 
207
209
  - Create: `src/util/attributeWildcards.ts`
208
210
 
209
- - [ ] Step 1: Create the helper module
211
+ - [x] Step 1: Create the helper module
210
212
 
211
213
  Create `src/util/attributeWildcards.ts`:
212
214
 
@@ -238,7 +240,7 @@ export function wildcardAttributeBagSchema(): {type: "object"; additionalPropert
238
240
  }
239
241
  ```
240
242
 
241
- - [ ] Step 2: Run typecheck and verify the helper compiles
243
+ - [x] Step 2: Run typecheck and verify the helper compiles
242
244
 
243
245
  Run:
244
246
 
@@ -255,7 +257,7 @@ Expected result: the command still fails because Task 1 intentionally introduced
255
257
  - Modify: `src/compiler/schemaCompiler.ts`
256
258
  - Modify: `src/compiler/shapeResolver.ts`
257
259
 
258
- - [ ] Step 1: Extend `CompiledType` with local wildcard metadata
260
+ - [x] Step 1: Extend `CompiledType` with local wildcard metadata
259
261
 
260
262
  In `src/compiler/schemaCompiler.ts`, add this documentation line after the `localElems` JSDoc line:
261
263
 
@@ -269,7 +271,7 @@ Add this property to the `CompiledType` type after `attributeWildcards?: Compile
269
271
  localAttributeWildcards?: CompiledAttributeWildcard[];
270
272
  ```
271
273
 
272
- - [ ] Step 2: Store local wildcard metadata on complex-content extensions
274
+ - [x] Step 2: Store local wildcard metadata on complex-content extensions
273
275
 
274
276
  In the complex-content extension result object in `getOrCompileComplex`, replace:
275
277
 
@@ -284,7 +286,7 @@ with:
284
286
  ...(localAttributeWildcards.length > 0 ? {localAttributeWildcards} : {}),
285
287
  ```
286
288
 
287
- - [ ] Step 3: Preserve local wildcard metadata in shape canonicalization
289
+ - [x] Step 3: Preserve local wildcard metadata in shape canonicalization
288
290
 
289
291
  In `src/compiler/shapeResolver.ts`, find the canonicalized type object that already maps `attributeWildcards`. Add this property immediately after it:
290
292
 
@@ -297,7 +299,7 @@ In `src/compiler/shapeResolver.ts`, find the canonicalized type object that alre
297
299
 
298
300
  If the surrounding function omits empty optional arrays for `wildcards` and `attributeWildcards`, use the same conditional style already present in that function. The final emitted catalog must not add `localAttributeWildcards` to types that do not have local wildcard declarations.
299
301
 
300
- - [ ] Step 4: Run the compiler wildcard test
302
+ - [x] Step 4: Run the compiler wildcard test
301
303
 
302
304
  Run:
303
305
 
@@ -313,7 +315,7 @@ Expected result: the new `localAttributeWildcards` test passes. Existing wildcar
313
315
 
314
316
  - Modify: `src/client/generateTypes.ts`
315
317
 
316
- - [ ] Step 1: Import the shared helpers
318
+ - [x] Step 1: Import the shared helpers
317
319
 
318
320
  Add this import near the existing imports in `src/client/generateTypes.ts`:
319
321
 
@@ -321,7 +323,7 @@ Add this import near the existing imports in `src/client/generateTypes.ts`:
321
323
  import {hasAttributeWildcards, wildcardAttributeBagName} from "../util/attributeWildcards.js";
322
324
  ```
323
325
 
324
- - [ ] Step 2: Add a bag-name constant inside `generateTypes`
326
+ - [x] Step 2: Add a bag-name constant inside `generateTypes`
325
327
 
326
328
  After `const isChoiceUnionMode = compiled.options.choice === "union";`, add:
327
329
 
@@ -329,7 +331,7 @@ After `const isChoiceUnionMode = compiled.options.choice === "union";`, add:
329
331
  const wildcardBagName = wildcardAttributeBagName(compiled.options);
330
332
  ```
331
333
 
332
- - [ ] Step 3: Add an emitter for wildcard bags
334
+ - [x] Step 3: Add an emitter for wildcard bags
333
335
 
334
336
  After `emitAttributeProperty`, add:
335
337
 
@@ -345,7 +347,7 @@ After `emitAttributeProperty`, add:
345
347
  };
346
348
  ```
347
349
 
348
- - [ ] Step 4: Compute local wildcard bags for normal and choice-mode interfaces
350
+ - [x] Step 4: Compute local wildcard bags for normal and choice-mode interfaces
349
351
 
350
352
  After the `attrsToEmit` line, add:
351
353
 
@@ -355,7 +357,7 @@ After the `attrsToEmit` line, add:
355
357
  : {attributeWildcards: t.attributeWildcards};
356
358
  ```
357
359
 
358
- - [ ] Step 5: Emit the bag in choice union base interfaces
360
+ - [x] Step 5: Emit the bag in choice union base interfaces
359
361
 
360
362
  In the choice-union branch, after the loop that emits attributes:
361
363
 
@@ -373,7 +375,7 @@ add:
373
375
  }
374
376
  ```
375
377
 
376
- - [ ] Step 6: Emit the bag in normal interfaces
378
+ - [x] Step 6: Emit the bag in normal interfaces
377
379
 
378
380
  In the normal interface branch, after the loop that emits attributes:
379
381
 
@@ -391,7 +393,7 @@ add:
391
393
  }
392
394
  ```
393
395
 
394
- - [ ] Step 7: Run snapshot tests to see the intentional diff
396
+ - [x] Step 7: Run snapshot tests to see the intentional diff
395
397
 
396
398
  Run:
397
399
 
@@ -407,7 +409,7 @@ Expected result: snapshots may fail only if the weather fixture contains `xs:any
407
409
 
408
410
  - Modify: `src/openapi/generateSchemas.ts`
409
411
 
410
- - [ ] Step 1: Import the shared helpers
412
+ - [x] Step 1: Import the shared helpers
411
413
 
412
414
  Add this import near the existing imports:
413
415
 
@@ -415,7 +417,7 @@ Add this import near the existing imports:
415
417
  import {hasAttributeWildcards, wildcardAttributeBagName, wildcardAttributeBagSchema} from "../util/attributeWildcards.js";
416
418
  ```
417
419
 
418
- - [ ] Step 2: Add an `attributesKey` parameter to `buildComplexSchema`
420
+ - [x] Step 2: Add an `attributesKey` parameter to `buildComplexSchema`
419
421
 
420
422
  Change the `buildComplexSchema` signature from:
421
423
 
@@ -444,7 +446,7 @@ function buildComplexSchema(
444
446
  ): any {
445
447
  ```
446
448
 
447
- - [ ] Step 3: Add the bag property after known attributes
449
+ - [x] Step 3: Add the bag property after known attributes
448
450
 
449
451
  After the `for (const a of t.attrs) { ... }` loop, add:
450
452
 
@@ -454,7 +456,7 @@ After the `for (const a of t.attrs) { ... }` loop, add:
454
456
  }
455
457
  ```
456
458
 
457
- - [ ] Step 4: Pass the configured key from `generateSchemas`
459
+ - [x] Step 4: Pass the configured key from `generateSchemas`
458
460
 
459
461
  In `generateSchemas`, add this constant after `const choiceUnionMode = ...` or near the other derived options:
460
462
 
@@ -469,7 +471,7 @@ Update the call to `buildComplexSchema` so the final argument list includes `att
469
471
  attributesKey,
470
472
  ```
471
473
 
472
- - [ ] Step 5: Run OpenAPI unit and conformance tests enough to observe failure movement
474
+ - [x] Step 5: Run OpenAPI unit and conformance tests enough to observe failure movement
473
475
 
474
476
  Run:
475
477
 
@@ -486,7 +488,7 @@ Expected result: conformance still fails until Task 7 updates the registry asser
486
488
  - Modify: `src/test/mockData.ts`
487
489
  - Modify: `test/unit/mock-data.test.ts`
488
490
 
489
- - [ ] Step 1: Import helpers
491
+ - [x] Step 1: Import helpers
490
492
 
491
493
  Add this import to `src/test/mockData.ts`:
492
494
 
@@ -494,7 +496,7 @@ Add this import to `src/test/mockData.ts`:
494
496
  import {hasAttributeWildcards, wildcardAttributeBagName} from "../util/attributeWildcards.js";
495
497
  ```
496
498
 
497
- - [ ] Step 2: Extend mock catalog types
499
+ - [x] Step 2: Extend mock catalog types
498
500
 
499
501
  Change the `CatalogForMocks` `options` type from:
500
502
 
@@ -526,7 +528,7 @@ to:
526
528
  attributeWildcards?: Array<{namespace?: string; processContents?: "lax" | "strict" | "skip"}>;
527
529
  ```
528
530
 
529
- - [ ] Step 3: Keep wildcard-only types from returning early
531
+ - [x] Step 3: Keep wildcard-only types from returning early
530
532
 
531
533
  After `const typeMeta = catalog.types?.find((t) => t.name === typeName);`, add:
532
534
 
@@ -542,7 +544,7 @@ Move the existing early return below that line and change it to:
542
544
  }
543
545
  ```
544
546
 
545
- - [ ] Step 4: Add deterministic wildcard bag data
547
+ - [x] Step 4: Add deterministic wildcard bag data
546
548
 
547
549
  Before `return result;`, add:
548
550
 
@@ -557,7 +559,7 @@ Before `return result;`, add:
557
559
  }
558
560
  ```
559
561
 
560
- - [ ] Step 5: Run mock-data tests
562
+ - [x] Step 5: Run mock-data tests
561
563
 
562
564
  Run:
563
565
 
@@ -573,7 +575,7 @@ Expected result: all mock-data tests pass, including the new wildcard attribute
573
575
 
574
576
  - Modify: `test/conformance/registry.ts`
575
577
 
576
- - [ ] Step 1: Change row status and contract
578
+ - [x] Step 1: Change row status and contract
577
579
 
578
580
  In the `xs-anyattribute` row, replace:
579
581
 
@@ -595,7 +597,7 @@ Replace the current `publicContract` and `decisionReason` with:
595
597
  decisionReason: "The compiler retains attribute wildcard metadata, and generated TypeScript, OpenAPI, gateway, generated-test, and app artifacts can represent wildcard attributes through the existing attribute-bag runtime path.",
596
598
  ```
597
599
 
598
- - [ ] Step 2: Strengthen client expectations
600
+ - [x] Step 2: Strengthen client expectations
599
601
 
600
602
  Replace the `client` block for `xs-anyattribute` with:
601
603
 
@@ -608,7 +610,7 @@ Replace the `client` block for `xs-anyattribute` with:
608
610
  },
609
611
  ```
610
612
 
611
- - [ ] Step 3: Strengthen OpenAPI expectations
613
+ - [x] Step 3: Strengthen OpenAPI expectations
612
614
 
613
615
  Replace the existing `openapi.assert` body with:
614
616
 
@@ -626,7 +628,7 @@ Replace the existing `openapi.assert` body with:
626
628
  },
627
629
  ```
628
630
 
629
- - [ ] Step 4: Exercise the bag through the generated gateway
631
+ - [x] Step 4: Exercise the bag through the generated gateway
630
632
 
631
633
  Change the gateway request payload from:
632
634
 
@@ -661,7 +663,7 @@ Change the gateway schema assertion from rejecting `$attributes` to requiring it
661
663
  },
662
664
  ```
663
665
 
664
- - [ ] Step 5: Strengthen generated-test expectations
666
+ - [x] Step 5: Strengthen generated-test expectations
665
667
 
666
668
  Replace the `generatedTests` block with:
667
669
 
@@ -675,7 +677,7 @@ Replace the `generatedTests` block with:
675
677
  },
676
678
  ```
677
679
 
678
- - [ ] Step 6: Run conformance and verify failure points
680
+ - [x] Step 6: Run conformance and verify failure points
679
681
 
680
682
  Run:
681
683
 
@@ -694,7 +696,7 @@ Expected result before Tasks 3 through 6 are complete: this fails on missing gen
694
696
  - Modify: `docs/roadmap/v1.0-capability-conformance-framework.md`
695
697
  - Modify: `CHANGELOG.md`
696
698
 
697
- - [ ] Step 1: Regenerate the support matrix
699
+ - [x] Step 1: Regenerate the support matrix
698
700
 
699
701
  Run:
700
702
 
@@ -704,7 +706,7 @@ npm run docs:support-matrix
704
706
 
705
707
  Expected result: the generated matrix in `docs/supported-patterns.md` changes the `xs-anyattribute` status from `partial` to `supported` and uses the updated public contract.
706
708
 
707
- - [ ] Step 2: Update the explanatory `xs:anyAttribute` section
709
+ - [x] Step 2: Update the explanatory `xs:anyAttribute` section
708
710
 
709
711
  In `docs/supported-patterns.md`, replace the `### xs:anyAttribute` paragraph with:
710
712
 
@@ -716,7 +718,7 @@ Attribute wildcards are retained as catalog metadata and emitted as an optional
716
718
  Known XML attributes remain flattened as peer properties. Wildcard attributes stay inside the bag so unknown names do not collide with child elements or known attributes.
717
719
  ```
718
720
 
719
- - [ ] Step 3: Move `xs:anyAttribute` from partial to supported in the full support list
721
+ - [x] Step 3: Move `xs:anyAttribute` from partial to supported in the full support list
720
722
 
721
723
  In `docs/supported-patterns.md`, add this bullet under `## Fully Supported`:
722
724
 
@@ -736,7 +738,7 @@ Do not remove `xs:any` particle limitations unless a separate `xs:any` content i
736
738
  - Full `xs:any` element serialization: arbitrary wildcard element content is not emitted as a typed contract
737
739
  ```
738
740
 
739
- - [ ] Step 4: Update roadmap wording
741
+ - [x] Step 4: Update roadmap wording
740
742
 
741
743
  In `docs/roadmap/v1.0-wsdl-coverage-matrix.md`, change the priority row for `xs:anyAttribute` from:
742
744
 
@@ -764,7 +766,7 @@ with:
764
766
  For partial rows, prove the documented subset and avoid implying full support. External `PolicyReference` should not imply fetched or enforced external policy. The `xs-anyattribute` row is supported once generated TypeScript, OpenAPI, gateway, generated-test, and app evidence prove the configured wildcard attribute bag.
765
767
  ```
766
768
 
767
- - [ ] Step 5: Update changelog
769
+ - [x] Step 5: Update changelog
768
770
 
769
771
  If the existing Unreleased roadmap bullet is still present, add this bullet under `## [Unreleased]` in `CHANGELOG.md`:
770
772
 
@@ -783,7 +785,7 @@ Do not remove the existing `docs(roadmap): align 1.0 readiness docs with the 0.3
783
785
  - Test: `test/conformance/`
784
786
  - Test: `test/snapshot/`
785
787
 
786
- - [ ] Step 1: Run unit tests for changed internals
788
+ - [x] Step 1: Run unit tests for changed internals
787
789
 
788
790
  Run:
789
791
 
@@ -793,7 +795,7 @@ npx vitest run test/unit/compiler-wildcards.test.ts test/unit/mock-data.test.ts
793
795
 
794
796
  Expected result: all tests pass.
795
797
 
796
- - [ ] Step 2: Run conformance
798
+ - [x] Step 2: Run conformance
797
799
 
798
800
  Run:
799
801
 
@@ -803,7 +805,7 @@ npm run test:conformance
803
805
 
804
806
  Expected result: all conformance tests pass, and `xs-anyattribute` is now a supported row.
805
807
 
806
- - [ ] Step 3: Run snapshot tests
808
+ - [x] Step 3: Run snapshot tests
807
809
 
808
810
  Run:
809
811
 
@@ -825,7 +827,7 @@ npm run test:snap
825
827
 
826
828
  Expected result: snapshot tests pass after reviewing the diff.
827
829
 
828
- - [ ] Step 4: Run docs validation
830
+ - [x] Step 4: Run docs validation
829
831
 
830
832
  Run:
831
833
 
@@ -841,7 +843,7 @@ Expected result: Markdown links, TypeScript fenced snippets, and support matrix
841
843
 
842
844
  - No source edits expected.
843
845
 
844
- - [ ] Step 1: Run typecheck
846
+ - [x] Step 1: Run typecheck
845
847
 
846
848
  Run:
847
849
 
@@ -851,7 +853,7 @@ npm run typecheck
851
853
 
852
854
  Expected result: TypeScript reports no errors.
853
855
 
854
- - [ ] Step 2: Run the required smoke pipeline
856
+ - [x] Step 2: Run the required smoke pipeline
855
857
 
856
858
  Run:
857
859
 
@@ -861,7 +863,7 @@ npm run smoke:pipeline
861
863
 
862
864
  Expected result: the command regenerates disposable output under `tmp/smoke/`, generates client, OpenAPI, gateway, and app artifacts, and `tsc -p tsconfig.smoke.json` passes.
863
865
 
864
- - [ ] Step 3: Run the full test suite
866
+ - [x] Step 3: Run the full test suite
865
867
 
866
868
  Run:
867
869
 
@@ -871,7 +873,7 @@ npm test
871
873
 
872
874
  Expected result: all Vitest tests pass.
873
875
 
874
- - [ ] Step 4: Run full CI before release-candidate work
876
+ - [x] Step 4: Run full CI before release-candidate work
875
877
 
876
878
  Run:
877
879
 
@@ -887,7 +889,7 @@ Expected result: build, typecheck, skill validation, package validation, docs va
887
889
 
888
890
  - Review: all modified files from Tasks 1 through 10.
889
891
 
890
- - [ ] Step 1: Inspect changed files
892
+ - [x] Step 1: Inspect changed files
891
893
 
892
894
  Run:
893
895
 
@@ -898,7 +900,7 @@ git diff --stat
898
900
 
899
901
  Expected result: only implementation, test, docs, changelog, and possible snapshot files are modified.
900
902
 
901
- - [ ] Step 2: Review semantic diff
903
+ - [x] Step 2: Review semantic diff
902
904
 
903
905
  Run:
904
906
 
@@ -908,7 +910,7 @@ git diff
908
910
 
909
911
  Expected result: the diff shows `xs:anyAttribute` moving from metadata-only partial support to supported wildcard-bag output. It must not include unrelated formatting churn or generated output under `tmp/`.
910
912
 
911
- - [ ] Step 3: Commit the implementation if requested by the maintainer
913
+ - [x] Step 3: Commit the implementation if requested by the maintainer
912
914
 
913
915
  Run:
914
916
 
@@ -24,7 +24,7 @@ Run the `client` command. This generates TypeScript interfaces for all WSDL type
24
24
  ```bash
25
25
  npx wsdl-tsc client \
26
26
  --wsdl-source your-service.wsdl \
27
- --client-dir ./generated/client
27
+ --client-dir ./.generated/client
28
28
  ```
29
29
 
30
30
  You get `types.ts`, `client.ts`, `operations.ts`, and `utils.ts`. Import the client, call typed methods, and let TypeScript catch contract mismatches at compile time.
@@ -38,7 +38,7 @@ Run the `openapi` command. This generates an OpenAPI 3.1 specification with sche
38
38
  ```bash
39
39
  npx wsdl-tsc openapi \
40
40
  --wsdl-source your-service.wsdl \
41
- --openapi-file ./generated/openapi.json
41
+ --openapi-file ./.generated/openapi.json
42
42
  ```
43
43
 
44
44
  The spec includes paths for each SOAP operation, request/response schemas, and descriptions propagated from WSDL documentation annotations.
@@ -52,9 +52,9 @@ Run the `pipeline` command with `--init-app`. This generates the typed client, O
52
52
  ```bash
53
53
  npx wsdl-tsc pipeline \
54
54
  --wsdl-source your-service.wsdl \
55
- --client-dir ./generated/client \
56
- --openapi-file ./generated/openapi.json \
57
- --gateway-dir ./generated/gateway \
55
+ --client-dir ./.generated/client \
56
+ --openapi-file ./.generated/openapi.json \
57
+ --gateway-dir ./.generated/gateway \
58
58
  --gateway-service-name my-service \
59
59
  --gateway-version-prefix v1 \
60
60
  --init-app
@@ -71,9 +71,9 @@ Some SOAP services return payloads that are too large or too slow to buffer in m
71
71
  ```bash
72
72
  npx wsdl-tsc pipeline \
73
73
  --wsdl-source your-service.wsdl \
74
- --client-dir ./generated/client \
75
- --openapi-file ./generated/openapi.json \
76
- --gateway-dir ./generated/gateway \
74
+ --client-dir ./.generated/client \
75
+ --openapi-file ./.generated/openapi.json \
76
+ --gateway-dir ./.generated/gateway \
77
77
  --gateway-service-name my-service \
78
78
  --gateway-version-prefix v1 \
79
79
  --stream-config ./stream.config.json
package/docs/testing.md CHANGED
@@ -45,7 +45,7 @@ Repository test and release automation keeps disposable output classified under
45
45
  - `tmp/conformance/`: conformance mini-projects that need repository-local module resolution
46
46
  - `tmp/test-generation/`: generated-test integration spikes
47
47
 
48
- Keep new repository-owned temporary writers under the closest existing subfolder. Public CLI examples may still use simple `tmp/...` paths when those examples are clearer for users.
48
+ Keep new repository-owned temporary writers under the closest existing subfolder. Public CLI examples use the git-ignored `.generated/` convention instead of repository `tmp/` paths.
49
49
 
50
50
  ## Unit Tests
51
51
 
@@ -221,12 +221,12 @@ The `--test-dir` flag generates a complete, runnable Vitest test suite that vali
221
221
  ```bash
222
222
  npx wsdl-tsc pipeline \
223
223
  --wsdl-source service.wsdl \
224
- --client-dir ./generated/client \
225
- --openapi-file ./generated/openapi.json \
226
- --gateway-dir ./generated/gateway \
224
+ --client-dir ./.generated/client \
225
+ --openapi-file ./.generated/openapi.json \
226
+ --gateway-dir ./.generated/gateway \
227
227
  --gateway-service-name myservice \
228
228
  --gateway-version-prefix v1 \
229
- --test-dir ./generated/tests
229
+ --test-dir ./.generated/tests
230
230
  ```
231
231
 
232
232
  ### Generated Structure
@@ -251,7 +251,7 @@ npx wsdl-tsc pipeline \
251
251
  ### Running Generated Tests
252
252
 
253
253
  ```bash
254
- npx vitest run --config ./generated/tests/vitest.config.ts
254
+ npx vitest run --config ./.generated/tests/vitest.config.ts
255
255
  ```
256
256
 
257
257
  ### Skip-if-Exists Behavior
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@techspokes/typescript-wsdl-client",
3
- "version": "0.36.0",
3
+ "version": "1.0.1",
4
4
  "description": "Turn legacy WSDL/SOAP services into typed TypeScript clients, OpenAPI 3.1 specs, and production-ready Fastify REST gateways. Built for enterprise SOAP modernization.",
5
5
  "keywords": [
6
6
  "wsdl",
@@ -71,10 +71,17 @@
71
71
  "test:snap": "vitest run test/snapshot",
72
72
  "test:integration": "vitest run test/integration",
73
73
  "test:github": "vitest run test/unit test/snapshot test/integration",
74
- "test:conformance": "vitest run test/conformance",
74
+ "test:conformance": "vitest run test/conformance --reporter=verbose",
75
+ "test:conformance:contracts": "vitest run --config vitest.conformance.config.ts test/conformance/stages/contracts.stage.ts --reporter=verbose",
76
+ "test:conformance:compile": "vitest run --config vitest.conformance.config.ts test/conformance/stages/compile.stage.ts --reporter=verbose",
77
+ "test:conformance:client": "vitest run --config vitest.conformance.config.ts test/conformance/stages/client.stage.ts --reporter=verbose",
78
+ "test:conformance:openapi": "vitest run --config vitest.conformance.config.ts test/conformance/stages/openapi.stage.ts --reporter=verbose",
79
+ "test:conformance:gateway": "vitest run --config vitest.conformance.config.ts test/conformance/stages/gateway.stage.ts --reporter=verbose",
80
+ "test:conformance:generated-tests": "vitest run --config vitest.conformance.config.ts test/conformance/stages/generated-tests.stage.ts --reporter=verbose",
81
+ "test:conformance:app": "vitest run --config vitest.conformance.config.ts test/conformance/stages/app.stage.ts --reporter=verbose",
75
82
  "test:watch": "vitest",
76
83
  "prepublishOnly": "npm run clean && npm run build && npm run package:validate",
77
- "smoke:reset": "npm run clean:tmp",
84
+ "smoke:reset": "rimraf tmp/smoke",
78
85
  "smoke:compile": "npm run smoke:reset && tsx src/cli.ts compile --wsdl-source examples/minimal/weather.wsdl --catalog-file tmp/smoke/catalog.json",
79
86
  "smoke:client": "npm run smoke:reset && tsx src/cli.ts client --wsdl-source examples/minimal/weather.wsdl --client-dir tmp/smoke/client && tsc -p tsconfig.smoke.json",
80
87
  "smoke:openapi": "npm run smoke:reset && tsx src/cli.ts openapi --wsdl-source examples/minimal/weather.wsdl --openapi-file tmp/smoke/openapi.json --openapi-format json && tsc -p tsconfig.smoke.json",
@@ -89,6 +96,7 @@
89
96
  "skill:package": "node scripts/build-agent-skill.mjs",
90
97
  "package:validate": "node scripts/validate-npm-package.mjs",
91
98
  "release:preflight": "node scripts/release-preflight.mjs",
99
+ "release:publish-check": "npm run clean && npm run build && npm run typecheck && npm run skill:validate && npm run package:validate",
92
100
  "ci": "npm run clean && npm run build && npm run typecheck && npm run skill:validate && npm run package:validate && npm run docs:validate && vitest run && npm run smoke:pipeline",
93
101
  "ci:github": "npm run clean && npm run build && npm run typecheck && npm run skill:validate && npm run package:validate && npm run docs:validate && npm run test:github && npm run smoke:pipeline",
94
102
  "ci:github:node26": "npm run clean && npm run build && npm run typecheck && npm run test:unit && npm run smoke:pipeline",
@@ -96,19 +104,19 @@
96
104
  },
97
105
  "devDependencies": {
98
106
  "@types/js-yaml": "^4.0.9",
99
- "@types/node": "^26.0.1",
107
+ "@types/node": "^26.1.1",
100
108
  "@types/yargs": "^17.0.35",
101
- "fastify": "^5.8.5",
109
+ "fastify": "^5.10.0",
102
110
  "fastify-plugin": "^6.0.0",
103
111
  "rimraf": "^6.1.3",
104
- "tsx": "^4.22.4",
112
+ "tsx": "^4.23.0",
105
113
  "typescript": "^6.0.3",
106
- "vitest": "^4.1.9"
114
+ "vitest": "^4.1.10"
107
115
  },
108
116
  "dependencies": {
109
117
  "@apidevtools/swagger-parser": "^12.1.0",
110
- "fast-xml-parser": "^5.9.3",
111
- "js-yaml": "^5.1.0",
118
+ "fast-xml-parser": "^5.10.0",
119
+ "js-yaml": "^5.2.1",
112
120
  "saxes": "^6.0.0",
113
121
  "soap": "^1.9.3",
114
122
  "yargs": "^18.0.0"