@fulmenhq/tsfulmen 0.2.0 → 0.2.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.
- package/CHANGELOG.md +42 -0
- package/README.md +60 -7
- package/config/crucible-ts/agentic/roles/README.md +3 -3
- package/config/crucible-ts/library/fulencode/fixtures/README.md +18 -0
- package/config/crucible-ts/library/fulencode/fixtures/bom/bom.yaml +14 -0
- package/config/crucible-ts/library/fulencode/fixtures/detection/detection.yaml +12 -0
- package/config/crucible-ts/library/fulencode/fixtures/invalid-encodings/base64.yaml +10 -0
- package/config/crucible-ts/library/fulencode/fixtures/normalization/text-safe.yaml +10 -0
- package/config/crucible-ts/library/fulencode/fixtures/telemetry/telemetry-test-cases.yaml +24 -0
- package/config/crucible-ts/library/fulencode/fixtures/valid-encodings/base64.yaml +11 -0
- package/config/crucible-ts/taxonomy/library/platform-modules/v1.0.0/modules.yaml +2 -2
- package/config/crucible-ts/taxonomy/metrics.yaml +79 -1
- package/dist/appidentity/index.d.ts +1 -1
- package/dist/appidentity/index.js +122 -56
- package/dist/appidentity/index.js.map +1 -1
- package/dist/config/index.js +122 -56
- package/dist/config/index.js.map +1 -1
- package/dist/crucible/index.js +122 -56
- package/dist/crucible/index.js.map +1 -1
- package/dist/errors/index.d.ts +1 -1
- package/dist/errors/index.js +122 -56
- package/dist/errors/index.js.map +1 -1
- package/dist/foundry/index.js +122 -56
- package/dist/foundry/index.js.map +1 -1
- package/dist/fulencode/index.d.ts +102 -0
- package/dist/fulencode/index.js +806 -0
- package/dist/fulencode/index.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +123 -57
- package/dist/index.js.map +1 -1
- package/dist/pathfinder/index.d.ts +1 -1
- package/dist/pathfinder/index.js +122 -56
- package/dist/pathfinder/index.js.map +1 -1
- package/dist/reports/license-inventory.csv +7 -6
- package/dist/schema/index.d.ts +2 -2
- package/dist/schema/index.js +122 -56
- package/dist/schema/index.js.map +1 -1
- package/dist/signals/index.js +122 -56
- package/dist/signals/index.js.map +1 -1
- package/dist/telemetry/http/index.js +122 -56
- package/dist/telemetry/http/index.js.map +1 -1
- package/dist/telemetry/index.d.ts +1 -1
- package/dist/telemetry/index.js +122 -56
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/prometheus/index.d.ts +1 -1
- package/dist/telemetry/prometheus/index.js +122 -56
- package/dist/telemetry/prometheus/index.js.map +1 -1
- package/dist/{types-BJswWpQC.d.ts → types-DdoeE7F5.d.ts} +1 -1
- package/package.json +7 -2
- package/schemas/crucible-ts/library/fulencode/v1.0.0/README.md +37 -0
- package/schemas/crucible-ts/library/fulencode/v1.0.0/bom-result.schema.json +48 -0
- package/schemas/crucible-ts/library/fulencode/v1.0.0/decode-options.schema.json +60 -0
- package/schemas/crucible-ts/library/fulencode/v1.0.0/decoding-result.schema.json +70 -0
- package/schemas/crucible-ts/library/fulencode/v1.0.0/detect-options.schema.json +25 -0
- package/schemas/crucible-ts/library/fulencode/v1.0.0/detection-result.schema.json +57 -0
- package/schemas/crucible-ts/library/fulencode/v1.0.0/encode-options.schema.json +71 -0
- package/schemas/crucible-ts/library/fulencode/v1.0.0/encoding-result.schema.json +57 -0
- package/schemas/crucible-ts/library/fulencode/v1.0.0/fulencode-config.schema.json +8 -4
- package/schemas/crucible-ts/library/fulencode/v1.0.0/fulencode-error.schema.json +66 -0
- package/schemas/crucible-ts/library/fulencode/v1.0.0/normalization-result.schema.json +73 -0
- package/schemas/crucible-ts/library/fulencode/v1.0.0/normalize-options.schema.json +44 -0
- package/schemas/crucible-ts/meta/README.md +38 -2
- package/schemas/crucible-ts/meta/draft-04/schema.json +222 -0
- package/schemas/crucible-ts/meta/draft-06/schema.json +218 -0
- package/schemas/crucible-ts/meta/draft-2019-09/meta/applicator.json +93 -0
- package/schemas/crucible-ts/meta/draft-2019-09/meta/content.json +21 -0
- package/schemas/crucible-ts/meta/draft-2019-09/meta/core.json +58 -0
- package/schemas/crucible-ts/meta/draft-2019-09/meta/format.json +15 -0
- package/schemas/crucible-ts/meta/draft-2019-09/meta/meta-data.json +35 -0
- package/schemas/crucible-ts/meta/draft-2019-09/meta/validation.json +119 -0
- package/schemas/crucible-ts/meta/draft-2019-09/offline.schema.json +148 -0
- package/schemas/crucible-ts/meta/draft-2019-09/schema.json +62 -0
- package/schemas/crucible-ts/meta/fixtures/draft-04-sample.json +16 -0
- package/schemas/crucible-ts/meta/fixtures/draft-06-sample.json +16 -0
- package/schemas/crucible-ts/meta/fixtures/draft-07-sample.json +34 -0
- package/schemas/crucible-ts/meta/fixtures/draft-2019-09-sample.json +21 -0
- package/schemas/crucible-ts/meta/fixtures/draft-2020-12-sample.json +21 -0
- package/schemas/crucible-ts/taxonomy/library/fulencode/normalization-profiles/v1.0.0/profiles.yaml +16 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/PROVENANCE.md +64 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/config/classifiers/dimensions/access-tier.dimension.json +103 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/config/classifiers/dimensions/retention-lifecycle.dimension.json +103 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/config/classifiers/dimensions/schema-stability.dimension.json +100 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/config/classifiers/dimensions/sensitivity.dimension.json +130 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/config/classifiers/dimensions/velocity-mode.dimension.json +79 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/config/classifiers/dimensions/volatility.dimension.json +72 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/config/classifiers/dimensions/volume-tier.dimension.json +66 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/docs/catalog/classifiers/README.md +29 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/access-tier-classification.md +163 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/classifiers-framework.md +157 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/data-sensitivity-classification.md +259 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/retention-lifecycle-classification.md +200 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/schema-stability-classification.md +205 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/velocity-mode-classification.md +222 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/volatility-classification.md +209 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/volume-tier-classification.md +200 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/schemas/ailink/v0/README.md +48 -0
- package/schemas/crucible-ts/upstream/3leaps/{ailink → crucible/schemas/ailink}/v0/prompt.schema.json +4 -18
- package/schemas/crucible-ts/upstream/3leaps/{ailink → crucible/schemas/ailink}/v0/search-response.schema.json +7 -37
- package/schemas/crucible-ts/upstream/3leaps/crucible/schemas/classifiers/v0/dimension-definition.schema.json +247 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/schemas/classifiers/v0/sensitivity-level.schema.json +67 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/schemas/foundation/v0/error-response.schema.json +59 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/schemas/foundation/v0/lifecycle-phases.data.json +102 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/schemas/foundation/v0/lifecycle-phases.schema.json +101 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/schemas/foundation/v0/release-phase.schema.json +18 -0
- package/schemas/crucible-ts/upstream/3leaps/crucible/schemas/foundation/v0/types.schema.json +177 -0
- package/schemas/crucible-ts/upstream/3leaps/PROVENANCE.md +0 -43
- /package/schemas/crucible-ts/upstream/3leaps/{agentic → crucible/schemas/agentic}/v0/role-prompt.schema.json +0 -0
package/dist/errors/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { F as FulmenError, a as FulmenErrorData, b as FulmenErrorOptions, L as LEVEL_TO_SEVERITY, S as SEVERITY_LEVELS, k as Severity, m as SeverityLevel, n as SeverityName, f as compareSeverity, e as extractErrorMessage, d as extractStackTrace, g as getDefaultSeverity, i as isFulmenError, c as isFulmenErrorData, h as isSeverityLevel, j as isSeverityName, l as levelToSeverity, s as serializeError, o as severityToLevel } from '../fulmen-error-B_kX8jSC.js';
|
|
2
|
-
import { A as AjvError } from '../types-
|
|
2
|
+
import { A as AjvError } from '../types-DdoeE7F5.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Correlation ID generation and validation for error tracking
|
package/dist/errors/index.js
CHANGED
|
@@ -6,6 +6,9 @@ import { dirname, extname, join, relative } from 'path';
|
|
|
6
6
|
import { fileURLToPath } from 'url';
|
|
7
7
|
import glob from 'fast-glob';
|
|
8
8
|
import Ajv from 'ajv';
|
|
9
|
+
import Ajv2019 from 'ajv/dist/2019';
|
|
10
|
+
import Ajv2020 from 'ajv/dist/2020';
|
|
11
|
+
import AjvDraft04 from 'ajv-draft-04';
|
|
9
12
|
import addFormats from 'ajv-formats';
|
|
10
13
|
import { Readable } from 'stream';
|
|
11
14
|
import picomatch from 'picomatch';
|
|
@@ -1622,20 +1625,14 @@ async function loadMetaSchema(draft) {
|
|
|
1622
1625
|
const content = await readFile(metaSchemaPath, "utf-8");
|
|
1623
1626
|
return JSON.parse(content);
|
|
1624
1627
|
}
|
|
1625
|
-
async function loadVocabularySchemas() {
|
|
1628
|
+
async function loadVocabularySchemas(draft) {
|
|
1629
|
+
if (draft !== "draft-2019-09" && draft !== "draft-2020-12") {
|
|
1630
|
+
return [];
|
|
1631
|
+
}
|
|
1626
1632
|
const __filename3 = fileURLToPath(import.meta.url);
|
|
1627
1633
|
const __dirname4 = dirname(__filename3);
|
|
1628
|
-
const vocabDir = join(
|
|
1629
|
-
|
|
1630
|
-
"..",
|
|
1631
|
-
"..",
|
|
1632
|
-
"schemas",
|
|
1633
|
-
"crucible-ts",
|
|
1634
|
-
"meta",
|
|
1635
|
-
"draft-2020-12",
|
|
1636
|
-
"meta"
|
|
1637
|
-
);
|
|
1638
|
-
const vocabFiles = [
|
|
1634
|
+
const vocabDir = join(__dirname4, "..", "..", "schemas", "crucible-ts", "meta", draft, "meta");
|
|
1635
|
+
const vocabFiles = draft === "draft-2020-12" ? [
|
|
1639
1636
|
"core.json",
|
|
1640
1637
|
"applicator.json",
|
|
1641
1638
|
"unevaluated.json",
|
|
@@ -1643,6 +1640,13 @@ async function loadVocabularySchemas() {
|
|
|
1643
1640
|
"meta-data.json",
|
|
1644
1641
|
"format-annotation.json",
|
|
1645
1642
|
"content.json"
|
|
1643
|
+
] : [
|
|
1644
|
+
"core.json",
|
|
1645
|
+
"applicator.json",
|
|
1646
|
+
"validation.json",
|
|
1647
|
+
"meta-data.json",
|
|
1648
|
+
"format.json",
|
|
1649
|
+
"content.json"
|
|
1646
1650
|
];
|
|
1647
1651
|
const schemas = [];
|
|
1648
1652
|
for (const file of vocabFiles) {
|
|
@@ -1697,47 +1701,68 @@ async function loadReferencedSchema(uri) {
|
|
|
1697
1701
|
}
|
|
1698
1702
|
return JSON.parse(content);
|
|
1699
1703
|
}
|
|
1700
|
-
function
|
|
1701
|
-
if (!
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
}
|
|
1711
|
-
addFormats(ajvInstance, {
|
|
1712
|
-
mode: "fast",
|
|
1713
|
-
formats: ["date-time", "email", "hostname", "ipv4", "ipv6", "uri", "uri-reference"]
|
|
1714
|
-
});
|
|
1715
|
-
metaschemaReady = Promise.all([loadVocabularySchemas(), loadMetaSchema("draft-2020-12")]).then(([vocabSchemas, metaSchema]) => {
|
|
1716
|
-
if (ajvInstance) {
|
|
1717
|
-
for (const vocabSchema of vocabSchemas) {
|
|
1718
|
-
try {
|
|
1719
|
-
ajvInstance.addMetaSchema(vocabSchema);
|
|
1720
|
-
} catch {
|
|
1721
|
-
}
|
|
1722
|
-
}
|
|
1723
|
-
ajvInstance.addMetaSchema(metaSchema);
|
|
1724
|
-
}
|
|
1725
|
-
}).catch((error) => {
|
|
1726
|
-
throw new Error(`Failed to load metaschemas: ${error}`);
|
|
1727
|
-
});
|
|
1704
|
+
function detectDialect(schema) {
|
|
1705
|
+
if (schema && typeof schema === "object" && !Array.isArray(schema)) {
|
|
1706
|
+
const maybeSchema = schema;
|
|
1707
|
+
const declared = maybeSchema.$schema;
|
|
1708
|
+
if (typeof declared === "string") {
|
|
1709
|
+
if (declared.includes("draft-04")) return "draft-04";
|
|
1710
|
+
if (declared.includes("draft-06")) return "draft-06";
|
|
1711
|
+
if (declared.includes("draft-07")) return "draft-07";
|
|
1712
|
+
if (declared.includes("draft/2019-09")) return "draft-2019-09";
|
|
1713
|
+
if (declared.includes("draft/2020-12")) return "draft-2020-12";
|
|
1714
|
+
}
|
|
1728
1715
|
}
|
|
1729
|
-
return
|
|
1716
|
+
return "draft-2020-12";
|
|
1717
|
+
}
|
|
1718
|
+
function createAjv(dialect) {
|
|
1719
|
+
const AjvCtor = dialect === "draft-2020-12" ? Ajv2020 : dialect === "draft-2019-09" ? Ajv2019 : dialect === "draft-04" ? AjvDraft04 : Ajv;
|
|
1720
|
+
const ajv = new AjvCtor({
|
|
1721
|
+
strict: false,
|
|
1722
|
+
allErrors: true,
|
|
1723
|
+
verbose: true,
|
|
1724
|
+
// Allow schemas with $id to be added without replacing existing ones
|
|
1725
|
+
addUsedSchema: false,
|
|
1726
|
+
// draft-04 uses "id"; later drafts use "$id"
|
|
1727
|
+
schemaId: dialect === "draft-04" ? "id" : "$id",
|
|
1728
|
+
// Enable async schema loading for YAML references
|
|
1729
|
+
loadSchema: loadReferencedSchema
|
|
1730
|
+
});
|
|
1731
|
+
addFormats(ajv, {
|
|
1732
|
+
mode: "fast",
|
|
1733
|
+
formats: ["date-time", "email", "hostname", "ipv4", "ipv6", "uri", "uri-reference"]
|
|
1734
|
+
});
|
|
1735
|
+
return ajv;
|
|
1736
|
+
}
|
|
1737
|
+
async function getAjv(dialect) {
|
|
1738
|
+
const existing = ajvInstances.get(dialect);
|
|
1739
|
+
if (existing) {
|
|
1740
|
+
const ready = metaschemaReady.get(dialect);
|
|
1741
|
+
if (ready) await ready;
|
|
1742
|
+
return existing;
|
|
1743
|
+
}
|
|
1744
|
+
const ajv = createAjv(dialect);
|
|
1745
|
+
ajvInstances.set(dialect, ajv);
|
|
1746
|
+
const readyPromise = Promise.all([loadVocabularySchemas(dialect), loadMetaSchema(dialect)]).then(([vocabSchemas, metaSchema]) => {
|
|
1747
|
+
for (const vocabSchema of vocabSchemas) {
|
|
1748
|
+
try {
|
|
1749
|
+
ajv.addMetaSchema(vocabSchema);
|
|
1750
|
+
} catch {
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
try {
|
|
1754
|
+
ajv.addMetaSchema(metaSchema);
|
|
1755
|
+
} catch {
|
|
1756
|
+
}
|
|
1757
|
+
}).catch((error) => {
|
|
1758
|
+
throw new Error(`Failed to load metaschemas (${dialect}): ${error}`);
|
|
1759
|
+
});
|
|
1760
|
+
metaschemaReady.set(dialect, readyPromise);
|
|
1761
|
+
await readyPromise;
|
|
1762
|
+
return ajv;
|
|
1730
1763
|
}
|
|
1731
1764
|
async function compileSchema(schema, options = {}) {
|
|
1732
|
-
const
|
|
1733
|
-
if (metaschemaReady) {
|
|
1734
|
-
await metaschemaReady;
|
|
1735
|
-
}
|
|
1736
|
-
const cacheKey = typeof schema === "string" ? schema : JSON.stringify(schema);
|
|
1737
|
-
const cached = schemaCache.get(cacheKey);
|
|
1738
|
-
if (cached !== void 0) {
|
|
1739
|
-
return cached;
|
|
1740
|
-
}
|
|
1765
|
+
const baseKey = typeof schema === "string" ? schema : JSON.stringify(schema);
|
|
1741
1766
|
let parsedSchema;
|
|
1742
1767
|
if (typeof schema === "string") {
|
|
1743
1768
|
try {
|
|
@@ -1755,18 +1780,27 @@ async function compileSchema(schema, options = {}) {
|
|
|
1755
1780
|
} else {
|
|
1756
1781
|
parsedSchema = schema;
|
|
1757
1782
|
}
|
|
1783
|
+
const dialect = detectDialect(parsedSchema);
|
|
1784
|
+
const ajv = await getAjv(dialect);
|
|
1785
|
+
const cacheKey = `${dialect}:${baseKey}`;
|
|
1786
|
+
const cached = schemaCache.get(cacheKey);
|
|
1787
|
+
if (cached !== void 0) {
|
|
1788
|
+
return cached;
|
|
1789
|
+
}
|
|
1758
1790
|
try {
|
|
1759
1791
|
if (options.aliases && options.aliases.length > 0) {
|
|
1760
1792
|
for (const alias of options.aliases) {
|
|
1761
1793
|
if (alias && ajv.getSchema(alias) === void 0) {
|
|
1762
1794
|
try {
|
|
1763
|
-
|
|
1795
|
+
if (typeof parsedSchema === "object" && parsedSchema !== null) {
|
|
1796
|
+
ajv.addSchema(parsedSchema, alias);
|
|
1797
|
+
}
|
|
1764
1798
|
} catch {
|
|
1765
1799
|
}
|
|
1766
1800
|
}
|
|
1767
1801
|
}
|
|
1768
1802
|
}
|
|
1769
|
-
const validator = await ajv.compileAsync(parsedSchema);
|
|
1803
|
+
const validator = typeof parsedSchema === "boolean" ? ajv.compile(parsedSchema) : await ajv.compileAsync(parsedSchema);
|
|
1770
1804
|
schemaCache.set(cacheKey, validator);
|
|
1771
1805
|
return validator;
|
|
1772
1806
|
} catch (error) {
|
|
@@ -1836,8 +1870,39 @@ async function validateFile(filePath, validator) {
|
|
|
1836
1870
|
}
|
|
1837
1871
|
async function validateSchema(schema) {
|
|
1838
1872
|
try {
|
|
1839
|
-
|
|
1840
|
-
|
|
1873
|
+
let parsedSchema;
|
|
1874
|
+
if (typeof schema === "string") {
|
|
1875
|
+
try {
|
|
1876
|
+
parsedSchema = JSON.parse(schema);
|
|
1877
|
+
} catch {
|
|
1878
|
+
parsedSchema = parse(schema);
|
|
1879
|
+
}
|
|
1880
|
+
} else if (Buffer.isBuffer(schema)) {
|
|
1881
|
+
const content = schema.toString("utf-8");
|
|
1882
|
+
try {
|
|
1883
|
+
parsedSchema = JSON.parse(content);
|
|
1884
|
+
} catch {
|
|
1885
|
+
parsedSchema = parse(content);
|
|
1886
|
+
}
|
|
1887
|
+
} else {
|
|
1888
|
+
parsedSchema = schema;
|
|
1889
|
+
}
|
|
1890
|
+
const dialect = detectDialect(parsedSchema);
|
|
1891
|
+
const ajv = await getAjv(dialect);
|
|
1892
|
+
const metaValid = ajv.validateSchema(parsedSchema);
|
|
1893
|
+
if (!metaValid && ajv.errors) {
|
|
1894
|
+
const diagnostics = ajv.errors.map(
|
|
1895
|
+
(error) => createDiagnostic(
|
|
1896
|
+
error.instancePath || "",
|
|
1897
|
+
error.message || "Schema meta-validation failed",
|
|
1898
|
+
error.keyword || "unknown",
|
|
1899
|
+
"ERROR",
|
|
1900
|
+
"ajv"
|
|
1901
|
+
)
|
|
1902
|
+
);
|
|
1903
|
+
return { valid: false, diagnostics, source: "ajv" };
|
|
1904
|
+
}
|
|
1905
|
+
await compileSchema(parsedSchema);
|
|
1841
1906
|
return {
|
|
1842
1907
|
valid: true,
|
|
1843
1908
|
diagnostics: [],
|
|
@@ -1908,14 +1973,15 @@ async function validateFileBySchemaId(filePath, schemaId, registryOptions) {
|
|
|
1908
1973
|
throw error;
|
|
1909
1974
|
}
|
|
1910
1975
|
}
|
|
1911
|
-
var
|
|
1976
|
+
var ajvInstances, metaschemaReady, schemaCache;
|
|
1912
1977
|
var init_validator = __esm({
|
|
1913
1978
|
"src/schema/validator.ts"() {
|
|
1914
1979
|
init_telemetry();
|
|
1915
1980
|
init_errors();
|
|
1916
1981
|
init_registry();
|
|
1917
1982
|
init_utils();
|
|
1918
|
-
|
|
1983
|
+
ajvInstances = /* @__PURE__ */ new Map();
|
|
1984
|
+
metaschemaReady = /* @__PURE__ */ new Map();
|
|
1919
1985
|
schemaCache = /* @__PURE__ */ new Map();
|
|
1920
1986
|
}
|
|
1921
1987
|
});
|