@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.
- package/README.md +10 -8
- package/dist/app/generateApp.js +3 -3
- package/dist/cli.js +5 -6
- package/dist/compiler/schemaCompiler.d.ts +2 -2
- package/dist/compiler/schemaCompiler.d.ts.map +1 -1
- package/dist/compiler/schemaCompiler.js +3 -15
- package/dist/compiler/shapeResolver.js +1 -1
- package/dist/gateway/generators.d.ts.map +1 -1
- package/dist/gateway/generators.js +8 -2
- package/dist/openapi/security.d.ts +1 -1
- package/dist/openapi/security.d.ts.map +1 -1
- package/dist/openapi/security.js +1 -1
- package/docs/api-reference.md +4 -4
- package/docs/cli-reference.md +18 -16
- package/docs/file-naming-and-path-organization.md +1 -1
- package/docs/gateway-guide.md +5 -5
- package/docs/migration-playbook.md +18 -18
- package/docs/migration.md +35 -0
- package/docs/output-anatomy.md +2 -2
- package/docs/production.md +1 -1
- package/docs/releases/README.md +30 -0
- package/docs/releases/v0.37.0.md +33 -0
- package/docs/releases/v0.38.0.md +35 -0
- package/docs/releases/v0.39.0.md +35 -0
- package/docs/releases/v0.40.0.md +45 -0
- package/docs/releases/v0.40.1.md +34 -0
- package/docs/releases/v1.0.0.md +42 -0
- package/docs/releases/v1.0.1.md +38 -0
- package/docs/roadmap/README.md +11 -11
- package/docs/roadmap/v1.0-capability-conformance-framework.md +14 -12
- package/docs/roadmap/v1.0-contract-audit.md +3 -3
- package/docs/roadmap/v1.0-release-candidate-gates.md +13 -7
- package/docs/roadmap/v1.0-wsdl-coverage-matrix.md +14 -4
- package/docs/roadmap/v1.0-xs-anyattribute-wildcard-bag.md +52 -50
- package/docs/start-here.md +8 -8
- package/docs/testing.md +6 -6
- 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 (`- [
|
|
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`.
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
913
|
+
- [x] Step 3: Commit the implementation if requested by the maintainer
|
|
912
914
|
|
|
913
915
|
Run:
|
|
914
916
|
|
package/docs/start-here.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
56
|
-
--openapi-file
|
|
57
|
-
--gateway-dir
|
|
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
|
|
75
|
-
--openapi-file
|
|
76
|
-
--gateway-dir
|
|
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
|
|
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
|
|
225
|
-
--openapi-file
|
|
226
|
-
--gateway-dir
|
|
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
|
|
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
|
|
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.
|
|
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": "
|
|
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.
|
|
107
|
+
"@types/node": "^26.1.1",
|
|
100
108
|
"@types/yargs": "^17.0.35",
|
|
101
|
-
"fastify": "^5.
|
|
109
|
+
"fastify": "^5.10.0",
|
|
102
110
|
"fastify-plugin": "^6.0.0",
|
|
103
111
|
"rimraf": "^6.1.3",
|
|
104
|
-
"tsx": "^4.
|
|
112
|
+
"tsx": "^4.23.0",
|
|
105
113
|
"typescript": "^6.0.3",
|
|
106
|
-
"vitest": "^4.1.
|
|
114
|
+
"vitest": "^4.1.10"
|
|
107
115
|
},
|
|
108
116
|
"dependencies": {
|
|
109
117
|
"@apidevtools/swagger-parser": "^12.1.0",
|
|
110
|
-
"fast-xml-parser": "^5.
|
|
111
|
-
"js-yaml": "^5.1
|
|
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"
|