@things-factory/figure-library 10.1.134 → 10.1.141
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/dist-client/pages/figure-library-page.js +2 -1
- package/dist-client/pages/figure-library-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/figure-library-release/figure-library-release.d.ts +9 -2
- package/dist-server/service/figure-library-release/figure-library-release.js +13 -2
- package/dist-server/service/figure-library-release/figure-library-release.js.map +1 -1
- package/dist-server/service/figure-library-resolver.d.ts +1 -0
- package/dist-server/service/figure-library-resolver.js +30 -7
- package/dist-server/service/figure-library-resolver.js.map +1 -1
- package/dist-server/service/index.d.ts +2 -1
- package/dist-server/service/index.js +1 -0
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/library/carriers.d.ts +43 -0
- package/dist-server/service/library/carriers.js +59 -0
- package/dist-server/service/library/carriers.js.map +1 -0
- package/dist-server/service/library/derived.d.ts +11 -3
- package/dist-server/service/library/derived.js +12 -4
- package/dist-server/service/library/derived.js.map +1 -1
- package/dist-server/service/library/inspection.d.ts +7 -0
- package/dist-server/service/library/inspection.js +6 -1
- package/dist-server/service/library/inspection.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/translations/en.json +9 -0
- package/translations/ko.json +9 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspection.js","sourceRoot":"","sources":["../../../server/service/library/inspection.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { figureContractChanges, parseFigureAsset } from '@hatiolab/figure-model'\nimport { Board } from '@things-factory/board-service'\n\nimport { FigureLibraryRelease } from '../figure-library-release/figure-library-release'\nimport { FigureTypeMapState } from '../figure-type-map/figure-type-map'\nimport { derivedIsStale, derivedOfSource } from './derived'\nimport { figureNodesOf } from './board-walk'\nimport { libraryFileOf, libraryFiles, sha256Of, type LibraryFiles } from './library-files'\nimport { entriesOf, mapOfState } from './type-map'\n\ntype Domain = { id: string }\n\n/** How much of the domain's boards a line touches. */\nexport interface Reach {\n boards: number\n nodes: number\n}\n\n/** Brings a row's derived values up to this server's kernel, writing them back when they changed. */\nexport async function freshen(tx: EntityManager, release: FigureLibraryRelease): Promise<FigureLibraryRelease> {\n if (!derivedIsStale(release)) return release\n const derived = derivedOfSource(release.source)\n await tx.getRepository(FigureLibraryRelease).update({ id: release.id }, derived)\n return Object.assign(release, derived)\n}\n\n/** The dependency files of a release that are missing or whose bytes no longer hash to their name. */\nexport async function dependencyFaults(\n tx: EntityManager,\n release: FigureLibraryRelease,\n files: LibraryFiles = libraryFiles()\n): Promise<{ hash: string; fault: 'missing' | 'corrupt' }[]> {\n const faults: { hash: string; fault: 'missing' | 'corrupt' }[] = []\n for (const dependency of release.dependencies ?? []) {\n const attachment = await libraryFileOf(tx, release.domainId!, dependency.hash)\n if (!attachment) {\n faults.push({ hash: dependency.hash, fault: 'missing' })\n continue\n }\n try {\n const bytes = await files.read(attachment.path)\n if (sha256Of(bytes) !== dependency.hash) faults.push({ hash: dependency.hash, fault: 'corrupt' })\n } catch {\n faults.push({ hash: dependency.hash, fault: 'missing' })\n }\n }\n return faults\n}\n\n/** Figure nodes across the domain's boards: per name, how many boards and nodes use it. */\nexport async function reachOf(tx: EntityManager, domain: Domain): Promise<Map<string, Reach>> {\n const reach = new Map<string, Reach>()\n const boards = await tx.getRepository(Board).find({ where: { domain: { id: domain.id } }, select: { id: true, model: true } })\n for (const board of boards) {\n for (const [name, nodes] of figureNodesOf(board.model)) {\n const now = reach.get(name) ?? { boards: 0, nodes: 0 }\n reach.set(name, { boards: now.boards + 1, nodes: now.nodes + nodes })\n }\n }\n return reach\n}\n\n/**\n * The check before activation (ADR-0114 결정 8): the candidate against the active map and every board of the domain.\n * It reports and never blocks; the activation screen shows it and asks to confirm.\n */\nexport async function typeMapCheck(tx: EntityManager, domain: Domain, files?: LibraryFiles) {\n const candidate = await mapOfState(tx, domain, FigureTypeMapState.CANDIDATE)\n if (!candidate) return null\n const active = await mapOfState(tx, domain, FigureTypeMapState.ACTIVE)\n\n const next = new Map((await entriesOf(tx, candidate)).map(line => [line.name, line.release!]))\n const now = new Map(active ? (await entriesOf(tx, active)).map(line => [line.name, line.release!]) : [])\n const reach = await reachOf(tx, domain)\n const at = (name: string): Reach => reach.get(name) ?? { boards: 0, nodes: 0 }\n\n const missing = [...reach.keys()].filter(name => !next.has(name)).map(name => ({ name, ...at(name) }))\n const added = [...next.keys()].filter(name => !now.has(name)).map(name => ({ name, ref: next.get(name)!.ref, ...at(name) }))\n const changed = []\n for (const [name, release] of next) {\n const before = now.get(name)\n if (!before || before.id === release.id) continue\n changed.push({ name, from: before.ref, to: release.ref, contract: contractOf(before, release), ...at(name) })\n }\n const deprecated = []\n const unsupported = []\n const dependencies = []\n for (const [name, release] of next) {\n const fresh = await freshen(tx, release)\n if (fresh.deprecated) deprecated.push({ name, ref: fresh.ref, supersededBy: fresh.supersededBy ?? null, ...at(name) })\n if (!fresh.formatSupported) unsupported.push({ name, ref: fresh.ref, assetFormat: fresh.assetFormat, ...at(name) })\n const faults = await dependencyFaults(tx, fresh, files)\n if (faults.length) dependencies.push({ name, ref: fresh.ref, faults, ...at(name) })\n }\n\n return {\n candidate: { version: candidate.version, revision: candidate.revision },\n active: active ? { version: active.version, revision: active.revision } : null,\n missing,\n added,\n changed,\n deprecated,\n unsupported,\n dependencies\n }\n}\n\n/** The contract changes between two releases, or `uncheckable` when this server cannot read either. */\nfunction contractOf(before: FigureLibraryRelease, after: FigureLibraryRelease) {\n try {\n return { checked: true, changes: figureContractChanges(parseFigureAsset(before.source), parseFigureAsset(after.source)) }\n } catch {\n return { checked: false, changes: [] }\n }\n}\n\nexport type RequirementStatus = 'drawn' | 'not-in-type-map' | 'release-unavailable' | 'dependency-missing' | 'format-unsupported'\n\n/**\n * What one board needs from the active map (ADR-0114 결정 8): each figure it holds, its status and node count. A\n * figure not in the library has dependencies this server cannot know.\n */\nexport async function boardRequirements(tx: EntityManager, domain: Domain, boardId: string, files?: LibraryFiles) {\n const board = await tx.getRepository(Board).findOne({ where: { id: boardId, domain: { id: domain.id } }, select: { id: true, model: true } })\n if (!board) return null\n const active = await mapOfState(tx, domain, FigureTypeMapState.ACTIVE)\n const lines = new Map(active ? (await entriesOf(tx, active)).map(line => [line.name, line]) : [])\n\n const figures = []\n for (const [name, nodes] of figureNodesOf(board.model)) {\n const line = lines.get(name)\n let status: RequirementStatus = 'drawn'\n let ref: string | null = null\n let dependencies: unknown = 'unknown'\n if (!line) status = 'not-in-type-map'\n else if (!line.release) status = 'release-unavailable'\n else {\n const release = await freshen(tx, line.release)\n ref = release.ref\n dependencies = release.dependencies ?? []\n if ((await dependencyFaults(tx, release, files)).length) status = 'dependency-missing'\n else if (!release.formatSupported) status = 'format-unsupported'\n }\n figures.push({ name, status, ref, nodes, dependencies })\n }\n return { board: board.id, typeMap: active ? { version: active.version, revision: active.revision } : null, figures }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"inspection.js","sourceRoot":"","sources":["../../../server/service/library/inspection.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { figureContractChanges, parseFigureAsset } from '@hatiolab/figure-model'\nimport { Board } from '@things-factory/board-service'\n\nimport { FigureLibraryRelease } from '../figure-library-release/figure-library-release'\nimport { FigureTypeMapState } from '../figure-type-map/figure-type-map'\nimport { derivedIsStale, derivedOfSource } from './derived'\nimport { figureNodesOf } from './board-walk'\nimport { libraryFileOf, libraryFiles, sha256Of, type LibraryFiles } from './library-files'\nimport { entriesOf, mapOfState } from './type-map'\n\ntype Domain = { id: string }\n\n/** How much of the domain's boards a line touches. */\nexport interface Reach {\n boards: number\n nodes: number\n}\n\n/** Brings a row's derived values up to this server's kernel, writing them back when they changed. */\nexport async function freshen(tx: EntityManager, release: FigureLibraryRelease): Promise<FigureLibraryRelease> {\n if (!derivedIsStale(release)) return release\n const derived = derivedOfSource(release.source)\n await tx.getRepository(FigureLibraryRelease).update({ id: release.id }, derived)\n return Object.assign(release, derived)\n}\n\n/** The dependency files of a release that are missing or whose bytes no longer hash to their name. */\nexport async function dependencyFaults(\n tx: EntityManager,\n release: FigureLibraryRelease,\n files: LibraryFiles = libraryFiles()\n): Promise<{ hash: string; fault: 'missing' | 'corrupt' }[]> {\n const faults: { hash: string; fault: 'missing' | 'corrupt' }[] = []\n for (const dependency of release.dependencies ?? []) {\n const attachment = await libraryFileOf(tx, release.domainId!, dependency.hash)\n if (!attachment) {\n faults.push({ hash: dependency.hash, fault: 'missing' })\n continue\n }\n try {\n const bytes = await files.read(attachment.path)\n if (sha256Of(bytes) !== dependency.hash) faults.push({ hash: dependency.hash, fault: 'corrupt' })\n } catch {\n faults.push({ hash: dependency.hash, fault: 'missing' })\n }\n }\n return faults\n}\n\n/** Figure nodes across the domain's boards: per name, how many boards and nodes use it. */\nexport async function reachOf(tx: EntityManager, domain: Domain): Promise<Map<string, Reach>> {\n const reach = new Map<string, Reach>()\n const boards = await tx.getRepository(Board).find({ where: { domain: { id: domain.id } }, select: { id: true, model: true } })\n for (const board of boards) {\n for (const [name, nodes] of figureNodesOf(board.model)) {\n const now = reach.get(name) ?? { boards: 0, nodes: 0 }\n reach.set(name, { boards: now.boards + 1, nodes: now.nodes + nodes })\n }\n }\n return reach\n}\n\n/**\n * The check before activation (ADR-0114 결정 8): the candidate against the active map and every board of the domain.\n * It reports and never blocks; the activation screen shows it and asks to confirm.\n */\nexport async function typeMapCheck(tx: EntityManager, domain: Domain, files?: LibraryFiles) {\n const candidate = await mapOfState(tx, domain, FigureTypeMapState.CANDIDATE)\n if (!candidate) return null\n const active = await mapOfState(tx, domain, FigureTypeMapState.ACTIVE)\n\n const next = new Map((await entriesOf(tx, candidate)).map(line => [line.name, line.release!]))\n const now = new Map(active ? (await entriesOf(tx, active)).map(line => [line.name, line.release!]) : [])\n const reach = await reachOf(tx, domain)\n const at = (name: string): Reach => reach.get(name) ?? { boards: 0, nodes: 0 }\n\n const missing = [...reach.keys()].filter(name => !next.has(name)).map(name => ({ name, ...at(name) }))\n const added = [...next.keys()].filter(name => !now.has(name)).map(name => ({ name, ref: next.get(name)!.ref, ...at(name) }))\n const changed = []\n for (const [name, release] of next) {\n const before = now.get(name)\n if (!before || before.id === release.id) continue\n changed.push({ name, from: before.ref, to: release.ref, contract: contractOf(before, release), ...at(name) })\n }\n const deprecated = []\n const unsupported = []\n const dependencies = []\n const carriers = new Map<string, { name: string; ref: string }[]>()\n for (const [name, release] of next) {\n const fresh = await freshen(tx, release)\n if (fresh.carrierType) carriers.set(fresh.carrierType, [...(carriers.get(fresh.carrierType) ?? []), { name, ref: fresh.ref }])\n if (fresh.deprecated) deprecated.push({ name, ref: fresh.ref, supersededBy: fresh.supersededBy ?? null, ...at(name) })\n if (!fresh.formatSupported) unsupported.push({ name, ref: fresh.ref, assetFormat: fresh.assetFormat, ...at(name) })\n const faults = await dependencyFaults(tx, fresh, files)\n if (faults.length) dependencies.push({ name, ref: fresh.ref, faults, ...at(name) })\n }\n\n return {\n candidate: { version: candidate.version, revision: candidate.revision },\n active: active ? { version: active.version, revision: active.revision } : null,\n missing,\n added,\n changed,\n deprecated,\n unsupported,\n dependencies,\n /* A CARRIERTYPE code two figures of the candidate declare: live data with it finds no carrier (ADR-0123). Reported, as the rest. */\n carrierConflicts: [...carriers].filter(([, lines]) => lines.length > 1).map(([carrierType, lines]) => ({ carrierType, lines }))\n }\n}\n\n/** The contract changes between two releases, or `uncheckable` when this server cannot read either. */\nfunction contractOf(before: FigureLibraryRelease, after: FigureLibraryRelease) {\n try {\n return { checked: true, changes: figureContractChanges(parseFigureAsset(before.source), parseFigureAsset(after.source)) }\n } catch {\n return { checked: false, changes: [] }\n }\n}\n\nexport type RequirementStatus = 'drawn' | 'not-in-type-map' | 'release-unavailable' | 'dependency-missing' | 'format-unsupported'\n\n/**\n * What one board needs from the active map (ADR-0114 결정 8): each figure it holds, its status and node count. A\n * figure not in the library has dependencies this server cannot know.\n */\nexport async function boardRequirements(tx: EntityManager, domain: Domain, boardId: string, files?: LibraryFiles) {\n const board = await tx.getRepository(Board).findOne({ where: { id: boardId, domain: { id: domain.id } }, select: { id: true, model: true } })\n if (!board) return null\n const active = await mapOfState(tx, domain, FigureTypeMapState.ACTIVE)\n const lines = new Map(active ? (await entriesOf(tx, active)).map(line => [line.name, line]) : [])\n\n const figures = []\n for (const [name, nodes] of figureNodesOf(board.model)) {\n const line = lines.get(name)\n let status: RequirementStatus = 'drawn'\n let ref: string | null = null\n let dependencies: unknown = 'unknown'\n if (!line) status = 'not-in-type-map'\n else if (!line.release) status = 'release-unavailable'\n else {\n const release = await freshen(tx, line.release)\n ref = release.ref\n dependencies = release.dependencies ?? []\n if ((await dependencyFaults(tx, release, files)).length) status = 'dependency-missing'\n else if (!release.formatSupported) status = 'format-unsupported'\n }\n figures.push({ name, status, ref, nodes, dependencies })\n }\n return { board: board.id, typeMap: active ? { version: active.version, revision: active.revision } : null, figures }\n}\n"]}
|