@lssm/module.contractspec-workspace 0.0.0-canary-20251216031832 → 0.0.0-canary-20251216035145

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 CHANGED
@@ -41,3 +41,4 @@ import {
41
41
 
42
42
 
43
43
 
44
+
@@ -1 +1 @@
1
- function e(e){return e.includes(`.contracts.`)?`operation`:e.includes(`.event.`)?`event`:e.includes(`.presentation.`)?`presentation`:e.includes(`.feature.`)?`feature`:e.includes(`.capability.`)?`capability`:e.includes(`.data-view.`)?`data-view`:e.includes(`.form.`)?`form`:e.includes(`.migration.`)?`migration`:e.includes(`.workflow.`)?`workflow`:e.includes(`.experiment.`)?`experiment`:e.includes(`.integration.`)?`integration`:e.includes(`.knowledge.`)?`knowledge`:e.includes(`.telemetry.`)?`telemetry`:e.includes(`.app-config.`)?`app-config`:e.includes(`.policy.`)?`policy`:e.includes(`.test-spec.`)?`test-spec`:`unknown`}function t(t,l){let u=e(l),d=a(t,`name`),f=a(t,`description`),p=a(t,`stability`),m=c(p)?p:void 0,h=s(t,`owners`),g=s(t,`tags`),_=o(t,`version`),v=a(t,`kind`),y=v===`command`||v===`query`?v:`unknown`,b=/meta\s*:\s*{/.test(t),x=/\bio\s*:\s*{/.test(t),S=/\bpolicy\s*:\s*{/.test(t),C=/\bpayload\s*:\s*{/.test(t),w=/\bcontent\s*:\s*{/.test(t),T=/\bdefinition\s*:\s*{/.test(t),E=u===`operation`?n(t):void 0,D=u===`operation`?r(t):void 0,O=i(t);return{filePath:l,specType:u,name:d??void 0,description:f??void 0,stability:m,owners:h,tags:g,version:_??void 0,kind:y,hasMeta:b,hasIo:x,hasPolicy:S,hasPayload:C,hasContent:w,hasDefinition:T,emittedEvents:E,policyRefs:D,testRefs:O}}function n(e){let t=[],n=/\{\s*name:\s*['"]([^'"]+)['"]\s*,\s*version:\s*(\d+)/g,r;for(;(r=n.exec(e))!==null;)r[1]&&r[2]&&t.push({name:r[1],version:Number(r[2])});let i=/\{\s*ref:\s*(\w+)/g;for(;(r=i.exec(e))!==null;)r[1]&&r[1].startsWith(`when`);return t.length>0?t:void 0}function r(e){let t=[],n=/\{\s*name:\s*['"]([^'"]+)['"]\s*,\s*version:\s*(\d+)/g,r=e.match(/policies\s*:\s*\[([\s\S]*?)\]/);if(r?.[1]){let e;for(;(e=n.exec(r[1]))!==null;)e[1]&&e[2]&&t.push({name:e[1],version:Number(e[2])})}return t.length>0?t:void 0}function i(e){let t=[],n=e.match(/tests\s*:\s*\[([\s\S]*?)\]/);if(n?.[1]){let e=/\{\s*name:\s*['"]([^'"]+)['"]\s*,\s*version:\s*(\d+)/g,r;for(;(r=e.exec(n[1]))!==null;)r[1]&&r[2]&&t.push({name:r[1],version:Number(r[2])})}return t.length>0?t:void 0}function a(e,t){let n=RegExp(`${l(t)}\\s*:\\s*['"]([^'"]+)['"]`);return e.match(n)?.[1]??null}function o(e,t){let n=RegExp(`${l(t)}\\s*:\\s*(\\d+)`),r=e.match(n);if(!r?.[1])return null;let i=Number(r[1]);return Number.isFinite(i)?i:null}function s(e,t){let n=RegExp(`${l(t)}\\s*:\\s*\\[([\\s\\S]*?)\\]`),r=e.match(n);if(!r?.[1])return;let i=r[1],a=Array.from(i.matchAll(/['"]([^'"]+)['"]/g)).map(e=>e[1]).filter(e=>typeof e==`string`&&e.length>0);return a.length>0?a:void 0}function c(e){return e===`experimental`||e===`beta`||e===`stable`||e===`deprecated`}function l(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}export{n as extractEmittedEvents,r as extractPolicyRefs,i as extractTestRefs,e as inferSpecTypeFromFilePath,t as scanSpecSource};
1
+ function e(e){return e.includes(`.contracts.`)?`operation`:e.includes(`.event.`)?`event`:e.includes(`.presentation.`)?`presentation`:e.includes(`.feature.`)?`feature`:e.includes(`.capability.`)?`capability`:e.includes(`.data-view.`)?`data-view`:e.includes(`.form.`)?`form`:e.includes(`.migration.`)?`migration`:e.includes(`.workflow.`)?`workflow`:e.includes(`.experiment.`)?`experiment`:e.includes(`.integration.`)?`integration`:e.includes(`.knowledge.`)?`knowledge`:e.includes(`.telemetry.`)?`telemetry`:e.includes(`.app-config.`)?`app-config`:e.includes(`.policy.`)?`policy`:e.includes(`.test-spec.`)?`test-spec`:`unknown`}function t(t,l){let d=e(l),f=a(t,`name`),p=a(t,`description`),m=a(t,`stability`),h=c(m)?m:void 0,g=s(t,`owners`),_=s(t,`tags`),v=o(t,`version`),y=u(t),b=/meta\s*:\s*{/.test(t),x=/\bio\s*:\s*{/.test(t),S=/\bpolicy\s*:\s*{/.test(t),C=/\bpayload\s*:\s*{/.test(t),w=/\bcontent\s*:\s*{/.test(t),T=/\bdefinition\s*:\s*{/.test(t),E=d===`operation`?n(t):void 0,D=d===`operation`?r(t):void 0,O=i(t);return{filePath:l,specType:d,name:f??void 0,description:p??void 0,stability:h,owners:g,tags:_,version:v??void 0,kind:y,hasMeta:b,hasIo:x,hasPolicy:S,hasPayload:C,hasContent:w,hasDefinition:T,emittedEvents:E,policyRefs:D,testRefs:O}}function n(e){let t=[],n=/\{\s*name:\s*['"]([^'"]+)['"]\s*,\s*version:\s*(\d+)/g,r;for(;(r=n.exec(e))!==null;)r[1]&&r[2]&&t.push({name:r[1],version:Number(r[2])});let i=/\{\s*ref:\s*(\w+)/g;for(;(r=i.exec(e))!==null;)r[1]&&r[1].startsWith(`when`);return t.length>0?t:void 0}function r(e){let t=[],n=/\{\s*name:\s*['"]([^'"]+)['"]\s*,\s*version:\s*(\d+)/g,r=e.match(/policies\s*:\s*\[([\s\S]*?)\]/);if(r?.[1]){let e;for(;(e=n.exec(r[1]))!==null;)e[1]&&e[2]&&t.push({name:e[1],version:Number(e[2])})}return t.length>0?t:void 0}function i(e){let t=[],n=e.match(/tests\s*:\s*\[([\s\S]*?)\]/);if(n?.[1]){let e=/\{\s*name:\s*['"]([^'"]+)['"]\s*,\s*version:\s*(\d+)/g,r;for(;(r=e.exec(n[1]))!==null;)r[1]&&r[2]&&t.push({name:r[1],version:Number(r[2])})}return t.length>0?t:void 0}function a(e,t){let n=RegExp(`${l(t)}\\s*:\\s*['"]([^'"]+)['"]`);return e.match(n)?.[1]??null}function o(e,t){let n=RegExp(`${l(t)}\\s*:\\s*(\\d+)`),r=e.match(n);if(!r?.[1])return null;let i=Number(r[1]);return Number.isFinite(i)?i:null}function s(e,t){let n=RegExp(`${l(t)}\\s*:\\s*\\[([\\s\\S]*?)\\]`),r=e.match(n);if(!r?.[1])return;let i=r[1],a=Array.from(i.matchAll(/['"]([^'"]+)['"]/g)).map(e=>e[1]).filter(e=>typeof e==`string`&&e.length>0);return a.length>0?a:void 0}function c(e){return e===`experimental`||e===`beta`||e===`stable`||e===`deprecated`}function l(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function u(e){if(/defineCommand\s*\(/.test(e))return`command`;if(/defineQuery\s*\(/.test(e))return`query`;let t=a(e,`kind`);return t===`command`||t===`query`?t:`unknown`}export{n as extractEmittedEvents,r as extractPolicyRefs,i as extractTestRefs,e as inferSpecTypeFromFilePath,t as scanSpecSource};
@@ -1 +1 @@
1
- function e(e,d){let f=[],p=[];return/export\s+(const|let)\s+\w+/.test(e)||f.push(`No exported spec found`),d.includes(`.contracts.`)&&t(e,f,p),d.includes(`.event.`)&&a(e,f,p),d.includes(`.presentation.`)&&o(e,f,p),d.includes(`.workflow.`)&&s(e,f,p),d.includes(`.data-view.`)&&u(e,f,p),d.includes(`.migration.`)&&c(e,f,p),d.includes(`.telemetry.`)&&n(e,f,p),d.includes(`.experiment.`)&&r(e,f,p),d.includes(`.app-config.`)&&i(e,f,p),l(e,f,p),{valid:f.length===0,errors:f,warnings:p}}function t(e,t,n){/define(Command|Query)/.test(e)||t.push(`Missing defineCommand or defineQuery call`),e.includes(`meta:`)||t.push(`Missing meta section`),e.includes(`io:`)||t.push(`Missing io section`),e.includes(`policy:`)||t.push(`Missing policy section`),e.match(/name:\s*['"][^'"]+['"]/)||t.push(`Missing or invalid name field`),e.match(/version:\s*\d+/)||t.push(`Missing or invalid version field`),e.match(/kind:\s*['"](?:command|query)['"]/)||t.push(`Missing or invalid kind field (must be "command" or "query")`),e.includes(`acceptance:`)||n.push(`No acceptance scenarios defined`),e.includes(`examples:`)||n.push(`No examples provided`),e.includes(`TODO`)&&n.push(`Contains TODO items that need completion`)}function n(e,t,n){e.match(/:\s*TelemetrySpec\s*=/)||t.push(`Missing TelemetrySpec type annotation`),e.match(/meta:\s*{[\s\S]*name:/)||t.push(`TelemetrySpec.meta is required`),e.includes(`events:`)||t.push(`TelemetrySpec must declare events`),e.match(/privacy:\s*'(public|internal|pii|sensitive)'/)||n.push(`No explicit privacy classification found`)}function r(e,t,n){e.match(/:\s*ExperimentSpec\s*=/)||t.push(`Missing ExperimentSpec type annotation`),e.includes(`controlVariant`)||t.push(`ExperimentSpec must declare controlVariant`),e.includes(`variants:`)||t.push(`ExperimentSpec must declare variants`),e.match(/allocation:\s*{/)||n.push(`ExperimentSpec missing allocation configuration`)}function i(e,t,n){e.match(/:\s*AppBlueprintSpec\s*=/)||t.push(`Missing AppBlueprintSpec type annotation`),e.includes(`meta:`)||t.push(`AppBlueprintSpec must define meta`),e.includes(`appId`)||n.push(`AppBlueprint meta missing appId assignment`),e.includes(`capabilities`)||n.push(`App blueprint spec does not declare capabilities`)}function a(e,t,n){e.includes(`defineEvent`)||t.push(`Missing defineEvent call`),e.match(/name:\s*['"][^'"]+['"]/)||t.push(`Missing or invalid name field`),e.match(/version:\s*\d+/)||t.push(`Missing or invalid version field`),e.includes(`payload:`)||t.push(`Missing payload field`);let r=e.match(/name:\s*['"]([^'"]+)['"]/);r?.[1]&&((r[1].split(`.`).pop()??``).match(/(ed|created|updated|deleted|completed)$/i)||n.push(`Event name should use past tense (e.g., "created", "updated")`))}function o(e,t,n){e.match(/:\s*PresentationSpec\s*=/)||t.push(`Missing PresentationSpec type annotation`),e.includes(`meta:`)||t.push(`Missing meta section`),e.includes(`content:`)||t.push(`Missing content section`),e.match(/kind:\s*['"](?:web_component|markdown|data)['"]/)||t.push(`Missing or invalid kind field`)}function s(e,t,n){e.match(/:\s*WorkflowSpec\s*=/)||t.push(`Missing WorkflowSpec type annotation`),e.includes(`definition:`)||t.push(`Missing definition section`),e.includes(`steps:`)||t.push(`Workflow must declare steps`),e.includes(`transitions:`)||n.push(`No transitions declared; workflow will complete after first step.`),e.match(/title:\s*['"][^'"]+['"]/)||n.push(`Missing workflow title`),e.match(/domain:\s*['"][^'"]+['"]/)||n.push(`Missing domain field`),e.includes(`TODO`)&&n.push(`Contains TODO items that need completion`)}function c(e,t,n){e.match(/:\s*MigrationSpec\s*=/)||t.push(`Missing MigrationSpec type annotation`),e.includes(`plan:`)?e.includes(`up:`)||t.push(`Migration must define at least one up step`):t.push(`Missing plan section`),e.match(/name:\s*['"][^'"]+['"]/)||t.push(`Missing or invalid migration name`),e.match(/version:\s*\d+/)||t.push(`Missing or invalid migration version`),e.includes(`TODO`)&&n.push(`Contains TODO items that need completion`)}function l(e,t,n){e.includes(`SchemaModel`)&&!e.includes(`from '@lssm/lib.schema'`)&&t.push(`Missing import for SchemaModel from @lssm/lib.schema`),e.includes(`from '@lssm/lib.contracts'`)||t.push(`Missing import from @lssm/lib.contracts`);let r=e.match(/owners:\s*\[(.*?)\]/s);r?.[1]&&(r[1].includes(`@`)||n.push(`Owners should start with @ (e.g., "@team")`)),e.match(/stability:\s*['"](?:experimental|beta|stable|deprecated)['"]/)||n.push(`Missing or invalid stability field`)}function u(e,t,n){e.match(/:\s*DataViewSpec\s*=/)||t.push(`Missing DataViewSpec type annotation`),e.includes(`meta:`)||t.push(`Missing meta section`),e.includes(`source:`)||t.push(`Missing source section`),e.includes(`view:`)||t.push(`Missing view section`),e.match(/kind:\s*['"](list|table|detail|grid)['"]/)||t.push(`Missing or invalid view.kind (list/table/detail/grid)`),e.match(/fields:\s*\[/)||t.push(`No fields defined for data view`)}export{e as validateSpecStructure};
1
+ function e(e,d){let f=[],p=[];return/export\s+(const|let)\s+\w+/.test(e)||f.push(`No exported spec found`),d.includes(`.contracts.`)&&t(e,f,p),d.includes(`.event.`)&&a(e,f,p),d.includes(`.presentation.`)&&o(e,f,p),d.includes(`.workflow.`)&&s(e,f,p),d.includes(`.data-view.`)&&u(e,f,p),d.includes(`.migration.`)&&c(e,f,p),d.includes(`.telemetry.`)&&n(e,f,p),d.includes(`.experiment.`)&&r(e,f,p),d.includes(`.app-config.`)&&i(e,f,p),l(e,f,p),{valid:f.length===0,errors:f,warnings:p}}function t(e,t,n){/define(Command|Query)/.test(e)||t.push(`Missing defineCommand or defineQuery call`),e.includes(`meta:`)||t.push(`Missing meta section`),e.includes(`io:`)||t.push(`Missing io section`),e.includes(`policy:`)||t.push(`Missing policy section`),e.match(/name:\s*['"][^'"]+['"]/)||t.push(`Missing or invalid name field`),e.match(/version:\s*\d+/)||t.push(`Missing or invalid version field`);let r=/defineCommand\s*\(/.test(e),i=/defineQuery\s*\(/.test(e),a=/kind:\s*['"](?:command|query)['"]/.test(e);!r&&!i&&!a&&t.push(`Missing kind: use defineCommand(), defineQuery(), or explicit kind field`),e.includes(`acceptance:`)||n.push(`No acceptance scenarios defined`),e.includes(`examples:`)||n.push(`No examples provided`),e.includes(`TODO`)&&n.push(`Contains TODO items that need completion`)}function n(e,t,n){e.match(/:\s*TelemetrySpec\s*=/)||t.push(`Missing TelemetrySpec type annotation`),e.match(/meta:\s*{[\s\S]*name:/)||t.push(`TelemetrySpec.meta is required`),e.includes(`events:`)||t.push(`TelemetrySpec must declare events`),e.match(/privacy:\s*'(public|internal|pii|sensitive)'/)||n.push(`No explicit privacy classification found`)}function r(e,t,n){e.match(/:\s*ExperimentSpec\s*=/)||t.push(`Missing ExperimentSpec type annotation`),e.includes(`controlVariant`)||t.push(`ExperimentSpec must declare controlVariant`),e.includes(`variants:`)||t.push(`ExperimentSpec must declare variants`),e.match(/allocation:\s*{/)||n.push(`ExperimentSpec missing allocation configuration`)}function i(e,t,n){e.match(/:\s*AppBlueprintSpec\s*=/)||t.push(`Missing AppBlueprintSpec type annotation`),e.includes(`meta:`)||t.push(`AppBlueprintSpec must define meta`),e.includes(`appId`)||n.push(`AppBlueprint meta missing appId assignment`),e.includes(`capabilities`)||n.push(`App blueprint spec does not declare capabilities`)}function a(e,t,n){e.includes(`defineEvent`)||t.push(`Missing defineEvent call`),e.match(/name:\s*['"][^'"]+['"]/)||t.push(`Missing or invalid name field`),e.match(/version:\s*\d+/)||t.push(`Missing or invalid version field`),e.includes(`payload:`)||t.push(`Missing payload field`);let r=e.match(/name:\s*['"]([^'"]+)['"]/);r?.[1]&&((r[1].split(`.`).pop()??``).match(/(ed|created|updated|deleted|completed)$/i)||n.push(`Event name should use past tense (e.g., "created", "updated")`))}function o(e,t,n){e.match(/:\s*PresentationSpec\s*=/)||t.push(`Missing PresentationSpec type annotation`),e.includes(`meta:`)||t.push(`Missing meta section`),e.includes(`content:`)||t.push(`Missing content section`),e.match(/kind:\s*['"](?:web_component|markdown|data)['"]/)||t.push(`Missing or invalid kind field`)}function s(e,t,n){e.match(/:\s*WorkflowSpec\s*=/)||t.push(`Missing WorkflowSpec type annotation`),e.includes(`definition:`)||t.push(`Missing definition section`),e.includes(`steps:`)||t.push(`Workflow must declare steps`),e.includes(`transitions:`)||n.push(`No transitions declared; workflow will complete after first step.`),e.match(/title:\s*['"][^'"]+['"]/)||n.push(`Missing workflow title`),e.match(/domain:\s*['"][^'"]+['"]/)||n.push(`Missing domain field`),e.includes(`TODO`)&&n.push(`Contains TODO items that need completion`)}function c(e,t,n){e.match(/:\s*MigrationSpec\s*=/)||t.push(`Missing MigrationSpec type annotation`),e.includes(`plan:`)?e.includes(`up:`)||t.push(`Migration must define at least one up step`):t.push(`Missing plan section`),e.match(/name:\s*['"][^'"]+['"]/)||t.push(`Missing or invalid migration name`),e.match(/version:\s*\d+/)||t.push(`Missing or invalid migration version`),e.includes(`TODO`)&&n.push(`Contains TODO items that need completion`)}function l(e,t,n){e.includes(`SchemaModel`)&&!e.includes(`from '@lssm/lib.schema'`)&&t.push(`Missing import for SchemaModel from @lssm/lib.schema`),e.includes(`from '@lssm/lib.contracts'`)||t.push(`Missing import from @lssm/lib.contracts`);let r=e.match(/owners:\s*\[(.*?)\]/s);r?.[1]&&(r[1].includes(`@`)||n.push(`Owners should start with @ (e.g., "@team")`)),e.match(/stability:\s*['"](?:experimental|beta|stable|deprecated)['"]/)||n.push(`Missing or invalid stability field`)}function u(e,t,n){e.match(/:\s*DataViewSpec\s*=/)||t.push(`Missing DataViewSpec type annotation`),e.includes(`meta:`)||t.push(`Missing meta section`),e.includes(`source:`)||t.push(`Missing source section`),e.includes(`view:`)||t.push(`Missing view section`),e.match(/kind:\s*['"](list|table|detail|grid)['"]/)||t.push(`Missing or invalid view.kind (list/table/detail/grid)`),e.match(/fields:\s*\[/)||t.push(`No fields defined for data view`)}export{e as validateSpecStructure};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/module.contractspec-workspace",
3
- "version": "0.0.0-canary-20251216031832",
3
+ "version": "0.0.0-canary-20251216035145",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",