diff --git a/.github/workflows/sync-docs-to-community.yml b/.github/workflows/sync-docs-to-community.yml new file mode 100644 index 000000000..9e25f6905 --- /dev/null +++ b/.github/workflows/sync-docs-to-community.yml @@ -0,0 +1,45 @@ +name: Sync Docs to Nop Community + +on: + push: + branches: + - master + paths: + - docs/* + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + sync-docs-to-community: + runs-on: ubuntu-latest + env: + NOP_PROJECT_DOCS_REPO: nop-platform/nop-entropy-docs + steps: + - name: Create temp dirs + run: mkdir docs-src docs-dist + - uses: actions/checkout@v3 + with: + path: docs-src + - uses: actions/checkout@v3 + with: + repository: ${{ env.NOP_PROJECT_DOCS_REPO }} + persist-credentials: false + path: docs-dist + - name: Copy docs + run: | + rm -rf docs-dist/src + mv docs-src/docs docs-dist/src + - name: Commit changes + run: | + cd docs-dist + git config --local user.email "nop-assistant+project-docs-syncer@domain.does-not.exist" + git config --local user.name "Nop Assistant" + git add . + git commit -m "chore: update docs via GitHub Actions" + - uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.NOP_PROJECT_DOCS_PAT }} + repository: ${{ env.NOP_PROJECT_DOCS_REPO }} + directory: docs-dist + force: true diff --git a/.gitignore b/.gitignore index 6ad3b0f5c..0189066c8 100644 --- a/.gitignore +++ b/.gitignore @@ -63,15 +63,19 @@ _dump /nop-tool/src/test/java/io/nop/tool/log/TestLogProcessor.java /nop-all-for-spring/dependency-reduced-pom.xml -/package.json -/scripts/ksio -/.knosys -/.knosys/sites/*/.cache/ -/.knosys/sites/*/.asset-cache/ -/.knosys/sites/*/.sass-cache/ -/.knosys/sites/*/*/ksio/ -/.knosys/sites/*/_assets/*/ksio/ -/.knosys/sites/*/_assets/*/knosys/ -/.knosys/sites/*/_data/knosys/ -/.knosys/sites/*/_knosys/ -/.knosys/sites/*/_site/ +package-lock.json +node_modules/ + +# KnoSys sites +/.knosys/sites/default/source/_data/knosys/ +/.knosys/sites/default/source/_data/local/repos.yml +/.knosys/sites/default/source/knosys/ +/.knosys/sites/default/source/_posts/* +!/.knosys/sites/default/source/_posts/hello-world.md +/.knosys/sites/default/themes/ +/.knosys/sites/default/public/ +/.knosys/sites/default/.deploy*/ +/.knosys/sites/default/_multiconfig.yml +/.knosys/sites/default/Thumbs.db +/.knosys/sites/default/db.json +/.knosys/sites/default/package.json diff --git a/.knosys/config.json b/.knosys/config.json new file mode 100644 index 000000000..2e13e823e --- /dev/null +++ b/.knosys/config.json @@ -0,0 +1,11 @@ +{ + "command": "./scripts/ksio", + "site": { + "default": { + "generator": "hexo", + "data": { + "project-nop-entropy": "./docs" + } + } + } +} diff --git a/.knosys/sites/default/_config.yml b/.knosys/sites/default/_config.yml new file mode 100644 index 000000000..77d20dee0 --- /dev/null +++ b/.knosys/sites/default/_config.yml @@ -0,0 +1,164 @@ +# Hexo Configuration +## Docs: https://hexo.io/docs/configuration.html +## Source: https://github.com/hexojs/hexo/ + +# Site +title: Nop Entropy +subtitle: 基于可逆计算原理从零开始构建的新一代低代码平台 +description: Nop Platform 2.0 是基于可逆计算原理从零开始构建的新一代低代码平台,它致力于克服低代码平台无法摆脱穷举法的困境,从理论层面超越组件技术,有效的解决粗粒度软件复用的问题。 +keywords: Nop,Nop平台,Nop 平台,Nop Platform,Nop社区,Nop 社区,Nop Community,可逆计算,软件构造理论,低代码,lowcode,low-code,low code,低代码平台,lcdp,软件工程 +author: canonical +language: zh-CN +timezone: Asia/Shanghai + +# URL +## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project' +url: https://example.io +permalink: posts/:title/ +permalink_defaults: +pretty_urls: + trailing_index: false + trailing_html: false + +# Directory +source_dir: source +public_dir: public +tag_dir: tags +archive_dir: archives +category_dir: categories +code_dir: downloads/code +i18n_dir: :lang +skip_render: + +# Writing +new_post_name: :title.md # File name of new posts +default_layout: post +titlecase: false # Transform title into titlecase +external_link: + enable: true # Open external links in new tab + field: site # Apply to the whole site + exclude: '' +filename_case: 0 +render_drafts: false +post_asset_folder: false +relative_link: false +future: true +highlight: + enable: true + line_number: true + auto_detect: false + tab_replace: '' + wrap: true + hljs: false +prismjs: + enable: false + preprocess: true + line_number: true + tab_replace: '' + +# Home page setting +# path: Root path for your blogs index page. (default = '') +# per_page: Posts displayed per page. (0 = disable pagination) +# order_by: Posts order. (Order by date descending by default) +index_generator: + path: '/' + per_page: 10 + order_by: -date + +# Category & Tag +default_category: uncategorized +category_map: +tag_map: + +# Metadata elements +## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta +meta_generator: true + +# Date / Time format +## Hexo uses Moment.js to parse and display date +## You can customize the date format as defined in +## http://momentjs.com/docs/#/displaying/format/ +date_format: YYYY-MM-DD +time_format: HH:mm:ss +## updated_option supports 'mtime', 'date', 'empty' +updated_option: 'mtime' + +# Pagination +## Set per_page to 0 to disable pagination +per_page: 10 +pagination_dir: page + +# Include / Exclude file(s) +## include:/exclude: options only apply to the 'source/' folder +include: +exclude: +ignore: + +# Extensions +## Plugins: https://hexo.io/plugins/ +## Themes: https://hexo.io/themes/ +theme: nop-project +theme_config: + header: + navs: + - text: 指南 + url: /projects/nop-entropy/docs/ + footer: + links: + - text: 指南 + url: /projects/nop-entropy/docs/ + +ksio: + defaults: + layout: + page: + values: + ksio_asset_css: + - stylesheets/ksio/vendors/share + ksio_asset_js: + - javascripts/ksio/vendors/share.min + - javascripts/ksio/components/page + - javascripts/ksio/components/toc + post: + extends: page + ksio/doc: + values: + ksio_asset_css: + - stylesheets/ksio/vendors/share + ksio_asset_js: + - javascripts/ksio/vendors/share.min + - javascripts/ksio/components/page + - javascripts/ksio/components/toc + _nop/layouts/doc: + extends: ksio/doc + page: + - scope: + type: posts + values: + ksio_asset_css: + - stylesheets/pages/post + ksio_asset_js: + - javascripts/ksio/vendors/jquery.timeago + - javascripts/ksio/vendors/jquery.timeago.zh-CN + - javascripts/ksio/initializers/time + - javascripts/ksio/vendors/jquery.lazyload + - javascripts/ksio/initializers/lazyload + - scope: + type: knosys + values: + layout: _nop/layouts/doc + ksio_asset_css: + - stylesheets/pages/post + - stylesheets/pages/doc + ksio_asset_js: + - javascripts/ksio/vendors/jquery.timeago + - javascripts/ksio/vendors/jquery.timeago.zh-CN + - javascripts/ksio/initializers/time + - javascripts/ksio/vendors/jquery.lazyload + - javascripts/ksio/initializers/lazyload + repo: nop-entropy + +# Deployment +## Docs: https://hexo.io/docs/one-command-deployment +deploy: + type: '' diff --git a/.knosys/sites/default/source/_posts/hello-world.md b/.knosys/sites/default/source/_posts/hello-world.md new file mode 100644 index 000000000..c724de3b3 --- /dev/null +++ b/.knosys/sites/default/source/_posts/hello-world.md @@ -0,0 +1,5 @@ +--- +title: Hello World +--- + +这个文件不能删,否则本地服务无法启动。 diff --git a/docs/.meta/generated.yml b/docs/.meta/generated.yml deleted file mode 100644 index dcce1a39c..000000000 --- a/docs/.meta/generated.yml +++ /dev/null @@ -1,538 +0,0 @@ -count: 205 -structure: - - title: 概览 - uri: index.md - - title: Nop平台核心代码阅读导引 - uri: core-code-guidance.md - - title: Nop平台的定位和发展规划 - uri: why-nop.md - - title: arch - uri: arch - children: - - title: 架构 - uri: arch/index.md - - title: 模块依赖关系 - uri: arch/module-dependency.md - - title: compare - uri: compare - children: - - title: 从可逆计算看开源低代码平台Skyve的设计 - uri: compare/nop-vs-skyve.md - - title: Nop平台与SpringCloud的功能对比 - uri: compare/nop-vs-springcloud.md - - title: dev-guide - uri: dev-guide - children: - - title: 开发指南 - uri: dev-guide/index.md - - title: 自动测试 - uri: dev-guide/autotest.md - - title: NopCli命令行工具 - uri: dev-guide/cli.md - - title: Maven集成代码生成器 - uri: dev-guide/codegen.md - - title: 配置规范 - uri: dev-guide/config.md - - title: Delta定制 - uri: dev-guide/customization.md - - title: 开发调试 - uri: dev-guide/debug.md - - title: '[虚拟文件系统](vfs/vfs.md)' - uri: dev-guide/delta-loader.md - - title: 字典表翻译 - uri: dev-guide/dict.md - - title: 统一响应格式 - uri: dev-guide/error-code.md - - title: dev-guide/i18n.md - uri: dev-guide/i18n.md - - title: dev-guide/intro.md - uri: dev-guide/intro.md - - title: 3.1 XDef元模型定义 - uri: dev-guide/ioc.md - - title: 日志配置 - uri: dev-guide/quarkus.md - - title: Spring集成 - uri: dev-guide/spring.md - - title: 租户配置 - uri: dev-guide/tenant.md - - title: dev-guide/auth - uri: dev-guide/auth - children: - - title: 权限 - uri: dev-guide/auth/auth.md - - title: 替代登录 - uri: dev-guide/auth/impersonate.md - - title: 登录逻辑 - uri: dev-guide/auth/login.md - - title: 服务鉴权 - uri: dev-guide/auth/service-auth.md - - title: 启用SSO支持 - uri: dev-guide/auth/sso.md - - title: dev-guide/batch - uri: dev-guide/batch - children: - - title: SpringBatch存在的设计问题 - uri: dev-guide/batch/batch-design.md - - title: dev-guide/batch/batch-gen.md - uri: dev-guide/batch/batch-gen.md - - title: dev-guide/batch/batch-task.md - uri: dev-guide/batch/batch-task.md - - title: dev-guide/biz - uri: dev-guide/biz - children: - - title: 编码规则 - uri: dev-guide/biz/coderule.md - - title: CrudBizModel中的自动验证 - uri: dev-guide/biz/validate.md - - title: dev-guide/command - uri: dev-guide/command - children: - - title: 命令行程序支持 - uri: dev-guide/command/command.md - - title: dev-guide/delta - uri: dev-guide/delta - children: - - title: 如何在不修改基础产品源码的情况下实现定制化开发 - uri: dev-guide/delta/delta-customization.md - - title: dev-guide/graphql - uri: dev-guide/graphql - children: - - title: connection配置 - uri: dev-guide/graphql/connection.md - - title: 标准增删改查操作 - uri: dev-guide/graphql/crud.md - - title: 面向对象的GraphQL - uri: dev-guide/graphql/graphql-java.md - - title: 通过QueryBean实现左连接查询 - uri: dev-guide/graphql/left-join.md - - title: REST链接 - uri: dev-guide/graphql/rest.md - - title: GraphQL引擎的上传下载扩展 - uri: dev-guide/graphql/upload.md - - title: Biz模型 - uri: dev-guide/graphql/xbiz.md - - title: dev-guide/ide - uri: dev-guide/ide - children: - - title: 安装JDK - uri: dev-guide/ide/idea.md - - title: 关联Gradle工程 - uri: dev-guide/ide/plugin-dev.md - - title: dev-guide/ioc - uri: dev-guide/ioc - children: - - title: 编译期代码生成 - uri: dev-guide/ioc/aop.md - - title: dev-guide/job - uri: dev-guide/job - children: - - title: 分布式任务调度 - uri: dev-guide/job/job-design.md - - title: dev-guide/job/job.md - uri: dev-guide/job/job.md - - title: dev-guide/job/trigger.md - uri: dev-guide/job/trigger.md - - title: dev-guide/microservice - uri: dev-guide/microservice - children: - - title: Feign集成 - uri: dev-guide/microservice/feign.md - - title: NopGraphQL对外暴露为Grpc - uri: dev-guide/microservice/grpc.md - - title: 低代码平台中的分布式RPC框架(约3000行代码) - uri: dev-guide/microservice/rpc-design.md - - title: 一. 服务端配置 - uri: dev-guide/microservice/rpc.md - - title: 配置项 - uri: dev-guide/microservice/web-filter.md - - title: dev-guide/model - uri: dev-guide/model - children: - - title: Excel模型 - uri: dev-guide/model/index.md - - title: Api模型 - uri: dev-guide/model/api-model.md - - title: 核心模型说明 - uri: dev-guide/model/core-models.md - - title: 自定义模型 - uri: dev-guide/model/custom-model.md - - title: Excel数据模型 - uri: dev-guide/model/excel-model.md - - title: 1. 解析Excel文件得到Workbook对象 - uri: dev-guide/model/excel-xlsx.md - - title: dev-guide/nocode - uri: dev-guide/nocode - children: - - title: '在线配置数据模型和服务模型: [dyn-model.md](dyn-model.md)' - uri: dev-guide/nocode/index.md - - title: 在线动态建模 - uri: dev-guide/nocode/dyn-model.md - - title: 内置工作流支持的动态实体 - uri: dev-guide/nocode/dynamic-orm.md - - title: dev-guide/orm - uri: dev-guide/orm - children: - - title: '[数据库方言](dialect.md)' - uri: dev-guide/orm/index.md - - title: 在标签库中直接执行SQL语句 - uri: dev-guide/orm/dao-lib.md - - title: 基本约定 - uri: dev-guide/orm/dao.md - - title: 实体修改状态跟踪 - uri: dev-guide/orm/data-change-log.md - - title: Dialect的继承和定制 - uri: dev-guide/orm/dialect.md - - title: dev-guide/orm/dql.md - uri: dev-guide/orm/dql.md - - title: EQL对象查询语言 - uri: dev-guide/orm/eql.md - - title: 如何在不改表的情况下为实体增加扩展字段 - uri: dev-guide/orm/ext-field.md - - title: 字段掩码 - uri: dev-guide/orm/field-masking.md - - title: 多对多关联 - uri: dev-guide/orm/many-to-many.md - - title: 多数据源配置 - uri: dev-guide/orm/multi-datasource.md - - title: 多数据源配置 - uri: dev-guide/orm/multi-db.md - - title: 空值的处理 - uri: dev-guide/orm/null-value.md - - title: 基本使用方式 - uri: dev-guide/orm/orm-basic.md - - title: 执行原理 - uri: dev-guide/orm/orm.md - - title: 一级缓存 - uri: dev-guide/orm/session-cache.md - - title: 1 统一管理SQL/EQL/DQL - uri: dev-guide/orm/sql-lib.md - - title: 分布式事务 - uri: dev-guide/orm/tcc.md - - title: 多对一或者一对一关联 - uri: dev-guide/orm/to-one-relation.md - - title: 事务模板 - uri: dev-guide/orm/transaction.md - - title: dev-guide/recipe - uri: dev-guide/recipe - children: - - title: '1. [在后台增加字段](add-field.md)' - uri: dev-guide/recipe/index.md - - title: 在后台Graph中增加字段 - uri: dev-guide/recipe/add-field.md - - title: 1. 传递一些实体上没有的字段到后台 - uri: dev-guide/recipe/crud.md - - title: 1. 表格过滤 - uri: dev-guide/recipe/filter-list.md - - title: JSON处理 - uri: dev-guide/recipe/json-helper.md - - title: 1. 如何取出当前节点的所有兄弟节点,以及所有父节点 - uri: dev-guide/recipe/tree-entity.md - - title: 1. 解析XML文本 - uri: dev-guide/recipe/xml-helper.md - - title: dev-guide/report - uri: dev-guide/report - children: - - title: '[Excel报表](xpt-report.md)' - uri: dev-guide/report/index.md - - title: 报表导出时支持Excel公式 - uri: dev-guide/report/excel-formula.md - - title: Excel数据导入导出 - uri: dev-guide/report/excel-import.md - - title: 非线性中国式报表引擎NopReport源码解析 - uri: dev-guide/report/report-design.md - - title: 润乾集算器(SPL) - uri: dev-guide/report/spl.md - - title: 超链接 - uri: dev-guide/report/word-template-details.md - - title: 1. 为模板中需要被替换的文字增加超链接 - uri: dev-guide/report/word-template.md - - title: 报表引擎 - uri: dev-guide/report/xpt-report.md - - title: dev-guide/report/examples - uri: dev-guide/report/examples - children: - - title: 基础报表示例 - uri: dev-guide/report/examples/base.md - - title: 动态展开列 - uri: dev-guide/report/examples/dynamic-col.md - - title: 套打 - uri: dev-guide/report/examples/form-printing.md - - title: dev-guide/rule - uri: dev-guide/rule - children: - - title: 采用Excel作为可视化设计器的规则引擎 NopRule - uri: dev-guide/rule/rule.md - - title: 验证模型 - uri: dev-guide/rule/validator.md - - title: dev-guide/security - uri: dev-guide/security - children: - - title: Nop平台这么灵活,是不是很容易出现安全性问题? - uri: dev-guide/security/security-design.md - - title: dev-guide/sonar - uri: dev-guide/sonar - children: - - title: 配置 - uri: dev-guide/sonar/sonarqube.md - - title: dev-guide/spring - uri: dev-guide/spring - children: - - title: 如何为Spring和Mybatis增加可逆计算支持 - uri: dev-guide/spring/spring-delta.md - - title: dev-guide/vfs - uri: dev-guide/vfs - children: - - title: DSL模型文件加载 - uri: dev-guide/vfs/model-loader.md - - title: 标准资源路径模式 - uri: dev-guide/vfs/std-resource-path.md - - title: 虚拟文件系统 - uri: dev-guide/vfs/vfs.md - - title: dev-guide/workflow - uri: dev-guide/workflow - children: - - title: 类钉钉工作流 - uri: dev-guide/workflow/flow-builder.md - - title: 通用流程设计器 - uri: dev-guide/workflow/graph-designer.md - - title: 逻辑编排 - uri: dev-guide/workflow/task-flow.md - - title: 任务队列 - uri: dev-guide/workflow/task-queue.md - - title: 堆栈式任务流 - uri: dev-guide/workflow/task.md - - title: dev-guide/xlang - uri: dev-guide/xlang - children: - - title: XLang - uri: dev-guide/xlang/index.md - - title: AST映射约定 - uri: dev-guide/xlang/antlr.md - - title: 特性开关 - uri: dev-guide/xlang/feature-expr.md - - title: 低代码平台中的元编程(Meta Programming) - uri: dev-guide/xlang/meta-programming.md - - title: 可逆计算理论中的Delta合并算法 - uri: dev-guide/xlang/x-override.md - - title: XDef元模型定义语言 - uri: dev-guide/xlang/xdef.md - - title: XDSL:通用的领域特定语言设计 - uri: dev-guide/xlang/xdsl.md - - title: 使用XML格式来表达json对象 - uri: dev-guide/xlang/xjson.md - - title: XLang综合示例 - uri: dev-guide/xlang/xlang-demo.md - - title: 简要说明 - uri: dev-guide/xlang/xlang.md - - title: 元数据 - uri: dev-guide/xlang/xmeta.md - - title: dev-guide/xlang/xpath.md - uri: dev-guide/xlang/xpath.md - - title: 说明 - uri: dev-guide/xlang/xpl.md - - title: XScript - uri: dev-guide/xlang/xscript.md - - title: dev-guide/xlang/xtransform.md - uri: dev-guide/xlang/xtransform.md - - title: dev-guide/xui - uri: dev-guide/xui - children: - - title: XUI - uri: dev-guide/xui/index.md - - title: 适配 - uri: dev-guide/xui/adapter.md - - title: AMIS框架扩展 - uri: dev-guide/xui/amis.md - - title: XScript与JavaScript的兼容性 - uri: dev-guide/xui/javascript.md - - title: 布局语言 - uri: dev-guide/xui/layout.md - - title: 通过nop-sdk实现前端集成 - uri: dev-guide/xui/sdk.md - - title: 提取实体类型的部分字段类型 - uri: dev-guide/xui/typescript.md - - title: web.xlib - uri: dev-guide/xui/web-xlib.md - - title: 前端配置 - uri: dev-guide/xui/xpage.md - - title: XView视图模型 - uri: dev-guide/xui/xview.md - - title: faq - uri: faq - children: - - title: 调试错误 - uri: faq/debug-errors.md - - title: 常见问题 - uri: faq/faq.md - - title: frontend - uri: frontend - children: - - title: 前端架构设计 - uri: frontend/frontend-design.md - - title: 界面框架 - uri: frontend/nop-site.md - - title: React - uri: frontend/react.md - - title: Vite - uri: frontend/vite.md - - title: gpt - uri: gpt - children: - - title: gpt/copilot-prompts.md - uri: gpt/copilot-prompts.md - - title: gpt/create-module.md - uri: gpt/create-module.md - - title: gpt/create-workflow.md - uri: gpt/create-workflow.md - - title: gpt/read-doc.md - uri: gpt/read-doc.md - - title: gpt/update-table.md - uri: gpt/update-table.md - - title: gpt/alpha-codium - uri: gpt/alpha-codium - children: - - title: gpt/alpha-codium/READM.md - uri: gpt/alpha-codium/READM.md - - title: gpt/gpt-pilot - uri: gpt/gpt-pilot - children: - - title: gpt/gpt-pilot/READM.md - uri: gpt/gpt-pilot/READM.md - - title: gpt/reference - uri: gpt/reference - children: - - title: gpt/reference/tutor.md - uri: gpt/reference/tutor.md - - title: intro - uri: intro - children: - - title: 介绍 - uri: intro/intro.md - - title: performance - uri: performance - children: - - title: 性能优化方法论 - uri: performance/optimize-theory.md - - title: 性能优化工具 - uri: performance/optimize-tool.md - - title: theory - uri: theory - children: - - title: '知乎专栏: [可逆计算](https://www.zhihu.com/column/reversible-computation)' - uri: theory/index.md - - title: 低代码开发的优势体现在哪里? - uri: theory/advantage-of-lowcode.md - - title: 万字长文讲清DDD在低代码平台中的最佳实践 - uri: theory/ddd-in-nop.md - - title: 从可逆计算看声明式编程 - uri: theory/declarative-programming.md - - title: 解耦远不止依赖注入 - uri: theory/decouple.md - - title: 从可逆计算看Delta Oriented Programming - uri: theory/delta-oriented-programming.md - - title: 一. 树形结构:长程关联 - uri: theory/design-methodology.md - - title: 关于可逆计算的讨论--答圆角骑士魔理沙 - uri: theory/discussion-about-reversible-computation.md - - title: 关于Nop平台以及低代码平台建设经验的讨论 - uri: theory/discusson-about-nop.md - - title: 从React Hooks看React的本质 - uri: theory/essence-of-react.md - - title: 业务开发如何才能独立于框架 - uri: theory/framework-agnostic.md - - title: 通用的Delta差量化机制 - uri: theory/generic-delta-composition.md - - title: theory/good_design.md - uri: theory/good_design.md - - title: 为什么在数学的意义上GraphQL严格的优于REST? - uri: theory/graphql-vs-rest.md - - title: 1. 代码生成器是低码吗? - uri: theory/lowcode-expained.md - - title: 如果重写SpringBoot,我们会做哪些不同的选择? - uri: theory/lowcode-ioc.md - - title: 低代码平台需要什么样的ORM引擎?(1) - uri: theory/lowcode-orm-1.md - - title: 低代码平台需要什么样的ORM引擎?(2) - uri: theory/lowcode-orm-2.md - - title: 从零开始编写的下一代逻辑编排引擎 - uri: theory/lowcode-task-flow.md - - title: 可逆计算理论 - uri: theory/methodology-of-reversible-computation.md - - title: GPT用于复杂代码生产所需要满足的必要条件 - uri: theory/nop-for-gpt.md - - title: Paxos的魔法学研究报告 - uri: theory/paxos.md - - title: 如何评价一种框架技术的好坏? - uri: theory/pros-and-cons-of-framework.md - - title: 从可逆计算看AI时代的复用 - uri: theory/reuse.md - - title: 从可逆计算看低代码 - uri: theory/reversible-computation-and-lowcode.md - - title: 写给程序员的可逆计算理论辨析 - uri: theory/reversible-computation-for-programmers.md - - title: 写给程序员的可逆计算理论辨析补遗 - uri: theory/reversible-computation-for-programmers2.md - - title: 可逆计算:下一代软件构造理论 - uri: theory/reversible-computation.md - - title: Nop平台为什么是一个独一无二的开源软件开发平台 - uri: theory/technical-strategy.md - - title: 从张量积看低代码平台的设计 - uri: theory/tensor-product-lowcode.md - - title: 可逆计算理论中的可逆到底指的是什么? - uri: theory/what-does-reversible-mean.md - - title: 什么是数据驱动?它和模型驱动、领域驱动、元数据驱动、DSL驱动之间有什么区别? - uri: theory/what-is-data-driven.md - - title: NopReport为什么是一个非常独特的报表引擎? - uri: theory/why-nop-report-is-special.md - - title: 为什么Nop平台坚持使用XML而不是JSON或者YAML - uri: theory/why-xml.md - - title: 从可逆计算看DSL的设计要点 - uri: theory/xdsl-design.md - - title: XML、JSON和函数AST的等价性 - uri: theory/xml-json-equivalence.md - - title: theory/amis - uri: theory/amis - children: - - title: 再谈百度AMIS框架和声明式编程 - uri: theory/amis/amis-and-declarative-programming.md - - title: 为什么说百度AMIS框架是一个优秀的设计 - uri: theory/amis/why-amis-is-good.md - - title: tutorial - uri: tutorial - children: - - title: 开发示例 - uri: tutorial/tutorial.md - - title: Development Tutorial - uri: tutorial/tutorial_en.md - - title: tutorial/simple - uri: tutorial/simple - children: - - title: Nop入门:极简服务层开发 - uri: tutorial/simple/1-simple-service.md - - title: Nop入门:极简数据访问层开发 - uri: tutorial/simple/2-simple-dao.md - - title: 极简前端页面开发 - uri: tutorial/simple/3-simple-page.md - - title: user-guide - uri: user-guide - children: - - title: 用户指南 - uri: user-guide/index.md - - title: user-guide/batch.md - uri: user-guide/batch.md - - title: 采用Excel作为设计器的开源中国式报表引擎:NopReport - uri: user-guide/report.md - - title: user-guide/rule.md - uri: user-guide/rule.md - - title: user-guide/workflow.md - uri: user-guide/workflow.md - - title: user-guide/idea - uri: user-guide/idea - children: - - title: XLang DSL Plugin - uri: user-guide/idea/idea-plugin.md - - title: user-guide/monitor - uri: user-guide/monitor - children: - - title: 运行时监控 - uri: user-guide/monitor/grafana.md diff --git a/docs/.meta/readme.md b/docs/.meta/readme.md index aa34047b2..c860088bf 100644 --- a/docs/.meta/readme.md +++ b/docs/.meta/readme.md @@ -5,7 +5,15 @@ - 文档中的标题用 `#` 设置,每个文档都需要有一级标题且只能有一个; - 代码块用连续的三个 ` 表示,不要超过三个。 -用 [KnoSys](https://knosysio.github.io/) 处理成功后会生成 `/docs/.meta/generated.yml` 文件,内容为文档总数及按目录结构排列的文档元数据。 +## 文档生成效果预览 + +首次操作时需在项目根目录 `npm i` 安装依赖,限制 Node.js 版本为 14 及以上。 + +接着用 `npm start` 启动本地服务,并在浏览器中访问 `http://localhost:4000/projects/nop-entropy/docs/` 查看效果。 + +在执行 `npm start` 时自动先处理 `/docs` 下的文件,成功后会生成 `/.knosys/sites/default/source/_data/knosys/project-nop-entropy/docs.yml` 文件,内容为文档总数及按文件目录结构排列的元数据。 + +值得注意的是——**`npm start` 后并未监听 `/docs` 下文件的变动,若文档源文件有修改需重新执行。** ## 文档站目录编排 diff --git a/package.json b/package.json new file mode 100644 index 000000000..d0b92a3fc --- /dev/null +++ b/package.json @@ -0,0 +1,34 @@ +{ + "name": "@nop-entropy/docs", + "version": "0.0.0", + "private": true, + "main": "scripts/ksio/index.js", + "scripts": { + "build": "ksio gen", + "start": "ksio serve", + "prestart": "npm run build" + }, + "engines": { + "node": ">=14.0.0" + }, + "hexo": { + "version": "6.3.0" + }, + "dependencies": { + "@nop-community/hexo-theme-site": "0.0.0", + "hexo": "^6.3.0", + "hexo-generator-archive": "^2.0.0", + "hexo-generator-category": "^2.0.0", + "hexo-generator-index": "^3.0.0", + "hexo-generator-tag": "^2.0.0", + "hexo-renderer-coffeescript": "^0.2.0", + "hexo-renderer-ejs": "^2.0.0", + "hexo-renderer-marked": "^6.0.0", + "hexo-renderer-sass": "^0.4.0", + "hexo-renderer-stylus": "^2.1.0", + "hexo-server": "^3.0.0" + }, + "devDependencies": { + "ksio": "0.0.0" + } +} diff --git a/scripts/ksio/gen.js b/scripts/ksio/gen.js new file mode 100644 index 000000000..9365ccda9 --- /dev/null +++ b/scripts/ksio/gen.js @@ -0,0 +1,80 @@ +const { resolve: resolvePath } = require('path'); +const { isPlainObject, capitalize } = require('@ntks/toolbox'); + +const { getConfig, readData, saveData, execute } = require('./helper'); + +function resolveDocToc(docs, docData) { + return docs.map(({ title, uri, children }) => { + const resolved = {}; + + if (title) { + resolved.text = title; + } + + const slug = `${uri.replace(/(?:\/)?(index)?\.md$/, '') || 'index'}`; + + resolved.slug = slug; + docData[slug] = { title: title || '', slug }; + + if (children) { + resolved.items = resolveDocToc(children, docData); + } + + return resolved; + }); +} + +function resolveRepoData(site, config) { + const siteDataDir = resolvePath(__dirname, '../..', `./.knosys/sites/${site}/source/_data`); + + const projectRepos = {}; + + Object.keys(config.data).forEach(srcKey => { + if (!srcKey.startsWith('project-')) { + return; + } + + const docs = readData(`${siteDataDir}/knosys/${srcKey}/docs.yml`); + const docData = {}; + + const projectSlug = srcKey.replace(/^project\-/, ''); + + projectRepos[projectSlug] = { + name: `${projectSlug.split('-').map(w => capitalize(w)).join(' ')} 项目文档`, + base: `/projects/${projectSlug}`, + collection: 'docs', + toc: resolveDocToc(docs.structure, docData), + }; + + saveData(`${siteDataDir}/knosys/${projectSlug}.yml`, { items: docData }); + }); + + saveData(`${siteDataDir}/local/repos.yml`, projectRepos); +} + +module.exports = { + execute: (site = 'default', sourceKey) => { + const siteConfig = getConfig(`site.${site}`); + const { data } = siteConfig; + + let keys = []; + + if (data) { + if (isPlainObject(data)) { + if (sourceKey) { + if (data[sourceKey]) { + keys.push(sourceKey); + } + } else { + keys = Object.keys(data); + } + } + } + + keys.forEach(key => execute('generate', site, key)); + + if (siteConfig.generator === 'hexo') { + setTimeout(() => resolveRepoData(site, siteConfig)); + } + }, +}; diff --git a/scripts/ksio/helper.js b/scripts/ksio/helper.js new file mode 100644 index 000000000..a87048505 --- /dev/null +++ b/scripts/ksio/helper.js @@ -0,0 +1,2 @@ +/* eslint-env node */ +module.exports = { ...require('@knosys/sdk'), ...require('ksio') }; diff --git a/scripts/ksio/serve.js b/scripts/ksio/serve.js new file mode 100644 index 000000000..fe655e8ba --- /dev/null +++ b/scripts/ksio/serve.js @@ -0,0 +1,25 @@ +const { resolve: resolvePath } = require('path'); +const { pick } = require('@ntks/toolbox'); + +const { getConfig, readData, saveData, ensureDirExists, copyFileDeeply, execute } = require('./helper'); + +const rootPath = resolvePath(__dirname, '../..'); + +module.exports = { + execute: (site = 'default') => { + const { generator, source } = getConfig(`site.${site}`); + + if (generator === 'hexo') { + const siteSrcPath = resolvePath(rootPath, source || `./.knosys/sites/${site}`); + const pkg = readData(`${rootPath}/package.json`); + const themeDistPath = `${siteSrcPath}/themes/nop-project`; + + ensureDirExists(themeDistPath); + copyFileDeeply(`${rootPath}/node_modules/@nop-community/hexo-theme-site`, themeDistPath, ['README.md', 'CHANGELOG.md', 'package.json']); + + saveData(`${siteSrcPath}/package.json`, { name: `${pkg.name}-site`, ...pick(pkg, ['version', 'private', 'hexo', 'dependencies']) }); + } + + execute('site', 'serve', site); + } +};