diff --git a/build-tools/tasks/index.js b/build-tools/tasks/index.js index d7db3c0784..883267b72a 100644 --- a/build-tools/tasks/index.js +++ b/build-tools/tasks/index.js @@ -3,6 +3,7 @@ module.exports = { clean: require('./clean'), docs: require('./docs'), + styleDocs: require('./style-docs'), generateEnvironment: require('./generate-environment'), generateIcons: require('./generate-icons'), generateIndexFile: require('./generate-index-file'), diff --git a/build-tools/tasks/style-docs.js b/build-tools/tasks/style-docs.js new file mode 100644 index 0000000000..3b61612706 --- /dev/null +++ b/build-tools/tasks/style-docs.js @@ -0,0 +1,26 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +const path = require('path'); +const fs = require('fs'); +const { extractStyleApiDocs } = require('@cloudscape-design/component-toolkit/internal/style-api/docs'); + +const { writeFile, listPublicItems } = require('../utils/files'); +const workspace = require('../utils/workspace'); + +const outDir = path.join(workspace.targetPath, 'components-definitions', 'style-api-doc'); +const compiledStylesPath = component => path.join(workspace.targetPath, 'components', component, 'styles.scoped.css'); + +module.exports = function styleDocs() { + for (const component of listPublicItems(workspace.sourcePath)) { + const cssPath = compiledStylesPath(component); + if (!fs.existsSync(cssPath)) { + continue; + } + const docs = extractStyleApiDocs(fs.readFileSync(cssPath, 'utf8')); + if (docs.slots.length > 0) { + writeFile(path.join(outDir, `${component}.json`), JSON.stringify(docs, null, 2) + '\n'); + } + } + return Promise.resolve(); +};