From 48261138cb9b928a19927c243b7be1341d32e406 Mon Sep 17 00:00:00 2001 From: Alibaba OSS Date: Mon, 18 Nov 2019 22:05:59 +0800 Subject: [PATCH 001/135] Initial commit --- LICENSE | 21 +++++++++++++++++++++ README.md | 2 ++ 2 files changed, 23 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..183a5ec69 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Alibaba Cloud + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 000000000..0f62658e8 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# alibabacloud-console-widget +alibabacloud-console-widget From e974d1676528c3e0b8b663ea0b2150793cb4ddf4 Mon Sep 17 00:00:00 2001 From: "woota.lj" Date: Tue, 19 Nov 2019 16:23:41 +0800 Subject: [PATCH 002/135] chore: Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0f62658e8..235cef562 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # alibabacloud-console-widget -alibabacloud-console-widget +A lightweight approach to achieve micro frontends. It's dead simple! From 8f11ed365b660548c258b12dcea024622eb668e5 Mon Sep 17 00:00:00 2001 From: "woota.lj" Date: Wed, 20 Nov 2019 18:38:52 +0800 Subject: [PATCH 003/135] chore: Add all packages. --- .eslintignore | 3 + .eslintrc.js | 36 ++ .gitignore | 24 + README.md | 6 + babel.config.js | 32 ++ jest.config.js | 5 + lerna.json | 13 + package.json | 30 ++ .../console-mock-interceptor/.browserslistrc | 4 + .../console-mock-interceptor/CHANGELOG.md | 5 + packages/console-mock-interceptor/README.md | 23 + .../console-mock-interceptor/babel.config.js | 18 + .../console-mock-interceptor/package.json | 27 ++ .../console-mock-interceptor/src/index.js | 60 +++ .../test/index.test.js | 43 ++ .../.browserslistrc | 4 + .../console-request-interceptor/.npmignore | 5 + .../console-request-interceptor/CHANGELOG.md | 5 + .../console-request-interceptor/README.md | 34 ++ .../babel.config.js | 7 + .../console-request-interceptor/package.json | 29 ++ .../console-request-interceptor/src/index.js | 177 +++++++ .../src/utils/docCookies.js | 58 +++ .../src/utils/getActiveRegionId.js | 7 + .../test/index.test.js | 128 +++++ .../test/mocks/config.js | 108 +++++ .../.browserslistrc | 2 + .../console-response-interceptor/.eslintrc.js | 39 ++ .../console-response-interceptor/.npmignore | 7 + .../console-response-interceptor/CHANGELOG.md | 6 + .../console-response-interceptor/README.md | 15 + .../babel.config.js | 18 + .../console-response-interceptor/package.json | 44 ++ .../console-response-interceptor/src/alert.js | 118 +++++ .../console-response-interceptor/src/index.js | 54 +++ .../src/locales/messages.js | 24 + .../src/logger.js | 94 ++++ .../test/index.test.js | 1 + .../console-risk-interceptor/.browserslistrc | 4 + .../console-risk-interceptor/.eslintrc.js | 39 ++ packages/console-risk-interceptor/.npmignore | 5 + .../console-risk-interceptor/CHANGELOG.md | 5 + packages/console-risk-interceptor/README.md | 27 ++ .../console-risk-interceptor/babel.config.js | 18 + .../console-risk-interceptor/package.json | 48 ++ .../src/defaultOptions.js | 21 + packages/console-risk-interceptor/src/form.js | 177 +++++++ .../src/getVerifyInformation.js | 63 +++ .../src/handleDoubleConfirm.js | 103 ++++ .../console-risk-interceptor/src/helpers.js | 67 +++ .../console-risk-interceptor/src/index.js | 25 + .../console-risk-interceptor/src/messages.js | 140 ++++++ .../.browserslistrc | 2 + .../.npmignore | 7 + .../CHANGELOG.md | 5 + .../README.md | 0 .../package.json | 25 + .../src/index.js | 66 +++ .../test/index.test.js | 1 + .../search-params-interceptor/.browserslistrc | 4 + packages/search-params-interceptor/.npmignore | 5 + .../search-params-interceptor/CHANGELOG.md | 5 + packages/search-params-interceptor/README.md | 42 ++ .../search-params-interceptor/babel.config.js | 7 + .../search-params-interceptor/package.json | 28 ++ .../search-params-interceptor/src/index.js | 38 ++ .../test/index.test.js | 36 ++ packages/widget-context/.browserslistrc | 2 + packages/widget-context/.eslintrc.js | 39 ++ packages/widget-context/.npmignore | 7 + packages/widget-context/CHANGELOG.md | 5 + packages/widget-context/README.md | 0 packages/widget-context/babel.config.js | 18 + packages/widget-context/package.json | 46 ++ packages/widget-context/src/Consumer.js | 55 +++ packages/widget-context/src/Provider.js | 38 ++ .../src/consoleConfigContext.js | 3 + packages/widget-context/src/index.js | 15 + packages/widget-context/src/intlContext.js | 3 + packages/widget-context/src/widgetContext.js | 3 + packages/widget-context/src/withIntl.js | 35 ++ .../widget-error-boundary/.browserslistrc | 2 + packages/widget-error-boundary/.eslintrc.js | 39 ++ packages/widget-error-boundary/.npmignore | 7 + packages/widget-error-boundary/CHANGELOG.md | 5 + packages/widget-error-boundary/README.md | 0 .../widget-error-boundary/babel.config.js | 18 + packages/widget-error-boundary/package.json | 43 ++ .../widget-error-boundary/src/Fallback.js | 68 +++ packages/widget-error-boundary/src/index.js | 54 +++ packages/widget-error-boundary/src/logger.js | 51 ++ packages/widget-event-emitter/.browserslistrc | 2 + packages/widget-event-emitter/.npmignore | 7 + packages/widget-event-emitter/CHANGELOG.md | 5 + packages/widget-event-emitter/README.md | 4 + packages/widget-event-emitter/package.json | 26 + packages/widget-event-emitter/src/index.js | 13 + .../widget-event-emitter/test/index.test.js | 1 + packages/widget-hooks/.browserslistrc | 2 + packages/widget-hooks/.npmignore | 7 + packages/widget-hooks/CHANGELOG.md | 6 + packages/widget-hooks/README.md | 0 packages/widget-hooks/index.d.ts | 74 +++ packages/widget-hooks/package.json | 41 ++ packages/widget-hooks/src/index.js | 15 + packages/widget-hooks/src/useChannelLink.js | 27 ++ packages/widget-hooks/src/useConsoleConfig.js | 12 + packages/widget-hooks/src/useFeature.js | 39 ++ packages/widget-hooks/src/useGlobalState.js | 13 + packages/widget-hooks/src/useIntl.js | 9 + packages/widget-hooks/src/useRefresher.js | 17 + packages/widget-hooks/src/utils/upperfirst.js | 9 + packages/widget-hooks/test/index.test.js | 1 + packages/widget-loader/.browserslistrc | 2 + packages/widget-loader/.eslintrc.js | 39 ++ packages/widget-loader/.npmignore | 8 + packages/widget-loader/CHANGELOG.md | 6 + packages/widget-loader/README.md | 120 +++++ packages/widget-loader/babel.config.js | 18 + packages/widget-loader/index.d.ts | 55 +++ packages/widget-loader/package.json | 42 ++ packages/widget-loader/scripts/version.js | 17 + packages/widget-loader/src/cons.js | 48 ++ packages/widget-loader/src/createLoader.js | 444 ++++++++++++++++++ packages/widget-loader/src/getEventEmitter.js | 3 + packages/widget-loader/src/index.js | 3 + packages/widget-loader/src/preload.js | 24 + .../widget-loader/src/rc/getDisplayName.js | 5 + .../widget-loader/src/rc/withConsoleConfig.js | 27 ++ .../widget-loader/src/rc/withErrorBoundary.js | 80 ++++ .../widget-loader/src/rc/withEventEmitter.js | 21 + packages/widget-loader/src/rc/withSandbox.js | 50 ++ packages/widget-loader/src/rc/withSuspense.js | 33 ++ packages/widget-loader/src/utils/camelCase.js | 9 + .../src/utils/common/createGlobalVariable.js | 27 ++ .../src/utils/common/eventEmitter.js | 18 + .../src/utils/config/getConfigURL.js | 11 + .../widget-loader/src/utils/config/index.js | 42 ++ .../src/utils/console/checkConsoleUtils.js | 51 ++ .../src/utils/console/docCookies.js | 58 +++ .../src/utils/console/getFecsSecToken.js | 7 + .../src/utils/console/getFecsUmid.js | 7 + .../utils/errorGenerator/generate404Error.js | 7 + .../errorGenerator/generateErrorMessage.js | 5 + .../utils/errorGenerator/generateEvalError.js | 7 + .../generateWidgetConfigExtractionError.js | 7 + .../widget-loader/src/utils/getConfigHost.js | 15 + .../widget-loader/src/utils/getFilename.js | 5 + packages/widget-loader/src/utils/getHost.js | 9 + .../widget-loader/src/utils/getRelease.js | 65 +++ .../widget-loader/src/utils/getVersion.js | 89 ++++ packages/widget-loader/src/utils/load.js | 181 +++++++ .../widget-loader/src/utils/logger/error.js | 18 + .../widget-loader/src/utils/logger/loader.js | 62 +++ packages/widget-loader/src/utils/parseId.js | 15 + .../widget-loader/src/utils/parseOption.js | 42 ++ packages/widget-loader/src/utils/parseUrl.js | 22 + packages/widget-loader/src/utils/request.js | 5 + .../runtime/createDynamicWindStylePrefix.js | 5 + .../runtime/createWindRuntimeSourceLoader.js | 12 + .../widget-loader/src/utils/runtime/load.js | 70 +++ .../src/utils/runtime/loadRuntime.js | 96 ++++ .../src/utils/runtime/loadWindMessage.js | 14 + .../utils/runtime/needDynamiclyLoadRuntime.js | 17 + .../widget-loader/src/utils/upperFirst.js | 9 + .../widget-loader/src/utils/widgetCache.js | 4 + .../widget-loader/src/utils/widgetStore.js | 4 + packages/widget-loader/test/index.test.js | 1 + packages/widget-loader/webpack.config.js | 47 ++ packages/widget-logger/.browserslistrc | 2 + packages/widget-logger/.npmignore | 7 + packages/widget-logger/CHANGELOG.md | 6 + packages/widget-logger/README.md | 0 packages/widget-logger/package.json | 35 ++ packages/widget-logger/src/index.js | 58 +++ packages/widget-logger/src/utils/getOrigin.js | 9 + packages/widget-logger/src/utils/isDevEnv.js | 8 + packages/widget-logger/test/index.test.js | 0 packages/widget-request/CHANGELOG.md | 5 + packages/widget-request/README.md | 22 + packages/widget-request/package.json | 19 + packages/widget-request/src/index.js | 12 + packages/widget-request/test/index.test.js | 14 + packages/widget-scripts/CHANGELOG.md | 1 + packages/widget-scripts/bin/widget-scripts | 3 + packages/widget-scripts/package.json | 55 +++ packages/widget-scripts/src/assets/tpl.html | 45 ++ packages/widget-scripts/src/cmds/build.js | 13 + packages/widget-scripts/src/cmds/start.js | 52 ++ .../widget-scripts/src/config/babelPlugins.js | 14 + .../widget-scripts/src/config/babelPresets.js | 15 + .../src/config/postcss.config.js | 5 + .../src/config/webpack.common.js | 83 ++++ .../widget-scripts/src/config/webpack.dev.js | 86 ++++ .../widget-scripts/src/config/webpack.prod.js | 98 ++++ .../src/config/webpackExternals.js | 94 ++++ packages/widget-scripts/src/cons.js | 99 ++++ packages/widget-scripts/src/index.js | 26 + packages/widget-scripts/src/utils/getAbc.js | 17 + packages/widget-scripts/src/utils/getId.js | 18 + .../widget-scripts/src/utils/getVersion.js | 8 + .../widget-scripts/src/utils/isTypescript.js | 9 + .../widget-scripts/src/utils/openBrowser.js | 119 +++++ packages/widget-skeleton/.browserslistrc | 2 + packages/widget-skeleton/.eslintrc.js | 39 ++ packages/widget-skeleton/.npmignore | 7 + packages/widget-skeleton/CHANGELOG.md | 6 + packages/widget-skeleton/README.md | 140 ++++++ packages/widget-skeleton/babel.config.js | 18 + packages/widget-skeleton/package.json | 44 ++ packages/widget-skeleton/src/index.css | 27 ++ packages/widget-skeleton/src/index.js | 142 ++++++ packages/widget-skeleton/test/index.test.js | 1 + packages/widget-skeleton/webpack.config.js | 74 +++ packages/widget-utils-config/.browserslistrc | 2 + packages/widget-utils-config/.npmignore | 7 + packages/widget-utils-config/CHANGELOG.md | 6 + packages/widget-utils-config/README.md | 0 packages/widget-utils-config/package.json | 26 + .../src/getChannelFeature.js | 4 + .../src/getChannelFeatureList.js | 7 + .../widget-utils-config/src/getChannelLink.js | 4 + .../src/getChannelLinkList.js | 7 + .../src/getWidgetI18nMessages.js | 7 + packages/widget-utils-config/src/index.js | 14 + .../widget-utils-config/test/index.test.js | 1 + packages/widget-utils-console/.browserslistrc | 4 + packages/widget-utils-console/.npmignore | 5 + packages/widget-utils-console/CHANGELOG.md | 6 + packages/widget-utils-console/README.md | 32 ++ packages/widget-utils-console/babel.config.js | 7 + packages/widget-utils-console/package.json | 26 + .../src/channelFeatureFactory.js | 31 ++ .../src/channelLinkFactory.js | 27 ++ .../src/getAccountType.js | 5 + .../widget-utils-console/src/getChannel.js | 5 + .../src/getChannelFeature.js | 4 + .../src/getChannelFeatureList.js | 7 + .../src/getChannelLink.js | 4 + .../src/getChannelLinkList.js | 7 + .../widget-utils-console/src/getCollina.js | 28 ++ .../widget-utils-console/src/getCurrentUid.js | 5 + packages/widget-utils-console/src/getLang.js | 5 + .../widget-utils-console/src/getLocale.js | 5 + .../widget-utils-console/src/getParentUid.js | 5 + .../widget-utils-console/src/getRegionName.js | 5 + .../widget-utils-console/src/getSecToken.js | 5 + .../src/getStylePrefixForWindComponent.js | 23 + packages/widget-utils-console/src/getUmid.js | 5 + .../src/getWidgetI18nMessages.js | 7 + .../widget-utils-console/src/getWidgetInfo.js | 18 + .../src/getWindMessages.js | 25 + .../widget-utils-console/src/getZoneName.js | 5 + packages/widget-utils-console/src/index.js | 95 ++++ .../widget-utils-console/src/isOneConsole.js | 12 + .../src/isWidgetPreEnv.js | 25 + packages/widget-utils-console/src/useCORS.js | 9 + packages/widget-utils-rc/.browserslistrc | 2 + packages/widget-utils-rc/.eslintrc.js | 39 ++ packages/widget-utils-rc/.npmignore | 7 + packages/widget-utils-rc/CHANGELOG.md | 6 + packages/widget-utils-rc/README.md | 84 ++++ packages/widget-utils-rc/babel.config.js | 18 + packages/widget-utils-rc/index.d.ts | 60 +++ packages/widget-utils-rc/package.json | 52 ++ .../widget-utils-rc/src/ChannelFeature.js | 36 ++ packages/widget-utils-rc/src/ChannelLink.js | 119 +++++ packages/widget-utils-rc/src/configWind.js | 62 +++ packages/widget-utils-rc/src/createRoot.js | 61 +++ packages/widget-utils-rc/src/index.js | 22 + packages/widget-utils-rc/src/utils/Comment.js | 21 + .../src/utils/extractWindComponentMessages.js | 26 + .../widget-utils-rc/src/utils/logState.js | 18 + packages/widget-utils-rc/src/withContainer.js | 29 ++ packages/widget-utils-rc/test/index.test.js | 1 + scripts/init-package.sh | 41 ++ 276 files changed, 8118 insertions(+) create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 babel.config.js create mode 100644 jest.config.js create mode 100644 lerna.json create mode 100644 package.json create mode 100644 packages/console-mock-interceptor/.browserslistrc create mode 100644 packages/console-mock-interceptor/CHANGELOG.md create mode 100644 packages/console-mock-interceptor/README.md create mode 100644 packages/console-mock-interceptor/babel.config.js create mode 100644 packages/console-mock-interceptor/package.json create mode 100644 packages/console-mock-interceptor/src/index.js create mode 100644 packages/console-mock-interceptor/test/index.test.js create mode 100644 packages/console-request-interceptor/.browserslistrc create mode 100644 packages/console-request-interceptor/.npmignore create mode 100644 packages/console-request-interceptor/CHANGELOG.md create mode 100644 packages/console-request-interceptor/README.md create mode 100644 packages/console-request-interceptor/babel.config.js create mode 100644 packages/console-request-interceptor/package.json create mode 100644 packages/console-request-interceptor/src/index.js create mode 100644 packages/console-request-interceptor/src/utils/docCookies.js create mode 100644 packages/console-request-interceptor/src/utils/getActiveRegionId.js create mode 100644 packages/console-request-interceptor/test/index.test.js create mode 100644 packages/console-request-interceptor/test/mocks/config.js create mode 100644 packages/console-response-interceptor/.browserslistrc create mode 100644 packages/console-response-interceptor/.eslintrc.js create mode 100644 packages/console-response-interceptor/.npmignore create mode 100644 packages/console-response-interceptor/CHANGELOG.md create mode 100644 packages/console-response-interceptor/README.md create mode 100644 packages/console-response-interceptor/babel.config.js create mode 100644 packages/console-response-interceptor/package.json create mode 100644 packages/console-response-interceptor/src/alert.js create mode 100644 packages/console-response-interceptor/src/index.js create mode 100644 packages/console-response-interceptor/src/locales/messages.js create mode 100644 packages/console-response-interceptor/src/logger.js create mode 100644 packages/console-response-interceptor/test/index.test.js create mode 100644 packages/console-risk-interceptor/.browserslistrc create mode 100644 packages/console-risk-interceptor/.eslintrc.js create mode 100644 packages/console-risk-interceptor/.npmignore create mode 100644 packages/console-risk-interceptor/CHANGELOG.md create mode 100644 packages/console-risk-interceptor/README.md create mode 100644 packages/console-risk-interceptor/babel.config.js create mode 100644 packages/console-risk-interceptor/package.json create mode 100644 packages/console-risk-interceptor/src/defaultOptions.js create mode 100644 packages/console-risk-interceptor/src/form.js create mode 100644 packages/console-risk-interceptor/src/getVerifyInformation.js create mode 100644 packages/console-risk-interceptor/src/handleDoubleConfirm.js create mode 100644 packages/console-risk-interceptor/src/helpers.js create mode 100644 packages/console-risk-interceptor/src/index.js create mode 100644 packages/console-risk-interceptor/src/messages.js create mode 100644 packages/fecs-csrf-token-error-interceptor/.browserslistrc create mode 100644 packages/fecs-csrf-token-error-interceptor/.npmignore create mode 100644 packages/fecs-csrf-token-error-interceptor/CHANGELOG.md create mode 100644 packages/fecs-csrf-token-error-interceptor/README.md create mode 100644 packages/fecs-csrf-token-error-interceptor/package.json create mode 100644 packages/fecs-csrf-token-error-interceptor/src/index.js create mode 100644 packages/fecs-csrf-token-error-interceptor/test/index.test.js create mode 100644 packages/search-params-interceptor/.browserslistrc create mode 100644 packages/search-params-interceptor/.npmignore create mode 100644 packages/search-params-interceptor/CHANGELOG.md create mode 100644 packages/search-params-interceptor/README.md create mode 100644 packages/search-params-interceptor/babel.config.js create mode 100644 packages/search-params-interceptor/package.json create mode 100644 packages/search-params-interceptor/src/index.js create mode 100644 packages/search-params-interceptor/test/index.test.js create mode 100644 packages/widget-context/.browserslistrc create mode 100644 packages/widget-context/.eslintrc.js create mode 100644 packages/widget-context/.npmignore create mode 100644 packages/widget-context/CHANGELOG.md create mode 100644 packages/widget-context/README.md create mode 100644 packages/widget-context/babel.config.js create mode 100644 packages/widget-context/package.json create mode 100644 packages/widget-context/src/Consumer.js create mode 100644 packages/widget-context/src/Provider.js create mode 100644 packages/widget-context/src/consoleConfigContext.js create mode 100644 packages/widget-context/src/index.js create mode 100644 packages/widget-context/src/intlContext.js create mode 100644 packages/widget-context/src/widgetContext.js create mode 100644 packages/widget-context/src/withIntl.js create mode 100644 packages/widget-error-boundary/.browserslistrc create mode 100644 packages/widget-error-boundary/.eslintrc.js create mode 100644 packages/widget-error-boundary/.npmignore create mode 100644 packages/widget-error-boundary/CHANGELOG.md create mode 100644 packages/widget-error-boundary/README.md create mode 100644 packages/widget-error-boundary/babel.config.js create mode 100644 packages/widget-error-boundary/package.json create mode 100644 packages/widget-error-boundary/src/Fallback.js create mode 100644 packages/widget-error-boundary/src/index.js create mode 100644 packages/widget-error-boundary/src/logger.js create mode 100644 packages/widget-event-emitter/.browserslistrc create mode 100644 packages/widget-event-emitter/.npmignore create mode 100644 packages/widget-event-emitter/CHANGELOG.md create mode 100644 packages/widget-event-emitter/README.md create mode 100644 packages/widget-event-emitter/package.json create mode 100644 packages/widget-event-emitter/src/index.js create mode 100644 packages/widget-event-emitter/test/index.test.js create mode 100644 packages/widget-hooks/.browserslistrc create mode 100644 packages/widget-hooks/.npmignore create mode 100644 packages/widget-hooks/CHANGELOG.md create mode 100644 packages/widget-hooks/README.md create mode 100644 packages/widget-hooks/index.d.ts create mode 100644 packages/widget-hooks/package.json create mode 100644 packages/widget-hooks/src/index.js create mode 100644 packages/widget-hooks/src/useChannelLink.js create mode 100644 packages/widget-hooks/src/useConsoleConfig.js create mode 100644 packages/widget-hooks/src/useFeature.js create mode 100644 packages/widget-hooks/src/useGlobalState.js create mode 100644 packages/widget-hooks/src/useIntl.js create mode 100644 packages/widget-hooks/src/useRefresher.js create mode 100644 packages/widget-hooks/src/utils/upperfirst.js create mode 100644 packages/widget-hooks/test/index.test.js create mode 100644 packages/widget-loader/.browserslistrc create mode 100644 packages/widget-loader/.eslintrc.js create mode 100644 packages/widget-loader/.npmignore create mode 100644 packages/widget-loader/CHANGELOG.md create mode 100644 packages/widget-loader/README.md create mode 100644 packages/widget-loader/babel.config.js create mode 100644 packages/widget-loader/index.d.ts create mode 100644 packages/widget-loader/package.json create mode 100644 packages/widget-loader/scripts/version.js create mode 100644 packages/widget-loader/src/cons.js create mode 100644 packages/widget-loader/src/createLoader.js create mode 100644 packages/widget-loader/src/getEventEmitter.js create mode 100644 packages/widget-loader/src/index.js create mode 100644 packages/widget-loader/src/preload.js create mode 100644 packages/widget-loader/src/rc/getDisplayName.js create mode 100644 packages/widget-loader/src/rc/withConsoleConfig.js create mode 100644 packages/widget-loader/src/rc/withErrorBoundary.js create mode 100644 packages/widget-loader/src/rc/withEventEmitter.js create mode 100644 packages/widget-loader/src/rc/withSandbox.js create mode 100644 packages/widget-loader/src/rc/withSuspense.js create mode 100644 packages/widget-loader/src/utils/camelCase.js create mode 100644 packages/widget-loader/src/utils/common/createGlobalVariable.js create mode 100644 packages/widget-loader/src/utils/common/eventEmitter.js create mode 100644 packages/widget-loader/src/utils/config/getConfigURL.js create mode 100644 packages/widget-loader/src/utils/config/index.js create mode 100644 packages/widget-loader/src/utils/console/checkConsoleUtils.js create mode 100644 packages/widget-loader/src/utils/console/docCookies.js create mode 100644 packages/widget-loader/src/utils/console/getFecsSecToken.js create mode 100644 packages/widget-loader/src/utils/console/getFecsUmid.js create mode 100644 packages/widget-loader/src/utils/errorGenerator/generate404Error.js create mode 100644 packages/widget-loader/src/utils/errorGenerator/generateErrorMessage.js create mode 100644 packages/widget-loader/src/utils/errorGenerator/generateEvalError.js create mode 100644 packages/widget-loader/src/utils/errorGenerator/generateWidgetConfigExtractionError.js create mode 100644 packages/widget-loader/src/utils/getConfigHost.js create mode 100644 packages/widget-loader/src/utils/getFilename.js create mode 100644 packages/widget-loader/src/utils/getHost.js create mode 100644 packages/widget-loader/src/utils/getRelease.js create mode 100644 packages/widget-loader/src/utils/getVersion.js create mode 100644 packages/widget-loader/src/utils/load.js create mode 100644 packages/widget-loader/src/utils/logger/error.js create mode 100644 packages/widget-loader/src/utils/logger/loader.js create mode 100644 packages/widget-loader/src/utils/parseId.js create mode 100644 packages/widget-loader/src/utils/parseOption.js create mode 100644 packages/widget-loader/src/utils/parseUrl.js create mode 100644 packages/widget-loader/src/utils/request.js create mode 100644 packages/widget-loader/src/utils/runtime/createDynamicWindStylePrefix.js create mode 100644 packages/widget-loader/src/utils/runtime/createWindRuntimeSourceLoader.js create mode 100644 packages/widget-loader/src/utils/runtime/load.js create mode 100644 packages/widget-loader/src/utils/runtime/loadRuntime.js create mode 100644 packages/widget-loader/src/utils/runtime/loadWindMessage.js create mode 100644 packages/widget-loader/src/utils/runtime/needDynamiclyLoadRuntime.js create mode 100644 packages/widget-loader/src/utils/upperFirst.js create mode 100644 packages/widget-loader/src/utils/widgetCache.js create mode 100644 packages/widget-loader/src/utils/widgetStore.js create mode 100644 packages/widget-loader/test/index.test.js create mode 100644 packages/widget-loader/webpack.config.js create mode 100644 packages/widget-logger/.browserslistrc create mode 100644 packages/widget-logger/.npmignore create mode 100644 packages/widget-logger/CHANGELOG.md create mode 100644 packages/widget-logger/README.md create mode 100644 packages/widget-logger/package.json create mode 100644 packages/widget-logger/src/index.js create mode 100644 packages/widget-logger/src/utils/getOrigin.js create mode 100644 packages/widget-logger/src/utils/isDevEnv.js create mode 100644 packages/widget-logger/test/index.test.js create mode 100644 packages/widget-request/CHANGELOG.md create mode 100644 packages/widget-request/README.md create mode 100644 packages/widget-request/package.json create mode 100644 packages/widget-request/src/index.js create mode 100644 packages/widget-request/test/index.test.js create mode 100644 packages/widget-scripts/CHANGELOG.md create mode 100755 packages/widget-scripts/bin/widget-scripts create mode 100644 packages/widget-scripts/package.json create mode 100644 packages/widget-scripts/src/assets/tpl.html create mode 100644 packages/widget-scripts/src/cmds/build.js create mode 100644 packages/widget-scripts/src/cmds/start.js create mode 100644 packages/widget-scripts/src/config/babelPlugins.js create mode 100644 packages/widget-scripts/src/config/babelPresets.js create mode 100644 packages/widget-scripts/src/config/postcss.config.js create mode 100644 packages/widget-scripts/src/config/webpack.common.js create mode 100644 packages/widget-scripts/src/config/webpack.dev.js create mode 100644 packages/widget-scripts/src/config/webpack.prod.js create mode 100644 packages/widget-scripts/src/config/webpackExternals.js create mode 100644 packages/widget-scripts/src/cons.js create mode 100644 packages/widget-scripts/src/index.js create mode 100644 packages/widget-scripts/src/utils/getAbc.js create mode 100644 packages/widget-scripts/src/utils/getId.js create mode 100644 packages/widget-scripts/src/utils/getVersion.js create mode 100644 packages/widget-scripts/src/utils/isTypescript.js create mode 100644 packages/widget-scripts/src/utils/openBrowser.js create mode 100644 packages/widget-skeleton/.browserslistrc create mode 100644 packages/widget-skeleton/.eslintrc.js create mode 100644 packages/widget-skeleton/.npmignore create mode 100644 packages/widget-skeleton/CHANGELOG.md create mode 100644 packages/widget-skeleton/README.md create mode 100644 packages/widget-skeleton/babel.config.js create mode 100644 packages/widget-skeleton/package.json create mode 100644 packages/widget-skeleton/src/index.css create mode 100644 packages/widget-skeleton/src/index.js create mode 100644 packages/widget-skeleton/test/index.test.js create mode 100644 packages/widget-skeleton/webpack.config.js create mode 100644 packages/widget-utils-config/.browserslistrc create mode 100644 packages/widget-utils-config/.npmignore create mode 100644 packages/widget-utils-config/CHANGELOG.md create mode 100644 packages/widget-utils-config/README.md create mode 100644 packages/widget-utils-config/package.json create mode 100644 packages/widget-utils-config/src/getChannelFeature.js create mode 100644 packages/widget-utils-config/src/getChannelFeatureList.js create mode 100644 packages/widget-utils-config/src/getChannelLink.js create mode 100644 packages/widget-utils-config/src/getChannelLinkList.js create mode 100644 packages/widget-utils-config/src/getWidgetI18nMessages.js create mode 100644 packages/widget-utils-config/src/index.js create mode 100644 packages/widget-utils-config/test/index.test.js create mode 100644 packages/widget-utils-console/.browserslistrc create mode 100644 packages/widget-utils-console/.npmignore create mode 100644 packages/widget-utils-console/CHANGELOG.md create mode 100644 packages/widget-utils-console/README.md create mode 100644 packages/widget-utils-console/babel.config.js create mode 100644 packages/widget-utils-console/package.json create mode 100644 packages/widget-utils-console/src/channelFeatureFactory.js create mode 100644 packages/widget-utils-console/src/channelLinkFactory.js create mode 100644 packages/widget-utils-console/src/getAccountType.js create mode 100644 packages/widget-utils-console/src/getChannel.js create mode 100644 packages/widget-utils-console/src/getChannelFeature.js create mode 100644 packages/widget-utils-console/src/getChannelFeatureList.js create mode 100644 packages/widget-utils-console/src/getChannelLink.js create mode 100644 packages/widget-utils-console/src/getChannelLinkList.js create mode 100644 packages/widget-utils-console/src/getCollina.js create mode 100644 packages/widget-utils-console/src/getCurrentUid.js create mode 100644 packages/widget-utils-console/src/getLang.js create mode 100644 packages/widget-utils-console/src/getLocale.js create mode 100644 packages/widget-utils-console/src/getParentUid.js create mode 100644 packages/widget-utils-console/src/getRegionName.js create mode 100644 packages/widget-utils-console/src/getSecToken.js create mode 100644 packages/widget-utils-console/src/getStylePrefixForWindComponent.js create mode 100644 packages/widget-utils-console/src/getUmid.js create mode 100644 packages/widget-utils-console/src/getWidgetI18nMessages.js create mode 100644 packages/widget-utils-console/src/getWidgetInfo.js create mode 100644 packages/widget-utils-console/src/getWindMessages.js create mode 100644 packages/widget-utils-console/src/getZoneName.js create mode 100644 packages/widget-utils-console/src/index.js create mode 100644 packages/widget-utils-console/src/isOneConsole.js create mode 100644 packages/widget-utils-console/src/isWidgetPreEnv.js create mode 100644 packages/widget-utils-console/src/useCORS.js create mode 100644 packages/widget-utils-rc/.browserslistrc create mode 100644 packages/widget-utils-rc/.eslintrc.js create mode 100644 packages/widget-utils-rc/.npmignore create mode 100644 packages/widget-utils-rc/CHANGELOG.md create mode 100644 packages/widget-utils-rc/README.md create mode 100644 packages/widget-utils-rc/babel.config.js create mode 100644 packages/widget-utils-rc/index.d.ts create mode 100644 packages/widget-utils-rc/package.json create mode 100644 packages/widget-utils-rc/src/ChannelFeature.js create mode 100644 packages/widget-utils-rc/src/ChannelLink.js create mode 100644 packages/widget-utils-rc/src/configWind.js create mode 100644 packages/widget-utils-rc/src/createRoot.js create mode 100644 packages/widget-utils-rc/src/index.js create mode 100644 packages/widget-utils-rc/src/utils/Comment.js create mode 100644 packages/widget-utils-rc/src/utils/extractWindComponentMessages.js create mode 100644 packages/widget-utils-rc/src/utils/logState.js create mode 100644 packages/widget-utils-rc/src/withContainer.js create mode 100644 packages/widget-utils-rc/test/index.test.js create mode 100755 scripts/init-package.sh diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..884efc9b6 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +packages/*/node_modules +packages/*/lib +packages/*/dist \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..42241ac2b --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,36 @@ +module.exports = { + "env": { + "browser": true, + "es6": true, + "jest": true, + "node": true + }, + "extends": "eslint:recommended", + "plugins": [ + "react-hooks" + ], + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "indent": [ + "error", + 2 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "never" + ], + "react-hooks/rules-of-hooks": "error", // Checks rules of Hooks + "react-hooks/exhaustive-deps": "warn" // Checks effect dependencies + } +}; \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..e6600864d --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# common + +.* +!.*ignore +!.*rc +!.*rc.js + +# dev + +node_modules/ +packages/*/node_modules/ +packages/*/lib/ + +# generated +*.tgz* +*.log* +build/ +dist/ +coverage/ + +# misc + +*.cache +/.eslintcache \ No newline at end of file diff --git a/README.md b/README.md index 235cef562..fcaca4925 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ # alibabacloud-console-widget A lightweight approach to achieve micro frontends. It's dead simple! + +## Development +1. Jest, eslint and their related packages are installed in the root directory. +2. Npm scripts like `npm test` and `npm run lint` can be found in root's package.json. +3. All packages should be transpiled by babel before publication. +4. A shell script `init-package.sh` can be used to initialize a package, run `npm run add-package`, it will setup a basic configuration for you. diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 000000000..47a5931ea --- /dev/null +++ b/babel.config.js @@ -0,0 +1,32 @@ +module.exports = { + 'presets': [ + ['@babel/preset-env', { + 'modules': false + }] + ], + 'plugins': [ + [ + '@babel/plugin-transform-runtime', + { + // Since Webpack know how to deal with the ES6 modules, + // we don't transform it. + 'useESModules': true + } + ] + ], + 'env': { + 'test': { + 'presets': [ + [ + '@babel/preset-env', + { + targets: { + node: 'current' + } + } + ] + ], + 'plugins': ['@babel/plugin-transform-modules-commonjs'] + } + } +} \ No newline at end of file diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 000000000..872919be5 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,5 @@ +module.exports = { + 'transformIgnorePatterns': [ + '/node_modules/(?!@alicloud)' + ] +} \ No newline at end of file diff --git a/lerna.json b/lerna.json new file mode 100644 index 000000000..a76d83396 --- /dev/null +++ b/lerna.json @@ -0,0 +1,13 @@ +{ + "packages": [ + "packages/*" + ], + "command": { + "publish": { + "message": "chore: Publish" + } + }, + "ignoreChanges":["packages/**/*.md"], + "version": "independent", + "lerna": "2.11.0" +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..51b742a82 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "root", + "private": true, + "scripts": { + "start": "jest --watch packages/*/test", + "boot": "lerna bootstrap -- --registry=http://registry.npm.alibaba-inc.com", + "lint": "eslint packages/", + "lint-fix": "eslint --fix packages/", + "test": "jest packages/", + "clean": "lerna clean --yes", + "reboot": "npm run clean; npm run boot", + "check": "npm run lint; npm test", + "pub": "lerna publish", + "add-package": "sh ./scripts/init-package.sh" + }, + "devDependencies": { + "@babel/core": "^7.1.6", + "@babel/plugin-transform-modules-commonjs": "^7.1.0", + "@babel/plugin-transform-runtime": "^7.4.3", + "@babel/preset-env": "^7.1.6", + "@babel/runtime": "^7.4.4", + "babel-jest": "^24.8.0", + "eslint": "^5.9.0", + "eslint-plugin-react": "^7.11.1", + "eslint-plugin-react-hooks": "^1.6.1", + "jest": "^24.8.0", + "lerna": "^2.11.0", + "lodash": "^4.17.11" + } +} diff --git a/packages/console-mock-interceptor/.browserslistrc b/packages/console-mock-interceptor/.browserslistrc new file mode 100644 index 000000000..527509701 --- /dev/null +++ b/packages/console-mock-interceptor/.browserslistrc @@ -0,0 +1,4 @@ +# Browsers that are supported + +>0.2% +not dead \ No newline at end of file diff --git a/packages/console-mock-interceptor/CHANGELOG.md b/packages/console-mock-interceptor/CHANGELOG.md new file mode 100644 index 000000000..d6637e049 --- /dev/null +++ b/packages/console-mock-interceptor/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/packages/console-mock-interceptor/README.md b/packages/console-mock-interceptor/README.md new file mode 100644 index 000000000..5dac21a10 --- /dev/null +++ b/packages/console-mock-interceptor/README.md @@ -0,0 +1,23 @@ +# @alicloud/console-mock-interceptor +使用此拦截器会在 `localhost` 情况下把用户的请求代理到 **Mocks** 平台,如果调用的 `product` 与 **Mocks** 平台的项目不一致,开发者可以为这些 `product` 设置别名。 + +## 用法 +先使用 npm 安装 +``` +npm install --save @alicloud/console-mock-interceptor +``` + +在配置 `axios` 的地方使用,拦截器默认导出一个函数,这个函数接受一个参数即一个 `alias` 映射对象。 +```js +import consoleMockInterceptor from '@alicloud/console-mock-interceptor' + +// 不设置 alias +axios.interceptors.request.use(consoleMockInterceptor()) + + +// 设置 alias +axios.interceptors.request.use(consoleMockInterceptor({ vpc: 'vpc_next', ram: 'ram_next' })) +``` + +## 设置 alias +如果设置 `alias`,那么请求所对应的 `product` 参数会自动映射到配置好的别名上去。即当请求参数 `product = vpc` 时,拦截器会把它转化为 `product = vpc_next`,再把请求代理到 **Mocks** 平台。这样可以解决实际 `product` 名称与 **Mocks** 平台项目名称不相符的问题。 diff --git a/packages/console-mock-interceptor/babel.config.js b/packages/console-mock-interceptor/babel.config.js new file mode 100644 index 000000000..81d70dc30 --- /dev/null +++ b/packages/console-mock-interceptor/babel.config.js @@ -0,0 +1,18 @@ +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + modules: false + } + ] + ], + plugins: [ + [ + '@babel/plugin-transform-runtime', + { + useESModules: true + } + ] + ] +} \ No newline at end of file diff --git a/packages/console-mock-interceptor/package.json b/packages/console-mock-interceptor/package.json new file mode 100644 index 000000000..5719e89cb --- /dev/null +++ b/packages/console-mock-interceptor/package.json @@ -0,0 +1,27 @@ +{ + "name": "@alicloud/console-mock-interceptor", + "version": "0.1.0", + "description": "Redirect requests to mock server when the interceptor is being used.", + "main": "lib/index.js", + "scripts": { + "babel": "babel src --out-dir lib", + "prepare": "npm run babel" + }, + "keywords": [ + "widget", + "request", + "interceptor" + ], + "author": "woota", + "license": "MIT", + "devDependencies": { + "@babel/cli": "^7.1.5", + "@babel/core": "^7.1.6", + "@babel/plugin-transform-runtime": "^7.1.0", + "@babel/preset-env": "^7.1.6" + }, + "dependencies": { + "@babel/runtime": "^7.1.5" + }, + "gitHead": "849e4a23b7103c6cd68dd5ea62b71445b3ddfbdb" +} diff --git a/packages/console-mock-interceptor/src/index.js b/packages/console-mock-interceptor/src/index.js new file mode 100644 index 000000000..2a421dc49 --- /dev/null +++ b/packages/console-mock-interceptor/src/index.js @@ -0,0 +1,60 @@ +const useMocks = ['localhost', '127.0.0.1'].includes(location.hostname) + +function consoleMockInterceptor(alias) { + + // If user set alias, then replace the corresponding `product` in data + // If not, return the origin data + function getNextData(data) { + try { + const { product } = data + // Replace `product` to its corresponding alias + if (useMocks && alias && product && alias[product]) { + return { + ...data, + product: alias[product] + } + } + return data + } catch (err) { + return data + } + } + + // Mocks does not support the "inner" and "call" apis, + // so we map these apis to the very basic correspondings. + // aka. "data/api.json" and "data/multiApi.json" + // and keep the search part -> ?action=DescribeVpcs. + function getURL(url) { + // If no one-console api + const oneConsoleApiPattern = /^data\/(multi)?(inner)?(api|call)\.json/i + if (!oneConsoleApiPattern.test(url)) { + return url + } + const [ , target ] = /^data\/(.+)\.json/.exec(url) + + // multi + if (target.indexOf('multi') !== -1) { + return url.replace(target, 'multiApi') + } + return url.replace(target, 'api') + } + + return function ({ url, baseURL = '/', data, ...restConfig}) { + if (url) { + // Strip "/" out of url + // eg: "/data/api.json" -> "data/api.json" + url = url.replace(/^\//, '') + } + + return { + ...restConfig, + url: useMocks ? getURL(url) : url, + baseURL: useMocks + ? 'https://mocks.alibaba-inc.com/mock/oneconsole' + : baseURL, + data: getNextData(data) + } + } +} + +export default consoleMockInterceptor diff --git a/packages/console-mock-interceptor/test/index.test.js b/packages/console-mock-interceptor/test/index.test.js new file mode 100644 index 000000000..39196c8a5 --- /dev/null +++ b/packages/console-mock-interceptor/test/index.test.js @@ -0,0 +1,43 @@ +import consoleMockInterceptor from '../src/index' + +beforeAll(() => { + global.location.hostname = 'localhost' +}) + +test('Transformation done right', () => { + const config = { + url: '/data/api.json' + } + const nextConfig = consoleMockInterceptor()(config) + expect(nextConfig.url).toBe('data/api.json') + expect(nextConfig.baseURL).toBe( + 'https://mocks.alibaba-inc.com/mock/oneconsole' + ) +}) + +test('Change the product name properly', () => { + const config = { + data: { + product: 'vpc', + action: 'DescribeVpcs', + params: { RegionId: 'cn-hangzhou' } + } + } + + const alias = { vpc: 'vpc_next' } + const nextConfig = consoleMockInterceptor(alias)(config) + expect(nextConfig.data.product).toBe(alias[config.data.product]) +}) + +test('Change the product name properly for multi-api call', () => { + const config = { + data: { + product: 'ram', + actions: [] + } + } + + const alias = { ram: 'ram_next' } + const nextConfig = consoleMockInterceptor(alias)(config) + expect(nextConfig.data.product).toBe(alias[config.data.product]) +}) diff --git a/packages/console-request-interceptor/.browserslistrc b/packages/console-request-interceptor/.browserslistrc new file mode 100644 index 000000000..40f69444e --- /dev/null +++ b/packages/console-request-interceptor/.browserslistrc @@ -0,0 +1,4 @@ +# Browsers that we support + +>0.2% +not dead \ No newline at end of file diff --git a/packages/console-request-interceptor/.npmignore b/packages/console-request-interceptor/.npmignore new file mode 100644 index 000000000..785711f01 --- /dev/null +++ b/packages/console-request-interceptor/.npmignore @@ -0,0 +1,5 @@ +node_modules/ +src/ +test/ +.browserslistrc +babel.config.js \ No newline at end of file diff --git a/packages/console-request-interceptor/CHANGELOG.md b/packages/console-request-interceptor/CHANGELOG.md new file mode 100644 index 000000000..d6637e049 --- /dev/null +++ b/packages/console-request-interceptor/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/packages/console-request-interceptor/README.md b/packages/console-request-interceptor/README.md new file mode 100644 index 000000000..a105731a3 --- /dev/null +++ b/packages/console-request-interceptor/README.md @@ -0,0 +1,34 @@ +# @alicloud/console-request-interceptor +这是一个 [`axios`](https://github.com/axios/axios) 的请求 **[拦截器(request interceptor)](https://github.com/axios/axios#interceptors)**,用来预处理 **one-console** 应用的请求参数,主要实现下面几个功能: +1. **one-console** 参数格式检查 +2. 格式化部分参数(JSON.stringify(params),JSON.stringify(actions)) +3. **one-console** 参数补全 + - sec_token + - collina + - umid + - region + - ...... +4. 自动分析请求地址是 `/data/api.json` 还是 `/data/multiApi.json` +5. 自动设置请求方法为 `post` + + +## 用法 +使用 **npm** 安装 +``` +npm install --save @alicloud/console-request-interceptor +``` +在配置 `axios` 的地方使用 +```js +import consoleRequestInterceptor from '@alicloud/console-request-interceptor' + +axios.interceptors.request.use(consoleRequestInterceptor) +``` +或给 `axios` 的实例使用 +```js +import axios from 'axios' +import consoleRequestInterceptor from '@alicloud/console-request-interceptor' + +const instance = axios.create() +instance.interceptors.request.use(consoleRequestInterceptor) + +``` \ No newline at end of file diff --git a/packages/console-request-interceptor/babel.config.js b/packages/console-request-interceptor/babel.config.js new file mode 100644 index 000000000..aafa5baf5 --- /dev/null +++ b/packages/console-request-interceptor/babel.config.js @@ -0,0 +1,7 @@ +module.exports = { + 'presets': [ + ['@babel/preset-env', { + 'modules': false + }] + ] +} \ No newline at end of file diff --git a/packages/console-request-interceptor/package.json b/packages/console-request-interceptor/package.json new file mode 100644 index 000000000..5bab39c4d --- /dev/null +++ b/packages/console-request-interceptor/package.json @@ -0,0 +1,29 @@ +{ + "name": "@alicloud/console-request-interceptor", + "version": "0.1.0", + "description": "axios request interceptor for one-console", + "main": "lib/index.js", + "scripts": { + "test": "jest", + "compile": "babel src --out-dir lib", + "prepublishOnly": "npm run compile" + }, + "keywords": [ + "widget", + "fetch", + "interceptor", + "one-console" + ], + "author": "woota", + "license": "MIT", + "peerDependencies": { + "@alicloud/widget-utils-console": "^0.1.0" + }, + "devDependencies": { + "@alicloud/widget-utils-console": "^0.1.0", + "@babel/cli": "^7.1.5", + "@babel/core": "^7.1.6", + "@babel/preset-env": "^7.1.6" + }, + "gitHead": "849e4a23b7103c6cd68dd5ea62b71445b3ddfbdb" +} diff --git a/packages/console-request-interceptor/src/index.js b/packages/console-request-interceptor/src/index.js new file mode 100644 index 000000000..2307e3334 --- /dev/null +++ b/packages/console-request-interceptor/src/index.js @@ -0,0 +1,177 @@ +import { + getSecToken, + getUmid, + getCollina +} from '@alicloud/widget-utils-console' +import getActiveRegionId from './utils/getActiveRegionId' + +// FECS 支持跨域的 CORS 请求 +const CORS_BASE_URL = 'https://fecs.console.aliyun.com' +// 默认请求路径 +const BASE_URL = '/' +// One-console 各类接口 url 映射表 +const API_URL = { + open: [ + 'data/api.json', + 'data/multiApi.json' + ], + inner: [ + 'data/innerApi.json', + 'data/multiInnerApi.json' + ], + app: [ + 'data/call.json', + 'data/multiCall.json' + ] +} + +/** + * Axios intercetor + * One-console request pre-processor + * @param {*} config + */ +function consoleRequestInterceptor(config) { + // 如果传入了 url,且不在我们检查的 url 范围内,提前返回不作处理 + if (!isValidURL(config.url, config.apiType)) { + return config + } + // 单或多接口调用 + const multi = isMulti(config.data) + // 检查参数格式是否正确 + checkArguments(config.data, multi) + // 补全缺省必填参数并修正参数格式 + // params 与 actions 需要 JSON.stringify + const nextData = processData(config.data, [ + 'sec_token', + 'collina', + 'umid', + 'region' + ]) + + // 返回新的 config 对象 + return { + ...config, + method: 'post', // 请求方法强制置为 'post' + url: getURL(config.apiType, multi, config.description), // 获取请求 URL + baseURL: config.useCors ? CORS_BASE_URL : BASE_URL, + withCredentials: config.useCors ? true : false, + data: nextData, + requestStartTime: Date.now(), + } +} + +// 检查是否是合法的 url +function isValidURL(url, apiType = 'open') { + const urls = API_URL[apiType] + if (url && !urls.includes(url)) { + return false + } + return true +} + +// 解析请求的 api 类型 +function isMulti(data) { + // 如果参数中存在 actions 则判定为 multi 请求 + if (typeof data.actions !== 'undefined') { + return true + } + return false +} + +// fecs 暂时不支持 url 后面跟 "?action" 标示,暂时去掉,如果后面支持再加回来 +function getURL(apiType = 'open', multi) { + const urls = API_URL[apiType] + // 添加一个 url 参数方便调试 + return `${multi ? urls[1] : urls[0]}` +} + +// 获取 region 用于后端区分调用的 endpoint +function getRegion(data) { + const multi = isMulti(data) + if (!multi) { + const { params: { RegionId } = {}} = data + if (RegionId) { + return RegionId + } + } else { + const { actions } = data + for(const action of actions) { + const { params: { RegionId } = {} } = action + if (RegionId) { + return RegionId + } + } + } + return getActiveRegionId() +} + +// 必填缺省参数补全并格式化部分参数 +const utilsMap = { + sec_token: getSecToken, + collina: getCollina, + umid: getUmid, + region: getRegion +} +function processData(data, keys = []) { + const nextData = { ...data } + keys.forEach(key => { + if (typeof nextData[key] === 'undefined') { + // 只有 getRegion 需要参数 + // 其它方法会忽略参数 data + nextData[key] = utilsMap[key] && utilsMap[key](data) + } + }) + // stringify `params` 与 `actions` + if (nextData.params) { + nextData.params = JSON.stringify(nextData.params) + } + if (nextData.actions) { + nextData.actions = JSON.stringify(nextData.actions) + } + return nextData +} + +// 检查参数 +function checkArguments(data, multi) { + if (multi) { + checkArgumentsForMultiApi(data) + } else { + checkArgumentsForApi(data) + } +} + +// 检查单接口入参 +function checkArgumentsForApi({ product, action }) { + if (!product) { + throw new Error( + 'You must specify which product\'s api you want to call' + ) + } + if (!action) { + throw new Error('You must specify which api you want to call') + } +} + +// 检查多接口入参 +function checkArgumentsForMultiApi({ product, actions }) { + if (!product) { + throw new Error( + 'You must specify which product\'s api you want to call' + ) + } + if (!Array.isArray(actions)) { + throw new TypeError('Actions must be an array') + } + // loop through to check every action + actions.forEach(({ action }) => { + if (!action) { + throw new Error( + `You must specify which api you want to call. + If you see this log, it's likely that you've forgot to specify an action + property in your actions argument. Go for a double check.` + ) + } + }) +} + +export default consoleRequestInterceptor diff --git a/packages/console-request-interceptor/src/utils/docCookies.js b/packages/console-request-interceptor/src/utils/docCookies.js new file mode 100644 index 000000000..145bbe40f --- /dev/null +++ b/packages/console-request-interceptor/src/utils/docCookies.js @@ -0,0 +1,58 @@ +/*\ +|*| +|*| :: cookies.js :: +|*| +|*| A complete cookies reader/writer framework with full unicode support. +|*| +|*| https://developer.mozilla.org/en-US/docs/DOM/document.cookie +|*| +|*| This framework is released under the GNU Public License, version 3 or later. +|*| http://www.gnu.org/licenses/gpl-3.0-standalone.html +|*| +|*| Syntaxes: +|*| +|*| * docCookies.setItem(name, value[, end[, path[, domain[, secure]]]]) +|*| * docCookies.getItem(name) +|*| * docCookies.removeItem(name[, path], domain) +|*| * docCookies.hasItem(name) +|*| * docCookies.keys() +|*| +\*/ +/* eslint-disable */ +export default { + getItem: function (sKey) { + return decodeURIComponent(document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + encodeURIComponent(sKey).replace(/[-.+*]/g, '\\$&') + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1')) || null + }, + setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) { + if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return false } + var sExpires = '' + if (vEnd) { + switch (vEnd.constructor) { + case Number: + sExpires = vEnd === Infinity ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT' : '; max-age=' + vEnd + break + case String: + sExpires = '; expires=' + vEnd + break + case Date: + sExpires = '; expires=' + vEnd.toUTCString() + break + } + } + document.cookie = encodeURIComponent(sKey) + '=' + encodeURIComponent(sValue) + sExpires + (sDomain ? '; domain=' + sDomain : '') + (sPath ? '; path=' + sPath : '') + (bSecure ? '; secure' : '') + return true + }, + removeItem: function (sKey, sPath, sDomain) { + if (!sKey || !this.hasItem(sKey)) { return false } + document.cookie = encodeURIComponent(sKey) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' + ( sDomain ? '; domain=' + sDomain : '') + ( sPath ? '; path=' + sPath : '') + return true + }, + hasItem: function (sKey) { + return (new RegExp('(?:^|;\\s*)' + encodeURIComponent(sKey).replace(/[-.+*]/g, '\\$&') + '\\s*\\=')).test(document.cookie) + }, + keys: /* optional method: you can safely remove it! */ function () { + var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, '').split(/\s*(?:\=[^;]*)?;\s*/) + for (var nIdx = 0; nIdx < aKeys.length; nIdx++) { aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]) } + return aKeys + } +} \ No newline at end of file diff --git a/packages/console-request-interceptor/src/utils/getActiveRegionId.js b/packages/console-request-interceptor/src/utils/getActiveRegionId.js new file mode 100644 index 000000000..eafabd682 --- /dev/null +++ b/packages/console-request-interceptor/src/utils/getActiveRegionId.js @@ -0,0 +1,7 @@ +import docCookies from './docCookies' + +// 控制台存储 region 的 cookie 名称 +const REGION_COOKIE_NAME = 'activeRegionId' +export default function getActiveRegionId() { + return docCookies.getItem(REGION_COOKIE_NAME) +} diff --git a/packages/console-request-interceptor/test/index.test.js b/packages/console-request-interceptor/test/index.test.js new file mode 100644 index 000000000..b54526107 --- /dev/null +++ b/packages/console-request-interceptor/test/index.test.js @@ -0,0 +1,128 @@ +import consoleRequestInterceptor from '../src/index' +import docCookies from '../src/docCookies' +import { + config, + correctApi, + incorrectApi, + correctMultiApi, + edgeCase1, + edgeCase2, + apiWithoutProduct, + apiWithoutAction, + multiApiWrongAction, + multiApiWithoutProduct, + multiApiWithoutActionInActions, +} from './mocks/config' + +const riskInfo = { + UMID: 'Ye1d3501eb576724dbe3381dc4147f9f0', + GETUA: function(){ + let tmp_ua_mock = Date.now() + return tmp_ua_mock + } +} + +beforeAll(() => { + global['RISK_INFO'] = riskInfo + global['ALIYUN_CONSOLE_CONFIG'] = { + 'SEC_TOKEN': 'FMAnoDl2xZ4GwEZJZOR4ZK' + } + + // set cookie for activeRegionId + docCookies.setItem('activeRegionId', 'cn-beijing') +}) + + +test.only('Ignore unrecognized request', () => { + const nextConfig = consoleRequestInterceptor(config) + expect(nextConfig).toBe(config) +}) + + +test('Enhance the config as expected', () => { + const nextConfig = consoleRequestInterceptor(correctApi) + const { data: nextData } = nextConfig + expect(nextConfig.method).toBe('post') + expect(nextConfig.url).toBe(`/data/api.json?action=${correctApi.data.action}`) + expect(nextData.sec_token).toBe('FMAnoDl2xZ4GwEZJZOR4ZK') + expect(nextData.umid).toBe('Ye1d3501eb576724dbe3381dc4147f9f0') + expect(nextData.collina).toBeLessThan(Date.now()) + expect(nextData.region).toBe(correctApi.data.params.RegionId) + expect(nextData.params).toBe(JSON.stringify(correctApi.data.params)) +}) + +test('Ignore the passed in method', () => { + const nextConfig = consoleRequestInterceptor(incorrectApi) + expect(nextConfig.method).toBe('post') +}) + +test('Ehance multi api config as expected', () => { + const nextConfig = consoleRequestInterceptor(correctMultiApi) + const { data: nextData } = nextConfig + expect(nextConfig.method).toBe('post') + expect(nextConfig.url).toBe('/data/multiApi.json') + expect(nextData.sec_token).toBe('FMAnoDl2xZ4GwEZJZOR4ZK') + expect(nextData.umid).toBe('Ye1d3501eb576724dbe3381dc4147f9f0') + expect(nextData.collina).toBeLessThan(Date.now()) + expect(nextData.region).toBe('cn-beijing') + expect(nextData.actions).toBe(JSON.stringify(correctMultiApi.data.actions)) +}) + + +test('url and data not match', () => { + // const nextConfig = consoleRequestInterceptor(edgeCase1) + // const { data: nextData } = nextConfig + // expect(nextConfig.method).toBe('post') + // expect(nextData.url).toBe(edgeCase1.url) + expect( + () => consoleRequestInterceptor(edgeCase1) + ).toThrowError( + 'You must specify which api you want to call' + ) + + expect( + () => consoleRequestInterceptor(edgeCase2) + ).toThrowError( + 'Actions must be an array' + ) +}) + + + +// Check data +test('Should throw when no product is provided', () => { + expect( + () => consoleRequestInterceptor(apiWithoutProduct) + ).toThrowError( + 'You must specify which product\'s api you want to call' + ) + expect( + () => consoleRequestInterceptor(multiApiWithoutProduct) + ).toThrowError( + 'You must specify which product\'s api you want to call' + ) +}) +test('Should throw when no action is provided', () => { + expect( + () => consoleRequestInterceptor(apiWithoutAction) + ).toThrowError( + 'You must specify which api you want to call' + ) +}) +test('Should throw when action is incorrect', () => { + expect( + () => consoleRequestInterceptor(multiApiWrongAction) + ).toThrowError( + 'Actions must be an array' + ) +}) +test('Should throw when action is missing in one of the actions', () => { + expect( + () => consoleRequestInterceptor(multiApiWithoutActionInActions) + ).toThrowError( + `You must specify which api you want to call. + If you see this log, it's likely that you've forgot to specify an action + property in your actions argument. Go for a double check.` + ) +}) + diff --git a/packages/console-request-interceptor/test/mocks/config.js b/packages/console-request-interceptor/test/mocks/config.js new file mode 100644 index 000000000..477376f91 --- /dev/null +++ b/packages/console-request-interceptor/test/mocks/config.js @@ -0,0 +1,108 @@ +export const config = { + method: 'get', + url: '/data/config.json', + data: { + key: 'value' + } +} + +export const correctApi = { + data: { + product: 'vpc', + action: 'DescribeVpcs', + params: { + RegionId: 'es-us-1' + } + } +} + +export const incorrectApi = { + method: 'get', + url: '/data/api.json', + data: { + product: 'vpc', + action: 'DescribeVpcs', + params: { + RegionId: 'we-us-1' + } + } +} + +export const correctMultiApi = { + data: { + product: 'vpc', + actions: [ + { + action: 'a', + params: {} + }, + { + action: 'b', + params: {} + } + ] + } +} + + +/** + * Below are edge cases + * Might be very easy to broken the tests + * Do whatever you like + */ + +// fuck up with url and data +export const edgeCase1 = { + url: '/data/api.json', + data: { + product: 'vpc', + actions: [ + { + action: 'a', + params: {} + } + ] + } +} + +export const edgeCase2 = { + url: '/data/multiApi.json', + data: { + product: 'vpc', + action: 'a', + params: {} + } +} + +// Check data +export const apiWithoutProduct = { + data: { + action: 'a' + } +} +export const apiWithoutAction = { + data: { + product: 'vpc' + } +} +export const multiApiWithoutProduct = { + data: { + actions: [] + } +} +export const multiApiWrongAction = { + data: { + product: 'vpc', + actions: 'a' + } +} +export const multiApiWithoutActionInActions = { + data: { + product: 'vpc', + actions: [ + { + params: {} + } + ] + } +} \ No newline at end of file diff --git a/packages/console-response-interceptor/.browserslistrc b/packages/console-response-interceptor/.browserslistrc new file mode 100644 index 000000000..a62926302 --- /dev/null +++ b/packages/console-response-interceptor/.browserslistrc @@ -0,0 +1,2 @@ +>0.2% +not dead diff --git a/packages/console-response-interceptor/.eslintrc.js b/packages/console-response-interceptor/.eslintrc.js new file mode 100644 index 000000000..dc326864f --- /dev/null +++ b/packages/console-response-interceptor/.eslintrc.js @@ -0,0 +1,39 @@ +module.exports = { + "env": { + "browser": true, + "es6": true, + "jest": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended" + ], + "settings": { + "react": { + "version": "16.x" + } + }, + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "indent": [ + "error", + 2 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "never" + ] + } +}; \ No newline at end of file diff --git a/packages/console-response-interceptor/.npmignore b/packages/console-response-interceptor/.npmignore new file mode 100644 index 000000000..e25fa8114 --- /dev/null +++ b/packages/console-response-interceptor/.npmignore @@ -0,0 +1,7 @@ +.* +!.*ignore +node_modules/ +src/ +test/ +babel.config.js +*lock.json diff --git a/packages/console-response-interceptor/CHANGELOG.md b/packages/console-response-interceptor/CHANGELOG.md new file mode 100644 index 000000000..9ae953797 --- /dev/null +++ b/packages/console-response-interceptor/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + diff --git a/packages/console-response-interceptor/README.md b/packages/console-response-interceptor/README.md new file mode 100644 index 000000000..943a5bee4 --- /dev/null +++ b/packages/console-response-interceptor/README.md @@ -0,0 +1,15 @@ +# @alicloud/console-response-interceptor +处理 **one-console** 请求返回的数据,如果请求成功会直接返回瑶池的数据,如果请求失败会抛出异常。如果在配置请求的时候设置了 `config.ignoreError` 则会返回异常的 `response` 到上层,而不 `throw` 任何的 Error。 + +## 使用 +先通过 **npm** 安装 +``` +npm install --save @alicloud/console-response-interceptor +``` + +然后在配置 `axios` 的地方使用 +```js +import consoleResponseInterceptor from '@alicloud/console-response-interceptor' + +axios.interceptors.response.use(consoleResponseInterceptor) +``` \ No newline at end of file diff --git a/packages/console-response-interceptor/babel.config.js b/packages/console-response-interceptor/babel.config.js new file mode 100644 index 000000000..43e99bc5b --- /dev/null +++ b/packages/console-response-interceptor/babel.config.js @@ -0,0 +1,18 @@ +module.exports = { + 'presets': [ + ['@babel/preset-env', { + 'modules': false + }], + ['@babel/preset-react'] + ], + 'plugins': [ + [ + '@babel/plugin-transform-runtime', + { + // Since Webpack know how to deal with the ES6 modules, + // we don't transform it. + 'useESModules': true + } + ] + ] +} \ No newline at end of file diff --git a/packages/console-response-interceptor/package.json b/packages/console-response-interceptor/package.json new file mode 100644 index 000000000..ddeddd280 --- /dev/null +++ b/packages/console-response-interceptor/package.json @@ -0,0 +1,44 @@ +{ + "name": "@alicloud/console-response-interceptor", + "version": "0.1.0", + "description": "Get request data from the response.", + "main": "lib/index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "jest", + "compile": "babel src -d lib", + "prepublish": "npm run compile" + }, + "keywords": [ + "widget", + "request", + "interceptor" + ], + "author": "woota", + "license": "MIT", + "devDependencies": { + "@alicloud/search-params-interceptor": "^0.1.0", + "@alicloud/widget-logger": "^0.1.0", + "@alicloud/widget-utils-console": "^0.1.0", + "@babel/cli": "^7.1.5", + "@babel/core": "^7.1.6", + "@babel/plugin-transform-runtime": "^7.4.3", + "@babel/preset-env": "^7.1.6", + "@babel/preset-react": "^7.0.0" + }, + "dependencies": { + "@babel/runtime": "^7.4.3" + }, + "peerDependencies": { + "@alicloud/search-params-interceptor": "^0.1.0", + "@alicloud/widget-logger": "^0.1.0", + "@alicloud/widget-utils-console": "^0.1.0", + "@alicloud/console-components": "^1.x", + "prop-types": "^15.7.2", + "react": "^16.8.6", + "react-dom": "^16.8.6" + }, + "gitHead": "e4c1aa7959d038f1e810eb8fb32968c3c7dd8f90" +} diff --git a/packages/console-response-interceptor/src/alert.js b/packages/console-response-interceptor/src/alert.js new file mode 100644 index 000000000..6b5712ef4 --- /dev/null +++ b/packages/console-response-interceptor/src/alert.js @@ -0,0 +1,118 @@ +import React from 'react' +import { render, unmountComponentAtNode } from 'react-dom' +import PropTypes from 'prop-types' +import { Dialog, Slider, Icon } from '@alicloud/console-components' +import { + getLocale, + getStylePrefixForWindComponent +} from '@alicloud/widget-utils-console' +import getMessages from './locales/messages' + + +const style = { + width: '550px', +} +const infoStyle = { + userSelect: 'text' +} +const footerActions = ['ok'] +const messages = getMessages(getLocale()) +const style_prefix = (() => { + try { + return getStylePrefixForWindComponent() + } catch (e) { + console.error( // eslint-disable-line no-console + `"getStylePrefixForWindComponent" is not found, "STYLE_PREFIX" for wind component will fallback to "${process.env.STYLE_PREFIX}", please upgrade "@alicloud/widget-loader" by execute the cmd "npm install @alicloud/widget-loader@latest --save" in your terminal. + If you are seeing this error message in widget dev environment, then upgrade the "@alicloud/widget-utils-console" to the latest instead.` + ) + return process.env.STYLE_PREFIX + } +})() + +function Content({ code, message, requestId, ...restProps }) { + return ( +
+

Message : {message}

+

Code : {code}

+

Request ID : {requestId}

+
+
+ ) +} +Content.propTypes = { + code: PropTypes.string, + message: PropTypes.string, + requestId: PropTypes.string +} + +const ref = { + current: null, + rest: [], +} + +function alert(response) { + if (ref.current !== null) { + ref.rest.push(response) + return + } + ref.current = response + + const container = document.createElement('div') + document.body.appendChild(container) + + const unmount = () => { + unmountComponentAtNode(container) + container.parentNode.removeChild(container) + ref.current = null + const next = ref.rest.shift() + next && alert(next) + } + + const { title, ...restMessages } = messages + const { code, message, requestId, withFailedRequest, data = {} } = response + + const errorContent = (() => { + if (withFailedRequest !== true) { + return + } + return ( + Object.keys(data) + .filter(key => data[key] && data[key].Code !== '200') + .map(key => data[key]) + .map(item => ( + + )) + ) + })() + + render( + + } + nextArrow={< Icon prefix={style_prefix} type="arrow-right" />} + > + {errorContent} + + , + container + ) +} + +export default alert diff --git a/packages/console-response-interceptor/src/index.js b/packages/console-response-interceptor/src/index.js new file mode 100644 index 000000000..e596d542a --- /dev/null +++ b/packages/console-response-interceptor/src/index.js @@ -0,0 +1,54 @@ +import alert from './alert' +import WidgetAPILogger from './logger' + +function consoleResponseInterceptor(response) { + // Init a logger and send api log to sls server. + const logger = new WidgetAPILogger() + logger.log(response) + + const { data: apiResponseData } = response + const { config: { ignoreError } } = response + if ( + // Single api succeeded -> code 200, withFailedRequest undefined + // Multi api succeeded -> code 200, withFailedRequest false + apiResponseData.code === '200' && + apiResponseData.withFailedRequest !== true + ) { + return apiResponseData.data + } else if ( + // Multi api with failed request + apiResponseData.code === '200' && + apiResponseData.withFailedRequest === true + ) { + const error = new Error('Multi OpenAPI calls with failed request.') + error.response = response + if (!ignoreError) { + alert(apiResponseData) + throw error + } + return apiResponseData + } else if (apiResponseData.message) { + // Single api failed with an error message + const error = new Error(apiResponseData.message) + error.response = response + if (!ignoreError) { + alert(apiResponseData) + throw error + } + return apiResponseData + } else { + // Single api failed without an error message + const error = new Error('OpenAPI failed without a message.') + error.response = response + if (!ignoreError) { + alert({ + ...apiResponseData, + message: error.message, + }) + throw error + } + return apiResponseData + } +} + +export default consoleResponseInterceptor diff --git a/packages/console-response-interceptor/src/locales/messages.js b/packages/console-response-interceptor/src/locales/messages.js new file mode 100644 index 000000000..95b5d2576 --- /dev/null +++ b/packages/console-response-interceptor/src/locales/messages.js @@ -0,0 +1,24 @@ +const messages = { + 'zh-CN': { + title: '系统错误', + ok: '确定', + }, + 'en-US': { + title: 'Error', + ok: 'OK', + }, + 'ja-JP': { + title: 'システムエラー', + ok: 'OK', + }, + 'zh-TW': { + title: '系統錯誤', + ok: '確定', + }, + 'zh-HK': { + title: '系統錯誤', + ok: '確定', + }, +} + +export default (locale = 'en-US') => messages[locale] \ No newline at end of file diff --git a/packages/console-response-interceptor/src/logger.js b/packages/console-response-interceptor/src/logger.js new file mode 100644 index 000000000..5b44f3ef9 --- /dev/null +++ b/packages/console-response-interceptor/src/logger.js @@ -0,0 +1,94 @@ +import WidgetLogger from '@alicloud/widget-logger' +import { getWidgetInfo } from '@alicloud/widget-utils-console' +import { URLSearchParams } from '@alicloud/search-params-interceptor' + +/** + * MODEL + * loc: http://127.0.0.1:12306 + * ua: xxx + * uid: xxx + * parent_uid: xxx + * id: widget-test + * version: 1.6.1 + * loader: 3.3.0 + * + * start_time: 1561965371356 + * end_time: 1561965371356 + * cost: 300 + * trace_id: ac3243ljlkfasdlj34032423jl + * code: 200 + * msg: '' + * api: /data/api.json?action=DescribeVpcs + * success: 1 + */ +const { + id = process.env.WIDGET_ID, + version = process.env.WIDGET_VER, + loader +} = getWidgetInfo() + +class WidgetAPILogger extends WidgetLogger { + constructor(props, opts) { + super({ + id, + version, + loader, + ...props, + }, { + storeType: 'api', + ...opts, + }) + } + + log({ config, data, headers, status }) { + // Time + const { requestStartTime } = config + this.state.start_time = requestStartTime + this.state.end_time = Date.now() + this.state.cost = this.state.end_time - this.state.start_time + + // Trace ID + this.state.trace_id = headers['eagleeye-traceid'] + + // Reponse Data + if (status === 200 && data) { + const { code, message, successResponse } = data + this.state.code = code + this.state.msg = message + this.state.success = successResponse ? 1 : 0 + } else { + this.state.code = status + this.state.msg = 'Http request failed.' + this.state.success = 0 + } + + // API + const { url, data: dataStr } = config + const requestData = new URLSearchParams(dataStr) + const [targetUrl, targetApiType] = /\/data\/(.+)\.json/.exec(url) + if (targetApiType.indexOf('multi') !== -1) { + try { + const actions = JSON.parse(requestData.get('actions')) + let apiIdentifier = '' + const actionSet = {} + for (const item of actions) { + if (!actionSet[item.action]) { + actionSet[item.action] = 1 + } + } + for (const key of Object.keys(actionSet)) { + apiIdentifier += `${key},` + } + this.state.api = `${targetUrl}?product=${requestData.get('product')}&action=${apiIdentifier}` + } catch (err) { + this.state.api = targetUrl + } + } else { + this.state.api = `${targetUrl}?product=${requestData.get('product')}&action=${requestData.get('action')}` + } + + this.send() + } +} + +export default WidgetAPILogger diff --git a/packages/console-response-interceptor/test/index.test.js b/packages/console-response-interceptor/test/index.test.js new file mode 100644 index 000000000..3e5e65644 --- /dev/null +++ b/packages/console-response-interceptor/test/index.test.js @@ -0,0 +1 @@ +test('Tests should be fill up', () => {}) \ No newline at end of file diff --git a/packages/console-risk-interceptor/.browserslistrc b/packages/console-risk-interceptor/.browserslistrc new file mode 100644 index 000000000..40f69444e --- /dev/null +++ b/packages/console-risk-interceptor/.browserslistrc @@ -0,0 +1,4 @@ +# Browsers that we support + +>0.2% +not dead \ No newline at end of file diff --git a/packages/console-risk-interceptor/.eslintrc.js b/packages/console-risk-interceptor/.eslintrc.js new file mode 100644 index 000000000..dc326864f --- /dev/null +++ b/packages/console-risk-interceptor/.eslintrc.js @@ -0,0 +1,39 @@ +module.exports = { + "env": { + "browser": true, + "es6": true, + "jest": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended" + ], + "settings": { + "react": { + "version": "16.x" + } + }, + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "indent": [ + "error", + 2 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "never" + ] + } +}; \ No newline at end of file diff --git a/packages/console-risk-interceptor/.npmignore b/packages/console-risk-interceptor/.npmignore new file mode 100644 index 000000000..785711f01 --- /dev/null +++ b/packages/console-risk-interceptor/.npmignore @@ -0,0 +1,5 @@ +node_modules/ +src/ +test/ +.browserslistrc +babel.config.js \ No newline at end of file diff --git a/packages/console-risk-interceptor/CHANGELOG.md b/packages/console-risk-interceptor/CHANGELOG.md new file mode 100644 index 000000000..d6637e049 --- /dev/null +++ b/packages/console-risk-interceptor/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/packages/console-risk-interceptor/README.md b/packages/console-risk-interceptor/README.md new file mode 100644 index 000000000..f03466217 --- /dev/null +++ b/packages/console-risk-interceptor/README.md @@ -0,0 +1,27 @@ +# @alicloud/console-risk-interceptor +这是一个 `axios` 的 **response** 拦截器,用于拦截触发了风控的请求,并完成风控验证后返回业务期望的 **response**。 + +## 使用 +先通过 **npm** 安装 +``` +npm install --save @alicloud/console-risk-interceptor +``` +然后在配置 `axios` 的地方使用 +```js +import consoleRiskInterceptor from '@alicloud/console-risk-interceptor' + +axios.interceptors.response.use(consoleRiskInterceptor) +``` + +## 原理 +``` + Found Risk Intercept By Handle Risk +Request ------------> Response --------------> Interceptor ------------> + + Pass to +Response(new) ------------> CodeThatInitializeTheRequest +``` + +## 风控 + + diff --git a/packages/console-risk-interceptor/babel.config.js b/packages/console-risk-interceptor/babel.config.js new file mode 100644 index 000000000..43e99bc5b --- /dev/null +++ b/packages/console-risk-interceptor/babel.config.js @@ -0,0 +1,18 @@ +module.exports = { + 'presets': [ + ['@babel/preset-env', { + 'modules': false + }], + ['@babel/preset-react'] + ], + 'plugins': [ + [ + '@babel/plugin-transform-runtime', + { + // Since Webpack know how to deal with the ES6 modules, + // we don't transform it. + 'useESModules': true + } + ] + ] +} \ No newline at end of file diff --git a/packages/console-risk-interceptor/package.json b/packages/console-risk-interceptor/package.json new file mode 100644 index 000000000..a455b74ae --- /dev/null +++ b/packages/console-risk-interceptor/package.json @@ -0,0 +1,48 @@ +{ + "name": "@alicloud/console-risk-interceptor", + "version": "0.1.0", + "description": "Response interceptor of axios used for risk-control interception", + "main": "lib/index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "jest", + "compile": "babel src --out-dir lib", + "prepublishOnly": "npm run compile" + }, + "keywords": [ + "widget", + "interceptor", + "risk-control" + ], + "dependencies": { + "@alicloud/search-params-interceptor": "^0.1.0", + "@babel/runtime": "^7.1.5" + }, + "peerDependencies": { + "@alicloud/widget-utils-console": "^0.1.0", + "@alicloud/console-components": "^1.x", + "axios": "^0.18.0", + "prop-types": "^15.6.2", + "react": "^16.x", + "react-dom": "^16.x" + }, + "devDependencies": { + "@alicloud/widget-utils-console": "^0.1.0", + "@alicloud/console-components": "^1.x", + "@babel/cli": "^7.1.5", + "@babel/core": "^7.1.6", + "@babel/plugin-transform-runtime": "^7.1.0", + "@babel/preset-env": "^7.1.6", + "@babel/preset-react": "^7.0.0", + "axios": "^0.18.0", + "moment": "^2.22.2", + "prop-types": "^15.6.2", + "react": "^16.6.3", + "react-dom": "^16.6.3" + }, + "author": "woota", + "license": "MIT", + "gitHead": "849e4a23b7103c6cd68dd5ea62b71445b3ddfbdb" +} diff --git a/packages/console-risk-interceptor/src/defaultOptions.js b/packages/console-risk-interceptor/src/defaultOptions.js new file mode 100644 index 000000000..c42f1a755 --- /dev/null +++ b/packages/console-risk-interceptor/src/defaultOptions.js @@ -0,0 +1,21 @@ +export default { + code: { + success: '200', + // 风控检测到风险并需要二次验证 + doubleConfirm: 'FoundRiskAndDoubleConfirm', + // 风控检测到风险需要中断业务流程 + forbidden: 'FoundRiskAndTip', + // 二次验证不通过 + verifyCodeInvalid: 'verifyCodeInvalid', + }, + url: { + // 请求发送验证码接口地址 + generateVerificationCode: '/risk/sendVerifyMessage.json', + // 设置用户风控验证方式地址 + setVerificationMethod: 'https://account.console.aliyun.com/#/secure', + // 修改设置手机号/邮箱/MFA地址 + changeVerificationMethod: 'https://account.console.aliyun.com/#/secure', + // 如何设置手机帮助 + bindMobileHelp: 'https://account.console.aliyun.com', + }, +} diff --git a/packages/console-risk-interceptor/src/form.js b/packages/console-risk-interceptor/src/form.js new file mode 100644 index 000000000..e45ecb63f --- /dev/null +++ b/packages/console-risk-interceptor/src/form.js @@ -0,0 +1,177 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import { Button, Input, Grid, Form } from '@alicloud/console-components' +import axios from 'axios' +import { getSecToken, getUmid, getCollina } from '@alicloud/widget-utils-console' +import searchParamsInterceptor from '@alicloud/search-params-interceptor' +import messages from './messages' +import defaultOptions from './defaultOptions' + +const { Col, Row } = Grid +const ItemLayout = { + labelCol: { span: 10 }, + wrapperCol: { span: 14 }, +} +const axiosInstance = axios.create() +// use interceptor +axiosInstance.interceptors.request.use(searchParamsInterceptor) + +const { url: verifyUrl } = defaultOptions + + +class VerifyForm extends Component { + constructor(props) { + super(props) + this.timer = null + this.state = { + isCountdownStarted: false, + countdown: 0, + } + // Bind the methods + this.onInputChange = this.onInputChange.bind(this) + this.onGenerateVerifyCode = this.onGenerateVerifyCode.bind(this) + this.startCountdownTimer = this.startCountdownTimer.bind(this) + this.updateCountdown = this.updateCountdown.bind(this) + this.clearTimer = this.clearTimer.bind(this) + } + + componentWillUnmount() { + this.clearTimer() + } + + onInputChange(value) { + this.props.setVerifyCode(value.trim()) + } + + async onGenerateVerifyCode() { + this.startCountdownTimer() + + const { options: { codeType, verifyType }, setRequestId } = this.props + const reqData = { + codeType, + verifyType, + sec_token: getSecToken(), + umid: getUmid(), + collina: getCollina(), + } + + try { + const res = await axiosInstance({ + method: 'post', + url: verifyUrl.generateVerificationCode, + data: reqData, + timeout: 15000, + }) + + const { data: { data: resData } } = res + if (!resData) { + throw new Error('[generateVerifyCode] failed') + } + + setRequestId(resData.requestId) // 保存发送验证码请求的 requestId + } catch (e) { + // eslint-disable-next-line no-console + console.error('[onGenerateVerifyCode] failed: ', e.message) + // this.props.onError(e) + // setRequestId('Fake requestId') + } + } + + startCountdownTimer() { + this.updateCountdown(60) + this.timer = setInterval(() => { + if (this.state.countdown <= 0) { + this.clearTimer() + return + } + this.updateCountdown(--this.state.countdown) // eslint-disable-line + }, 1000) + } + + updateCountdown(value) { + this.setState({ + countdown: value, + isCountdownStarted: value !== 0, + }) + } + + clearTimer() { + clearInterval(this.timer) + } + + render() { + const { + options: { verifyType, verifyDetail, isVerifyCodeValid }, + } = this.props + + const verifyMessages = { + ...messages[verifyType], + ...messages.others, + } + + const { + isCountdownStarted, + countdown, + } = this.state + + + return ( +
+ + + + + + + + + { + // sms or email时,才需要发送行为 + verifyType !== 'ga' ? + + { + isCountdownStarted ? + : + + } + : + null + } + + +
+ ) + } +} + +VerifyForm.propTypes = { + options: PropTypes.shape({ + codeType: PropTypes.string, + verifyType: PropTypes.string, + verifyDetail: PropTypes.string, + isVerifyCodeValid: PropTypes.bool, + }), + setRequestId: PropTypes.func, + setVerifyCode: PropTypes.func, + onError: PropTypes.func, +} + +export default VerifyForm diff --git a/packages/console-risk-interceptor/src/getVerifyInformation.js b/packages/console-risk-interceptor/src/getVerifyInformation.js new file mode 100644 index 000000000..320bd2e1e --- /dev/null +++ b/packages/console-risk-interceptor/src/getVerifyInformation.js @@ -0,0 +1,63 @@ +import React from 'react' +import { Dialog } from '@alicloud/console-components' +import Form from './form' +import messages from './messages' + +function getVerifyInformation(options) { + return new Promise((resolve, reject) => { + // eslint-disable-next-line prefer-const + let { lastRequestId: requestId, ...rest } = options + let verifyCode + + function setRequestId(val) { + requestId = val + } + function setVerifyCode(val) { + verifyCode = val + } + + const { verifyType } = options + const { title } = messages[verifyType] + + try { + Dialog.confirm({ // 弹出对话框 + title, + content: ( +
+ ), + onOk: () => { + if (verifyType === 'ga' && verifyCode) { + return resolve({ vCode: verifyCode }) + } + if (requestId && verifyCode) { + return resolve({ + reqId: requestId, + vCode: verifyCode, + }) + } else { + console.warn( // eslint-disable-line no-console + '[getVerifyInformation] failed: ', requestId, verifyCode + ) + } + return false + }, + onCancel: () => { + reject(new Error('Verification has been canceled!')) + }, + onClose: () => { + reject(new Error('Verification has been canceled!')) + }, + needWrapper: false, + }) + } catch (e) { + reject(e) + } + }) +} + +export default getVerifyInformation diff --git a/packages/console-risk-interceptor/src/handleDoubleConfirm.js b/packages/console-risk-interceptor/src/handleDoubleConfirm.js new file mode 100644 index 000000000..e32d650f0 --- /dev/null +++ b/packages/console-risk-interceptor/src/handleDoubleConfirm.js @@ -0,0 +1,103 @@ +import axios from 'axios' +import { URLSearchParams } from '@alicloud/search-params-interceptor' +import defaultOptions from './defaultOptions' +import getVerifyInformation from './getVerifyInformation' +import { + guideToVerificationMethodSetting, + guideToVerificationDetailSetting, +} from './helpers' + +const axiosInstance = axios.create() + +const { code } = defaultOptions +function isVerifyCodeValid(res) { + if (res && res.data && res.data.code === code.verifyCodeInvalid) { + return false + } + return true +} + +/* + * 如果处理二次验证失败,内部失败的原因是要自己消化或者吞掉? + * 还是把它透出到上层的调用方呢? + * 1. 内部吞掉,则统一对外透出原来的 reponse,使用方不感知 interceptor 这一层的存在 + * 2. 向外透出,外部知道验证在那一层失败,或许可以做点事情补救一下 + * 暂时先采用方案 1,不对外透出。后面有时间来细想一下方案 2 该怎么做 + */ +/* eslint-disable no-console */ +async function handleDoubleConfirm(response) { + const { data: responseData } = response + const { data: riskData } = responseData + const { verifyType, verifyDetail, codeType } = riskData + + // 用户未设置验证的类型 sms|email|ga + if (!verifyType) { + guideToVerificationMethodSetting(verifyType) + return response + } + + // sms|email 类型的验证需要填写验证的电话或邮箱地址 + if (!verifyDetail && (verifyType === 'sms' || verifyType === 'email')) { + guideToVerificationDetailSetting(verifyType) + return response + } + + let newResponse = null + // 记录上一次发送验证信息的 requestId,这个信息只在用户输入了错误的验证码的时候有效 + // 记录它的原因在于如果用户输入了验证码,我们就需要拿着这些信息去后台验证 + // 但是如果用户没有点击重新发送,那就不会产生新的 requestId,这个时候我们就需要复用上一次 + let lastRequestId + /* eslint-disable no-await-in-loop */ + while ( + newResponse === null || // 第一次,尚未进行风控验证 + !isVerifyCodeValid(newResponse) // 或者验证码不对 + ) { + let requestId + let verifyCode + + const options = { + isVerifyCodeValid: isVerifyCodeValid(newResponse), + verifyType, + verifyDetail, + codeType, + lastRequestId, // 上一次 requestId,如果未曾发送过验证码则为 undefined + } + try { + // 获取风控的验证信息 + const { reqId, vCode } = await getVerifyInformation(options) + requestId = reqId + verifyCode = vCode + // 记录上一次发送验证码请求的 requestId + lastRequestId = requestId + } catch (e) { + console.error('[getVerifyInformation] failed: ', e.message) + return response + } + + try { + // 拿出上一次请求的参数 + const { config: { data: reqDataString, url: reqUrl } } = response + const reqData = new URLSearchParams(reqDataString) + // 添加我们的风控参数 + reqData.append('verifyType', verifyType) + verifyCode && reqData.append('verifyCode', verifyCode) + requestId && reqData.append('requestId', requestId) + + // 发送请求 + // 这里不处理异常 Promise,未处理的异常会进入到上层 + newResponse = await axiosInstance({ + method: 'post', + url: reqUrl, + data: reqData, + }) + } catch (e) { + console.error('[verify Request] failed: ', e.message) + // 如果获取验证信息失败,则返回原始的 response + return response + } + } + + return newResponse +} + +export default handleDoubleConfirm diff --git a/packages/console-risk-interceptor/src/helpers.js b/packages/console-risk-interceptor/src/helpers.js new file mode 100644 index 000000000..a521feb43 --- /dev/null +++ b/packages/console-risk-interceptor/src/helpers.js @@ -0,0 +1,67 @@ +import React from 'react' +import { Dialog } from '@alicloud/console-components' +import messages from './messages' +import defaultOptions from './defaultOptions' + + +const { url: verifyUrl } = defaultOptions + +function gotoSetVerificationMethod() { + window.open(verifyUrl.bindMobileHelp, '_blank') +} + + +function confirmSettingFinish(verifyMessages) { + Dialog.confirm({ + title: verifyMessages.setTitle, + content: verifyMessages.doneTip, + locale: { + ok: verifyMessages.doneSet, + cancel: verifyMessages.gotProblem, + }, + onCancel: () => { + gotoSetVerificationMethod() + }, + needWrapper: false, + }) +} + +export function guideToVerificationMethodSetting(verifyType) { + const verifyMessages = { + ...messages[verifyType], + ...messages.others, + } + Dialog.confirm({ + title: verifyMessages.setTitle, + onOk: () => { + gotoSetVerificationMethod() + confirmSettingFinish(verifyMessages) + }, + content:
{verifyMessages.setTip}
, + locale: { + ok: verifyMessages.goSet, + }, + footerActions: ['ok'], + needWrapper: false, + }) +} + +export function guideToVerificationDetailSetting(verifyType) { + const verifyMessages = { + ...messages[verifyType], + ...messages.others, + } + Dialog.confirm({ + title: verifyMessages.title, + content: verifyMessages.bindDescription, + onOk: () => { + gotoSetVerificationMethod() + confirmSettingFinish(verifyMessages) + }, + locale: { + ok: verifyMessages.goSet, + }, + footerActions: ['ok'], + needWrapper: false, + }) +} diff --git a/packages/console-risk-interceptor/src/index.js b/packages/console-risk-interceptor/src/index.js new file mode 100644 index 000000000..a4d03644f --- /dev/null +++ b/packages/console-risk-interceptor/src/index.js @@ -0,0 +1,25 @@ +import defaultOptions from './defaultOptions' +import handleDoubleConfirm from './handleDoubleConfirm' + +const { code } = defaultOptions + +async function consoleRiskInterceptor(response) { + const { data: responseData } = response + /* eslint-disable no-case-declarations, no-console */ + switch (responseData.code) { + case code.doubleConfirm: + try { + const newResponse = await handleDoubleConfirm(response) + return newResponse + } catch (e) { + console.error('[handleDoubleConfirm] failed: ', e.message) + return response + } + case code.forbidden: + return response + default: + return response + } +} + +export default consoleRiskInterceptor diff --git a/packages/console-risk-interceptor/src/messages.js b/packages/console-risk-interceptor/src/messages.js new file mode 100644 index 000000000..e812ba5f2 --- /dev/null +++ b/packages/console-risk-interceptor/src/messages.js @@ -0,0 +1,140 @@ +import { getLocale } from '@alicloud/widget-utils-console' + +const locale = getLocale() || 'en-US' +/* eslint-disable max-len */ +const messages = { + // 英文文案 + 'en-US': { + sms: { + title: 'SMS Verification', + detailDescription: 'Linked Phone', + changeDescription: 'Change Linked Phone', + bindDescription: 'To protect the security of your account, please set up your phone number for SMS verification', + }, + email: { + title: 'Email Verification', + detailDescription: 'Linked Email', + changeDescription: 'Change Linked Email', + bindDescription: 'To protect the security of your account, please set up your email for Email verification', + }, + ga: { + title: 'MFA Verification', + detailDescription: 'Virtual MFA Device Verification', + changeDescription: 'Unlink MFA', + }, + others: { + setTitle: 'Verification Method Setup', + setTip: 'No Verification method detected! To protect the security of your account, please set up a verification method.', + goSet: 'Set Now', + doneTip: 'Complete verification in the new window.', + doneSet: 'The changes have been saved.', + gotProblem: 'Encounter problems', + settingLabel: 'Verification Code', + codeInvalid: 'The verification code is incorrect. Try again.', + reSend: 'Resend in {s} seconds', + sendCode: 'Get Verification Code', + }, + }, + + // 日文文案 + 'ja-JP': { + sms: { + title: 'SMS 認証', + detailDescription: 'リンクされた電話', + changeDescription: 'リンクされた電話の変更', + bindDescription: 'アカウントのセキュリティを保護するため、SMS 認証用の電話番号を設定してください', + }, + email: { + title: '電子メール認証', + detailDescription: 'リンクされた電子メール', + changeDescription: 'リンクされた電子メールの変更', + bindDescription: 'アカウントのセキュリティを保護するため、電子メール認証用の電子メールを設定してください', + }, + ga: { + title: 'MFA 認証', + detailDescription: '仮想 MFA デバイス認証', + changeDescription: 'MFA のリンクの解除', + }, + others: { + setTitle: '認証方法の設定', + setTip: '認証方法が検出されませんでした。アカウントのセキュリティを保護するため、認証方法を設定してください。', + goSet: '今すぐ設定', + doneTip: '新しいウィンドウで認証を完了してください。', + doneSet: '変更が保存されました。', + gotProblem: '問題の発生', + settingLabel: '認証コード', + codeInvalid: '認証コードが間違っています。再試行してください。', + reSend: '{s} 秒後に再送信', + sendCode: '認証コードの取得', + }, + }, + + // 中文文案 + 'zh-CN': { + sms: { + title: '手机验证', + detailDescription: '您绑定的手机', + changeDescription: '更换手机', + bindDescription: '未检测到手机号码,为了保障您的账户安全,请先设置手机绑定。', + }, + email: { + title: '邮箱验证', + detailDescription: '您绑定的邮箱', + changeDescription: '更换邮箱', + bindDescription: '未检测到邮箱,为了保障您的账户安全,请先设置邮箱绑定。', + }, + ga: { + title: 'MFA验证', + detailDescription: '验证虚拟MFA设备', + changeDescription: '解除MFA绑定', + }, + others: { + setTitle: '设置验证方式', + setTip: '系统没有检测到您的验证方式!为了保障您的账户安全,请先设置验证方式。', + goSet: '前往设置', + doneTip: '请在新窗口中完成验证方式的设置', + doneSet: '完成设置', + gotProblem: '遇到问题', + settingLabel: '校验码', + codeInvalid: '校验码错误,请重新输入', + reSend: '{s} 秒后重发', + sendCode: '点击获取', + }, + }, + + // 繁体中文 + 'zh-HK': { + sms: { + title: '手機驗證', + detailDescription: '您綁定的手機', + changeDescription: '更換手機', + bindDescription: '未檢測到手機號碼,為了保障您的賬戶安全,請先設定手機綁定。', + }, + email: { + title: '郵箱驗證', + detailDescription: '您綁定的郵箱', + changeDescription: '更換郵箱', + bindDescription: '未檢測到郵箱,為了保障您的賬戶安全,請先設定郵箱綁定。', + }, + ga: { + title: 'MFA驗證', + detailDescription: '驗證虛擬MFA裝置', + changeDescription: '解除MFA綁定', + }, + others: { + setTitle: '設定驗證方式', + setTip: '系統沒有檢測到您的驗證方式!為了保障您的賬戶安全,請先設定驗證方式。', + goSet: '前往設定', + doneTip: '請在新視窗中完成驗證方式的設定', + doneSet: '完成設定', + gotProblem: '遇到問題', + settingLabel: '校驗碼', + codeInvalid: '校驗碼錯誤,請重新輸入', + reSend: '{s} 秒後重發', + sendCode: '點擊獲取', + }, + }, +} + + +export default (messages[locale] || messages['en-US']) diff --git a/packages/fecs-csrf-token-error-interceptor/.browserslistrc b/packages/fecs-csrf-token-error-interceptor/.browserslistrc new file mode 100644 index 000000000..a62926302 --- /dev/null +++ b/packages/fecs-csrf-token-error-interceptor/.browserslistrc @@ -0,0 +1,2 @@ +>0.2% +not dead diff --git a/packages/fecs-csrf-token-error-interceptor/.npmignore b/packages/fecs-csrf-token-error-interceptor/.npmignore new file mode 100644 index 000000000..e25fa8114 --- /dev/null +++ b/packages/fecs-csrf-token-error-interceptor/.npmignore @@ -0,0 +1,7 @@ +.* +!.*ignore +node_modules/ +src/ +test/ +babel.config.js +*lock.json diff --git a/packages/fecs-csrf-token-error-interceptor/CHANGELOG.md b/packages/fecs-csrf-token-error-interceptor/CHANGELOG.md new file mode 100644 index 000000000..d6637e049 --- /dev/null +++ b/packages/fecs-csrf-token-error-interceptor/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/packages/fecs-csrf-token-error-interceptor/README.md b/packages/fecs-csrf-token-error-interceptor/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/fecs-csrf-token-error-interceptor/package.json b/packages/fecs-csrf-token-error-interceptor/package.json new file mode 100644 index 000000000..06d8d035c --- /dev/null +++ b/packages/fecs-csrf-token-error-interceptor/package.json @@ -0,0 +1,25 @@ +{ + "name": "@alicloud/fecs-csrf-token-error-interceptor", + "version": "0.1.0", + "main": "lib/index.js", + "scripts": { + "compile": "babel src --out-dir lib --root-mode upward", + "prepare": "npm run compile" + }, + "author": "woota", + "license": "MIT", + "devDependencies": { + "@alicloud/search-params-interceptor": "^0.1.0", + "@babel/cli": "^7.5.5", + "@babel/core": "^7.5.5", + "@babel/preset-env": "^7.5.5", + "axios": "0.18.0" + }, + "peerDependencies": { + "@alicloud/search-params-interceptor": "^0.1.0", + "axios": "0.18.0" + }, + "dependencies": { + "@babel/runtime": "^7.5.5" + } +} diff --git a/packages/fecs-csrf-token-error-interceptor/src/index.js b/packages/fecs-csrf-token-error-interceptor/src/index.js new file mode 100644 index 000000000..0a1968e00 --- /dev/null +++ b/packages/fecs-csrf-token-error-interceptor/src/index.js @@ -0,0 +1,66 @@ +import axios from 'axios' +import { URLSearchParams } from '@alicloud/search-params-interceptor' + +const axiosInstance = axios.create() + + +async function getNewCsrfToken() { + const response = await axiosInstance({ + url: '/data/refreshToken', + baseURL: 'https://fecs.console.aliyun.com/', + timeout: 5000, + withCredentials: true + }) + + return response && response.data && response.data.data +} + + +async function csrfTokenErrorInterceptor(response) { + const { data: responseData, config } = response + + // 只处理跨域请求的 'CsrfTokenError' 错误 + if (config.useCors && responseData.code === 'CsrfTokenError') { + // 刷新 token + const fecsCsrfToken = await getNewCsrfToken() + // Token 刷新后,再次执行原本的请求 + let newResponse = null + // 拿出请求参数 + const { + config: { + data: reqDataString, + url: reqUrl, + method: reqMethod, + }, + } = response + const reqData = new URLSearchParams(reqDataString) + // 使用新的 token + reqData.set('sec_token', fecsCsrfToken) + + // 发送请求 + try { + newResponse = await axiosInstance({ + method: reqMethod, + url: reqUrl, + data: reqData, + withCredentials: true + }) + } catch (err) { + // 如果此次出错,停止处理,直接返回上一次的请求结果 + return response + } + + const { data: newResponseData } = newResponse + // 如果还是 CsrfTokenError,说明刷新失败或系统错误,返回上一次请求结果 + if (newResponseData.code === 'CsrfTokenError') { + return response + } + // 如果是其他的情况则表示处理 CsrfTokenError 成功,返回新的请求结果 + return newResponse + } + + // 非 CsrfTokenError 的情况不在此拦截器处理范围,直接返回 + return response +} + +export default csrfTokenErrorInterceptor diff --git a/packages/fecs-csrf-token-error-interceptor/test/index.test.js b/packages/fecs-csrf-token-error-interceptor/test/index.test.js new file mode 100644 index 000000000..297c4ae33 --- /dev/null +++ b/packages/fecs-csrf-token-error-interceptor/test/index.test.js @@ -0,0 +1 @@ +test('an empty test', () => {}) \ No newline at end of file diff --git a/packages/search-params-interceptor/.browserslistrc b/packages/search-params-interceptor/.browserslistrc new file mode 100644 index 000000000..40f69444e --- /dev/null +++ b/packages/search-params-interceptor/.browserslistrc @@ -0,0 +1,4 @@ +# Browsers that we support + +>0.2% +not dead \ No newline at end of file diff --git a/packages/search-params-interceptor/.npmignore b/packages/search-params-interceptor/.npmignore new file mode 100644 index 000000000..785711f01 --- /dev/null +++ b/packages/search-params-interceptor/.npmignore @@ -0,0 +1,5 @@ +node_modules/ +src/ +test/ +.browserslistrc +babel.config.js \ No newline at end of file diff --git a/packages/search-params-interceptor/CHANGELOG.md b/packages/search-params-interceptor/CHANGELOG.md new file mode 100644 index 000000000..d6637e049 --- /dev/null +++ b/packages/search-params-interceptor/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/packages/search-params-interceptor/README.md b/packages/search-params-interceptor/README.md new file mode 100644 index 000000000..c943b71da --- /dev/null +++ b/packages/search-params-interceptor/README.md @@ -0,0 +1,42 @@ +# @alicloud/search-params-interceptor +`axios`1 请求拦截器(request.interceptor2),用于把请求的参数对象转化为 URLSearchParams3 对象,然后再发送给 **server** 端。 + +## 用法 +先使用 **npm** 进行安装 +``` +npm install --save @alicloud/search-params-interceptor +``` +然后 `import` 进来传递给 `axios` +```js +import axios from 'axios' +import searchParamsInterceptor from '@alicloud/search-params-interceptor' + +axios.interceptors.request.use(searchParamsInterceptor) +``` +或传递给 `axios` 的一个实例 +```js +import axios from 'axios' +import searchParamsInterceptor from '@alicloud/search-params-interceptor' + +const instance = axios.create() +instance.interceptors.request.use(searchParamsInterceptor) +``` + +## 项目结构 +``` +lib/ # babel 转义后的代码 +node_modules/ +src/ # 源代码 +test/ # 单元测试 +.browserslistrc # 浏览器支持的 query +.npmignore # npm 打包忽略文件 +babel.config.js # babel 配置文件 +package-lock.json # npm 包版本管理文件 +package.json # 项目的 meta 信息 +README.md # 项目说明 +``` + +## 注释 +1. [axios 文档](https://github.com/axios/axios) +2. [axios 拦截器(interceptor)](https://github.com/axios/axios#interceptors) +3. [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) \ No newline at end of file diff --git a/packages/search-params-interceptor/babel.config.js b/packages/search-params-interceptor/babel.config.js new file mode 100644 index 000000000..aafa5baf5 --- /dev/null +++ b/packages/search-params-interceptor/babel.config.js @@ -0,0 +1,7 @@ +module.exports = { + 'presets': [ + ['@babel/preset-env', { + 'modules': false + }] + ] +} \ No newline at end of file diff --git a/packages/search-params-interceptor/package.json b/packages/search-params-interceptor/package.json new file mode 100644 index 000000000..8e616cc5d --- /dev/null +++ b/packages/search-params-interceptor/package.json @@ -0,0 +1,28 @@ +{ + "name": "@alicloud/search-params-interceptor", + "version": "0.1.0", + "description": "Transform request data to URLSearchParams", + "main": "lib/index.js", + "scripts": { + "babel": "babel src --out-dir lib", + "prepare": "npm run babel" + }, + "keywords": [ + "widget", + "fetch", + "request", + "interceptor" + ], + "author": "woota", + "license": "MIT", + "dependencies": { + "lodash.forin": "^4.4.0", + "url-search-params": "^1.1.0" + }, + "devDependencies": { + "@babel/cli": "^7.1.5", + "@babel/core": "^7.1.6", + "@babel/preset-env": "^7.1.6" + }, + "gitHead": "849e4a23b7103c6cd68dd5ea62b71445b3ddfbdb" +} diff --git a/packages/search-params-interceptor/src/index.js b/packages/search-params-interceptor/src/index.js new file mode 100644 index 000000000..5cf0132ac --- /dev/null +++ b/packages/search-params-interceptor/src/index.js @@ -0,0 +1,38 @@ +import URLSearchParams from 'url-search-params' +import forIn from 'lodash.forin' + +export { + URLSearchParams +} + +// This is an axios request interceptor +// By using this interceptor, user can transform normal JavaScript data object +// into an URLSearchParams instance +function searchParamsInterceptor(config) { + // Take out the request params + const { params, data } = config + + function transform(target) { + const searchParams = new URLSearchParams() + // Iterate over request data and append them to searchParams + forIn(target, (value, key) => { + // Ignore keys which's value is undefined + if (typeof value !== 'undefined') { + searchParams.append(key, value) + } + }) + return searchParams + } + + const paramsSearchParams = transform(params) + const dataSearchParams = transform(data) + + // Return the new config + return { + ...config, + params: paramsSearchParams, + data: dataSearchParams + } +} + +export default searchParamsInterceptor diff --git a/packages/search-params-interceptor/test/index.test.js b/packages/search-params-interceptor/test/index.test.js new file mode 100644 index 000000000..dc57b975d --- /dev/null +++ b/packages/search-params-interceptor/test/index.test.js @@ -0,0 +1,36 @@ +import searchParamsInterceptor from '../src/index.js' +import URLSearchParams from 'url-search-params' + +test('Expect the properly exports', () => { + expect(searchParamsInterceptor).toBeDefined() +}) + +test('Transform data right', () => { + const config = { + params: { + time: '01:00', + late: true + }, + data: { + name: 'tom', + age: 26, + gf: 'lucy', + id: undefined, + house: null + } + } + + const next = searchParamsInterceptor(config) + + // params + expect(next.params).toBeInstanceOf(URLSearchParams) + expect(next.params.get('time')).toBe(config.params.time) + expect(next.params.get('late')).toBe(config.params.late.toString()) + + // data + expect(next.data).toBeInstanceOf(URLSearchParams) + expect(next.data.get('name')).toBe(config.data.name) + expect(next.data.get('age')).toBe(config.data.age.toString()) + expect(next.data.get('house')).toBe(JSON.stringify(config.data.house)) + expect(next.data.has('id')).toBeFalsy() +}) \ No newline at end of file diff --git a/packages/widget-context/.browserslistrc b/packages/widget-context/.browserslistrc new file mode 100644 index 000000000..a62926302 --- /dev/null +++ b/packages/widget-context/.browserslistrc @@ -0,0 +1,2 @@ +>0.2% +not dead diff --git a/packages/widget-context/.eslintrc.js b/packages/widget-context/.eslintrc.js new file mode 100644 index 000000000..dc326864f --- /dev/null +++ b/packages/widget-context/.eslintrc.js @@ -0,0 +1,39 @@ +module.exports = { + "env": { + "browser": true, + "es6": true, + "jest": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended" + ], + "settings": { + "react": { + "version": "16.x" + } + }, + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "indent": [ + "error", + 2 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "never" + ] + } +}; \ No newline at end of file diff --git a/packages/widget-context/.npmignore b/packages/widget-context/.npmignore new file mode 100644 index 000000000..e25fa8114 --- /dev/null +++ b/packages/widget-context/.npmignore @@ -0,0 +1,7 @@ +.* +!.*ignore +node_modules/ +src/ +test/ +babel.config.js +*lock.json diff --git a/packages/widget-context/CHANGELOG.md b/packages/widget-context/CHANGELOG.md new file mode 100644 index 000000000..d6637e049 --- /dev/null +++ b/packages/widget-context/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/packages/widget-context/README.md b/packages/widget-context/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/widget-context/babel.config.js b/packages/widget-context/babel.config.js new file mode 100644 index 000000000..43e99bc5b --- /dev/null +++ b/packages/widget-context/babel.config.js @@ -0,0 +1,18 @@ +module.exports = { + 'presets': [ + ['@babel/preset-env', { + 'modules': false + }], + ['@babel/preset-react'] + ], + 'plugins': [ + [ + '@babel/plugin-transform-runtime', + { + // Since Webpack know how to deal with the ES6 modules, + // we don't transform it. + 'useESModules': true + } + ] + ] +} \ No newline at end of file diff --git a/packages/widget-context/package.json b/packages/widget-context/package.json new file mode 100644 index 000000000..8a6732dd4 --- /dev/null +++ b/packages/widget-context/package.json @@ -0,0 +1,46 @@ +{ + "name": "@alicloud/widget-context", + "version": "0.1.0", + "description": "Widget Context", + "main": "lib/index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "jest", + "babel": "babel src -d lib --copy-files", + "prepublishOnly": "npm run babel" + }, + "keywords": [ + "widget", + "context" + ], + "author": "woota", + "license": "MIT", + "devDependencies": { + "@alicloud/widget-utils-config": "^0.1.0", + "@alicloud/widget-utils-console": "^0.1.0", + "@alicloud/console-intl": "^1.x", + "@babel/cli": "^7.2.3", + "@babel/core": "^7.3.4", + "@babel/plugin-transform-runtime": "^7.3.4", + "@babel/preset-env": "^7.3.4", + "@babel/preset-react": "^7.0.0", + "moment": "^2.24.0", + "prop-types": "^15.7.2", + "react": "^16.8.6", + "react-dom": "^16.8.6" + }, + "peerDependencies": { + "@alicloud/widget-utils-config": "^0.1.0", + "@alicloud/widget-utils-console": "^0.1.0", + "@alicloud/console-intl": "^1.x", + "prop-types": "^15.6.2", + "react": "^16.8.3" + }, + "dependencies": { + "@babel/runtime": "^7.3.4", + "axios": "0.18.0" + }, + "gitHead": "849e4a23b7103c6cd68dd5ea62b71445b3ddfbdb" +} diff --git a/packages/widget-context/src/Consumer.js b/packages/widget-context/src/Consumer.js new file mode 100644 index 000000000..92b7d9ce4 --- /dev/null +++ b/packages/widget-context/src/Consumer.js @@ -0,0 +1,55 @@ +/** + * This `Consumer` exsit only for those developers who still want to use + * React Class instead of React Hooks. + * Becuase React Hooks can only be called inside a function component, + * but not a class component. + */ +import React from 'react' +import PropTypes from 'prop-types' +import IntlContext from './intlContext' +import ConsoleConfigContext from './consoleConfigContext' +import WidgetContext from './widgetContext' + +/* eslint-disable no-console, max-length */ +function Consumer({ children }) { + return ( + + { + (intl) => ( + + { + (consoleConfig) => ( + + { + (state) => { + if (state.intl) { + console.error( + 'You should avoid using "intl" as a state name, it will be overrided by @alicloud/console-components-intl.' + ) + } + if (state.consoleConfig) { + console.error( + '"consoleConfig" is used internally by widget itself, find another name for your state.' + ) + } + return children({ + ...state, + consoleConfig, + intl + }) + } + } + + ) + } + + ) + } + + ) +} +/* eslint-enable no-console, max-length */ + +Consumer.propTypes = { children: PropTypes.func } + +export default Consumer diff --git a/packages/widget-context/src/Provider.js b/packages/widget-context/src/Provider.js new file mode 100644 index 000000000..b8a8a46f4 --- /dev/null +++ b/packages/widget-context/src/Provider.js @@ -0,0 +1,38 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { + getChannelLinkList, + getChannelFeatureList +} from '@alicloud/widget-utils-config' +import ConsoleConfigContext from './consoleConfigContext' +import WidgetContext from './widgetContext' + +const { Provider: ConsoleConfigProvider } = ConsoleConfigContext +const { Provider: WidgetProvider } = WidgetContext + +// TODO: Gonna remove someday +const legacyConsoleConfig = { + links: getChannelLinkList(), + features: getChannelFeatureList() +} + +function Provider({ state, children }) { + return ( + + {/* No need to provide these data through Context */} + {/* Will remove someday later */} + + {children} + + + ) +} + +Provider.displayName = 'Widget::GlobalStateProvider' +/* eslint-disable react/forbid-prop-types */ +Provider.propTypes = { + children: PropTypes.element, + state: PropTypes.object +} + +export default Provider diff --git a/packages/widget-context/src/consoleConfigContext.js b/packages/widget-context/src/consoleConfigContext.js new file mode 100644 index 000000000..9d2eb869e --- /dev/null +++ b/packages/widget-context/src/consoleConfigContext.js @@ -0,0 +1,3 @@ +import { createContext } from 'react' + +export default createContext() \ No newline at end of file diff --git a/packages/widget-context/src/index.js b/packages/widget-context/src/index.js new file mode 100644 index 000000000..e44ec4042 --- /dev/null +++ b/packages/widget-context/src/index.js @@ -0,0 +1,15 @@ +import Provider from './Provider' +import Consumer from './Consumer' +import IntlContext from './intlContext' +import ConsoleConfigContext from './consoleConfigContext' +import WidgetContext from './widgetContext' +import withIntl from './withIntl' + +export { + Provider, + Consumer, + IntlContext, + ConsoleConfigContext, + WidgetContext, + withIntl +} diff --git a/packages/widget-context/src/intlContext.js b/packages/widget-context/src/intlContext.js new file mode 100644 index 000000000..9d2eb869e --- /dev/null +++ b/packages/widget-context/src/intlContext.js @@ -0,0 +1,3 @@ +import { createContext } from 'react' + +export default createContext() \ No newline at end of file diff --git a/packages/widget-context/src/widgetContext.js b/packages/widget-context/src/widgetContext.js new file mode 100644 index 000000000..ec35e422a --- /dev/null +++ b/packages/widget-context/src/widgetContext.js @@ -0,0 +1,3 @@ +import { createContext } from 'react' + +export default createContext() diff --git a/packages/widget-context/src/withIntl.js b/packages/widget-context/src/withIntl.js new file mode 100644 index 000000000..f317e8e4c --- /dev/null +++ b/packages/widget-context/src/withIntl.js @@ -0,0 +1,35 @@ +import React from 'react' +import WindIntlProvider from '@alicloud/console-components-intl/lib/Provider' +import { + getWindMessages, + getLocale, +} from '@alicloud/widget-utils-console' +import { getWidgetI18nMessages } from '@alicloud/widget-utils-config' +import IntlContext from './intlContext' + +const { Consumer: WindIntlConsumer } = WindIntlProvider +const messages = { + ...getWindMessages(), + ...getWidgetI18nMessages() +} + +function withIntl(WrappedComponent) { + function IntlProvider(props) { + return ( + + + {({ intl }) => ( + + + + )} + + + ) + } + + IntlProvider.displayName = 'IntlProvider' + return IntlProvider +} + +export default withIntl diff --git a/packages/widget-error-boundary/.browserslistrc b/packages/widget-error-boundary/.browserslistrc new file mode 100644 index 000000000..a62926302 --- /dev/null +++ b/packages/widget-error-boundary/.browserslistrc @@ -0,0 +1,2 @@ +>0.2% +not dead diff --git a/packages/widget-error-boundary/.eslintrc.js b/packages/widget-error-boundary/.eslintrc.js new file mode 100644 index 000000000..dc326864f --- /dev/null +++ b/packages/widget-error-boundary/.eslintrc.js @@ -0,0 +1,39 @@ +module.exports = { + "env": { + "browser": true, + "es6": true, + "jest": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended" + ], + "settings": { + "react": { + "version": "16.x" + } + }, + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "indent": [ + "error", + 2 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "never" + ] + } +}; \ No newline at end of file diff --git a/packages/widget-error-boundary/.npmignore b/packages/widget-error-boundary/.npmignore new file mode 100644 index 000000000..e25fa8114 --- /dev/null +++ b/packages/widget-error-boundary/.npmignore @@ -0,0 +1,7 @@ +.* +!.*ignore +node_modules/ +src/ +test/ +babel.config.js +*lock.json diff --git a/packages/widget-error-boundary/CHANGELOG.md b/packages/widget-error-boundary/CHANGELOG.md new file mode 100644 index 000000000..d6637e049 --- /dev/null +++ b/packages/widget-error-boundary/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/packages/widget-error-boundary/README.md b/packages/widget-error-boundary/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/widget-error-boundary/babel.config.js b/packages/widget-error-boundary/babel.config.js new file mode 100644 index 000000000..43e99bc5b --- /dev/null +++ b/packages/widget-error-boundary/babel.config.js @@ -0,0 +1,18 @@ +module.exports = { + 'presets': [ + ['@babel/preset-env', { + 'modules': false + }], + ['@babel/preset-react'] + ], + 'plugins': [ + [ + '@babel/plugin-transform-runtime', + { + // Since Webpack know how to deal with the ES6 modules, + // we don't transform it. + 'useESModules': true + } + ] + ] +} \ No newline at end of file diff --git a/packages/widget-error-boundary/package.json b/packages/widget-error-boundary/package.json new file mode 100644 index 000000000..dcde5a86a --- /dev/null +++ b/packages/widget-error-boundary/package.json @@ -0,0 +1,43 @@ +{ + "name": "@alicloud/widget-error-boundary", + "version": "0.1.0", + "description": "Widget error boundary HOC", + "main": "lib/index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "jest", + "babel": "babel src -d lib", + "prepare": "npm run babel" + }, + "keywords": [ + "widget", + "error" + ], + "author": "woota", + "license": "MIT", + "peerDependencies": { + "@alicloud/widget-logger": "^0.1.0", + "@alicloud/widget-utils-console": "^0.1.0", + "prop-types": "^15.6.2", + "react": "^16.6.3" + }, + "devDependencies": { + "@alicloud/widget-logger": "^0.1.0", + "@alicloud/widget-utils-console": "^0.1.0", + "@babel/cli": "^7.2.0", + "@babel/core": "^7.2.0", + "@babel/plugin-transform-runtime": "^7.2.0", + "@babel/preset-env": "^7.2.0", + "@babel/preset-react": "^7.0.0", + "moment": "^2.23.0", + "prop-types": "^15.6.2", + "react": "^16.6.3", + "react-dom": "^16.6.3" + }, + "dependencies": { + "@babel/runtime": "^7.4.5" + }, + "gitHead": "849e4a23b7103c6cd68dd5ea62b71445b3ddfbdb" +} diff --git a/packages/widget-error-boundary/src/Fallback.js b/packages/widget-error-boundary/src/Fallback.js new file mode 100644 index 000000000..47dce19cc --- /dev/null +++ b/packages/widget-error-boundary/src/Fallback.js @@ -0,0 +1,68 @@ +/** + * We will get to this as soon as the designer finishing her work + */ +import React from 'react' +import PropTypes from 'prop-types' +import { getWidgetInfo } from '@alicloud/widget-utils-console' + +const style = { + padding: '16px' +} +const buttonStyle = { + margin: '0 8px', + color: 'green', + fontWeight: 'bold' +} + +const { + id = process.env.WIDGET_ID, + version = process.env.WIDGET_VER, + loader +} = getWidgetInfo() + +function Fallback({error, info, onRecover}) { + return ( +
+

Widget Error! + +

+
+

+ ID: + {id} +

+

+ Version: + {version} +

+

+ Loader: + {loader} +

+

+ Message: + {error.message} +

+

+ Component Stack: + {info.componentStack} +

+

+ Error Stack: + {error.stack} +

+
+
+ ) +} + + +Fallback.displayName = 'WidgetErrorFallback' +Fallback.propTypes = { + error: PropTypes.object, + info: PropTypes.object, + onRecover: PropTypes.func +} + + +export default Fallback diff --git a/packages/widget-error-boundary/src/index.js b/packages/widget-error-boundary/src/index.js new file mode 100644 index 000000000..9b664dfe7 --- /dev/null +++ b/packages/widget-error-boundary/src/index.js @@ -0,0 +1,54 @@ +import React from 'react' +import WidgetErrorLogger from './logger' +import DefaultErrorFallback from './Fallback' + + +function createErrorBoundary(widgetId, Fallback = DefaultErrorFallback) { + return function withErrorBoundary(WrappedComponent) { + class WidgetErrorBoundary extends React.Component { + constructor(props) { + super(props) + this.state = { + hasError: false, + error: null, + info: null + } + this.handleRecover = this.handleRecover.bind(this) + } + + componentDidCatch(error, info) { + // Display fallback UI + this.setState({ hasError: true, error, info }) + // You can also log the error to an error reporting service + const logger = new WidgetErrorLogger({ + id: widgetId, + e_msg: error.message, + e_stack: error.stack, + c_stack: info.componentStack + }) + logger.send() + } + + handleRecover() { + this.setState({ hasError: false, error: null, info: null }) + } + + render() { + if (this.state.hasError && Fallback !== null) { + return + } + return ( + + ) + } + } + + return WidgetErrorBoundary + } +} + +export default createErrorBoundary diff --git a/packages/widget-error-boundary/src/logger.js b/packages/widget-error-boundary/src/logger.js new file mode 100644 index 000000000..e396fae11 --- /dev/null +++ b/packages/widget-error-boundary/src/logger.js @@ -0,0 +1,51 @@ +import WidgetLogger from '@alicloud/widget-logger' +import { getWidgetInfo } from '@alicloud/widget-utils-console' + + +// const model = { +// id: 'widget-test', +// e_msg: '', +// e_stack: '', +// c_stack: '', + + +// version: '', +// e_code: 'render', +// time: '' + +// uid: '', +// parent_uid: '', +// loc: `${location.origin}${location.pathname}`, +// ua: navigator.userAgent, +// } + + +/** + * error boundary 的错误是这样,一旦发生错误,就会展示 fallback + * `componentDidCatch` 会在错误发生后执行,但其实我们可以尝试恢复错误 + * 错误恢复后,问题不一定解决,但也有可能自动就解决了,比如说网络异常, + * 过一会儿又好了。我们在上报错误需要在每一次执行 `componentDidCatch` + * 的时候上报,每一次上报 + */ +const { + version = process.env.WIDGET_VER, + loader +} = getWidgetInfo() + +class WidgetErrorLogger extends WidgetLogger { + constructor(props, opts) { + super({ + version, + loader, + time: Date.now(), + e_code: 'render', + ...props + }, { + debug: true, + storeType: 'error', + ...opts + }) + } +} + +export default WidgetErrorLogger diff --git a/packages/widget-event-emitter/.browserslistrc b/packages/widget-event-emitter/.browserslistrc new file mode 100644 index 000000000..a62926302 --- /dev/null +++ b/packages/widget-event-emitter/.browserslistrc @@ -0,0 +1,2 @@ +>0.2% +not dead diff --git a/packages/widget-event-emitter/.npmignore b/packages/widget-event-emitter/.npmignore new file mode 100644 index 000000000..e25fa8114 --- /dev/null +++ b/packages/widget-event-emitter/.npmignore @@ -0,0 +1,7 @@ +.* +!.*ignore +node_modules/ +src/ +test/ +babel.config.js +*lock.json diff --git a/packages/widget-event-emitter/CHANGELOG.md b/packages/widget-event-emitter/CHANGELOG.md new file mode 100644 index 000000000..d6637e049 --- /dev/null +++ b/packages/widget-event-emitter/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/packages/widget-event-emitter/README.md b/packages/widget-event-emitter/README.md new file mode 100644 index 000000000..eb59fd0d8 --- /dev/null +++ b/packages/widget-event-emitter/README.md @@ -0,0 +1,4 @@ +# @alicloud/widget-event-emitter + +## API +https://github.com/Olical/EventEmitter \ No newline at end of file diff --git a/packages/widget-event-emitter/package.json b/packages/widget-event-emitter/package.json new file mode 100644 index 000000000..d0b3c6d2b --- /dev/null +++ b/packages/widget-event-emitter/package.json @@ -0,0 +1,26 @@ +{ + "name": "@alicloud/widget-event-emitter", + "version": "0.1.0", + "description": "An event emitter for widget.", + "main": "lib/index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "jest", + "compile": "babel src --out-dir lib --root-mode upward", + "prepare": "npm run compile" + }, + "keywords": [], + "author": "woota", + "license": "MIT", + "devDependencies": { + "@babel/cli": "^7.5.0", + "@babel/core": "^7.5.4", + "@babel/preset-env": "^7.5.4" + }, + "dependencies": { + "@babel/runtime": "^7.5.4", + "wolfy87-eventemitter": "^5.2.6" + } +} diff --git a/packages/widget-event-emitter/src/index.js b/packages/widget-event-emitter/src/index.js new file mode 100644 index 000000000..c6f02cddf --- /dev/null +++ b/packages/widget-event-emitter/src/index.js @@ -0,0 +1,13 @@ +import EventEmitter from 'wolfy87-eventemitter' + +class WidgetEventEmitter extends EventEmitter { + constructor() { + super() + } + + refresh(widgetId) { + return this.emit(`${widgetId}:REFRESH`) + } +} + +export default WidgetEventEmitter diff --git a/packages/widget-event-emitter/test/index.test.js b/packages/widget-event-emitter/test/index.test.js new file mode 100644 index 000000000..b3b2b969c --- /dev/null +++ b/packages/widget-event-emitter/test/index.test.js @@ -0,0 +1 @@ +test('empty test', () => {}) \ No newline at end of file diff --git a/packages/widget-hooks/.browserslistrc b/packages/widget-hooks/.browserslistrc new file mode 100644 index 000000000..a62926302 --- /dev/null +++ b/packages/widget-hooks/.browserslistrc @@ -0,0 +1,2 @@ +>0.2% +not dead diff --git a/packages/widget-hooks/.npmignore b/packages/widget-hooks/.npmignore new file mode 100644 index 000000000..e25fa8114 --- /dev/null +++ b/packages/widget-hooks/.npmignore @@ -0,0 +1,7 @@ +.* +!.*ignore +node_modules/ +src/ +test/ +babel.config.js +*lock.json diff --git a/packages/widget-hooks/CHANGELOG.md b/packages/widget-hooks/CHANGELOG.md new file mode 100644 index 000000000..9ae953797 --- /dev/null +++ b/packages/widget-hooks/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + diff --git a/packages/widget-hooks/README.md b/packages/widget-hooks/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/widget-hooks/index.d.ts b/packages/widget-hooks/index.d.ts new file mode 100644 index 000000000..cb5fc6056 --- /dev/null +++ b/packages/widget-hooks/index.d.ts @@ -0,0 +1,74 @@ +/// + +import { + ReactElement +} from 'react'; + +interface IConsoleConfig { + features: { + [k: string]: { + status: boolean; + attribute?: { + regions?: string[]; + }; + }; + }; + links: { + [k: string]: string; + }; +} + +export declare function useConsoleConfig(): IConsoleConfig; // 基本上不要用 +export declare function useConsoleConfig(key: string): T; + +declare function intl (key: string, values?: { + [k: string]: string; +}): T; + +declare namespace intl { + function set(basic?: { + messages?: { + [k: string]: string; + }; + }, extra?: { + determineLocale?: { + cookie: string; + }; + }): void; + function setLocale(locale: string): void; + function setMessages(messages: { + [k: string]: string; + }): void; + function getLocale(): string; + function getMessages(): { + [k: string]: string; + }; + function message(key: string, values?: { + [k: string]: string; + }): T; + function number(value: number, options?: Intl.NumberFormatOptions): string; + function date(date: Date | number | string, options?: 'date' | 'time' | 'dateTime' | 'dateTimeWithTimeZone' | Intl.DateTimeFormatOptions): string; + function html(key: string, values?: { + [k: string]: string; + }): ReactElement; +} + +export declare function useIntl(): typeof intl; + +export declare function useChannelLink(id: string, values?: { + [k: string]: string; +}): string; + +export declare function useFeature( + id: string, + activeRegionId?: string, + determinator?: (feature: { + status: boolean; + regions?: string[] + }) => boolean +) + +export declare function useGlobalState(): T; +export declare function useGlobalState(stateName: string): [T, (state: T) => void]; + +export declare function useRefresher(id: string): number; diff --git a/packages/widget-hooks/package.json b/packages/widget-hooks/package.json new file mode 100644 index 000000000..eb2a26247 --- /dev/null +++ b/packages/widget-hooks/package.json @@ -0,0 +1,41 @@ +{ + "name": "@alicloud/widget-hooks", + "version": "0.1.0", + "description": "React hooks for widget.", + "main": "lib/index.js", + "types": "index.d.ts", + "directories": { + "test": "test" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "compile": "babel src -d lib --root-mode upward", + "prepare": "npm run compile" + }, + "keywords": [ + "react", + "hooks", + "widget" + ], + "author": "woota", + "license": "MIT", + "devDependencies": { + "@alicloud/widget-context": "^0.1.0", + "@babel/cli": "^7.4.3", + "@babel/core": "^7.4.3", + "@babel/plugin-transform-runtime": "^7.4.3", + "@babel/preset-env": "^7.4.3", + "@types/react": "^16.8.18", + "react": "^16.8.6", + "react-dom": "^16.8.6" + }, + "dependencies": { + "@babel/runtime": "^7.4.3" + }, + "peerDependencies": { + "@alicloud/widget-context": "^0.1.0", + "react": "^16.8.6", + "react-dom": "^16.8.6" + }, + "gitHead": "849e4a23b7103c6cd68dd5ea62b71445b3ddfbdb" +} diff --git a/packages/widget-hooks/src/index.js b/packages/widget-hooks/src/index.js new file mode 100644 index 000000000..b2899d496 --- /dev/null +++ b/packages/widget-hooks/src/index.js @@ -0,0 +1,15 @@ +import useIntl from './useIntl' +import useConsoleConfig from './useConsoleConfig' +import useChannelLink from './useChannelLink' +import useFeature from './useFeature' +import useGlobalState from './useGlobalState' +import useRefresher from './useRefresher' + +export { + useIntl, + useConsoleConfig, + useChannelLink, + useFeature, + useGlobalState, + useRefresher +} \ No newline at end of file diff --git a/packages/widget-hooks/src/useChannelLink.js b/packages/widget-hooks/src/useChannelLink.js new file mode 100644 index 000000000..b07c4c067 --- /dev/null +++ b/packages/widget-hooks/src/useChannelLink.js @@ -0,0 +1,27 @@ +import useConsoleConfig from './useConsoleConfig' + +function useChannelLink(id, values) { + const links = useConsoleConfig('links') + if (links === null) { + return '' + } + if (typeof id === 'undefined') { + throw new Error( + '[ChannelLink] id is required' + ) + } + if (!links[id]) { + throw new Error(`[ChannelLink] Can not find links with id: ${id}`) + } + + const link = links[id].replace(/{@?([^}]+)}/g, (match, key) => { + if (!values[key]) { + throw new Error(`[ChannelLink: ${id}] Need ${key} in values for replacement.`) + } + return values[key] + }) + + return link +} + +export default useChannelLink \ No newline at end of file diff --git a/packages/widget-hooks/src/useConsoleConfig.js b/packages/widget-hooks/src/useConsoleConfig.js new file mode 100644 index 000000000..cbd7c2fe6 --- /dev/null +++ b/packages/widget-hooks/src/useConsoleConfig.js @@ -0,0 +1,12 @@ +import { useContext } from 'react' +import { ConsoleConfigContext } from '@alicloud/widget-context' + +function useConsoleConfig(key) { + const consoleConfig = useContext(ConsoleConfigContext) + if (!key) { + return consoleConfig + } + return consoleConfig[key] +} + +export default useConsoleConfig diff --git a/packages/widget-hooks/src/useFeature.js b/packages/widget-hooks/src/useFeature.js new file mode 100644 index 000000000..6100bba6e --- /dev/null +++ b/packages/widget-hooks/src/useFeature.js @@ -0,0 +1,39 @@ +import useConsoleConfig from './useConsoleConfig' + +function useFeature(id, activeRegionId, determinator) { + if (typeof id !== 'string') { + throw new TypeError( + `[useFeature] Invalid type for "id" parameter, expect a string, but got ${typeof id}.` + ) + } + + const features = useConsoleConfig('features') + // If the config data is not loaded yet, then we can not decide whether to + // show the "feature" or not. In this case, return `false` seems to be a more + // safer way. + if (features === null) { + return false + } + + const feature = features[id] + if (!feature) { + throw new TypeError( + `[useFeature] Can not find the feature data for id: ${id}.` + ) + } + + // Leave the decision to the user + if (determinator) { + return determinator(feature) + } + + const { status, regions } = feature + + if (activeRegionId && regions) { + return status && regions.includes(activeRegionId) + } + + return status +} + +export default useFeature diff --git a/packages/widget-hooks/src/useGlobalState.js b/packages/widget-hooks/src/useGlobalState.js new file mode 100644 index 000000000..c5d50854c --- /dev/null +++ b/packages/widget-hooks/src/useGlobalState.js @@ -0,0 +1,13 @@ +import { useContext } from 'react' +import { WidgetContext } from '@alicloud/widget-context' +import upperfirst from './utils/upperfirst' + +function useGlobalState(key) { + const globalState = useContext(WidgetContext) + if (!key) { + return globalState + } + return [globalState[key], globalState[`set${upperfirst(key)}`]] +} + +export default useGlobalState diff --git a/packages/widget-hooks/src/useIntl.js b/packages/widget-hooks/src/useIntl.js new file mode 100644 index 000000000..f8915aecb --- /dev/null +++ b/packages/widget-hooks/src/useIntl.js @@ -0,0 +1,9 @@ +import { useContext } from 'react' +import { IntlContext } from '@alicloud/widget-context' + +function useIntl() { + const intl = useContext(IntlContext) + return intl +} + +export default useIntl diff --git a/packages/widget-hooks/src/useRefresher.js b/packages/widget-hooks/src/useRefresher.js new file mode 100644 index 000000000..229ec7fe8 --- /dev/null +++ b/packages/widget-hooks/src/useRefresher.js @@ -0,0 +1,17 @@ +import { useEffect, useReducer } from 'react' +import useGlobalState from './useGlobalState' + +function useRefresher(namespace) { + const [eventEmitter] = useGlobalState('eventEmitter') + const [refresher, forceUpdate] = useReducer(x => x + 1, 0) + useEffect(() => { + eventEmitter && eventEmitter.on(`${namespace}:REFRESH`, forceUpdate) + return () => { + eventEmitter && eventEmitter.off(`${namespace}:REFRESH`, forceUpdate) + } + }, [namespace, eventEmitter]) + + return refresher +} + +export default useRefresher diff --git a/packages/widget-hooks/src/utils/upperfirst.js b/packages/widget-hooks/src/utils/upperfirst.js new file mode 100644 index 000000000..661e61858 --- /dev/null +++ b/packages/widget-hooks/src/utils/upperfirst.js @@ -0,0 +1,9 @@ +const pat = /^[a-z]/ + +function upperfirst(target = '') { + return target.replace(pat, (match) => { + return match.toUpperCase() + }) +} + +export default upperfirst diff --git a/packages/widget-hooks/test/index.test.js b/packages/widget-hooks/test/index.test.js new file mode 100644 index 000000000..297c4ae33 --- /dev/null +++ b/packages/widget-hooks/test/index.test.js @@ -0,0 +1 @@ +test('an empty test', () => {}) \ No newline at end of file diff --git a/packages/widget-loader/.browserslistrc b/packages/widget-loader/.browserslistrc new file mode 100644 index 000000000..a62926302 --- /dev/null +++ b/packages/widget-loader/.browserslistrc @@ -0,0 +1,2 @@ +>0.2% +not dead diff --git a/packages/widget-loader/.eslintrc.js b/packages/widget-loader/.eslintrc.js new file mode 100644 index 000000000..dc326864f --- /dev/null +++ b/packages/widget-loader/.eslintrc.js @@ -0,0 +1,39 @@ +module.exports = { + "env": { + "browser": true, + "es6": true, + "jest": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended" + ], + "settings": { + "react": { + "version": "16.x" + } + }, + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "indent": [ + "error", + 2 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "never" + ] + } +}; \ No newline at end of file diff --git a/packages/widget-loader/.npmignore b/packages/widget-loader/.npmignore new file mode 100644 index 000000000..bb161e057 --- /dev/null +++ b/packages/widget-loader/.npmignore @@ -0,0 +1,8 @@ +.* +!.*ignore +node_modules/ +src/ +test/ +babel.config.js +*lock.json +webpack.config.js diff --git a/packages/widget-loader/CHANGELOG.md b/packages/widget-loader/CHANGELOG.md new file mode 100644 index 000000000..9ae953797 --- /dev/null +++ b/packages/widget-loader/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + diff --git a/packages/widget-loader/README.md b/packages/widget-loader/README.md new file mode 100644 index 000000000..2ec50c600 --- /dev/null +++ b/packages/widget-loader/README.md @@ -0,0 +1,120 @@ +# Widget-Loader +Widget Loader 是用于在运行时动态加载 widget 到当前环境来执行的加载器。 + + +## 优点 +1. 简化 widget 使用,无须安装; +2. 天然 code splitting,有助于提升性能; +3. 支持多实例,单次加载可配置。 + +## 安装 + +### npm +```sh +npm install @alicloud/widget-loader --save +``` + +## 使用 +**utils/configLoader.js** +```js +import createLoader from '@alicloud/widget-loader' + +// 使用 @alicloud/widget-loader 暴露的工厂函数实例化一个加载器 +export default createLoader() +``` + +**需要加载使用 widget 的文件** +```js +import loadWidget from '../utils/configLoader' + +// ⚠️⚠️⚠️ +// 不要把 loadWidget 放到组件的 render 函数中执行, +// 而对于 function component 则不要放到其函数体执行。 +const Widget = loadWidget({ + id: 'widgetId', + version: '1.x' +}) + +function YourComponent() { + return ( + + ) +} +``` + + +## API +### createLoader +参数|说明|类型|必填|默认值 +---|---|---|---|--- +dependencies|提供 widget 所需的额外的运行时依赖,如果提供此参数,它的值会被合并到默认值中|Object|否|react, react-dom,prop-types,axios +windRuntime|加载 wind-runtime 时的参数,不需要 wind-runtime 可以传入 null|Object|否|- +suspense|React Suspense 相关参数,在 widget 加载时使用,用户可自定义其 fallback 参数,fallback 默认使用 widget 官方提供的骨架屏|Object|否|{ fallback: '@alicloud/widget-skeleton' } +lazy|是否懒加载 widget|Boolean|否|true +host|widget 资源所在的 cdn 地址|string|否|https://g.alicdn.com +configHost|widget 配置所在的 cdn 地址|string|否|https://cws.alicdn.com + + +> ### 非 OneConsole 环境 +> 在非 OneConsole 环境下,开发者需要在 `dependencies` 参数中提供该环境的 `@alicloud/widget-utils-console` 的如下方法的实现。 +> 参数|说明|类型|必填|默认值 +> ---|---|---|---|--- +> getLocale|获取 locale|Function|是|() => 'zh-CN' +> getChannel|获取渠道 ID|Function|是|() => 'OFFICIAL' +> getCurrentUid|获取当前账号 uid|Function|是|() => '00' +> getParentUid|获取当前主账号 uid|Function|是|() => '00' +> getAccountType|获取当前账户类型|Function|是|() => 'main' +> getLang|获取当前语言环境|Function|是|() => 'zh' +> getRegionName|获取 region 的名称,入参为 regionId|Function|是|(id) => id +> getZoneName|获取可用区名称,入参为 zoneId|Function|是|(id) => id + + +### loadWidget +参数|说明|类型|必填|默认值 +---|---|---|---|--- +widgetOptions|当前加载 widget 的相关信息,具体参见下面 widgetOptions|Object|是|- +loadOptions|当前加载 widget 时的一些加载配置,可选参数,如果不传则默认使用 loader 的配置,如果传入则覆盖 loader 配置,具体参见下面的 loadOptions|Object|否|继承 loader 的配置 + + +### widgetOptions 配置参数 +参数|说明|类型|必填|默认值 +---|---|---|---|--- +id|widgtId|String|是|- +version|所需 widget 的大版本号或具体版本号(如:1.x 或 1.0.0)|String|是|- + + +### loadOptions 配置参数 +参数|说明|类型|必填|默认值 +---|---|---|---|--- +suspense|React Suspense 相关参数,在 widget 加载时使用,用户可自定义其 fallback 参数,默认继承 loader 同名参数|Object|否| loader 同名参数 suspense +lazy|懒加载|Boolean|否|loader 同名参数 suspense + + +## 示例 +### 指定版本 +Widget 有一套版本管理机制,可由 widget 的开发者在 widget 管控平台配置其版本信息,`widget-loader` 会在加载任意 widget 之前先行加载该版本信息,然后再去加载对应版本的 widget 资源,这样可以确保 `widget-loader` 所获取到的资源都是最新的。如果 widget 的使用者出于某种需要,要求明确指定 `widget-loader` 所获取资源的版本,也可以通过指定参数来实现。 +```js +const Widget = loadWidget({ + id: 'widgetId', + version: '1.0.0' // 不推荐,若非必要请勿使用具体版本号。推荐 1.x ,这种指定大版本且能获取小版本更新的加载方式。 +}) +``` + +### 立即载入 +widget loader 默认会对 widget 执行懒加载的策略,即只在 widget 真正需要渲染的时候再去加载。开发者也可以通过配置禁止这种策略。 +```js +const Widget = loadWidget({ + id: 'widgetId', + version: '1.x' +}, { + lazy: false // 不使用懒加载 +}) +``` + + +### 预发资源 +如果开发者需要加载预发环境的 widget ,可以通过绑定 **host** 实现: +```sh +10.101.73.189 g.alicdn.com +``` + diff --git a/packages/widget-loader/babel.config.js b/packages/widget-loader/babel.config.js new file mode 100644 index 000000000..43e99bc5b --- /dev/null +++ b/packages/widget-loader/babel.config.js @@ -0,0 +1,18 @@ +module.exports = { + 'presets': [ + ['@babel/preset-env', { + 'modules': false + }], + ['@babel/preset-react'] + ], + 'plugins': [ + [ + '@babel/plugin-transform-runtime', + { + // Since Webpack know how to deal with the ES6 modules, + // we don't transform it. + 'useESModules': true + } + ] + ] +} \ No newline at end of file diff --git a/packages/widget-loader/index.d.ts b/packages/widget-loader/index.d.ts new file mode 100644 index 000000000..81324b06a --- /dev/null +++ b/packages/widget-loader/index.d.ts @@ -0,0 +1,55 @@ +/// + +import { + ComponentType, + SuspenseProps +} from 'react'; + +// FIXME 非 OneConsole 的场景,这里每一个都要设置... +export interface IWidgetUtilsConsole { + getLang?: () => string; + getLocale?: () => string; + getChannel?: () => string; + getCurrentUid?: () => string; + getParentUid?: () => string; + getAccountType?: () => string; + getRegionName?: (regionId: string) => string; + getZoneName?: (zoneId: string) => string; + useCORS?: () => boolean; +} + +export interface IDependencies { + // OneConsole 下有统一的设值,但非 OneConsole(比如 console-base)下就必须全部设置... + // 否则会抛错 抛错位置在 `packages/widget-loader/src/utils/wind/checkConsoleUtils.js` + '@alicloud/widget-utils-console'?: IWidgetUtilsConsole; + [k: string]: any; +} + +export interface ICreateOptions { + initiator?: string; + dependencies?: IDependencies; + lazy?: boolean; + windRuntime?: { + preload?: boolean; + runtimeVersion?: string; + messageVersion?: string; + }; + // consoleConfig?: IWidgetUtilsConsole; // deprecated 不 export + suspense?: SuspenseProps; +} + +export interface IWidgetOptions { + id: string; + version: string; +} + +export interface ILoadOptions { + lazy: boolean; + suspense: SuspenseProps; +} + +export interface IFnLoader { + (widgetOptions: IWidgetOptions, loadOptions?: ILoadOptions): ComponentType; +} + +export default function (opts?: ICreateOptions): IFnLoader; diff --git a/packages/widget-loader/package.json b/packages/widget-loader/package.json new file mode 100644 index 000000000..f13df0e86 --- /dev/null +++ b/packages/widget-loader/package.json @@ -0,0 +1,42 @@ +{ + "name": "@alicloud/widget-loader", + "version": "0.1.0", + "description": "A widget loader for dynamicly loading widget at runtime.", + "main": "lib/index.js", + "author": "woota", + "license": "MIT", + "scripts": { + "build": "webpack", + "compile": "babel src -d lib", + "prepare": "npm run compile; npm run build" + }, + "devDependencies": { + "@babel/cli": "^7.6.4", + "@babel/core": "^7.6.4", + "@babel/plugin-transform-runtime": "^7.6.2", + "@babel/preset-env": "^7.6.3", + "@babel/preset-react": "^7.6.3", + "@types/react": "^16.9.9", + "babel-loader": "^8.0.5", + "prop-types": "^15.7.2", + "react": "^16.11.0", + "react-dom": "^16.11.0", + "webpack": "^4.41.2", + "webpack-cli": "^3.3.9" + }, + "dependencies": { + "@alicloud/widget-event-emitter": "^0.1.0", + "@alicloud/widget-logger": "^0.1.0", + "@alicloud/widget-skeleton": "^0.1.0", + "@alicloud/widget-utils-console": "^0.1.0", + "@babel/runtime": "^7.6.3", + "axios": "^0.18.0", + "hoist-non-react-statics": "^3.3.0" + }, + "peerDependencies": { + "prop-types": "^15.x", + "react": "^16.x", + "react-dom": "^16.x" + }, + "gitHead": "37331a4b605628540dd7594917ef040ee3abab74" +} diff --git a/packages/widget-loader/scripts/version.js b/packages/widget-loader/scripts/version.js new file mode 100644 index 000000000..e7509af00 --- /dev/null +++ b/packages/widget-loader/scripts/version.js @@ -0,0 +1,17 @@ +const fs = require('fs') +const path = require('path') +const packageJson = require('../package.json') + +const source = fs.readFileSync( + path.join(__dirname, '../src/utils/log/index.js') +).toString() + +const target = source.replace( + /loader: '.+',/g, + `loader: '${packageJson.version}',` +) + +fs.writeFileSync( + path.join(__dirname, '../src/utils/log/index.js'), + target +) diff --git a/packages/widget-loader/src/cons.js b/packages/widget-loader/src/cons.js new file mode 100644 index 000000000..b88cf8d46 --- /dev/null +++ b/packages/widget-loader/src/cons.js @@ -0,0 +1,48 @@ +import axios from 'axios' + +/** + * default options for widget loader + */ +export const DEFAULT_OPTIONS = { + dangerouslyUseDaily: false +} + +/** + * default runtime dependencies + * `axios` is provied by the widget loader itself + */ +export const DEFAULT_RUNTIME_DEPENDENCIES = { + axios: axios, + // react & react-dom are no longer provided by the loader + // these dependencies will be dynamicly loaded at runtime just like wind-runtime + // react: React, + // 'react-dom': ReactDOM, + // On the other hand, in order to reduce the shared packages, which are easy + // prone to errors, prop-types will be bundled into widget. + // 'prop-types': PropTypes +} + + +export const fuzzyVersionPattern = /^(\d+)\.x$/ +export const specificVersionPattern = /^(\d+)\.(\d+)\.(\d+)$/ + + +export const DEFAULT_STYLE_PREFIX_FOR_WIND_COMPONENT = 'aliyun-widget-' + + +/* + * Identifier name of the widget cache + */ +export const WIDGET_CACHE = '__ALIYUN_WIDGET_CACHE__' + + +/** + * widget_store is used to share data between all widgets and more. + */ +export const WIDGET_STORE = '__ALIYUN_WIDGET_STORE__' + + +/** + * Package version + */ +export const PACKAGE_VERSION = '3.9.0' diff --git a/packages/widget-loader/src/createLoader.js b/packages/widget-loader/src/createLoader.js new file mode 100644 index 000000000..d047c5061 --- /dev/null +++ b/packages/widget-loader/src/createLoader.js @@ -0,0 +1,444 @@ +import { lazy as lazyLoad } from 'react' +import { getUniversalUtils, getBasicUtils } from '@alicloud/widget-utils-console' +import load from './utils/load' +import parseOption from './utils/parseOption' +import parseId from './utils/parseId' +import getHost from './utils/getHost' +import { getVersion, get404FallbackVersion } from './utils/getVersion' +import getFilename from './utils/getFilename' +import getFecsSecToken from './utils/console/getFecsSecToken' +import getFecsUmid from './utils/console/getFecsUmid' +import checkConsoleUtils from './utils/console/checkConsoleUtils' +import withConsoleConfig from './rc/withConsoleConfig' // deprecated +import withSuspense from './rc/withSuspense' +import withEventEmitter from './rc/withEventEmitter' +import withErrorBoundary from './rc/withErrorBoundary' +import preload from './preload' +import { DEFAULT_RUNTIME_DEPENDENCIES } from './cons' +import generate404Error from './utils/errorGenerator/generate404Error' +import generateErrorMessage from './utils/errorGenerator/generateErrorMessage' +import { getOrigin } from '@alicloud/widget-logger' +import WidgetLoaderLogger from './utils/logger/loader' +import WidgetErrorLogger from './utils/logger/error' +import needDynamiclyLoadRuntime from './utils/runtime/needDynamiclyLoadRuntime' +import loadRuntime from './utils/runtime/loadRuntime' +import withSandbox from './rc/withSandbox' +import widgetStore from './utils/widgetStore' +import createDynamicWindStylePrefix from './utils/runtime/createDynamicWindStylePrefix' + + +function createLoader(opts = {}) { + const { + dependencies = {}, + + // TODO: remove `windRuntime` at some point, instead use a more general + // parameter to handle these runtime loaded dependencies. + + // React related params + reactRuntime: reactRuntimeOptions = {}, + + // All wind related params should be collect into this object. + windRuntime: windRuntimeOptions = {}, + + // Deprecation! + // TODO: this will be removed in the next major release. + consoleConfig = {}, + + // React Suspense api for widget. + suspense: loaderSuspense = {}, + + // Lazy load widget by default. + lazy: loaderLazy = true, + + // `initiator` is used to identify where the loader is initialized. + initiator = `${getOrigin()}${location.pathname}`, + + host: passedInHost, + + configHost: passedInConfigHost, + + // A debug flag used to turn on and off debug mode + debug = false + } = opts + + + // !Deprecation + if (opts.consoleConfig) { + // eslint-disable-next-line no-console + console.error(generateErrorMessage( + ` + Parameter "consoleConfig" is deprecated, it will be removed from the + package at the next major release of @alicloud/widget-loader. + The console utils that were used to pass to "consoleConfig" parameter + are now expected to pass to "dependencies['@alicloud/widget-utils-console']". + + <<<<<<<<<<<< Deprecated Usage <<<<<<<<<<<< + const loadWidget = createLoader({ + consoleConfig: { + getLocale: () => 'LOCALE' + } + }) + >>>>>>>>>>>> Recommended Usage >>>>>>>>>>>> + const loadWidget = createLoader({ + dependencies: { + '@alicloud/widget-utils-console': { + getLocale: () => 'LOCALE' + } + } + }) + + The deprecated "consoleConfig" api is still going to work at current + major, so that you have time to upgrade.` + )) + } + + // Hosts are used to retrive release data, widget itself and its config data. + // If developers want to use custom hosts, then set the passed in hosts for them. + // Since the places where hosts are used are nesting very deeply, for implementation simplicity, + // we just store these informations into widget store. + // And data stored in __ALIYUN_WIDGET_STORE__ are shared by all the loaders. + // In this case, share hosts throuth all widget loaders is Okay, + // different hosts for one app should not be allowed. + if ( + typeof passedInHost === 'string' && + !widgetStore.get('host') + ) { + widgetStore.set('host', passedInHost) + } + if ( + typeof passedInConfigHost === 'string' && + !widgetStore.get('configHost') + ) { + widgetStore.set('configHost', passedInConfigHost) + } + + // Merge console utils + // We know well about where to get those console configs when we are in an + // one-console app by using `@alicloud/widget-utils-console`, but have no idea + // in other apps, and their might differ a lot. + // So the strategy here is we use `@alicloud/widget-console-utils` when we detect + // that we are in one-console, and let the user to tell us what to do + // the otherwise. + const basicConsoleUtils = getBasicUtils() + const universalConsoleUtils = getUniversalUtils() + let consoleUtils = { + ...( + universalConsoleUtils.isOneConsole() + ? { + ...basicConsoleUtils, + ...universalConsoleUtils, + getBasicUtils, // FIXME: This method should be get rid of in 4.0, for there is no inner loader + getUniversalUtils // FIXME: This method should be get rid of in 4.0, for there is no inner loader + } + : { + ...universalConsoleUtils, + // If we are not in OneConsole, then we set `useCORS` to always return `true` explicitly + useCORS: () => true, + getBasicUtils, // FIXME: This method should be get rid of in 4.0, for there is no inner loader + getUniversalUtils // FIXME: This method should be get rid of in 4.0, for there is no inner loader + } + ), + ...consoleConfig, // FIXME: Compat for old api, this will be removed at next major + ...( + dependencies['@alicloud/widget-utils-console'] + ? dependencies['@alicloud/widget-utils-console'] + : {} + ) + } + + // Check whether need to use fecs CORS + // If `true` is the case, then rewrite below two utils + if (consoleUtils.useCORS()) { + consoleUtils.getSecToken = getFecsSecToken + consoleUtils.getUmid = getFecsUmid + consoleUtils.getCollina = universalConsoleUtils.getCollina || (() => '') + } + + // Check the console utils that widgets need. + consoleUtils = checkConsoleUtils(consoleUtils) + + // Assemble runtime dependencies that widgets need. + // During the widget's dundling time, below 7 packages are droped from + // the final bundle: + // react, react-dom, prop-types, axios, @alicloud/console-components, @alicloud/console-components-intl/lib/Provider + // , @alicloud/widget-utils-console. + // These packages are expected to be provided by widget loader at the "eval" + // phrase. Widget loader will make an assumption that react, react-dom, + // prop-types are exist no matter how. So it just import these three packages + // without examination in `DEFAULT_RUNTIME_DEPENDENCIES`. + // axios is a dependency of widget loader itself, so we can import it without + // a concern, axios is also get imported in `DEFAULT_RUNTIME_DEPENDENCIES`. + // Above 4 packages are excluded from the widget final bundle only for the + // consideration of the bundle size. + // What been left are @alicloud/console-components, @alicloud/console-components-intl/lib/Provider and + // @alicloud/widget-utils-console, let's first talk about the former two. + // @alicloud/console-components and @alicloud/console-components-intl/lib/Provider are loaded by widget loader + // before the actual widget get loaded, this is because widget need these 2 + // packages to run. In order to reduce the payload size of these 2 packages, + // we bundled them into a widget called "wind-runtime", developer can control + // how "wind-runtime" get loaded by pass the same "wind-runtime" parameter + // at widget loader's initialization. + // wind-runtime's exclusion is majorly for the size concern, but we also do + // it for another reason which is to have the chance to alter its source code + // before execute it and pass it to widgets as dependency. And this is + // necessary for the co-exist of different instances of wind-runtime, they + // might have style collision for the same classnames. + // Last but not the least, @alicloud/widget-utils-console. This package is a + // collecion of console utilities that are used to retrive information about + // the web console app. Sadly, web console apps of alibaba cloud have no + // standard, there are many different types of console portal. By default, + // @alicloud/widget-utils-console's utilities are bound to "one-console", but + // widget need to support all kinds of console apps, so + // developers may pass in their console portal specific utilities to widget + // loader, it will then ressemble @alicloud/widget-utils-console as required. + // Meanwhile, widget loader injects 1 wind specific method `getWindMessages` + // and 3 widget specific methods `getChannelLinkList`, `getChannelFeatureList` + // , `getWidgetI18nMessages` to @alicloud/widget-utils-console for all widgets. + // If you want to see the details of the injections, you can global search + // the project with these methods' names. + let runtimeDependencies = { + ...DEFAULT_RUNTIME_DEPENDENCIES, // axios + ...dependencies, // User specified dependencies + '@alicloud/widget-utils-console': consoleUtils, + '@alicloud/widget-loader': { // Inject the loader to the inner widget. + __esModule: true, + default: () => loadWidget + } + } + + let preloadRuntimeProcess = null + async function preloadRuntime() { + const { runtimeVersion: reactRuntimeVersion } = reactRuntimeOptions + const { + runtimeVersion: windRuntimeVersion, + messageVersion: windMessageVersion + } = windRuntimeOptions + + const { message, stylePrefix, runtime } = await loadRuntime({ + reactRuntimeVersion, + windRuntimeVersion, + windMessageVersion, + locale: consoleUtils.getLocale() + }) + + // Inject some utils to consoleUtils + consoleUtils.getWindMessages = () => message + consoleUtils.getStylePrefixForWindComponent = () => stylePrefix + + // Merge with wind-runtime + runtimeDependencies = { + ...runtimeDependencies, + /** + * react, + * react-dom, + * @alicloud/console-components, + * @alicloud/console-components-intl/lib/Provider, @alicloud/console-components-intl/lib/withRcIntl, + * @alife/dpl-console-design-201X + */ + ...runtime + } + } + + // Preload runtime(react, wind) if necessary + if (needDynamiclyLoadRuntime(runtimeDependencies)) { + preloadRuntimeProcess = preloadRuntime() + } else { + // Inject some utils to consoleUtils + // Only works for script loaded widget + consoleUtils.getWindMessages = () => { + const locale = consoleUtils.getLocale() + const messages = window[`wind-v2_${locale.toLowerCase()}`] + if (!messages) { + // eslint-disable-next-line + console.error('[Widget Loader] No wind-messages was found in the global.') + } + return messages + } + consoleUtils.getStylePrefixForWindComponent = () => { + const stylePrefix = createDynamicWindStylePrefix( + window['WidgetWindRuntime']['version'] + ) + return stylePrefix + } + } + + /** + * @description + * widgetOptions shape: + * id: string, // such as '@ali/widget-test' + * version: string // such as '1.2.3' or '2.x' + */ + function loadWidget( + widgetOptions, + loadOptions = {} + ) { + const options = parseOption(widgetOptions) + + // `lazy` and `suspense` can be customized for every widget loading + const { + lazy: widgetLazy = loaderLazy, + suspense: widgetSuspense = loaderSuspense + } = loadOptions + + // Initialize a "logger" for every widget loading process + const widgetLoaderLogger = new WidgetLoaderLogger({ + id: options.id, + request_ver: options.version, + initiator + }, { debug }) + + const startToLoadWidget = () => new Promise(async (resolve) => { + // lazyLoad() accept a promise + // which resolves to a react component. + + // NOTE HERE! + // We do not reject the promise for any situation, + // because that will unmount the whole app, + // and that is absolutely not what we want. + + // Mark the start time at the beginning of the loading process + widgetLoaderLogger.start() + widgetLoaderLogger.location(`${getOrigin()}${window.location.pathname}`) + + // Detect whether need to load `runtime dependencies` or not. + // If `true` is the case, then the very first widget loading time + // will be observably slower than the subsequent ones. + if ( + needDynamiclyLoadRuntime(runtimeDependencies) && // through network + preloadRuntimeProcess // the process has been started + ) { + await preloadRuntimeProcess + } else if ( + needDynamiclyLoadRuntime(runtimeDependencies) // through network + ) { + // The process is not started yet, then do it right now. + preloadRuntimeProcess = preloadRuntime() + await preloadRuntimeProcess + } + + // Get widget host url + const host = getHost() + + // Get `group` and `name` out of widget id + const { group, name } = parseId(options.id) + + // Get widget version + const version = await getVersion(options, consoleUtils.getCurrentUid()) + widgetLoaderLogger.version(version) + + // Get widget filename + const filename = getFilename() + + const resolvedURL = `${host}/${group}/${name}/${version}/${filename}` + + // Define the wanted module + let module + + try { + widgetLoaderLogger.startToLoadWidget() + module = await load(resolvedURL, runtimeDependencies) + } catch (error) { + // we catch the 404 error here, and fallback + if (typeof error === 'object' && error.code === 404) { + const fallbackVersion = await get404FallbackVersion( + options, + consoleUtils.getCurrentUid() + ) + + widgetLoaderLogger.version(fallbackVersion) + + // eslint-disable-next-line no-console + console.warn(`[Widget Loader] Can't fetch widget ${ + options.id + } version ${version}. + Fallback to version ${fallbackVersion}`) + + const fallbackURL = + `${host}/${group}/${name}/${fallbackVersion}/${filename}` + + try { + module = await load(fallbackURL, runtimeDependencies) + } catch (error) { + if(error.code === 'eval') { + const evalErrorLogger = new WidgetErrorLogger({ + id: options.id, + version, + e_code: error.code, + e_msg: error.message, + e_stack: error.stack + }, { + debug + }) + evalErrorLogger.send() + } else { + // Any unrecogonized error would be treat as an 404 error + widgetLoaderLogger.error(generate404Error(error)) + } + throw error + } + } else { + if(error.code === 'eval') { + const evalErrorLogger = new WidgetErrorLogger({ + id: options.id, + version, + e_code: error.code, + e_msg: error.message, + e_stack: error.stack + }, { + debug + }) + evalErrorLogger.send() + } else { + // Any unrecogonized error would be treat as an 404 error + widgetLoaderLogger.error(generate404Error(error)) + } + throw error + } + } finally { + widgetLoaderLogger.endLoadingWidget() + } + + widgetLoaderLogger.end() + + const widgetWithConsoleConfig = withConsoleConfig({ + // Compat with old dependent libraries. + locale: consoleUtils.getLocale(), + channelId: consoleUtils.getChannel(), + windMessages: consoleUtils.getWindMessages() + })(module) + + // The real widget gets rendered in a "Sandbox" component + const widgetWithSandbox = withSandbox(runtimeDependencies['react-dom'])( + widgetWithConsoleConfig + ) + + // The callback passing to React.lazy should return a promise, + // which resolves to a module with a default property. + resolve({ default: widgetWithSandbox }) + }) + + // If 'widgetLazy' is set to `true`, then the loading process will be + // delayed to widget's first render. + // Otherwise, widget will get loaded immediately. + const Widget = widgetLazy + ? withSuspense(widgetSuspense)(lazyLoad(startToLoadWidget)) + : preload(startToLoadWidget()) + + const widgetWithEventEmitter = withEventEmitter(Widget) + + const widgetWithErrorBoundary = withErrorBoundary({ + id: options.id, + version: options.version, + debug + })( + widgetWithEventEmitter + ) + + return widgetWithErrorBoundary + } + + // Return the widget loading function + return loadWidget +} + +export default createLoader diff --git a/packages/widget-loader/src/getEventEmitter.js b/packages/widget-loader/src/getEventEmitter.js new file mode 100644 index 000000000..9457c969c --- /dev/null +++ b/packages/widget-loader/src/getEventEmitter.js @@ -0,0 +1,3 @@ +import getEventEmitter from './utils/common/eventEmitter' + +export default getEventEmitter diff --git a/packages/widget-loader/src/index.js b/packages/widget-loader/src/index.js new file mode 100644 index 000000000..4bc834219 --- /dev/null +++ b/packages/widget-loader/src/index.js @@ -0,0 +1,3 @@ +import createLoader from './createLoader' + +export default createLoader diff --git a/packages/widget-loader/src/preload.js b/packages/widget-loader/src/preload.js new file mode 100644 index 000000000..5e75cad0e --- /dev/null +++ b/packages/widget-loader/src/preload.js @@ -0,0 +1,24 @@ +import React, { Suspense, lazy } from 'react' +import hoistNonReactStatic from 'hoist-non-react-statics' +import getDisplayName from './rc/getDisplayName' + +function preload(promiseThatHasWidgetContained) { + const Widget = lazy(async () => await promiseThatHasWidgetContained) + + function Preload(props) { + // Widgets that need preload shouldn't have any visible fallback, + // so we set it to `null`. + return ( + + + + ) + } + + Preload.displayName = `Preload(${getDisplayName(Widget)})` + + hoistNonReactStatic(Preload, Widget) + return Preload +} + +export default preload diff --git a/packages/widget-loader/src/rc/getDisplayName.js b/packages/widget-loader/src/rc/getDisplayName.js new file mode 100644 index 000000000..2f58e25b4 --- /dev/null +++ b/packages/widget-loader/src/rc/getDisplayName.js @@ -0,0 +1,5 @@ +function getDisplayName(WrappedComponent) { + return WrappedComponent.displayName || WrappedComponent.name || 'WidgetFromLoader' +} + +export default getDisplayName diff --git a/packages/widget-loader/src/rc/withConsoleConfig.js b/packages/widget-loader/src/rc/withConsoleConfig.js new file mode 100644 index 000000000..586a8a68d --- /dev/null +++ b/packages/widget-loader/src/rc/withConsoleConfig.js @@ -0,0 +1,27 @@ +import React from 'react' +import hoistNonReactStatic from 'hoist-non-react-statics' +import getDisplayName from './getDisplayName' +import PropTypes from 'prop-types' + +const withConsoleConfig = config => WrappedComponent => { + function EnhancedComponent({ consoleConfig, ...rest }) { + // eslint-disable-next-line no-console + consoleConfig && console.error( + '[Widget] "consoleConfig" is used internally by widget-core, ' + + 'please choose another prop name for your widget.' + ) + return ( + + ) + } + + EnhancedComponent.displayName = `WithConsoleConfig(${getDisplayName(WrappedComponent)})` + EnhancedComponent.propTypes = { + consoleConfig: PropTypes.any + } + + hoistNonReactStatic(EnhancedComponent, WrappedComponent) + return EnhancedComponent +} + +export default withConsoleConfig diff --git a/packages/widget-loader/src/rc/withErrorBoundary.js b/packages/widget-loader/src/rc/withErrorBoundary.js new file mode 100644 index 000000000..a0d656ee2 --- /dev/null +++ b/packages/widget-loader/src/rc/withErrorBoundary.js @@ -0,0 +1,80 @@ +import React, { Component } from 'react' +import hoistNonReactStatic from 'hoist-non-react-statics' +import getDisplayName from './getDisplayName' +import WidgetErrorLogger from '../utils/logger/error' + +const style = { + padding: '16px' +} + +const withErrorBoundary = (options) => (WrappedComponent) => { + class EnhancedComponent extends Component { + constructor(props) { + super(props) + this.state = { + hasError: false, + error: null, + info: null + } + } + + componentDidCatch(error, info) { + this.setState({ + hasError: true, + error, + info + }) + // New a logger + const renderErrorLogger = new WidgetErrorLogger({ + id: options.id, + version: options.version, + e_code: 'render', + e_msg: error.message, + e_stack: error.stack, + c_stack: info.componentStack + }, { + debug: options.debug + }) + renderErrorLogger.send() + } + + render() { + if (this.state.hasError) { + return ( +
+

Widget Error!

+
+

+ ID: + {options.id} +

+

+ Message: + {this.state.error.message} +

+

+ Component Stack: + {this.state.info.componentStack} +

+

+ Error Stack: + {this.state.error.stack} +

+
+
+ ) + } + + return ( + + ) + } + } + + EnhancedComponent.displayName = `WithErrorBoundary(${getDisplayName(WrappedComponent)})` + + hoistNonReactStatic(EnhancedComponent, WrappedComponent) + return EnhancedComponent +} + +export default withErrorBoundary diff --git a/packages/widget-loader/src/rc/withEventEmitter.js b/packages/widget-loader/src/rc/withEventEmitter.js new file mode 100644 index 000000000..20a64fb44 --- /dev/null +++ b/packages/widget-loader/src/rc/withEventEmitter.js @@ -0,0 +1,21 @@ +import React from 'react' +import hoistNonReactStatic from 'hoist-non-react-statics' +import getEventEmitter from '../utils/common/eventEmitter' +import getDisplayName from './getDisplayName' + +function withEventEmitter(WrappedComponent) { + const eventEmitter = getEventEmitter() + + function EnhancedComponent(props) { + return ( + + ) + } + + EnhancedComponent.displayName = `WithEventEmitter(${getDisplayName(WrappedComponent)})` + + hoistNonReactStatic(EnhancedComponent, WrappedComponent) + return EnhancedComponent +} + +export default withEventEmitter diff --git a/packages/widget-loader/src/rc/withSandbox.js b/packages/widget-loader/src/rc/withSandbox.js new file mode 100644 index 000000000..66d9c0883 --- /dev/null +++ b/packages/widget-loader/src/rc/withSandbox.js @@ -0,0 +1,50 @@ +/** + * This component is rendered by the react-dom which belongs to the host, + * and it only renders an empty div + * the real widget will be rendered by the dynamicly loaded react-dom + */ +import React, { createElement, Component, createRef } from 'react' +import hoistNonReactStatic from 'hoist-non-react-statics' +import getDisplayName from './getDisplayName' + +function withSandbox(ReactDOM) { + return function(WrappedComponent) { + class EnhancedComponent extends Component { + constructor(props) { + super(props) + this.target = createRef() + } + + componentDidMount() { + ReactDOM.render( + createElement(WrappedComponent, this.props), + this.target.current + ) + } + + componentDidUpdate() { + ReactDOM.render( + createElement(WrappedComponent, this.props), + this.target.current + ) + } + + componentWillUnmount() { + ReactDOM.unmountComponentAtNode(this.target.current) + } + + render() { + return ( +
+ ) + } + } + + EnhancedComponent.displayName = `withSandbox(${getDisplayName(WrappedComponent)})` + + hoistNonReactStatic(EnhancedComponent, WrappedComponent) + return EnhancedComponent + } +} + +export default withSandbox diff --git a/packages/widget-loader/src/rc/withSuspense.js b/packages/widget-loader/src/rc/withSuspense.js new file mode 100644 index 000000000..38b25a58a --- /dev/null +++ b/packages/widget-loader/src/rc/withSuspense.js @@ -0,0 +1,33 @@ +import React, { Suspense } from 'react' +import hoistNonReactStatic from 'hoist-non-react-statics' +import Skeleton from '@alicloud/widget-skeleton' +import getDisplayName from './getDisplayName' + +const withSuspense = suspenseConfig => WrappedComponent => { + if (suspenseConfig === null) { + return WrappedComponent + } + + const { + skeleton: skeletonProps, + fallback = + } = suspenseConfig + + function EnhancedComponent(props) { + return ( + + + + ) + } + + EnhancedComponent.displayName = `WithSuspense(${getDisplayName(WrappedComponent)})` + + hoistNonReactStatic(EnhancedComponent, WrappedComponent) + return EnhancedComponent +} + +export default withSuspense diff --git a/packages/widget-loader/src/utils/camelCase.js b/packages/widget-loader/src/utils/camelCase.js new file mode 100644 index 000000000..1ceff0409 --- /dev/null +++ b/packages/widget-loader/src/utils/camelCase.js @@ -0,0 +1,9 @@ +const pat = /-([a-z])/g + +function camelCase(target) { + return target.replace(pat, (match, firstRef) => { + return firstRef.toUpperCase() + }) +} + +export default camelCase diff --git a/packages/widget-loader/src/utils/common/createGlobalVariable.js b/packages/widget-loader/src/utils/common/createGlobalVariable.js new file mode 100644 index 000000000..858cb30f4 --- /dev/null +++ b/packages/widget-loader/src/utils/common/createGlobalVariable.js @@ -0,0 +1,27 @@ +function createGlobalVariable(namespace) { + return { + namespace, + init() { + if (!window[this.namespace]) { + return window[this.namespace] = {} + } + }, + get(key) { + let cache = window[this.namespace] + if (!cache) { + cache = this.init() + } + return cache[key] + }, + set(key, value) { + let cache = window[this.namespace] + if (!cache) { + cache = this.init() + } + cache[key] = value + return true + } + } +} + +export default createGlobalVariable diff --git a/packages/widget-loader/src/utils/common/eventEmitter.js b/packages/widget-loader/src/utils/common/eventEmitter.js new file mode 100644 index 000000000..ea65d52a5 --- /dev/null +++ b/packages/widget-loader/src/utils/common/eventEmitter.js @@ -0,0 +1,18 @@ +import EventEmitter from '@alicloud/widget-event-emitter' +import widgetStore from '../widgetStore' + + +function getEventEmitter() { + if (!widgetStore.get('eventEmitter')) { + const ee = new EventEmitter() + widgetStore.set('eventEmitter', ee) + } + + return widgetStore.get('eventEmitter') +} + +// We execute the function here to initialize the eventEmitter more early +// and ignore the return +getEventEmitter() + +export default getEventEmitter diff --git a/packages/widget-loader/src/utils/config/getConfigURL.js b/packages/widget-loader/src/utils/config/getConfigURL.js new file mode 100644 index 000000000..fb187eb73 --- /dev/null +++ b/packages/widget-loader/src/utils/config/getConfigURL.js @@ -0,0 +1,11 @@ +import getConfigHost from '../getConfigHost' + +function getConfigURL(widgetId, recover) { + if (!widgetId) { + throw new Error('widgetId is required, but missing.') + } + + return `${getConfigHost(recover)}/Release/pkgs/${widgetId}/config.json` +} + +export default getConfigURL diff --git a/packages/widget-loader/src/utils/config/index.js b/packages/widget-loader/src/utils/config/index.js new file mode 100644 index 000000000..2fb4190e2 --- /dev/null +++ b/packages/widget-loader/src/utils/config/index.js @@ -0,0 +1,42 @@ +import axios from 'axios' +import getConfigURL from './getConfigURL' +import generateWidgetConfigExtractionError from '../errorGenerator/generateWidgetConfigExtractionError' + + +const axiosInstance = axios.create() + +async function loadWidgetConfig({ widgetId, locale, channelId }) { + let failedOnOfficialCdn = false + try { + return await load(widgetId, locale, channelId, failedOnOfficialCdn) + } catch (err) { + failedOnOfficialCdn = true + return await load(widgetId, locale, channelId, failedOnOfficialCdn) + } +} + +async function load(widgetId, locale = 'en-US', channelId = 'OFFICIAL', recover) { + const configUrl = getConfigURL(widgetId, recover) + const { + locales, + links, + features, + } = await loadConfig(configUrl) + + try { + return { + messages: locales[locale] ? locales[locale].messages : locales['en-US'].messages, + links: links[channelId] || links.OFFICIAL, + features: features[channelId] || features.OFFICIAL + } + } catch (err) { + throw generateWidgetConfigExtractionError(err) + } +} + +async function loadConfig(url) { + const resp = await axiosInstance.get(url) + return resp.data +} + +export default loadWidgetConfig \ No newline at end of file diff --git a/packages/widget-loader/src/utils/console/checkConsoleUtils.js b/packages/widget-loader/src/utils/console/checkConsoleUtils.js new file mode 100644 index 000000000..3dbc334f9 --- /dev/null +++ b/packages/widget-loader/src/utils/console/checkConsoleUtils.js @@ -0,0 +1,51 @@ +import { getBasicUtils } from '@alicloud/widget-utils-console' + + +const FALLBACK_CONSOLE_UTILS = { + getParentUid: function() { return '00' }, + getCurrentUid: function() { return '00' }, + getAccountType: function() { return 'main' }, + getChannel: function() { return 'OFFICAIL' }, + getLang: function() { return 'zh' }, + getLocale: function() { return 'zh-CN' }, + getRegionName: function(id) { return id }, + getZoneName: function(id) { return id } +} + +function checkConsoleUtils(consoleUtils) { + const resultConsoleUtils = { ...consoleUtils } + const requiredConsoleUtilNames = Object.keys(getBasicUtils()) + + // Check + /* eslint-disable no-console */ + for (const name of requiredConsoleUtilNames) { + if (!consoleUtils[name]) { + console.warn(`[createLoader] "${name}" is required in "dependencies['@alicloud/widget-utils-console']" parameter but missing. Fallback to: + + ${FALLBACK_CONSOLE_UTILS[name].toString()} + + This will be problematic if the fallback util is not suit for your case, but you can always provide your own implementation to avoid such issue. + + createLoader({ + dependencies: { + '@alicloud/widget-utils-console': { + ${name}: xxx, // Your implementation here. + } + } + })`) + + // Override with the default utils + resultConsoleUtils[name] = FALLBACK_CONSOLE_UTILS[name] + } + + if (typeof resultConsoleUtils[name] !== 'function') { + throw new TypeError( + `[createLoader] Expect ${name} to be a function.` + ) + } + } + + return resultConsoleUtils +} + +export default checkConsoleUtils diff --git a/packages/widget-loader/src/utils/console/docCookies.js b/packages/widget-loader/src/utils/console/docCookies.js new file mode 100644 index 000000000..edcf76b1c --- /dev/null +++ b/packages/widget-loader/src/utils/console/docCookies.js @@ -0,0 +1,58 @@ +/*\ +|*| +|*| :: cookies.js :: +|*| +|*| A complete cookies reader/writer framework with full unicode support. +|*| +|*| https://developer.mozilla.org/en-US/docs/DOM/document.cookie +|*| +|*| This framework is released under the GNU Public License, version 3 or later. +|*| http://www.gnu.org/licenses/gpl-3.0-standalone.html +|*| +|*| Syntaxes: +|*| +|*| * docCookies.setItem(name, value[, end[, path[, domain[, secure]]]]) +|*| * docCookies.getItem(name) +|*| * docCookies.removeItem(name[, path], domain) +|*| * docCookies.hasItem(name) +|*| * docCookies.keys() +|*| +\*/ +/* eslint-disable */ +export default { + getItem: function (sKey) { + return decodeURIComponent(document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + encodeURIComponent(sKey).replace(/[-.+*]/g, '\\$&') + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1')) || null + }, + setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) { + if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return false } + var sExpires = '' + if (vEnd) { + switch (vEnd.constructor) { + case Number: + sExpires = vEnd === Infinity ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT' : '; max-age=' + vEnd + break + case String: + sExpires = '; expires=' + vEnd + break + case Date: + sExpires = '; expires=' + vEnd.toUTCString() + break + } + } + document.cookie = encodeURIComponent(sKey) + '=' + encodeURIComponent(sValue) + sExpires + (sDomain ? '; domain=' + sDomain : '') + (sPath ? '; path=' + sPath : '') + (bSecure ? '; secure' : '') + return true + }, + removeItem: function (sKey, sPath, sDomain) { + if (!sKey || !this.hasItem(sKey)) { return false } + document.cookie = encodeURIComponent(sKey) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' + ( sDomain ? '; domain=' + sDomain : '') + ( sPath ? '; path=' + sPath : '') + return true + }, + hasItem: function (sKey) { + return (new RegExp('(?:^|;\\s*)' + encodeURIComponent(sKey).replace(/[-.+*]/g, '\\$&') + '\\s*\\=')).test(document.cookie) + }, + keys: /* optional method: you can safely remove it! */ function () { + var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, '').split(/\s*(?:\=[^;]*)?;\s*/) + for (var nIdx = 0; nIdx < aKeys.length; nIdx++) { aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]) } + return aKeys + } +} diff --git a/packages/widget-loader/src/utils/console/getFecsSecToken.js b/packages/widget-loader/src/utils/console/getFecsSecToken.js new file mode 100644 index 000000000..fc25beef2 --- /dev/null +++ b/packages/widget-loader/src/utils/console/getFecsSecToken.js @@ -0,0 +1,7 @@ +import docCookies from './docCookies' + +// csrf token +const FECS_XSRF_TOKEN = 'FECS-XSRF-TOKEN' +export default function getFecsSecToken() { + return docCookies.getItem(FECS_XSRF_TOKEN) +} diff --git a/packages/widget-loader/src/utils/console/getFecsUmid.js b/packages/widget-loader/src/utils/console/getFecsUmid.js new file mode 100644 index 000000000..3423d66eb --- /dev/null +++ b/packages/widget-loader/src/utils/console/getFecsUmid.js @@ -0,0 +1,7 @@ +import docCookies from './docCookies' + +// csrf token +const FECS_UMID = 'FFECS-UMID' +export default function getFecsUmid() { + return docCookies.getItem(FECS_UMID) +} diff --git a/packages/widget-loader/src/utils/errorGenerator/generate404Error.js b/packages/widget-loader/src/utils/errorGenerator/generate404Error.js new file mode 100644 index 000000000..35c68c31a --- /dev/null +++ b/packages/widget-loader/src/utils/errorGenerator/generate404Error.js @@ -0,0 +1,7 @@ +export default function generate404Error({ message, stack }) { + return { + code: 404, + message, + stack + } +} diff --git a/packages/widget-loader/src/utils/errorGenerator/generateErrorMessage.js b/packages/widget-loader/src/utils/errorGenerator/generateErrorMessage.js new file mode 100644 index 000000000..540973f34 --- /dev/null +++ b/packages/widget-loader/src/utils/errorGenerator/generateErrorMessage.js @@ -0,0 +1,5 @@ +function generateErrorMessage(message) { + return `[Widget Loader] ${message}` +} + +export default generateErrorMessage diff --git a/packages/widget-loader/src/utils/errorGenerator/generateEvalError.js b/packages/widget-loader/src/utils/errorGenerator/generateEvalError.js new file mode 100644 index 000000000..38dc15bdc --- /dev/null +++ b/packages/widget-loader/src/utils/errorGenerator/generateEvalError.js @@ -0,0 +1,7 @@ +export default function generateEvalError({ message, stack }) { + return { + code: 'eval', + message, + stack + } +} diff --git a/packages/widget-loader/src/utils/errorGenerator/generateWidgetConfigExtractionError.js b/packages/widget-loader/src/utils/errorGenerator/generateWidgetConfigExtractionError.js new file mode 100644 index 000000000..3139c0a83 --- /dev/null +++ b/packages/widget-loader/src/utils/errorGenerator/generateWidgetConfigExtractionError.js @@ -0,0 +1,7 @@ +export default function generateWidgetConfigExtractionError({ message, stack }) { + return { + code: 'widget_config_extraction', + message, + stack + } +} \ No newline at end of file diff --git a/packages/widget-loader/src/utils/getConfigHost.js b/packages/widget-loader/src/utils/getConfigHost.js new file mode 100644 index 000000000..ff0c2687c --- /dev/null +++ b/packages/widget-loader/src/utils/getConfigHost.js @@ -0,0 +1,15 @@ +import widgetStore from './widgetStore' + +const DEFAULT_CONFIG_HOST = 'https://cws.alicdn.com' +const DEFAULT_CONFIG_STANDBY_HOST = 'https://cws2.alicdn.com' + +function getConfigHost(useStandby) { + if (widgetStore.get('configHost')) { + return widgetStore.get('configHost') + } + return useStandby ? + DEFAULT_CONFIG_STANDBY_HOST : + DEFAULT_CONFIG_HOST +} + +export default getConfigHost diff --git a/packages/widget-loader/src/utils/getFilename.js b/packages/widget-loader/src/utils/getFilename.js new file mode 100644 index 000000000..022ac6763 --- /dev/null +++ b/packages/widget-loader/src/utils/getFilename.js @@ -0,0 +1,5 @@ +function getFilename() { + return 'index.js' +} + +export default getFilename diff --git a/packages/widget-loader/src/utils/getHost.js b/packages/widget-loader/src/utils/getHost.js new file mode 100644 index 000000000..1404c808d --- /dev/null +++ b/packages/widget-loader/src/utils/getHost.js @@ -0,0 +1,9 @@ +import widgetStore from './widgetStore' + +const DEFAULT_WIDGET_CDN_HOST = 'https://g.alicdn.com' + +function getHost() { + return widgetStore.get('host') || DEFAULT_WIDGET_CDN_HOST +} + +export default getHost diff --git a/packages/widget-loader/src/utils/getRelease.js b/packages/widget-loader/src/utils/getRelease.js new file mode 100644 index 000000000..5614bd347 --- /dev/null +++ b/packages/widget-loader/src/utils/getRelease.js @@ -0,0 +1,65 @@ +import request from './request' +import widgetCache from './widgetCache' +import widgetStore from './widgetStore' +import getConfigHost from './getConfigHost' + + +async function startFetchReleaseProcess() { + let res + const releaseCacheKey = 'release' + + try { + if (!widgetCache.get(releaseCacheKey)) { + const url = `${getConfigHost()}/${releaseCacheKey}.json` + widgetCache.set(releaseCacheKey, request.get(url, { + timeout: 5000 // 5 seconds fallback to standby + })) + } + res = await widgetCache.get(releaseCacheKey) + } catch (err) { + // If the previous promise has been rejected + const rejected = await widgetCache.get(releaseCacheKey).catch(() => true) + if (rejected === true) { + const url = `${getConfigHost(true)}/${releaseCacheKey}.json` + widgetCache.set(releaseCacheKey, request.get(url, { + timeout: 5000 + })) + } + + res = await widgetCache.get(releaseCacheKey) + } + + // Keep the environment information of widget + const inWidgetPreEnv = res.headers['x-widget-env'] === 'dev' ? true : false + if (widgetStore.get('inWidgetPreEnv') === undefined) { + widgetStore.set('inWidgetPreEnv', inWidgetPreEnv) + } + + return res.data +} + +// Prevent parallel request +let fetchReleaseProcess = null +function fetchRelease() { + if (!fetchReleaseProcess) { + fetchReleaseProcess = startFetchReleaseProcess() + } + return fetchReleaseProcess +} + +let releaseCache = null +async function getRelease() { + if (!releaseCache) { + releaseCache = await fetchRelease() + } + return releaseCache +} + +export async function getReleaseFor(id) { + const release = await getRelease() + const widgetRelease = release[id] + if (!widgetRelease) { + throw new Error(`[Widget Loader] There is no release for ${id}.`) + } + return widgetRelease +} diff --git a/packages/widget-loader/src/utils/getVersion.js b/packages/widget-loader/src/utils/getVersion.js new file mode 100644 index 000000000..2fcacd3d3 --- /dev/null +++ b/packages/widget-loader/src/utils/getVersion.js @@ -0,0 +1,89 @@ +import { getReleaseFor } from './getRelease' + + +function getSpecificVersionFromMajor(major = {}, uid) { + if (typeof major.latest !== 'string') { + throw new Error( + `[Widget Loader] Unexpected major object: ${JSON.stringify(major)}` + ) + } + const { latest, next = {} } = major + const { gray, version: grayVersion } = next + if ( + typeof next === 'object' && + typeof gray === 'number' && + typeof grayVersion === 'string' && + typeof uid === 'string' + ) { + const u = Number(uid.substring(uid.length - 2)) + const g = Number(gray) + if (!Number.isInteger(u)) + throw new Error(`[Widget Loader] Unexpected uid: ${uid}`) + if (!Number.isInteger(g)) + throw new Error(`[Widget Loader] Unexpected major.next.gray: ${gray}`) + // gray test + return u < g ? grayVersion : latest + } else { + return latest + } +} + +/** + * uid is optional and is used to decide whether to take part in gray test + */ +export async function getVersion(loadOptions, uid) { + if (loadOptions.versionType === 'specific') { + return loadOptions.version + } + const release = await getReleaseFor(loadOptions.id) + const majorVersion = typeof loadOptions.majorVersionNumber !== 'undefined' ? + release[getVersionKey(loadOptions.majorVersionNumber)] : + getLatestMajorFor(release) + + if (!majorVersion) { + throw new Error( + `[Widget Loader] Widget ${loadOptions.id} doesn't have this major version: ${ + loadOptions.majorVersionNumber + } . + Please use an exist version!` + ) + } + return getSpecificVersionFromMajor(majorVersion, uid) +} + + +export async function get404FallbackVersion(loadOptions, uid) { + if (loadOptions.versionType === 'specific') { + // A wrong specific version will be treated as a corresponding fuzzy version + // and then to fallback. + // 1.8.1 -> 1.x + return getVersion({ + ...loadOptions, + versionType: 'fuzzy' + }, uid) + } else if (loadOptions.versionType === 'fuzzy') { + // Return the same version and retry once. + return getVersion(loadOptions, uid) + } else { + throw new Error( + `[Widget Loader] Invalid opts.versionType: ${loadOptions.versionType}` + ) + } +} + +function getVersionKey(versionNumber) { + return `${versionNumber}.x` +} + +function getLatestMajorFor(release) { + const majorKeys = Object.keys(release) + const map = majorKeys.reduce((prev, next) => { + prev[parseInt(next)] = next + return prev + }, {}) + const latestMajorNumber = Math.max( + ...(majorKeys.map(key => parseInt(key))) + ) + return release[map[latestMajorNumber]] +} + diff --git a/packages/widget-loader/src/utils/load.js b/packages/widget-loader/src/utils/load.js new file mode 100644 index 000000000..520a89db5 --- /dev/null +++ b/packages/widget-loader/src/utils/load.js @@ -0,0 +1,181 @@ +import upperFirst from './upperFirst' +import camelCase from './camelCase' +import { DEFAULT_RUNTIME_DEPENDENCIES, PACKAGE_VERSION } from '../cons' +import request from './request' +import parseUrl from './parseUrl' +import loadWidgetConfig from './config' +import generateErrorMessage from './errorGenerator/generateErrorMessage' +import generateEvalError from './errorGenerator/generateEvalError' +import generate404Error from './errorGenerator/generate404Error' +import widgetCache from './widgetCache' + + +const SUB_MODULE_REGEXP = { + wind: /^(@ali\/wind)\/lib\/(.+)$/, + widgetConsoleUtils: /^(@ali\/widget-utils-console)\/lib\/(.+)$/ +} + +function getUMDName(widgetId) { + const [, name] = widgetId.split('/') + const name1 = name.replace(/-(.)/g, (match, target) => { + return target.toUpperCase() + }) + const name2 = name1.replace(/^./, (match) => { + return match.toUpperCase() + }) + return name2 +} + +// Define the widget load function +async function load(url, passedInDependencies = DEFAULT_RUNTIME_DEPENDENCIES) { + // Parse the url to get detail informations + const info = parseUrl(url) + + // We use id & version as the cache key + if (widgetCache.get(`${info.id}:${info.version}`)) { + return widgetCache.get(`${info.id}:${info.version}`) + } + + /** + * Temperary implementaion + * + * TODO: refactor it later + */ + const widgetUMDName = getUMDName(info.id) + if (window[widgetUMDName]) { + const preLoadedModule = window[widgetUMDName]['default'] + widgetCache.set(`${info.id}:${info.version}`, preLoadedModule) + return preLoadedModule + } + + // We need to provide all the dependencies + // that the module dependent + // We will mimic a CommonJS env here + const module = { + exports: {} + } + + const dependencies = { ...passedInDependencies } + + // Every widget should get its own `@alicloud/widget-utils-console` + // We shallow copy it for every widget. + const consoleUtils = dependencies['@alicloud/widget-utils-console'] && + { ...dependencies['@alicloud/widget-utils-console'] } + + // Assign back to `dependencies` + dependencies['@alicloud/widget-utils-console'] = consoleUtils + + // Inject `@alicloud/widget-utils-config` + const configUtils = {} + dependencies['@alicloud/widget-utils-config'] = configUtils + + // The source code need a require function to resolve to + // its dependencies. + function require(moduleName) { + const windMatch = moduleName.match(SUB_MODULE_REGEXP.wind) + if (windMatch !== null) { + const module = windMatch[1] // @alicloud/console-components + const component = windMatch[2] // button or ... + return dependencies[module][upperFirst(camelCase(component))] + } + const widgetConsoleUtilsMatch = moduleName.match( + SUB_MODULE_REGEXP.widgetConsoleUtils + ) + if (widgetConsoleUtilsMatch !== null) { + const module = widgetConsoleUtilsMatch[1] // @alicloud/widget-utils-console + const utilily = widgetConsoleUtilsMatch[2] // getLocale or ... + return dependencies[module][utilily] + } + return dependencies[moduleName] + } + + // Get the widget source code and its config + let sourceCode, widgetConfig + try { + const [ code, config ] = await Promise.all([ + request.get(url), + loadWidgetConfig({ + widgetId: info.id, + locale: consoleUtils.getLocale(), + channelId: consoleUtils.getChannel() + }) + ]) + sourceCode = code.data + widgetConfig = config + } catch (error) { + // If we know the error, then throw it directly. + if (error.code) { + throw error + } + // Otherwise, it should be a network error, and + // we are not able to read any useful info from response + // because this is a cross origin request, + // and our CDN server don't return CORS header when status >= 400 + // so we have to treat any network error as 404, and try to fallback + throw generate404Error(error) + } + + // Inject some utils back to `@alicloud/widget-utils-console` + if (consoleUtils) { + consoleUtils.getWidgetI18nMessages = () => widgetConfig.messages + consoleUtils.getChannelLinkList = () => widgetConfig.links + consoleUtils.getChannelLink = consoleUtils.channelLinkFactory( + consoleUtils.getChannelLinkList + ) + consoleUtils.getChannelFeatureList = () => widgetConfig.features + consoleUtils.getChannelFeature = consoleUtils.channelFeatureFactory( + consoleUtils.getChannelFeatureList + ) + consoleUtils.getWidgetInfo = () => ({ ...info, loader: PACKAGE_VERSION }) + + // Inject the utils to `@alicloud/widget-utils-config + configUtils.getWidgetI18nMessages = () => widgetConfig.messages + configUtils.getChannelLinkList = () => widgetConfig.links + configUtils.getChannelLink = consoleUtils.channelLinkFactory( + configUtils.getChannelLinkList + ) + configUtils.getChannelFeatureList = () => widgetConfig.features + configUtils.getChannelFeature = consoleUtils.channelFeatureFactory( + configUtils.getChannelFeatureList + ) + } + + + // Construct a function to evaluate the loaded script + try { + Function(` + return function(module, exports, require) { + ${sourceCode} + }; + `)()(module, module.exports, require) + } catch (err) { + /* eslint-disable no-console */ + console.error(`[Widget Loader]运行 ${info.id} 出错:`, info) + console.error( + `[Widget Loader]请联系 widget 开发者 👉:http://cws.aliyun-inc.com/widget/widget/${ + info.name + }` + ) + throw generateEvalError(err) + /* eslint-enable no-console */ + } + + // Return the final module + if (!module || !module.exports || !module.exports.default) { + const err = new Error( + generateErrorMessage( + `Widget: ${info.id} was successfully loaded and executed, + but it has an unexpected module export. This happens when the widget was + not rightly bundled.` + ) + ) + throw generateEvalError(err) + } + + // Put the result into cache + widgetCache.set(`${info.id}:${info.version}`, module.exports.default) + + return module.exports.default +} + +export default load diff --git a/packages/widget-loader/src/utils/logger/error.js b/packages/widget-loader/src/utils/logger/error.js new file mode 100644 index 000000000..68093dc7c --- /dev/null +++ b/packages/widget-loader/src/utils/logger/error.js @@ -0,0 +1,18 @@ +import WidgetLogger from '@alicloud/widget-logger' +import { PACKAGE_VERSION } from '../../cons' + + +class WidgetErrorLogger extends WidgetLogger { + constructor(props, opts) { + super({ + loader: PACKAGE_VERSION, + time: Date.now(), + ...props + }, { + storeType: 'error', + ...opts + }) + } +} + +export default WidgetErrorLogger diff --git a/packages/widget-loader/src/utils/logger/loader.js b/packages/widget-loader/src/utils/logger/loader.js new file mode 100644 index 000000000..706604e47 --- /dev/null +++ b/packages/widget-loader/src/utils/logger/loader.js @@ -0,0 +1,62 @@ +import WidgetLogger from '@alicloud/widget-logger' +import { PACKAGE_VERSION } from '../../cons' + + +class WidgetLoaderLogger extends WidgetLogger { + constructor(props, opts) { + super({ + loader: PACKAGE_VERSION, + ...props + }, { + storeType: 'loader', + ...opts + }) + + // This is when starting to load the widget script + this.widget_start_time = '' + // This is when the widget script finish loading + this.widget_end_time = '' + } + + // Keep the actuall loaded version + version(ver) { + this.state.version = ver + } + + location(loc) { + this.state.loc = loc + } + + start() { + this.state.start_time = Date.now() + } + + end() { + this.state.end_time = Date.now() + this.state.duration = this.widget_end_time - this.widget_start_time + this.state.cost = this.state.end_time - this.state.start_time + this.send() + } + + error({ code, message, stack }) { + this.state.e_code = code + this.state.e_msg = message + this.state.e_stack = stack + + this.state.end_time = Date.now() + this.state.cost = this.state.end_time - this.state.start_time + + this.send() + } + + startToLoadWidget() { + this.widget_start_time = Date.now() + } + + endLoadingWidget() { + this.widget_end_time = Date.now() + } +} + + +export default WidgetLoaderLogger diff --git a/packages/widget-loader/src/utils/parseId.js b/packages/widget-loader/src/utils/parseId.js new file mode 100644 index 000000000..eb03b802c --- /dev/null +++ b/packages/widget-loader/src/utils/parseId.js @@ -0,0 +1,15 @@ +const pat = /^([^/]+\/)?([^-]+)-(.+)$/ + +function parseId(widgetId) { + const ret = pat.exec(widgetId) + if (!ret) + throw new Error( + `[Widget Loader] Unexpected widgetId ${widgetId}.` + ) + return { + group: ret[2], + name: ret[3] + } +} + +export default parseId diff --git a/packages/widget-loader/src/utils/parseOption.js b/packages/widget-loader/src/utils/parseOption.js new file mode 100644 index 000000000..b143bfe0f --- /dev/null +++ b/packages/widget-loader/src/utils/parseOption.js @@ -0,0 +1,42 @@ +import { DEFAULT_OPTIONS } from '../cons' +import { fuzzyVersionPattern, specificVersionPattern } from '../cons' + +function parseOption(loadOptions) { + if ( + typeof loadOptions === 'object' && + typeof loadOptions.id === 'string' && + typeof loadOptions.version === 'string' + ) { + const opts = { + ...DEFAULT_OPTIONS, + ...loadOptions + } + + const matchFuzzy = opts.version.match(fuzzyVersionPattern) + if (matchFuzzy !== null) { + opts.versionType = 'fuzzy' + opts.majorVersionNumber = Number(matchFuzzy[1]) + return opts + } + + const matchSpecific = opts.version.match(specificVersionPattern) + if (matchSpecific !== null) { + opts.versionType = 'specific' + opts.majorVersionNumber = Number(matchSpecific[1]) + return opts + } + + throw new Error( + `[Widget Loader] Invalid version is passed to loadWidget(). + Correct usage: loadWidget({ id: 'xxx', version: '1.x' }) or loadWidget({ id: 'xxx', version: '1.2.3' }). + Currently passed version: ${opts.version}` + ) + } + + throw new TypeError( + `[Widget Loader] loadWidget option should be an object with shape: {id: string, version: string}. + But get ${JSON.stringify(loadOptions)}` + ) +} + +export default parseOption diff --git a/packages/widget-loader/src/utils/parseUrl.js b/packages/widget-loader/src/utils/parseUrl.js new file mode 100644 index 000000000..835b75282 --- /dev/null +++ b/packages/widget-loader/src/utils/parseUrl.js @@ -0,0 +1,22 @@ +const pat = /^(https?):\/{2}([^/]+)\/([^/]+)\/([^/]+)\/([^/]+)\/(.+)$/ + +function parseUrl(url = '') { + const result = pat.exec(url) + if (!result) { + throw new Error( + `[Widget Loader] Unexpected load url ${url}.` + ) + } + + return { + protocal: result[1], + host: result[2], + group: result[3], + name: result[4], + version: result[5], + filename: result[6], + id: `@ali/${result[3]}-${result[4]}` + } +} + +export default parseUrl diff --git a/packages/widget-loader/src/utils/request.js b/packages/widget-loader/src/utils/request.js new file mode 100644 index 000000000..da33c50dd --- /dev/null +++ b/packages/widget-loader/src/utils/request.js @@ -0,0 +1,5 @@ +import axios from 'axios' + +const axiosInstance = axios.create() + +export default axiosInstance diff --git a/packages/widget-loader/src/utils/runtime/createDynamicWindStylePrefix.js b/packages/widget-loader/src/utils/runtime/createDynamicWindStylePrefix.js new file mode 100644 index 000000000..ed47dd46c --- /dev/null +++ b/packages/widget-loader/src/utils/runtime/createDynamicWindStylePrefix.js @@ -0,0 +1,5 @@ +function createDynamicWindStylePrefix(windRuntimeVersion) { + return `v${windRuntimeVersion.split('.').join('-')}-` +} + +export default createDynamicWindStylePrefix diff --git a/packages/widget-loader/src/utils/runtime/createWindRuntimeSourceLoader.js b/packages/widget-loader/src/utils/runtime/createWindRuntimeSourceLoader.js new file mode 100644 index 000000000..4e58135d3 --- /dev/null +++ b/packages/widget-loader/src/utils/runtime/createWindRuntimeSourceLoader.js @@ -0,0 +1,12 @@ +import { DEFAULT_STYLE_PREFIX_FOR_WIND_COMPONENT } from '../../cons' + +function createWindRuntimeSourceLoader(prefix) { + return function windRuntimeSourceLoader(source) { + const pattern = new RegExp(DEFAULT_STYLE_PREFIX_FOR_WIND_COMPONENT, 'g') + return prefix && source + ? source.replace(pattern, prefix) + : source + } +} + +export default createWindRuntimeSourceLoader diff --git a/packages/widget-loader/src/utils/runtime/load.js b/packages/widget-loader/src/utils/runtime/load.js new file mode 100644 index 000000000..aae5b4a68 --- /dev/null +++ b/packages/widget-loader/src/utils/runtime/load.js @@ -0,0 +1,70 @@ +/** + * This method is same as load, but it supports parallel loading + * and sequential execution. + * This method suits for cases: parallel loading react & wind, + * but executes react first and then executes wind based on the results of + * react's execution. + */ +/** + * One loader can only have one runtime dependencies + */ +import generateErrorMessage from '../errorGenerator/generateErrorMessage' +import generate404Error from '../errorGenerator/generate404Error' +import generateEvalError from '../errorGenerator/generateEvalError' +import request from '../request' + + +async function load(urls, sourceLoader) { + if (!Array.isArray(urls)) { + throw new TypeError(generateErrorMessage('Expect urls to be an array.')) + } + + const modules = urls.map(() => ({ exports: {} })) + const dependenciesList = urls.map(() => ({})) + + let sourceCodes + try { + sourceCodes = await Promise.all(urls.map(url => request.get(url))) + } catch (err) { + throw generate404Error(err) + } + + sourceCodes.forEach((sourceCode, i) => { + const isLastModule = i === sourceCodes.length - 1 + + const module = modules[i] + const dependencies = dependenciesList[i] + const require = (moduleName) => dependencies[moduleName] + + const code = isLastModule && sourceLoader ? + sourceLoader(sourceCode.data) : + sourceCode.data + + try { + Function('module', 'exports', 'require', `${code}`)( + module, module.exports, require + ) + // Push the before loaded modules as the dependencies of the last module + if (!isLastModule) { + dependenciesList[sourceCodes.length - 1] = { + ...dependenciesList[sourceCodes.length - 1], + ...module.exports.default + } + } + } catch (err) { + throw generateEvalError(err) + } + }) + + return modules + .map(module => module.exports.default) + .reduce((runtime, nextModule) => { + return { + ...runtime, + ...nextModule + } + }, {}) +} + + +export default load diff --git a/packages/widget-loader/src/utils/runtime/loadRuntime.js b/packages/widget-loader/src/utils/runtime/loadRuntime.js new file mode 100644 index 000000000..bfef16f35 --- /dev/null +++ b/packages/widget-loader/src/utils/runtime/loadRuntime.js @@ -0,0 +1,96 @@ +import load from './load' +import loadWindMessage from './loadWindMessage' +import { getVersion } from '../getVersion' +import getHost from '../getHost' +import widgetCache from '../widgetCache' +import createWindRuntimeSourceLoader from './createWindRuntimeSourceLoader' +import createDynamicWindStylePrefix from './createDynamicWindStylePrefix' +import { DEFAULT_STYLE_PREFIX_FOR_WIND_COMPONENT } from '../../cons' + +async function loadRuntime({ + locale, + reactRuntimeVersion: passedInReactRuntimeVersion, + windRuntimeVersion: passedInWindRuntimeVersion, + windMessageVersion: passedInWindMessageVersion +}) { + const reactRuntimeId = '@ali/widget-react-runtime' + const windRuntimeId = '@ali/widget-wind-runtime' + const windMessageId = '@alicloud/console-components-messages' + + let reactRuntimeVersion = passedInReactRuntimeVersion + let windRuntimeVersion = passedInWindRuntimeVersion + let windMessageVersion = passedInWindMessageVersion + + + if (!reactRuntimeVersion) { + // Get the base version of react-runtime from release.json + const baseReactRuntimeVersion = await getVersion({ id: reactRuntimeId }) + reactRuntimeVersion = baseReactRuntimeVersion + } + + // Get the base version of wind-runtime from release.json + const baseWindRuntimeVersion = await getVersion({ id: windRuntimeId }) + if (!windRuntimeVersion) { + windRuntimeVersion = baseWindRuntimeVersion + } + // User specified `runtimeVersion` will not take effect if the + // `window.__ALIYUN_WIDGET_USE_DIFFERENT_WIND_RUNTIME__` global variable is + // not explicitly set to true. + if (window.__ALIYUN_WIDGET_USE_DIFFERENT_WIND_RUNTIME__ !== true) { + windRuntimeVersion = baseWindRuntimeVersion + } + + if (!windMessageVersion) { + // Get the base version of wind-message from release.json + const baseWindMessageVersion = await getVersion({ id: windMessageId }) + windMessageVersion = baseWindMessageVersion + } + + // Assemble urls + const host = getHost() + const urls = { + reactRuntime: `${host}/widget/react-runtime/${reactRuntimeVersion}/index.js`, + windRuntime: `${host}/widget/wind-runtime/${windRuntimeVersion}/index.js`, + windMessage: `${host}/one-mcms/wind-v2/${windMessageVersion}/wind-v2_${locale.toLowerCase()}.json` + } + + // Init a wind-runtime source loader + const useDifferentWindRuntime = windRuntimeVersion !== baseWindRuntimeVersion + const stylePrefix = useDifferentWindRuntime ? + createDynamicWindStylePrefix(windRuntimeVersion) : + DEFAULT_STYLE_PREFIX_FOR_WIND_COMPONENT + const windRuntimeSourceLoader = useDifferentWindRuntime ? + createWindRuntimeSourceLoader(stylePrefix) : + undefined + + + // Cache runtime dependencies for widgets + const runtimeCacheKey = `runtime_${reactRuntimeVersion}_${windRuntimeVersion}` + if (!widgetCache.get(runtimeCacheKey)) { + widgetCache.set( + runtimeCacheKey, + load( + [urls.reactRuntime, urls.windRuntime], + windRuntimeSourceLoader + ) + ) + } + // Cache wind-message, which are used by wind UI components for i18n. + const windMessageCacheKey = `wind_message_${windMessageVersion}` + if (!widgetCache.get(windMessageCacheKey)) { + widgetCache.set(windMessageCacheKey, loadWindMessage(urls.windMessage)) + } + + const [runtime, message] = await Promise.all([ + widgetCache.get(runtimeCacheKey), + widgetCache.get(windMessageCacheKey) + ]) + + return { + runtime, + message, + stylePrefix + } +} + +export default loadRuntime diff --git a/packages/widget-loader/src/utils/runtime/loadWindMessage.js b/packages/widget-loader/src/utils/runtime/loadWindMessage.js new file mode 100644 index 000000000..4aa646502 --- /dev/null +++ b/packages/widget-loader/src/utils/runtime/loadWindMessage.js @@ -0,0 +1,14 @@ +import request from '../request' + +async function loadWindMessage(url) { + try { + const { data } = await request.get(url) + return data + } catch (err) { + // eslint-disable-next-line no-console + console.error(err) + return {} + } +} + +export default loadWindMessage diff --git a/packages/widget-loader/src/utils/runtime/needDynamiclyLoadRuntime.js b/packages/widget-loader/src/utils/runtime/needDynamiclyLoadRuntime.js new file mode 100644 index 000000000..b16b6eb5d --- /dev/null +++ b/packages/widget-loader/src/utils/runtime/needDynamiclyLoadRuntime.js @@ -0,0 +1,17 @@ +function needDynamiclyLoadRuntime(currentDependencies) { + if ( + currentDependencies['react'] && + currentDependencies['react-dom'] && + currentDependencies['prop-types'] && + currentDependencies['@alicloud/console-components'] && + currentDependencies['@alicloud/console-components-intl/lib/Provider'] && + currentDependencies['@alicloud/console-components-intl/lib/withRcIntl'] + ) { + return false + } + + // Need to load + return true +} + +export default needDynamiclyLoadRuntime diff --git a/packages/widget-loader/src/utils/upperFirst.js b/packages/widget-loader/src/utils/upperFirst.js new file mode 100644 index 000000000..bd7adce3f --- /dev/null +++ b/packages/widget-loader/src/utils/upperFirst.js @@ -0,0 +1,9 @@ +const pat = /^[a-z]/ + +function upperFirst(target = '') { + return target.replace(pat, (match) => { + return match.toUpperCase() + }) +} + +export default upperFirst diff --git a/packages/widget-loader/src/utils/widgetCache.js b/packages/widget-loader/src/utils/widgetCache.js new file mode 100644 index 000000000..2ea25a341 --- /dev/null +++ b/packages/widget-loader/src/utils/widgetCache.js @@ -0,0 +1,4 @@ +import createGlobalVariable from './common/createGlobalVariable' +import { WIDGET_CACHE } from '../cons' + +export default createGlobalVariable(WIDGET_CACHE) diff --git a/packages/widget-loader/src/utils/widgetStore.js b/packages/widget-loader/src/utils/widgetStore.js new file mode 100644 index 000000000..e79ac24f7 --- /dev/null +++ b/packages/widget-loader/src/utils/widgetStore.js @@ -0,0 +1,4 @@ +import createGlobalVariable from './common/createGlobalVariable' +import { WIDGET_STORE } from '../cons' + +export default createGlobalVariable(WIDGET_STORE) diff --git a/packages/widget-loader/test/index.test.js b/packages/widget-loader/test/index.test.js new file mode 100644 index 000000000..334c576e5 --- /dev/null +++ b/packages/widget-loader/test/index.test.js @@ -0,0 +1 @@ +test('A empty test', () => {}) \ No newline at end of file diff --git a/packages/widget-loader/webpack.config.js b/packages/widget-loader/webpack.config.js new file mode 100644 index 000000000..0d6c19355 --- /dev/null +++ b/packages/widget-loader/webpack.config.js @@ -0,0 +1,47 @@ +const path = require('path') + +module.exports = { + mode: 'production', + entry: path.join(__dirname, './src/index.js'), + output: { + filename: 'index.js', + path: path.join(__dirname, './dist'), + library: 'WidgetLoader', + libraryTarget: 'umd' + }, + module: { + rules: [ + { + test: /\.m?jsx?$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader' + } + } + ] + }, + externals: { + /** + * `react` related packages are excluded by default, widget must runs in + * a environment that have `react` contained. + */ + react: { + root: 'React', + commonjs2: 'react', + commonjs: 'react', + amd: 'react', + }, + 'react-dom': { + root: 'ReactDOM', + commonjs2: 'react-dom', + commonjs: 'react-dom', + amd: 'react-dom', + }, + 'prop-types': { + root: 'PropTypes', + commonjs2: 'prop-types', + commonjs: 'prop-types', + amd: 'prop-types', + } + } +} \ No newline at end of file diff --git a/packages/widget-logger/.browserslistrc b/packages/widget-logger/.browserslistrc new file mode 100644 index 000000000..a62926302 --- /dev/null +++ b/packages/widget-logger/.browserslistrc @@ -0,0 +1,2 @@ +>0.2% +not dead diff --git a/packages/widget-logger/.npmignore b/packages/widget-logger/.npmignore new file mode 100644 index 000000000..e25fa8114 --- /dev/null +++ b/packages/widget-logger/.npmignore @@ -0,0 +1,7 @@ +.* +!.*ignore +node_modules/ +src/ +test/ +babel.config.js +*lock.json diff --git a/packages/widget-logger/CHANGELOG.md b/packages/widget-logger/CHANGELOG.md new file mode 100644 index 000000000..9ae953797 --- /dev/null +++ b/packages/widget-logger/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + diff --git a/packages/widget-logger/README.md b/packages/widget-logger/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/widget-logger/package.json b/packages/widget-logger/package.json new file mode 100644 index 000000000..43f5660f5 --- /dev/null +++ b/packages/widget-logger/package.json @@ -0,0 +1,35 @@ +{ + "name": "@alicloud/widget-logger", + "version": "0.1.0", + "description": "A log library for widget.", + "main": "lib/index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "compile": "babel src --out-dir lib --root-mode upward", + "prepare": "npm run compile" + }, + "keywords": [ + "widget", + "logger" + ], + "author": "woota", + "license": "MIT", + "devDependencies": { + "@alicloud/widget-utils-console": "^0.1.0", + "@babel/cli": "^7.4.4", + "@babel/core": "^7.4.5", + "@babel/plugin-transform-runtime": "^7.4.4", + "@babel/preset-env": "^7.4.5", + "axios": "^0.18.0" + }, + "dependencies": { + "@babel/runtime": "^7.4.5" + }, + "peerDependencies": { + "@alicloud/widget-utils-console": "^0.1.0", + "axios": "^0.18.0" + } +} diff --git a/packages/widget-logger/src/index.js b/packages/widget-logger/src/index.js new file mode 100644 index 000000000..6310f81b4 --- /dev/null +++ b/packages/widget-logger/src/index.js @@ -0,0 +1,58 @@ +import axios from 'axios' +import { + getParentUid, + getCurrentUid, + isWidgetPreEnv +} from '@alicloud/widget-utils-console' +import isDevEnv from './utils/isDevEnv' +import getOrigin from './utils/getOrigin' + +// Reexport `getOrigin` +export { getOrigin } + + +const request = axios.create() + +class WidgetLogger { + constructor(props, { debug = false, storeType, logApiVersion = '0.6.0' }) { + this.debug = debug + this.storeType = storeType + this.logApiVersion = logApiVersion + + this.state = { + uid: getCurrentUid(), + parent_uid: getParentUid(), + loc: `${getOrigin()}${window.location.pathname}`, + ua: navigator.userAgent, + ...props + } + } + + getURL() { + return `https://widget-log.cn-hangzhou.log.aliyuncs.com/logstores/${this.storeType}-log/track?APIVersion=${this.logApiVersion}` + } + + send(url = this.getURL()) { + // If we are in debug mode, log to console + if (this.debug) { + /* eslint-disable no-console */ + console.group('Widget Track') + console.log({ + ...this.state, + __url__: this.getURL() + }) + console.groupEnd('Widget Track') + /* eslint-enable no-console */ + } + + // If we are in dev env, do not send the log state + if(isDevEnv() || isWidgetPreEnv()) { + return false + } + + // Otherwise, send the log state + request.get(url, { params: this.state }) + } +} + +export default WidgetLogger diff --git a/packages/widget-logger/src/utils/getOrigin.js b/packages/widget-logger/src/utils/getOrigin.js new file mode 100644 index 000000000..8b9011799 --- /dev/null +++ b/packages/widget-logger/src/utils/getOrigin.js @@ -0,0 +1,9 @@ +// A fix for window.location.origin in Internet Explorer +function getOrigin() { + if (window.location.origin) { + return window.location.origin + } + return `${window.location.protocol}//${window.location.hostname}${window.location.port ? ':' + window.location.port : ''}` +} + +export default getOrigin diff --git a/packages/widget-logger/src/utils/isDevEnv.js b/packages/widget-logger/src/utils/isDevEnv.js new file mode 100644 index 000000000..12b62c7e2 --- /dev/null +++ b/packages/widget-logger/src/utils/isDevEnv.js @@ -0,0 +1,8 @@ +function isDevEnv() { + return ( + window.location.host.indexOf('localhost') >= 0 || + window.location.host.indexOf('127.0.0.1') >= 0 + ) +} + +export default isDevEnv diff --git a/packages/widget-logger/test/index.test.js b/packages/widget-logger/test/index.test.js new file mode 100644 index 000000000..e69de29bb diff --git a/packages/widget-request/CHANGELOG.md b/packages/widget-request/CHANGELOG.md new file mode 100644 index 000000000..d6637e049 --- /dev/null +++ b/packages/widget-request/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/packages/widget-request/README.md b/packages/widget-request/README.md new file mode 100644 index 000000000..f2a30c6ae --- /dev/null +++ b/packages/widget-request/README.md @@ -0,0 +1,22 @@ +# @alicloud/widget-reqeust +一个 **Widget** 的请求工具,内部使用 `axios`,建议配合 widget 相关的 interceptor 一起使用。 + + +## 使用 +使用 npm 进行安装 +``` +npm install --save @alicloud/widget-request +``` + + + +## 可用的 interceptor 列表 + + +- @alicloud/console-mock-interceptor +- @alicloud/search-params-interceptor +- @alicloud/console-request-interceptor +- @alicloud/console-risk-interceptor +- @alicloud/console-response-interceptor + + diff --git a/packages/widget-request/package.json b/packages/widget-request/package.json new file mode 100644 index 000000000..bb683ae30 --- /dev/null +++ b/packages/widget-request/package.json @@ -0,0 +1,19 @@ +{ + "name": "@alicloud/widget-request", + "version": "0.1.0", + "description": "A convenient request tool for widgets.", + "main": "src/index.js", + "scripts": { + "test": "jest" + }, + "keywords": [ + "widget", + "request", + "fetch" + ], + "author": "woota", + "dependencies": { + "axios": "0.18.0" + }, + "gitHead": "849e4a23b7103c6cd68dd5ea62b71445b3ddfbdb" +} diff --git a/packages/widget-request/src/index.js b/packages/widget-request/src/index.js new file mode 100644 index 000000000..40f04de24 --- /dev/null +++ b/packages/widget-request/src/index.js @@ -0,0 +1,12 @@ +import axios from 'axios' + +// Let's create an axios instance +const instance = axios.create() + +// Re-export axios +export { + axios +} + +// Exports the instance +export default instance diff --git a/packages/widget-request/test/index.test.js b/packages/widget-request/test/index.test.js new file mode 100644 index 000000000..a42afa5a2 --- /dev/null +++ b/packages/widget-request/test/index.test.js @@ -0,0 +1,14 @@ +import request, { axios } from '../src' + + +test('Should have axios exported', () => { + expect(axios).toBeDefined +}) + +test('Axios should have the right interface', () => { + expect(axios.create).toBeInstanceOf(Function) +}) + +test('Should have the instance exported', () => { + expect(request).toBeDefined +}) diff --git a/packages/widget-scripts/CHANGELOG.md b/packages/widget-scripts/CHANGELOG.md new file mode 100644 index 000000000..a0cf709bc --- /dev/null +++ b/packages/widget-scripts/CHANGELOG.md @@ -0,0 +1 @@ +# CHANGELOG diff --git a/packages/widget-scripts/bin/widget-scripts b/packages/widget-scripts/bin/widget-scripts new file mode 100755 index 000000000..bd6765bf5 --- /dev/null +++ b/packages/widget-scripts/bin/widget-scripts @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require('../src/index')() \ No newline at end of file diff --git a/packages/widget-scripts/package.json b/packages/widget-scripts/package.json new file mode 100644 index 000000000..bbfd98f31 --- /dev/null +++ b/packages/widget-scripts/package.json @@ -0,0 +1,55 @@ +{ + "name": "@alicloud/widget-scripts", + "version": "0.1.0", + "description": "Configuration and scripts for Widget.", + "main": "index.js", + "scripts": { + "test": "jest" + }, + "keywords": [ + "widget", + "scripts", + "builder" + ], + "bin": { + "widget-scripts": "bin/widget-scripts" + }, + "author": "woota", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.3.4", + "@babel/plugin-proposal-class-properties": "^7.3.4", + "@babel/plugin-transform-runtime": "^7.3.4", + "@babel/preset-env": "^7.3.4", + "@babel/preset-react": "^7.0.0", + "autoprefixer": "^9.5.0", + "awesome-typescript-loader": "^5.2.1", + "babel-loader": "^8.0.5", + "babel-plugin-lodash": "^3.3.4", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "css-loader": "^2.1.1", + "file-loader": "^3.0.1", + "fs-extra": "^7.0.1", + "html-webpack-plugin": "^3.2.0", + "less": "^3.9.0", + "less-loader": "^5.0.0", + "lodash.kebabcase": "^4.1.1", + "minimist": "^1.2.0", + "opn": "^5.4.0", + "postcss-loader": "^3.0.0", + "react-hot-loader": "^4.8.0", + "source-map-loader": "^0.2.4", + "style-loader": "^0.23.1", + "typescript": "^3.4.3", + "webpack": "^4.29.6", + "webpack-bundle-analyzer": "^3.1.0", + "webpack-cli": "^3.3.0", + "webpack-dev-server": "^3.2.1", + "webpack-merge": "^4.2.1" + }, + "devDependencies": { + "react": "^16.8.4", + "react-dom": "^16.8.4" + } +} diff --git a/packages/widget-scripts/src/assets/tpl.html b/packages/widget-scripts/src/assets/tpl.html new file mode 100644 index 000000000..54a467acf --- /dev/null +++ b/packages/widget-scripts/src/assets/tpl.html @@ -0,0 +1,45 @@ + + + + + + + + + + + Widget - 跨云产品控制台调用解决方案 + + + + +
+ + + diff --git a/packages/widget-scripts/src/cmds/build.js b/packages/widget-scripts/src/cmds/build.js new file mode 100644 index 000000000..b6f2a92a2 --- /dev/null +++ b/packages/widget-scripts/src/cmds/build.js @@ -0,0 +1,13 @@ +const path = require('path') +const execSync = require('child_process').execSync + +const configPath = path.join(__dirname, '../config/webpack.prod.js') + +module.exports = () => { + execSync( + `webpack --config ${configPath} --progress --bail --display-error-details`, + { + stdio: 'inherit' + } + ) +} diff --git a/packages/widget-scripts/src/cmds/start.js b/packages/widget-scripts/src/cmds/start.js new file mode 100644 index 000000000..96ddd56d2 --- /dev/null +++ b/packages/widget-scripts/src/cmds/start.js @@ -0,0 +1,52 @@ +const path = require('path') +const webpack = require('webpack') +const merge = require('webpack-merge') +const webpackDevServer = require('webpack-dev-server') +const chalk = require('chalk') +const openBrowser = require('../utils/openBrowser') +const defaultConfig = require('../config/webpack.dev') +const { cwd, merge_webpack_config } = require('../cons') + +module.exports = (args) => { + const mergedConfig = merge_webpack_config( + defaultConfig, + { + mode: defaultConfig.mode + }, + merge + ) + + // Cmd argument first + const port = args.port || mergedConfig.devServer.port + const host = args.host || mergedConfig.devServer.host + + const config = merge( + { + // Typescript will not hot reload + entry: [ + `webpack-dev-server/client?http://0.0.0.0:${port}`, + 'webpack/hot/only-dev-server', + path.join(cwd, './demo') + ] + }, + mergedConfig, + { + // Cmd argument first + devServer: { + port, + host + } + } + ) + + const compiler = webpack(config) + const server = new webpackDevServer(compiler, config.devServer) + + server.listen(port, host, () => { + console.log( + chalk.cyan(`Starting the development server...\n`) + ) + // Open browser after server had been started + openBrowser(`http://${host}:${port}`) + }) +} diff --git a/packages/widget-scripts/src/config/babelPlugins.js b/packages/widget-scripts/src/config/babelPlugins.js new file mode 100644 index 000000000..812e41982 --- /dev/null +++ b/packages/widget-scripts/src/config/babelPlugins.js @@ -0,0 +1,14 @@ +/** + * 构建器默认使用的 babel plugins 配置 + */ + +module.exports = [ + [ require.resolve('@babel/plugin-transform-runtime') ], + [ require.resolve('@babel/plugin-proposal-class-properties') ], + [ + require.resolve('babel-plugin-lodash'), + { + id: ['lodash', 'recompose'] + } + ] +] diff --git a/packages/widget-scripts/src/config/babelPresets.js b/packages/widget-scripts/src/config/babelPresets.js new file mode 100644 index 000000000..2b82790c4 --- /dev/null +++ b/packages/widget-scripts/src/config/babelPresets.js @@ -0,0 +1,15 @@ +/** + * 构建器默认使用的 babel presets 配置 + */ + +module.exports = [ + [ + require.resolve('@babel/preset-env'), + { + targets: '>0.2% in CN, not dead' + } + ], + [ + require.resolve('@babel/preset-react') + ] +] diff --git a/packages/widget-scripts/src/config/postcss.config.js b/packages/widget-scripts/src/config/postcss.config.js new file mode 100644 index 000000000..88752c6cb --- /dev/null +++ b/packages/widget-scripts/src/config/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: [ + require('autoprefixer') + ] +} diff --git a/packages/widget-scripts/src/config/webpack.common.js b/packages/widget-scripts/src/config/webpack.common.js new file mode 100644 index 000000000..e4674befb --- /dev/null +++ b/packages/widget-scripts/src/config/webpack.common.js @@ -0,0 +1,83 @@ +const webpack = require('webpack') +const kebabCase = require('lodash.kebabcase') +const getAbc = require('../utils/getAbc') + + +// Prefix for generated local class names +const classNamePrefix = getAbc().library || 'WIDGET' + +module.exports = { + resolve: { + // Add ".ts" and ".tsx" to support typescript + extensions: [".ts", ".tsx", ".js", ".jsx", ".json"] + }, + module: { + rules: [ + + { + test: /\.(css|less)$/, + include: /node_modules/, + use: [ + { loader: 'style-loader' }, + { loader: 'css-loader' }, + { loader: 'less-loader' }, + ], + }, + { + test: /\.(css|less)$/, + exclude: /node_modules/, + use: [ + { + loader: 'style-loader', + options: { + singleton: true, // Just generate one style tag for one widget. + attrs: { + // Add a custom attr to the generated style tag to easily + // identify which widget the style tag belonging to. + 'data-widget': kebabCase(classNamePrefix) + } + } + }, + { + loader: 'css-loader', + options: { + modules: true, // Use css-module + importLoaders: 2, // There are 2 loaders before this one + localIdentName: `${classNamePrefix}-[local]-[hash:base64:5]` + } + }, + { + loader: 'postcss-loader', + options: { + config: { + path: require.resolve('./postcss.config.js') + } + } + }, + { + loader: 'less-loader' + } + ] + }, + { + test: /\.(png|svg|jpg|gif)$/, + exclude: /node_modules/, + use: [ + 'file-loader', + ], + }, + { + test: /\.(woff|woff2|eot|ttf|otf)$/, + exclude: /node_modules/, + use: [ + 'file-loader', + ], + }, + ], + }, + plugins: [ + new webpack.DefinePlugin({ + "process.env.STYLE_PREFIX": JSON.stringify("aliyun-widget-") + }) + ] +} \ No newline at end of file diff --git a/packages/widget-scripts/src/config/webpack.dev.js b/packages/widget-scripts/src/config/webpack.dev.js new file mode 100644 index 000000000..0d07401f0 --- /dev/null +++ b/packages/widget-scripts/src/config/webpack.dev.js @@ -0,0 +1,86 @@ +const path = require('path') +const webpack = require('webpack') +const merge = require('webpack-merge') +const HtmlWebpackPlugin = require('html-webpack-plugin') +const common = require('./webpack.common') +const getAbc = require('../utils/getAbc') +const { cwd, aliyun_console_config, i18n_messages } = require('../cons') +const isTypescript = require('../utils/isTypescript') +const babelPresets = require('./babelPresets') +const babelPlugins = require('./babelPlugins') + + +module.exports = merge(common, { + mode: 'development', + devtool: 'inline-source-map', + devServer: { + // Default port + port: 3000, + // Default host + host: '127.0.0.1', + // Enable HMR + hot: true, + // Only subdomains of console can be allowed to access the dev server + allowedHosts: ['.console.aliyun.com'], + // Turn off logging + clientLogLevel: 'none', + // Serve content from "demo" directory + contentBase: path.join(cwd, 'demo'), + // Supress bundle information + noInfo: true, + // Show a full-screen overlay in the browser when there are compiler errors + overlay: true, + }, + module: { + // Added for react-hot-loader to work with React 16.6+ + // Typescript will not hot reload + rules: [ + { + test: /\.m?jsx?$/, + include: /node_modules/, + use: ['react-hot-loader/webpack'] + }, + isTypescript() + ? { // tsc + test: /\.tsx?$/, + exclude: /node_modules/, + use: { + loader: 'awesome-typescript-loader' + } + } + : { // babel + test: /\.m?jsx?$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: babelPresets, + plugins: [ + ...babelPlugins, + [ + require.resolve('react-hot-loader/babel') + ] + ] + } + }, + } + ] + }, + plugins: [ + new HtmlWebpackPlugin({ + template: path.resolve(__dirname, '../assets/tpl.html'), + templateParameters: { + aliyun_console_config: JSON.stringify(aliyun_console_config), + i18n_messages: JSON.stringify(i18n_messages) + } + }), + new webpack.HotModuleReplacementPlugin(), + ], + resolve: { + alias: { + // The "@ali" prefix here is for widget name + // Not a package name + [`@ali/widget-${getAbc().project}`]: path.join(cwd, './src'), + }, + }, +}) \ No newline at end of file diff --git a/packages/widget-scripts/src/config/webpack.prod.js b/packages/widget-scripts/src/config/webpack.prod.js new file mode 100644 index 000000000..4945e293d --- /dev/null +++ b/packages/widget-scripts/src/config/webpack.prod.js @@ -0,0 +1,98 @@ +const path = require('path') +const webpack = require('webpack') +const merge = require('webpack-merge') +const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer') +const common = require('./webpack.common') +const { cwd, build_dir, merge_webpack_config, build_env } = require('../cons') +const webpackExternals = require('./webpackExternals') +const getAbc = require('../utils/getAbc') +const isTypescript = require('../utils/isTypescript') +const babelPresets = require('./babelPresets') +const babelPlugins = require('./babelPlugins') +const getVersion = require('../utils/getVersion') +const getId = require('../utils/getId') + +// Get build options from abc.json +const { + assets: { + builder: { + options: buildOptions = {} + } = {} + } = {}, + library +} = getAbc() + + +module.exports = () => { + const plugins = [ + new webpack.DefinePlugin({ + 'window.__IN_WIDGET_DEV_ENV__': false, + 'process.env.WIDGET_ID': JSON.stringify(getId()), + 'process.env.WIDGET_VER': JSON.stringify(getVersion()) + }) + ] + // Add Bundle Analyzer to analyse the bundle + if (buildOptions.analyse && build_env !== 'cloud') { + plugins.push(new BundleAnalyzerPlugin()) + } + + const defaultConfig = merge(common, { + mode: 'production', + entry: { + index: path.join(cwd, './src'), + }, + output: { + filename: '[name].js', + path: build_dir, + library, + libraryTarget: 'umd', + }, + module: { + rules: [ + isTypescript() + ? { // tsc + test: /\.tsx?$/, + exclude: /node_modules/, + use: { + loader: 'awesome-typescript-loader' + } + } + : { // babel + test: /\.m?jsx?$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: babelPresets, + plugins: babelPlugins + } + }, + } + ] + }, + plugins, + optimization: { + minimize: true + }, + // devtool: 'source-map', + // https://github.com/webpack-contrib/babel-minify-webpack-plugin/issues/68 + externals: [ + // Object + webpackExternals, + // Regexp to exclude all the cherry-picked wind sub-modules + /^@ali\/wind\/lib\/.+$/, + // Regexp to exclude all the cherry-picked widget console utils + /^@ali\/widget-utils-console\/lib\/.+$/ + ], + }) + + const mergedConfig = merge_webpack_config( + defaultConfig, + { + mode: defaultConfig.mode + }, + merge + ) + + return mergedConfig +} \ No newline at end of file diff --git a/packages/widget-scripts/src/config/webpackExternals.js b/packages/widget-scripts/src/config/webpackExternals.js new file mode 100644 index 000000000..88a115211 --- /dev/null +++ b/packages/widget-scripts/src/config/webpackExternals.js @@ -0,0 +1,94 @@ +/** + * 构建器默认使用的 webpack external 配置 + */ +const getAbc = require('../utils/getAbc') +// Get build options from abc.json +const { + library +} = getAbc() + +module.exports = { + /** + * `react` related packages are excluded by default, widget must runs in + * a environment that have `react` contained. + */ + react: { + root: ['WidgetReactRuntime16', 'default', 'react'], + commonjs2: 'react', + commonjs: 'react', + amd: 'react', + }, + 'react-dom': { + root: ['WidgetReactRuntime16', 'default', 'react-dom'], + commonjs2: 'react-dom', + commonjs: 'react-dom', + amd: 'react-dom', + }, + 'prop-types': { + root: ['WidgetReactRuntime16', 'default', 'prop-types'], + commonjs2: 'prop-types', + commonjs: 'prop-types', + amd: 'prop-types', + }, + /** + * `wind` related packages are excluded by default also, + * if the runtime do not have those contained, `widgetLoader` will load them + * dynamicly. + */ + '@alicloud/console-components': { + root: ['WidgetWindRuntime', 'default', '@alicloud/console-components'], + commonjs2: '@alicloud/console-components', + commonjs: '@alicloud/console-components', + amd: '@alicloud/console-components', + }, + '@alicloud/console-components-intl/lib/Provider': { + root: ['WidgetWindRuntime', 'default', '@alicloud/console-components-intl/lib/Provider'], + commonjs2: '@alicloud/console-components-intl/lib/Provider', + commonjs: '@alicloud/console-components-intl/lib/Provider', + amd: '@alicloud/console-components-intl/lib/Provider', + }, + '@alicloud/console-components-intl/lib/withRcIntl': { + root: ['WidgetWindRuntime', 'default', '@alicloud/console-components-intl/lib/withRcIntl'], + commonjs2: '@alicloud/console-components-intl/lib/withRcIntl', + commonjs: '@alicloud/console-components-intl/lib/withRcIntl', + amd: '@alicloud/console-components-intl/lib/withRcIntl', + }, + /** + * Widget console utils should be provided dynamicly according to different + * console portal type. + */ + '@alicloud/widget-utils-console': { + root: 'WidgetConsoleUtils', + commonjs2: '@alicloud/widget-utils-console', + commonjs: '@alicloud/widget-utils-console', + amd: '@alicloud/widget-utils-console', + }, + '@alicloud/widget-utils-config': { + root: `${library}Config`, + commonjs2: '@alicloud/widget-utils-config', + commonjs: '@alicloud/widget-utils-config', + amd: '@alicloud/widget-utils-config', + }, + /** + * `axios` is used by all widgets, so it should help the performance + * if we exclude it from the final bundle. + * In runtime, it will be provided by `widgetLoader` to support widget to + * run correctly. + */ + axios: { + root: 'axios', + commonjs2: 'axios', + commonjs: 'axios', + amd: 'axios', + }, + /** + * Widget itself should not have its own loader, if it need the loader to + * load another widget, it should use the loader that comes above. + */ + '@alicloud/widget-loader': { + root: 'AliyunWidgetLoader', + commonjs2: '@alicloud/widget-loader', + commonjs: '@alicloud/widget-loader', + amd: '@alicloud/widget-loader' + } +} diff --git a/packages/widget-scripts/src/cons.js b/packages/widget-scripts/src/cons.js new file mode 100644 index 000000000..0220c1fed --- /dev/null +++ b/packages/widget-scripts/src/cons.js @@ -0,0 +1,99 @@ +const path = require('path') + + +/** + * Current working directory + */ +exports.cwd = process.cwd() + +/** + * DEF build directory name + */ +exports.build_dir_name = process.env.BUILD_DEST || 'build' + +/** + * DEF build destination directory, full path + */ +exports.build_dir = path.join( + exports.cwd, exports.build_dir_name +) + +/** + * DEF builder directory + */ +exports.builder_dir = process.env.BUILD_BUILDER_DIR + +/** + * DEF build environment + */ +exports.build_env = process.env.BUILD_ENV + +/** + * DEF config filename + */ +exports.def_config_file = 'abc.json' + +/** + * DEF log level + * info (default) + * verbose + */ +exports.def_log_level = process.env.DEF_LOG_LEVEL + +/** + * DEF build arguments + */ +exports.build_argv = (function() { + try { + return JSON.parse(process.env.BUILD_ARGV) + } catch (err) { + if (exports.def_log_level === 'verbose') { + console.log(err) + } + return [] + } +})() + +/** + * DEF build debug mode + */ +exports.debug_mode = process.env.BUILD_DEBUG + + +/** + * Console configuration in dev mode + */ +exports.aliyun_console_config = (function() { + try { + return require(path.join(exports.cwd, './demo/consoleConfig.js')) + } catch (err) { + console.error(err) + return {} + } +})() + + +/** + * I18n messages in dev mode + */ +exports.i18n_messages = (function() { + try { + return require(path.join(exports.cwd, './demo/i18nMessages.js')) + } catch (err) { + console.error(err) + return {} + } +})() + + +/** + * User customized webpack.config.js + */ +exports.merge_webpack_config = (function() { + try { + return require(path.join(exports.cwd, './webpack.config.js')) + } catch (err) { + return config => config + } +})() + diff --git a/packages/widget-scripts/src/index.js b/packages/widget-scripts/src/index.js new file mode 100644 index 000000000..edbbc789e --- /dev/null +++ b/packages/widget-scripts/src/index.js @@ -0,0 +1,26 @@ +const minimist = require('minimist') + +module.exports = () => { + const args = minimist( + process.argv.slice(2), + { + alias: { + 'P': 'port', // Capital "P" for port + 'H': 'host', // Capital "H" for host + } + } + ) + const cmd = args._[0] + + switch (cmd) { + case 'start': + require('./cmds/start')(args) + break + case 'build': + require('./cmds/build')(args) + break + default: + console.error(`"${cmd}" is not a valid command!`) + break + } +} diff --git a/packages/widget-scripts/src/utils/getAbc.js b/packages/widget-scripts/src/utils/getAbc.js new file mode 100644 index 000000000..82e55bde8 --- /dev/null +++ b/packages/widget-scripts/src/utils/getAbc.js @@ -0,0 +1,17 @@ +const fs = require('fs-extra') +const path = require('path') +const cons = require('../cons') + +const targetPath = path.join(cons.cwd, cons.def_config_file) + +function getABC() { + try { + const abcObj = fs.readJsonSync(targetPath) + return abcObj + } catch (err) { + console.error(err) + process.exit(1) + } +} + +module.exports = getABC diff --git a/packages/widget-scripts/src/utils/getId.js b/packages/widget-scripts/src/utils/getId.js new file mode 100644 index 000000000..228286699 --- /dev/null +++ b/packages/widget-scripts/src/utils/getId.js @@ -0,0 +1,18 @@ +const fs = require('fs-extra') +const path = require('path') +const cons = require('../cons') + +const pkgJsonFilename = 'package.json' +const targetPath = path.join(cons.cwd, pkgJsonFilename) + +function getId() { + try { + const pkgJson = fs.readJsonSync(targetPath) + return pkgJson && pkgJson.name + } catch (err) { + console.error(err) + process.exit(1) + } +} + +module.exports = getId diff --git a/packages/widget-scripts/src/utils/getVersion.js b/packages/widget-scripts/src/utils/getVersion.js new file mode 100644 index 000000000..e6a0d043a --- /dev/null +++ b/packages/widget-scripts/src/utils/getVersion.js @@ -0,0 +1,8 @@ +const BUILD_GIT_BRANCH = process.env.BUILD_GIT_BRANCH + +function getVersion() { + return BUILD_GIT_BRANCH && + BUILD_GIT_BRANCH.split('/')[1] +} + +module.exports = getVersion diff --git a/packages/widget-scripts/src/utils/isTypescript.js b/packages/widget-scripts/src/utils/isTypescript.js new file mode 100644 index 000000000..ec92a2f30 --- /dev/null +++ b/packages/widget-scripts/src/utils/isTypescript.js @@ -0,0 +1,9 @@ +const fs = require('fs-extra') +const path = require('path') +const { cwd } = require('../cons') + +function isTypescript() { + return fs.pathExistsSync(path.join(cwd, 'tsconfig.json')) +} + +module.exports = isTypescript diff --git a/packages/widget-scripts/src/utils/openBrowser.js b/packages/widget-scripts/src/utils/openBrowser.js new file mode 100644 index 000000000..7d967525b --- /dev/null +++ b/packages/widget-scripts/src/utils/openBrowser.js @@ -0,0 +1,119 @@ +'use strict' + +var chalk = require('chalk') +var execSync = require('child_process').execSync +var spawn = require('cross-spawn') +var opn = require('opn') + +// https://github.com/sindresorhus/opn#app +var OSX_CHROME = 'google chrome' + +const Actions = Object.freeze({ + NONE: 0, + BROWSER: 1, + SCRIPT: 2, +}) + +function getBrowserEnv() { + // Attempt to honor this environment variable. + // It is specific to the operating system. + // See https://github.com/sindresorhus/opn#app for documentation. + const value = process.env.BROWSER + let action + if (!value) { + // Default. + action = Actions.BROWSER + } else if (value.toLowerCase().endsWith('.js')) { + action = Actions.SCRIPT + } else if (value.toLowerCase() === 'none') { + action = Actions.NONE + } else { + action = Actions.BROWSER + } + return { action, value } +} + +function executeNodeScript(scriptPath, url) { + const extraArgs = process.argv.slice(2) + const child = spawn('node', [scriptPath, ...extraArgs, url], { + stdio: 'inherit', + }) + child.on('close', code => { + if (code !== 0) { + console.log() + console.log( + chalk.red( + 'The script specified as BROWSER environment variable failed.' + ) + ) + console.log(chalk.cyan(scriptPath) + ' exited with code ' + code + '.') + console.log() + return + } + }) + return true +} + +function startBrowserProcess(browser, url) { + // If we're on OS X, the user hasn't specifically + // requested a different browser, we can try opening + // Chrome with AppleScript. This lets us reuse an + // existing tab when possible instead of creating a new one. + const shouldTryOpenChromeWithAppleScript = + process.platform === 'darwin' && + (typeof browser !== 'string' || browser === OSX_CHROME) + + if (shouldTryOpenChromeWithAppleScript) { + try { + // Try our best to reuse existing tab + // on OS X Google Chrome with AppleScript + execSync('ps cax | grep "Google Chrome"') + execSync('osascript openChrome.applescript "' + encodeURI(url) + '"', { + cwd: __dirname, + stdio: 'ignore', + }) + return true + } catch (err) { + // Ignore errors. + } + } + + // Another special case: on OS X, check if BROWSER has been set to "open". + // In this case, instead of passing `open` to `opn` (which won't work), + // just ignore it (thus ensuring the intended behavior, i.e. opening the system browser): + // https://github.com/facebook/create-react-app/pull/1690#issuecomment-283518768 + if (process.platform === 'darwin' && browser === 'open') { + browser = undefined + } + + // Fallback to opn + // (It will always open new tab) + try { + var options = { app: browser } + opn(url, options).catch(() => {}) // Prevent `unhandledRejection` error. + return true + } catch (err) { + return false + } +} + +/** + * Reads the BROWSER environment variable and decides what to do with it. Returns + * true if it opened a browser or ran a node.js script, otherwise false. + */ +function openBrowser(url) { + const { action, value } = getBrowserEnv() + switch (action) { + case Actions.NONE: + // Special case: BROWSER="none" will prevent opening completely. + return false + case Actions.SCRIPT: + return executeNodeScript(value, url) + case Actions.BROWSER: + return startBrowserProcess(value, url) + default: + throw new Error('Not implemented.') + } +} + +module.exports = openBrowser \ No newline at end of file diff --git a/packages/widget-skeleton/.browserslistrc b/packages/widget-skeleton/.browserslistrc new file mode 100644 index 000000000..a62926302 --- /dev/null +++ b/packages/widget-skeleton/.browserslistrc @@ -0,0 +1,2 @@ +>0.2% +not dead diff --git a/packages/widget-skeleton/.eslintrc.js b/packages/widget-skeleton/.eslintrc.js new file mode 100644 index 000000000..dc326864f --- /dev/null +++ b/packages/widget-skeleton/.eslintrc.js @@ -0,0 +1,39 @@ +module.exports = { + "env": { + "browser": true, + "es6": true, + "jest": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended" + ], + "settings": { + "react": { + "version": "16.x" + } + }, + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "indent": [ + "error", + 2 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "never" + ] + } +}; \ No newline at end of file diff --git a/packages/widget-skeleton/.npmignore b/packages/widget-skeleton/.npmignore new file mode 100644 index 000000000..e25fa8114 --- /dev/null +++ b/packages/widget-skeleton/.npmignore @@ -0,0 +1,7 @@ +.* +!.*ignore +node_modules/ +src/ +test/ +babel.config.js +*lock.json diff --git a/packages/widget-skeleton/CHANGELOG.md b/packages/widget-skeleton/CHANGELOG.md new file mode 100644 index 000000000..9ae953797 --- /dev/null +++ b/packages/widget-skeleton/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + diff --git a/packages/widget-skeleton/README.md b/packages/widget-skeleton/README.md new file mode 100644 index 000000000..99d457b88 --- /dev/null +++ b/packages/widget-skeleton/README.md @@ -0,0 +1,140 @@ +# @alicloud/widget-skeleton +一个通用的、可定制化的骨架屏组件。 + +## 安装 +```sh +npm install --save @alicloud/widget-skeleton +``` + +## 用法 +### 基本用法 +```jsx +import Skeleton from '@alicloud/widget-skeleton' + +}> + + + +``` + +### 效果 + + + +### 定制骨架条颜色 +```jsx +import Skeleton from '@alicloud/widget-skeleton' + +}> + + +``` + +### 效果 + + + +### 定制背景色 +```jsx +import Skeleton from '@alicloud/widget-skeleton' + +}> + + +``` + +### 效果 + + + +### 定制骨架屏高度 +```jsx +import Skeleton from '@alicloud/widget-skeleton' + +}> + + +``` + +### 效果 + + + +### 定制骨架条高度与间隔 +```jsx +import Skeleton from '@alicloud/widget-skeleton' + +}> + + +``` + +### 效果 + + + +### 定制绘制模式 +#### 1. 随机(默认) +```jsx +import Skeleton from '@alicloud/widget-skeleton' + +}> + + +``` + +#### 效果 + + +#### 2. 填充 +```jsx +import Skeleton from '@alicloud/widget-skeleton' + +}> + + +``` + +#### 效果 + + + +### 复杂定制(Topbar) +```jsx +import Skeleton from '@alicloud/widget-skeleton' + +}> + + +``` + +#### 效果 + + + +### 复杂定制(Sidebar) +```jsx +import Skeleton from '@alicloud/widget-skeleton' + +}> + + +``` + +#### 效果 + + + +## API +参数|说明|类型|必填|默认值 +---|---|---|---|--- +width|骨架屏的宽度|String|否|100% +height|骨架屏的高度|String|否|240px +color|骨架条颜色|String|否|#e6e6e6 +backgroundColor|骨架屏背景色|String|否|#fff +padding|骨架屏的 padding ,只支持单个值|String|否|24px +barHeight|骨架条的高度|String|否|10px +lineHeight|骨架条的间距|String|否|30px +minBarWidth|骨架条的最小宽度|String|否|200px +maxBarWidth|骨架条的最大宽度|String|否|width - 2 * padding +mode|绘制模式,支持「填充」和「随机」两种方式|String|否|random \ No newline at end of file diff --git a/packages/widget-skeleton/babel.config.js b/packages/widget-skeleton/babel.config.js new file mode 100644 index 000000000..43e99bc5b --- /dev/null +++ b/packages/widget-skeleton/babel.config.js @@ -0,0 +1,18 @@ +module.exports = { + 'presets': [ + ['@babel/preset-env', { + 'modules': false + }], + ['@babel/preset-react'] + ], + 'plugins': [ + [ + '@babel/plugin-transform-runtime', + { + // Since Webpack know how to deal with the ES6 modules, + // we don't transform it. + 'useESModules': true + } + ] + ] +} \ No newline at end of file diff --git a/packages/widget-skeleton/package.json b/packages/widget-skeleton/package.json new file mode 100644 index 000000000..d99dbc91f --- /dev/null +++ b/packages/widget-skeleton/package.json @@ -0,0 +1,44 @@ +{ + "name": "@alicloud/widget-skeleton", + "version": "0.1.0", + "description": "Skeleton loading fallback for widget.", + "main": "lib/index.js", + "directories": { + "test": "test" + }, + "scripts": { + "compile": "babel src -d lib", + "build": "webpack", + "prepublishOnly": "npm run compile" + }, + "keywords": [ + "fallback", + "skeleton" + ], + "author": "woota", + "license": "MIT", + "devDependencies": { + "@babel/cli": "^7.2.3", + "@babel/core": "^7.4.0", + "@babel/plugin-transform-runtime": "^7.4.0", + "@babel/preset-env": "^7.4.2", + "@babel/preset-react": "^7.0.0", + "babel-loader": "^8.0.5", + "css-loader": "^2.1.1", + "prop-types": "^15.7.2", + "react": "^16.8.6", + "react-dom": "^16.8.6", + "style-loader": "^0.23.1", + "webpack": "^4.29.6", + "webpack-cli": "^3.3.0" + }, + "peerDependencies": { + "prop-types": "^15.7.2", + "react": "^16.8.6", + "react-dom": "^16.8.6" + }, + "dependencies": { + "@babel/runtime": "^7.4.2" + }, + "gitHead": "849e4a23b7103c6cd68dd5ea62b71445b3ddfbdb" +} diff --git a/packages/widget-skeleton/src/index.css b/packages/widget-skeleton/src/index.css new file mode 100644 index 000000000..35b24e23c --- /dev/null +++ b/packages/widget-skeleton/src/index.css @@ -0,0 +1,27 @@ +.-aliyun-widget-loading-skeleton { + min-height: 240px; + background-repeat: no-repeat; + background-image: + linear-gradient(#e6e6e6 10px, transparent 0), + linear-gradient(#e6e6e6 10px, transparent 0), + linear-gradient(#e6e6e6 10px, transparent 0), + linear-gradient(#e6e6e6 10px, transparent 0), + linear-gradient(#e6e6e6 10px, transparent 0), + /* layer 0: card bg */ + /* gray rectangle that covers whole element */ + linear-gradient(white 100%, transparent 0); + background-size: + 240px 40px, + 120px 40px, + 520px 40px, + 800px 40px, + 360px 40px, + 100% 100%; + background-position: + 16px 16px, + 16px 56px, + 16px 126px, + 16px 166px, + 16px 206px, + 0 0; +} diff --git a/packages/widget-skeleton/src/index.js b/packages/widget-skeleton/src/index.js new file mode 100644 index 000000000..552b20d18 --- /dev/null +++ b/packages/widget-skeleton/src/index.js @@ -0,0 +1,142 @@ +import React, { useLayoutEffect, useRef, useState } from 'react' +import PropTypes from 'prop-types' + +/** + * 1. 支持自定义背景色 + * 2. 支持自定义条目色 + * 3. 支持自定义条目数量 + * 4. 支持自定义条目高度 + * 5. 条目宽度需要随机计算(支持自定义 min, max) + * 6. 支持自定义条目间距 + * 7. 支持自定义整体高度 + */ + +function toNum(val) { + return parseInt(val) // eslint-disable-line radix +} + +function toPixel(num) { + return `${num}px` +} + +const defaultSkeletonStyle = { + width: '100%', + backgroundColor: '#fff', + minWidth: '50px', + minHeight: '50px', + backgroundRepeat: 'no-repeat', + backgroundImage: + 'linear-gradient(#e6e6e6 10px, transparent 0),linear-gradient(#e6e6e6 10px, transparent 0),linear-gradient(#e6e6e6 10px, transparent 0),linear-gradient(#e6e6e6 10px, transparent 0),linear-gradient(#e6e6e6 10px, transparent 0),linear-gradient(#fff 100%, transparent 0)', + backgroundSize: + '10px 140px,20px 140px,30px 40px,40px 40px,50px 40px,60px 40px,70px 40px,80px 40px,90px 40px,100px 40px,0% 0%', + backgroundPosition: '16px 16px,16px 56px,16px 126px,16px 166px,16px 206px,0 0' +} + +function Skeleton({ + width, + height = '240px', + color = '#e6e6e6', + backgroundColor = '#fff', + padding = '24px', + barHeight = '10px', + lineHeight = '30px', + minBarWidth = '200px', + maxBarWidth, + mode = 'random', // fill or random +}) { + // Keep the dom element + const el = useRef(null) + const [backgroundImage, setBackgroundImage] = useState('') + const [backgroundSize, setBackgroundSize] = useState('') + const [backgroundPosition, setBackgroundPosition] = useState('') + + // Calculate the needed item count + const itemCount = (() => { + const leftSpace = toNum(height) - toNum(padding) * 2 - toNum(barHeight) + const count = Math.ceil(leftSpace / (toNum(barHeight) + toNum(lineHeight))) + return count + })() + + useLayoutEffect(() => { + const { width: totalWidth } = el.current.getBoundingClientRect() + + let tmpBackgroundPosition = '', + tmpBackgroundImage = '', + tmpBackgroundSize = '' + + for (let i = 0; i < itemCount; i++) { + // Calculate the position of every item + const x = toNum(padding) + const y = toNum(padding) + i * (toNum(barHeight) + toNum(lineHeight)) + tmpBackgroundPosition += `${toPixel(x)} ${toPixel(y)},` + + // Calculate the width of every item + const maxWidth = + maxBarWidth !== undefined + ? toNum(maxBarWidth) + : totalWidth - toNum(padding) * 2 + + const width = + mode === 'fill' + ? maxWidth + : Math.max(toNum(minBarWidth), Math.random() * maxWidth) + const height = toNum(barHeight) + toNum(lineHeight) + tmpBackgroundSize += `${toPixel(width)} ${toPixel(height)},` + + // Calculate background image + const image = `linear-gradient(${color} ${barHeight}, transparent 0),` + tmpBackgroundImage += image + + if (i === itemCount - 1) { + tmpBackgroundPosition += '0 0' + tmpBackgroundSize += '0% 0%' + tmpBackgroundImage += 'linear-gradient(#fff 0%, transparent 0)' + } + } + + setBackgroundImage(tmpBackgroundImage) + setBackgroundPosition(tmpBackgroundPosition) + setBackgroundSize(tmpBackgroundSize) + }, [ + itemCount, + barHeight, + color, + lineHeight, + padding, + mode, + minBarWidth, + maxBarWidth + ]) + + const skeletonStyle = { + ...defaultSkeletonStyle, + width, + height, + backgroundColor, + backgroundImage, + backgroundSize, + backgroundPosition + } + return ( +
+ ) +} + +Skeleton.propTypes = { + width: PropTypes.string, + height: PropTypes.string, + color: PropTypes.string, + backgroundColor: PropTypes.string, + padding: PropTypes.string, + barHeight: PropTypes.string, + lineHeight: PropTypes.string, + minBarWidth: PropTypes.string, + maxBarWidth: PropTypes.string, + mode: PropTypes.oneOf(['fill', 'random']) +} + +export default Skeleton diff --git a/packages/widget-skeleton/test/index.test.js b/packages/widget-skeleton/test/index.test.js new file mode 100644 index 000000000..297c4ae33 --- /dev/null +++ b/packages/widget-skeleton/test/index.test.js @@ -0,0 +1 @@ +test('an empty test', () => {}) \ No newline at end of file diff --git a/packages/widget-skeleton/webpack.config.js b/packages/widget-skeleton/webpack.config.js new file mode 100644 index 000000000..17841356e --- /dev/null +++ b/packages/widget-skeleton/webpack.config.js @@ -0,0 +1,74 @@ +const path = require('path') + +module.exports = { + mode: 'production', + entry: path.join(__dirname, './src/index.js'), + output: { + filename: 'index.js', + path: path.join(__dirname, './dist'), + libraryTarget: 'commonjs2' + }, + optimization: { + minimize: true + }, + module: { + rules: [ + { + test: /\.m?jsx?$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: [ + ['@babel/preset-env'], + ['@babel/preset-react'] + ], + plugins: [ + ['@babel/plugin-transform-runtime'] + ] + } + } + }, + { + test: /\.css$/, + exclude: /node_modules/, + use: [ + { + loader: 'style-loader', + options: { + singleton: true, + attrs: { + from: 'aliyun-widget-skeleton' + } + } + }, + { loader: 'css-loader' } + ] + } + ] + }, + externals: { + /** + * `react` related packages are excluded by default, widget must runs in + * a environment that have `react` contained. + */ + react: { + root: 'React', + commonjs2: 'react', + commonjs: 'react', + amd: 'react', + }, + 'react-dom': { + root: 'ReactDOM', + commonjs2: 'react-dom', + commonjs: 'react-dom', + amd: 'react-dom', + }, + 'prop-types': { + root: 'PropTypes', + commonjs2: 'prop-types', + commonjs: 'prop-types', + amd: 'prop-types', + } + } +} \ No newline at end of file diff --git a/packages/widget-utils-config/.browserslistrc b/packages/widget-utils-config/.browserslistrc new file mode 100644 index 000000000..a62926302 --- /dev/null +++ b/packages/widget-utils-config/.browserslistrc @@ -0,0 +1,2 @@ +>0.2% +not dead diff --git a/packages/widget-utils-config/.npmignore b/packages/widget-utils-config/.npmignore new file mode 100644 index 000000000..e25fa8114 --- /dev/null +++ b/packages/widget-utils-config/.npmignore @@ -0,0 +1,7 @@ +.* +!.*ignore +node_modules/ +src/ +test/ +babel.config.js +*lock.json diff --git a/packages/widget-utils-config/CHANGELOG.md b/packages/widget-utils-config/CHANGELOG.md new file mode 100644 index 000000000..9ae953797 --- /dev/null +++ b/packages/widget-utils-config/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + diff --git a/packages/widget-utils-config/README.md b/packages/widget-utils-config/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/widget-utils-config/package.json b/packages/widget-utils-config/package.json new file mode 100644 index 000000000..8b75829ac --- /dev/null +++ b/packages/widget-utils-config/package.json @@ -0,0 +1,26 @@ +{ + "name": "@alicloud/widget-utils-config", + "version": "0.1.0", + "description": "Utility set for widget config.", + "main": "lib/index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "compile": "babel src -d lib --root-mode upward", + "prepare": "npm run compile" + }, + "keywords": [], + "author": "woota", + "license": "MIT", + "devDependencies": { + "@alicloud/widget-utils-console": "^0.1.0", + "@babel/cli": "^7.6.4", + "@babel/core": "^7.6.4", + "@babel/preset-env": "^7.6.3" + }, + "peerDependencies": { + "@alicloud/widget-utils-console": "^0.1.0" + } +} diff --git a/packages/widget-utils-config/src/getChannelFeature.js b/packages/widget-utils-config/src/getChannelFeature.js new file mode 100644 index 000000000..4c7f1c657 --- /dev/null +++ b/packages/widget-utils-config/src/getChannelFeature.js @@ -0,0 +1,4 @@ +import { channelFeatureFactory } from '@alicloud/widget-utils-console' +import getChannelFeatureList from './getChannelFeatureList' + +export default channelFeatureFactory(getChannelFeatureList) diff --git a/packages/widget-utils-config/src/getChannelFeatureList.js b/packages/widget-utils-config/src/getChannelFeatureList.js new file mode 100644 index 000000000..8bf7ecea5 --- /dev/null +++ b/packages/widget-utils-config/src/getChannelFeatureList.js @@ -0,0 +1,7 @@ +export default function getChannelFeatureList() { + try { + return window.ALIYUN_CONSOLE_CONFIG.CHANNEL_FEATURE_STATUS + } catch(e) { + return {} + } +} diff --git a/packages/widget-utils-config/src/getChannelLink.js b/packages/widget-utils-config/src/getChannelLink.js new file mode 100644 index 000000000..943a74225 --- /dev/null +++ b/packages/widget-utils-config/src/getChannelLink.js @@ -0,0 +1,4 @@ +import { channelLinkFactory } from '@alicloud/widget-utils-console' +import getChannelLinkList from './getChannelLinkList' + +export default channelLinkFactory(getChannelLinkList) diff --git a/packages/widget-utils-config/src/getChannelLinkList.js b/packages/widget-utils-config/src/getChannelLinkList.js new file mode 100644 index 000000000..4c7603269 --- /dev/null +++ b/packages/widget-utils-config/src/getChannelLinkList.js @@ -0,0 +1,7 @@ +export default function getChannelLinkList() { + try { + return window.ALIYUN_CONSOLE_CONFIG.CHANNEL_LINKS + } catch(e) { + return {} + } +} diff --git a/packages/widget-utils-config/src/getWidgetI18nMessages.js b/packages/widget-utils-config/src/getWidgetI18nMessages.js new file mode 100644 index 000000000..fb5e7f59d --- /dev/null +++ b/packages/widget-utils-config/src/getWidgetI18nMessages.js @@ -0,0 +1,7 @@ +export default function getWidgetI18nMessages() { + try { + return window.ALIYUN_CONSOLE_I18N_MESSAGE + } catch(e) { + return {} + } +} diff --git a/packages/widget-utils-config/src/index.js b/packages/widget-utils-config/src/index.js new file mode 100644 index 000000000..88c29f3c3 --- /dev/null +++ b/packages/widget-utils-config/src/index.js @@ -0,0 +1,14 @@ +import getChannelFeatureList from './getChannelFeatureList' +import getChannelLinkList from './getChannelLinkList' +import getChannelFeature from './getChannelFeature' +import getChannelLink from './getChannelLink' +import getWidgetI18nMessages from './getWidgetI18nMessages' + + +export { + getChannelFeatureList, + getChannelLinkList, + getChannelFeature, + getChannelLink, + getWidgetI18nMessages +} diff --git a/packages/widget-utils-config/test/index.test.js b/packages/widget-utils-config/test/index.test.js new file mode 100644 index 000000000..297c4ae33 --- /dev/null +++ b/packages/widget-utils-config/test/index.test.js @@ -0,0 +1 @@ +test('an empty test', () => {}) \ No newline at end of file diff --git a/packages/widget-utils-console/.browserslistrc b/packages/widget-utils-console/.browserslistrc new file mode 100644 index 000000000..40f69444e --- /dev/null +++ b/packages/widget-utils-console/.browserslistrc @@ -0,0 +1,4 @@ +# Browsers that we support + +>0.2% +not dead \ No newline at end of file diff --git a/packages/widget-utils-console/.npmignore b/packages/widget-utils-console/.npmignore new file mode 100644 index 000000000..785711f01 --- /dev/null +++ b/packages/widget-utils-console/.npmignore @@ -0,0 +1,5 @@ +node_modules/ +src/ +test/ +.browserslistrc +babel.config.js \ No newline at end of file diff --git a/packages/widget-utils-console/CHANGELOG.md b/packages/widget-utils-console/CHANGELOG.md new file mode 100644 index 000000000..9ae953797 --- /dev/null +++ b/packages/widget-utils-console/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + diff --git a/packages/widget-utils-console/README.md b/packages/widget-utils-console/README.md new file mode 100644 index 000000000..65a1d4b3e --- /dev/null +++ b/packages/widget-utils-console/README.md @@ -0,0 +1,32 @@ +# @alicloud/widget-utils-console +提供给 Widget 用以获取其执行环境相关信息的工具🔧包。 + +Utils +名称|说明|返回值 +---|---|--- +提供方:@alicloud/widget-utils-conosole|以下方法由 @alicloud/widget-utils-console 提供| +isOneConsole|判断当前控制台的类型是否为 one-console|boolean +getChannelLink|获取渠道链接的值|string +getChannelFeature|获取开关状态值|boolean +useCORS|是否使用 fecs 提供的 CORS 接口请求 api 数据|boolean +提供方:宿主控制台|以下方法有宿主控制台提供| +getParentUid|获取控制台主账号 id|string +getCurrentUid|获取当前账号 id|string +getAccountType|获取当前账号类型|string +getChannel|获取当前渠道 id|string +getLang|获取当前语言类型|string +getLocale|获取当前地域信息|string +getSecToken|获取 sec_token|string +getUmid|获取 umid|string +getCollina|获取 collina|string +getRegionName|获取 region 的名称|string +getZoneName|获取 可用区的名称|string +提供方:@alicloud/wiget-loader|以下方法有 @alicloud/widget-loader 提供| +getWindMessages|获取 wind 组件的多语言文案,widget loader 提供|object +getWidgetI18nMessages|获取 widget 自身的多语言文案,widget loader 提供|object +getChannelLinkList|获取 widget 的渠道链接数据,widget loader 提供|object +getChannelFeatureList|获取 widget 的功能开关数据,widget loader 提供|object +getWidgetInfo|获取 widget 自身运行时的信息,widget loader 提供|object + + + diff --git a/packages/widget-utils-console/babel.config.js b/packages/widget-utils-console/babel.config.js new file mode 100644 index 000000000..aafa5baf5 --- /dev/null +++ b/packages/widget-utils-console/babel.config.js @@ -0,0 +1,7 @@ +module.exports = { + 'presets': [ + ['@babel/preset-env', { + 'modules': false + }] + ] +} \ No newline at end of file diff --git a/packages/widget-utils-console/package.json b/packages/widget-utils-console/package.json new file mode 100644 index 000000000..085f644e2 --- /dev/null +++ b/packages/widget-utils-console/package.json @@ -0,0 +1,26 @@ +{ + "name": "@alicloud/widget-utils-console", + "version": "0.1.0", + "description": "控制台相关的工具函数", + "main": "lib/index.js", + "scripts": { + "compile": "babel src --out-dir lib", + "prepublishOnly": "npm run compile" + }, + "keywords": [ + "widget", + "utils", + "console" + ], + "author": "woota", + "license": "MIT", + "devDependencies": { + "@babel/cli": "^7.4.3", + "@babel/core": "^7.4.3", + "@babel/preset-env": "^7.4.3" + }, + "dependencies": { + "@alicloud/one-console-utils": "^1.1.0" + }, + "gitHead": "849e4a23b7103c6cd68dd5ea62b71445b3ddfbdb" +} diff --git a/packages/widget-utils-console/src/channelFeatureFactory.js b/packages/widget-utils-console/src/channelFeatureFactory.js new file mode 100644 index 000000000..f754f17f9 --- /dev/null +++ b/packages/widget-utils-console/src/channelFeatureFactory.js @@ -0,0 +1,31 @@ +export default function channelFeatureFactory(getChannelFeatureList) { + return function getChannelFeature(id, activeRegionId, determinator) { + if (typeof id !== 'string') { + throw new TypeError( + `[getChannelFeature] Invalid type for "id" parameter, expect a string, but got ${typeof id}.` + ) + } + + const features = getChannelFeatureList() || [] + const feature = features[id] + + if (!feature) { + throw new TypeError( + `[getChannelFeature] Can not find the feature data for id: ${id}.` + ) + } + + // Leave the decision to the user + if (determinator) { + return determinator(feature) + } + + const { status, regions } = feature + + if (activeRegionId && regions) { + return status && regions.includes(activeRegionId) + } + + return status + } +} diff --git a/packages/widget-utils-console/src/channelLinkFactory.js b/packages/widget-utils-console/src/channelLinkFactory.js new file mode 100644 index 000000000..a00420a66 --- /dev/null +++ b/packages/widget-utils-console/src/channelLinkFactory.js @@ -0,0 +1,27 @@ +export default function channelLinkFactory(getChannelLinkList) { + return function getChannelLink(id, values) { + // Validate the input argument id + if (typeof id === 'undefined') { + throw new Error( + '[getChannelLink] Param "id" is required' + ) + } + + const links = getChannelLinkList() || [] + + if (!links[id]) { + throw new Error(`[getChannelLink] Can not find links with id: ${id}`) + } + + const link = links[id].replace(/{@?([^}]+)}/g, (match, key) => { + if (!values[key]) { + throw new Error( + `[getChannelLink: ${id}] Need ${key} in values for replacement.` + ) + } + return values[key] + }) + + return link + } +} diff --git a/packages/widget-utils-console/src/getAccountType.js b/packages/widget-utils-console/src/getAccountType.js new file mode 100644 index 000000000..0033d4019 --- /dev/null +++ b/packages/widget-utils-console/src/getAccountType.js @@ -0,0 +1,5 @@ +import { getAccountType } from '@alicloud/one-console-utils' + +export default () => { + return getAccountType() +} \ No newline at end of file diff --git a/packages/widget-utils-console/src/getChannel.js b/packages/widget-utils-console/src/getChannel.js new file mode 100644 index 000000000..d14098dcb --- /dev/null +++ b/packages/widget-utils-console/src/getChannel.js @@ -0,0 +1,5 @@ +import { getChannel } from '@alicloud/one-console-utils' + +export default () => { + return getChannel() +} \ No newline at end of file diff --git a/packages/widget-utils-console/src/getChannelFeature.js b/packages/widget-utils-console/src/getChannelFeature.js new file mode 100644 index 000000000..7e3da6059 --- /dev/null +++ b/packages/widget-utils-console/src/getChannelFeature.js @@ -0,0 +1,4 @@ +import getChannelFeatureList from './getChannelFeatureList' +import channelFeatureFactory from './channelFeatureFactory' + +export default channelFeatureFactory(getChannelFeatureList) diff --git a/packages/widget-utils-console/src/getChannelFeatureList.js b/packages/widget-utils-console/src/getChannelFeatureList.js new file mode 100644 index 000000000..8bf7ecea5 --- /dev/null +++ b/packages/widget-utils-console/src/getChannelFeatureList.js @@ -0,0 +1,7 @@ +export default function getChannelFeatureList() { + try { + return window.ALIYUN_CONSOLE_CONFIG.CHANNEL_FEATURE_STATUS + } catch(e) { + return {} + } +} diff --git a/packages/widget-utils-console/src/getChannelLink.js b/packages/widget-utils-console/src/getChannelLink.js new file mode 100644 index 000000000..8bd175b50 --- /dev/null +++ b/packages/widget-utils-console/src/getChannelLink.js @@ -0,0 +1,4 @@ +import getChannelLinkList from './getChannelLinkList' +import channelLinkFactory from './channelLinkFactory' + +export default channelLinkFactory(getChannelLinkList) diff --git a/packages/widget-utils-console/src/getChannelLinkList.js b/packages/widget-utils-console/src/getChannelLinkList.js new file mode 100644 index 000000000..4c7603269 --- /dev/null +++ b/packages/widget-utils-console/src/getChannelLinkList.js @@ -0,0 +1,7 @@ +export default function getChannelLinkList() { + try { + return window.ALIYUN_CONSOLE_CONFIG.CHANNEL_LINKS + } catch(e) { + return {} + } +} diff --git a/packages/widget-utils-console/src/getCollina.js b/packages/widget-utils-console/src/getCollina.js new file mode 100644 index 000000000..f7432b430 --- /dev/null +++ b/packages/widget-utils-console/src/getCollina.js @@ -0,0 +1,28 @@ +function getCollina() { + let UA_Opt = window.UA_Opt + + // Fallback + if(!UA_Opt){ + UA_Opt = {} + UA_Opt.SendMethod = 8 + UA_Opt.LogVal = 'aliyunbuy_uadata' + window[UA_Opt.LogVal] = '' + UA_Opt.Token = new Date().getTime() + ':' + Math.random() + UA_Opt.MaxMCLog = 10 + UA_Opt.MaxKSLog = 20 + UA_Opt.MaxMPLog = 5 + UA_Opt.MPInterval = 50 + UA_Opt.MaxTCLog = 50 + UA_Opt.MaxFocusLog = 5 + UA_Opt.isSendError = 1 + UA_Opt.Flag = 97422 + } + + let tmp_ua = UA_Opt.LogVal + UA_Opt.Token = new Date().getTime() + ':' + Math.random() + UA_Opt.reload && UA_Opt.reload() + + return tmp_ua +} + +export default getCollina diff --git a/packages/widget-utils-console/src/getCurrentUid.js b/packages/widget-utils-console/src/getCurrentUid.js new file mode 100644 index 000000000..9a14967d4 --- /dev/null +++ b/packages/widget-utils-console/src/getCurrentUid.js @@ -0,0 +1,5 @@ +import { getCurrentUid } from '@alicloud/one-console-utils' + +export default () => { + return getCurrentUid() +} \ No newline at end of file diff --git a/packages/widget-utils-console/src/getLang.js b/packages/widget-utils-console/src/getLang.js new file mode 100644 index 000000000..d41b6a407 --- /dev/null +++ b/packages/widget-utils-console/src/getLang.js @@ -0,0 +1,5 @@ +import { getLang } from '@alicloud/one-console-utils' + +export default () => { + return getLang() +} \ No newline at end of file diff --git a/packages/widget-utils-console/src/getLocale.js b/packages/widget-utils-console/src/getLocale.js new file mode 100644 index 000000000..9b1f2de71 --- /dev/null +++ b/packages/widget-utils-console/src/getLocale.js @@ -0,0 +1,5 @@ +import { getLocale } from '@alicloud/one-console-utils' + +export default () => { + return getLocale() +} \ No newline at end of file diff --git a/packages/widget-utils-console/src/getParentUid.js b/packages/widget-utils-console/src/getParentUid.js new file mode 100644 index 000000000..f9b33c23b --- /dev/null +++ b/packages/widget-utils-console/src/getParentUid.js @@ -0,0 +1,5 @@ +import { getParentUid } from '@alicloud/one-console-utils' + +export default () => { + return getParentUid() +} \ No newline at end of file diff --git a/packages/widget-utils-console/src/getRegionName.js b/packages/widget-utils-console/src/getRegionName.js new file mode 100644 index 000000000..951b640e6 --- /dev/null +++ b/packages/widget-utils-console/src/getRegionName.js @@ -0,0 +1,5 @@ +import { getRegionName } from '@alicloud/one-console-utils' + +export default (id) => { + return getRegionName(id) || id +} \ No newline at end of file diff --git a/packages/widget-utils-console/src/getSecToken.js b/packages/widget-utils-console/src/getSecToken.js new file mode 100644 index 000000000..8f5c411ac --- /dev/null +++ b/packages/widget-utils-console/src/getSecToken.js @@ -0,0 +1,5 @@ +import { getSecToken } from '@alicloud/one-console-utils' + +export default () => { + return getSecToken() +} \ No newline at end of file diff --git a/packages/widget-utils-console/src/getStylePrefixForWindComponent.js b/packages/widget-utils-console/src/getStylePrefixForWindComponent.js new file mode 100644 index 000000000..6d15fa4ef --- /dev/null +++ b/packages/widget-utils-console/src/getStylePrefixForWindComponent.js @@ -0,0 +1,23 @@ +/** + * This method will be excluded by the widget bundler and be + * injected by the widget loader at runtime. + * This means the method will not be utilized by widgets that get loaded by + * widget loader. + * The only two use cases are: + * 1. In dev environment; + * 2. By widgets get loaded through the +``` + +# 文档 + +* ARMS 接入: +* ARMS 主动上报日志: +* XConsole ARMS 监控与报警: +* Breezr ARMS 配置: diff --git a/packages/console-fetcher-interceptor-arms/breezr.config.ts b/packages/console-fetcher-interceptor-arms/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/console-fetcher-interceptor-arms/package.json b/packages/console-fetcher-interceptor-arms/package.json new file mode 100644 index 000000000..21b9becb0 --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/package.json @@ -0,0 +1,52 @@ +{ + "name": "@alicloud/console-fetcher-interceptor-arms", + "version": "0.0.0", + "description": "@alicloud/console-fetcher ARMS 拦截", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "console", + "fetcher", + "interceptor", + "arms" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "dependencies": { + "@alicloud/console-base-common-typings": "^0.0.0", + "@alicloud/fetcher": "^0.0.0" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/console-fetcher-interceptor-arms/src/index.ts b/packages/console-fetcher-interceptor-arms/src/index.ts new file mode 100644 index 000000000..d12fb0b27 --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/src/index.ts @@ -0,0 +1,11 @@ +import { + IInterceptorArmsConfig as ConsoleFetcherInterceptorArmsConfig +} from './types'; + +export { + default +} from './util/intercept'; + +export type { + ConsoleFetcherInterceptorArmsConfig +}; diff --git a/packages/console-fetcher-interceptor-arms/src/types/index.ts b/packages/console-fetcher-interceptor-arms/src/types/index.ts new file mode 100644 index 000000000..3433d7594 --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/src/types/index.ts @@ -0,0 +1,8 @@ +import { + FetcherConfig, + FetcherError +} from '@alicloud/fetcher'; + +export interface IInterceptorArmsConfig { + shouldIgnore?(config: FetcherConfig, err?: FetcherError): boolean; +} diff --git a/packages/console-fetcher-interceptor-arms/src/util/bl.ts b/packages/console-fetcher-interceptor-arms/src/util/bl.ts new file mode 100644 index 000000000..d326702a4 --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/src/util/bl.ts @@ -0,0 +1,88 @@ +import { + ArmsWindowExtended +} from '@alicloud/console-base-common-typings'; + +interface ILogInfoBase { + api: string; + timeStarted?: number; + traceId?: string; +} + +interface ILogInfoError extends ILogInfoBase { + code?: string; + message: string; +} + +interface ILogInfoSuccess extends ILogInfoBase {} + +interface ILogInfo extends ILogInfoBase { + success: boolean; + code: string; + message: string; +} + +function log(info: ILogInfo): void { + const bl = (window as ArmsWindowExtended).__bl; + + if (!bl?._conf?.disableHook) { + return; + } + + const { + api, + success, + code, + message, + timeStarted, + traceId + } = info; + const duration = timeStarted ? Date.now() - timeStarted : -1; + + if (bl.api) { + bl.api(api, success, duration, code, message, timeStarted, traceId); + } else { + bl.pipe = bl.pipe || []; + bl.pipe.push([ + 'api', + api, + success, + duration, + code, + message, + timeStarted, + traceId + ]); + } +} + +export function logError({ + api, + code = 'UNKNOWN', + message = '', + timeStarted, + traceId +}: ILogInfoError): void { + log({ + api, + timeStarted, + traceId, + success: false, + code, + message + }); +} + +export function logSuccess({ + api, + timeStarted, + traceId +}: ILogInfoSuccess): void { + log({ + api, + timeStarted, + traceId, + success: true, + code: '200', + message: '' + }); +} diff --git a/packages/console-fetcher-interceptor-arms/src/util/create-interceptor-response-fulfilled.ts b/packages/console-fetcher-interceptor-arms/src/util/create-interceptor-response-fulfilled.ts new file mode 100644 index 000000000..81dd68205 --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/src/util/create-interceptor-response-fulfilled.ts @@ -0,0 +1,30 @@ +import { + FetcherConfig, + FetcherResponse, + FetcherFnInterceptResponseFulfilled, + FetcherUtils +} from '@alicloud/fetcher'; + +import { + IInterceptorArmsConfig +} from '../types'; + +import { + logSuccess +} from './bl'; + +export default function createInterceptorResponseSuccess(interceptorConfig?: IInterceptorArmsConfig): FetcherFnInterceptResponseFulfilled { + return (data: unknown, config: FetcherConfig, response: FetcherResponse): unknown => { + if (interceptorConfig?.shouldIgnore(config)) { + logSuccess({ + api: FetcherUtils.buildUrl(config.url || '', { + urlBase: config.urlBase + }), + timeStarted: config._timeStarted, + traceId: response?.headers['Eagleeye-Traceid'] + }); + } + + return data; + }; +} diff --git a/packages/console-fetcher-interceptor-arms/src/util/create-interceptor-response-rejected.ts b/packages/console-fetcher-interceptor-arms/src/util/create-interceptor-response-rejected.ts new file mode 100644 index 000000000..f31b4536b --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/src/util/create-interceptor-response-rejected.ts @@ -0,0 +1,33 @@ +import { + FetcherConfig, + FetcherResponse, + FetcherError, + FetcherFnInterceptResponseRejected, + FetcherUtils +} from '@alicloud/fetcher'; + +import { + IInterceptorArmsConfig +} from '../types'; + +import { + logError +} from './bl'; + +export default function createInterceptorResponseRejected(interceptorConfig?: IInterceptorArmsConfig): FetcherFnInterceptResponseRejected { + return (err: FetcherError, config: FetcherConfig, response?: FetcherResponse): void => { + if (!interceptorConfig?.shouldIgnore(config, err)) { + logError({ + api: FetcherUtils.buildUrl(config.url || '', { + urlBase: config.urlBase + }), + code: err.code, + message: err.message, + timeStarted: config._timeStarted, + traceId: response?.headers['Eagleeye-Traceid'] + }); + } + + throw err; // 继续错下去 + }; +} diff --git a/packages/console-fetcher-interceptor-arms/src/util/intercept.ts b/packages/console-fetcher-interceptor-arms/src/util/intercept.ts new file mode 100644 index 000000000..b1a9306ba --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/src/util/intercept.ts @@ -0,0 +1,20 @@ +import { + Fetcher +} from '@alicloud/fetcher'; + +import { + IInterceptorArmsConfig +} from '../types'; + +import createInterceptorResponseFulfilled from './create-interceptor-response-fulfilled'; +import createInterceptorResponseRejected from './create-interceptor-response-rejected'; + +/** + * 为 fetcher 增加 arms 埋点 + */ +export default function intercept(fetcher: Fetcher, interceptorConfig?: IInterceptorArmsConfig): () => void { + const interceptorFulfilled = createInterceptorResponseFulfilled(interceptorConfig); + const interceptorRejected = createInterceptorResponseRejected(interceptorConfig); + + return fetcher.interceptResponse(interceptorFulfilled, interceptorRejected); +} diff --git a/packages/console-fetcher-interceptor-arms/stories/demo-default/index.tsx b/packages/console-fetcher-interceptor-arms/stories/demo-default/index.tsx new file mode 100644 index 000000000..48dffd09d --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/stories/demo-default/index.tsx @@ -0,0 +1,21 @@ +import React from 'react'; + +import { + FetcherDemoRcFetchers, + FetcherDemoRcMockArms +} from '@alicloud/fetcher-demo-helpers'; + +import { + fetcher0, + fetcher1 +} from '../fetcher'; + +export default function DemoDefault(): JSX.Element { + return <> + + + ; +} diff --git a/packages/console-fetcher-interceptor-arms/stories/fetcher/index.ts b/packages/console-fetcher-interceptor-arms/stories/fetcher/index.ts new file mode 100644 index 000000000..b4d11d519 --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/stories/fetcher/index.ts @@ -0,0 +1,18 @@ +import fetcher0, { + createFetcher +} from '@alicloud/fetcher'; +import { + fetcherDemoInterceptorBiz +} from '@alicloud/fetcher-demo-helpers'; + +import intercept from '../../src'; + +const fetcher1 = createFetcher(); + +fetcher1.interceptResponse(fetcherDemoInterceptorBiz); +intercept(fetcher1); + +export { + fetcher0, + fetcher1 +}; diff --git a/packages/console-fetcher-interceptor-arms/stories/index.stories.tsx b/packages/console-fetcher-interceptor-arms/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/console-fetcher-interceptor-arms/tests/index.spec.ts b/packages/console-fetcher-interceptor-arms/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/console-fetcher-interceptor-arms/tsconfig.json b/packages/console-fetcher-interceptor-arms/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/console-fetcher-interceptor-arms/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/console-fetcher-interceptor-fecs/.npmignore b/packages/console-fetcher-interceptor-fecs/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/console-fetcher-interceptor-fecs/CHANGELOG.md b/packages/console-fetcher-interceptor-fecs/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/console-fetcher-interceptor-fecs/README.md b/packages/console-fetcher-interceptor-fecs/README.md new file mode 100755 index 000000000..de4a549fc --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/README.md @@ -0,0 +1,45 @@ +@alicloud/console-fetcher-interceptor-fecs +=== + +`@alicloud/fetcher` 针对 FECS 请求的拦截,包括请求中,该拦截器会做请求和响应两次拦截,条件是请求的 FECS 接口,且为带 body 请求(POST、PUT、DELETE 等)。 + +* 请求:添加 `body.sec_token` 参数,因为 [@alicloud/console-fetcher-interceptor-req-security] 做了类似的事情,所以要放在它后边; +* 响应:在发生特定错误的时候,做刷新 token 的操作并再次发送请求,因为「特定错误」需要靠 [@alicloud/console-fetcher-interceptor-res-biz] 转化得到,所以要放在它后边。 + +# 拦截器顺序要求 + +拦截器位置 + +* @alicloud/console-fetcher-interceptor-req-security +* ... +* @alicloud/console-fetcher-interceptor-res-biz +* ... +* @alicloud/console-fetcher-interceptor-fecs <-- + +# INSTALL + +``` +tnpm i @alicloud/console-fetcher-interceptor-fecs -S +``` + +# API + +```typescript +import createFetcher, { + Fetcher +} from '@alicloud/fetcher'; +// import interceptors 1 +import intercept from '@alicloud/console-fetcher-interceptor-fecs'; +// import interceptors 2 + +const fetcher: Fetcher = createFetcher(); + +// ... add interceptors 1 +intercept(fetcher); +// ... add interceptors 2 + +export default fetcher +``` + +[@alicloud/console-fetcher-interceptor-req-security]: https://npm.alibaba-inc.com/package/@alicloud/console-fetcher-interceptor-req-security +[@alicloud/console-fetcher-interceptor-res-biz]: https://npm.alibaba-inc.com/package/@alicloud/console-fetcher-interceptor-res-biz diff --git a/packages/console-fetcher-interceptor-fecs/breezr.config.ts b/packages/console-fetcher-interceptor-fecs/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/console-fetcher-interceptor-fecs/package.json b/packages/console-fetcher-interceptor-fecs/package.json new file mode 100644 index 000000000..e17668acd --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/package.json @@ -0,0 +1,57 @@ +{ + "name": "@alicloud/console-fetcher-interceptor-fecs", + "version": "0.0.0", + "description": "@alicloud/console-fetcher 请求 + 响应拦截 - FECS", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "console", + "fetcher", + "interceptor", + "fecs" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/console-base-demo-helpers": "^0.0.0", + "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.2", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "dependencies": { + "@alicloud/console-base-conf-env": "^0.0.0", + "@alicloud/cookie": "^0.0.0", + "@alicloud/console-one-config": "^0.0.0", + "@alicloud/fetcher": "^0.0.0", + "@alicloud/fetcher-fetch": "^0.0.0" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/console-fetcher-interceptor-fecs/src/const/index.ts b/packages/console-fetcher-interceptor-fecs/src/const/index.ts new file mode 100644 index 000000000..1444a655d --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/src/const/index.ts @@ -0,0 +1,23 @@ +export const COOKIE_SEC_TOKEN = 'FECS-XSRF-TOKEN'; + +/** + * 后端给的 CSRF token 错误,给出的错误 message 如下: + * 「Invalid CSRF Token '3a7864e9-1735-41ad-a3ea-f9d89ec430e1' was found on the request parameter 'sec_token' or header 'X-CSRF-TOKEN'.」 + */ +export const ERROR_CODE_TOKEN_INVALID = 'CsrfTokenError'; + +/** + * ##新增前端错误码## + * + * 调用 FECS 的刷新 token 接口失败 + */ +export const ERROR_CODE_TOKEN_REFRESH_FAILED = 'CsrfTokenError.RefreshFailed'; +export const ERROR_MESSAGE_TOKEN_REFRESH_FAILED = '[FECS] token auto refresh failed.'; + +/** + * ##新增前端错误码## + * + * 使用了刷新后的 token 还是同样的错误 + */ +export const ERROR_CODE_TOKEN_AFTER_REFRESH = 'CsrfTokenError.AfterRefresh'; +export const ERROR_MESSAGE_TOKEN_AFTER_REFRESH = '[FECS] token not right even after refresh.'; diff --git a/packages/console-fetcher-interceptor-fecs/src/index.ts b/packages/console-fetcher-interceptor-fecs/src/index.ts new file mode 100644 index 000000000..f438d1df7 --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/src/index.ts @@ -0,0 +1,25 @@ +import { + Fetcher, + FetcherFnInterceptRequest, + FetcherFnInterceptResponseRejected +} from '@alicloud/fetcher'; + +import createInterceptorReq from './util/create-interceptor-req'; +import createInterceptorRes from './util/create-interceptor-res'; + +/** + * fecs 的接口的 sec_token 跟应用不同,它是从 cookie 中获取的(fecs 服务端种的) + * + * 该 token 实际上是通过当前浏览器的 cookie 到 fecs 后端进行换取的,所以要求用户登录 + */ +export default function intercept(fetcher: Fetcher): () => void { + const interceptorRequest: FetcherFnInterceptRequest = createInterceptorReq(); + const interceptorResponseRejected: FetcherFnInterceptResponseRejected = createInterceptorRes(); + const release1 = fetcher.interceptRequest(interceptorRequest); + const release2 = fetcher.interceptResponse(undefined, interceptorResponseRejected); + + return (): void => { + release1(); + release2(); + }; +} diff --git a/packages/console-fetcher-interceptor-fecs/src/util/cookie-get-token.ts b/packages/console-fetcher-interceptor-fecs/src/util/cookie-get-token.ts new file mode 100644 index 000000000..944f9f01f --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/src/util/cookie-get-token.ts @@ -0,0 +1,11 @@ +import { + getCookie +} from '@alicloud/cookie'; + +import { + COOKIE_SEC_TOKEN +} from '../const'; + +export default function cookieGetToken(): string { + return getCookie(COOKIE_SEC_TOKEN) || ''; +} diff --git a/packages/console-fetcher-interceptor-fecs/src/util/cookie-set-token.ts b/packages/console-fetcher-interceptor-fecs/src/util/cookie-set-token.ts new file mode 100644 index 000000000..febff072f --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/src/util/cookie-set-token.ts @@ -0,0 +1,13 @@ +import { + setCookie +} from '@alicloud/cookie'; + +import { + COOKIE_SEC_TOKEN +} from '../const'; + +export default function cookieSetToken(value: string): void { + setCookie(COOKIE_SEC_TOKEN, value, { + days: 0 // session cookie + }); +} diff --git a/packages/console-fetcher-interceptor-fecs/src/util/create-interceptor-req.ts b/packages/console-fetcher-interceptor-fecs/src/util/create-interceptor-req.ts new file mode 100644 index 000000000..df6ff2aea --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/src/util/create-interceptor-req.ts @@ -0,0 +1,68 @@ +import ONE_CONF from '@alicloud/console-one-config'; +import CONF_ENV from '@alicloud/console-base-conf-env'; +import { + FetcherConfig, + FetcherFnInterceptRequest, + FetcherUtils +} from '@alicloud/fetcher'; + +import isFecs from './is-fecs'; +import isRelativeOneApi from './is-relative-one-api'; +import cookieGetToken from './cookie-get-token'; + +// FECS 仅支持 .aliyun.com 或其对应日常 +const FECS_COMPATIBLE: boolean = (() => { + const arr1 = location.hostname.split('.'); + const arr2 = CONF_ENV.FECS_HOST.split('.'); + + return arr1[arr1.length - 2] === arr2[arr1.length - 2] && arr1[arr1.length - 1] === arr2[arr1.length - 1]; +})(); + +/** + * 此拦截器做了两个事情: + * + * 1. 对于处理去往 FECS 的接口,为 POST 添加 FECS 专属的 sec_token + * 2. 对于 OneConsole 封装的 open/inner/container 系列 API,在非 OneConsole 下自动走 FECS + */ +function interceptRequest(config: FetcherConfig): Partial | void { + // 只有向 FECS 的带 body 的请求需要填 FECS 的 token + if (!FetcherUtils.canHaveBody(config.method)) { + return; + } + + const fecs = isFecs(config); + const relativeOne = isRelativeOneApi(config); + + // 既不走 FECS,也不是当前域名下的 OneConsole API,不需要做什么 + if (!fecs && !relativeOne) { + return; + } + + // 走 FECS,填充 FECS 特有的 sec_token + if (fecs) { + return { + body: { + sec_token: cookieGetToken() + } + }; + } + + // 不走 FECS 的当前域名下的 OneConsole API,需要判断当前是不是 OneConsole + if (relativeOne) { + if (ONE_CONF.ONE || !FECS_COMPATIBLE) { // 是 OneConsole,或非 FECS 兼容的域名,则不需要处理什么 + return; + } + + // 强走 FECS + return { + urlBase: `//${CONF_ENV.FECS_HOST}`, + body: { + sec_token: cookieGetToken() + } + }; + } +} + +export default function createInterceptorReq(): FetcherFnInterceptRequest { + return interceptRequest; +} diff --git a/packages/console-fetcher-interceptor-fecs/src/util/create-interceptor-res.ts b/packages/console-fetcher-interceptor-fecs/src/util/create-interceptor-res.ts new file mode 100644 index 000000000..a692cbb5f --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/src/util/create-interceptor-res.ts @@ -0,0 +1,55 @@ +import { + FetcherConfig, + FetcherResponse, + FetcherError, + FetcherFnRequest, + FetcherFnInterceptResponseRejected +} from '@alicloud/fetcher'; + +import { + ERROR_CODE_TOKEN_INVALID, + ERROR_CODE_TOKEN_REFRESH_FAILED, + ERROR_MESSAGE_TOKEN_REFRESH_FAILED, + ERROR_CODE_TOKEN_AFTER_REFRESH, + ERROR_MESSAGE_TOKEN_AFTER_REFRESH +} from '../const'; + +import isFecs from './is-fecs'; +import refreshToken from './refresh-token'; + +interface IFetcherConfig extends FetcherConfig { + tokenRefreshed?: boolean; +} + +async function interceptResponse(err: FetcherError, config: IFetcherConfig, response: FetcherResponse, request: FetcherFnRequest): Promise { + if (!isFecs(config) || err?.code !== ERROR_CODE_TOKEN_INVALID) { + throw err; + } + + // 已经刷新过 token,且也刷新成功,但还是 token 不对,源错误修改 code 和 message 再外抛 + if (config.tokenRefreshed) { + err.code = ERROR_CODE_TOKEN_AFTER_REFRESH; + err.message = ERROR_MESSAGE_TOKEN_AFTER_REFRESH; + + throw err; + } + + // 刷新后重新请求 + return refreshToken().then(() => { + config.tokenRefreshed = true; // 避免无限循环 + + return request(config); + }, () => { // 刷新 token 失败,源错误修改 code 和 message 再外抛 + err.code = ERROR_CODE_TOKEN_REFRESH_FAILED; + err.message = ERROR_MESSAGE_TOKEN_REFRESH_FAILED; + + throw err; + }); +} + +/** + * 处理 FECS 的返回,如果抛错说 TOKEN 错误,则刷新 token 并重新再请求一次 + */ +export default function createInterceptorRes(): FetcherFnInterceptResponseRejected { + return interceptResponse; +} diff --git a/packages/console-fetcher-interceptor-fecs/src/util/is-fecs.ts b/packages/console-fetcher-interceptor-fecs/src/util/is-fecs.ts new file mode 100644 index 000000000..0e2fe1f83 --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/src/util/is-fecs.ts @@ -0,0 +1,24 @@ +import CONF_ENV from '@alicloud/console-base-conf-env'; +import { + FetcherConfig, + FetcherUtils +} from '@alicloud/fetcher'; + +/** + * 判断当前请求是不是 fecs 的请求 + * 注意:「野生」即手写的 FECS 域名判断可能会出错,因为它可能不会像 @alicloud/console-base-conf-env 进行环境判断 + */ +export default function isFecs({ + url, + urlBase +}: FetcherConfig): boolean { + let protocolHost = FetcherUtils.extractProtocolHost(url); + + if (protocolHost) { // 如果 url 是绝对地址,则不会用到 urlBase,不需要往下进行判断 + return protocolHost[1] === CONF_ENV.FECS_HOST; + } + + protocolHost = FetcherUtils.extractProtocolHost(urlBase); + + return protocolHost ? protocolHost[1] === CONF_ENV.FECS_HOST : false; +} diff --git a/packages/console-fetcher-interceptor-fecs/src/util/is-relative-one-api.ts b/packages/console-fetcher-interceptor-fecs/src/util/is-relative-one-api.ts new file mode 100644 index 000000000..716e7dbaf --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/src/util/is-relative-one-api.ts @@ -0,0 +1,15 @@ +import { + FetcherConfig +} from '@alicloud/fetcher'; + +const REG_ONE_API = /^\/data\/(multi)?(inner)?(api|call)\.json/i; + +/** + * 判断是否为 OneConsole 封装的 API 请求(请求的是当前域名下的相对地址) + */ +export default function isRelativeOneApi({ + url, + urlBase +}: FetcherConfig): boolean { + return !urlBase && REG_ONE_API.test(url); +} diff --git a/packages/console-fetcher-interceptor-fecs/src/util/refresh-token.ts b/packages/console-fetcher-interceptor-fecs/src/util/refresh-token.ts new file mode 100644 index 000000000..2662e7551 --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/src/util/refresh-token.ts @@ -0,0 +1,64 @@ +import CONF_ENV from '@alicloud/console-base-conf-env'; +import fetch from '@alicloud/fetcher-fetch'; + +import cookieSetToken from './cookie-set-token'; +import cookieGetToken from './cookie-get-token'; + +interface IRefreshTokenResult { + data: string; +} + +interface IRefreshTokenQueueItem { + resolve?(): void; + reject?(err: Error): void; +} + +const REFRESH_QUEUE: IRefreshTokenQueueItem[] = []; + +/** + * 真正执行请求刷新 FECS 的 token + */ +function refresh(): Promise { + return fetch(`//${CONF_ENV.FECS_HOST}/data/heartbeat`, { + credentials: 'include' // 必需,否则刷新出来的 token 无效 + }).then(response => response.json()).then((result: IRefreshTokenResult) => { + const newToken = result.data; + + // 一般调用此接口之后,后端会把 cookie 种上(仅对 .aliyun.com 等), + // 但如果当前使用者不在这些域下,这个 cookie 服务端不会种,需要人肉种一个 + if (cookieGetToken() !== newToken) { + cookieSetToken(newToken); + } + }); +} + +function executeQueue(err?: Error): void { + while (REFRESH_QUEUE.length) { + const queueItem = REFRESH_QUEUE.shift(); + + if (err) { + queueItem && queueItem.reject && queueItem.reject(err); + } else { + queueItem && queueItem.resolve && queueItem.resolve(); + } + } +} + +/** + * export 它,万一有的场景,使用者需要手工调用一下,一般来说不需要 + */ +export default function refreshToken(): Promise { + const queueItem: IRefreshTokenQueueItem = {}; + + REFRESH_QUEUE.push(queueItem); + + // 只有当第一个请求到达时进行真正的刷新 + if (REFRESH_QUEUE.length === 1) { + refresh().then(() => executeQueue(), err => executeQueue(err)); + } + + return new Promise((resolve, reject) => { + queueItem.resolve = resolve; + queueItem.reject = reject; + }); +} diff --git a/packages/console-fetcher-interceptor-fecs/stories/demo-default/index.tsx b/packages/console-fetcher-interceptor-fecs/stories/demo-default/index.tsx new file mode 100644 index 000000000..0b65a6d9a --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/stories/demo-default/index.tsx @@ -0,0 +1,90 @@ +/* eslint-disable no-console */ +import React, { + useState, + useCallback +} from 'react'; + +import { + H1, + H2, + P, + List, + Button +} from '@alicloud/demo-rc-elements'; +import { + DemoTipOfFecs +} from '@alicloud/console-base-demo-helpers'; + +import cookieGetToken from '../../src/util/cookie-get-token'; +import cookieSetToken from '../../src/util/cookie-set-token'; +import refreshToken from '../../src/util/refresh-token'; +import fetcher, { + fetcherNoFecs +} from '../fetcher'; + +function testGet(): void { + fetcher.get('/api/console-base/config'); +} + +function testPost(): void { + fetcher.post('/api/console-base/product/recent/add', { + productIds: ['oss'] + }); +} + +function manyRefreshes(): void { + refreshToken().then(() => console.info(1)); + refreshToken().then(() => console.info(2)); + refreshToken().then(() => console.info(3)); + refreshToken().then(() => console.info(4)); + refreshToken().then(() => console.info(5)); +} + +function openApiWillUseFecs(): void { + fetcherNoFecs.post('/data/api.json', { + product: 'slb', + action: 'DescribeRegions' + }); +} + +export default function DemoDefault(): JSX.Element { + const [stateToken, setStateToken] = useState(cookieGetToken()); + + const handleClearToken = useCallback(() => { + cookieSetToken(''); + setStateToken(''); + }, [setStateToken]); + + const handleRefreshTokenLocally = useCallback(() => { + setStateToken(cookieGetToken()); + }, [setStateToken]); + + const handleRefreshTokenRemotely = useCallback(() => refreshToken().then(() => { + handleRefreshTokenLocally(); + }), [handleRefreshTokenLocally]); + + return <> + +

如何测试

+ + <>如果没有 token,POST 请求会否自行 refreshToken,后会否重新请求 + <>如果有 token,POST 请求的 body 是否含有 sec_token,值看下方 + <>GET 请求不受影响 + +

当前 Token 值:{stateToken}

+
+ + + +
+

POST 请求

+ +

GET 不会受影响

+ +

并发刷新

+

同时很多个 refreshToken 仅会发送一个请求

+ +

OpenAPI 自动转接到 FECS(因为当前不是 OneConsole)

+ + ; +} diff --git a/packages/console-fetcher-interceptor-fecs/stories/fetcher/index.ts b/packages/console-fetcher-interceptor-fecs/stories/fetcher/index.ts new file mode 100644 index 000000000..f1934b307 --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/stories/fetcher/index.ts @@ -0,0 +1,27 @@ +import { + FetcherConfig, + createFetcher +} from '@alicloud/fetcher'; +import { + fetcherDemoInterceptorBiz +} from '@alicloud/fetcher-demo-helpers'; +import CONF_ENV from '@alicloud/console-base-conf-env'; + +import intercept from '../../src'; + +const fetcher = createFetcher({ + urlBase: `//${CONF_ENV.FECS_HOST}` +}); +const fetcherNoFecs = createFetcher(); // 用于测试调用 /data/api.json 是否会自动到 FECS(因为当前不是 OneConsole 环境) + +fetcher.interceptResponse(fetcherDemoInterceptorBiz); // 必须在之前 +intercept(fetcher); + +fetcherNoFecs.interceptResponse(fetcherDemoInterceptorBiz); // 必须在之前 +intercept(fetcherNoFecs); + +export default fetcher; + +export { + fetcherNoFecs +}; diff --git a/packages/console-fetcher-interceptor-fecs/stories/index.stories.tsx b/packages/console-fetcher-interceptor-fecs/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/console-fetcher-interceptor-fecs/tests/index.spec.ts b/packages/console-fetcher-interceptor-fecs/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/console-fetcher-interceptor-fecs/tsconfig.json b/packages/console-fetcher-interceptor-fecs/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/console-fetcher-interceptor-fecs/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/console-fetcher-interceptor-res-risk/.npmignore b/packages/console-fetcher-interceptor-res-risk/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/console-fetcher-interceptor-res-risk/CHANGELOG.md b/packages/console-fetcher-interceptor-res-risk/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/console-fetcher-interceptor-res-risk/README.md b/packages/console-fetcher-interceptor-res-risk/README.md new file mode 100755 index 000000000..2a87d5f0b --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/README.md @@ -0,0 +1,50 @@ +@alicloud/console-fetcher-interceptor-res-risk +=== + +> `@alicloud/console-fetcher` 的响应拦截器 - 风控。依赖 `@alicloud/console-fetcher-interceptor-res-biz` 的前置拦截。 + +# INSTALL + +``` +tnpm i @alicloud/console-fetcher-interceptor-res-biz @alicloud/console-fetcher-interceptor-res-risk -S +``` + +注意,风控拦截器依赖 `@alicloud/console-fetcher-interceptor-res-biz` 对响应进行拦截并抛出业务级别的 Error。 + +# API + +```typescript +import createFetcher, { + Fetcher +} from '@alicloud/fetcher'; +// import interceptors 1 +import interceptBiz from '@alicloud/console-fetcher-interceptor-res-biz'; // 必需在风控拦截之前 +// import interceptors 2 +import interceptRisk from '@alicloud/console-fetcher-interceptor-res-risk'; +// import interceptors 3 + +const fetcher: Fetcher = createFetcher(); + +// ... add interceptors 1 +interceptBiz(fetcher); +// ... add interceptors 2 +interceptRisk(fetcher, { // 自定义属性,均可选 + // // 风控错误码 + // CODE_NEED_VERIFY?: string; // 风控 - 需要用验证码进行二次验证 + // CODE_FORBIDDEN?: string; // 风控 - 中断业务流程 + // CODE_INVALID_INPUT?: string; // 验证码错误 + // // 风控验证类型 + // BY_SMS?: string; // 通过短信验证 + // BY_EMAIL?: string; // 通过邮箱验证 + // BY_MFA?: string; // 通过 MFA 设备验证 + // // URL 设置 + // URL_SEND_CODE?: string; // 必须设置,发送验证码接口地址(默认的好像就是这个地址) + // URL_SETTINGS?: string; // 设置用户风控验证方式地址 + // // 发送验证码后的冷却时间 + // COOLING_AFTER_SENT?: number; // 发送验证码成功后的冷却时间(秒) + // COOLING_AFTER_SEND_FAIL?: number; // 发送验证码失败后的冷却时间(秒) +}); +// ... add interceptors 3 + +export default fetcher +``` diff --git a/packages/console-fetcher-interceptor-res-risk/breezr.config.ts b/packages/console-fetcher-interceptor-res-risk/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/console-fetcher-interceptor-res-risk/package.json b/packages/console-fetcher-interceptor-res-risk/package.json new file mode 100644 index 000000000..08b0b5cf3 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/package.json @@ -0,0 +1,65 @@ +{ + "name": "@alicloud/console-fetcher-interceptor-res-risk", + "version": "0.0.0", + "description": "@alicloud/console-fetcher 响应拦截 - 风控处理", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "console-base", + "fetcher", + "interceptor", + "risk-control" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.2", + "@types/jest": "^26.0.15", + "@types/lodash": "^4.14.165", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "styled-components": "^5.2.1", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "peerDependencies": { + "react": ">=16.8", + "styled-components": ">=5" + }, + "dependencies": { + "@alicloud/console-base-intl-factory": "^0.0.0", + "@alicloud/console-base-rc-button": "^0.0.0", + "@alicloud/console-base-rc-dialog": "^0.0.0", + "@alicloud/console-base-rc-flex": "^0.0.0", + "@alicloud/console-base-rc-input": "^0.0.0", + "@alicloud/console-base-styled-mixin": "^0.0.0", + "@alicloud/fetcher": "^0.0.0", + "lodash": "^4.17.20" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/console-fetcher-interceptor-res-risk/src/const/index.ts b/packages/console-fetcher-interceptor-res-risk/src/const/index.ts new file mode 100644 index 000000000..df5fadc1f --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/const/index.ts @@ -0,0 +1,36 @@ +import { + IRiskConfig +} from '../types'; + +// 处理过了的风控错误,业务 UI 层无需再对其进行报错视图,忽略即可(但对于数据层来说还是一种错误) +export const ERROR_RISK_FORBIDDEN = 'FetcherErrorRiskForbidden'; // 风控说「你无法继续」 - 有 UI 对用户提示 +export const ERROR_RISK_INVALID = 'FetcherErrorRiskInvalid'; // 风控验证设置无效,需用户进行设置 - 有 UI 对用户提示 +export const ERROR_RISK_CANCELLED = 'FetcherErrorRiskCancelled'; // 用户取消风控验证 + +/** + * 这里内部使用的二次验证类型,跟数据解耦 + */ +export enum EVerifyType { + SMS = 'sms', + EMAIL = 'email', + MFA = 'mfa', + NONE = 'NONE', // 没有 + UNKNOWN = 'UNKNOWN' // 有,但不支持 +} + +export const DEFAULT_RISK_CONFIG: Required = { // 风控设置 + DATA_PATH_VERIFY_TYPE: 'data.verifyType', + DATA_PATH_VERIFY_DETAIL: 'data.verifyDetail', + DATA_PATH_VERIFY_CODE_TYPE: 'data.codeType', + CODE_NEED_VERIFY: 'FoundRiskAndDoubleConfirm', + CODE_FORBIDDEN: 'FoundRiskAndTip', + CODE_INVALID_INPUT: 'verifyCodeInvalid', // 愚蠢 干啥这个就小写了... + BY_SMS: 'sms', + BY_EMAIL: 'email', + BY_MFA: 'ga', + URL_SEND_CODE: '/risk/sendVerifyMessage.json', + URL_SETTINGS: '//account.console.aliyun.com/#/secure', + COOLING_AFTER_SENT: 60, + COOLING_AFTER_SEND_FAIL: 10, + METHOD_SEND_CODE: 'POST' +}; diff --git a/packages/console-fetcher-interceptor-res-risk/src/index.ts b/packages/console-fetcher-interceptor-res-risk/src/index.ts new file mode 100644 index 000000000..945cbf407 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/index.ts @@ -0,0 +1,30 @@ +import { + Fetcher, + FetcherFnInterceptResponseRejected +} from '@alicloud/fetcher'; + +import { + IRiskConfig as ConsoleFetcherRiskConfig +} from './types'; +import { + ERROR_RISK_FORBIDDEN, + ERROR_RISK_INVALID, + ERROR_RISK_CANCELLED +} from './const'; +import createInterceptor from './util/create-interceptor'; + +export default function intercept(fetcher: Fetcher, o?: ConsoleFetcherRiskConfig): () => void { + const interceptor: FetcherFnInterceptResponseRejected = createInterceptor(o); + + return fetcher.interceptResponse(undefined, interceptor); +} + +export { + ERROR_RISK_FORBIDDEN, + ERROR_RISK_INVALID, + ERROR_RISK_CANCELLED +}; + +export type { + ConsoleFetcherRiskConfig +}; diff --git a/packages/console-fetcher-interceptor-res-risk/src/intl/index.ts b/packages/console-fetcher-interceptor-res-risk/src/intl/index.ts new file mode 100644 index 000000000..7feadc500 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/intl/index.ts @@ -0,0 +1,13 @@ +import intlFactory from '@alicloud/console-base-intl-factory'; + +import localesEnUS from './locales/en-us'; +import localesZhCN from './locales/zh-cn'; +import localesZhTW from './locales/zh-tw'; +import localesJaJP from './locales/ja-jp'; + +export default intlFactory({ + 'en-US': localesEnUS, + 'zh-CN': localesZhCN, + 'zh-TW': localesZhTW, + 'ja-JP': localesJaJP +}); diff --git a/packages/console-fetcher-interceptor-res-risk/src/intl/locales/en-us.ts b/packages/console-fetcher-interceptor-res-risk/src/intl/locales/en-us.ts new file mode 100644 index 000000000..89f9cdeac --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/intl/locales/en-us.ts @@ -0,0 +1,29 @@ +export default { + 'attr:phone': 'Phone Number', + 'attr:email': 'Email', + 'attr:mfa': 'Virtual MFA Device', + 'attr:code': 'Verification Code', + 'op:confirm': 'OK', + 'op:cancel': 'Cancel', + 'op:risk_forbidden': 'Operation Abort', + 'op:risk_invalid_go': 'Complete the Settings in New Window', + 'op:risk_invalid': 'Set', + 'op:verify_by_phone': 'Phone Verification', + 'op:verify_by_email': 'Email Verification', + 'op:verify_by_mfa': 'MFA Verification', + 'op:send_code': 'Send', + 'op:change_phone': 'Change', + 'op:change_email': 'Change', + 'op:change_mfa': 'Unbind', + 'op:resend_after_{n}s': 'Resend in {n} Second(s)', + 'message:invalid_unknown!lines': `No verification method has been set. +To protect your account, set a verification method.`, + 'message:invalid_unsupported_{method}!html!lines': `Verification method {method} is not supported. +To protect your account, set a verification method.`, + 'message:forbidden': 'The operation failed due to a severe security risk. Please submit a ticket.', + 'message:code_required': 'Please input validation code.', + 'message:code_send_error': 'Validation code send failed, try again later.', + 'message:code_incorrect': 'Validation code incorrect, enter again.', + 'message:verify_cancelled': 'Verification cancelled by user.', + 'message:no_get_code_url': 'No URL for getting verification code is set, please contact the developer.' +}; diff --git a/packages/console-fetcher-interceptor-res-risk/src/intl/locales/ja-jp.ts b/packages/console-fetcher-interceptor-res-risk/src/intl/locales/ja-jp.ts new file mode 100644 index 000000000..daa6db581 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/intl/locales/ja-jp.ts @@ -0,0 +1,29 @@ +export default { + 'attr:phone': '電話', + 'attr:email': 'Eメール', + 'attr:mfa': '仮想MFAデバイス', + 'attr:code': '認証コード', + 'op:confirm': 'OK', + 'op:cancel': 'キャンセル', + 'op:risk_forbidden': '操作中止', + 'op:risk_invalid_go': '新しいウィンドウで設定を完了する', + 'op:risk_invalid': '認証方法', + 'op:verify_by_phone': '電話により認証', + 'op:verify_by_email': 'メールにより認証', + 'op:verify_by_mfa': 'MFA認証', + 'op:send_code': 'コードの取得', + 'op:change_phone': '変更', + 'op:change_email': '変更', + 'op:change_mfa': 'バインド解除', + 'op:resend_after_{n}s': '{n} 秒', + 'message:invalid_unknown!lines': `認証方法が見つかりませんでした。 +アカウントのセキュリティを保護するには、まず認証方法を設定します。`, + 'message:invalid_unsupported_{method}!html!lines': `確認方法 {method} が正しくありません。 +アカウントのセキュリティを保護するには、まず認証方法を設定します。`, + 'message:forbidden': '高いセキュリティリスクが検出されたため、操作を完了できません。サポートセンターに連絡してください。', + 'message:code_required': '確認コードを入力してください。', + 'message:code_send_error': '確認コードの送信に失敗しました。しばらくしてからもう一度試してください。', + 'message:code_incorrect': '確認コードが正しくありません。もう一度入力してください。', + 'message:verify_cancelled': '確認はユーザーによってキャンセルされました。', + 'message:no_get_code_url': '確認コードのURLが設定されていないことを確認し、開発に連絡してください。' +}; diff --git a/packages/console-fetcher-interceptor-res-risk/src/intl/locales/zh-cn.ts b/packages/console-fetcher-interceptor-res-risk/src/intl/locales/zh-cn.ts new file mode 100644 index 000000000..4ce70aac3 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/intl/locales/zh-cn.ts @@ -0,0 +1,29 @@ +export default { + 'attr:phone': '绑定的手机', + 'attr:email': '绑定的邮箱', + 'attr:mfa': '验证虚拟 MFA 设备', + 'attr:code': '校验码', + 'op:confirm': '确定', + 'op:cancel': '取消', + 'op:risk_forbidden': '操作中止', + 'op:risk_invalid_go': '请到新开窗口完成设置', + 'op:risk_invalid': '绑定验证方式', + 'op:verify_by_phone': '手机验证', + 'op:verify_by_email': '邮箱验证', + 'op:verify_by_mfa': 'MFA 验证', + 'op:send_code': '点击获取', + 'op:change_phone': '更换手机', + 'op:change_email': '更换邮箱', + 'op:change_mfa': '解除 MFA 绑定', + 'op:resend_after_{n}s': '{n} 秒后重发', + 'message:invalid_unknown!lines': `系统没有检测到验证方式。 +为了保障您的账户安全,请先设置验证方式。`, + 'message:invalid_unsupported_{method}!html!lines': `系统检测到验证方式 {method} 有误。 +为了保障您的账户安全,请先设置验证方式。`, + 'message:forbidden': '检测到存在严重安全风险,该操作无法执行,请联系客服。', + 'message:code_required': '请输入校验码。', + 'message:code_send_error': '校验码发送失败,请稍后重试。', + 'message:code_incorrect': '校验码不正确,请重新输入。', + 'message:verify_cancelled': '用户取消验证。', + 'message:no_get_code_url': '获取验证码 URL 未设置,请联系开发。' +}; diff --git a/packages/console-fetcher-interceptor-res-risk/src/intl/locales/zh-tw.ts b/packages/console-fetcher-interceptor-res-risk/src/intl/locales/zh-tw.ts new file mode 100644 index 000000000..f68c768d7 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/intl/locales/zh-tw.ts @@ -0,0 +1,29 @@ +export default { + 'attr:phone': '綁定的手機', + 'attr:email': '綁定的郵箱', + 'attr:mfa': '驗證虛擬 MFA 設備', + 'attr:code': '校驗碼', + 'op:confirm': '確定', + 'op:cancel': '取消', + 'op:risk_forbidden': '操作中止', + 'op:risk_invalid_go': '請到新開窗口完成設置', + 'op:risk_invalid': '綁定驗證方式', + 'op:verify_by_phone': '手機驗證', + 'op:verify_by_email': '郵箱驗證', + 'op:verify_by_mfa': 'MFA 驗證', + 'op:send_code': '點擊獲取', + 'op:change_phone': '更換手機', + 'op:change_email': '更換郵箱', + 'op:change_mfa': '解除 MFA 綁定', + 'op:resend_after_{n}s': '{n} 秒後重發', + 'message:invalid_unknown!lines': `系統沒有檢測到驗證方式。 +為了保障您的賬戶安全,請先設置驗證方式。`, + 'message:invalid_unsupported_{method}!html!lines': `系統檢測到驗證方式 {method} 有誤。 +為了保障您的賬戶安全,請先設置驗證方式。`, + 'message:forbidden': '檢測到存在嚴重安全風險,該操作無法執行,請聯系客服。', + 'message:code_required': '請輸入校驗碼。', + 'message:code_send_error': '校驗碼發送失敗,請稍後重試。', + 'message:code_incorrect': '校驗碼不正確,請重新輸入。', + 'message:verify_cancelled': '用户取消驗證。', + 'message:no_get_code_url': '獲取驗證碼 URL 未設置,請聯繫開發。' +}; diff --git a/packages/console-fetcher-interceptor-res-risk/src/rc/form/_types.ts b/packages/console-fetcher-interceptor-res-risk/src/rc/form/_types.ts new file mode 100644 index 000000000..f65a66733 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/rc/form/_types.ts @@ -0,0 +1,5 @@ +export interface IFormItem { + key?: string; + label?: string | JSX.Element; + content: string | JSX.Element; +} \ No newline at end of file diff --git a/packages/console-fetcher-interceptor-res-risk/src/rc/form/index.tsx b/packages/console-fetcher-interceptor-res-risk/src/rc/form/index.tsx new file mode 100644 index 000000000..0ac64ba12 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/rc/form/index.tsx @@ -0,0 +1,32 @@ +import React, { + FormHTMLAttributes, + FormEvent +} from 'react'; + +import { + IFormItem +} from './_types'; +import Item from './item'; + +interface IProps extends FormHTMLAttributes { + items: IFormItem[]; +} + +function onSubmit(e: FormEvent): void { + e.preventDefault(); +} + +/** + * 一个既简单的 Form + */ +export default function Form({ + items = [], + ...props +}: IProps): JSX.Element { + return + {items.map((v, i) => )} + ; +} diff --git a/packages/console-fetcher-interceptor-res-risk/src/rc/form/item/index.tsx b/packages/console-fetcher-interceptor-res-risk/src/rc/form/item/index.tsx new file mode 100644 index 000000000..80603af29 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/rc/form/item/index.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import styled from 'styled-components'; + +import { + COLOR, + FORM_CONTROL +} from '@alicloud/console-base-styled-mixin'; + +import { + IFormItem +} from '../_types'; + +const ScItem = styled.div` + display: flex; + margin-bottom: 12px; + line-height: ${FORM_CONTROL.HEIGHT.M}px; + font-size: 12px; + + &:last-child { + margin-bottom: 0; + } +`; + +// TODO 如果要提到外边用 这边的硬编码需要能设置 +const ScLabel = styled.div` + padding-right: 16px; + box-sizing: border-box; + width: 160px; + text-align: right; + color: ${COLOR.TEXT_SECONDARY}; +`; + +const ScContent = styled.div` + flex: 1; +`; + +export default function Item({ + label, + content +}: IFormItem): JSX.Element { + return + + + + {content} + ; +} diff --git a/packages/console-fetcher-interceptor-res-risk/src/types/index.ts b/packages/console-fetcher-interceptor-res-risk/src/types/index.ts new file mode 100644 index 000000000..e37f1e926 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/types/index.ts @@ -0,0 +1,46 @@ +import { + FetcherFnRequest +} from '@alicloud/fetcher'; + +import { + EVerifyType +} from '../const'; + +export interface IRiskInfo { + type: EVerifyType; // 解析后的类型 + verifyType: string; // 原始的 verifyType,通过 IRiskConfig.DATA_PATH_VERIFY_TYPE 从错误返回的 data 中获取 + detail: string; + codeType: string; +} + +export interface IRiskConfig { + // 从错误 data 中获取对应的信息 + DATA_PATH_VERIFY_TYPE?: string; // 如何从原始返回中获取风控类型,重新请求的时候需要带上 + DATA_PATH_VERIFY_DETAIL?: string; // 如何从原始返回中获取风控展示信息(邮箱或手机) + DATA_PATH_VERIFY_CODE_TYPE?: string; // 请求验证码的接口需要它 + // 风控错误码 + CODE_NEED_VERIFY?: string; // 风控 - 需要用验证码进行二次验证 + CODE_FORBIDDEN?: string; // 风控 - 中断业务流程 + CODE_INVALID_INPUT?: string; // 验证码错误 + // 风控验证类型 - 通过 DATA_PATH_VERIFY_TYPE 从初始 response 的 data 中得到的值 + BY_SMS?: string; // 通过短信验证 + BY_EMAIL?: string; // 通过邮箱验证 + BY_MFA?: string; // 通过 MFA 设备验证 + // URL 设置 + URL_SEND_CODE?: string; // 必须设置,发送验证码接口地址(默认的好像就是这个地址) + URL_SETTINGS?: string; // 设置用户风控验证方式地址 + // 发送验证码后的冷却时间 + COOLING_AFTER_SENT?: number; // 发送验证码成功后的冷却时间(秒) + COOLING_AFTER_SEND_FAIL?: number; // 发送验证码失败后的冷却时间(秒) + // 其他 + METHOD_SEND_CODE?: 'POST' | 'GET'; +} + +export interface IRiskVerifyDialogData { + request: FetcherFnRequest; + riskInfo: IRiskInfo; + riskConfig: IRiskConfig; + code: string; + requestId: string; + errorMessage: string; +} diff --git a/packages/console-fetcher-interceptor-res-risk/src/util/convert-risk-info.ts b/packages/console-fetcher-interceptor-res-risk/src/util/convert-risk-info.ts new file mode 100644 index 000000000..b8fe995ea --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/util/convert-risk-info.ts @@ -0,0 +1,21 @@ +import _get from 'lodash/get'; + +import { + IRiskConfig, + IRiskInfo +} from '../types'; + +import convertVerifyType from './convert-veriy-type'; + +export default function convertRiskInfo(responseData: any, riskConfig: IRiskConfig): IRiskInfo { + const type0: string = _get(responseData, riskConfig.DATA_PATH_VERIFY_TYPE, '') as string; + const detail: string = _get(responseData, riskConfig.DATA_PATH_VERIFY_DETAIL, '') as string; + const codeType: string = _get(responseData, riskConfig.DATA_PATH_VERIFY_CODE_TYPE, '') as string; + + return { + verifyType: type0, + type: convertVerifyType(type0, riskConfig), + detail, + codeType + }; +} diff --git a/packages/console-fetcher-interceptor-res-risk/src/util/convert-veriy-type.ts b/packages/console-fetcher-interceptor-res-risk/src/util/convert-veriy-type.ts new file mode 100644 index 000000000..0a5813fe3 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/util/convert-veriy-type.ts @@ -0,0 +1,19 @@ +import { + IRiskConfig +} from '../types'; +import { + EVerifyType +} from '../const'; + +export default function convertVerifyType(type0: string, riskConfig: IRiskConfig): EVerifyType { + switch (type0) { + case riskConfig.BY_SMS: + return EVerifyType.SMS; + case riskConfig.BY_EMAIL: + return EVerifyType.EMAIL; + case riskConfig.BY_MFA: // MFA 既不需要 info + return EVerifyType.MFA; + default: + return type0 ? EVerifyType.UNKNOWN : EVerifyType.NONE; + } +} diff --git a/packages/console-fetcher-interceptor-res-risk/src/util/create-interceptor.ts b/packages/console-fetcher-interceptor-res-risk/src/util/create-interceptor.ts new file mode 100644 index 000000000..48dca396d --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/util/create-interceptor.ts @@ -0,0 +1,146 @@ +import _get from 'lodash/get'; + +import { + FetcherConfig, + FetcherResponse, + FetcherError, + FetcherFnRequest, + FetcherFnInterceptResponseRejected +} from '@alicloud/fetcher'; + +import { + IRiskConfig +} from '../types'; +import { + EVerifyType, + DEFAULT_RISK_CONFIG +} from '../const'; +import intl from '../intl'; + +import riskForbidden from './risk/forbidden'; +import riskInvalid from './risk/invalid'; +import riskVerify from './risk/verify'; +import { + convertToRiskErrorForbidden, + convertToRiskErrorInvalid, + convertToRiskErrorCancelled +} from './error'; +import convertRiskInfo from './convert-risk-info'; + +/** + * 根据业务错误 code 为基础的 fetcher 添加风控流程 + * + * -------------------------------------------------------------------- + * +-------------------+ + * | fetcher.request | + * +---------+---------+ + * | + * IF--˅---+ + * +-------------Y OK? | + * | +---N---+ + * | | + * | (err1) + * | | + * | IF------˅------+ DIALOG-----------+ THROW=======================+ √ (test passed) + * | | forbidden? Y ---> | risk/forbidden +---> || FetchErrorRiskForbidden || + * | +-------N------+ +----------------+ +===========================+ (can be ignored) + * | | + * | IF-------˅--------+ THROW======+ √ (test passed) + * | | need verify? N ---> || err1 || + * | +--------Y--------+ ===========+ (should be handled in the error model) + * | | + * | DIALOG--˅--------+ THROW=============================+ √ (test passed) + * | | risk/verify +--- ---> || FetchErrorRiskVerifyCancelled || + * | +-------+--------+ +=================================+ (can be ignored) + * | | + * | +-------------˅-----------+ +----------------+ THROW=====================+ √ (test passed) + * | | verify setting right? N ---> + prompt about +---> ---> || FetchErrorRiskInvalid || + * | +-------------Y-----------+ +----------------+ +=========================+ (can be ignored) + * | | + * | +--------˅--------+ +---------------------+ √ (test passed) + * | | input code | <---+ warn code invalid | <-------------+ + * | +--------+--------+ +---------------------+ | + * | | | + * | | + * | verifyType + verifyCode + requestId | + * | | | + * | +-------˅-------+ IF------------Y-----------+ | + * | | fetch again | +---> | code invalid / needed Y -------+ + * | +-------+-------+ | +-------------N-----------+ + * | | (err2) | + * | IF--˅---+ | +----------˅-----------+ + * | + OK? N ------+ | risk/verify dismiss | + * | +---Y---+ +----------+-----------+ + * | | | + * | +----------˅----------+ THROW===˅======+ √ (test passed) + * | | risk/verify dismiss | || err2 || + * | +----------+----------+ +==============+ (should be handled externally) + * | | + * | +======˅======+ √ (test passed) + * +--------> || resolved! || + * +=============+ + * -------------------------------------------------------------------- + */ +export default (o?: IRiskConfig): FetcherFnInterceptResponseRejected => { + const riskConfig: IRiskConfig = { + ...DEFAULT_RISK_CONFIG, + ...o + }; + + return async (err: FetcherError, config: FetcherConfig, response: FetcherResponse, request: FetcherFnRequest): Promise => { + const { + code + } = err; + const responseData = response?.data; + + switch (code) { + case riskConfig.CODE_FORBIDDEN: + await riskForbidden(); + + throw convertToRiskErrorForbidden(err); + case riskConfig.CODE_NEED_VERIFY: { // 加花括号防止 eslint no-case-declarations + const riskInfo = convertRiskInfo(responseData, riskConfig); + + switch (riskInfo.type) { + case EVerifyType.NONE: + await riskInvalid(intl('message:invalid_unknown!lines'), riskConfig.URL_SETTINGS); + + throw convertToRiskErrorInvalid(err); + case EVerifyType.UNKNOWN: + await riskInvalid(intl('message:invalid_unsupported_{method}!html!lines', { + method: riskInfo.verifyType + }), riskConfig.URL_SETTINGS); + + throw convertToRiskErrorInvalid(err); + case EVerifyType.SMS: + case EVerifyType.EMAIL: + // 手机/邮箱验证必须要有 detail,且一定要有 GET_VERIFY_CODE 设置 + if (!riskInfo.detail) { + await riskInvalid(intl('message:invalid_unknown!lines'), riskConfig.URL_SETTINGS); + + throw convertToRiskErrorInvalid(err); + } + + break; + default: // EVerifyType.MFA + break; + } + + if (_get(config, 'body.verifyCode') || _get(config, 'params.verifyCode')) { + throw err; + } + + return riskVerify({ + request, + fetcherConfig: config, + riskInfo, + riskConfig + }).catch(err1 => { // err1 undefined 表示 cancelled + throw err1 ?? convertToRiskErrorCancelled(err); + }); + } + default: + throw err; + } + }; +}; diff --git a/packages/console-fetcher-interceptor-res-risk/src/util/error.ts b/packages/console-fetcher-interceptor-res-risk/src/util/error.ts new file mode 100644 index 000000000..2162c7be5 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/util/error.ts @@ -0,0 +1,28 @@ +import { + FetcherError +} from '@alicloud/fetcher'; + +import { + ERROR_RISK_FORBIDDEN, + ERROR_RISK_INVALID, + ERROR_RISK_CANCELLED +} from '../const'; + +function convertToRiskError(err: FetcherError, name: string): FetcherError { + err.name = name; + err.code = name; // name 当 code yes,不要惊慌 + + return err; +} + +export function convertToRiskErrorForbidden(err: FetcherError): FetcherError { + return convertToRiskError(err, ERROR_RISK_FORBIDDEN); +} + +export function convertToRiskErrorInvalid(err: FetcherError): FetcherError { + return convertToRiskError(err, ERROR_RISK_INVALID); +} + +export function convertToRiskErrorCancelled(err: FetcherError): FetcherError { + return convertToRiskError(err, ERROR_RISK_CANCELLED); +} diff --git a/packages/console-fetcher-interceptor-res-risk/src/util/intl-verify.ts b/packages/console-fetcher-interceptor-res-risk/src/util/intl-verify.ts new file mode 100644 index 000000000..1294f7a28 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/util/intl-verify.ts @@ -0,0 +1,37 @@ +import { + EVerifyType +} from '../const'; +import intl from '../intl'; + +export function intlVerifyTitle(type: EVerifyType): string { + switch (type) { + case EVerifyType.SMS: + return intl('op:verify_by_phone'); + case EVerifyType.EMAIL: + return intl('op:verify_by_email'); + default: // MFA + return intl('op:verify_by_mfa'); + } +} + +export function intlVerifyLabel(type: EVerifyType): string { + switch (type) { + case EVerifyType.SMS: + return intl('attr:phone'); + case EVerifyType.EMAIL: + return intl('attr:email'); + default: // MFA + return intl('attr:mfa'); + } +} + +export function intlVerifySetting(type: EVerifyType): string { + switch (type) { + case EVerifyType.SMS: + return intl('op:change_phone'); + case EVerifyType.EMAIL: + return intl('op:change_email'); + default: // MFA + return intl('op:change_mfa'); + } +} diff --git a/packages/console-fetcher-interceptor-res-risk/src/util/risk/forbidden/index.ts b/packages/console-fetcher-interceptor-res-risk/src/util/risk/forbidden/index.ts new file mode 100644 index 000000000..24213a42a --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/util/risk/forbidden/index.ts @@ -0,0 +1,15 @@ +import { + alert +} from '@alicloud/console-base-rc-dialog'; + +import intl from '../../../intl'; + +/** + * 风控 - 操作中止 + */ +export default (): Promise => alert({ + title: intl('op:risk_forbidden'), + content: intl('message:forbidden') +}, { + ok: intl('op:confirm') +}); diff --git a/packages/console-fetcher-interceptor-res-risk/src/util/risk/invalid/index.tsx b/packages/console-fetcher-interceptor-res-risk/src/util/risk/invalid/index.tsx new file mode 100644 index 000000000..309134088 --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/util/risk/invalid/index.tsx @@ -0,0 +1,24 @@ +import React from 'react'; + +import { + open, + AltWrap +} from '@alicloud/console-base-rc-dialog'; + +import intl from '../../../intl'; + +/** + * 风控 - 不支持的类型 + */ +export default (message: string, urlSettings: string): Promise => open({ + title: intl('op:risk_invalid'), + content: , + buttons: [{ + label: intl('op:risk_invalid_go'), + spm: 'add', + href: urlSettings + }, intl('op:cancel')] +}); diff --git a/packages/console-fetcher-interceptor-res-risk/src/util/risk/verify/content/generate/index.tsx b/packages/console-fetcher-interceptor-res-risk/src/util/risk/verify/content/generate/index.tsx new file mode 100644 index 000000000..91b53842b --- /dev/null +++ b/packages/console-fetcher-interceptor-res-risk/src/util/risk/verify/content/generate/index.tsx @@ -0,0 +1,97 @@ +import React, { + useState, + useEffect, + useCallback +} from 'react'; + +import { + useDialog +} from '@alicloud/console-base-rc-dialog'; +import Button, { + EButtonPreset +} from '@alicloud/console-base-rc-button'; + +import { + IRiskVerifyDialogData +} from '../../../../../types'; +import intl from '../../../../../intl'; + +interface ISendCodeReturn { // 发送验证码的返回,需要我们在再次发请求的时候带入 + requestId: string; +} + +/** + * 生成验证码按钮,有冷却时间 + */ +export default function Generate(): JSX.Element { + const { + data: { + request, + riskInfo: { + verifyType, + codeType + }, + riskConfig: { + URL_SEND_CODE, + COOLING_AFTER_SENT, + COOLING_AFTER_SEND_FAIL, + METHOD_SEND_CODE + } + }, + updateData, + lock, + unlock + } = useDialog(); + const [stateGenerating, setStateGenerating] = useState(false); + const [stateCooling, setStateCooling] = useState(0); + const handleClick = useCallback(async () => { + lock(); + setStateGenerating(true); + + try { + // 这里用当前的 fetcher + await request({ + method: METHOD_SEND_CODE, + url: URL_SEND_CODE, + body: { + verifyType, + codeType + } + }).then(data => updateData({ + requestId: data?.requestId || '' + })); + + setStateCooling(Math.round(COOLING_AFTER_SENT)); + } catch (err) { + updateData({ + errorMessage: err?.message || '' + }); + + setStateCooling(Math.round(COOLING_AFTER_SEND_FAIL)); + } finally { + setStateGenerating(false); + unlock(); + } + }, [lock, unlock, updateData, request, verifyType, codeType, URL_SEND_CODE, COOLING_AFTER_SENT, COOLING_AFTER_SEND_FAIL, METHOD_SEND_CODE]); + + useEffect(() => { + let timer: number | undefined; + + if (stateCooling > 0) { + timer = setTimeout(() => setStateCooling(stateCooling - 1), 1000); + } + + return () => (timer && clearTimeout(timer)); + }, [stateCooling]); + + return + ; +} diff --git a/packages/console-fetcher-proxy/stories/fetcher/index.ts b/packages/console-fetcher-proxy/stories/fetcher/index.ts new file mode 100644 index 000000000..10e7bed9e --- /dev/null +++ b/packages/console-fetcher-proxy/stories/fetcher/index.ts @@ -0,0 +1,20 @@ +import fetcher0 from '@alicloud/fetcher'; +import { + SLS_CONFIG, + fetcherDemoInterceptorMockVerifyCodeUrl +} from '@alicloud/fetcher-demo-helpers'; + +import { + createFetcher +} from '../../src'; + +const fetcher1 = createFetcher(undefined, { + slsConfig: SLS_CONFIG +}); + +fetcher1.interceptRequest(fetcherDemoInterceptorMockVerifyCodeUrl); + +export { + fetcher0, + fetcher1 +}; diff --git a/packages/console-fetcher-proxy/stories/index.stories.tsx b/packages/console-fetcher-proxy/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/console-fetcher-proxy/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/console-fetcher-proxy/tests/index.spec.ts b/packages/console-fetcher-proxy/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/console-fetcher-proxy/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/console-fetcher-proxy/tsconfig.json b/packages/console-fetcher-proxy/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/console-fetcher-proxy/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/console-fetcher/.npmignore b/packages/console-fetcher/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/console-fetcher/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/console-fetcher/CHANGELOG.md b/packages/console-fetcher/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/console-fetcher/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/console-fetcher/README.md b/packages/console-fetcher/README.md new file mode 100755 index 000000000..3467930f7 --- /dev/null +++ b/packages/console-fetcher/README.md @@ -0,0 +1,44 @@ +@alicloud/console-fetcher +=== + +一个专门为控制台量身定制的请求包,在 [@alicloud/console-fetcher-basic](https://npm.alibaba-inc.com/package/@alicloud/console-fetcher-basic) 的基础上添加以下拦截器: + +* `@alicloud/console-fetcher-interceptor-res-risk` 特殊的业务错误类型 - 风控 - 需要对其进行提示或二次验证 +* `@alicloud/console-fetcher-interceptor-res-sls` 对错误进行 SLS 上报,必须传入配置参数 + +# INSTALL + +``` +tnpm i @alicloud/console-fetcher -S +``` + +# API + +开箱即用的 fetcher,没有 SLS 日志。 + +```typescript +import fetcher from '@alicloud/console-fetcher'; + +fetcher.get(url: string, params): Promise; +fetcher.post(url: string, body: B, params: P): Promise; +fetcher.put(url: string, body: B, params: P): Promise; +fetcher.delte(url: string, body: B, params: P): Promise; +fetcher.callOpenApi(product: string, action: string, params: P): Promsie; +fetcher.callInnerApi(product: string, action: string, params: P): Promsie; +fetcher.callContainerApi(product: string, action: string, params: P): Promsie; +``` + +如果你需要对风控做自定义,或者在接口出错时通过 SLS 上报错误日志,可以通过 `createFetcher` 创建一个 fetcher,创建出来的 fetcher 和开箱即用的长相一模一样: + +```typescript +import { + createFetcher +} from '@alicloud/console-fetcher'; + +cosnt fetcher = createFetcher(undefined, { + riskConfig, + slsConfig +}); +``` + +具体请看 `build/types` 下的详细类型声明。 diff --git a/packages/console-fetcher/breezr.config.ts b/packages/console-fetcher/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/console-fetcher/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/console-fetcher/package.json b/packages/console-fetcher/package.json new file mode 100644 index 000000000..0f08e95e0 --- /dev/null +++ b/packages/console-fetcher/package.json @@ -0,0 +1,52 @@ +{ + "name": "@alicloud/console-fetcher", + "version": "0.0.0", + "description": "控制台 fetcher", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "console-base", + "fetcher" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.2", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "styled-components": "^5.2.1", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "dependencies": { + "@alicloud/console-fetcher-basic": "^0.0.0", + "@alicloud/console-fetcher-interceptor-res-risk": "^0.0.0" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/console-fetcher/src/index.ts b/packages/console-fetcher/src/index.ts new file mode 100644 index 000000000..3d889b61a --- /dev/null +++ b/packages/console-fetcher/src/index.ts @@ -0,0 +1,31 @@ +import { + ERROR_RISK_FORBIDDEN, + ERROR_RISK_INVALID, + ERROR_RISK_CANCELLED +} from '@alicloud/console-fetcher-interceptor-res-risk'; + +import { + IConsoleFetcherInterceptorOptions as FetcherInterceptorOptions +} from './types'; +import createFetcher from './util/create-fetcher'; + +const fetcher = createFetcher(); + +fetcher.sealInterceptors(); + +export * from '@alicloud/console-fetcher-basic'; + +export default fetcher; + +export { + ERROR_RISK_FORBIDDEN, + ERROR_RISK_INVALID, + ERROR_RISK_CANCELLED, + createFetcher +}; + +export type { + // 修改 @alicloud/console-fetcher-basic 中的类型 + FetcherInterceptorOptions +}; + diff --git a/packages/console-fetcher/src/types/index.ts b/packages/console-fetcher/src/types/index.ts new file mode 100644 index 000000000..c916cba56 --- /dev/null +++ b/packages/console-fetcher/src/types/index.ts @@ -0,0 +1,10 @@ +import { + FetcherInterceptorOptions +} from '@alicloud/console-fetcher-basic'; +import { + ConsoleFetcherRiskConfig +} from '@alicloud/console-fetcher-interceptor-res-risk'; + +export interface IConsoleFetcherInterceptorOptions extends FetcherInterceptorOptions { + riskConfig?: ConsoleFetcherRiskConfig; +} diff --git a/packages/console-fetcher/src/util/create-fetcher.ts b/packages/console-fetcher/src/util/create-fetcher.ts new file mode 100644 index 000000000..f21948c52 --- /dev/null +++ b/packages/console-fetcher/src/util/create-fetcher.ts @@ -0,0 +1,18 @@ +import { + FetcherConfig, + Fetcher, + createFetcher +} from '@alicloud/console-fetcher-basic'; +import interceptRisk from '@alicloud/console-fetcher-interceptor-res-risk'; + +import { + IConsoleFetcherInterceptorOptions +} from '../types'; + +export default (config?: FetcherConfig, interceptorOptions: IConsoleFetcherInterceptorOptions = {}): Fetcher => { + const fetcher: Fetcher = createFetcher(config, interceptorOptions); + + interceptRisk(fetcher, interceptorOptions.riskConfig); + + return fetcher; +}; diff --git a/packages/console-fetcher/stories/demo-default/index.tsx b/packages/console-fetcher/stories/demo-default/index.tsx new file mode 100644 index 000000000..bbe0152a3 --- /dev/null +++ b/packages/console-fetcher/stories/demo-default/index.tsx @@ -0,0 +1,23 @@ +import React from 'react'; + +import { + FetcherDemoRcFetchers +} from '@alicloud/fetcher-demo-helpers'; +import { + H1 +} from '@alicloud/demo-rc-elements'; + +import { + fetcher0, + fetcher1 +} from '../fetcher'; + +export default function DemoDefault(): JSX.Element { + return <> +

TODO add one api test

+ + ; +} diff --git a/packages/console-fetcher/stories/fetcher/index.ts b/packages/console-fetcher/stories/fetcher/index.ts new file mode 100644 index 000000000..10e7bed9e --- /dev/null +++ b/packages/console-fetcher/stories/fetcher/index.ts @@ -0,0 +1,20 @@ +import fetcher0 from '@alicloud/fetcher'; +import { + SLS_CONFIG, + fetcherDemoInterceptorMockVerifyCodeUrl +} from '@alicloud/fetcher-demo-helpers'; + +import { + createFetcher +} from '../../src'; + +const fetcher1 = createFetcher(undefined, { + slsConfig: SLS_CONFIG +}); + +fetcher1.interceptRequest(fetcherDemoInterceptorMockVerifyCodeUrl); + +export { + fetcher0, + fetcher1 +}; diff --git a/packages/console-fetcher/stories/index.stories.tsx b/packages/console-fetcher/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/console-fetcher/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/console-fetcher/tests/index.spec.ts b/packages/console-fetcher/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/console-fetcher/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/console-fetcher/tsconfig.json b/packages/console-fetcher/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/console-fetcher/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/console-one-config/.npmignore b/packages/console-one-config/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/console-one-config/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/console-one-config/CHANGELOG.md b/packages/console-one-config/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/console-one-config/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/console-one-config/README.md b/packages/console-one-config/README.md new file mode 100755 index 000000000..8edde2df7 --- /dev/null +++ b/packages/console-one-config/README.md @@ -0,0 +1,67 @@ +@alicloud/console-one-config +=== + +> 仅输出对象和类型,可以不在 OneConsole 下使用(比如用在 console-base 中),但使用前必须做好判断 `ONE_CONF.one` 为 true 才是 OneConsole。 + +对 OneConsole 下 `window.ALIYUN_CONSOLE_CONFIG` 的封装,剔除不用的东西,纠正和明确类型。 +在非 OneConsole 下同样可以得到类型一致的对象,但里边的数据都是空的。可以通过 `CONF.ONE` 是否为 `true` 判断当前是否为 OneConsole。 + +```sh +tnpm i @alicloud/console-one-config -S +``` + +```typescript +import ONE_CONF from '@alicloud/console-one-config'; + +// 使用 ONE_CONF +``` + +# 哪些优化? + +* 对全局变量 `window.ALIYUN_CONSOLE_CONFIG` 只读一次,避免全局变量引起的安全漏洞 +* 明确 `ONE_CONF` 的类型为优化后的 `ConsoleOneConfig` +* 剔除永远不会用到的输出 +* 纠正类型,避免 `undefined` + +更多优化可自行查看类型定义。 + +## `STATIS_API` + +设计的无比狗屎,基本上可以认为是由**脚**设计出来的。它输出的原屎格式是 `{ code, data?, message? }`,使用时需要非常小心,因为很容易出错, +我看到有人用了一连串的 `&&` 来做保护。实际上这一层逻辑完全可以在 OneConsole 输出前进行剥离,我多次提出,但总以**稳定性**为借口不作为,稳定得令人发指。 + +所以,这里提取了 `data` 作为直接输出,并更名为 `API_RESULT`。 + +```typescript +STATIS_API: { + a: { + code: '200', + data: ... + }, + b: { + code: '200', + data: null // null 是正常的返回,不忽略 + }, + c: { // 由于 data 是 undefined,所以忽略 + code: '200' + }, + d: { + code: 'fucked', + data: '即使有 data,但 code 是失败,也忽略', + message: '...' + } +} +// 将变成 +API_RESULT: { + a: ..., + b: null +} +``` + +## OPEN_STATUS + +改成了正确的格式,布尔是布尔,数值是数值。 + +## REGIONS + +对 REGIONS 的类型做了精简。 diff --git a/packages/console-one-config/breezr.config.ts b/packages/console-one-config/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/console-one-config/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/console-one-config/jest.config.js b/packages/console-one-config/jest.config.js new file mode 100644 index 000000000..1cda183da --- /dev/null +++ b/packages/console-one-config/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + testEnvironment: 'node', + testMatch: [ + '/src/**/*.test.ts' + ], + collectCoverageFrom: [ + 'src/**/*.ts' + ], + moduleFileExtensions: [ + 'ts', + 'js' + ], + transform: { + '\\.(ts)$': 'ts-jest', + '^.+\\.js$': 'babel-jest' + }, + modulePaths: [ + 'src' + ] +}; diff --git a/packages/console-one-config/package.json b/packages/console-one-config/package.json new file mode 100755 index 000000000..49de5200e --- /dev/null +++ b/packages/console-one-config/package.json @@ -0,0 +1,45 @@ +{ + "name": "@alicloud/console-one-config", + "version": "0.0.0", + "description": "OneConsole Config 对象解析与封装", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "OneConsole", + "config" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/console-one-config/src/index.ts b/packages/console-one-config/src/index.ts new file mode 100644 index 000000000..a1c8b517e --- /dev/null +++ b/packages/console-one-config/src/index.ts @@ -0,0 +1,20 @@ +import { + IShittyConsoleOneConfig as ConsoleOneConfigOriginal, + IConsoleOneConfig as ConsoleOneConfig, + IOpenStatus as ConsoleOneConfigOpenStatus, + IRegion as ConsoleOneConfigRegion, + IFeatureSwitch as ConsoleOneConfigFeatureSwitch, + IWindow as WindowWithConsoleOneConfig +} from './types'; +import parseOneConf from './util/parse-one-conf'; + +export default parseOneConf(); + +export type { + ConsoleOneConfig, + ConsoleOneConfigOriginal, + ConsoleOneConfigOpenStatus, + ConsoleOneConfigRegion, + ConsoleOneConfigFeatureSwitch, + WindowWithConsoleOneConfig +}; diff --git a/packages/console-one-config/src/types/index.ts b/packages/console-one-config/src/types/index.ts new file mode 100644 index 000000000..8cc7b8198 --- /dev/null +++ b/packages/console-one-config/src/types/index.ts @@ -0,0 +1,159 @@ +// 功能开关原屎输出 +export interface IShittyFeatureSwitch { + status: boolean; + attribute: { + regions: string[]; + customAttrs: Record; + }; +} + +// UBSMS 原屎输出 +export interface IShittyOpenStatus { + enabled: 'true' | 'false'; // 已开通 + authentication: 'true' | 'false'; // 已授权 + inDebtSoon: 'true' | 'false'; // 即将欠费 + inDebt: 'true' | 'false'; // 欠费 + inDebtOverdue: 'true' | 'false'; // 欠费超期 + prohibitedByRiskControl: 'true' | 'false'; // 因风控而禁止 + prepaid: 'true' | 'false'; + prepaidExpireSoon: 'true' | 'false'; + prepaidOverdue: 'true' | 'false'; + paused: 'true' | 'false'; + keepProduct: 'true' | 'false'; + site: 'true' | 'false'; + servicizing: 'true' | 'false'; + bizAPI: 'true' | 'false'; + spiTest: 'true' | 'false'; + // 非 boolean + creditScore: string; // 信用分? e.g. '0' 应该是数值 + spotAgreement: string; // 实际上应该是一个枚举,不过我只见过 'unsigned' + arrearageStatus: string; // 实际上应该是一个枚举,不过我只见过 'unknown' + userStopMode: string; // 实际上应该是一个枚举,不过我只见过 'keep' +} + +// 无比狗屎的接口静态输出——为什么不指定一下输出到某个层级呢,跟他们讲么又一堆狗屁稳定性借口,不能吐槽更多 +export interface IShittyStaticApi { + code: string; + data?: T; +} + +// REGIONS 原屎输出 +export interface IShittyRegion { + regionId: string; // e.g. cn-beijing + name: string; // e.g. 华北2(北京) + physicalList: { // 固定 1 个,但不确定... + id: string; // e.g. cn-beijing-btc-a01 + }[]; + zoneList: { + zoneId: string; // cn-beijing-f + name: string; // 北京 可用区F + }[]; +} + +// ALIYUN_CONSOLE_CONFIG 原屎输出 +export interface IShittyConsoleOneConfig { + // 环境 + portalType: 'one'; // 有 ALIYUN_CONSOLE_CONFIG 的不一定就等于 OneConsole(有的自建控制台也会用这个全局变量) + fEnv?: 'daily' | 'pre'; // 线上没有 + CHANNEL: string; // e.g. 'OFFICIAL' + LANG: string; // e.g. 'zh'、'en'、'zt' + LOCALE: string; // e.g. 'zh-CN'、'en-US'、'zh-TW' + SEC_TOKEN: string; // 执行 POST 请求时需要插入请求体的 `sec_token` 的安全码(也可能是 `secToken`...) + // 用户 + ACCOUNT_TYPE: 'main' | 'sub' | 'sts'; + CURRENT_PK: string; + MAIN_ACCOUNT_PK: string; // 对应主账号 ID + IS_CERTIFIED: 'true' | 'false'; // 用户已实名 + // VIPER 配置 + REGIONS: IShittyRegion[]; // 根据应用基础信息的「Location 服务应用」获取,没有则为空 + OPEN_STATUS?: Record; // 项目配置 → UBSMS(即产品开通状态,不配的这个对象不存在 💩) + CHANNEL_LINKS: Record; // 渠道链接 + CHANNEL_FEATURE_STATUS: Record; // 渠道功能开关 + FEATURE_STATUS: Record; // 渠道功能灰度 + STATIC_API: Record; // 项目配置 → 初始 API 调用 + RULE_CONFIG: Record; // 项目配置 → 规则中心 + LABELS: Record; // 项目配置 → 用户标签 + USER_PREFERENCE: Record>; // 项目配置 → 用户偏好 e.g. `{ 'xx': { fuck: 'you' } }` + NEW_VERSION: 'true' | 'false' | ''; // 项目配置 → 新旧版本切换 + // 以下可能是狗屎 💩 + // PORTAL_Id: 'OFFICIAL'; + // ACCOUNT_LOGIN_LINK: string; + // ACCOUNT_STRUCTURE: '2' | '3' | '4'; // 主账号 = 2,RAM = 3, STS = 4,ACCOUNT_TYPE 够了 + // BLOCK: Record; // e.g. { canShowTips: false, canShowFeedbackButton: false, ... } + // CHANNEL_ACTIONS: Record; // e.g. { canUseListenerForward: true, canChangeVPCAddress: true, ... } + // 以下绝对是狗屎 💩💩 + // ACCOUNT_NAME: ''; // 永远是空串 + // CHANNEL_REGION_SETTING: {}; + // REGION_BAR_SETTING: {}; + // LINKS: Record; // 旧版 viper 的输出,废弃 +} + +export interface IFeatureSwitch extends IShittyFeatureSwitch {} + +// 整容后的 UBSMS +export interface IOpenStatus { + enabled: boolean; // 已开通 + authentication: boolean; // 已授权 + inDebtSoon: boolean; // 即将欠费 + inDebt: boolean; // 欠费 + inDebtOverdue: boolean; // 欠费超期 + prohibitedByRiskControl: boolean; // 因风控而禁止 + prepaid: boolean; + prepaidExpireSoon: boolean; + prepaidOverdue: boolean; + paused: boolean; + keepProduct: boolean; + site: boolean; + servicizing: boolean; + bizAPI: boolean; + spiTest: boolean; + // 非 boolean + creditScore: string; // 信用分? e.g. '0' 应该是数值 + spotAgreement: string; // 实际上应该是一个枚举,不过我只见过 'unsigned' + arrearageStatus: string; // 实际上应该是一个枚举,不过我只见过 'unknown' + userStopMode: string; // 实际上应该是一个枚举,不过我只见过 'keep' +} + +// 整容后的 REGIONS 中的单个对象 +export interface IRegion { + id: string; + name: string; + physicalIds: string[]; + zones: { + id: string; + name: string; + }[]; +} + +export interface IWindow extends Window { + ALIYUN_CONSOLE_CONFIG?: IShittyConsoleOneConfig; +} + +// 整容后的配置对象 +export interface IConsoleOneConfig { + // 环境 + ONE: boolean; // window.ALIYUN_CONSOLE_CONFIG?.portalType === 'one' + ENV: 'prod' | 'pre' | 'daily'; // fEnv + CHANNEL: string; + LANG: string; + LOCALE: string; + SEC_TOKEN: string; + // 用户 + ACCOUNT: { + ID: string; // CURRENT_PK + ID_MAIN: string; // MAIN_ACCOUNT_PK + TYPE: 'main' | 'sub' | 'sts'; // ACCOUNT_TYPE + CERTIFIED: boolean; // IS_CERTIFIED === 'true' + }; + // VIPER 配置 + REGIONS: IRegion[]; + OPEN_STATUS?: Record; // 产品开通状态(UBSMS 信息),OPEN_STATUS 净化而来 + LINK: Record; // 渠道链接,CHANNEL_LINKS + FEATURE_SWITCH: Record; // 渠道功能开关,CHANNEL_FEATURE_STATUS + FEATURE_GRAY: Record; // 渠道功能灰度,FEATURE_STATUS + API_RESULT: Record; // 项目配置 → 初始 API 调用,STATIC_API 剥出 data + RULE_CONFIG: Record; // 项目配置 → 规则中心 + LABELS: Record; // 项目配置 → 用户标签 + USER_PREFERENCE: Record>; // 项目配置 → 用户偏好 e.g. `{ 'xx': { fuck: 'you' } }` + NEW_VERSION: boolean; // 项目配置 → 新旧版本切换 +} diff --git a/packages/console-one-config/src/util/fix-api-result.ts b/packages/console-one-config/src/util/fix-api-result.ts new file mode 100644 index 000000000..e40f84da7 --- /dev/null +++ b/packages/console-one-config/src/util/fix-api-result.ts @@ -0,0 +1,15 @@ +import { + IShittyStaticApi +} from '../types'; + +export default function fixApiResult(shitty: Record = {}): Record { + return Object.keys(shitty || {}).reduce((result: Record, v) => { + const o = shitty[v]; + + if (o && o.code === '200' && o.data !== undefined) { + result[v] = o.data; + } + + return result; + }, {}); +} diff --git a/packages/console-one-config/src/util/fix-open-status.ts b/packages/console-one-config/src/util/fix-open-status.ts new file mode 100644 index 000000000..5be878b4b --- /dev/null +++ b/packages/console-one-config/src/util/fix-open-status.ts @@ -0,0 +1,35 @@ +import { + IShittyOpenStatus, + IOpenStatus +} from '../types'; + +/** + * 修复布尔值、数值,其他仍旧为字符串 + */ +function fixOneOpenStatus(shity: IShittyOpenStatus): IOpenStatus { + const o: Record = {}; + + Object.keys(shity).forEach(v => { + const value: string = shity[v]; + + if (value === 'true') { + o[v] = true; + } else if (value === 'false') { + o[v] = false; + } else if (/^\d+$/.test(value)) { + o[v] = Number(value); + } else { + o[v] = value; + } + }); + + return o as unknown as IOpenStatus; +} + +export default function fixOpenStatus(o: Record = {}): Record { + return Object.keys(o || {}).reduce((result: Record, v: string) => { + result[v] = fixOneOpenStatus(o[v]); + + return result; + }, {}); +} diff --git a/packages/console-one-config/src/util/fix-regions.ts b/packages/console-one-config/src/util/fix-regions.ts new file mode 100644 index 000000000..d85d4dd8b --- /dev/null +++ b/packages/console-one-config/src/util/fix-regions.ts @@ -0,0 +1,21 @@ +import { + IShittyRegion, + IRegion +} from '../types'; + +export default function fixRegions(shittyRegions: IShittyRegion[] = []): IRegion[] { + return shittyRegions.map(({ + regionId, + name, + physicalList = [], + zoneList = [] + }): IRegion => ({ + id: regionId, + name: name || regionId, + physicalIds: physicalList.map(v => v.id).filter(v => v), + zones: zoneList.map(v => ({ + id: v.zoneId, + name: v.name + })) + })); +} diff --git a/packages/console-one-config/src/util/parse-one-conf.ts b/packages/console-one-config/src/util/parse-one-conf.ts new file mode 100644 index 000000000..8ab544c7d --- /dev/null +++ b/packages/console-one-config/src/util/parse-one-conf.ts @@ -0,0 +1,71 @@ +import { + IConsoleOneConfig, + IShittyConsoleOneConfig, + IWindow +} from '../types'; + +import fixRegions from './fix-regions'; +import fixOpenStatus from './fix-open-status'; +import fixApiResult from './fix-api-result'; + +function fillByShitty(ONE_CONF: IConsoleOneConfig, shittyConf: IShittyConsoleOneConfig): void { + ONE_CONF.ONE = shittyConf.portalType === 'one'; + ONE_CONF.ENV = shittyConf.fEnv || ONE_CONF.ENV; + ONE_CONF.CHANNEL = shittyConf.CHANNEL || ONE_CONF.CHANNEL; + ONE_CONF.LANG = shittyConf.LANG || ONE_CONF.LANG; + ONE_CONF.LOCALE = shittyConf.LOCALE || ONE_CONF.LOCALE; + ONE_CONF.SEC_TOKEN = shittyConf.SEC_TOKEN || ONE_CONF.SEC_TOKEN; + ONE_CONF.ACCOUNT = { + ID: shittyConf.CURRENT_PK || ONE_CONF.ACCOUNT.ID, + ID_MAIN: shittyConf.MAIN_ACCOUNT_PK || ONE_CONF.ACCOUNT.ID_MAIN, + TYPE: shittyConf.ACCOUNT_TYPE || ONE_CONF.ACCOUNT.TYPE, + CERTIFIED: shittyConf.IS_CERTIFIED === 'true' + }; + ONE_CONF.REGIONS = fixRegions(shittyConf.REGIONS); + ONE_CONF.OPEN_STATUS = fixOpenStatus(shittyConf.OPEN_STATUS); + ONE_CONF.LINK = shittyConf.CHANNEL_LINKS || ONE_CONF.LINK; + ONE_CONF.FEATURE_SWITCH = shittyConf.CHANNEL_FEATURE_STATUS || ONE_CONF.FEATURE_SWITCH; + ONE_CONF.FEATURE_GRAY = shittyConf.FEATURE_STATUS || ONE_CONF.FEATURE_GRAY; + ONE_CONF.API_RESULT = fixApiResult(shittyConf.STATIC_API); + ONE_CONF.RULE_CONFIG = shittyConf.RULE_CONFIG || ONE_CONF.RULE_CONFIG; + ONE_CONF.LABELS = shittyConf.LABELS || ONE_CONF.LABELS; + ONE_CONF.USER_PREFERENCE = shittyConf.USER_PREFERENCE || ONE_CONF.USER_PREFERENCE; + ONE_CONF.NEW_VERSION = shittyConf.NEW_VERSION === 'true'; +} + +/** + * OneConsole 通用的 CONF 解析逻辑 + */ +export default function parseOneConf(): IConsoleOneConfig { + const ONE_CONF: IConsoleOneConfig = { + ONE: false, + ENV: 'prod', + CHANNEL: 'OFFICIAL', + LANG: 'zh', + LOCALE: 'zh-CN', + SEC_TOKEN: '', + ACCOUNT: { + ID: '', + ID_MAIN: '', + TYPE: 'main', + CERTIFIED: false + }, + REGIONS: [], + OPEN_STATUS: {}, + LINK: {}, + FEATURE_SWITCH: {}, + FEATURE_GRAY: {}, + API_RESULT: {}, + RULE_CONFIG: {}, + LABELS: {}, + USER_PREFERENCE: {}, + NEW_VERSION: false + }; + const shittyConf: IShittyConsoleOneConfig | undefined = typeof window !== 'undefined' ? (window as IWindow).ALIYUN_CONSOLE_CONFIG : undefined; + + if (shittyConf) { + fillByShitty(ONE_CONF, shittyConf); + } + + return ONE_CONF; +} diff --git a/packages/console-one-config/stories/demo-default/index.tsx b/packages/console-one-config/stories/demo-default/index.tsx new file mode 100644 index 000000000..119c0ead9 --- /dev/null +++ b/packages/console-one-config/stories/demo-default/index.tsx @@ -0,0 +1,14 @@ +import React from 'react'; + +import { + CleanJson +} from '@alicloud/demo-rc-elements'; + +import ONE_CONF from '@alicloud/console-one-config'; + +export default function DemoDefault(): JSX.Element { + return ; +} diff --git a/packages/console-one-config/stories/index.stories.tsx b/packages/console-one-config/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/console-one-config/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/console-one-config/tests/index.spec.ts b/packages/console-one-config/tests/index.spec.ts new file mode 100644 index 000000000..f8cae6ad9 --- /dev/null +++ b/packages/console-one-config/tests/index.spec.ts @@ -0,0 +1,29 @@ +/* global describe, it, expect */ +import CONF from '../src'; + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(CONF.ONE).toBe(false); + expect(CONF.ENV).toBe('prod'); + expect(CONF.CHANNEL).toBe('OFFICIAL'); + expect(CONF.LANG).toBe('zh'); + expect(CONF.LOCALE).toBe('zh-CN'); + expect(CONF.SEC_TOKEN).toBe(''); + expect(CONF.ACCOUNT.ID).toBe(''); + expect(CONF.ACCOUNT.ID_MAIN).toBe(''); + expect(CONF.ACCOUNT.TYPE).toBe('main'); + expect(CONF.ACCOUNT.CERTIFIED).toBe(false); + expect(CONF.REGIONS).toEqual([]); + expect(CONF.OPEN_STATUS).toEqual({}); + expect(CONF.LINK).toEqual({}); + expect(CONF.FEATURE_SWITCH).toEqual({}); + expect(CONF.FEATURE_GRAY).toEqual({}); + expect(CONF.API_RESULT).toEqual({}); + expect(CONF.RULE_CONFIG).toEqual({}); + expect(CONF.LABELS).toEqual({}); + expect(CONF.USER_PREFERENCE).toEqual({}); + expect(CONF.NEW_VERSION).toBe(false); + }); +}); diff --git a/packages/console-one-config/tsconfig.json b/packages/console-one-config/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/console-one-config/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/cookie/src/index.ts b/packages/cookie/src/index.ts index b691310e7..246c3efe0 100644 --- a/packages/cookie/src/index.ts +++ b/packages/cookie/src/index.ts @@ -1,101 +1,11 @@ -interface ICookies { - [k: string]: string; -} - -const DEFAULT_COOKIE_DOMAIN = ((): string => { - const { - location: { - hostname - } - } = window; - - if (/^\d[\d.]*\d$/.test(hostname)) { // 纯 IP,直接返回 - return hostname; - } - - const arr = hostname.split('.'); - - if (arr.length >= 3) { // 返回二级域名 - return `.${arr[arr.length - 2]}.${arr[arr.length - 1]}`; - } - - return hostname; -})(); - -function getExpireDate(days: number): string { - if (!days) { - return ''; // session cookie - } - - const d = new Date(); // 过期时间 - - d.setDate(d.getDate() + days); - - return d.toUTCString(); -} - -/** - * 获取当前页面可以访问到的全部 cookie - */ -export function getAllCookies(): ICookies { - return document.cookie.split(/\s*;\s*/).reduce((result: ICookies, v) => { - const [cookieName, cookieValue] = v.split('='); - - // 原来的实现有问题,set 的时候用的是 `escape`,get 的时候用的是 `decodeURIComponent`,这在大多数情况下 - // 没有问题,但,当 set 了一个中文的,就会抛错「URIError: malformed URI sequence」 - // 这里做一下兼容,因为大部分情况下 `decodeURIComponent(escape(value)) === value` - try { - result[cookieName] = decodeURIComponent(cookieValue); - } catch (e) { - result[cookieName] = unescape(cookieValue); - } - - return result; - }, {}); -} - -/** - * 获取单个 cookie - */ -export function getCookie(name: string): string | undefined { - return getAllCookies()[name]; -} - -/** - * 设置 cookie,默认为时间为 180 天,设置 extra.days 为 0 可以保存为 session cookie - */ -export function setCookie(name: string, value: string, { - domain = DEFAULT_COOKIE_DOMAIN, - path = '/', - days = 180, - encoding = true -}: { - domain?: string; - path?: string; - days?: number; - encoding?: boolean; -} = {}): void { - document.cookie = [ - `${name}=${encoding ? encodeURIComponent(value) : value}`, - `domain=${domain}`, - `path=${path}`, - `expires=${getExpireDate(days)}` - ].join(';'); -} - -/** - * 删除 cookie,其实设置一个过期时间为此刻之前的时间,浏览器会自动清理过期的 cookie(其实这里设不设值都无所谓) - */ -export function deleteCookie(name: string, { - domain, - path -}: { - domain?: string; - path?: string; -} = {}): void { - setCookie(name, '', { - domain, - path, - days: -1 - }); -} +import getAllCookies from './util/get-all-cookies'; +import getCookie from './util/get-cookie'; +import setCookie from './util/set-cookie'; +import deleteCookie from './util/delete-cookie'; + +export { + getAllCookies, + getCookie, + setCookie, + deleteCookie +}; diff --git a/packages/cookie/src/types/index.ts b/packages/cookie/src/types/index.ts new file mode 100644 index 000000000..2d95db1cf --- /dev/null +++ b/packages/cookie/src/types/index.ts @@ -0,0 +1,10 @@ +export interface ICookieSetOptions { + domain?: string; + path?: string; + days?: number; +} + +export interface ICookieDeleteOptions { + domain?: string; + path?: string; +} diff --git a/packages/cookie/src/util/delete-cookie.ts b/packages/cookie/src/util/delete-cookie.ts new file mode 100644 index 000000000..0dd15b937 --- /dev/null +++ b/packages/cookie/src/util/delete-cookie.ts @@ -0,0 +1,19 @@ +import { + ICookieDeleteOptions +} from '../types'; + +import setCookie from './set-cookie'; + +/** + * 删除 cookie,其实设置一个过期时间为此刻之前的时间,浏览器会自动清理过期的 cookie(其实这里设不设值都无所谓) + */ +export default function deleteCookie(name: string, { + domain, + path +}: ICookieDeleteOptions = {}): void { + setCookie(name, '', { + domain, + path, + days: -1 + }); +} diff --git a/packages/cookie/src/util/get-all-cookies.ts b/packages/cookie/src/util/get-all-cookies.ts new file mode 100644 index 000000000..b53db759a --- /dev/null +++ b/packages/cookie/src/util/get-all-cookies.ts @@ -0,0 +1,15 @@ +/** + * 获取当前页面可以访问到的全部 cookie + */ +export default function getAllCookies(): Record { + return document.cookie.split(/\s*;\s*/).reduce((result: Record, v) => { + const [cookieName, cookieValue] = v.split('='); + + // 原来的实现有问题,set 的时候用的是 `escape`,get 的时候用的是 `decodeURIComponent`,这在大多数情况下 + // 没有问题,但,当 set 了一个中文的,就会抛错「URIError: malformed URI sequence」 + // 这里做一下兼容,因为大部分情况下 `decodeURIComponent(escape(value)) === value` + result[cookieName] = decodeURIComponent(cookieValue); + + return result; + }, {}); +} diff --git a/packages/cookie/src/util/get-cookie.ts b/packages/cookie/src/util/get-cookie.ts new file mode 100644 index 000000000..5d9ff9cc8 --- /dev/null +++ b/packages/cookie/src/util/get-cookie.ts @@ -0,0 +1,8 @@ +import getAllCookies from './get-all-cookies'; + +/** + * 获取单个 cookie + */ +export default function getCookie(name: string): string | undefined { + return getAllCookies()[name]; +} diff --git a/packages/cookie/src/util/get-domain.ts b/packages/cookie/src/util/get-domain.ts new file mode 100644 index 000000000..9db007815 --- /dev/null +++ b/packages/cookie/src/util/get-domain.ts @@ -0,0 +1,19 @@ +export default function getDomain(): string { + const { + location: { + hostname + } + } = window; + + if (/^\d[\d.]*\d$/.test(hostname)) { // 纯 IP,直接返回 + return hostname; + } + + const arr = hostname.split('.'); + + if (arr.length >= 3) { // 返回二级域名 + return `.${arr[arr.length - 2]}.${arr[arr.length - 1]}`; + } + + return hostname; +} diff --git a/packages/cookie/src/util/get-expire-date.ts b/packages/cookie/src/util/get-expire-date.ts new file mode 100644 index 000000000..37fdfd88a --- /dev/null +++ b/packages/cookie/src/util/get-expire-date.ts @@ -0,0 +1,11 @@ +export default function getExpireDate(days: number): string { + if (!days) { + return ''; // session cookie + } + + const d = new Date(); // 过期时间 + + d.setDate(d.getDate() + days); + + return d.toUTCString(); +} diff --git a/packages/cookie/src/util/set-cookie.ts b/packages/cookie/src/util/set-cookie.ts new file mode 100644 index 000000000..01165b20a --- /dev/null +++ b/packages/cookie/src/util/set-cookie.ts @@ -0,0 +1,22 @@ +import { + ICookieSetOptions +} from '../types'; + +import getExpireDate from './get-expire-date'; +import getDomain from './get-domain'; + +/** + * 设置 cookie,默认为时间为 180 天,设置 extra.days 为 0 可以保存为 session cookie + */ +export default function setCookie(name: string, value: string, { + domain = getDomain(), + path = '/', + days = 180 +}: ICookieSetOptions = {}): void { + document.cookie = [ + `${name}=${encodeURIComponent(value)}`, + `domain=${domain}`, + `path=${path}`, + `expires=${getExpireDate(days)}` + ].join(';'); +} diff --git a/packages/copy-text/.npmignore b/packages/copy-text/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/copy-text/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/copy-text/CHANGELOG.md b/packages/copy-text/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/copy-text/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/copy-text/README.md b/packages/copy-text/README.md new file mode 100755 index 000000000..c8c9ce625 --- /dev/null +++ b/packages/copy-text/README.md @@ -0,0 +1,20 @@ +@alicloud/copy-text +=== + +没有任何赘肉的复制文本的工具方法 + +# INSTALL + +``` +tnpm i @alicloud/copy-text -S +``` + +# API + +```typescript +import copyText from '@alicloud/copy-text'; + +copyText(...some...text...); +``` + +可以用 `import { COPY_SUPPORTED } from '@alicloud/copy-text;` 做预先判断。 diff --git a/packages/copy-text/breezr.config.ts b/packages/copy-text/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/copy-text/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/copy-text/jest.config.js b/packages/copy-text/jest.config.js new file mode 100644 index 000000000..1cda183da --- /dev/null +++ b/packages/copy-text/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + testEnvironment: 'node', + testMatch: [ + '/src/**/*.test.ts' + ], + collectCoverageFrom: [ + 'src/**/*.ts' + ], + moduleFileExtensions: [ + 'ts', + 'js' + ], + transform: { + '\\.(ts)$': 'ts-jest', + '^.+\\.js$': 'babel-jest' + }, + modulePaths: [ + 'src' + ] +}; diff --git a/packages/copy-text/package.json b/packages/copy-text/package.json new file mode 100755 index 000000000..afc37f858 --- /dev/null +++ b/packages/copy-text/package.json @@ -0,0 +1,46 @@ +{ + "name": "@alicloud/copy-text", + "version": "0.0.0", + "description": "Copy Text", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "console-base", + "conf" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/demo-rc-elements": "^0.0.2", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/copy-text/src/index.ts b/packages/copy-text/src/index.ts new file mode 100644 index 000000000..c35ae818c --- /dev/null +++ b/packages/copy-text/src/index.ts @@ -0,0 +1,45 @@ +const COMMAND = 'copy'; + +/** + * 传建一个临时的 textarea 用于执行复制命令 + */ +function createTextarea(text: string): HTMLTextAreaElement { + const textarea = document.createElement('textarea'); + + textarea.style.position = 'fixed'; + textarea.style.top = '0'; + textarea.style.left = '0'; + textarea.style.clip = 'rect(0, 0, 0, 0)'; + textarea.style.width = '0'; + textarea.style.height = '0'; + textarea.style.lineHeight = '0'; + textarea.style.opacity = '0'; + textarea.value = text; + + document.body.appendChild(textarea); + + return textarea; +} + +export const COPY_SUPPORTED = document.queryCommandSupported(COMMAND); + +export default function copyText(text = ''): boolean { + if (!COPY_SUPPORTED) { + return false; + } + + const textarea = createTextarea(text); + + textarea.value = text; + textarea.select(); + + try { + document.execCommand(COMMAND); + + return true; + } catch (e) { + return false; + } finally { + textarea.parentNode.removeChild(textarea); + } +} diff --git a/packages/copy-text/stories/demo-default/index.tsx b/packages/copy-text/stories/demo-default/index.tsx new file mode 100644 index 000000000..d80ce9d90 --- /dev/null +++ b/packages/copy-text/stories/demo-default/index.tsx @@ -0,0 +1,26 @@ +import React, { + ChangeEvent, + useState, + useCallback +} from 'react'; + +import { + Button, + InputText +} from '@alicloud/demo-rc-elements'; + +import copyText from '../../src'; + +export default function DemoDefault(): JSX.Element { + const [stateText, setStateText] = useState('some text'); + const handleTextChange = useCallback((e: ChangeEvent) => setStateText(e.target.value), [setStateText]); + const handleCopyText = useCallback(() => copyText(stateText), [stateText]); + + return <> + + + ; +} diff --git a/packages/copy-text/stories/index.stories.tsx b/packages/copy-text/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/copy-text/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/copy-text/tests/index.spec.ts b/packages/copy-text/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/copy-text/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/copy-text/tsconfig.json b/packages/copy-text/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/copy-text/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/dom-event-hijacker/.npmignore b/packages/dom-event-hijacker/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/dom-event-hijacker/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/dom-event-hijacker/CHANGELOG.md b/packages/dom-event-hijacker/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/dom-event-hijacker/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/dom-event-hijacker/README.md b/packages/dom-event-hijacker/README.md new file mode 100644 index 000000000..3cb512ebd --- /dev/null +++ b/packages/dom-event-hijacker/README.md @@ -0,0 +1,31 @@ +@alicloud/dom-event-hijacker +=== + +全局或局部的事件劫持器 + +# 安装 + +```bash +tnpm i -S @alicloud/dom-event-hijacker +``` + +```typescript +import hijackClickGlobal, { + hijackClickInDom +} from '@alicloud/dom-event-hijacker'; + +// 全局劫持 +hijackClickGlobal(hijackor); + +// 局部劫持 +hijackClickInDom(dom, hijackor); +``` + +```typescript +interface Interceptor { + condition: (el: HTMLElement) => T | void; // 判定条件,返回「真」即表示劫持成功,改返回值将作为 callback 的第二参数 + callback?(el: HTMLElement, conditionResult: T): void; // 劫持操作 + noPreventDefault?: boolean; // 劫持后是否不 preventDefault + noStopPropagation?: boolean; // 劫持后是否不 stopPropagation +} +``` diff --git a/packages/dom-event-hijacker/breezr.config.ts b/packages/dom-event-hijacker/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/dom-event-hijacker/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/dom-event-hijacker/package.json b/packages/dom-event-hijacker/package.json new file mode 100644 index 000000000..9d8ae45f3 --- /dev/null +++ b/packages/dom-event-hijacker/package.json @@ -0,0 +1,47 @@ +{ + "name": "@alicloud/dom-event-hijacker", + "version": "0.0.0", + "description": "DOM 事件拦截,类似于 jQuery 的 delegate", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "repository": { + "type": "git", + "url": "git@gitlab.alibaba-inc.com:aliyun/console-base.git" + }, + "author": { + "name": "jianchun.wjc", + "email": "jianchun.wjc@alibaba-inc.com" + }, + "publishConfig": { + "registry": "http://registry.npm.alibaba-inc.com" + }, + "keywords": [ + "dom", + "event", + "hijack", + "hijacker" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/demo-rc-elements": "^0.0.2", + "@types/jest": "^26.0.15", + "jest": "^26.6.3", + "react": "^16.14.0", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/dom-event-hijacker/src/const/index.ts b/packages/dom-event-hijacker/src/const/index.ts new file mode 100644 index 000000000..53b216ca3 --- /dev/null +++ b/packages/dom-event-hijacker/src/const/index.ts @@ -0,0 +1,10 @@ +import { + IHijacker +} from '../types'; + +export const DATA_CLICK_HIJACK_IGNORE = 'data-click-hijack-ignore'; + +/** + * 全局点击劫持只需要一个事件,该事件会遍历这个列表 + */ +export const GLOBAL_CLICK_HIJACKERS: IHijacker[] = []; // eslint-disable-line @typescript-eslint/no-explicit-any diff --git a/packages/dom-event-hijacker/src/hijack-click/global.ts b/packages/dom-event-hijacker/src/hijack-click/global.ts new file mode 100644 index 000000000..5518ac571 --- /dev/null +++ b/packages/dom-event-hijacker/src/hijack-click/global.ts @@ -0,0 +1,28 @@ +import { + IHijacker +} from '../types'; +import { + GLOBAL_CLICK_HIJACKERS +} from '../const'; +import createClickHandler from '../util/create-click-handler'; +import handleClickGlobal from '../util/handle-click-global'; + +// 全局劫持就靠这句代码,使用捕获阶段 +window.addEventListener('click', createClickHandler(handleClickGlobal, document.body), true); + +/** + * 注册一个全局劫持点击的事件,返回的方法可用以解除劫持。 + */ +export default function hijackClickGlobal(hijacker: IHijacker): () => void { + if (!GLOBAL_CLICK_HIJACKERS.includes(hijacker)) { // 避免同一个对象多次注册 + GLOBAL_CLICK_HIJACKERS.push(hijacker); + } + + return (): void => { + const index = GLOBAL_CLICK_HIJACKERS.findIndex(v => v === hijacker); + + if (index >= 0) { + GLOBAL_CLICK_HIJACKERS.splice(index, 1); + } + }; +} diff --git a/packages/dom-event-hijacker/src/hijack-click/in-dom.ts b/packages/dom-event-hijacker/src/hijack-click/in-dom.ts new file mode 100644 index 000000000..af48f54f0 --- /dev/null +++ b/packages/dom-event-hijacker/src/hijack-click/in-dom.ts @@ -0,0 +1,18 @@ +import { + IHijacker +} from '../types'; +import createClickHandler from '../util/create-click-handler'; +import handleClickHijacker from '../util/handle-click-hijacker'; + +/** + * 注册一个容器内的局部劫持点击事件,返回的方法可用以解除劫持。 + */ +export default function hijackClickInDom(container: HTMLElement, hijacker: IHijacker, inCapturePhase?: boolean): () => void { + const fn = createClickHandler((el, e): boolean => { + return handleClickHijacker(el, e, hijacker); + }, container); + + container.addEventListener('click', fn, inCapturePhase); + + return () => container.removeEventListener('click', fn, inCapturePhase); +} diff --git a/packages/dom-event-hijacker/src/index.ts b/packages/dom-event-hijacker/src/index.ts new file mode 100644 index 000000000..a122668fe --- /dev/null +++ b/packages/dom-event-hijacker/src/index.ts @@ -0,0 +1,19 @@ +import { + IHijacker as Interceptor +} from './types'; +import { + DATA_CLICK_HIJACK_IGNORE +} from './const'; +import hijackClickGlobal from './hijack-click/global'; +import hijackClickInDom from './hijack-click/in-dom'; + +export default hijackClickGlobal; + +export { + DATA_CLICK_HIJACK_IGNORE, + hijackClickInDom +}; + +export type { + Interceptor +}; diff --git a/packages/dom-event-hijacker/src/types/index.ts b/packages/dom-event-hijacker/src/types/index.ts new file mode 100644 index 000000000..e24b55e51 --- /dev/null +++ b/packages/dom-event-hijacker/src/types/index.ts @@ -0,0 +1,10 @@ +export interface IHijacker { + condition: (el: HTMLElement) => T | void; // 判定条件,返回「真」即表示劫持成功,改返回值将作为 callback 的第二参数 + callback?(el: HTMLElement, conditionResult: T): void; // 劫持操作 + noPreventDefault?: boolean; // 劫持后是否不 preventDefault + noStopPropagation?: boolean; // 劫持后是否不 stopPropagation +} + +export interface IFnClickHandler { + (el: HTMLElement, e: MouseEvent): boolean; +} diff --git a/packages/dom-event-hijacker/src/util/create-click-handler.ts b/packages/dom-event-hijacker/src/util/create-click-handler.ts new file mode 100644 index 000000000..a413e9822 --- /dev/null +++ b/packages/dom-event-hijacker/src/util/create-click-handler.ts @@ -0,0 +1,22 @@ +import { + IFnClickHandler +} from '../types'; + +/** + * 创建劫持点击事件的方法(全局劫持和局部劫持的机制只有处理方法和容器是不一样的) + */ +export default function createClickHandler(fn: IFnClickHandler, container: HTMLElement): (e: MouseEvent) => void { + return (e: MouseEvent): void => { + let el: HTMLElement | null = e.target as HTMLElement; + + while (el && el !== container) { + const hijacked = fn(el, e); + + if (hijacked) { + break; + } + + el = el.parentElement; + } + }; +} diff --git a/packages/dom-event-hijacker/src/util/handle-click-global.ts b/packages/dom-event-hijacker/src/util/handle-click-global.ts new file mode 100644 index 000000000..a91d43e4c --- /dev/null +++ b/packages/dom-event-hijacker/src/util/handle-click-global.ts @@ -0,0 +1,20 @@ +import { + GLOBAL_CLICK_HIJACKERS +} from '../const'; + +import handleClickHijacker from './handle-click-hijacker'; + +/** + * 处理全局劫持 + */ +export default function handleClickGlobal(el: HTMLElement, e: MouseEvent): boolean { + let hijacked = false; + + GLOBAL_CLICK_HIJACKERS.forEach(v => { + if (handleClickHijacker(el, e, v)) { + hijacked = true; + } + }); + + return hijacked; +} diff --git a/packages/dom-event-hijacker/src/util/handle-click-hijacker.ts b/packages/dom-event-hijacker/src/util/handle-click-hijacker.ts new file mode 100644 index 000000000..c3bdafbc3 --- /dev/null +++ b/packages/dom-event-hijacker/src/util/handle-click-hijacker.ts @@ -0,0 +1,41 @@ +import { + IHijacker +} from '../types'; +import { + DATA_CLICK_HIJACK_IGNORE +} from '../const'; + +/** + * 处理一个 hijacker 对象 + */ +export default function handleClickHijacker(el: HTMLElement, e: MouseEvent, hijacker: IHijacker): boolean { + if (el.hasAttribute(DATA_CLICK_HIJACK_IGNORE)) { + return false; + } + + const { + condition, + callback, + noPreventDefault, + noStopPropagation + } = hijacker; + const result = condition(el); + + if (!result) { + return false; + } + + if (callback) { + callback(el, result); + } + + if (!noPreventDefault) { + e.preventDefault(); + } + + if (!noStopPropagation) { + e.stopPropagation(); + } + + return true; +} diff --git a/packages/dom-event-hijacker/stories/demo-default/index.tsx b/packages/dom-event-hijacker/stories/demo-default/index.tsx new file mode 100644 index 000000000..31f63a36b --- /dev/null +++ b/packages/dom-event-hijacker/stories/demo-default/index.tsx @@ -0,0 +1,53 @@ +/* eslint-disable no-console */ +import React, { + useRef, + useEffect +} from 'react'; + +import { + Button, + P +} from '@alicloud/demo-rc-elements'; + +import hijackClickGlobal, { + hijackClickInDom +} from '../../src'; + +export default function DemoDefault(): JSX.Element { + const refP = useRef(null); + + useEffect((): () => void => hijackClickGlobal({ + condition(e) { + return e.tagName === 'BUTTON'; + }, + callback(el) { + console.info(el); + } + }), []); + + useEffect((): (() => void) | void => { + if (refP.current) { + return hijackClickInDom(refP.current, { + condition(e) { + return e.tagName === 'CODE'; + }, + callback(el) { + console.info(el); + } + }); + } + }, []); + + return <> + + + + +

+ 111 + 222 + 333 + 444 +

+ ; +} diff --git a/packages/dom-event-hijacker/stories/index.stories.tsx b/packages/dom-event-hijacker/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/dom-event-hijacker/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/dom-event-hijacker/tests/index.spec.ts b/packages/dom-event-hijacker/tests/index.spec.ts new file mode 100644 index 000000000..acf749c95 --- /dev/null +++ b/packages/dom-event-hijacker/tests/index.spec.ts @@ -0,0 +1,11 @@ +import TheRc from '../src'; + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + [TheRc].forEach(v => { + expect(typeof v).toBe('function'); + }); + }); +}); diff --git a/packages/dom-event-hijacker/tsconfig.json b/packages/dom-event-hijacker/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/dom-event-hijacker/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/fetcher-demo-helpers/src/rc/demo-mock-security/index.tsx b/packages/fetcher-demo-helpers/src/rc/demo-mock-security/index.tsx index 0fe6bb09c..534ad9257 100644 --- a/packages/fetcher-demo-helpers/src/rc/demo-mock-security/index.tsx +++ b/packages/fetcher-demo-helpers/src/rc/demo-mock-security/index.tsx @@ -38,8 +38,10 @@ export default function FetcherDemoRcMockSecurity(): JSX.Element { const win = window as IWin; if (!win.UA_Opt) { + const LOG_VAL = 'collina_fucking_by_boshit'; + win.UA_Opt = { - LogVal: 'collina_fucking_by_boshit', + LogVal: LOG_VAL, Token: `${Date.now()}:${Math.random()}`, MaxMCLog: 10, MaxKSLog: 20, @@ -51,6 +53,8 @@ export default function FetcherDemoRcMockSecurity(): JSX.Element { Flag: 97422, isSendError: 1 }; + + win[LOG_VAL] = ''; } injectScript('//acjs.aliyun.com/js/uab.js'); diff --git a/packages/fetcher-demo-helpers/src/util/inject-script.ts b/packages/fetcher-demo-helpers/src/util/inject-script.ts index 209b1f7c1..fc51b21c5 100644 --- a/packages/fetcher-demo-helpers/src/util/inject-script.ts +++ b/packages/fetcher-demo-helpers/src/util/inject-script.ts @@ -1,7 +1,6 @@ export default function injectScript(src: string): void { const sc = document.createElement('script'); - sc.src = src; - sc.setAttribute('crossorigin', ''); + sc.src = src; // 不要随便加 crossorigin 否则会报「CORS Missing Allow Origin」 document.head.appendChild(sc); } diff --git a/packages/logger-sls/.npmignore b/packages/logger-sls/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/logger-sls/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/logger-sls/CHANGELOG.md b/packages/logger-sls/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/logger-sls/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/logger-sls/README.md b/packages/logger-sls/README.md new file mode 100755 index 000000000..9490f8e56 --- /dev/null +++ b/packages/logger-sls/README.md @@ -0,0 +1,148 @@ +@alicloud/logger-sls +=== + +> 阿里云日志服务 SLS Web Tracking 日志记录方法的工厂,以及工厂的工厂。 +> 工厂是因为,SLS 要求必须要有 `project` 及对应的 `endpoint` 和 `logstore`。 + +# INSTALL + +``` +tnpm i @alicloud/logger-sls -S +``` + +# API + +```typescript +export default function createLogger(options: FactoryOptions): LogFn; +export function createLoggerFactory(factoryDefaultParams: TDefaultParams): FactoryFn; +``` + +其中 `FactoryOptions` 的类型及解释如下: + +```typescript +interface FactoryOptions { + /** + * logstore 所在的 SLS project + */ + project: string; + /** + * project 的外网访问域名,在 SLS 控制台 project 概览页可以找到, + * 如 `cn-hangzhou.log.aliyuncs.com`(仅跟 project 所在地域有关) + */ + endpoint: string; + /** + * SLS project 下的 logstore,必须开通 Web Tracking 功能,日志记录的存储点 + */ + logstore: string; + /** + * APIVersion,不知所谓的参数,但必需,说是保留字段, + * 默认 `0.6.0`(文档中的版本号) + */ + apiVersion?: string; + /** + * 默认参数,避免每次都要传,可以是静态数据或产生动态数据的方法,这些参数可以覆盖自动记录的参数, + * 但会被日志方法的第二个参数 `params` 中对应的字段覆盖 + */ + defaultParams?: Record | (() => Record); +} +``` + +`TDefaultParams` 的类型可以是 `Record`,也可以是 `() => Record` 方法。 + +你可以: + +1. 使用 `createLogger` 创建自己的专属 log 方法,直接在项目中使用 +2. 使用 `createLoggerFactory` 创建带更多默认参数的 `createLogger` 方法(通常你需要封成一个 npm 包) + +# 创建专属 SLS Logger + +对于一个项目,一般你只需要一个 log 方法。不要在使用的地方进行创建,你需要一个唯一的实例。 + +比如在你的 `util` 下,新建一个文件叫 `log-sls.ts`: + +```typescript +import createLogger from '@alicloud/logger-sls'; + +export default createLogger(options); +``` + +## 自动记录的参数 + +### SLS 自动记录的数据 + +* `__source__` IP +* `__tag__:__client_ip__` IP +* `__tag__:__receive_time__` 日志落库时间,不是毫秒时间戳,而是秒,需要乘以 1000 后再 `new Date` + +以上三个不在请求中,应该是落库的时候写的;还有一个在请求中的参数 `APIVersion`,它的值一般就是 `0.6.0`。 + +### `@alicloud/logger-sls` 自动记录的数据 + +为了区分用户传的参数和「默认」参数,这里默认的参数从 `1.0.0` 开始该成全大写的,之前是小骆驼格式。 + +这里为每一条日志自动记录浏览器相关的数据以及记录日志的时间,并对其进行分组。 + +参数名 | 含义 | 说明 +--- | --- | --- +`LOCATION_HOST` | 当前的 `window.location.host` | +`LOCATION_PATHNAME` | 当前的 `window.location.pathName` | +`LOCATION_HASH` | 当前的 `window.location.hash` | +`TIME` | 当前的 `Date.now()` | 日志提交的时间戳 +`GROUP` | 日志分组,`DEBUG | LOG | INFO | WARN | ERROR | FATAL | BIZ` | 默认 `LOG` + +# 创建一个带更多默认参数的工厂 + +针对特定的场景(比如阿里云控制台体系),需要记录用户相关的信息,这个时候,你需要一个新的 `createLogger`,你可以封装特定的 npm 包,如 `@alicloud/console-logger-sls`,它的输出可能是这样的: + +```typescript +import { + createLoggerFactory +} from '@alicloud/logger-sls'; + +function getDefaultParams() { + return { + userId: 'xx', + userName: 'xx' + }; +} + +export default createLoggerFactory(getDefaultParams); +``` + +而使用者跟直接是用 `createLogger` 一样,不同的是,默认参数中会多出 `userId` 等参数。 + +# log 方法 + +无论通过 `createLogger` 直接得到的 log 方法,还是通过 `createLoggerFactory` 间接得到的 `log`,它们签名是一样的: + +```typescript +type TFnLogGrouped =

(topic: string, params?: P) => void; + +export interface IFnLog { +

(topic: string, params?: P, group?: string): void; + debug: TFnLogGrouped; + log: TFnLogGrouped; + info: TFnLogGrouped; + warn: TFnLogGrouped; + error: TFnLogGrouped; + fatal: TFnLogGrouped; + biz: TFnLogGrouped; +} +``` + +这里对 `params` 做了泛型定义,是为了希望约束参数的场景。 + +## 使用 log 方法 + +假设 `:` 是你项目下 `src` 的 alias。 + +```typescript +import log from ':/util/log-sls'; + +log(topic); +log(topic, { + p1, + p2 +}); +log(topic, { ... }); +``` diff --git a/packages/logger-sls/breezr.config.ts b/packages/logger-sls/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/logger-sls/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/logger-sls/jest.config.js b/packages/logger-sls/jest.config.js new file mode 100644 index 000000000..1cda183da --- /dev/null +++ b/packages/logger-sls/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + testEnvironment: 'node', + testMatch: [ + '/src/**/*.test.ts' + ], + collectCoverageFrom: [ + 'src/**/*.ts' + ], + moduleFileExtensions: [ + 'ts', + 'js' + ], + transform: { + '\\.(ts)$': 'ts-jest', + '^.+\\.js$': 'babel-jest' + }, + modulePaths: [ + 'src' + ] +}; diff --git a/packages/logger-sls/package.json b/packages/logger-sls/package.json new file mode 100755 index 000000000..8c8b87ea3 --- /dev/null +++ b/packages/logger-sls/package.json @@ -0,0 +1,53 @@ +{ + "name": "@alicloud/logger-sls", + "version": "0.0.0", + "description": "SLS logger factory", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "logger", + "sls", + "factory" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/demo-rc-elements": "^0.0.2", + "@types/jest": "^26.0.15", + "@types/qs": "^6.9.5", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "styled-components": "^5.2.1", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "dependencies": { + "@alicloud/fetcher-fetch": "^0.0.0", + "qs": "^6.9.4" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/logger-sls/src/factory/create-factory.ts b/packages/logger-sls/src/factory/create-factory.ts new file mode 100644 index 000000000..d7b85e1a6 --- /dev/null +++ b/packages/logger-sls/src/factory/create-factory.ts @@ -0,0 +1,29 @@ +import { + TDefaultParams, + IFactoryOptions, + TFnOnBeforeSend, + TFnFactory +} from '../types'; +import mergeDefaultParams from '../util/merge-default-params'; +import mergeOnBeforeSend from '../util/merge-on-before-send'; + +import createLogger from './create-logger'; + +/** + * 创建 `createLogger` 方法的方法,对期望扩展默认参数的场景做了规范。 + * + * 一般不会在项目中直接使用,而是用它来生成一个 npm 包。 + */ +export default function createFactory(factoryDefaultParams: TDefaultParams, factoryOnBeforeSend?: TFnOnBeforeSend): TFnFactory { + return ({ + defaultParams, + onBeforeSend, + ...options + }: IFactoryOptions) => { + return createLogger({ + ...options, + defaultParams: mergeDefaultParams(factoryDefaultParams, defaultParams), + onBeforeSend: mergeOnBeforeSend(factoryOnBeforeSend, onBeforeSend) + }); + }; +} diff --git a/packages/logger-sls/src/factory/create-logger.ts b/packages/logger-sls/src/factory/create-logger.ts new file mode 100644 index 000000000..b994c5187 --- /dev/null +++ b/packages/logger-sls/src/factory/create-logger.ts @@ -0,0 +1,102 @@ +import qs from 'qs'; + +import fetch from '@alicloud/fetcher-fetch'; + +import { + IFactoryOptions, + ILogOptionsQuick, + ILogOptions, + IFnLog +} from '../types'; +import getSystemParams from '../util/get-system-params'; + +function noop(): void {} // eslint-disable-line @typescript-eslint/no-empty-function + +function doLog(logUrl: string): void { + fetch(logUrl, { + timeout: 20000, + // SLS 如果要启用 web log,必须 CORS,但不允许带 cookie,所以不可用 `include`,否则会报错: + // 「Credential is not supported if the CORS header ‘Access-Control-Allow-Origin’ is ‘*’」 + credentials: 'omit' + }).catch(noop); +} +/** + * 创建 SLS 日志方法,一般直接用于项目。 + * + * 参考:Web Tracking + */ +export default function createLogger(factoryOptions: IFactoryOptions): IFnLog { + const { + project, + endpoint, + logstore, + apiVersion = '0.6.0', + defaultParams, + suppressTime = 10000, + onBeforeSend + } = factoryOptions; + const BASE_LOG_URL = `//${project}.${endpoint}/logstores/${logstore}/track`; + // suppressTime 规定的时间内积压的日志,将被定时器设置为 null,null 之后就不再积压,而是立即上报 + let suppressedLogUrls: string[] | null = []; + + // 压制时间之后,上报积压的日志,并把 suppressedLogUrls 设置为 null 取消压制 + setTimeout(() => { + if (suppressedLogUrls) { + suppressedLogUrls.forEach(doLog); + suppressedLogUrls = null; + } + }, suppressTime); + + function sls

(topic: string, params?: P, options: ILogOptions = {}): void { + if (onBeforeSend && onBeforeSend(factoryOptions) === false) { + return; + } + + const paramsDefault = typeof defaultParams === 'function' ? defaultParams() : defaultParams; + const logUrl = `${BASE_LOG_URL}?${qs.stringify({ + APIVersion: apiVersion, + GROUP: options.group || 'LOG', + ...getSystemParams(), + ...paramsDefault, + ...params, + __topic__: topic + })}`; + + if (suppressedLogUrls && !options.instant) { + suppressedLogUrls.push(logUrl); + } else { + doLog(logUrl); + } + } + + sls.debug =

(topic: string, params?: P, options?: ILogOptionsQuick): void => sls

(topic, params, { + ...options, + group: 'DEBUG' + }); + sls.log =

(topic: string, params?: P, options?: ILogOptionsQuick): void => sls

(topic, params, { + ...options, + group: 'LOG' + }); + sls.info =

(topic: string, params?: P, options?: ILogOptionsQuick): void => sls

(topic, params, { + ...options, + group: 'INFO' + }); + sls.warn =

(topic: string, params?: P, options?: ILogOptionsQuick): void => sls

(topic, params, { + ...options, + group: 'WARN' + }); + sls.error =

(topic: string, params?: P, options?: ILogOptionsQuick): void => sls

(topic, params, { + ...options, + group: 'ERROR' + }); + sls.fatal =

(topic: string, params?: P, options?: ILogOptionsQuick): void => sls

(topic, params, { + ...options, + group: 'FATAL' + }); + sls.biz =

(topic: string, params?: P, options?: ILogOptionsQuick): void => sls

(topic, params, { + ...options, + group: 'BIZ' + }); + + return sls; +} diff --git a/packages/logger-sls/src/index.ts b/packages/logger-sls/src/index.ts new file mode 100644 index 000000000..f5489bc6d --- /dev/null +++ b/packages/logger-sls/src/index.ts @@ -0,0 +1,19 @@ +import { + IFactoryOptions as FactoryOptions, + TFnFactory as FactoryFn, + IFnLog as LogFn +} from './types'; +import createLogger from './factory/create-logger'; +import createLoggerFactory from './factory/create-factory'; + +export default createLogger; + +export type { + FactoryOptions, + FactoryFn, + LogFn +}; + +export { + createLoggerFactory +}; diff --git a/packages/logger-sls/src/types/index.ts b/packages/logger-sls/src/types/index.ts new file mode 100644 index 000000000..e18e5e23d --- /dev/null +++ b/packages/logger-sls/src/types/index.ts @@ -0,0 +1,75 @@ +export type TFnDefaultParams = () => Record; + +export type TDefaultParams = Record | TFnDefaultParams; + +export type TFnOnBeforeSend = (options: IFactoryOptions) => void | boolean; + +export interface IFactoryOptions { + /** + * logstore 所在的 SLS project + */ + project: string; + /** + * project 的外网访问域名,在 SLS 控制台 project 概览页可以找到, + * 如 `cn-hangzhou.log.aliyuncs.com`(仅跟 project 所在地域有关) + */ + endpoint: string; + /** + * SLS project 下的 logstore,必须开通 Web Tracking 功能,日志记录的存储点 + */ + logstore: string; + /** + * APIVersion,不知所谓的参数,但必需,说是保留字段, + * 默认 `0.6.0`(文档中的版本号) + */ + apiVersion?: string; + /** + * 默认参数,避免每次都要传,可以是静态数据或产生动态数据的方法,这些参数可以覆盖自动记录的参数, + * 但会被日志方法的第二个参数 `params` 中对应的字段覆盖 + */ + defaultParams?: TDefaultParams; + /** + * 真正开始记录日志的等待时间(默认 10000ms,即 10s),保证业务请求先行。 + * 网络请求一般在页面的一开始最密集,如果日志在这时上报会造成网络阻塞而产生性能问题。 + * 日志不是强需求,不能压过业务,要业务先行,方法是先积压着,等到时间到了,再把积压着的日志一起上报。 + * 等待时间之后,日志的上报就是即时的。 + */ + suppressTime?: number; + /** + * 上报之前进行判断是否继续,返回 false 以阻止上报 + * + * 在某些场景下需要禁用日志上报功能,比如国外禁止将日志上报到国内的 logstore + */ + onBeforeSend?: TFnOnBeforeSend; +} + +/** + * sls 快捷方法额外参数 + */ +export interface ILogOptionsQuick { + /** + * 默认遵循 suppressTime 的规定,但如果这条日志比较重要,是应用在初始化的时候发送的, + * 需要拿它来算 PvUv 可以指定 instant 为 true + */ + instant?: boolean; +} + +/** + * sls log 方法额外参数 + */ +export interface ILogOptions extends ILogOptionsQuick { + group?: string; +} + +export interface IFnLog { +

(topic: string, params?: P, options?: ILogOptions): void; + debug

(topic: string, params?: P, options?: ILogOptionsQuick): void; + log

(topic: string, params?: P, options?: ILogOptionsQuick): void; + info

(topic: string, params?: P, options?: ILogOptionsQuick): void; + warn

(topic: string, params?: P, options?: ILogOptionsQuick): void; + error

(topic: string, params?: P, options?: ILogOptionsQuick): void; + fatal

(topic: string, params?: P, options?: ILogOptionsQuick): void; + biz

(topic: string, params?: P, options?: ILogOptionsQuick): void; +} + +export type TFnFactory = (options: IFactoryOptions) => IFnLog; diff --git a/packages/logger-sls/src/util/get-system-params.ts b/packages/logger-sls/src/util/get-system-params.ts new file mode 100644 index 000000000..9578c9c29 --- /dev/null +++ b/packages/logger-sls/src/util/get-system-params.ts @@ -0,0 +1,43 @@ +import { + getUaBrowser, + getUaOs +} from './ua'; + +interface ISystemParams { + BROWSER: string; + BROWSER_VERSION: string; + OS: string; + OS_VERSION: string; + IN_IFRAME: boolean; + TIME: number; + REFERRER: string; + LOCATION_HOST: string; + LOCATION_PATHNAME: string; + LOCATION_SEARCH: string; // 去掉 ? + LOCATION_HASH: string; // 去掉 # +} + +const IN_IFRAME: boolean = window !== window.top; +const [BROWSER, BROWSER_VERSION] = getUaBrowser(); +const [OS, OS_VERSION] = getUaOs(); + +/** + * 获取系统参数(最基础的日志参数) + */ +export default function getSystemParams(): ISystemParams { + return { + BROWSER, + BROWSER_VERSION, + OS, + OS_VERSION, + IN_IFRAME, + TIME: Date.now(), // 浏览器时间,日志其实有自己的时间 `__tag__:__receive_time__`,但它是秒,且它仅表示服务端接收到的时间 + REFERRER: document.referrer, + LOCATION_HOST: window.location.host, + LOCATION_PATHNAME: window.location.pathname, + LOCATION_SEARCH: window.location.search.replace('?', '&') // 保证下一个正则不会误伤 + .replace(/&(?:spm|scm|accounttraceid)=[^&]+/g, '') // 剔除 spm、scm、accounttraceid 等非应用参数 + .replace(/^&+/, ''), // 去掉起首的 &,让 search 更纯粹 + LOCATION_HASH: window.location.hash.substring(1) + }; +} diff --git a/packages/logger-sls/src/util/merge-default-params.ts b/packages/logger-sls/src/util/merge-default-params.ts new file mode 100644 index 000000000..f15bf9d7f --- /dev/null +++ b/packages/logger-sls/src/util/merge-default-params.ts @@ -0,0 +1,29 @@ +import { + TDefaultParams +} from '../types'; + +/** + * 整合默认参数 + */ +export default function mergeDefaultParams(factoryDefaultParams?: TDefaultParams, defaultParams?: TDefaultParams): TDefaultParams | undefined { + if (!defaultParams || !factoryDefaultParams) { + return factoryDefaultParams || defaultParams; + } + + if (typeof factoryDefaultParams === 'function' || typeof defaultParams === 'function') { + return () => { + const paramsDefaultInFactory = typeof factoryDefaultParams === 'function' ? factoryDefaultParams() : factoryDefaultParams; + const paramsDefault = typeof defaultParams === 'function' ? defaultParams() : defaultParams; + + return { + ...paramsDefaultInFactory, + ...paramsDefault + }; + }; + } + + return { + ...factoryDefaultParams, + ...defaultParams + }; +} diff --git a/packages/logger-sls/src/util/merge-on-before-send.ts b/packages/logger-sls/src/util/merge-on-before-send.ts new file mode 100644 index 000000000..a6e0b3076 --- /dev/null +++ b/packages/logger-sls/src/util/merge-on-before-send.ts @@ -0,0 +1,18 @@ +import { + TFnOnBeforeSend, + IFactoryOptions +} from '../types'; + +export default function mergeOnBeforeSend(factoryOnBeforeSend?: TFnOnBeforeSend, onBeforeSend?: TFnOnBeforeSend): TFnOnBeforeSend | undefined { + if (!factoryOnBeforeSend || !onBeforeSend) { + return onBeforeSend || factoryOnBeforeSend; + } + + return (options: IFactoryOptions): boolean | void => { + if (factoryOnBeforeSend(options) === false) { + return false; + } + + return onBeforeSend(options); + }; +} diff --git a/packages/logger-sls/src/util/ua.ts b/packages/logger-sls/src/util/ua.ts new file mode 100644 index 000000000..8af1d040e --- /dev/null +++ b/packages/logger-sls/src/util/ua.ts @@ -0,0 +1,181 @@ +const ua = window.navigator.userAgent; + +// Windows 的标识一般是「Windows NT x.y」,这里把 x.y 映射成耳熟能详的 Windows 版本 +const WINDOWS_NT_TO_VERSION: Record = { + 'NT 5.0': '2000', + 'NT 5.1': 'XP', + 'NT 5.2': 'XP', + 'NT 6.0': 'Vista', + 'NT 6.1': '7', + 'NT 6.2': '8', + 'NT 6.3': '8.1', + 'NT 6.4': '10', + 'NT 10.0': '10' +}; + +/** + * 从 UA 中获取 OS 信息,不需要精确,覆盖 95% 即可 + */ +export function getUaOs(): [string, string] { + // Windows + // 标识 `Windows NT x.y`,其他的 Windows ME、Windows 98 就不管了 + if (/Windows NT ([\w.]+)/i.test(ua)) { + const ntVersion = `NT ${RegExp.$1}`; + + return ['Windows', WINDOWS_NT_TO_VERSION[ntVersion] || ntVersion]; + } + + // 古旧 Windows + if (/Windows/i.test(ua)) { + return ['Windows', 'OLD']; + } + + // MacOS + // e.g. Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0 + // Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15 + if (/Mac OS X ([\w.]+)/i.test(ua)) { + return ['MacOS', RegExp.$1]; + } + + // Android + // e.g. Mozilla/5.0 (Linux; Android 7.0; Pixel C Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36 + if (/Android ([\w.]+)+/i.test(ua)) { + return ['Android', RegExp.$1]; + } + + // Ubuntu + // e.g. Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1 + if (/Ubuntu/i.test(ua)) { + return ['Ubuntu', '']; + } + + // ChromeOS + // e.g. Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 + if (/CrOS/i.test(ua)) { + return ['ChromeOS', '']; + } + + // FreeBSD + // e.g. Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/536.5 (KHTML like Gecko) Chrome/19.0.1084.56 Safari/1EA69 + if (/FreeBSD/i.test(ua)) { + return ['FreeBSD', '']; + } + + // Linux + // e.g. Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1 + if (/Linux/i.test(ua)) { + return ['Linux', '']; + } + + return ['OTHER', '?']; +} + +/** + * 从 UA 中获取浏览器信息,不需要精确,覆盖 95% 即可 + */ +export function getUaBrowser(): [string, string] { + // Edge + // http://useragentstring.com/pages/useragentstring.php?name=Edge + // e.g. Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363 + if (/Edge\/([\w.]+)/i.test(ua)) { + return ['Edge', RegExp.$1]; + } + + // IE11 + // e.g. Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; ...; rv:11.0) like Gecko + if (/Trident\/7\.0;/i.test(ua)) { + return ['IE', '11.0']; + } + + // IE + // http://useragentstring.com/pages/useragentstring.php?name=Internet+Explorer + // e.g. Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko + if (/MSIE\s+([\w.]+)/i.test(ua)) { + return ['IE', RegExp.$1]; + } + + // Opera Presto 引擎时期版本 + // http://useragentstring.com/pages/useragentstring.php?name=Opera + // e.g. Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16.2 + // e.g. Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50 + if (/Opera[/ ]([\w.]+)/i.test(ua)) { + return ['Opera', RegExp.$1]; + } + + // Opera + // e.g. Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 OPR/67.0.3575.79 + if (/OPR\/([\w.]+)/i.test(ua)) { + return ['Opera', RegExp.$1]; + } + + // Firefox + // http://useragentstring.com/pages/useragentstring.php?name=Firefox + // e.g. Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0 + if (/Firefox\/([\w.]+)/i.test(ua)) { + return ['Firefox', RegExp.$1]; + } + + // Safari + // e.g. Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15 + if (/Version\/([\w.]+)\s+Safari\//i.test(ua)) { + return ['Safari', RegExp.$1]; + } + + // Yandex + // e.g. Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 YaBrowser/20.2.0.1145 Yowser/2.5 Safari/537.36 + if (/YaBrowser\/([\w.]+)/i.test(ua)) { + return ['Yandex', RegExp.$1]; + } + + // 淘宝 + // e.g. Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11 + if (/TaoBrowser\/([\w.]+)/i.test(ua)) { + return ['TaoBao', RegExp.$1]; + } + + // 猎豹 + // e.g. Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER + if (/LBBROWSER/i.test(ua)) { + return ['LieBao', RegExp.$1]; + } + + // QQ + // e.g. Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .... QQBrowser/7.0.3698.400) + if (/QQBrowser\/([\w.]+)/i.test(ua)) { + return ['QQ', RegExp.$1]; + } + + // 搜狗 + // e.g. Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0 + if (/\sSE\s([\w.]+)/i.test(ua)) { + return ['SouGou', RegExp.$1]; + } + + // 傲游 + // Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36 + if (/Maxthon\/([\w.]+)/i.test(ua)) { + return ['Maxthon', RegExp.$1]; + } + + // UC + // e.g. Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36 + if (/UBrowser\/([\w.]+)/i.test(ua)) { + return ['UC', RegExp.$1]; + } + + // HeadlessChrome + // e.g. Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/69.0.3494.0 Safari/537.36 + if (/HeadlessChrome\/([\w.]+)/i.test(ua)) { + return ['HeadlessChrome', RegExp.$1]; + } + + // Chrome + // 几乎所有基于它的都会被判成 Chrome... + // http://useragentstring.com/pages/useragentstring.php?name=Chrome + // e.g. Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 + if (/\sChrome\/([\w.]+)/i.test(ua)) { + return ['Chrome', RegExp.$1]; + } + + return ['OTHER', '?']; +} diff --git a/packages/logger-sls/stories/demo-default/index.tsx b/packages/logger-sls/stories/demo-default/index.tsx new file mode 100644 index 000000000..76fb2c199 --- /dev/null +++ b/packages/logger-sls/stories/demo-default/index.tsx @@ -0,0 +1,37 @@ +import React from 'react'; + +import { + P, + Button +} from '@alicloud/demo-rc-elements'; + +import createLogger from '../../src'; + +const sls = createLogger({ + project: 'boshit-test-sls', + endpoint: 'cn-hangzhou.log.aliyuncs.com', + logstore: 'nbtest', + defaultParams() { + return { + fuck: Date.now() + }; + } +}); + +function testSls(): void { + sls('@alicloud/logger-sls'); + sls.debug('@alicloud/logger-sls/debug'); + sls.log('@alicloud/logger-sls/log'); + sls.info('@alicloud/logger-sls/info'); + sls.warn('@alicloud/logger-sls/warn'); + sls.error('@alicloud/logger-sls/error'); + sls.fatal('@alicloud/logger-sls/fatal'); + sls.biz('@alicloud/logger-sls/biz'); +} + +export default function DemoDefault(): JSX.Element { + return <> +

看 Console

+ + ; +} diff --git a/packages/logger-sls/stories/index.stories.tsx b/packages/logger-sls/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/logger-sls/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/logger-sls/tests/index.spec.ts b/packages/logger-sls/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/logger-sls/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/logger-sls/tsconfig.json b/packages/logger-sls/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/logger-sls/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/storage-factory/.npmignore b/packages/storage-factory/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/storage-factory/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/storage-factory/CHANGELOG.md b/packages/storage-factory/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/storage-factory/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/storage-factory/README.md b/packages/storage-factory/README.md new file mode 100755 index 000000000..a3a8783e9 --- /dev/null +++ b/packages/storage-factory/README.md @@ -0,0 +1,70 @@ +@alicloud/storage-factory +=== + +# WHY + +一个应用最好有自己的一个 storage 的主 key 作为其统一的 namespace 对 storage 下的字段进行管理,有如下好处: + +- 避免 localStorage / sessionStorage 的泛滥 +- 避免应用内取名冲突 +- 可以存取各种类型的数据,而不是需要转换过才能用的字符串 +- 不必担心出错 + +# API + +这是一个工厂方法,生产一个方法: + +```js +import storageFactory from '@alicloud/storage-factory'; + +export default storageFactory(`${app_name}@${user_id}`); // 最好能跟登录用户挂钩,默认用的是 locationStorage + +// 如果还需要 sessionStorage 的操作,可以这样: +export const session = storageFactory(`${app_name}@${user_id}`, true); +``` + +工厂方法生产出来的方法是多态的: + +```typescript +// 获取全部,没有什么实际意义,只在 debug 时可以用 +function storage(): Record; + +// 获取 key 对应的值 +export interface IFnStorageGetter { + (key: string): T; +} + +// 删除 key 对应的值 +export interface IFnStorageClearer { + (key: string, value: null): void; +} + +// 设置 key 对应的值 +export interface IFnStorageSetter { + (key: string, value: T): void; +} +``` + +# EXAMPLE + +1. 在应用下生产「唯一」的 storage 模块,比如 `util/storage.js` + +```js +import storageFactory from '@alicloud/storage-factory'; + +export default storageFactory(`${app_name}@${user_id}`); // 最好能跟登录用户挂钩,默认用的是 locationStorage + +// 如果还需要 sessionStorage 的操作,可以这样: +export const session = storageFactory(`${app_name}@${user_id}`, true); +``` + +2. 使用 + +```js +import storage from ':util/storage'; + +storage(); // 获取全部,没有什么实际意义 +storage(key); // 获取某个值 +storage(key, val); // 设置某值 +storage(key, null); // 清除某值 +``` diff --git a/packages/storage-factory/breezr.config.ts b/packages/storage-factory/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/storage-factory/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/storage-factory/jest.config.js b/packages/storage-factory/jest.config.js new file mode 100644 index 000000000..1cda183da --- /dev/null +++ b/packages/storage-factory/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + testEnvironment: 'node', + testMatch: [ + '/src/**/*.test.ts' + ], + collectCoverageFrom: [ + 'src/**/*.ts' + ], + moduleFileExtensions: [ + 'ts', + 'js' + ], + transform: { + '\\.(ts)$': 'ts-jest', + '^.+\\.js$': 'babel-jest' + }, + modulePaths: [ + 'src' + ] +}; diff --git a/packages/storage-factory/package.json b/packages/storage-factory/package.json new file mode 100755 index 000000000..d49160914 --- /dev/null +++ b/packages/storage-factory/package.json @@ -0,0 +1,45 @@ +{ + "name": "@alicloud/storage-factory", + "version": "0.0.0", + "description": "Storage factory - use storage with types", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "storage", + "factory" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/storage-factory/src/index.ts b/packages/storage-factory/src/index.ts new file mode 100644 index 000000000..9ed63832a --- /dev/null +++ b/packages/storage-factory/src/index.ts @@ -0,0 +1,8 @@ +import { + TFnStorage +} from './types'; +import createStorageFn from './util/create-storage-fn'; + +export default function(wholeDataKey: string, session?: boolean): TFnStorage { + return createStorageFn(wholeDataKey, session ? window.sessionStorage : window.localStorage); +} diff --git a/packages/storage-factory/src/types/index.ts b/packages/storage-factory/src/types/index.ts new file mode 100644 index 000000000..b5d59e1c8 --- /dev/null +++ b/packages/storage-factory/src/types/index.ts @@ -0,0 +1,19 @@ +export type TDataWhole = Record; + +export interface IFnStorageGetAll { + (): TDataWhole; +} + +export interface IFnStorageGetter { + (key: string): T; +} + +export interface IFnStorageClearer { + (key: string, value: null): void; +} + +export interface IFnStorageSetter { + = unknown>(key: string, value: T): void; +} + +export type TFnStorage = IFnStorageGetAll & IFnStorageGetter & IFnStorageClearer & IFnStorageSetter; diff --git a/packages/storage-factory/src/util/create-storage-fn.ts b/packages/storage-factory/src/util/create-storage-fn.ts new file mode 100644 index 000000000..614449ae1 --- /dev/null +++ b/packages/storage-factory/src/util/create-storage-fn.ts @@ -0,0 +1,42 @@ +import { + TDataWhole, + TFnStorage +} from '../types'; + +export default function createStorageFn(wholeDataKey: string, theStorage: Storage): TFnStorage { + if (!wholeDataKey) { + throw new Error('[@alicloud/storage-factory] you have to give a wholeDataKey'); + } + + function getWholeData(): TDataWhole { + try { + return JSON.parse(theStorage.getItem(wholeDataKey)) || {}; + } catch (ex) { + return {}; + } + } + + return function(key: string, val?: unknown) { + const wholeData = getWholeData(); + + try { + if (key === undefined) { + return wholeData; + } + + if (val === undefined) { + return wholeData[key]; + } + + wholeData[key] = val; + + if (val === null) { + delete wholeData[key]; + } + + theStorage.setItem(wholeDataKey, JSON.stringify(wholeData)); + } catch (ex) { + // ignore + } + } as TFnStorage; +} diff --git a/packages/storage-factory/stories/demo-default/index.tsx b/packages/storage-factory/stories/demo-default/index.tsx new file mode 100644 index 000000000..8300a8e52 --- /dev/null +++ b/packages/storage-factory/stories/demo-default/index.tsx @@ -0,0 +1,16 @@ +import React from 'react'; + +// import factory from '../../src'; +// +// const fuck = factory('fuckyou'); +// +// fuck(); +// fuck('you'); +// fuck('you', null); +// fuck('you', 12345); +// fuck('you', new Date()); +// fuck('you', '12345'); + +export default function DemoDefault(): JSX.Element { + return <>天有不测风云; +} diff --git a/packages/storage-factory/stories/index.stories.tsx b/packages/storage-factory/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/storage-factory/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/storage-factory/tests/index.spec.ts b/packages/storage-factory/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/storage-factory/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/storage-factory/tsconfig.json b/packages/storage-factory/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/storage-factory/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} From f8c654eea5864cdc6bad35eb3960f6c750a5c992 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Mon, 30 Nov 2020 09:59:54 +0800 Subject: [PATCH 108/135] FEAT added more packages --- packages/console-base-conf-account/.npmignore | 13 +++ .../console-base-conf-account/CHANGELOG.md | 6 ++ packages/console-base-conf-account/README.md | 18 ++++ .../breezr.config.ts | 18 ++++ .../console-base-conf-account/jest.config.js | 20 +++++ .../console-base-conf-account/package.json | 50 +++++++++++ .../src/enum/index.ts | 6 ++ .../console-base-conf-account/src/index.ts | 17 ++++ .../src/types/index.ts | 18 ++++ .../src/util/parse-account.ts | 59 +++++++++++++ .../stories/demo-default/index.tsx | 5 ++ .../stories/index.stories.tsx | 15 ++++ .../tests/index.spec.ts | 9 ++ .../console-base-conf-account/tsconfig.json | 22 +++++ .../console-base-conf-product-id/.npmignore | 13 +++ .../console-base-conf-product-id/CHANGELOG.md | 6 ++ .../console-base-conf-product-id/README.md | 16 ++++ .../breezr.config.ts | 18 ++++ .../jest.config.js | 20 +++++ .../console-base-conf-product-id/package.json | 46 ++++++++++ .../console-base-conf-product-id/src/index.ts | 3 + .../src/util/get-from-hostname.ts | 10 +++ .../src/util/get-from-settings.ts | 10 +++ .../src/util/get-from-yundun-href.ts | 14 +++ .../src/util/get-product-id.ts | 32 +++++++ .../src/util/normalize-product-id.ts | 26 ++++++ .../stories/demo-default/index.tsx | 5 ++ .../stories/index.stories.tsx | 15 ++++ .../tests/index.spec.ts | 46 ++++++++++ .../tsconfig.json | 22 +++++ packages/console-base-log-sls/package.json | 2 +- .../.npmignore | 13 +++ .../CHANGELOG.md | 6 ++ .../README.md | 27 ++++++ .../breezr.config.ts | 18 ++++ .../package.json | 55 ++++++++++++ .../src/index.ts | 24 ++++++ .../src/types/index.ts | 46 ++++++++++ .../src/util/create-interceptor.ts | 61 +++++++++++++ .../stories/demo-default/index.tsx | 28 ++++++ .../stories/demo-one/index.tsx | 85 +++++++++++++++++++ .../stories/fetcher/index.ts | 45 ++++++++++ .../stories/index.stories.tsx | 15 ++++ .../tests/index.spec.ts | 9 ++ .../tsconfig.json | 22 +++++ .../.npmignore | 13 +++ .../CHANGELOG.md | 6 ++ .../console-fetcher-interceptor-sls/README.md | 10 +++ .../breezr.config.ts | 18 ++++ .../jest.config.js | 20 +++++ .../package.json | 53 ++++++++++++ .../src/index.ts | 11 +++ .../src/types/index.ts | 33 +++++++ .../src/util/create-interceptor.ts | 61 +++++++++++++ .../src/util/intercept.ts | 15 ++++ .../src/util/remove-sec-params-from-body.ts | 22 +++++ .../src/util/should-ignore-error.ts | 22 +++++ .../stories/demo-default/index.tsx | 25 ++++++ .../stories/fetcher/index.ts | 20 +++++ .../stories/index.stories.tsx | 15 ++++ .../tests/index.spec.ts | 9 ++ .../tsconfig.json | 22 +++++ packages/console-logger-sls/.npmignore | 13 +++ packages/console-logger-sls/CHANGELOG.md | 6 ++ packages/console-logger-sls/README.md | 31 +++++++ packages/console-logger-sls/breezr.config.ts | 18 ++++ packages/console-logger-sls/jest.config.js | 20 +++++ packages/console-logger-sls/package.json | 54 ++++++++++++ .../src/_choose-store-by-env.ts | 32 +++++++ packages/console-logger-sls/src/_factory.ts | 28 ++++++ packages/console-logger-sls/src/index.ts | 20 +++++ .../stories/demo-default/index.tsx | 37 ++++++++ .../stories/index.stories.tsx | 15 ++++ .../console-logger-sls/tests/index.spec.ts | 9 ++ packages/console-logger-sls/tsconfig.json | 22 +++++ 75 files changed, 1713 insertions(+), 1 deletion(-) create mode 100644 packages/console-base-conf-account/.npmignore create mode 100644 packages/console-base-conf-account/CHANGELOG.md create mode 100755 packages/console-base-conf-account/README.md create mode 100644 packages/console-base-conf-account/breezr.config.ts create mode 100644 packages/console-base-conf-account/jest.config.js create mode 100755 packages/console-base-conf-account/package.json create mode 100644 packages/console-base-conf-account/src/enum/index.ts create mode 100644 packages/console-base-conf-account/src/index.ts create mode 100644 packages/console-base-conf-account/src/types/index.ts create mode 100644 packages/console-base-conf-account/src/util/parse-account.ts create mode 100644 packages/console-base-conf-account/stories/demo-default/index.tsx create mode 100644 packages/console-base-conf-account/stories/index.stories.tsx create mode 100644 packages/console-base-conf-account/tests/index.spec.ts create mode 100644 packages/console-base-conf-account/tsconfig.json create mode 100644 packages/console-base-conf-product-id/.npmignore create mode 100644 packages/console-base-conf-product-id/CHANGELOG.md create mode 100755 packages/console-base-conf-product-id/README.md create mode 100644 packages/console-base-conf-product-id/breezr.config.ts create mode 100644 packages/console-base-conf-product-id/jest.config.js create mode 100755 packages/console-base-conf-product-id/package.json create mode 100644 packages/console-base-conf-product-id/src/index.ts create mode 100644 packages/console-base-conf-product-id/src/util/get-from-hostname.ts create mode 100644 packages/console-base-conf-product-id/src/util/get-from-settings.ts create mode 100644 packages/console-base-conf-product-id/src/util/get-from-yundun-href.ts create mode 100644 packages/console-base-conf-product-id/src/util/get-product-id.ts create mode 100644 packages/console-base-conf-product-id/src/util/normalize-product-id.ts create mode 100644 packages/console-base-conf-product-id/stories/demo-default/index.tsx create mode 100644 packages/console-base-conf-product-id/stories/index.stories.tsx create mode 100644 packages/console-base-conf-product-id/tests/index.spec.ts create mode 100644 packages/console-base-conf-product-id/tsconfig.json create mode 100644 packages/console-fetcher-interceptor-req-mock/.npmignore create mode 100644 packages/console-fetcher-interceptor-req-mock/CHANGELOG.md create mode 100755 packages/console-fetcher-interceptor-req-mock/README.md create mode 100644 packages/console-fetcher-interceptor-req-mock/breezr.config.ts create mode 100644 packages/console-fetcher-interceptor-req-mock/package.json create mode 100644 packages/console-fetcher-interceptor-req-mock/src/index.ts create mode 100644 packages/console-fetcher-interceptor-req-mock/src/types/index.ts create mode 100644 packages/console-fetcher-interceptor-req-mock/src/util/create-interceptor.ts create mode 100644 packages/console-fetcher-interceptor-req-mock/stories/demo-default/index.tsx create mode 100644 packages/console-fetcher-interceptor-req-mock/stories/demo-one/index.tsx create mode 100644 packages/console-fetcher-interceptor-req-mock/stories/fetcher/index.ts create mode 100644 packages/console-fetcher-interceptor-req-mock/stories/index.stories.tsx create mode 100644 packages/console-fetcher-interceptor-req-mock/tests/index.spec.ts create mode 100644 packages/console-fetcher-interceptor-req-mock/tsconfig.json create mode 100644 packages/console-fetcher-interceptor-sls/.npmignore create mode 100644 packages/console-fetcher-interceptor-sls/CHANGELOG.md create mode 100755 packages/console-fetcher-interceptor-sls/README.md create mode 100644 packages/console-fetcher-interceptor-sls/breezr.config.ts create mode 100644 packages/console-fetcher-interceptor-sls/jest.config.js create mode 100755 packages/console-fetcher-interceptor-sls/package.json create mode 100644 packages/console-fetcher-interceptor-sls/src/index.ts create mode 100644 packages/console-fetcher-interceptor-sls/src/types/index.ts create mode 100644 packages/console-fetcher-interceptor-sls/src/util/create-interceptor.ts create mode 100644 packages/console-fetcher-interceptor-sls/src/util/intercept.ts create mode 100644 packages/console-fetcher-interceptor-sls/src/util/remove-sec-params-from-body.ts create mode 100644 packages/console-fetcher-interceptor-sls/src/util/should-ignore-error.ts create mode 100644 packages/console-fetcher-interceptor-sls/stories/demo-default/index.tsx create mode 100644 packages/console-fetcher-interceptor-sls/stories/fetcher/index.ts create mode 100644 packages/console-fetcher-interceptor-sls/stories/index.stories.tsx create mode 100644 packages/console-fetcher-interceptor-sls/tests/index.spec.ts create mode 100644 packages/console-fetcher-interceptor-sls/tsconfig.json create mode 100644 packages/console-logger-sls/.npmignore create mode 100644 packages/console-logger-sls/CHANGELOG.md create mode 100755 packages/console-logger-sls/README.md create mode 100644 packages/console-logger-sls/breezr.config.ts create mode 100644 packages/console-logger-sls/jest.config.js create mode 100755 packages/console-logger-sls/package.json create mode 100644 packages/console-logger-sls/src/_choose-store-by-env.ts create mode 100644 packages/console-logger-sls/src/_factory.ts create mode 100644 packages/console-logger-sls/src/index.ts create mode 100644 packages/console-logger-sls/stories/demo-default/index.tsx create mode 100644 packages/console-logger-sls/stories/index.stories.tsx create mode 100644 packages/console-logger-sls/tests/index.spec.ts create mode 100644 packages/console-logger-sls/tsconfig.json diff --git a/packages/console-base-conf-account/.npmignore b/packages/console-base-conf-account/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/console-base-conf-account/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/console-base-conf-account/CHANGELOG.md b/packages/console-base-conf-account/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/console-base-conf-account/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/console-base-conf-account/README.md b/packages/console-base-conf-account/README.md new file mode 100755 index 000000000..9db37fc71 --- /dev/null +++ b/packages/console-base-conf-account/README.md @@ -0,0 +1,18 @@ +@alicloud/console-base-conf-account +=== + +ConsoleBase CONF.ACCOUNT + +# INSTALL + +``` +tnpm i @alicloud/console-base-conf-account -S +``` + +# API + +```typescript +import CONF_ACCOUNT, { + EAccountType +} from '@alicloud/console-base-conf-account'; +``` diff --git a/packages/console-base-conf-account/breezr.config.ts b/packages/console-base-conf-account/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/console-base-conf-account/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/console-base-conf-account/jest.config.js b/packages/console-base-conf-account/jest.config.js new file mode 100644 index 000000000..1cda183da --- /dev/null +++ b/packages/console-base-conf-account/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + testEnvironment: 'node', + testMatch: [ + '/src/**/*.test.ts' + ], + collectCoverageFrom: [ + 'src/**/*.ts' + ], + moduleFileExtensions: [ + 'ts', + 'js' + ], + transform: { + '\\.(ts)$': 'ts-jest', + '^.+\\.js$': 'babel-jest' + }, + modulePaths: [ + 'src' + ] +}; diff --git a/packages/console-base-conf-account/package.json b/packages/console-base-conf-account/package.json new file mode 100755 index 000000000..672dc1597 --- /dev/null +++ b/packages/console-base-conf-account/package.json @@ -0,0 +1,50 @@ +{ + "name": "@alicloud/console-base-conf-account", + "version": "0.0.0", + "description": "ConsoleBase CONF.ACCOUNT", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "console-base", + "conf", + "account" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "dependencies": { + "@alicloud/cookie": "^0.0.0", + "@alicloud/console-one-config": "^0.0.0" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/console-base-conf-account/src/enum/index.ts b/packages/console-base-conf-account/src/enum/index.ts new file mode 100644 index 000000000..856ced642 --- /dev/null +++ b/packages/console-base-conf-account/src/enum/index.ts @@ -0,0 +1,6 @@ +// eslint-disable-next-line import/prefer-default-export +export enum EAccountType { + MAIN = 'main', // 主账号 + RAM = 'sub', // RAM 账号(原「子账号」) + STS = 'sts' // 角色账号 +} diff --git a/packages/console-base-conf-account/src/index.ts b/packages/console-base-conf-account/src/index.ts new file mode 100644 index 000000000..4a0ad3c8d --- /dev/null +++ b/packages/console-base-conf-account/src/index.ts @@ -0,0 +1,17 @@ +import { + EAccountType +} from './enum'; +import { + IConfAccount as ConsoleBaseConfAccount +} from './types'; +import parseAccount from './util/parse-account'; + +export default parseAccount(); + +export { + EAccountType +}; + +export type { + ConsoleBaseConfAccount +}; diff --git a/packages/console-base-conf-account/src/types/index.ts b/packages/console-base-conf-account/src/types/index.ts new file mode 100644 index 000000000..132d1241f --- /dev/null +++ b/packages/console-base-conf-account/src/types/index.ts @@ -0,0 +1,18 @@ +import { + EAccountType +} from '../enum'; + +export interface IWin extends Window { // 从 cookie 中获取用户数据非常不靠谱,这里通过对 OneConsole 和 ECS 配置项进行覆盖得以保证 80% 的准确性 + ALIYUN_ECS_CONSOLE_CONFIG?: { + CURRENT_PK: string; + MASTER_PK: string; + isChildAccount: boolean; + isRoleAccount: boolean; + }; +} + +export interface IConfAccount { // 不准拿用户名 + ID: string; // 当前登录用户数字 ID + ID_MAIN: string; // 当前登录用户主账号的数字 ID(如果是主账号,则等于 id) + TYPE: EAccountType; +} diff --git a/packages/console-base-conf-account/src/util/parse-account.ts b/packages/console-base-conf-account/src/util/parse-account.ts new file mode 100644 index 000000000..9e7d7c691 --- /dev/null +++ b/packages/console-base-conf-account/src/util/parse-account.ts @@ -0,0 +1,59 @@ +import { + getCookie +} from '@alicloud/cookie'; +import ONE_CONF from '@alicloud/console-one-config'; + +import { + EAccountType +} from '../enum'; +import { + IWin, + IConfAccount +} from '../types'; + +/** + * 拿到账号相关的信息,注意可能不准,所以除了埋点相关,不要做任何其他有用途 + */ +export default function parseAccount(): IConfAccount { + const { + ALIYUN_ECS_CONSOLE_CONFIG + } = window as IWin; + let userId = ''; // 当前登录用户 ID + let userIdMain = ''; // 当前登录用户(如果是子账号)的主账号的 ID,如果当前登录是主账号,则直接跟 userId 一样 + let userType = EAccountType.MAIN; // 用户类型 + + // 预先从控制台自己的配置项中拿主子账号的 ID,因为 cookie 不靠谱 + if (ONE_CONF.ONE) { // OneConsole 的场景 + userId = ONE_CONF.ACCOUNT.ID; + userIdMain = ONE_CONF.ACCOUNT.ID_MAIN; + userType = ONE_CONF.ACCOUNT.TYPE as EAccountType; // 可以兼容... + } else if (ALIYUN_ECS_CONSOLE_CONFIG) { // ECS 不是 OneConsole 但是大头,需要兼容一下 + userId = ALIYUN_ECS_CONSOLE_CONFIG.CURRENT_PK; + userIdMain = ALIYUN_ECS_CONSOLE_CONFIG.MASTER_PK; + + if (ALIYUN_ECS_CONSOLE_CONFIG.isChildAccount) { + userType = EAccountType.RAM; + } else if (ALIYUN_ECS_CONSOLE_CONFIG.isRoleAccount) { + userType = EAccountType.STS; + } + } + + /* + * 我告诉你为什么 cookie 不靠谱: + * 1. 主账号没有问题 + * 2. 子账号一般没有这个 cookie,但是!!如果你先登录主账号再登录子账号...却可以拿到,这种场景下..就会不准 + */ + if (!userId) { + userId = getCookie('login_aliyunid_pk') || ''; + + if (!userId) { + userType = EAccountType.RAM; // 不准 + } + } + + return { + ID: userId, + ID_MAIN: userIdMain || userId, + TYPE: userType + }; +} diff --git a/packages/console-base-conf-account/stories/demo-default/index.tsx b/packages/console-base-conf-account/stories/demo-default/index.tsx new file mode 100644 index 000000000..c9dc07f87 --- /dev/null +++ b/packages/console-base-conf-account/stories/demo-default/index.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export default function DemoDefault(): JSX.Element { + return <>天有不测风云; +} diff --git a/packages/console-base-conf-account/stories/index.stories.tsx b/packages/console-base-conf-account/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/console-base-conf-account/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/console-base-conf-account/tests/index.spec.ts b/packages/console-base-conf-account/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/console-base-conf-account/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/console-base-conf-account/tsconfig.json b/packages/console-base-conf-account/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/console-base-conf-account/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/console-base-conf-product-id/.npmignore b/packages/console-base-conf-product-id/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/console-base-conf-product-id/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/console-base-conf-product-id/CHANGELOG.md b/packages/console-base-conf-product-id/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/console-base-conf-product-id/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/console-base-conf-product-id/README.md b/packages/console-base-conf-product-id/README.md new file mode 100755 index 000000000..c3b504ba4 --- /dev/null +++ b/packages/console-base-conf-product-id/README.md @@ -0,0 +1,16 @@ +@alicloud/console-base-conf-product-id +=== + +ConsoleBase 当前控制台产品 ID,从 @alicloud/console-base-conf-settings 中抽出,保证为全小写。 + +# INSTALL + +``` +tnpm i @alicloud/console-base-conf-product-id -S +``` + +# API + +```typescript +import CONF_PRODUCT_ID from '@alicloud/console-base-conf-product-id'; +``` diff --git a/packages/console-base-conf-product-id/breezr.config.ts b/packages/console-base-conf-product-id/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/console-base-conf-product-id/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/console-base-conf-product-id/jest.config.js b/packages/console-base-conf-product-id/jest.config.js new file mode 100644 index 000000000..1cda183da --- /dev/null +++ b/packages/console-base-conf-product-id/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + testEnvironment: 'node', + testMatch: [ + '/src/**/*.test.ts' + ], + collectCoverageFrom: [ + 'src/**/*.ts' + ], + moduleFileExtensions: [ + 'ts', + 'js' + ], + transform: { + '\\.(ts)$': 'ts-jest', + '^.+\\.js$': 'babel-jest' + }, + modulePaths: [ + 'src' + ] +}; diff --git a/packages/console-base-conf-product-id/package.json b/packages/console-base-conf-product-id/package.json new file mode 100755 index 000000000..ce4927bcf --- /dev/null +++ b/packages/console-base-conf-product-id/package.json @@ -0,0 +1,46 @@ +{ + "name": "@alicloud/console-base-conf-product-id", + "version": "0.0.0", + "description": "ConsoleBase CONF product id", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "console-base", + "conf", + "product-id" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/console-base-conf-product-id/src/index.ts b/packages/console-base-conf-product-id/src/index.ts new file mode 100644 index 000000000..a15a35a7a --- /dev/null +++ b/packages/console-base-conf-product-id/src/index.ts @@ -0,0 +1,3 @@ +import getProductId from './util/get-product-id'; + +export default getProductId(); diff --git a/packages/console-base-conf-product-id/src/util/get-from-hostname.ts b/packages/console-base-conf-product-id/src/util/get-from-hostname.ts new file mode 100644 index 000000000..c3d3976e9 --- /dev/null +++ b/packages/console-base-conf-product-id/src/util/get-from-hostname.ts @@ -0,0 +1,10 @@ +import normalizeProductId from './normalize-product-id'; + +/** + * 从 hostname 中提取产品 ID + */ +export default function getFromHostname(hostname: string): string { + const [productId] = hostname.split('.'); + + return normalizeProductId(productId); +} diff --git a/packages/console-base-conf-product-id/src/util/get-from-settings.ts b/packages/console-base-conf-product-id/src/util/get-from-settings.ts new file mode 100644 index 000000000..3c3e1e8d1 --- /dev/null +++ b/packages/console-base-conf-product-id/src/util/get-from-settings.ts @@ -0,0 +1,10 @@ +import normalizeProductId from './normalize-product-id'; + +/** + * 从配置项获取 + */ +export default function getFromSettings(productId?: string): string | undefined { + if (productId && typeof productId === 'string') { + return normalizeProductId(productId); + } +} diff --git a/packages/console-base-conf-product-id/src/util/get-from-yundun-href.ts b/packages/console-base-conf-product-id/src/util/get-from-yundun-href.ts new file mode 100644 index 000000000..7533d6ab6 --- /dev/null +++ b/packages/console-base-conf-product-id/src/util/get-from-yundun-href.ts @@ -0,0 +1,14 @@ +import normalizeProductId from './normalize-product-id'; + +/** + * 覆盖云盾系列控制台,它们的规则是 yundun.console.aliyun.com?p=xx 中的 xx + */ +export default function getFromYundunHref(href: string): string { + try { + const productId = new URL(href).searchParams.get('p'); + + return productId ? normalizeProductId(productId) : ''; + } catch (err) { + return ''; + } +} diff --git a/packages/console-base-conf-product-id/src/util/get-product-id.ts b/packages/console-base-conf-product-id/src/util/get-product-id.ts new file mode 100644 index 000000000..ed98ab310 --- /dev/null +++ b/packages/console-base-conf-product-id/src/util/get-product-id.ts @@ -0,0 +1,32 @@ +import getFromSettings from './get-from-settings'; +import getFromHostname from './get-from-hostname'; +import getFromYundunHref from './get-from-yundun-href'; + +interface IWindow extends Window { + CONSOLE_BASE_SETTINGS?: { + PRODUCT_ID?: string; + }; + viewframeSetting?: { + productId?: string; + }; +} + +export default function getProductId(): string { + const { + CONSOLE_BASE_SETTINGS: newSettings = {}, + viewframeSetting: oldSettings = {} + } = window as IWindow; + let productId = getFromSettings(newSettings.PRODUCT_ID || oldSettings.productId); + + if (productId) { + return productId; + } + + productId = getFromHostname(location.hostname); + + if (productId === 'yundun') { + productId = getFromYundunHref(location.href) || productId; + } + + return productId; +} diff --git a/packages/console-base-conf-product-id/src/util/normalize-product-id.ts b/packages/console-base-conf-product-id/src/util/normalize-product-id.ts new file mode 100644 index 000000000..481f0676d --- /dev/null +++ b/packages/console-base-conf-product-id/src/util/normalize-product-id.ts @@ -0,0 +1,26 @@ +/** + * 标准化产品 ID + * + * * 全小写 + * * 去掉前后缀 + * - 去掉 `pre-` 前缀 + * - 去掉 `-` 后边的后缀,这些后缀可能有 `-pre`、`-intl`、`-` 后缀 + * - 去掉 `4xx` 后缀,包括但不局限于 虚商 - 4service、政务云 - 4bjzwy、金融云 - 4finance + * - 去掉升级用的 `new`(`renew` 不会误伤) 和 `next` + */ +export default function normalizeProductId(possibleId: string): string { + // 剔除前缀,必须先做 + let productId = possibleId.toLowerCase().replace(/^pre-/, ''); + + // 剔除后缀 + [productId] = productId.split('-'); + productId = productId.replace(/4\w+/, ''); // 4xx 后缀 + productId = productId.replace(/next$/, ''); // 升级 1 + + // 避免误伤 renew + if (productId !== 'renew') { + productId = productId.replace(/new$/, ''); // 升级 2 + } + + return productId; +} diff --git a/packages/console-base-conf-product-id/stories/demo-default/index.tsx b/packages/console-base-conf-product-id/stories/demo-default/index.tsx new file mode 100644 index 000000000..c9dc07f87 --- /dev/null +++ b/packages/console-base-conf-product-id/stories/demo-default/index.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export default function DemoDefault(): JSX.Element { + return <>天有不测风云; +} diff --git a/packages/console-base-conf-product-id/stories/index.stories.tsx b/packages/console-base-conf-product-id/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/console-base-conf-product-id/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/console-base-conf-product-id/tests/index.spec.ts b/packages/console-base-conf-product-id/tests/index.spec.ts new file mode 100644 index 000000000..a31fcecf9 --- /dev/null +++ b/packages/console-base-conf-product-id/tests/index.spec.ts @@ -0,0 +1,46 @@ +/* global describe, it, expect */ + +import getFromSettings from '../src/util/get-from-settings'; +import getFromHostname from '../src/util/get-from-hostname'; +import getFromYundunHref from '../src/util/get-from-yundun-href'; + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('getFromSettings', () => { + expect(getFromSettings('OSS')).toBe('oss'); + expect(getFromSettings('ossNew')).toBe('oss'); + expect(getFromSettings('ossnExt')).toBe('oss'); + expect(getFromSettings('oss-pre')).toBe('oss'); + expect(getFromSettings('pre-ossnext')).toBe('oss'); + expect(getFromSettings('pre-ossnew')).toBe('oss'); + expect(getFromSettings('pre-ossnew-cn-hangzhou')).toBe('oss'); + expect(getFromSettings('renewnew')).toBe('renew'); + expect(getFromSettings('renewnext')).toBe('renew'); + expect(getFromSettings('renew')).toBe('renew'); + expect(getFromSettings('renew4service')).toBe('renew'); + expect(getFromSettings('renew4bjzwy')).toBe('renew'); + expect(getFromSettings('renew4finance')).toBe('renew'); + expect(getFromSettings('renew4whatever')).toBe('renew'); + }); + + it('getFromHostname', () => { + expect(getFromHostname('oss.console.aliyun.com')).toBe('oss'); + expect(getFromHostname('ossnew.console.aliyun.com')).toBe('oss'); + expect(getFromHostname('ossnext.console.aliyun.com')).toBe('oss'); + expect(getFromHostname('oss-pre.console.aliyun.com')).toBe('oss'); + expect(getFromHostname('pre-ossnext.console.aliyun.com')).toBe('oss'); + expect(getFromHostname('pre-ossnew.console.aliyun.com')).toBe('oss'); + expect(getFromHostname('pre-ossnew-cn-hangzhou.console.aliyun.com')).toBe('oss'); + expect(getFromHostname('renewnew.console.aliyun.com')).toBe('renew'); + expect(getFromHostname('renewnext.console.aliyun.com')).toBe('renew'); + expect(getFromHostname('renew.console.aliyun.com')).toBe('renew'); + }); + + it('getFromYundunHref', () => { + expect(getFromYundunHref('https://yundun.console.aliyun.com')).toBe(''); + expect(getFromYundunHref('https://yundun.console.aliyun.com/?p=cas')).toBe('cas'); + expect(getFromYundunHref('https://yundun.console.aliyun.com?p=waf')).toBe('waf'); + expect(getFromYundunHref('https://yundun.console.aliyun.com?p=cwfnext')).toBe('cwf'); + }); +}); diff --git a/packages/console-base-conf-product-id/tsconfig.json b/packages/console-base-conf-product-id/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/console-base-conf-product-id/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/console-base-log-sls/package.json b/packages/console-base-log-sls/package.json index b7a18339f..5b5d8d6f9 100755 --- a/packages/console-base-log-sls/package.json +++ b/packages/console-base-log-sls/package.json @@ -35,7 +35,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-product-id": "^0.1.21", + "@alicloud/console-base-conf-product-id": "^0.0.0", "@alicloud/console-logger-sls": "^0.0.0" }, "scripts": { diff --git a/packages/console-fetcher-interceptor-req-mock/.npmignore b/packages/console-fetcher-interceptor-req-mock/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/console-fetcher-interceptor-req-mock/CHANGELOG.md b/packages/console-fetcher-interceptor-req-mock/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/console-fetcher-interceptor-req-mock/README.md b/packages/console-fetcher-interceptor-req-mock/README.md new file mode 100755 index 000000000..6648d8adb --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/README.md @@ -0,0 +1,27 @@ +@alicloud/console-fetcher-interceptor-req-mock +=== + +利用 mocks.alibaba-inc.com 对非 OneConsole 及非 OneConsole 的接口进行 mock。 + +# 如何使用 + +注意:此代码虽然体积很小,但也绝不应该被打包到生产代码中去。 + +## 安装 + +安装到 `dev-dependencies` 里,而不是 `dependencies`。 + +``` +tnpm i @alicloud/console-fetcher-interceptor-req-mock -D +``` + +## 使用 + +在你的 demo 代码里... + +```typescript +import fetcher from '你的 fetcher 包'; +import intercept from '@alicloud/console-fetcher-interceptor-req-mock'; + +intercept(fetcher); // 这里会影响到其他用这个 fetcher 的地方,所以这个只写在 demo 用的代码里就行 +``` diff --git a/packages/console-fetcher-interceptor-req-mock/breezr.config.ts b/packages/console-fetcher-interceptor-req-mock/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/console-fetcher-interceptor-req-mock/package.json b/packages/console-fetcher-interceptor-req-mock/package.json new file mode 100644 index 000000000..0c420e042 --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/package.json @@ -0,0 +1,55 @@ +{ + "name": "@alicloud/console-fetcher-interceptor-req-mock", + "version": "0.0.0", + "description": "@alicloud/console-fetcher 请求拦截 - mock 转接", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "console", + "fetcher", + "interceptor", + "request", + "mock" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.2", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "styled-components": "^5.2.1", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "dependencies": { + "@alicloud/console-base-conf-env": "^0.0.0", + "@alicloud/fetcher": "^0.0.0" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/console-fetcher-interceptor-req-mock/src/index.ts b/packages/console-fetcher-interceptor-req-mock/src/index.ts new file mode 100644 index 000000000..84b4a8e5b --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/src/index.ts @@ -0,0 +1,24 @@ +import { + Fetcher, + FetcherFnInterceptRequest +} from '@alicloud/fetcher'; + +import { + IMockOptions +} from './types'; +import createInterceptor from './util/create-interceptor'; + +/** + * 利用 mocks.alibaba-inc.com 对接口(OneConsole 和 非 OneConsole 接口)进行,可通过 options 参数进行微调 + */ +export default function intercept(fetcher: Fetcher, options?: IMockOptions): () => void { + const interceptorReq: FetcherFnInterceptRequest = createInterceptor(options); + + fetcher.sealInterceptors(false); // 可能已被锁 + + const release = fetcher.interceptRequest(interceptorReq); + + fetcher.sealInterceptors(true); + + return release; +} diff --git a/packages/console-fetcher-interceptor-req-mock/src/types/index.ts b/packages/console-fetcher-interceptor-req-mock/src/types/index.ts new file mode 100644 index 000000000..06d6afa8a --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/src/types/index.ts @@ -0,0 +1,46 @@ +import { + FetcherConfig +} from '@alicloud/fetcher'; + +interface IMockCheck { + id: string; // mock 应用 ID + check(config: FetcherConfig): boolean | string | void; +} + +export interface IMockOptions { + /** + * 这里配置的是把匹配到的接口映射到对应的 mocks 应用下对应的接口,当 url 匹配 RegExp 时,将使用 MOCK_APP 对应的 mock 地址 + * + * 非 OneConsole 的 mock 地址格式如下: + * `//mocks.alibaba-inc.com/mock/` + MOCK_APP + path,一个可运行的例子: + * https://mocks.alibaba-inc.com/mock/oss/ajax/kms/list_keys.json + */ + others?: IMockCheck[]; // MOCK_APP - 匹配 + /** + * 这里配置的是 OneConsole API 中 product 的别名映射。 + * + * OneConsole 的接口的 mock 统一由 oneconsole 进行转接,详见 http://docs.alibaba.net/human/mocks-docs/help.md#oneConsole + * + * 但 OneConsole 提供 `/data/` 下 `api.json`、`innerApi.json`、`call.json` 以及 `multiApi.json`、`multiInnerApi.json`、`multiCall.json`(没见过后两个) + * 这里会把 inner、call 转到对应的 `api.json` 以及 `multiApi.json` + * + * 注意,OneConsole mock 仅支持 POST,一个可运行的例子: + * + * ``` + * fetch('https://mocks.alibaba-inc.com/mock/oneconsole/data/api.json', { + * method: 'POST', + * credentials: 'same-origin', + * headers: { + * 'Content-Type': 'application/x-www-form-urlencoded' + * }, + * body: [ + * 'product=ram_next', // 比如在 RAM 下,把原 product ram 映射为 ram_next + * 'action=CreatePolicy' + * ].join('&') + * }); + * ``` + * + * 而其对应的原 mock 接口是 https://mocks.alibaba-inc.com/mock/ram_next/CreatePolicy.json + */ + one?: Record; +} diff --git a/packages/console-fetcher-interceptor-req-mock/src/util/create-interceptor.ts b/packages/console-fetcher-interceptor-req-mock/src/util/create-interceptor.ts new file mode 100644 index 000000000..87466244f --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/src/util/create-interceptor.ts @@ -0,0 +1,61 @@ +import CONF_ENV from '@alicloud/console-base-conf-env'; +import { + FetcherConfig, + FetcherFnInterceptRequest +} from '@alicloud/fetcher'; + +import { + IMockOptions +} from '../types'; + +interface IBodyWithProduct { + product?: string; +} + +const REG_ONE_API = /^\/data\/(multi)?(inner)?(api|call)\.json/i; +const MOCK_PREFIX = 'https://mocks.alibaba-inc.com/mock'; // 只能 https + +export default function createInterceptor({ + one = {}, + others = [] +}: IMockOptions = {}): FetcherFnInterceptRequest { + return (config: FetcherConfig): Partial | void => { + // 这个包不应该被打包到应用,而只应该在 demo 中使用,若有**笨蛋🥚**很认真地把它放到项目代码里边...也不要对线上功能产生干扰 + // 同时,如果指定了 urlBase 的...忽略 + if (!CONF_ENV.ENV_IS_DEV || config.urlBase) { + return; + } + + for (let i = 0; i < others.length; i++) { + const { + id, + check + } = others[i]; + const checkResult = check(config); + + if (checkResult === true) { + return { + urlBase: `${MOCK_PREFIX}/${id}` + }; + } + + if (checkResult) { + return { + url: checkResult, + urlBase: `${MOCK_PREFIX}/${id}` + }; + } + } + + if (REG_ONE_API.test(config.url)) { + const product = (config.body as IBodyWithProduct)?.product; + + return { + url: `${MOCK_PREFIX}/oneconsole/data/${RegExp.$1 ? 'multiApi' : 'api'}.json`, + body: { + product: one[product] || product + } + }; + } + }; +} diff --git a/packages/console-fetcher-interceptor-req-mock/stories/demo-default/index.tsx b/packages/console-fetcher-interceptor-req-mock/stories/demo-default/index.tsx new file mode 100644 index 000000000..1f88d4d06 --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/stories/demo-default/index.tsx @@ -0,0 +1,28 @@ +import React from 'react'; + +import { + FetcherDemoRcFetchers +} from '@alicloud/fetcher-demo-helpers'; +import { + H1 +} from '@alicloud/demo-rc-elements'; + +import { + fetcher0, + fetcher1 +} from '../fetcher'; + +export default function DemoDefault(): JSX.Element { + return <> +

利用 mocks.alibaba-inc.com 对非 OneConsole 接口进行 mock

+ + ; +} diff --git a/packages/console-fetcher-interceptor-req-mock/stories/demo-one/index.tsx b/packages/console-fetcher-interceptor-req-mock/stories/demo-one/index.tsx new file mode 100644 index 000000000..ebd80500e --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/stories/demo-one/index.tsx @@ -0,0 +1,85 @@ +import React from 'react'; + +import { + H1, + P, + Button +} from '@alicloud/demo-rc-elements'; + +import { + fetcher1 +} from '../fetcher'; + +function callOpenApi(): void { + fetcher1.post('/data/api.json', { + product: 'ram', + action: 'ListAccessKeys' + }).then(console.info, console.error); +} + +function callInnerApi(): void { + fetcher1.post('/data/innerApi.json', { + product: 'ram', + action: 'ListGroups' + }).then(console.info, console.error); +} + +function callContainerApi(): void { + fetcher1.post('/data/call.json', { + product: 'ram', + action: 'ListRoles' + }).then(console.info, console.error); +} + +function callMultiOpenApi(): void { + fetcher1.post('/data/multiApi.json', { + product: 'ram', + actions: JSON.stringify([{ + action: 'ListAccessKeys' + }, { + action: 'ListGroups' + }, { + action: 'ListRoles' + }]) + }).then(console.info, console.error); +} + +function callMultiInnerApi(): void { + fetcher1.post('/data/multiInnerApi.json', { + product: 'ram', + actions: JSON.stringify([{ + action: 'ListAccessKeys' + }, { + action: 'ListGroups' + }, { + action: 'ListRoles' + }]) + }).then(console.info, console.error); +} + +function callMultiContainerApi(): void { + fetcher1.post('/data/multiCall.json', { + product: 'ram', + actions: JSON.stringify([{ + action: 'ListAccessKeys' + }, { + action: 'ListGroups' + }, { + action: 'ListRoles' + }]) + }).then(console.info, console.error); +} + + +export default function DemoOne(): JSX.Element { + return <> +

利用 mocks.alibaba-inc.com 对 OneConsole 接口进行 mock

+

请看 console

+ + + + + + + ; +} diff --git a/packages/console-fetcher-interceptor-req-mock/stories/fetcher/index.ts b/packages/console-fetcher-interceptor-req-mock/stories/fetcher/index.ts new file mode 100644 index 000000000..506a5c951 --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/stories/fetcher/index.ts @@ -0,0 +1,45 @@ +import fetcher0, { + createFetcher +} from '@alicloud/fetcher'; +import { + fetcherDemoInterceptorBiz +} from '@alicloud/fetcher-demo-helpers'; + +import intercept from '../../src'; + +const fetcher1 = createFetcher(); + +fetcher1.interceptResponse(fetcherDemoInterceptorBiz); + +intercept(fetcher1, { + one: { + ram: 'ram_next' + }, + others: [{ + id: 'boshit', + check(config): boolean | string | void { + if (config.url && /^\/boshit(\/.*)/.test(config.url)) { + return RegExp.$1; + } + } + }, { + id: 'oss', + check(config): boolean | string | void { + if (config.url && /^\/oss(\/ajax\/.*)/.test(config.url)) { + return RegExp.$1; + } + } + }, { + id: 'ram_next', + check(config): boolean | string | void { + if (config.url && /^\/ram(\/.*)/.test(config.url)) { + return RegExp.$1; + } + } + }] +}); + +export { + fetcher0, + fetcher1 +}; diff --git a/packages/console-fetcher-interceptor-req-mock/stories/index.stories.tsx b/packages/console-fetcher-interceptor-req-mock/stories/index.stories.tsx new file mode 100644 index 000000000..581c1aa7d --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import DemoDefault from './demo-default'; +import DemoOne from './demo-one'; + +storiesOf('@alicloud/console-fetcher-interceptor-req-mock', module) + .addDecorator(withKnobs) + .add('default', () => ) + .add('one', () => ); diff --git a/packages/console-fetcher-interceptor-req-mock/tests/index.spec.ts b/packages/console-fetcher-interceptor-req-mock/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/console-fetcher-interceptor-req-mock/tsconfig.json b/packages/console-fetcher-interceptor-req-mock/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/console-fetcher-interceptor-req-mock/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/console-fetcher-interceptor-sls/.npmignore b/packages/console-fetcher-interceptor-sls/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/console-fetcher-interceptor-sls/CHANGELOG.md b/packages/console-fetcher-interceptor-sls/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/console-fetcher-interceptor-sls/README.md b/packages/console-fetcher-interceptor-sls/README.md new file mode 100755 index 000000000..8939d1dc2 --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/README.md @@ -0,0 +1,10 @@ +@alicloud/console-fetcher-interceptor-sls +=== + +> 在控制台调用接口时,对出错的 API 进行 SLS 日志上报。 + +# INSTALL + +``` +tnpm i @alicloud/console-fetcher-interceptor-sls -S +``` diff --git a/packages/console-fetcher-interceptor-sls/breezr.config.ts b/packages/console-fetcher-interceptor-sls/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/console-fetcher-interceptor-sls/jest.config.js b/packages/console-fetcher-interceptor-sls/jest.config.js new file mode 100644 index 000000000..1cda183da --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + testEnvironment: 'node', + testMatch: [ + '/src/**/*.test.ts' + ], + collectCoverageFrom: [ + 'src/**/*.ts' + ], + moduleFileExtensions: [ + 'ts', + 'js' + ], + transform: { + '\\.(ts)$': 'ts-jest', + '^.+\\.js$': 'babel-jest' + }, + modulePaths: [ + 'src' + ] +}; diff --git a/packages/console-fetcher-interceptor-sls/package.json b/packages/console-fetcher-interceptor-sls/package.json new file mode 100755 index 000000000..bdffb800e --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/package.json @@ -0,0 +1,53 @@ +{ + "name": "@alicloud/console-fetcher-interceptor-sls", + "version": "0.0.0", + "description": "SLS logger interceptor for @alicloud/console-fetcher", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "console", + "fetcher", + "sls" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.2", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "styled-components": "^5.2.1", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "dependencies": { + "@alicloud/console-logger-sls": "^0.0.0", + "@alicloud/fetcher": "^0.0.0" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/console-fetcher-interceptor-sls/src/index.ts b/packages/console-fetcher-interceptor-sls/src/index.ts new file mode 100644 index 000000000..1b84b2e57 --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/src/index.ts @@ -0,0 +1,11 @@ +import { + IInterceptorSlsConfig as ConsoleFetcherInterceptorSlsConfig +} from './types'; + +export { + default +} from './util/intercept'; + +export type { + ConsoleFetcherInterceptorSlsConfig +}; diff --git a/packages/console-fetcher-interceptor-sls/src/types/index.ts b/packages/console-fetcher-interceptor-sls/src/types/index.ts new file mode 100644 index 000000000..0bd2d199e --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/src/types/index.ts @@ -0,0 +1,33 @@ +import { + FactoryOptions +} from '@alicloud/console-logger-sls'; +import { + FetcherError +} from '@alicloud/fetcher'; + +export interface IInterceptorSlsConfig extends FactoryOptions { + topicError?: string; + // 除了 logstore 之外,还可以指定不同环境下的 logstore,不指定则用一个 logstore + logstoreDev?: string; + logstoreDaily?: string; + logstorePre?: string; + // 默认会忽略 code 为 ConsoleNeedLogin 的错误,也可以添加统一的配置进行忽略 + shouldIgnore?(err: FetcherError): boolean; +} + +export interface ISlsParams { + fetcherMethod: string; + fetcherUrl: string; + fetcherUrlBase?: string; + fetcherParams?: unknown; + fetcherBody?: unknown; + requestId?: string; + errorName: string; + errorCode: string; + errorMessage: string; + /* + * 记录鹰眼 ID,对于 CORS 的请求,需要服务端在 Response 的 header 中加上 `Access-Control-Expose-Headers: Eagleeye-Traceid` 或 `Access-Control-Expose-Headers: *` + * 具体参考 https://javascript.info/fetch-crossorigin#response-headers + */ + eagleEyeTraceId?: string; +} diff --git a/packages/console-fetcher-interceptor-sls/src/util/create-interceptor.ts b/packages/console-fetcher-interceptor-sls/src/util/create-interceptor.ts new file mode 100644 index 000000000..190409014 --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/src/util/create-interceptor.ts @@ -0,0 +1,61 @@ +import { + FetcherError, + FetcherConfig, + FetcherResponse, + FetcherFnInterceptResponseRejected +} from '@alicloud/fetcher'; +import createLogger, { + chooseStoreByEnv +} from '@alicloud/console-logger-sls'; + +import { + IInterceptorSlsConfig, + ISlsParams +} from '../types'; + +import removeSecParamsFromBody from './remove-sec-params-from-body'; +import shouldIgnoreError from './should-ignore-error'; + +interface IResponseData { + requestId?: string; +} + +export default function createInterceptor({ + topicError = 'api_error', + logstoreDev, + logstoreDaily, + logstorePre, + shouldIgnore, + ...slsOptions +}: IInterceptorSlsConfig): FetcherFnInterceptResponseRejected { + slsOptions.logstore = chooseStoreByEnv(slsOptions.logstore, { + dev: logstoreDev, + daily: logstoreDaily, + pre: logstorePre + }); + + const sls = createLogger(slsOptions); + + return (err: FetcherError, fetcherConfig: FetcherConfig, response?: FetcherResponse): void => { + if (!err || shouldIgnoreError(err, shouldIgnore)) { + throw err; + } + + const slsParams: ISlsParams = { + fetcherMethod: fetcherConfig.method, + fetcherUrl: fetcherConfig.url, + fetcherUrlBase: fetcherConfig.urlBase, + fetcherParams: fetcherConfig.params, + fetcherBody: removeSecParamsFromBody(fetcherConfig.body), + errorName: err.name ?? '__no_name__', + errorCode: err.code ?? '__no_code__', + errorMessage: err.message ?? '__no_message__', + requestId: response?.data?.requestId, + eagleEyeTraceId: response?.headers['Eagleeye-Traceid'] + }; + + sls.error(topicError, slsParams); + + throw err; + }; +} diff --git a/packages/console-fetcher-interceptor-sls/src/util/intercept.ts b/packages/console-fetcher-interceptor-sls/src/util/intercept.ts new file mode 100644 index 000000000..f396cb64d --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/src/util/intercept.ts @@ -0,0 +1,15 @@ +import { + Fetcher +} from '@alicloud/fetcher'; + +import { + IInterceptorSlsConfig +} from '../types'; + +import createInterceptor from './create-interceptor'; + +export default function intercept(fetcher: Fetcher, interceptorConfig: IInterceptorSlsConfig): () => void { + const interceptorRejected = createInterceptor(interceptorConfig); + + return fetcher.interceptResponse(undefined, interceptorRejected); +} diff --git a/packages/console-fetcher-interceptor-sls/src/util/remove-sec-params-from-body.ts b/packages/console-fetcher-interceptor-sls/src/util/remove-sec-params-from-body.ts new file mode 100644 index 000000000..20fe6f28d --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/src/util/remove-sec-params-from-body.ts @@ -0,0 +1,22 @@ +/** + * 安全相关的参数不记录,尤其是 collina,它很大 + */ +export default function removeSecParamsFromBody(b?: Record | string): Record | string | undefined { + if (!b) { + return; + } + + if (typeof b === 'string') { + return b; + } + + const o = { + ...b + }; + + delete o.collina; + delete o.umid; + delete o.sec_token; + + return o; +} diff --git a/packages/console-fetcher-interceptor-sls/src/util/should-ignore-error.ts b/packages/console-fetcher-interceptor-sls/src/util/should-ignore-error.ts new file mode 100644 index 000000000..a18a2c84a --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/src/util/should-ignore-error.ts @@ -0,0 +1,22 @@ +import { + FetcherError +} from '@alicloud/fetcher'; + +const CODE_IGNORE_LIST: string[] = [ + 'ConsoleNeedLogin' +]; + +/** + * 是否忽略该错误(不进行上报) + */ +export default function shouldIgnoreError(err: FetcherError, shouldIgnore?: (err: FetcherError) => boolean): boolean { + if (CODE_IGNORE_LIST.includes(err.code as string)) { + return true; + } + + if (shouldIgnore) { + return shouldIgnore(err); + } + + return false; +} diff --git a/packages/console-fetcher-interceptor-sls/stories/demo-default/index.tsx b/packages/console-fetcher-interceptor-sls/stories/demo-default/index.tsx new file mode 100644 index 000000000..476d289db --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/stories/demo-default/index.tsx @@ -0,0 +1,25 @@ +import React from 'react'; + +import { + FetcherDemoRcFetchers +} from '@alicloud/fetcher-demo-helpers'; +import { + H1, + P +} from '@alicloud/demo-rc-elements'; + +import { + fetcher0, + fetcher1 +} from '../fetcher'; + +export default function DemoDefault(): JSX.Element { + return <> +

发送错误时发送 SLS

+

SLS 账号 flyinhighwj日志地址

+ + ; +} diff --git a/packages/console-fetcher-interceptor-sls/stories/fetcher/index.ts b/packages/console-fetcher-interceptor-sls/stories/fetcher/index.ts new file mode 100644 index 000000000..f6c4624fa --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/stories/fetcher/index.ts @@ -0,0 +1,20 @@ +import fetcher0, { + createFetcher +} from '@alicloud/fetcher'; +import { + SLS_CONFIG, + fetcherDemoInterceptorBiz +} from '@alicloud/fetcher-demo-helpers'; + +import intercept from '../../src'; + +const fetcher1 = createFetcher(); + +fetcher1.interceptResponse(fetcherDemoInterceptorBiz); + +intercept(fetcher1, SLS_CONFIG); + +export { + fetcher0, + fetcher1 +}; diff --git a/packages/console-fetcher-interceptor-sls/stories/index.stories.tsx b/packages/console-fetcher-interceptor-sls/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/console-fetcher-interceptor-sls/tests/index.spec.ts b/packages/console-fetcher-interceptor-sls/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/console-fetcher-interceptor-sls/tsconfig.json b/packages/console-fetcher-interceptor-sls/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/console-fetcher-interceptor-sls/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/console-logger-sls/.npmignore b/packages/console-logger-sls/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/console-logger-sls/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/console-logger-sls/CHANGELOG.md b/packages/console-logger-sls/CHANGELOG.md new file mode 100644 index 000000000..ba597b719 --- /dev/null +++ b/packages/console-logger-sls/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/26 @驳是 + +* 开源第一版 diff --git a/packages/console-logger-sls/README.md b/packages/console-logger-sls/README.md new file mode 100755 index 000000000..fe3f02ae7 --- /dev/null +++ b/packages/console-logger-sls/README.md @@ -0,0 +1,31 @@ +@alicloud/console-logger-sls +=== + +> 阿里云控制台专用的 SLS 工厂方法。 + +更多信息可以参考 `@alicloud/logger-sls`,这里只是利用它「工厂的工厂」创建了一个日志工厂方法。 + +# INSTALL + +``` +tnpm i @alicloud/console-logger-sls -S +``` + +# API + +```typescript +import createLogger from '@alicloud/console-logger-sls'; + +export default createLogger(options); +``` + +# 默认记录的参数 + +比之 `@alicloud/logger-sls` 中默认记录的参数,这里还记录了以下控制台场景下的专属内容: + +* channel - 渠道 +* uid - 当前用户 ID +* uidMain - 当前用户主账号 ID +* nick - 当前用户昵称 +* locale - 当前 locale +* product - 控制台产品 ID diff --git a/packages/console-logger-sls/breezr.config.ts b/packages/console-logger-sls/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/console-logger-sls/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/console-logger-sls/jest.config.js b/packages/console-logger-sls/jest.config.js new file mode 100644 index 000000000..1cda183da --- /dev/null +++ b/packages/console-logger-sls/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + testEnvironment: 'node', + testMatch: [ + '/src/**/*.test.ts' + ], + collectCoverageFrom: [ + 'src/**/*.ts' + ], + moduleFileExtensions: [ + 'ts', + 'js' + ], + transform: { + '\\.(ts)$': 'ts-jest', + '^.+\\.js$': 'babel-jest' + }, + modulePaths: [ + 'src' + ] +}; diff --git a/packages/console-logger-sls/package.json b/packages/console-logger-sls/package.json new file mode 100755 index 000000000..da500cc4d --- /dev/null +++ b/packages/console-logger-sls/package.json @@ -0,0 +1,54 @@ +{ + "name": "@alicloud/console-logger-sls", + "version": "0.0.0", + "description": "SLS logger factory for console", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "console", + "logger", + "sls" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/demo-rc-elements": "^0.0.2", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "styled-components": "^5.2.1", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "dependencies": { + "@alicloud/console-base-conf-account": "^0.0.0", + "@alicloud/console-base-conf-env": "^0.0.0", + "@alicloud/console-base-conf-locale": "^0.0.0", + "@alicloud/logger-sls": "^0.0.0" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/console-logger-sls/src/_choose-store-by-env.ts b/packages/console-logger-sls/src/_choose-store-by-env.ts new file mode 100644 index 000000000..a1f27c0cb --- /dev/null +++ b/packages/console-logger-sls/src/_choose-store-by-env.ts @@ -0,0 +1,32 @@ +import CONF_ENV from '@alicloud/console-base-conf-env'; + +interface IOtherStores { + dev?: string; + daily?: string; + pre?: string; +} + +function choosePossibleStore({ + dev, + daily, + pre +}: IOtherStores): string | undefined { + if (CONF_ENV.ENV_IS_DEV) { // 必须第一个判定 + return dev; + } + + if (CONF_ENV.ENV_IS_DAILY) { + return daily; + } + + if (CONF_ENV.ENV_IS_PRE) { + return pre; + } +} + +/** + * 根据当前的判定环境选择不同的 store,提供给外部使用的工具方法 + */ +export default function chooseStoreByEnv(logstore: string, otherStores: IOtherStores): string { + return choosePossibleStore(otherStores) || logstore; +} diff --git a/packages/console-logger-sls/src/_factory.ts b/packages/console-logger-sls/src/_factory.ts new file mode 100644 index 000000000..1f98d97a0 --- /dev/null +++ b/packages/console-logger-sls/src/_factory.ts @@ -0,0 +1,28 @@ +import CONF_ENV from '@alicloud/console-base-conf-env'; +import CONF_ACCOUNT from '@alicloud/console-base-conf-account'; +import CONF_LOCALE from '@alicloud/console-base-conf-locale'; +import { + FactoryOptions, + createLoggerFactory +} from '@alicloud/logger-sls'; + +// 所有可能的 CHANNEL 可以在 SLS 上通过 `* | SELECT DISTINCT channel` 查到 +const INTL_CHANNELS = [ + 'INTL', + 'SIN', + 'JP' +]; + +export default createLoggerFactory({ + channel: CONF_ENV.CHANNEL, + locale: CONF_LOCALE.LOCALE, + uid: CONF_ACCOUNT.ID, + uidMain: CONF_ACCOUNT.ID_MAIN +}, ({ + endpoint +}: FactoryOptions): boolean | void => { + // 不要把国外的日志提交到国内 + if (/^cn-/.test(endpoint) && INTL_CHANNELS.indexOf(CONF_ENV.CHANNEL) >= 0) { + return false; + } +}); diff --git a/packages/console-logger-sls/src/index.ts b/packages/console-logger-sls/src/index.ts new file mode 100644 index 000000000..c23da4eed --- /dev/null +++ b/packages/console-logger-sls/src/index.ts @@ -0,0 +1,20 @@ +import { + FactoryOptions, + FactoryFn, + LogFn +} from '@alicloud/logger-sls'; + +import factory from './_factory'; +import chooseStoreByEnv from './_choose-store-by-env'; + +export default factory; + +export { + chooseStoreByEnv +}; + +export type { + FactoryOptions, + FactoryFn, + LogFn +}; diff --git a/packages/console-logger-sls/stories/demo-default/index.tsx b/packages/console-logger-sls/stories/demo-default/index.tsx new file mode 100644 index 000000000..e5e52452a --- /dev/null +++ b/packages/console-logger-sls/stories/demo-default/index.tsx @@ -0,0 +1,37 @@ +import React from 'react'; + +import { + P, + Button +} from '@alicloud/demo-rc-elements'; + +import createLogger from '../../src'; + +const sls = createLogger({ + project: 'boshit-test-sls', + endpoint: 'cn-hangzhou.log.aliyuncs.com', + logstore: 'nbtest', + defaultParams() { + return { + fuck: Date.now() + }; + } +}); + +function testSls(): void { + sls('@alicloud/console-logger-sls'); + sls.debug('@alicloud/console-logger-sls/debug'); + sls.log('@alicloud/console-logger-sls/log'); + sls.info('@alicloud/console-logger-sls/info'); + sls.warn('@alicloud/console-logger-sls/warn'); + sls.error('@alicloud/console-logger-sls/error'); + sls.fatal('@alicloud/console-logger-sls/fatal'); + sls.biz('@alicloud/console-logger-sls/biz'); +} + +export default function DemoDefault(): JSX.Element { + return <> +

看 Console

+ + ; +} diff --git a/packages/console-logger-sls/stories/index.stories.tsx b/packages/console-logger-sls/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/console-logger-sls/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/console-logger-sls/tests/index.spec.ts b/packages/console-logger-sls/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/console-logger-sls/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/console-logger-sls/tsconfig.json b/packages/console-logger-sls/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/console-logger-sls/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} From ab3f9cd14057b66db81540ff0b231011362aa7a1 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Mon, 30 Nov 2020 10:27:08 +0800 Subject: [PATCH 109/135] FIX some lint issue --- packages/base64/src/util/atob.ts | 6 ++- packages/base64/src/util/btoa.ts | 4 +- packages/base64/src/util/btou.ts | 3 +- packages/base64/src/util/utob.ts | 4 +- packages/base64/tests/index.spec.ts | 12 ++--- .../src/model/util/push-stack.ts | 48 +++++++++---------- .../src/model/hook/use-dropdown.ts | 4 +- .../stories/index.stories.tsx | 4 +- .../stories/index.stories.tsx | 4 +- .../src/util/convert-risk-info.ts | 2 +- .../src/util/create-interceptor.ts | 2 +- .../stories/demo-default/index.tsx | 1 - .../demo-rc-elements/src/rc/flex-100hbf.tsx | 11 ++++- 13 files changed, 58 insertions(+), 47 deletions(-) diff --git a/packages/base64/src/util/atob.ts b/packages/base64/src/util/atob.ts index ec75ad621..c6efdd5e1 100644 --- a/packages/base64/src/util/atob.ts +++ b/packages/base64/src/util/atob.ts @@ -1,8 +1,13 @@ +/* eslint-disable no-bitwise */ import { REG_ATOB, B64TAB } from '../const'; +const { + fromCharCode +} = String; + /** * window 自带的 atob 和 btoa https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding * @@ -26,7 +31,6 @@ function atobPolyfill(a: string): string { const len = cccc.length; const padLen = len % 4; const n = (len > 0 ? B64TAB[cccc.charAt(0)] << 18 : 0) | (len > 1 ? B64TAB[cccc.charAt(1)] << 12 : 0) | (len > 2 ? B64TAB[cccc.charAt(2)] << 6 : 0) | (len > 3 ? B64TAB[cccc.charAt(3)] : 0); - const chars = [ fromCharCode(n >>> 16), fromCharCode((n >>> 8) & 0xff), diff --git a/packages/base64/src/util/btoa.ts b/packages/base64/src/util/btoa.ts index be7aadacd..985e7b80a 100644 --- a/packages/base64/src/util/btoa.ts +++ b/packages/base64/src/util/btoa.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-bitwise */ import { REG_BTOA, CHARS @@ -6,8 +7,7 @@ import { function btoaPolyfill(b: string): string { return b.replace(REG_BTOA, ccc => { const padLen = [0, 2, 1][ccc.length % 3]; - // eslint-disable-next-line no-mixed-operators - const ord = ccc.charCodeAt(0) << 16 | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)); + const ord = (ccc.charCodeAt(0) << 16) | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)); return [ CHARS.charAt(ord >>> 18), diff --git a/packages/base64/src/util/btou.ts b/packages/base64/src/util/btou.ts index 6209351c0..a1c55edb8 100644 --- a/packages/base64/src/util/btou.ts +++ b/packages/base64/src/util/btou.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-bitwise */ import { REG_BTOU } from '../const'; @@ -9,7 +10,7 @@ const { /** * unicode 版编码 */ -export default function btou(b): string { +export default function btou(b: string): string { return b.replace(REG_BTOU, cccc => { switch (cccc.length) { case 4: { diff --git a/packages/base64/src/util/utob.ts b/packages/base64/src/util/utob.ts index 4fd7e5859..55a4fcaf4 100644 --- a/packages/base64/src/util/utob.ts +++ b/packages/base64/src/util/utob.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-bitwise, no-nested-ternary */ import { REG_UTOB } from '../const'; @@ -9,12 +10,11 @@ const { /** * unicode 版解码 */ -export default function utob(u): string { +export default function utob(u: string): string { return u.replace(REG_UTOB, c => { if (c.length < 2) { const cc = c.charCodeAt(0); - // eslint-disable-next-line no-nested-ternary return cc < 0x80 ? c : cc < 0x800 ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f)) : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) + fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) + fromCharCode(0x80 | (cc & 0x3f)); // eslint-disable-line max-len } diff --git a/packages/base64/tests/index.spec.ts b/packages/base64/tests/index.spec.ts index 000cf9d11..db363181c 100644 --- a/packages/base64/tests/index.spec.ts +++ b/packages/base64/tests/index.spec.ts @@ -17,9 +17,7 @@ describe(pkgInfo.name, () => { const strangeChineseEncoded = '5by+'; const strangeChineseEncodedSafe = '5by-'; - import pkgInfo from '../package.json'; - -describe(pkgInfo.name, () => { + describe('encode non-unicode', () => { it('should encode right', () => { expect(encode(helloWorld)).toEqual(helloWorldEncoded); }); @@ -29,9 +27,7 @@ describe(pkgInfo.name, () => { }); }); - import pkgInfo from '../package.json'; - -describe(pkgInfo.name, () => { + describe('encode unicode (should NOT throw as window.btoa does)', () => { it('should encode right', () => { expect(encode(helloWorldChinese)).toEqual(helloWorldChineseEncoded); }); @@ -49,9 +45,7 @@ describe(pkgInfo.name, () => { }); }); - import pkgInfo from '../package.json'; - -describe(pkgInfo.name, () => { + describe('decode', () => { it('should decode back to original, whether safe or not', () => { expect(decode(helloWorldEncoded)).toEqual(helloWorld); expect(decode(helloWorldEncodedSafe)).toEqual(helloWorld); diff --git a/packages/console-base-rc-dialog/src/model/util/push-stack.ts b/packages/console-base-rc-dialog/src/model/util/push-stack.ts index 6772aa819..5530cb300 100644 --- a/packages/console-base-rc-dialog/src/model/util/push-stack.ts +++ b/packages/console-base-rc-dialog/src/model/util/push-stack.ts @@ -14,6 +14,30 @@ import getNextElementToFocus from './get-next-element-to-focus'; const STACK = createStack(); +/** + * 找到「最顶」的 dialog,这里的最顶不一定是 id 最大的,它是指 z-index 最大的当中 id 最大的那个 + */ +function findTopmost(): IDialogStackItem | undefined { + let topmostZIndex = -1; + let topmostNumId = -1; + + STACK.each((v, k) => { + const { + zIndex + } = v; + const num = Number(k); + + if (zIndex > topmostZIndex) { + topmostZIndex = zIndex; + topmostNumId = num; + } else if (zIndex === topmostZIndex && num > topmostNumId) { + topmostNumId = num; + } + }); + + return STACK.get(topmostNumId); +} + /** * 判断鼠标点击事件是否发生在 dialog 内部 */ @@ -103,30 +127,6 @@ function handleMouseDownTrapTab(e: KeyboardEvent): void { e.preventDefault(); } -/** - * 找到「最顶」的 dialog,这里的最顶不一定是 id 最大的,它是指 z-index 最大的当中 id 最大的那个 - */ -function findTopmost(): IDialogStackItem | undefined { - let topmostZIndex = -1; - let topmostNumId = -1; - - STACK.each((v, k) => { - const { - zIndex - } = v; - const num = Number(k); - - if (zIndex > topmostZIndex) { - topmostZIndex = zIndex; - topmostNumId = num; - } else if (zIndex === topmostZIndex && num > topmostNumId) { - topmostNumId = num; - } - }); - - return STACK.get(topmostNumId); -} - /** * 处理背投和 z-index */ diff --git a/packages/console-base-rc-dropdown/src/model/hook/use-dropdown.ts b/packages/console-base-rc-dropdown/src/model/hook/use-dropdown.ts index 6d087e7c3..59d96e68e 100644 --- a/packages/console-base-rc-dropdown/src/model/hook/use-dropdown.ts +++ b/packages/console-base-rc-dropdown/src/model/hook/use-dropdown.ts @@ -15,8 +15,8 @@ import useDispatchToggleVisible from './use-dispatch-toggle-visible'; export default function useDropdown(): IContextForContent { const visible = useVisible(); const dispatchToggleVisible = useDispatchToggleVisible(); - const showDrop = useCallback(() => dispatchToggleVisible(true), []); - const hideDrop = useCallback(() => dispatchToggleVisible(false), []); + const showDrop = useCallback(() => dispatchToggleVisible(true), [dispatchToggleVisible]); + const hideDrop = useCallback(() => dispatchToggleVisible(false), [dispatchToggleVisible]); return useMemo(():IContextForContent => ({ visible, diff --git a/packages/console-base-rc-dropdown/stories/index.stories.tsx b/packages/console-base-rc-dropdown/stories/index.stories.tsx index 6a9f11366..c55d909d3 100644 --- a/packages/console-base-rc-dropdown/stories/index.stories.tsx +++ b/packages/console-base-rc-dropdown/stories/index.stories.tsx @@ -6,10 +6,12 @@ import { withKnobs } from '@storybook/addon-knobs'; +import pkgInfo from '../package.json'; + import DemoDefault from './demo-default'; import DemoHook from './demo-hook'; -storiesOf('@alicloud/console-base-rc-dropdown', module) +storiesOf(pkgInfo.name, module) .addDecorator(withKnobs) .add('default', () => ) .add('hook', () => ); diff --git a/packages/console-fetcher-interceptor-req-mock/stories/index.stories.tsx b/packages/console-fetcher-interceptor-req-mock/stories/index.stories.tsx index 581c1aa7d..985c243b5 100644 --- a/packages/console-fetcher-interceptor-req-mock/stories/index.stories.tsx +++ b/packages/console-fetcher-interceptor-req-mock/stories/index.stories.tsx @@ -6,10 +6,12 @@ import { withKnobs } from '@storybook/addon-knobs'; +import pkgInfo from '../package.json'; + import DemoDefault from './demo-default'; import DemoOne from './demo-one'; -storiesOf('@alicloud/console-fetcher-interceptor-req-mock', module) +storiesOf(pkgInfo.name, module) .addDecorator(withKnobs) .add('default', () => ) .add('one', () => ); diff --git a/packages/console-fetcher-interceptor-res-risk/src/util/convert-risk-info.ts b/packages/console-fetcher-interceptor-res-risk/src/util/convert-risk-info.ts index b8fe995ea..cd4fb3aa1 100644 --- a/packages/console-fetcher-interceptor-res-risk/src/util/convert-risk-info.ts +++ b/packages/console-fetcher-interceptor-res-risk/src/util/convert-risk-info.ts @@ -7,7 +7,7 @@ import { import convertVerifyType from './convert-veriy-type'; -export default function convertRiskInfo(responseData: any, riskConfig: IRiskConfig): IRiskInfo { +export default function convertRiskInfo(responseData: unknown, riskConfig: IRiskConfig): IRiskInfo { const type0: string = _get(responseData, riskConfig.DATA_PATH_VERIFY_TYPE, '') as string; const detail: string = _get(responseData, riskConfig.DATA_PATH_VERIFY_DETAIL, '') as string; const codeType: string = _get(responseData, riskConfig.DATA_PATH_VERIFY_CODE_TYPE, '') as string; diff --git a/packages/console-fetcher-interceptor-res-risk/src/util/create-interceptor.ts b/packages/console-fetcher-interceptor-res-risk/src/util/create-interceptor.ts index 48dca396d..79f1d21ed 100644 --- a/packages/console-fetcher-interceptor-res-risk/src/util/create-interceptor.ts +++ b/packages/console-fetcher-interceptor-res-risk/src/util/create-interceptor.ts @@ -20,12 +20,12 @@ import intl from '../intl'; import riskForbidden from './risk/forbidden'; import riskInvalid from './risk/invalid'; import riskVerify from './risk/verify'; +import convertRiskInfo from './convert-risk-info'; import { convertToRiskErrorForbidden, convertToRiskErrorInvalid, convertToRiskErrorCancelled } from './error'; -import convertRiskInfo from './convert-risk-info'; /** * 根据业务错误 code 为基础的 fetcher 添加风控流程 diff --git a/packages/console-one-config/stories/demo-default/index.tsx b/packages/console-one-config/stories/demo-default/index.tsx index 119c0ead9..4f911b091 100644 --- a/packages/console-one-config/stories/demo-default/index.tsx +++ b/packages/console-one-config/stories/demo-default/index.tsx @@ -3,7 +3,6 @@ import React from 'react'; import { CleanJson } from '@alicloud/demo-rc-elements'; - import ONE_CONF from '@alicloud/console-one-config'; export default function DemoDefault(): JSX.Element { diff --git a/packages/demo-rc-elements/src/rc/flex-100hbf.tsx b/packages/demo-rc-elements/src/rc/flex-100hbf.tsx index 7bf5e4d54..fd98ce521 100644 --- a/packages/demo-rc-elements/src/rc/flex-100hbf.tsx +++ b/packages/demo-rc-elements/src/rc/flex-100hbf.tsx @@ -36,6 +36,15 @@ const ScFooter = styled.div` color: #fff; `; +const VIDEO_SRC = '//cloud.video.taobao.com/play/u/2228430214/p/1/e/6/t/1/228097371190.mp4'; + +function DefaultBody(): JSX.Element { + return ; +} + /** * Flex 100% 高度,上中下三部分 */ @@ -47,7 +56,7 @@ export default function Flex100HBF({ return {header || 'header'} - {body || {footer || 'footer'} ; From cbfc79fe5dad1870c9c57ed21cb16618a7c87168 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Mon, 30 Nov 2020 10:41:30 +0800 Subject: [PATCH 110/135] OPT better demo --- packages/console-base-conf-account/package.json | 1 + .../stories/demo-default/index.tsx | 11 ++++++++++- packages/console-base-conf-env/package.json | 1 + .../stories/demo-default/index.tsx | 11 ++++++++++- .../stories/demo-default/index.tsx | 9 ++++----- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/packages/console-base-conf-account/package.json b/packages/console-base-conf-account/package.json index 672dc1597..dcdb83da6 100755 --- a/packages/console-base-conf-account/package.json +++ b/packages/console-base-conf-account/package.json @@ -25,6 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/console-base-conf-account/stories/demo-default/index.tsx b/packages/console-base-conf-account/stories/demo-default/index.tsx index c9dc07f87..86449ee41 100644 --- a/packages/console-base-conf-account/stories/demo-default/index.tsx +++ b/packages/console-base-conf-account/stories/demo-default/index.tsx @@ -1,5 +1,14 @@ import React from 'react'; +import { + CleanJson +} from '@alicloud/demo-rc-elements'; + +import CONF_ACCOUNT from '../../src'; + export default function DemoDefault(): JSX.Element { - return <>天有不测风云; + return ; } diff --git a/packages/console-base-conf-env/package.json b/packages/console-base-conf-env/package.json index d3390ce8e..01c87f7a3 100755 --- a/packages/console-base-conf-env/package.json +++ b/packages/console-base-conf-env/package.json @@ -25,6 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/console-base-conf-env/stories/demo-default/index.tsx b/packages/console-base-conf-env/stories/demo-default/index.tsx index c9dc07f87..772cef0f7 100644 --- a/packages/console-base-conf-env/stories/demo-default/index.tsx +++ b/packages/console-base-conf-env/stories/demo-default/index.tsx @@ -1,5 +1,14 @@ import React from 'react'; +import { + CleanJson +} from '@alicloud/demo-rc-elements'; + +import CONF_ENV from '../../src'; + export default function DemoDefault(): JSX.Element { - return <>天有不测风云; + return ; } diff --git a/packages/console-base-conf-locale/stories/demo-default/index.tsx b/packages/console-base-conf-locale/stories/demo-default/index.tsx index 77877deb6..cc1ec7c82 100644 --- a/packages/console-base-conf-locale/stories/demo-default/index.tsx +++ b/packages/console-base-conf-locale/stories/demo-default/index.tsx @@ -1,15 +1,14 @@ import React from 'react'; import { - H1, CleanJson } from '@alicloud/demo-rc-elements'; import CONF_LOCALE from '../../src'; export default function DemoDefault(): JSX.Element { - return <> -

CONF_LOCALE

- - ; + return ; } From 5a921108c383a89d5b9f50a8d629926e712d0c6d Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Mon, 30 Nov 2020 10:46:57 +0800 Subject: [PATCH 111/135] CHORE changelog --- packages/base64/CHANGELOG.md | 2 +- packages/console-base-common-typings/CHANGELOG.md | 2 +- packages/console-base-conf-account/CHANGELOG.md | 2 +- packages/console-base-conf-env/CHANGELOG.md | 2 +- packages/console-base-conf-locale/CHANGELOG.md | 2 +- packages/console-base-conf-product-id/CHANGELOG.md | 2 +- packages/console-base-demo-helpers/CHANGELOG.md | 2 +- packages/console-base-error-prompt-proxy/CHANGELOG.md | 2 +- packages/console-base-error-prompt/CHANGELOG.md | 2 +- packages/console-base-global/CHANGELOG.md | 2 +- packages/console-base-intl-factory-basic/CHANGELOG.md | 2 +- packages/console-base-intl-factory/CHANGELOG.md | 2 +- packages/console-base-log-sls/CHANGELOG.md | 2 +- packages/console-base-messenger/CHANGELOG.md | 2 +- packages/console-base-rc-breadcrumb/CHANGELOG.md | 2 +- packages/console-base-rc-button/CHANGELOG.md | 2 +- packages/console-base-rc-dialog/CHANGELOG.md | 2 +- packages/console-base-rc-dropdown/CHANGELOG.md | 2 +- packages/console-base-rc-flex/CHANGELOG.md | 2 +- packages/console-base-rc-icon/CHANGELOG.md | 2 +- packages/console-base-rc-input/CHANGELOG.md | 2 +- packages/console-base-rc-intl/CHANGELOG.md | 2 +- packages/console-base-rc-key-value/CHANGELOG.md | 2 +- packages/console-base-rc-loading/CHANGELOG.md | 2 +- packages/console-base-rc-marks/CHANGELOG.md | 2 +- packages/console-base-rc-pagination/CHANGELOG.md | 2 +- packages/console-base-styled-mixin/CHANGELOG.md | 2 +- packages/console-fetcher-basic/CHANGELOG.md | 2 +- packages/console-fetcher-interceptor-arms/CHANGELOG.md | 2 +- packages/console-fetcher-interceptor-fecs/CHANGELOG.md | 2 +- packages/console-fetcher-interceptor-req-mock/CHANGELOG.md | 2 +- packages/console-fetcher-interceptor-req-security/CHANGELOG.md | 2 +- packages/console-fetcher-interceptor-res-biz/CHANGELOG.md | 2 +- .../console-fetcher-interceptor-res-error-message/CHANGELOG.md | 2 +- packages/console-fetcher-interceptor-res-risk/CHANGELOG.md | 2 +- packages/console-fetcher-interceptor-sls/CHANGELOG.md | 2 +- packages/console-fetcher-proxy/CHANGELOG.md | 2 +- packages/console-fetcher/CHANGELOG.md | 2 +- packages/console-logger-sls/CHANGELOG.md | 2 +- packages/console-one-config/CHANGELOG.md | 2 +- packages/cookie/CHANGELOG.md | 2 +- packages/copy-text/CHANGELOG.md | 2 +- packages/demo-rc-elements/CHANGELOG.md | 2 +- packages/dom-event-hijacker/CHANGELOG.md | 2 +- packages/eslint-config/CHANGELOG.md | 2 +- packages/fetcher-fetch/CHANGELOG.md | 2 +- packages/fetcher-jsonp/CHANGELOG.md | 2 +- packages/fetcher/CHANGELOG.md | 2 +- packages/logger-sls/CHANGELOG.md | 2 +- packages/post-message/CHANGELOG.md | 2 +- packages/react-hook-is-unmounted/CHANGELOG.md | 2 +- packages/storage-factory/CHANGELOG.md | 2 +- packages/stylelint-config/CHANGELOG.md | 2 +- 53 files changed, 53 insertions(+), 53 deletions(-) diff --git a/packages/base64/CHANGELOG.md b/packages/base64/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/base64/CHANGELOG.md +++ b/packages/base64/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-common-typings/CHANGELOG.md b/packages/console-base-common-typings/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-common-typings/CHANGELOG.md +++ b/packages/console-base-common-typings/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-conf-account/CHANGELOG.md b/packages/console-base-conf-account/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-conf-account/CHANGELOG.md +++ b/packages/console-base-conf-account/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-conf-env/CHANGELOG.md b/packages/console-base-conf-env/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-conf-env/CHANGELOG.md +++ b/packages/console-base-conf-env/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-conf-locale/CHANGELOG.md b/packages/console-base-conf-locale/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-conf-locale/CHANGELOG.md +++ b/packages/console-base-conf-locale/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-conf-product-id/CHANGELOG.md b/packages/console-base-conf-product-id/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-conf-product-id/CHANGELOG.md +++ b/packages/console-base-conf-product-id/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-demo-helpers/CHANGELOG.md b/packages/console-base-demo-helpers/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-demo-helpers/CHANGELOG.md +++ b/packages/console-base-demo-helpers/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-error-prompt-proxy/CHANGELOG.md b/packages/console-base-error-prompt-proxy/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-error-prompt-proxy/CHANGELOG.md +++ b/packages/console-base-error-prompt-proxy/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-error-prompt/CHANGELOG.md b/packages/console-base-error-prompt/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-error-prompt/CHANGELOG.md +++ b/packages/console-base-error-prompt/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-global/CHANGELOG.md b/packages/console-base-global/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-global/CHANGELOG.md +++ b/packages/console-base-global/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-intl-factory-basic/CHANGELOG.md b/packages/console-base-intl-factory-basic/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-intl-factory-basic/CHANGELOG.md +++ b/packages/console-base-intl-factory-basic/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-intl-factory/CHANGELOG.md b/packages/console-base-intl-factory/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-intl-factory/CHANGELOG.md +++ b/packages/console-base-intl-factory/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-log-sls/CHANGELOG.md b/packages/console-base-log-sls/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-log-sls/CHANGELOG.md +++ b/packages/console-base-log-sls/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-messenger/CHANGELOG.md b/packages/console-base-messenger/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-messenger/CHANGELOG.md +++ b/packages/console-base-messenger/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-breadcrumb/CHANGELOG.md b/packages/console-base-rc-breadcrumb/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-breadcrumb/CHANGELOG.md +++ b/packages/console-base-rc-breadcrumb/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-button/CHANGELOG.md b/packages/console-base-rc-button/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-button/CHANGELOG.md +++ b/packages/console-base-rc-button/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-dialog/CHANGELOG.md b/packages/console-base-rc-dialog/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-dialog/CHANGELOG.md +++ b/packages/console-base-rc-dialog/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-dropdown/CHANGELOG.md b/packages/console-base-rc-dropdown/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-dropdown/CHANGELOG.md +++ b/packages/console-base-rc-dropdown/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-flex/CHANGELOG.md b/packages/console-base-rc-flex/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-flex/CHANGELOG.md +++ b/packages/console-base-rc-flex/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-icon/CHANGELOG.md b/packages/console-base-rc-icon/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-icon/CHANGELOG.md +++ b/packages/console-base-rc-icon/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-input/CHANGELOG.md b/packages/console-base-rc-input/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-input/CHANGELOG.md +++ b/packages/console-base-rc-input/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-intl/CHANGELOG.md b/packages/console-base-rc-intl/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-intl/CHANGELOG.md +++ b/packages/console-base-rc-intl/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-key-value/CHANGELOG.md b/packages/console-base-rc-key-value/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-key-value/CHANGELOG.md +++ b/packages/console-base-rc-key-value/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-loading/CHANGELOG.md b/packages/console-base-rc-loading/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-loading/CHANGELOG.md +++ b/packages/console-base-rc-loading/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-marks/CHANGELOG.md b/packages/console-base-rc-marks/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-marks/CHANGELOG.md +++ b/packages/console-base-rc-marks/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-rc-pagination/CHANGELOG.md b/packages/console-base-rc-pagination/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-rc-pagination/CHANGELOG.md +++ b/packages/console-base-rc-pagination/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-base-styled-mixin/CHANGELOG.md b/packages/console-base-styled-mixin/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-base-styled-mixin/CHANGELOG.md +++ b/packages/console-base-styled-mixin/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-fetcher-basic/CHANGELOG.md b/packages/console-fetcher-basic/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-fetcher-basic/CHANGELOG.md +++ b/packages/console-fetcher-basic/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-fetcher-interceptor-arms/CHANGELOG.md b/packages/console-fetcher-interceptor-arms/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-fetcher-interceptor-arms/CHANGELOG.md +++ b/packages/console-fetcher-interceptor-arms/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-fetcher-interceptor-fecs/CHANGELOG.md b/packages/console-fetcher-interceptor-fecs/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-fetcher-interceptor-fecs/CHANGELOG.md +++ b/packages/console-fetcher-interceptor-fecs/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-fetcher-interceptor-req-mock/CHANGELOG.md b/packages/console-fetcher-interceptor-req-mock/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-fetcher-interceptor-req-mock/CHANGELOG.md +++ b/packages/console-fetcher-interceptor-req-mock/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-fetcher-interceptor-req-security/CHANGELOG.md b/packages/console-fetcher-interceptor-req-security/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-fetcher-interceptor-req-security/CHANGELOG.md +++ b/packages/console-fetcher-interceptor-req-security/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-fetcher-interceptor-res-biz/CHANGELOG.md b/packages/console-fetcher-interceptor-res-biz/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-fetcher-interceptor-res-biz/CHANGELOG.md +++ b/packages/console-fetcher-interceptor-res-biz/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-fetcher-interceptor-res-error-message/CHANGELOG.md b/packages/console-fetcher-interceptor-res-error-message/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-fetcher-interceptor-res-error-message/CHANGELOG.md +++ b/packages/console-fetcher-interceptor-res-error-message/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-fetcher-interceptor-res-risk/CHANGELOG.md b/packages/console-fetcher-interceptor-res-risk/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-fetcher-interceptor-res-risk/CHANGELOG.md +++ b/packages/console-fetcher-interceptor-res-risk/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-fetcher-interceptor-sls/CHANGELOG.md b/packages/console-fetcher-interceptor-sls/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-fetcher-interceptor-sls/CHANGELOG.md +++ b/packages/console-fetcher-interceptor-sls/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-fetcher-proxy/CHANGELOG.md b/packages/console-fetcher-proxy/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-fetcher-proxy/CHANGELOG.md +++ b/packages/console-fetcher-proxy/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-fetcher/CHANGELOG.md b/packages/console-fetcher/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-fetcher/CHANGELOG.md +++ b/packages/console-fetcher/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-logger-sls/CHANGELOG.md b/packages/console-logger-sls/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-logger-sls/CHANGELOG.md +++ b/packages/console-logger-sls/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/console-one-config/CHANGELOG.md b/packages/console-one-config/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/console-one-config/CHANGELOG.md +++ b/packages/console-one-config/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/cookie/CHANGELOG.md b/packages/cookie/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/cookie/CHANGELOG.md +++ b/packages/cookie/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/copy-text/CHANGELOG.md b/packages/copy-text/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/copy-text/CHANGELOG.md +++ b/packages/copy-text/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/demo-rc-elements/CHANGELOG.md b/packages/demo-rc-elements/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/demo-rc-elements/CHANGELOG.md +++ b/packages/demo-rc-elements/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/dom-event-hijacker/CHANGELOG.md b/packages/dom-event-hijacker/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/dom-event-hijacker/CHANGELOG.md +++ b/packages/dom-event-hijacker/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/eslint-config/CHANGELOG.md b/packages/eslint-config/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/eslint-config/CHANGELOG.md +++ b/packages/eslint-config/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/fetcher-fetch/CHANGELOG.md b/packages/fetcher-fetch/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/fetcher-fetch/CHANGELOG.md +++ b/packages/fetcher-fetch/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/fetcher-jsonp/CHANGELOG.md b/packages/fetcher-jsonp/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/fetcher-jsonp/CHANGELOG.md +++ b/packages/fetcher-jsonp/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/fetcher/CHANGELOG.md b/packages/fetcher/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/fetcher/CHANGELOG.md +++ b/packages/fetcher/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/logger-sls/CHANGELOG.md b/packages/logger-sls/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/logger-sls/CHANGELOG.md +++ b/packages/logger-sls/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/post-message/CHANGELOG.md b/packages/post-message/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/post-message/CHANGELOG.md +++ b/packages/post-message/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/react-hook-is-unmounted/CHANGELOG.md b/packages/react-hook-is-unmounted/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/react-hook-is-unmounted/CHANGELOG.md +++ b/packages/react-hook-is-unmounted/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/storage-factory/CHANGELOG.md b/packages/storage-factory/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/storage-factory/CHANGELOG.md +++ b/packages/storage-factory/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 diff --git a/packages/stylelint-config/CHANGELOG.md b/packages/stylelint-config/CHANGELOG.md index ba597b719..97a7f784d 100644 --- a/packages/stylelint-config/CHANGELOG.md +++ b/packages/stylelint-config/CHANGELOG.md @@ -1,6 +1,6 @@ HISTORY === -# 1.0.0 2020/11/26 @驳是 +# 1.0.0 2020/11/30 @驳是 * 开源第一版 From 0cf715568493f62b15a009847c3d97910f8a8af9 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Mon, 30 Nov 2020 14:54:38 +0800 Subject: [PATCH 112/135] CHORE added PrePromise in demo elements --- .../stories/demo-default/index.tsx | 4 +- .../stories/demo-default/index.tsx | 4 +- .../stories/demo-default/index.tsx | 4 +- .../messenger-for-region/on-change/index.tsx | 4 +- .../on-change/index.tsx | 4 +- .../stories/demo-default/index.tsx | 4 +- .../stories/demo-default/index.tsx | 4 +- packages/cookie/src/util/get-all-cookies.ts | 4 +- .../cookie/stories/demo-default/index.tsx | 9 +- packages/demo-rc-elements/README.md | 2 +- packages/demo-rc-elements/src/index.ts | 16 ++- .../src/rc/{clean-json.tsx => pre-json.tsx} | 6 +- .../demo-rc-elements/src/rc/pre-promise.tsx | 108 ++++++++++++++++++ packages/demo-rc-elements/src/types/index.ts | 6 +- .../stories/demo-default/index.tsx | 38 +++++- 15 files changed, 179 insertions(+), 38 deletions(-) rename packages/demo-rc-elements/src/rc/{clean-json.tsx => pre-json.tsx} (86%) create mode 100644 packages/demo-rc-elements/src/rc/pre-promise.tsx diff --git a/packages/console-base-conf-account/stories/demo-default/index.tsx b/packages/console-base-conf-account/stories/demo-default/index.tsx index 86449ee41..f581b9b6e 100644 --- a/packages/console-base-conf-account/stories/demo-default/index.tsx +++ b/packages/console-base-conf-account/stories/demo-default/index.tsx @@ -1,13 +1,13 @@ import React from 'react'; import { - CleanJson + PreJson } from '@alicloud/demo-rc-elements'; import CONF_ACCOUNT from '../../src'; export default function DemoDefault(): JSX.Element { - return ; diff --git a/packages/console-base-conf-env/stories/demo-default/index.tsx b/packages/console-base-conf-env/stories/demo-default/index.tsx index 772cef0f7..eee4684a0 100644 --- a/packages/console-base-conf-env/stories/demo-default/index.tsx +++ b/packages/console-base-conf-env/stories/demo-default/index.tsx @@ -1,13 +1,13 @@ import React from 'react'; import { - CleanJson + PreJson } from '@alicloud/demo-rc-elements'; import CONF_ENV from '../../src'; export default function DemoDefault(): JSX.Element { - return ; diff --git a/packages/console-base-conf-locale/stories/demo-default/index.tsx b/packages/console-base-conf-locale/stories/demo-default/index.tsx index cc1ec7c82..7290b836d 100644 --- a/packages/console-base-conf-locale/stories/demo-default/index.tsx +++ b/packages/console-base-conf-locale/stories/demo-default/index.tsx @@ -1,13 +1,13 @@ import React from 'react'; import { - CleanJson + PreJson } from '@alicloud/demo-rc-elements'; import CONF_LOCALE from '../../src'; export default function DemoDefault(): JSX.Element { - return ; diff --git a/packages/console-base-demo-helpers/src/rc/messenger-for-region/on-change/index.tsx b/packages/console-base-demo-helpers/src/rc/messenger-for-region/on-change/index.tsx index fee0d095c..fd26cd05c 100644 --- a/packages/console-base-demo-helpers/src/rc/messenger-for-region/on-change/index.tsx +++ b/packages/console-base-demo-helpers/src/rc/messenger-for-region/on-change/index.tsx @@ -5,7 +5,7 @@ import React, { import { H3, - CleanJson + PreJson } from '@alicloud/demo-rc-elements'; import { forApp, @@ -19,6 +19,6 @@ export default function OnChange(): JSX.Element { return <>

forApp.onRegionChange() → stateValue

- + ; } diff --git a/packages/console-base-demo-helpers/src/rc/messenger-for-resource-group/on-change/index.tsx b/packages/console-base-demo-helpers/src/rc/messenger-for-resource-group/on-change/index.tsx index e8f8816ac..42b31c1db 100644 --- a/packages/console-base-demo-helpers/src/rc/messenger-for-resource-group/on-change/index.tsx +++ b/packages/console-base-demo-helpers/src/rc/messenger-for-resource-group/on-change/index.tsx @@ -5,7 +5,7 @@ import React, { import { H3, - CleanJson + PreJson } from '@alicloud/demo-rc-elements'; import { forApp, @@ -19,6 +19,6 @@ export default function OnChange(): JSX.Element { return <>

forApp.onResourceGroupChange() → stateValue

- + ; } diff --git a/packages/console-base-rc-dialog/stories/demo-default/index.tsx b/packages/console-base-rc-dialog/stories/demo-default/index.tsx index 13f9a5e7a..13e9f77d4 100644 --- a/packages/console-base-rc-dialog/stories/demo-default/index.tsx +++ b/packages/console-base-rc-dialog/stories/demo-default/index.tsx @@ -6,7 +6,7 @@ import React, { import { H1, Button, - CleanJson + PreJson } from '@alicloud/demo-rc-elements'; import Dialog, { @@ -56,7 +56,7 @@ export default function DemoDefault(): JSX.Element { - + {stateYes ? ; diff --git a/packages/cookie/src/util/get-all-cookies.ts b/packages/cookie/src/util/get-all-cookies.ts index b53db759a..51d286b4f 100644 --- a/packages/cookie/src/util/get-all-cookies.ts +++ b/packages/cookie/src/util/get-all-cookies.ts @@ -2,7 +2,7 @@ * 获取当前页面可以访问到的全部 cookie */ export default function getAllCookies(): Record { - return document.cookie.split(/\s*;\s*/).reduce((result: Record, v) => { + return document.cookie ? document.cookie.split(/\s*;\s*/).reduce((result: Record, v) => { const [cookieName, cookieValue] = v.split('='); // 原来的实现有问题,set 的时候用的是 `escape`,get 的时候用的是 `decodeURIComponent`,这在大多数情况下 @@ -11,5 +11,5 @@ export default function getAllCookies(): Record { result[cookieName] = decodeURIComponent(cookieValue); return result; - }, {}); + }, {}) : {}; } diff --git a/packages/cookie/stories/demo-default/index.tsx b/packages/cookie/stories/demo-default/index.tsx index 72d4ba3bd..1825ddb5f 100644 --- a/packages/cookie/stories/demo-default/index.tsx +++ b/packages/cookie/stories/demo-default/index.tsx @@ -6,7 +6,7 @@ import React, { import { H1, Button, - CleanJson + PreJson } from '@alicloud/demo-rc-elements'; import { @@ -40,10 +40,9 @@ export default function DemoDefault(): JSX.Element { return <>

全部 Cookie

- - - getCookie({TEST_COOKIE}) → {stateOneCookie} - {`deleteCookie('${TEST_COOKIE}')`} + + diff --git a/packages/demo-rc-elements/README.md b/packages/demo-rc-elements/README.md index f9df3dea1..6f891f5d9 100644 --- a/packages/demo-rc-elements/README.md +++ b/packages/demo-rc-elements/README.md @@ -20,7 +20,7 @@ - `List` - `CheckboxGroup` - `RadioGroup` - - `CleanJson` + - `PreJson` - `Flex100HBF` - `LongArticle` diff --git a/packages/demo-rc-elements/src/index.ts b/packages/demo-rc-elements/src/index.ts index ae0dfbb5c..4c7fc8369 100644 --- a/packages/demo-rc-elements/src/index.ts +++ b/packages/demo-rc-elements/src/index.ts @@ -1,6 +1,7 @@ import { IPropsPre as PreProps, - IPropsCleanJson as CleanJsonProps, + IPropsPreJson as PreJsonProps, + IPropsPrePromise as PrePromiseProps, IPropsList as ListProps, IChoiceItem as ChoiceItem, TPropsCheckboxGroup as CheckboxGroupProps, @@ -14,19 +15,20 @@ import { H4 } from './rc/h1234'; import P from './rc/p'; -import Pre from './rc/pre'; import Hr from './rc/hr'; import Button from './rc/button'; import { InputText, InputTextarea } from './rc/input'; +import Pre from './rc/pre'; +import PreJson from './rc/pre-json'; +import PrePromise from './rc/pre-promise'; import List from './rc/list'; import { CheckboxGroup, RadioGroup } from './rc/choice-group'; -import CleanJson from './rc/clean-json'; import LongArticle from './rc/long-article'; import Flex100HBF from './rc/flex-100hbf'; @@ -36,22 +38,24 @@ export { H3, H4, P, - Pre, Hr, Button, InputText, InputTextarea, + Pre, + PreJson, + PrePromise, List, CheckboxGroup, RadioGroup, - CleanJson, LongArticle, Flex100HBF }; export type { PreProps, - CleanJsonProps, + PreJsonProps, + PrePromiseProps, ListProps, ChoiceItem, CheckboxGroupProps, diff --git a/packages/demo-rc-elements/src/rc/clean-json.tsx b/packages/demo-rc-elements/src/rc/pre-json.tsx similarity index 86% rename from packages/demo-rc-elements/src/rc/clean-json.tsx rename to packages/demo-rc-elements/src/rc/pre-json.tsx index 794357206..440ff3316 100644 --- a/packages/demo-rc-elements/src/rc/clean-json.tsx +++ b/packages/demo-rc-elements/src/rc/pre-json.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { - IPropsCleanJson + IPropsPreJson } from '../types'; import Pre from './pre'; @@ -29,9 +29,9 @@ function formatJson(o: unknown): string { /** * 展示简化的 JSON */ -export default function CleanJson({ +export default function PreJson({ o, ...props -}: IPropsCleanJson): JSX.Element { +}: IPropsPreJson): JSX.Element { return
{formatJson(o)}
; } diff --git a/packages/demo-rc-elements/src/rc/pre-promise.tsx b/packages/demo-rc-elements/src/rc/pre-promise.tsx new file mode 100644 index 000000000..308583f4a --- /dev/null +++ b/packages/demo-rc-elements/src/rc/pre-promise.tsx @@ -0,0 +1,108 @@ +import React, { + useState, + useEffect +} from 'react'; + +import { + IPropsPrePromise +} from '../types'; + +import Pre from './pre'; +import PreJson from './pre-json'; + +enum ELoading { + IDLE, + LOADING, + RESOLVED, + REJECTED +} + +interface IPromiseResult { + loading: ELoading; + result: unknown; +} + +const BD: Record = { + [ELoading.IDLE]: '#ddd', + [ELoading.LOADING]: '#eed', + [ELoading.RESOLVED]: '#cec', + [ELoading.REJECTED]: '#edd' +}; + +const BG: Record = { + [ELoading.IDLE]: '#eee', + [ELoading.LOADING]: '#ffe', + [ELoading.RESOLVED]: '#dfd', + [ELoading.REJECTED]: '#fee' +}; + +const DEFAULT_RESULT: IPromiseResult = { + loading: ELoading.IDLE, + result: null +}; + +function normalizeError(error: Error): Record { + if (!error) { + return {}; + } + + const o: Record = { + name: error.name, + message: error.message + }; + + // eslint-disable-next-line guard-for-in + for (const k in error) { + o[k] = error[k]; + } + + return o; +} + +export default function PrePromise({ + promise, + style, + ...props +}: IPropsPrePromise): JSX.Element { + const [stateResult, setStateResult] = useState(DEFAULT_RESULT); + const preProps = { + ...props, + style: { + ...style, + borderColor: BD[stateResult.loading], + backgroundColor: BG[stateResult.loading] + } + }; + + useEffect(() => { + if (!promise) { + setStateResult(DEFAULT_RESULT); + + return; + } + + setStateResult({ + loading: ELoading.LOADING, + result: null + }); + + promise.then(result => setStateResult({ + loading: ELoading.RESOLVED, + result + })).catch(err => setStateResult({ + loading: ELoading.REJECTED, + result: err + })); + }, [promise]); + + switch (stateResult.loading) { + case ELoading.IDLE: + return
Idle
; + case ELoading.LOADING: + return
Loading...
; + case ELoading.REJECTED: + return ; + default: + return ; + } +} diff --git a/packages/demo-rc-elements/src/types/index.ts b/packages/demo-rc-elements/src/types/index.ts index ccfa486c2..fbe7ade8b 100644 --- a/packages/demo-rc-elements/src/types/index.ts +++ b/packages/demo-rc-elements/src/types/index.ts @@ -6,10 +6,14 @@ export interface IPropsPre extends HTMLAttributes { caption?: string; } -export interface IPropsCleanJson extends Omit { +export interface IPropsPreJson extends Omit { o?: unknown; } +export interface IPropsPrePromise extends Omit { + promise?: Promise | null; +} + export interface IPropsList extends HTMLAttributes { ordered?: boolean; } diff --git a/packages/demo-rc-elements/stories/demo-default/index.tsx b/packages/demo-rc-elements/stories/demo-default/index.tsx index 36032c0ba..0e8625cc1 100644 --- a/packages/demo-rc-elements/stories/demo-default/index.tsx +++ b/packages/demo-rc-elements/stories/demo-default/index.tsx @@ -1,4 +1,7 @@ -import React from 'react'; +import React, { + useState, + useCallback +} from 'react'; import { // pure styled stuff @@ -7,16 +10,17 @@ import { H3, H4, P, - Pre, Hr, Button, InputText, InputTextarea, // extended + Pre, + PreJson, + PrePromise, List, CheckboxGroup, RadioGroup, - CleanJson, Flex100HBF, LongArticle } from '../../src'; @@ -29,7 +33,25 @@ const TEST_JSON = { jsx: FUCK }; +function randomPromise(): Promise { + return new Promise((resolve, reject) => { + const ram = Math.ceil(Math.random() * 2000); + + setTimeout(() => { + if (ram % 2) { + resolve(ram); + } else { + reject(new Error(`${ram} NOT odd`)); + } + }, ram); + }); +} + export default function DemoDefault(): JSX.Element { + const [statePromise, setStatePromise] = useState | null>(null); + + const handleRandomPromise = useCallback(() => setStatePromise(randomPromise()), [setStatePromise]); + return <>

demo-rc-elements

原生元素,仅加样式

@@ -37,7 +59,6 @@ export default function DemoDefault(): JSX.Element {

4 级标题

P / Pre / Hr / Button / InputText / InputTextArea

一个 P,这里的 strongcodekbdem 会有些样式

-
一个 Pre

@@ -80,8 +101,13 @@ export default function DemoDefault(): JSX.Element { }] }} />

非原生元素,特殊用途

-

CleanJson - 展示对象用

- +

Pre

+
一个 Pre
+

PreJson - 展示对象

+ +

PrePromise - 展示 Promise

+ +

LongArticle - 为了撑高

Flex100HBF - 占满高度的「头-身-尾」组件

From 1538a26db0f9beef2ba86666eefc8d7335521dae Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Mon, 30 Nov 2020 15:07:08 +0800 Subject: [PATCH 113/135] CHORE use PrePromise --- .../demo-default/console-api-test/index.tsx | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/packages/console-fetcher-basic/stories/demo-default/console-api-test/index.tsx b/packages/console-fetcher-basic/stories/demo-default/console-api-test/index.tsx index b0b67356c..76512a47a 100644 --- a/packages/console-fetcher-basic/stories/demo-default/console-api-test/index.tsx +++ b/packages/console-fetcher-basic/stories/demo-default/console-api-test/index.tsx @@ -1,7 +1,11 @@ -import React from 'react'; +import React, { + useState, + useCallback +} from 'react'; import { - Button + Button, + PrePromise } from '@alicloud/demo-rc-elements'; import { DemoTipOfFecs @@ -20,19 +24,19 @@ const { const FAKE_PRODUCT = 'BOSHIT'; const FAKE_ACTION = 'FuckMe'; -function testCallOpenApi(): void { - callOpenApi('slb', 'DescribeRegions', { +function testCallOpenApi(): Promise { + return callOpenApi('slb', 'DescribeRegions', { p1: 'param1', p2: 2 }, { body: { region: 'cn-hangzhou-wuchang' } - }).catch(console.info); + }); } -function testCallInnerApi(): void { - callInnerApi(FAKE_PRODUCT, FAKE_ACTION, { +function testCallInnerApi(): Promise { + return callInnerApi(FAKE_PRODUCT, FAKE_ACTION, { p1: 'param1', p2: 2 }, { @@ -42,22 +46,28 @@ function testCallInnerApi(): void { }); } -function testCallContainerApi(): void { - callContainerApi(FAKE_PRODUCT, FAKE_ACTION, { +function testCallContainerApi(): Promise { + return callContainerApi(FAKE_PRODUCT, FAKE_ACTION, { p1: 'param1', p2: 2 }, { body: { region: 'cn-hangzhou-wuchang' } - }).catch(console.info); + }); } export default function ConsoleApiTest(): JSX.Element { + const [statePromise, setStatePromise] = useState | null>(null); + const handleCallOpenApi = useCallback(() => setStatePromise(testCallOpenApi()), []); + const handleCallInnerApi = useCallback(() => setStatePromise(testCallInnerApi()), []); + const handleCallContainerApi = useCallback(() => setStatePromise(testCallContainerApi()), []); + return <> - - - + + + + ; } From 6c5c23b2946bfc06d11ea0968a9616602d941524 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Mon, 30 Nov 2020 20:03:10 +0800 Subject: [PATCH 114/135] CHORE better demo display --- .../stories/demo-default/index.tsx | 2 +- .../stories/demo-default/index.tsx | 2 +- .../stories/demo-default/index.tsx | 2 +- .../demo-default/special-cases/index.tsx | 4 +- .../stories/demo-default/index.tsx | 14 +--- .../stories/demo-default/index.tsx | 2 +- .../cookie/stories/demo-default/index.tsx | 2 +- .../demo-rc-elements/src/rc/pre-promise.tsx | 19 +++-- packages/demo-rc-elements/src/rc/pre.tsx | 22 ++++-- packages/demo-rc-elements/src/types/index.ts | 3 +- .../src/rc/demo-fetchers/index.tsx | 20 +++-- .../src/rc/demo-request/index.tsx | 11 ++- .../src/rc/display-json/index.tsx | 75 ------------------- .../src/rc/duration/index.tsx | 17 ----- .../src/rc/request-with-config/index.tsx | 42 ++--------- .../src/util/stringify.ts | 19 ----- 16 files changed, 69 insertions(+), 187 deletions(-) delete mode 100644 packages/fetcher-demo-helpers/src/rc/display-json/index.tsx delete mode 100644 packages/fetcher-demo-helpers/src/rc/duration/index.tsx delete mode 100644 packages/fetcher-demo-helpers/src/util/stringify.ts diff --git a/packages/console-base-conf-account/stories/demo-default/index.tsx b/packages/console-base-conf-account/stories/demo-default/index.tsx index f581b9b6e..01a43ec09 100644 --- a/packages/console-base-conf-account/stories/demo-default/index.tsx +++ b/packages/console-base-conf-account/stories/demo-default/index.tsx @@ -8,7 +8,7 @@ import CONF_ACCOUNT from '../../src'; export default function DemoDefault(): JSX.Element { return ; } diff --git a/packages/console-base-conf-env/stories/demo-default/index.tsx b/packages/console-base-conf-env/stories/demo-default/index.tsx index eee4684a0..69ed4c1be 100644 --- a/packages/console-base-conf-env/stories/demo-default/index.tsx +++ b/packages/console-base-conf-env/stories/demo-default/index.tsx @@ -8,7 +8,7 @@ import CONF_ENV from '../../src'; export default function DemoDefault(): JSX.Element { return ; } diff --git a/packages/console-base-conf-locale/stories/demo-default/index.tsx b/packages/console-base-conf-locale/stories/demo-default/index.tsx index 7290b836d..89f477426 100644 --- a/packages/console-base-conf-locale/stories/demo-default/index.tsx +++ b/packages/console-base-conf-locale/stories/demo-default/index.tsx @@ -8,7 +8,7 @@ import CONF_LOCALE from '../../src'; export default function DemoDefault(): JSX.Element { return ; } diff --git a/packages/console-base-error-prompt-proxy/stories/demo-default/special-cases/index.tsx b/packages/console-base-error-prompt-proxy/stories/demo-default/special-cases/index.tsx index a306d1efd..376297ec6 100644 --- a/packages/console-base-error-prompt-proxy/stories/demo-default/special-cases/index.tsx +++ b/packages/console-base-error-prompt-proxy/stories/demo-default/special-cases/index.tsx @@ -2,7 +2,8 @@ import React from 'react'; import { H2, - Button + Button, + P } from '@alicloud/demo-rc-elements'; import errorPrompt, { @@ -70,6 +71,7 @@ function errorPromptErrorWithDetails(): void { export default function SpecialCases(): JSX.Element { return <>

特殊场景

+

undefined / null 不会有提示,JSX 不可能被代理,因为无法通过 pose-message 传递,所以会 fallback 到本地的 error-prompt。

diff --git a/packages/console-fetcher/stories/demo-default/index.tsx b/packages/console-fetcher/stories/demo-default/index.tsx index bbe0152a3..79d158551 100644 --- a/packages/console-fetcher/stories/demo-default/index.tsx +++ b/packages/console-fetcher/stories/demo-default/index.tsx @@ -3,9 +3,6 @@ import React from 'react'; import { FetcherDemoRcFetchers } from '@alicloud/fetcher-demo-helpers'; -import { - H1 -} from '@alicloud/demo-rc-elements'; import { fetcher0, @@ -13,11 +10,8 @@ import { } from '../fetcher'; export default function DemoDefault(): JSX.Element { - return <> -

TODO add one api test

- - ; + return ; } diff --git a/packages/console-one-config/stories/demo-default/index.tsx b/packages/console-one-config/stories/demo-default/index.tsx index 1ed78b27e..0cd55fd70 100644 --- a/packages/console-one-config/stories/demo-default/index.tsx +++ b/packages/console-one-config/stories/demo-default/index.tsx @@ -7,7 +7,7 @@ import ONE_CONF from '@alicloud/console-one-config'; export default function DemoDefault(): JSX.Element { return ; } diff --git a/packages/cookie/stories/demo-default/index.tsx b/packages/cookie/stories/demo-default/index.tsx index 1825ddb5f..1c2fcc6db 100644 --- a/packages/cookie/stories/demo-default/index.tsx +++ b/packages/cookie/stories/demo-default/index.tsx @@ -43,7 +43,7 @@ export default function DemoDefault(): JSX.Element { ; diff --git a/packages/demo-rc-elements/src/rc/pre-promise.tsx b/packages/demo-rc-elements/src/rc/pre-promise.tsx index 308583f4a..ab2a9dc1b 100644 --- a/packages/demo-rc-elements/src/rc/pre-promise.tsx +++ b/packages/demo-rc-elements/src/rc/pre-promise.tsx @@ -20,6 +20,7 @@ enum ELoading { interface IPromiseResult { loading: ELoading; result: unknown; + duration?: number; } const BD: Record = { @@ -86,12 +87,16 @@ export default function PrePromise({ result: null }); + const start = Date.now(); + promise.then(result => setStateResult({ loading: ELoading.RESOLVED, - result + result, + duration: Date.now() - start })).catch(err => setStateResult({ loading: ELoading.REJECTED, - result: err + result: err, + duration: Date.now() - start })); }, [promise]); @@ -100,9 +105,11 @@ export default function PrePromise({ return
Idle
; case ELoading.LOADING: return
Loading...
; - case ELoading.REJECTED: - return ; - default: - return ; + default: // RESOLVED + REJECTED + return ; } } diff --git a/packages/demo-rc-elements/src/rc/pre.tsx b/packages/demo-rc-elements/src/rc/pre.tsx index a61f7f19a..f1faa164d 100644 --- a/packages/demo-rc-elements/src/rc/pre.tsx +++ b/packages/demo-rc-elements/src/rc/pre.tsx @@ -19,24 +19,34 @@ const ScPre = styled.pre` color: #999; `; -const ScCaption = styled.span` +const ScNote = styled.span` display: block; position: absolute; - top: 0; right: 0; - padding: 6px; + padding: 2px 8px; + line-height: 1.15; + font-size: 0.9em; background-color: rgba(0, 0, 0, 0.05); color: #333; - font-variant: small-caps; +`; + +const ScHeadnote = styled(ScNote)` + top: 0; +`; + +const ScFootnote = styled(ScNote)` + bottom: 0; `; export default function Pre({ - caption, + headnote, + footnote, children, ...props }: IPropsPre): JSX.Element { return - {caption ? {caption} : null} + {headnote ? {headnote} : null} {children} + {footnote ? {footnote} : null} ; } diff --git a/packages/demo-rc-elements/src/types/index.ts b/packages/demo-rc-elements/src/types/index.ts index fbe7ade8b..6f22f070d 100644 --- a/packages/demo-rc-elements/src/types/index.ts +++ b/packages/demo-rc-elements/src/types/index.ts @@ -3,7 +3,8 @@ import { } from 'react'; export interface IPropsPre extends HTMLAttributes { - caption?: string; + headnote?: string | JSX.Element; + footnote?: string | JSX.Element; } export interface IPropsPreJson extends Omit { diff --git a/packages/fetcher-demo-helpers/src/rc/demo-fetchers/index.tsx b/packages/fetcher-demo-helpers/src/rc/demo-fetchers/index.tsx index 547387849..a23a8b18a 100644 --- a/packages/fetcher-demo-helpers/src/rc/demo-fetchers/index.tsx +++ b/packages/fetcher-demo-helpers/src/rc/demo-fetchers/index.tsx @@ -5,14 +5,14 @@ import styled from 'styled-components'; import { H2, - H3 + H3, + PreJson } from '@alicloud/demo-rc-elements'; import { IDemoConfig, IDemoHelperFetcher } from '../../types'; -import DisplayJson from '../display-json'; import Knobs from '../knobs'; import RequestWithConfig from '../request-with-config'; @@ -22,6 +22,8 @@ interface IProps { defaultConfig?: IDemoConfig; fetcher0: IDemoHelperFetcher; fetcher1: IDemoHelperFetcher; + fetcher0Title?: string | JSX.Element; + fetcher1Title?: string | JSX.Element; } const ScTwoFetchers = styled.div` @@ -38,7 +40,9 @@ export default function FetcherDemoRcFetchers({ urls, defaultConfig = {}, fetcher0, - fetcher1 + fetcher1, + fetcher0Title = '无拦截器', + fetcher1Title = '有拦截器' }: IProps): JSX.Element { const [stateConfig, setStateConfig] = useState(defaultConfig); @@ -49,20 +53,20 @@ export default function FetcherDemoRcFetchers({ defaults: defaultConfig, onChange: setStateConfig }} /> - -

无拦截器

+

{fetcher0Title}

-

有拦截器

+

{fetcher1Title}

- ` - position: relative; - - &:after { - content: '${props => props.what}'; - display: block; - position: absolute; - top: 0; - right: 0; - padding: 4px; - background-color: rgba(0, 0, 0, 0.05); - color: #333; - font-variant: small-caps; - } -`; - -export default function DisplayJson({ - status, - data, - error, - what -}: IProps): JSX.Element { - let backgroundColor = '#eee'; - let content; - - switch (status) { - case ELoadingStatus.LOADING: - content = 'Loading...'; - - break; - case ELoadingStatus.SUCCESS: - content = data ? stringify(data) : 'n / a'; - backgroundColor = '#dfd'; - - break; - case ELoadingStatus.ERROR: - content = stringifyError(error); - backgroundColor = '#fee'; - - break; - default: - content = data ? stringify(data) : 'n / a'; - - break; - } - - return {content}; -} diff --git a/packages/fetcher-demo-helpers/src/rc/duration/index.tsx b/packages/fetcher-demo-helpers/src/rc/duration/index.tsx deleted file mode 100644 index 9d0e53365..000000000 --- a/packages/fetcher-demo-helpers/src/rc/duration/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import styled from 'styled-components'; - -interface IProps { - duration: number; -} - -const ScDuration = styled.time` - padding: 0 12px; - color: #93c; -`; - -export default function Duration({ - duration -}: IProps): JSX.Element { - return {duration > 0 ? `TIME: ${duration}ms` : '...'}; -} diff --git a/packages/fetcher-demo-helpers/src/rc/request-with-config/index.tsx b/packages/fetcher-demo-helpers/src/rc/request-with-config/index.tsx index 3cd64f331..96ce2d4ac 100644 --- a/packages/fetcher-demo-helpers/src/rc/request-with-config/index.tsx +++ b/packages/fetcher-demo-helpers/src/rc/request-with-config/index.tsx @@ -5,18 +5,14 @@ import React, { } from 'react'; import { - Button + Button, + PrePromise } from '@alicloud/demo-rc-elements'; import { IDemoConfig, IDemoFnFetchRequest } from '../../types'; -import { - ELoadingStatus -} from '../../const'; -import Duration from '../duration'; -import DisplayJson from '../display-json'; interface IProps { config: IDemoConfig; @@ -27,37 +23,13 @@ export default function RequestWithConfig({ config, request }: IProps): JSX.Element { - const [stateStatus, setStateStatus] = useState(ELoadingStatus.IDLE); - const [stateStart, setStateStart] = useState(0); - const [stateEnd, setStateEnd] = useState(0); - const [stateData, setStateData] = useState(); - const [stateError, setStateError] = useState(null); - - const doRequest = useCallback(() => { - setStateStatus(ELoadingStatus.LOADING); - setStateStart(Date.now); - - request(config).then(data => { - setStateStatus(ELoadingStatus.SUCCESS); - setStateData(data); - }, error => { - setStateStatus(ELoadingStatus.ERROR); - setStateError(error); - }).then(() => { - setStateEnd(Date.now()); - }); - }, [request, config]); + const [statePromise, setStatePromise] = useState | null>(null); + const handleDoRequest = useCallback(() => setStatePromise(request(config)), [request, config]); - useEffect(doRequest, [doRequest]); + useEffect(handleDoRequest, [handleDoRequest]); return <> - - - + + ; } diff --git a/packages/fetcher-demo-helpers/src/util/stringify.ts b/packages/fetcher-demo-helpers/src/util/stringify.ts deleted file mode 100644 index 76cfcbe26..000000000 --- a/packages/fetcher-demo-helpers/src/util/stringify.ts +++ /dev/null @@ -1,19 +0,0 @@ -function stringifyJson(o: unknown): string { - return (o ? JSON.stringify(o, null, 2) : '') || ''; -} - -function stringify(o: unknown): string { - return stringifyJson(o).replace(/"(\w+)":/g, '$1:'); -} - -export default stringify; - -export function stringifyError(error?: Error): string { - return error ? stringify({ - code: (error as any).code, - name: error.name, - message: error.message, - config: (error as any).config, - responseData: (error as any).responseData - }) : ''; -} From f7292ed718fa401949da918115d6bcd38625b593 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Mon, 30 Nov 2020 20:46:30 +0800 Subject: [PATCH 115/135] CHORE add 3 more packages --- packages/console-one-conf/.npmignore | 13 + packages/console-one-conf/CHANGELOG.md | 6 + packages/console-one-conf/README.md | 125 +++++++++ packages/console-one-conf/breezr.config.ts | 18 ++ packages/console-one-conf/jest.config.js | 20 ++ packages/console-one-conf/package.json | 49 ++++ packages/console-one-conf/src/index.ts | 12 + packages/console-one-conf/src/types/index.ts | 5 + .../console-one-conf/src/util/conf-feature.ts | 7 + .../src/util/conf-link-gen.ts | 63 +++++ .../stories/demo-default/index.tsx | 5 + .../stories/index.stories.tsx | 15 + packages/console-one-conf/tests/index.spec.ts | 9 + packages/console-one-conf/tsconfig.json | 22 ++ .../mixed-black-whitelist-checker/.npmignore | 13 + .../CHANGELOG.md | 6 + .../mixed-black-whitelist-checker/README.md | 26 ++ .../breezr.config.ts | 18 ++ .../jest.config.js | 20 ++ .../package.json | 45 +++ .../src/index.ts | 60 ++++ .../stories/demo-default/index.tsx | 5 + .../stories/index.stories.tsx | 15 + .../tests/index.spec.ts | 120 ++++++++ .../tsconfig.json | 22 ++ packages/viper-feature-gen/.npmignore | 13 + packages/viper-feature-gen/CHANGELOG.md | 6 + packages/viper-feature-gen/README.md | 125 +++++++++ packages/viper-feature-gen/breezr.config.ts | 18 ++ packages/viper-feature-gen/jest.config.js | 20 ++ packages/viper-feature-gen/package.json | 51 ++++ packages/viper-feature-gen/src/index.ts | 11 + packages/viper-feature-gen/src/types/index.ts | 23 ++ .../viper-feature-gen/src/util/factory.ts | 142 ++++++++++ .../stories/demo-default/index.tsx | 5 + .../stories/index.stories.tsx | 15 + .../viper-feature-gen/tests/index.spec.ts | 257 ++++++++++++++++++ packages/viper-feature-gen/tsconfig.json | 22 ++ 38 files changed, 1427 insertions(+) create mode 100644 packages/console-one-conf/.npmignore create mode 100644 packages/console-one-conf/CHANGELOG.md create mode 100755 packages/console-one-conf/README.md create mode 100644 packages/console-one-conf/breezr.config.ts create mode 100644 packages/console-one-conf/jest.config.js create mode 100755 packages/console-one-conf/package.json create mode 100644 packages/console-one-conf/src/index.ts create mode 100644 packages/console-one-conf/src/types/index.ts create mode 100644 packages/console-one-conf/src/util/conf-feature.ts create mode 100644 packages/console-one-conf/src/util/conf-link-gen.ts create mode 100644 packages/console-one-conf/stories/demo-default/index.tsx create mode 100644 packages/console-one-conf/stories/index.stories.tsx create mode 100644 packages/console-one-conf/tests/index.spec.ts create mode 100644 packages/console-one-conf/tsconfig.json create mode 100644 packages/mixed-black-whitelist-checker/.npmignore create mode 100644 packages/mixed-black-whitelist-checker/CHANGELOG.md create mode 100755 packages/mixed-black-whitelist-checker/README.md create mode 100644 packages/mixed-black-whitelist-checker/breezr.config.ts create mode 100644 packages/mixed-black-whitelist-checker/jest.config.js create mode 100755 packages/mixed-black-whitelist-checker/package.json create mode 100644 packages/mixed-black-whitelist-checker/src/index.ts create mode 100644 packages/mixed-black-whitelist-checker/stories/demo-default/index.tsx create mode 100644 packages/mixed-black-whitelist-checker/stories/index.stories.tsx create mode 100644 packages/mixed-black-whitelist-checker/tests/index.spec.ts create mode 100644 packages/mixed-black-whitelist-checker/tsconfig.json create mode 100644 packages/viper-feature-gen/.npmignore create mode 100644 packages/viper-feature-gen/CHANGELOG.md create mode 100755 packages/viper-feature-gen/README.md create mode 100644 packages/viper-feature-gen/breezr.config.ts create mode 100644 packages/viper-feature-gen/jest.config.js create mode 100755 packages/viper-feature-gen/package.json create mode 100644 packages/viper-feature-gen/src/index.ts create mode 100644 packages/viper-feature-gen/src/types/index.ts create mode 100644 packages/viper-feature-gen/src/util/factory.ts create mode 100644 packages/viper-feature-gen/stories/demo-default/index.tsx create mode 100644 packages/viper-feature-gen/stories/index.stories.tsx create mode 100644 packages/viper-feature-gen/tests/index.spec.ts create mode 100644 packages/viper-feature-gen/tsconfig.json diff --git a/packages/console-one-conf/.npmignore b/packages/console-one-conf/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/console-one-conf/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/console-one-conf/CHANGELOG.md b/packages/console-one-conf/CHANGELOG.md new file mode 100644 index 000000000..97a7f784d --- /dev/null +++ b/packages/console-one-conf/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/30 @驳是 + +* 开源第一版 diff --git a/packages/console-one-conf/README.md b/packages/console-one-conf/README.md new file mode 100755 index 000000000..e44317a7b --- /dev/null +++ b/packages/console-one-conf/README.md @@ -0,0 +1,125 @@ +@alicloud/console-one-conf +=== + +> 仅可在 OneConsole 下使用 + +# 和 `@alicloud/console-one-config` 的关系 + +* `@alicloud/console-one-config` + - 仅对全局变量 `ALIYUN_CONSOLE_CONFIG` 的封装和类型定义 + - 不论是否 OneConsole 都可以使用,需要进行判断 `CONF.ONE` 是否为 `true` +* `@alicloud/console-one-conf` + - 依赖 `@alicloud/console-one-config` + - 仅适用于 OneConsole,其他下边基本无效 + - 对功能开关/灰度和渠道链接的使用做了标准化 + - OneConsole 的项目用它就可以了,不需要知道 `@alicloud/console-one-config` + +# 使用 + +注意,这个包的输出既有直接可用的 `confFeature` 又有工厂方法 `confLinkGen`,建议做一层封装,然后应用的代码里只用自己的封装。 + +推荐使用 lerna 管理和发布自己的应用专属的 package。 + +## 封装 + +请封装自己应用专属的 util 或 package,以下假设你封装的是应用专属包 `@alicloud/xx-conf`: + +```typescript +import CONF, { + confFeature, + confLinkGen +} from '@alicloud/console-one-conf'; + +enum EFeature { + ... +} + +const DEFAULT_LINK = { // 不要指定类型,也可以另外定义到某个文件中,它对使用 confLink 时的 key 校验很有用 + 'some_lnik': '//...', + ... +}; + +const [confLink, MERGED_LINK] = confLinkGen(DEFAULT_LINK); // 传入第二个参数自定义插值的方式,默认用 `[]` + +export { + LINK, // 不建议强改全局对象,这里 export 出去,且再也不要用 CONF.LINK + EFeature, + confFeature, + confLink +}; +``` + +## 功能开关判断 + +```typescript +import { + EFeature, + confFeature +} from '@alicloud/xx-conf'; + +const SUPPORT_SOME_FEATURE = confFeature(EFeature.SOME_FEATURE); +const SUPPORT_SOME_FEATURE_WITH_REGION = confFeature(EFeature.SOME_FEATURE_WITH_REGION, someRegion); +const SUPPORT_SOME_FEATURE_WITH_ATTRIBUTES = confFeature(EFeature.SOME_FEATURE_WITH_ATTRIBUTES, { + attr1, + attr2, + ... +}); +const SUPPORT_SOME_FEATURE_WITH_REGION_AND_ATTRIBUTES = confFeature(EFeature.SOME_FEATURE_WITH_REGION_AND_ATTRIBUTES, { + region, + attr1, + attr2, + ... +}); +``` + +## 渠道链接 + +```typescript +import { + confLink +} from '@alicloud/xx-conf'; + +const link = confLink('some_link'); +const link2 = confLink('some_link_with_{id}', { // ...{id}... → ...{hello%20world}... + id: 'hello world' +}); +const link3 = confLink('some_link_with_{id}', { // ...{id}... → ...{hello world}... + id: 'hello world' +}, true); // 出于安全考量,默认在 interpolation 中的数据在插入时是会被 encodeURIComponent,第三参数传 true 可强制不 encode +``` + +## 国际化中的渠道链接 + +可以把输出的 LINK 作为默认的国际化插值,比如使用 @alicloud/wind-x-intl 的场景。 + +```typescript +import CONF, { + LINK +} from '@alicloud/xx-conf'; +import windXIntl from '@alicloud/wind-x-intl'; + +import messages from './messages'; + +const { + intl, + intlNumber, + intlCurrency, + intlPercentage, + intlDate, + intlConst, + intlChoices +} = windXIntl(messages, CONF.LOCALE, { + extraValues: LINK +}); + +export default intl; + +export { + intlNumber, + intlCurrency, + intlPercentage, + intlDate, + intlConst, + intlChoices +}; +``` diff --git a/packages/console-one-conf/breezr.config.ts b/packages/console-one-conf/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/console-one-conf/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/console-one-conf/jest.config.js b/packages/console-one-conf/jest.config.js new file mode 100644 index 000000000..1cda183da --- /dev/null +++ b/packages/console-one-conf/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + testEnvironment: 'node', + testMatch: [ + '/src/**/*.test.ts' + ], + collectCoverageFrom: [ + 'src/**/*.ts' + ], + moduleFileExtensions: [ + 'ts', + 'js' + ], + transform: { + '\\.(ts)$': 'ts-jest', + '^.+\\.js$': 'babel-jest' + }, + modulePaths: [ + 'src' + ] +}; diff --git a/packages/console-one-conf/package.json b/packages/console-one-conf/package.json new file mode 100755 index 000000000..d461cad47 --- /dev/null +++ b/packages/console-one-conf/package.json @@ -0,0 +1,49 @@ +{ + "name": "@alicloud/console-one-conf", + "version": "0.0.0", + "description": "OneConsole Config 对象解析与封装", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "OneConsole", + "conf" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "dependencies": { + "@alicloud/console-one-config": "^0.0.0", + "@alicloud/viper-feature-gen": "^0.0.0" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/console-one-conf/src/index.ts b/packages/console-one-conf/src/index.ts new file mode 100644 index 000000000..4d7a27fc9 --- /dev/null +++ b/packages/console-one-conf/src/index.ts @@ -0,0 +1,12 @@ +import confFeature from './util/conf-feature'; +import confLinkGen from './util/conf-link-gen'; + +export * from '@alicloud/console-one-config'; +export { + default +} from '@alicloud/console-one-config'; + +export { + confFeature, + confLinkGen +}; diff --git a/packages/console-one-conf/src/types/index.ts b/packages/console-one-conf/src/types/index.ts new file mode 100644 index 000000000..3ef3df8ea --- /dev/null +++ b/packages/console-one-conf/src/types/index.ts @@ -0,0 +1,5 @@ +export type TInterpolation = Record; + +export interface IFnConfLink { + (key: K, interpolation?: TInterpolation, noEncode?: boolean): string; +} diff --git a/packages/console-one-conf/src/util/conf-feature.ts b/packages/console-one-conf/src/util/conf-feature.ts new file mode 100644 index 000000000..40aedb87e --- /dev/null +++ b/packages/console-one-conf/src/util/conf-feature.ts @@ -0,0 +1,7 @@ +import ONE_CONF from '@alicloud/console-one-config'; +import viperFeatureGen from '@alicloud/viper-feature-gen'; + +/** + * 可直接使用的 OneConsole 功能开关/灰度判定 + */ +export default viperFeatureGen(ONE_CONF.FEATURE_SWITCH, ONE_CONF.FEATURE_GRAY); diff --git a/packages/console-one-conf/src/util/conf-link-gen.ts b/packages/console-one-conf/src/util/conf-link-gen.ts new file mode 100644 index 000000000..19cc54728 --- /dev/null +++ b/packages/console-one-conf/src/util/conf-link-gen.ts @@ -0,0 +1,63 @@ +import ONE_CONF from '@alicloud/console-one-config'; + +import { + IFnConfLink, + TInterpolation +} from '../types'; + +type TInterpolationMode = '[]' | '{}' | '${}' | '{{}}' | '<>'; + +/** + * 渠道链接中的替换符,各个控制台的偏好不一样...但一个控制台下应该保持一致 + */ +function getInterpolationReg(interpolationMode: TInterpolationMode): RegExp { + switch (interpolationMode) { + case '{}': + return /\\?{([^{}]+)}/g; + case '${}': + return /\\?\${([^{}]+)}/g; + case '{{}}': + return /\\?{{([^{}]+)}}/g; + case '<>': + return /\\?<([^<>]+)>/g; + default: + return /\\?\[([^[\]]+)]/g; + } +} + +/** + * 渠道链接工厂方法,要求必须传入所有兜底的渠道链接(在 TS 下有良好的 key 约束) + */ +export default function confLinkGen(defaultLinks: T, interpolationMode: TInterpolationMode = '[]'): [IFnConfLink, T] { + const LINK: T = { + ...defaultLinks, + ...ONE_CONF.LINK + }; + const REG_INTERPOLATION = getInterpolationReg(interpolationMode); + + /** + * 获取配置的链接,注意 interpolation 中的参数是不进行 encodeURIComponent 操作的,如有需要需自行处理 + */ + return [function confLink(key: keyof typeof defaultLinks, interpolation?: TInterpolation, noEncode?: boolean): string { + const link = LINK[key]; + + if (!link || typeof link !== 'string') { + return key as string || ''; + } + + if (!interpolation) { + return link; + } + + // 如果连接当中有类似 `[xx]` 的地方需要将其用 `interpolation.xx` 来替换 + return link.replace(REG_INTERPOLATION, (match: string, name: string): string => { + if (match.charAt(0) === '\\') { + return match.slice(1); + } + + const str: string = interpolation[name] === undefined ? '' : String(interpolation[name]); + + return noEncode ? str : encodeURIComponent(str); + }); + }, LINK]; +} diff --git a/packages/console-one-conf/stories/demo-default/index.tsx b/packages/console-one-conf/stories/demo-default/index.tsx new file mode 100644 index 000000000..c9dc07f87 --- /dev/null +++ b/packages/console-one-conf/stories/demo-default/index.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export default function DemoDefault(): JSX.Element { + return <>天有不测风云; +} diff --git a/packages/console-one-conf/stories/index.stories.tsx b/packages/console-one-conf/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/console-one-conf/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/console-one-conf/tests/index.spec.ts b/packages/console-one-conf/tests/index.spec.ts new file mode 100644 index 000000000..298ebb5c2 --- /dev/null +++ b/packages/console-one-conf/tests/index.spec.ts @@ -0,0 +1,9 @@ +/* global describe, it, expect */ + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + it('exports in correct type', () => { + expect(typeof 'TODO').toBe('function'); + }); +}); diff --git a/packages/console-one-conf/tsconfig.json b/packages/console-one-conf/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/console-one-conf/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/mixed-black-whitelist-checker/.npmignore b/packages/mixed-black-whitelist-checker/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/mixed-black-whitelist-checker/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/mixed-black-whitelist-checker/CHANGELOG.md b/packages/mixed-black-whitelist-checker/CHANGELOG.md new file mode 100644 index 000000000..97a7f784d --- /dev/null +++ b/packages/mixed-black-whitelist-checker/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/30 @驳是 + +* 开源第一版 diff --git a/packages/mixed-black-whitelist-checker/README.md b/packages/mixed-black-whitelist-checker/README.md new file mode 100755 index 000000000..734d272fc --- /dev/null +++ b/packages/mixed-black-whitelist-checker/README.md @@ -0,0 +1,26 @@ +@alicloud/mixed-black-whitelist-checker +=== + +混合黑白名单检查器 + +```typescript +import mixedBlackWhitelistChecker from '@alicloud/mixed-black-whitelist-checker'; + +mixedBlackWhitelistChecker(value, mixedBlackWhiteList); +``` + +方法签名: + +```typescript +function mixedBlackAndWhitelistChecker(value: string, mixedList: string[]): boolean; +``` + +举例 + +```typescript +mixedBlackAndWhitelistChecker('cn-hz', []); // → true +mixedBlackAndWhitelistChecker('cn-hz', ['cn-sh', 'cn-hz]); // → true +mixedBlackAndWhitelistChecker('cn-hz', ['cn-*']); // → true +mixedBlackAndWhitelistChecker('cn-hz', ['cn-sh', '!cn-hz]); // → false +mixedBlackAndWhitelistChecker('cn-hz', ['cn-*', '!cn-hz]); // → false +``` diff --git a/packages/mixed-black-whitelist-checker/breezr.config.ts b/packages/mixed-black-whitelist-checker/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/mixed-black-whitelist-checker/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/mixed-black-whitelist-checker/jest.config.js b/packages/mixed-black-whitelist-checker/jest.config.js new file mode 100644 index 000000000..1cda183da --- /dev/null +++ b/packages/mixed-black-whitelist-checker/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + testEnvironment: 'node', + testMatch: [ + '/src/**/*.test.ts' + ], + collectCoverageFrom: [ + 'src/**/*.ts' + ], + moduleFileExtensions: [ + 'ts', + 'js' + ], + transform: { + '\\.(ts)$': 'ts-jest', + '^.+\\.js$': 'babel-jest' + }, + modulePaths: [ + 'src' + ] +}; diff --git a/packages/mixed-black-whitelist-checker/package.json b/packages/mixed-black-whitelist-checker/package.json new file mode 100755 index 000000000..bd36a5c56 --- /dev/null +++ b/packages/mixed-black-whitelist-checker/package.json @@ -0,0 +1,45 @@ +{ + "name": "@alicloud/mixed-black-whitelist-checker", + "version": "0.0.0", + "description": "混合黑白名单检查器", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "blacklist", + "whitelist" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@types/jest": "^26.0.15", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/mixed-black-whitelist-checker/src/index.ts b/packages/mixed-black-whitelist-checker/src/index.ts new file mode 100644 index 000000000..11f70e56b --- /dev/null +++ b/packages/mixed-black-whitelist-checker/src/index.ts @@ -0,0 +1,60 @@ +/** + * 将黑白混合名单转化成「黑」和「白」两个数组 + */ +function separateIntoBlackAndWhite(mixedList: string[]): [string[], string[]] { + const blackList: string[] = []; + const whiteList: string[] = []; + + // 将黑白混合名单转化成「黑」和「白」两个数组 + mixedList.filter(v => !!v).forEach(v => { + const cleanV = v.trim(); + + if (/^!/.test(cleanV)) { + blackList.push(cleanV.substring(1).trim()); + } else { + whiteList.push(cleanV); + } + }); + + return [blackList, whiteList]; +} + +function checkValueAgainstConf(value: string, valueInConf: string): boolean { + // 允许 wildcard * 匹配 + if (/\*$/.test(valueInConf)) { // 仅支持末尾?TODO + return value.indexOf(valueInConf.substring(0, valueInConf.length - 1)) === 0; + } + + return value === valueInConf; +} + +/** + * 检查 value 是否在 list 中 + */ +function checkValueInList(value: string, list: string[]): boolean { + return list.some(v => checkValueAgainstConf(value, v)); +} + +/** + * 检查是否在名单中(不论黑白),名单配置为字符串数组,可以通过通配符最末加一个星号「*」来命中一组名单, + * 如 `cn-*` 可以匹配 `cn-hz`、`cn-sh`、`cn-bj` 等等 + * + * 1. 如果没有黑白名单,则返回 true + * 2. 如果命中黑名单,则返回 false + * 3. 如果没有白名单,返回 true,否则返回是否命中 + */ +export default function mixedBlackAndWhitelistChecker(value: string, mixedList: string[]): boolean { + if (!mixedList?.length) { + return true; + } + + const [blackList, whiteList] = separateIntoBlackAndWhite(mixedList); + + // 黑名单的优先级大于白名单,如果有任何一个不通过,不通过 + if (checkValueInList(value, blackList)) { + return false; + } + + // 没有白名单、或匹配任何一个普通名单,通过 + return whiteList.length ? checkValueInList(value, whiteList) : true; +} diff --git a/packages/mixed-black-whitelist-checker/stories/demo-default/index.tsx b/packages/mixed-black-whitelist-checker/stories/demo-default/index.tsx new file mode 100644 index 000000000..c9dc07f87 --- /dev/null +++ b/packages/mixed-black-whitelist-checker/stories/demo-default/index.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export default function DemoDefault(): JSX.Element { + return <>天有不测风云; +} diff --git a/packages/mixed-black-whitelist-checker/stories/index.stories.tsx b/packages/mixed-black-whitelist-checker/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/mixed-black-whitelist-checker/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/mixed-black-whitelist-checker/tests/index.spec.ts b/packages/mixed-black-whitelist-checker/tests/index.spec.ts new file mode 100644 index 000000000..616101c44 --- /dev/null +++ b/packages/mixed-black-whitelist-checker/tests/index.spec.ts @@ -0,0 +1,120 @@ +/* global describe, test, expect */ +import mixedBlackWhitelistChecker from '../src'; + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + const CN_WILED = 'cn-*'; + const US_WILED = 'us-*'; + const CN_HZ = 'cn-hangzhou'; + const CN_SH = 'cn-shanghai'; + const CN_HK = 'cn-hongkong'; + const US_1 = 'us-1'; + const US_2 = 'us-2'; + const CN_OTHER = 'cn-other'; + + describe('没有黑白名单', () => { + test('返回 true', () => { + expect(mixedBlackWhitelistChecker('whatever', [])).toBe(true); + }); + }); + + describe('白名单', () => { + test('简单名单', () => { + const WHITELIST: string[] = [CN_HZ, CN_SH, CN_HK]; + + expect(mixedBlackWhitelistChecker(CN_HZ, WHITELIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_SH, WHITELIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_HK, WHITELIST)).toBe(true); + + expect(mixedBlackWhitelistChecker('xx', WHITELIST)).toBe(false); + expect(mixedBlackWhitelistChecker('cn', WHITELIST)).toBe(false); + expect(mixedBlackWhitelistChecker(`${CN_HZ} + xx`, WHITELIST)).toBe(false); + }); + test('通配符名单', () => { + const WHITELIST = [CN_WILED, US_WILED]; + + expect(mixedBlackWhitelistChecker(CN_HZ, WHITELIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_SH, WHITELIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_HK, WHITELIST)).toBe(true); + expect(mixedBlackWhitelistChecker(US_1, WHITELIST)).toBe(true); + expect(mixedBlackWhitelistChecker(US_2, WHITELIST)).toBe(true); + expect(mixedBlackWhitelistChecker('xx', WHITELIST)).toBe(false); + expect(mixedBlackWhitelistChecker('o-cn-xx', WHITELIST)).toBe(false); + }); + }); + + describe('黑名单', () => { + test('简单名单', () => { + const BLACKLIST: string[] = [`!${CN_HZ}`, `!${CN_SH}`, `!${CN_HK}`]; + + expect(mixedBlackWhitelistChecker(CN_HZ, BLACKLIST)).toBe(false); + expect(mixedBlackWhitelistChecker(CN_SH, BLACKLIST)).toBe(false); + expect(mixedBlackWhitelistChecker(CN_HK, BLACKLIST)).toBe(false); + + expect(mixedBlackWhitelistChecker('xx', BLACKLIST)).toBe(true); + expect(mixedBlackWhitelistChecker('cn', BLACKLIST)).toBe(true); + expect(mixedBlackWhitelistChecker(`${CN_HZ} + xx`, BLACKLIST)).toBe(true); + }); + test('通配符名单', () => { + const BLACKLIST = [`!${CN_WILED}`, `!${US_WILED}`]; + + expect(mixedBlackWhitelistChecker(CN_HZ, BLACKLIST)).toBe(false); + expect(mixedBlackWhitelistChecker(CN_SH, BLACKLIST)).toBe(false); + expect(mixedBlackWhitelistChecker(CN_HK, BLACKLIST)).toBe(false); + expect(mixedBlackWhitelistChecker(US_1, BLACKLIST)).toBe(false); + expect(mixedBlackWhitelistChecker(US_2, BLACKLIST)).toBe(false); + expect(mixedBlackWhitelistChecker('xx', BLACKLIST)).toBe(true); + expect(mixedBlackWhitelistChecker('o-cn-xx', BLACKLIST)).toBe(true); + }); + }); + + describe('黑 + 白名单', () => { + test('简单名单', () => { + const LIST: string[] = [CN_HZ, CN_SH, `!${CN_HK}`]; + + expect(mixedBlackWhitelistChecker(CN_HZ, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_SH, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_HK, LIST)).toBe(false); + }); + }); + + describe('黑 + 白名单', () => { + test('简单名单', () => { + const LIST: string[] = [CN_HZ, CN_SH, `!${CN_HK}`]; + + expect(mixedBlackWhitelistChecker(CN_HZ, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_SH, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_HK, LIST)).toBe(false); + }); + test('通配黑 + 简单白', () => { + const LIST: string[] = [CN_HZ, CN_SH, `!${US_WILED}`]; + + expect(mixedBlackWhitelistChecker(CN_HZ, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_SH, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_OTHER, LIST)).toBe(false); + expect(mixedBlackWhitelistChecker(US_1, LIST)).toBe(false); + expect(mixedBlackWhitelistChecker(US_2, LIST)).toBe(false); + }); + test('简单黑 + 通配白', () => { + const LIST: string[] = [CN_WILED, `!${CN_HK}`]; + + expect(mixedBlackWhitelistChecker(CN_HZ, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_SH, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_OTHER, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_HK, LIST)).toBe(false); + expect(mixedBlackWhitelistChecker(US_1, LIST)).toBe(false); + expect(mixedBlackWhitelistChecker(US_2, LIST)).toBe(false); + }); + test('通配黑 + 通配白', () => { + const LIST: string[] = [CN_WILED, `!${US_WILED}`]; + + expect(mixedBlackWhitelistChecker(CN_HZ, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_SH, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_OTHER, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(CN_HK, LIST)).toBe(true); + expect(mixedBlackWhitelistChecker(US_1, LIST)).toBe(false); + expect(mixedBlackWhitelistChecker(US_2, LIST)).toBe(false); + }); + }); +}); diff --git a/packages/mixed-black-whitelist-checker/tsconfig.json b/packages/mixed-black-whitelist-checker/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/mixed-black-whitelist-checker/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} diff --git a/packages/viper-feature-gen/.npmignore b/packages/viper-feature-gen/.npmignore new file mode 100644 index 000000000..0e9498a97 --- /dev/null +++ b/packages/viper-feature-gen/.npmignore @@ -0,0 +1,13 @@ +# common + +.* + +# config + +*config.json + +# test & demo + +tests/ +coverage/ +stories/ diff --git a/packages/viper-feature-gen/CHANGELOG.md b/packages/viper-feature-gen/CHANGELOG.md new file mode 100644 index 000000000..97a7f784d --- /dev/null +++ b/packages/viper-feature-gen/CHANGELOG.md @@ -0,0 +1,6 @@ +HISTORY +=== + +# 1.0.0 2020/11/30 @驳是 + +* 开源第一版 diff --git a/packages/viper-feature-gen/README.md b/packages/viper-feature-gen/README.md new file mode 100755 index 000000000..a9935f904 --- /dev/null +++ b/packages/viper-feature-gen/README.md @@ -0,0 +1,125 @@ +@alicloud/viper-feature-gen +=== + +阿里云控制台(接入 viper)功能开关检查(工厂方法) + +> 💥 OneConsole 控制台可以使用 [@alicloud/console-one-conf],它整合了 OneConsole 下 +> * `window.ALIYUN_CONSOLE_CONFIG` 这个全局对象的类型定义和纠正 +> * `confFeature()` 利用 `@alicloud/viper-feature-gen` 标准化了功能开关加灰度的使用 +> * `confLinkGen()` 标准化了渠道链接的使用方式,在 TS 下可以对传入的 key 做类型约束(需要传入默认的所有链接兜底),避免漏写和写错 +> 墙裂推荐 OneConsole 的控制台直接使用 [@alicloud/console-one-conf] 而不是这个 `@alicloud/viper-feature-gen` + +# WHY + +[新版 viper](https://vipernew.aliyun-inc.com) 提供了「渠道功能开关」配置,支持对开关增加用户类型和区域黑白名单的配置,并且提供了「功能灰度」配置。 + +* 功能开关,可以设置用户类型、区域黑白名单 +* 功能灰度,与开关平行,可以设置用户百分比、用户白名单和用户标签白名单 + +功能开关的用户类型在后端公共库里已经集成,不需要调用者关心;然而区域对于每个产品来说有可能是不一样的(比如 OSS 的区域都是以 `oss-` 打头的),而且区域是需要透传到前端的,所以还需要各个业务自行处理。 + +功能灰度经过后端公共库处理,会吐出仅含 `true/false` 的一个对象,它可以对功能开关做补充。然而只有 `false` 值对功能开关的补充是有效的。 + +这里提供的是一个「生产方法」,因为不能确定功能开关是如何透传至前端的。 + +## 功能开关 + +功能开关在页面的输出是这样的 JSON 对象(OneConsole 下对应的是 `window.ALIYUN_CONSOLE_CONFIG.CHANNEL_FEATURE_STATUS`): + +```json +{ + "alarm-rules": { + "status": true, + "attribute": { + "regions": [], + "customAttrs": {} + } + }, + ... +} +``` + +## 功能灰度 + +> 吐槽:OneConsole 的数据吐出命名方式真的是令人呸服... + +功能灰度的页面输入也是一个 JSON 对象,不过仅包含 `true/false` 值(OneConsole 下对应的是 `window.ALIYUN_CONSOLE_CONFIG.FEATURE_STATUS`): + +```json +{ + "alarm-rules": true, + ... +} +``` + +## 开关 + 灰度的判断逻辑 + +1. 如果功能开关和灰度都没有配置,则 `true` +2. 如果仅配置了灰度,则返回灰度值 +3. 如果都配置,且开关和灰度其中之一为 `false`,返回 `false` +4. 如果开关状态为 `true`,灰度未配置或也为 `true`,需要判断 region 或额外属性,它们的判断逻辑是一样的都是混合黑白名单 + +# EXAMPLE + +自定义项目的 `conf/feature` 模块,如 `src/conf/feature.js`: + +> 最佳实践:杜绝硬编码到处飞,feature 字符串定义到这里,并加以说明。 + +```typescript +import viperFeatureGen from '@alicloud/viper-feature-gen'; // 在你的代码中应该只出现这里一次 + +export default viperFeatureGen(VIPER_功能开关_输出, VIPER_灰度_输出); + +export enum EFeature { + WHAT_OP = 'what:op' // 什么什么功能,需不需要判断 region +} +``` + +在你的模块中使用: + +> 最佳实践:给 src 配置 webpack alias,个人习惯用 `:`。 + +```typescript +import confFeature, { + EFeature +} from ':/conf/feature'; + +// ... + +// 进行判断 +const FEATURE_WHAT_OP_AVAILABLE = confFeature(EFeature.WHAT_OP); // 不关心 region 或其他属性 +const FEATURE_XX_OP_AVAILABLE = confFeature(EFeature.WHAT_OP, region); // 关心 region,传入的 region 只会在有 regions 配置的情况下有效(否则跟不传效果一样) +const FEATURE_XX_OP_AVAILABLE = confFeature(EFeature.WHAT_OP, { // 关心其他属性 + attr1 +}); +const FEATURE_XX_OP_AVAILABLE = confFeature(EFeature.WHAT_OP, { // 关心 region 和 其他属性,传入的 region 只会在有 regions 配置的情况下有效(否则跟不传效果一样) + region, + attr1 +}); + +// ... +``` + +# API + +`viperFeatureGen` 的函数签名为 `function viperFeatureGen(FEATURE_CONF: Record = {}, GRAY_CONF: Record = {}): IFnFeatureCheck`: + +* `FEATURE_CONF: Record` 功能开关配置,「必需」OneConsole 的项目可以统一用 `window.ALIYUN_CONSOLE_CONFIG.CHANNEL_FEATURE_STATUS`,非 OneConsole 的项目根据自身 HTML 的输出调整自己的代码。 +* `GRAY_CONF: Record` 灰度配置,「必需」OneConsole 的项目可以统一用 `window.ALIYUN_CONSOLE_CONFIG.FEATURE_STATUS`(再次吐槽此狗屎命名),非 OneConsole 的项目根据自身 HTML 的输出调整自己的代码。 + +再次提醒 `viperFeatureGen` 是一个工厂方法(虽然在一个项目中可能仅用一次),它生产出来的方法的签名如下: + +```typescript +interface IFnFeatureCheck { + (key: string): boolean; + (key: string, region: string): boolean; + (key: string, attributes: IFeatureCheckAttributes): boolean; +} +``` + +返回值: + +* `true` 支持功能(viper 上没有对应的配置也表示支持功能) +* `false` 不支持功能 + +[@alicloud/console-one-conf]: https://npm.alibaba-inc.com/package/@alicloud/console-one-conf diff --git a/packages/viper-feature-gen/breezr.config.ts b/packages/viper-feature-gen/breezr.config.ts new file mode 100644 index 000000000..77be39a85 --- /dev/null +++ b/packages/viper-feature-gen/breezr.config.ts @@ -0,0 +1,18 @@ +import { + extendConfiguration +} from '@alicloud/console-toolkit-preset-component'; + +import pkgInfo from './package.json'; + +export default extendConfiguration({ + moduleName: pkgInfo.name, + useTypescript: true, + output: { + baseDir: 'build', + dirs: { + es: 'es', + cjs: 'cjs', + umd: 'umd' + } + } +}); diff --git a/packages/viper-feature-gen/jest.config.js b/packages/viper-feature-gen/jest.config.js new file mode 100644 index 000000000..1cda183da --- /dev/null +++ b/packages/viper-feature-gen/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + testEnvironment: 'node', + testMatch: [ + '/src/**/*.test.ts' + ], + collectCoverageFrom: [ + 'src/**/*.ts' + ], + moduleFileExtensions: [ + 'ts', + 'js' + ], + transform: { + '\\.(ts)$': 'ts-jest', + '^.+\\.js$': 'babel-jest' + }, + modulePaths: [ + 'src' + ] +}; diff --git a/packages/viper-feature-gen/package.json b/packages/viper-feature-gen/package.json new file mode 100755 index 000000000..b13dfaad7 --- /dev/null +++ b/packages/viper-feature-gen/package.json @@ -0,0 +1,51 @@ +{ + "name": "@alicloud/viper-feature-gen", + "version": "0.0.0", + "description": "阿里云控制台(接入 viper)功能开关检查(工厂方法)", + "license": "MIT", + "main": "build/cjs/index.js", + "module": "build/es/index.js", + "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "viper", + "feature-gen", + "factory" + ], + "devDependencies": { + "@alicloud/console-toolkit-cli": "^1.1.10", + "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@types/jest": "^26.0.15", + "@types/lodash": "^4.14.165", + "@types/react": "^16.14.2", + "jest": "^26.6.3", + "react": "^16.14.0", + "ts-jest": "^26.4.4", + "typescript": "^4.1.2" + }, + "dependencies": { + "@alicloud/mixed-black-whitelist-checker": "^0.0.0", + "lodash": "^4.17.20" + }, + "scripts": { + "start": "breezr start-storybook", + "test": "breezr test:unit", + "build:esm": "breezr build --engine babel --es-module", + "build:cjs": "breezr build --engine babel", + "build:bundle": "breezr build --engine webpack", + "build:typings": "tsc --outDir build/types --declaration --emitDeclarationOnly", + "build": "yarn build:esm && yarn build:cjs && yarn build:bundle && yarn build:typings", + "clean": "rm -rf build", + "prepublishOnly": "yarn clean && yarn build" + } +} diff --git a/packages/viper-feature-gen/src/index.ts b/packages/viper-feature-gen/src/index.ts new file mode 100644 index 000000000..1ef9a83e1 --- /dev/null +++ b/packages/viper-feature-gen/src/index.ts @@ -0,0 +1,11 @@ +import { + IFnFeatureCheck as FnFeatureCheck +} from './types'; + +export { + default +} from './util/factory'; + +export type { + FnFeatureCheck +}; diff --git a/packages/viper-feature-gen/src/types/index.ts b/packages/viper-feature-gen/src/types/index.ts new file mode 100644 index 000000000..040291380 --- /dev/null +++ b/packages/viper-feature-gen/src/types/index.ts @@ -0,0 +1,23 @@ +export interface IFeatureCheckAttributes { + region?: string; + [k: string]: string; +} + +export interface IFnFeatureCheck { + (key: string): boolean; + (key: string, region: string): boolean; + (key: string, attributes: IFeatureCheckAttributes): boolean; +} + +export interface IFeatureItem { + status: boolean; + attribute?: { + regions?: string[]; + customAttrs?: Record; + }; +} + +export interface ICheckItem { + value: string; + mixedList: string[]; +} diff --git a/packages/viper-feature-gen/src/util/factory.ts b/packages/viper-feature-gen/src/util/factory.ts new file mode 100644 index 000000000..2a6520eff --- /dev/null +++ b/packages/viper-feature-gen/src/util/factory.ts @@ -0,0 +1,142 @@ +import _isString from 'lodash/isString'; +import _forEach from 'lodash/forEach'; + +import mixedBlackWhitelistChecker from '@alicloud/mixed-black-whitelist-checker'; + +import { + IFeatureItem, + IFeatureCheckAttributes, + IFnFeatureCheck, + ICheckItem +} from '../types'; + +/** + * 这是一个工厂方法,用于生成一个方法来检查 feature 是否可用 + * + * 这里的 FEATURE_CONF 和 GRAY_CONF 需要调用者传入,因为: + * + * 1. 可降低代码耦合 + * 2. 用户明确知道全局变量(或其他途径获取到的数据)的来路和去向 + * 3. 控制台的输出方式有所不同 + * 4. 方便单元测试 + * + * @example + * + * 自定义项目的 `conf/feature` 模块,如 `src/conf/feature.js`: + * + * ```js + * import confFeatureGen from '@alicloud/wind-util/conf-feature'; // 在你的代码中应该只出现这里一次 + * + * export default confFeatureGen(window.ALIYUN_CONSOLE_CONFIG.FEATURE_STATUS); + * + * export const FEATURE_ID = { + * WHAT_OP: 'what:op' + * }; + * ``` + * + * 在你的模块中使用: + * + * > 最佳实践 1:给 src 下的一级目录加上 webpack alias,alias 的命名规则为目录名前加冒号(比改成大写的方式好) + * > 最佳实践 2:杜绝硬编码到处飞,feature 字符串定义到一个统一的常量文件中,并加以说明 + * + * ```js + * import confFeature, { + * FEATURE_ID + * } from ':conf/feature'; + * + * // ... + * + * // 进行判断 + * // 不关心 region,可以不传 region 参数 + * const FEATURE_WHAT_OP_AVAILABLE = confFeature(FEATURE_ID.WHAT_OP); + * // 关心 region,传入的 region 只会在有 regions 配置的情况下有效(否则跟不传效果一样) + * const FEATURE_XX_OP_AVAILABLE = confFeature(FEATURE_ID.WHAT_OP, region); + * + * // ... + * ``` + */ +export default function factory(FEATURE_CONF: Record = {}, GRAY_CONF: Record = {}): IFnFeatureCheck { + return (key: string, arg?: string | IFeatureCheckAttributes): boolean => { + /* + * 这是一个 map,长相如下: + * + * ``` + * { + * [key]: { + * status: boolean; // true 表示该功能可用、false 表示不可用 + * attribute: { + * regions: array + * } + * }, ... + * } + * ``` + */ + const featureConf: IFeatureItem | undefined = FEATURE_CONF[key]; + const grayValue: boolean = GRAY_CONF[key] === undefined ? true : GRAY_CONF[key]; + + // 灰度为 false 则必然为 false(此 if 以后灰度可以认为一直是 true) + if (grayValue === false) { + return false; + } + + // 不存在功能开关的配置,以灰度为准 + if (!featureConf) { + return true; + } + + const { + status = true, + attribute: { + regions = [], + customAttrs = {} + } = {} + } = featureConf; + + if (!status) { + return false; + } + + const attributesToCheck: ICheckItem[] = []; + + if (_isString(arg)) { + attributesToCheck.push({ + value: arg, + mixedList: regions + }); + } else { + _forEach(arg, (v, k) => { + if (!v) { + return; + } + + if (k === 'region') { // region 还是判断 regions + attributesToCheck.push({ + value: v, + mixedList: regions + }); + } else { // 其他的从 customAttrs 中取数据 + const attr: string = customAttrs[k]; + + if (attr) { + attributesToCheck.push({ + value: v, + mixedList: attr.split(/[\n,]/) + }); + } + } + }); + } + + if (!attributesToCheck.length) { + return true; + } + + for (let i = 0; i < attributesToCheck.length; i++) { + if (!mixedBlackWhitelistChecker(attributesToCheck[i].value, attributesToCheck[i].mixedList)) { // 有一个是 false 就返回 false + return false; + } + } + + return true; + }; +} diff --git a/packages/viper-feature-gen/stories/demo-default/index.tsx b/packages/viper-feature-gen/stories/demo-default/index.tsx new file mode 100644 index 000000000..c9dc07f87 --- /dev/null +++ b/packages/viper-feature-gen/stories/demo-default/index.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export default function DemoDefault(): JSX.Element { + return <>天有不测风云; +} diff --git a/packages/viper-feature-gen/stories/index.stories.tsx b/packages/viper-feature-gen/stories/index.stories.tsx new file mode 100644 index 000000000..1fbbf61d9 --- /dev/null +++ b/packages/viper-feature-gen/stories/index.stories.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { + storiesOf +} from '@storybook/react'; +import { + withKnobs +} from '@storybook/addon-knobs'; + +import pkgInfo from '../package.json'; + +import DemoDefault from './demo-default'; + +storiesOf(pkgInfo.name, module) + .addDecorator(withKnobs) + .add('default', () => ); diff --git a/packages/viper-feature-gen/tests/index.spec.ts b/packages/viper-feature-gen/tests/index.spec.ts new file mode 100644 index 000000000..5c05316f4 --- /dev/null +++ b/packages/viper-feature-gen/tests/index.spec.ts @@ -0,0 +1,257 @@ +/* global describe, test, expect */ +import viperFeatureGen from '../src'; + +import pkgInfo from '../package.json'; + +describe(pkgInfo.name, () => { + describe('missing FEATURE_CONF or key', () => { + test('TRUE when `FEATURE_CONF` does NOT exist', () => { + const checkFeature = viperFeatureGen(); + + expect(checkFeature('feature:op')).toBe(true); + expect(checkFeature('feature:op', 'region')).toBe(true); + expect(checkFeature('feature:op', { + attr1: '1' + })).toBe(true); + }); + + test('TRUE when `FEATURE_CONF` does NOT contain key', () => { + const checkFeature = viperFeatureGen({}); + + expect(checkFeature('feature:op')).toBe(true); + expect(checkFeature('feature:op', 'region')).toBe(true); + expect(checkFeature('feature:op', { + attr1: '1' + })).toBe(true); + }); + + test('TRUE when `FEATURE_CONF` does NOT contain key, but exists in GRAY', () => { + const TRUE_GRAY = 'true:gray'; + const FALSE_GRAY = 'false:gray'; + + const checkFeature = viperFeatureGen({}, { + [TRUE_GRAY]: true, + [FALSE_GRAY]: false + }); + + expect(checkFeature(TRUE_GRAY)).toBe(true); + expect(checkFeature(FALSE_GRAY)).toBe(false); + }); + }); + + describe('FEATURE_CONF is set and key is found', () => { + enum EFeature { + FALSE = 'false', + FALSE_REGION_WHITE = 'false:region:white', + TRUE = 'true', + TRUE_NOT_IN_FEATURE_OR_GRAY = 'true:not_in:feature_or_gray', + TRUE_MISSING_ATTRIBUTE = 'true:missing:attribute', + TRUE_REGION_WHITE = 'true:region:white', + TRUE_REGION_WHITE_WILD = 'true:region:white:wild', + TRUE_REGION_BLACK = 'true:region:black', + TRUE_REGION_BLACK_WILD = 'true:region:black:wild', + TRUE_REGION_WHITE_WITH_BLACK = 'true:region:white-black', + WITH_CUSTOM_ATTRIBUTES = 'with_custom_attributes' + } + const REGION_CN_HZ = 'cn-hangzhou'; + const REGION_CN_SH = 'cn-shanghai'; + const REGION_CN_HK = 'cn-hongkong'; + const REGION_CN_OTHER = 'cn-other'; + const REGION_CN_ALL = 'cn-*'; + const REGION_NON_CN = 'any-other-region'; + const FEATURE_CONF = { + [EFeature.FALSE]: { + status: false, + attribute: { + regions: [] + } + }, + [EFeature.FALSE_REGION_WHITE]: { + status: false, + attribute: { + regions: [REGION_CN_HZ, REGION_CN_SH, REGION_CN_HK] + } + }, + [EFeature.TRUE]: { + status: true, + attribute: { + regions: [] + } + }, + [EFeature.TRUE_MISSING_ATTRIBUTE]: { + status: true + }, + [EFeature.TRUE_REGION_WHITE]: { + status: true, + attribute: { + regions: [REGION_CN_HZ, REGION_CN_SH, REGION_CN_HK] + } + }, + [EFeature.TRUE_REGION_WHITE_WILD]: { + status: true, + attribute: { + regions: [REGION_CN_ALL] + } + }, + [EFeature.TRUE_REGION_BLACK]: { + status: true, + attribute: { + regions: [`!${REGION_CN_HZ}`, `!${REGION_CN_SH}`, `!${REGION_CN_HK}`] + } + }, + [EFeature.TRUE_REGION_BLACK_WILD]: { + status: true, + attribute: { + regions: [`!${REGION_CN_ALL}`] + } + }, + [EFeature.TRUE_REGION_WHITE_WITH_BLACK]: { + status: true, + attribute: { + regions: [REGION_CN_ALL, `!${REGION_CN_HK}`] // 支持所有的中国区域,但香港除外 + } + }, + [EFeature.WITH_CUSTOM_ATTRIBUTES]: { + status: true, + attribute: { + customAttrs: { + attr1: '1', + attr2: '22' + } + } + } + }; + const GRAY_CONF = { + [EFeature.FALSE]: true, + [EFeature.TRUE]: false + }; + const confFeature = viperFeatureGen(FEATURE_CONF); + const confFeatureWithGray = viperFeatureGen(FEATURE_CONF, GRAY_CONF); + + // status === false -> false + test('FALSE when status is `false`, regardless of regions configured and passed', () => { + expect(confFeature(EFeature.FALSE)).toBe(false); + expect(confFeature(EFeature.FALSE, REGION_NON_CN)).toBe(false); + expect(confFeature(EFeature.FALSE_REGION_WHITE)).toBe(false); + expect(confFeature(EFeature.FALSE_REGION_WHITE, { + region: REGION_CN_HK + })).toBe(false); + expect(confFeature(EFeature.FALSE_REGION_WHITE, REGION_NON_CN)).toBe(false); + expect(confFeature(EFeature.FALSE_REGION_WHITE, { + region: REGION_CN_HK + })).toBe(false); + expect(confFeature(EFeature.FALSE_REGION_WHITE, { + region: REGION_NON_CN + })).toBe(false); + }); + + // status === true --> false + test('FALSE when status is true, but region is not in whitelist', () => { + expect(confFeature(EFeature.TRUE_REGION_WHITE, REGION_NON_CN)).toBe(false); + expect(confFeature(EFeature.TRUE_REGION_WHITE_WILD, REGION_NON_CN)).toBe(false); + expect(confFeature(EFeature.TRUE_REGION_WHITE, { + region: REGION_NON_CN + })).toBe(false); + expect(confFeature(EFeature.TRUE_REGION_WHITE_WILD, { + region: REGION_NON_CN + })).toBe(false); + }); + + test('FALSE when status is true, but region is in blacklist', () => { + expect(confFeature(EFeature.TRUE_REGION_BLACK, REGION_CN_HZ)).toBe(false); + expect(confFeature(EFeature.TRUE_REGION_BLACK_WILD, REGION_CN_SH)).toBe(false); + expect(confFeature(EFeature.TRUE_REGION_BLACK_WILD, REGION_CN_OTHER)).toBe(false); + expect(confFeature(EFeature.TRUE_REGION_BLACK_WILD, { + region: REGION_CN_SH + })).toBe(false); + expect(confFeature(EFeature.TRUE_REGION_BLACK_WILD, { + region: REGION_CN_OTHER + })).toBe(false); + }); + + // status === true --> true + test('TRUE when status is true, and no region configured (cover missing attribute)', () => { + expect(confFeature(EFeature.TRUE)).toBe(true); + expect(confFeature(EFeature.TRUE, REGION_NON_CN)).toBe(true); + expect(confFeature(EFeature.TRUE, { + region: REGION_NON_CN + })).toBe(true); + expect(confFeature(EFeature.TRUE_MISSING_ATTRIBUTE)).toBe(true); + expect(confFeature(EFeature.TRUE_MISSING_ATTRIBUTE, REGION_NON_CN)).toBe(true); + expect(confFeature(EFeature.TRUE_MISSING_ATTRIBUTE, { + region: REGION_NON_CN + })).toBe(true); + }); + + test('TRUE when status is true, and region in whitelist or region not given', () => { + expect(confFeature(EFeature.TRUE_REGION_WHITE)).toBe(true); + expect(confFeature(EFeature.TRUE_REGION_WHITE, REGION_CN_HZ)).toBe(true); + expect(confFeature(EFeature.TRUE_REGION_WHITE, REGION_CN_SH)).toBe(true); + expect(confFeature(EFeature.TRUE_REGION_WHITE, REGION_CN_HK)).toBe(true); + expect(confFeature(EFeature.TRUE_REGION_WHITE, { + region: REGION_CN_HZ + })).toBe(true); + expect(confFeature(EFeature.TRUE_REGION_WHITE, { + region: REGION_CN_SH + })).toBe(true); + expect(confFeature(EFeature.TRUE_REGION_WHITE, { + region: REGION_CN_HK + })).toBe(true); + }); + + test('TRUE when status is true, but region is in blacklist', () => { + expect(confFeature(EFeature.TRUE_REGION_BLACK, 'any-other')).toBe(true); + expect(confFeature(EFeature.TRUE_REGION_BLACK_WILD, 'any-other')).toBe(true); + expect(confFeature(EFeature.TRUE_REGION_BLACK_WILD, 'any-other')).toBe(true); + expect(confFeature(EFeature.TRUE_REGION_BLACK, { + region: 'any-other' + })).toBe(true); + expect(confFeature(EFeature.TRUE_REGION_BLACK_WILD, { + region: 'any-other' + })).toBe(true); + expect(confFeature(EFeature.TRUE_REGION_BLACK_WILD, { + region: 'any-other' + })).toBe(true); + }); + + // white with black + test('should blacklist prior to whitelist', () => { + expect(confFeature(EFeature.TRUE_REGION_WHITE_WITH_BLACK, REGION_CN_HK)).toBe(false); + expect(confFeature(EFeature.TRUE_REGION_WHITE_WITH_BLACK, { + region: REGION_CN_HK + })).toBe(false); + // expect(confFeature(FEATURES.TRUE_REGION_WHITE_WITH_BLACK, REGION_CN_SH)).toBe(true); + }); + + // with gray conf + test('gray: feature stays false even if gray is true', () => { + expect(confFeatureWithGray(EFeature.FALSE)).toBe(false); + }); + test('gray: feature true became false because of gray', () => { + expect(confFeatureWithGray(EFeature.TRUE)).toBe(false); + }); + + // custom attributes + test('custom attributes', () => { + expect(confFeatureWithGray(EFeature.WITH_CUSTOM_ATTRIBUTES)).toBe(true); // 不传不会判断 custom + expect(confFeatureWithGray(EFeature.WITH_CUSTOM_ATTRIBUTES, { + attr1: '1' + })).toBe(true); + expect(confFeatureWithGray(EFeature.WITH_CUSTOM_ATTRIBUTES, { + attr1: '22' + })).toBe(false); + expect(confFeatureWithGray(EFeature.WITH_CUSTOM_ATTRIBUTES, { + attr1: '1', + attr2: '22' + })).toBe(true); + expect(confFeatureWithGray(EFeature.WITH_CUSTOM_ATTRIBUTES, { + attr1: '1', + attr2: '4' + })).toBe(false); + expect(confFeatureWithGray(EFeature.WITH_CUSTOM_ATTRIBUTES, { + attr1: '1', + attrNotExist: 'fucking' + })).toBe(true); + }); + }); +}); diff --git a/packages/viper-feature-gen/tsconfig.json b/packages/viper-feature-gen/tsconfig.json new file mode 100644 index 000000000..923eff3f6 --- /dev/null +++ b/packages/viper-feature-gen/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "es2015", + "es2017" + ], + "allowJs": false, + "resolveJsonModule": true, + "jsx": "react", + "declaration": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "baseUrl": "./", + "outDir": "lib" + }, + "include": [ + "src" + ] +} From cc13ef01e551c581cd201069d231b56438b29b73 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Mon, 30 Nov 2020 20:56:56 +0800 Subject: [PATCH 116/135] FIX email and username --- packages/console-base-demo-helpers/package.json | 12 ++++++------ packages/console-base-error-prompt-proxy/README.md | 9 +++------ packages/console-base-error-prompt/README.md | 2 +- packages/console-base-intl-factory/README.md | 6 ++---- packages/console-base-rc-flex/package.json | 12 ++++++------ packages/console-fetcher-basic/README.md | 2 +- packages/console-fetcher-interceptor-fecs/README.md | 7 ++----- packages/console-fetcher-proxy/README.md | 10 +++++----- packages/console-fetcher/README.md | 2 +- packages/dom-event-hijacker/package.json | 12 ++++++------ packages/viper-feature-gen/README.md | 6 ++---- 11 files changed, 35 insertions(+), 45 deletions(-) diff --git a/packages/console-base-demo-helpers/package.json b/packages/console-base-demo-helpers/package.json index 8900eece4..4e10d55b3 100644 --- a/packages/console-base-demo-helpers/package.json +++ b/packages/console-base-demo-helpers/package.json @@ -7,21 +7,21 @@ "module": "build/es/index.js", "types": "build/types/index.d.ts", "author": { - "name": "驳是", - "email": "jianchun.wjc@alibaba-inc.com" + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" }, "repository": { "type": "git", - "url": "git@gitlab.alibaba-inc.com:aliyun/console-base.git" + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" }, "keywords": [ "console-base", "demo", "helpers" ], - "publishConfig": { - "registry": "http://registry.npm.alibaba-inc.com" - }, "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", diff --git a/packages/console-base-error-prompt-proxy/README.md b/packages/console-base-error-prompt-proxy/README.md index 4b9de8703..c25a0abdf 100644 --- a/packages/console-base-error-prompt-proxy/README.md +++ b/packages/console-base-error-prompt-proxy/README.md @@ -3,11 +3,8 @@ 注意:这个包**只能**是控制台应用使用的,ConsoleBase 不会用到它。 -用法和 [@alicloud/console-base-error-prompt] 基本一样。 +用法和 `@alicloud/console-base-error-prompt` 基本一样。 -在 ConsoleBase 未启用全局代理的时候,抛错动作由 [@alicloud/console-base-error-prompt] 直接执行(这个包将由应用打包到应用的 bundle)。 +在 ConsoleBase 未启用全局代理的时候,抛错动作由 `@alicloud/console-base-error-prompt` 直接执行(这个包将由应用打包到应用的 bundle)。 -在 ConsoleBase 启用全局代理后,抛错动作由 [@alicloud/console-base-plugin-error-prompt] 接管,而真正的错误提示是打包在 console-base bundle 里的 [@alicloud/console-base-error-prompt] 执行的。 - -[@alicloud/console-base-error-prompt]: https://npm.alibaba-inc.com/package/@alicloud/console-base-error-prompt -[@alicloud/console-base-plugin-error-prompt]: https://npm.alibaba-inc.com/package/@alicloud/console-base-plugin-error-prompt +在 ConsoleBase 启用全局代理后,抛错动作由 `@ali/console-base-plugin-error-prompt` (阿里云内部包)接管,而真正的错误提示是打包在 console-base bundle 里的 `@alicloud/console-base-error-prompt` 执行的。 diff --git a/packages/console-base-error-prompt/README.md b/packages/console-base-error-prompt/README.md index b87d63bdd..c7bb04f5e 100644 --- a/packages/console-base-error-prompt/README.md +++ b/packages/console-base-error-prompt/README.md @@ -3,7 +3,7 @@ TODO see in action -> [@alicloud/error-prompt](https://npm.alibaba-inc.com/package/@alicloud/error-prompt) 的进化版,不再依赖 wind 和 fusion,也不需要手动引样式和指定语言,更不再是一个工厂。 +> `@alicloud/error-prompt` 的进化版,不再依赖 wind 和 fusion,也不需要手动引样式和指定语言,更不再是一个工厂。 # 使用 diff --git a/packages/console-base-intl-factory/README.md b/packages/console-base-intl-factory/README.md index 8ac705d1e..808ab0133 100755 --- a/packages/console-base-intl-factory/README.md +++ b/packages/console-base-intl-factory/README.md @@ -1,9 +1,9 @@ @alicloud/console-base-intl-factory === -在 [@alicloud/console-base-intl-factory-basic] 上的扩展,标准化带 HTML 及换行的输出样式。 +`@alicloud/console-base-intl-factory-basic` 上的扩展,标准化带 HTML 及换行的输出样式。 -> 这个包会额外要求引入 React,如果只是需要纯文本的国际化,请使用 [@alicloud/console-base-intl-factory-basic]。 +这个包会额外要求引入 React,如果只是需要纯文本的国际化,请使用 `@alicloud/console-base-intl-factory-basic`。 # INSTALL @@ -65,5 +65,3 @@ intl('xxx_{id,name}!html', { // 将渲染成 HTML }); intl('xxx!html!lines'); // 将渲染成 HTML,且内部的换行均有意义(会转成 p、ul、ol 等) ``` - -[@alicloud/console-base-intl-factory-basic]: https://npm.alibaba-inc.com/package/@alicloud/console-base-intl-factory-basic diff --git a/packages/console-base-rc-flex/package.json b/packages/console-base-rc-flex/package.json index 703a35deb..907183001 100644 --- a/packages/console-base-rc-flex/package.json +++ b/packages/console-base-rc-flex/package.json @@ -7,21 +7,21 @@ "module": "build/es/index.js", "types": "build/types/index.d.ts", "author": { - "name": "驳是", - "email": "jianchun.wjc@alibaba-inc.com" + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" }, "repository": { "type": "git", - "url": "git@gitlab.alibaba-inc.com:aliyun/console-base.git" + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" + }, + "publishConfig": { + "access": "public" }, "keywords": [ "console-base", "rc", "flex" ], - "publishConfig": { - "registry": "http://registry.npm.alibaba-inc.com" - }, "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", diff --git a/packages/console-fetcher-basic/README.md b/packages/console-fetcher-basic/README.md index 6f791001f..17b4c15f9 100755 --- a/packages/console-fetcher-basic/README.md +++ b/packages/console-fetcher-basic/README.md @@ -14,7 +14,7 @@ 1. 不是所有的控制台都需要风控 2. 风控以 react 实现,不是所有的控制台都有 react,ng 下可以自主实现风控 -有风控需求,且应用是 react 的请使用 [@alicloud/console-fetcher](https://npm.alibaba-inc.com/package/@alicloud/console-fetcher)。 +有风控需求,且应用是 react 的请使用 `@alicloud/console-fetcher`。 # 输出 diff --git a/packages/console-fetcher-interceptor-fecs/README.md b/packages/console-fetcher-interceptor-fecs/README.md index de4a549fc..b71039c2a 100755 --- a/packages/console-fetcher-interceptor-fecs/README.md +++ b/packages/console-fetcher-interceptor-fecs/README.md @@ -3,8 +3,8 @@ `@alicloud/fetcher` 针对 FECS 请求的拦截,包括请求中,该拦截器会做请求和响应两次拦截,条件是请求的 FECS 接口,且为带 body 请求(POST、PUT、DELETE 等)。 -* 请求:添加 `body.sec_token` 参数,因为 [@alicloud/console-fetcher-interceptor-req-security] 做了类似的事情,所以要放在它后边; -* 响应:在发生特定错误的时候,做刷新 token 的操作并再次发送请求,因为「特定错误」需要靠 [@alicloud/console-fetcher-interceptor-res-biz] 转化得到,所以要放在它后边。 +* 请求:添加 `body.sec_token` 参数,因为 `@alicloud/console-fetcher-interceptor-req-security` 做了类似的事情,所以要放在它后边; +* 响应:在发生特定错误的时候,做刷新 token 的操作并再次发送请求,因为「特定错误」需要靠 `@alicloud/console-fetcher-interceptor-res-biz` 转化得到,所以要放在它后边。 # 拦截器顺序要求 @@ -40,6 +40,3 @@ intercept(fetcher); export default fetcher ``` - -[@alicloud/console-fetcher-interceptor-req-security]: https://npm.alibaba-inc.com/package/@alicloud/console-fetcher-interceptor-req-security -[@alicloud/console-fetcher-interceptor-res-biz]: https://npm.alibaba-inc.com/package/@alicloud/console-fetcher-interceptor-res-biz diff --git a/packages/console-fetcher-proxy/README.md b/packages/console-fetcher-proxy/README.md index d3471d2e8..3a2f9a7ec 100755 --- a/packages/console-fetcher-proxy/README.md +++ b/packages/console-fetcher-proxy/README.md @@ -3,11 +3,11 @@ 注意:这个包**只能**是控制台应用使用的,ConsoleBase 不会用到它。 -用法和 [@alicloud/console-fetcher] 基本一样。 +用法和 `@alicloud/console-fetcher` 基本一样。 -在 ConsoleBase 未启用全局代理的时候,抛错动作由 [@alicloud/console-fetcher] 直接执行(这个包将由应用打包到应用的 bundle)。 +在 ConsoleBase 未启用全局代理的时候,抛错动作由 `@alicloud/console-fetcher` 直接执行(这个包将由应用打包到应用的 bundle)。 -在 ConsoleBase 启用全局代理后,抛错动作由 [@alicloud/console-base-plugin-fetcher] 接管,而真正的错误提示是打包在 console-base bundle 里的 [@alicloud/console-fetcher] 执行的。 +在 ConsoleBase 启用全局代理后,抛错动作由 `@alicloud/console-base-plugin-fetcher` 接管,而真正的错误提示是打包在 console-base bundle 里的 `@alicloud/console-fetcher` 执行的。 -[@alicloud/console-fetcher]: https://npm.alibaba-inc.com/package/@alicloud/console-fetcher -[@alicloud/console-base-plugin-fetcher]: https://npm.alibaba-inc.com/package/@alicloud/console-base-plugin-fetcher +`@alicloud/console-fetcher`: https://npm.alibaba-inc.com/package/@alicloud/console-fetcher +`@alicloud/console-base-plugin-fetcher`: https://npm.alibaba-inc.com/package/@alicloud/console-base-plugin-fetcher diff --git a/packages/console-fetcher/README.md b/packages/console-fetcher/README.md index 3467930f7..ffc239e9b 100755 --- a/packages/console-fetcher/README.md +++ b/packages/console-fetcher/README.md @@ -1,7 +1,7 @@ @alicloud/console-fetcher === -一个专门为控制台量身定制的请求包,在 [@alicloud/console-fetcher-basic](https://npm.alibaba-inc.com/package/@alicloud/console-fetcher-basic) 的基础上添加以下拦截器: +一个专门为控制台量身定制的请求包,在 `@alicloud/console-fetcher-basic` 的基础上添加以下拦截器: * `@alicloud/console-fetcher-interceptor-res-risk` 特殊的业务错误类型 - 风控 - 需要对其进行提示或二次验证 * `@alicloud/console-fetcher-interceptor-res-sls` 对错误进行 SLS 上报,必须传入配置参数 diff --git a/packages/dom-event-hijacker/package.json b/packages/dom-event-hijacker/package.json index 9d8ae45f3..35f329aaf 100644 --- a/packages/dom-event-hijacker/package.json +++ b/packages/dom-event-hijacker/package.json @@ -6,16 +6,16 @@ "main": "build/cjs/index.js", "module": "build/es/index.js", "types": "build/types/index.d.ts", + "author": { + "name": "Jianchun Wang", + "email": "justnewbee@gmail.com" + }, "repository": { "type": "git", - "url": "git@gitlab.alibaba-inc.com:aliyun/console-base.git" - }, - "author": { - "name": "jianchun.wjc", - "email": "jianchun.wjc@alibaba-inc.com" + "url": "git+https://github.com/aliyun/alibabacloud-console-base.git" }, "publishConfig": { - "registry": "http://registry.npm.alibaba-inc.com" + "access": "public" }, "keywords": [ "dom", diff --git a/packages/viper-feature-gen/README.md b/packages/viper-feature-gen/README.md index a9935f904..223115aa2 100755 --- a/packages/viper-feature-gen/README.md +++ b/packages/viper-feature-gen/README.md @@ -3,11 +3,11 @@ 阿里云控制台(接入 viper)功能开关检查(工厂方法) -> 💥 OneConsole 控制台可以使用 [@alicloud/console-one-conf],它整合了 OneConsole 下 +> 💥 OneConsole 控制台可以使用 `@alicloud/console-one-conf`,它整合了 OneConsole 下 > * `window.ALIYUN_CONSOLE_CONFIG` 这个全局对象的类型定义和纠正 > * `confFeature()` 利用 `@alicloud/viper-feature-gen` 标准化了功能开关加灰度的使用 > * `confLinkGen()` 标准化了渠道链接的使用方式,在 TS 下可以对传入的 key 做类型约束(需要传入默认的所有链接兜底),避免漏写和写错 -> 墙裂推荐 OneConsole 的控制台直接使用 [@alicloud/console-one-conf] 而不是这个 `@alicloud/viper-feature-gen` +> 墙裂推荐 OneConsole 的控制台直接使用 `@alicloud/console-one-conf` 而不是这个 `@alicloud/viper-feature-gen` # WHY @@ -121,5 +121,3 @@ interface IFnFeatureCheck { * `true` 支持功能(viper 上没有对应的配置也表示支持功能) * `false` 不支持功能 - -[@alicloud/console-one-conf]: https://npm.alibaba-inc.com/package/@alicloud/console-one-conf From 7e88a8ed4fd96570545435a7c4bcbc9df80fc793 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Mon, 30 Nov 2020 21:05:44 +0800 Subject: [PATCH 117/135] CHORE better demo --- .../stories/demo-one/index.tsx | 66 +++++++++++-------- .../demo-default/other-tests/index.tsx | 38 +++++++---- 2 files changed, 63 insertions(+), 41 deletions(-) diff --git a/packages/console-fetcher-interceptor-req-mock/stories/demo-one/index.tsx b/packages/console-fetcher-interceptor-req-mock/stories/demo-one/index.tsx index ebd80500e..65ffd7241 100644 --- a/packages/console-fetcher-interceptor-req-mock/stories/demo-one/index.tsx +++ b/packages/console-fetcher-interceptor-req-mock/stories/demo-one/index.tsx @@ -1,38 +1,42 @@ -import React from 'react'; +import React, { + useState, + useCallback +} from 'react'; import { H1, P, - Button + Button, + PrePromise } from '@alicloud/demo-rc-elements'; import { fetcher1 } from '../fetcher'; -function callOpenApi(): void { - fetcher1.post('/data/api.json', { +function callOpenApi(): Promise { + return fetcher1.post('/data/api.json', { product: 'ram', action: 'ListAccessKeys' - }).then(console.info, console.error); + }); } -function callInnerApi(): void { - fetcher1.post('/data/innerApi.json', { +function callInnerApi(): Promise { + return fetcher1.post('/data/innerApi.json', { product: 'ram', action: 'ListGroups' - }).then(console.info, console.error); + }); } -function callContainerApi(): void { - fetcher1.post('/data/call.json', { +function callContainerApi(): Promise { + return fetcher1.post('/data/call.json', { product: 'ram', action: 'ListRoles' - }).then(console.info, console.error); + }); } -function callMultiOpenApi(): void { - fetcher1.post('/data/multiApi.json', { +function callMultiOpenApi(): Promise { + return fetcher1.post('/data/multiApi.json', { product: 'ram', actions: JSON.stringify([{ action: 'ListAccessKeys' @@ -41,11 +45,11 @@ function callMultiOpenApi(): void { }, { action: 'ListRoles' }]) - }).then(console.info, console.error); + }); } -function callMultiInnerApi(): void { - fetcher1.post('/data/multiInnerApi.json', { +function callMultiInnerApi(): Promise { + return fetcher1.post('/data/multiInnerApi.json', { product: 'ram', actions: JSON.stringify([{ action: 'ListAccessKeys' @@ -54,11 +58,11 @@ function callMultiInnerApi(): void { }, { action: 'ListRoles' }]) - }).then(console.info, console.error); + }); } -function callMultiContainerApi(): void { - fetcher1.post('/data/multiCall.json', { +function callMultiContainerApi(): Promise { + return fetcher1.post('/data/multiCall.json', { product: 'ram', actions: JSON.stringify([{ action: 'ListAccessKeys' @@ -67,19 +71,27 @@ function callMultiContainerApi(): void { }, { action: 'ListRoles' }]) - }).then(console.info, console.error); + }); } - export default function DemoOne(): JSX.Element { + const [statePromise, setStatePromise] = useState | null>(null); + const handleCallOpenApi = useCallback(() => setStatePromise(callOpenApi()), [setStatePromise]); + const handleCallInnerApi = useCallback(() => setStatePromise(callInnerApi()), [setStatePromise]); + const handleCallContainerApi = useCallback(() => setStatePromise(callContainerApi()), [setStatePromise]); + const handleCallMultiOpenApi = useCallback(() => setStatePromise(callMultiOpenApi()), [setStatePromise]); + const handleCallMultiInnerApi = useCallback(() => setStatePromise(callMultiInnerApi()), [setStatePromise]); + const handleCallMultiContainerApi = useCallback(() => setStatePromise(callMultiContainerApi()), [setStatePromise]); + return <>

利用 mocks.alibaba-inc.com 对 OneConsole 接口进行 mock

请看 console

- - - - - - + + + + + + + ; } diff --git a/packages/fetcher/stories/demo-default/other-tests/index.tsx b/packages/fetcher/stories/demo-default/other-tests/index.tsx index 885db9053..73e15ae37 100644 --- a/packages/fetcher/stories/demo-default/other-tests/index.tsx +++ b/packages/fetcher/stories/demo-default/other-tests/index.tsx @@ -1,11 +1,15 @@ /* eslint-disable no-console */ -import React from 'react'; +import React, { + useState, + useCallback +} from 'react'; import { H1, P, List, - Button + Button, + PrePromise } from '@alicloud/demo-rc-elements'; import { @@ -30,14 +34,14 @@ const params = { pArr: ['p.arr.1', 'p.arr.2', 'p.arr.3'] }; -function testNormal(): void { - get({ +function testNormal(): Promise { + return get({ params: paramsInOptions - }, 'https://mocks.alibaba-inc.com/mock/boshit/success', params).then(console.info, console.warn); + }, 'https://mocks.alibaba-inc.com/mock/boshit/success', params); } -function testPriority(): void { - get({ +function testPriority(): Promise { + return get({ params: paramsInOptions, additionalInterceptorsForRequest: [ [function() { @@ -47,21 +51,26 @@ function testPriority(): void { console.info(222); // 在开始执行 }] ] - }, 'https://mocks.alibaba-inc.com/mock/boshit/success', params).then(console.info, console.warn); + }, 'https://mocks.alibaba-inc.com/mock/boshit/success', params); } -function testSkipNetwork(): void { - get({ +function testSkipNetwork(): Promise { + return get({ params: paramsInOptions, additionalInterceptorsForRequest: [ [function() { throw FetcherUtils.createErrorSkipNetwork(new Promise(resolve => setTimeout(() => resolve(true), 500))); }] ] - }, 'https://mocks.alibaba-inc.com/mock/boshit/success', params).then(console.info, console.warn); + }, 'https://mocks.alibaba-inc.com/mock/boshit/success', params); } export default function OtherTests(): JSX.Element { + const [statePromise, setStatePromise] = useState | null>(null); + const handleTestNormal = useCallback(() => setStatePromise(testNormal()), [setStatePromise]); + const handleTestPriority = useCallback(() => setStatePromise(testPriority()), [setStatePromise]); + const handleTestSkipNetwork = useCallback(() => setStatePromise(testSkipNetwork()), [setStatePromise]); + return <>

利用临时拦截器

可以通过 additionalInterceptorsForRequest 添加临时的拦截器,它只影响当前的请求。

@@ -70,8 +79,9 @@ export default function OtherTests(): JSX.Element { 通过指定优先级,如 [1, interceptor] 可以让它在预设拦截器之前执行 通过在请求拦截器中使用 FetcherUtils.createErrorSkipNetwork() 可以直接返回结果,不经过网络请求和响应拦截器 - - - + + + + ; } From 47598e008ee08473210ccc3a58367daab973f166 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Mon, 30 Nov 2020 22:20:22 +0800 Subject: [PATCH 118/135] Publish - @alicloud/base64@0.0.1 - @alicloud/console-base-common-typings@0.0.1 - @alicloud/console-base-conf-account@0.0.1 - @alicloud/console-base-conf-env@0.0.1 - @alicloud/console-base-conf-locale@0.0.1 - @alicloud/console-base-conf-product-id@0.0.1 - @alicloud/console-base-demo-helpers@0.0.1 - @alicloud/console-base-error-prompt-proxy@0.0.1 - @alicloud/console-base-error-prompt@0.0.1 - @alicloud/console-base-global@0.0.1 - @alicloud/console-base-intl-factory-basic@0.0.1 - @alicloud/console-base-intl-factory@0.0.1 - @alicloud/console-base-log-sls@0.0.1 - @alicloud/console-base-messenger@0.0.1 - @alicloud/console-base-rc-breadcrumb@0.0.1 - @alicloud/console-base-rc-button@0.0.1 - @alicloud/console-base-rc-dialog@0.0.1 - @alicloud/console-base-rc-dropdown@0.0.1 - @alicloud/console-base-rc-flex@0.0.1 - @alicloud/console-base-rc-icon@0.0.1 - @alicloud/console-base-rc-input@0.0.1 - @alicloud/console-base-rc-intl@0.0.1 - @alicloud/console-base-rc-key-value@0.0.1 - @alicloud/console-base-rc-loading@0.0.1 - @alicloud/console-base-rc-marks@0.0.1 - @alicloud/console-base-rc-pagination@0.0.1 - @alicloud/console-base-styled-mixin@0.0.1 - @alicloud/console-fetcher-basic@0.0.1 - @alicloud/console-fetcher-interceptor-arms@0.0.1 - @alicloud/console-fetcher-interceptor-fecs@0.0.1 - @alicloud/console-fetcher-interceptor-req-mock@0.0.1 - @alicloud/console-fetcher-interceptor-req-security@0.0.1 - @alicloud/console-fetcher-interceptor-res-biz@0.0.1 - @alicloud/console-fetcher-interceptor-res-error-message@0.0.1 - @alicloud/console-fetcher-interceptor-res-risk@0.0.1 - @alicloud/console-fetcher-interceptor-sls@0.0.1 - @alicloud/console-fetcher-proxy@0.0.1 - @alicloud/console-fetcher@0.0.1 - @alicloud/console-logger-sls@0.0.1 - @alicloud/console-one-conf@0.0.1 - @alicloud/console-one-config@0.0.1 - @alicloud/cookie@0.0.1 - @alicloud/copy-text@0.0.1 - @alicloud/demo-rc-elements@0.0.3 - @alicloud/dom-event-hijacker@0.0.1 - @alicloud/eslint-config@0.0.2 - @alicloud/fetcher-demo-helpers@0.0.1 - @alicloud/fetcher-fetch@0.0.1 - @alicloud/fetcher-jsonp@0.0.1 - @alicloud/fetcher@0.0.1 - @alicloud/logger-sls@0.0.1 - @alicloud/mixed-black-whitelist-checker@0.0.1 - @alicloud/post-message@0.0.1 - @alicloud/react-hook-is-unmounted@0.0.1 - @alicloud/storage-factory@0.0.1 - @alicloud/stylelint-config@0.0.2 - @alicloud/viper-feature-gen@0.0.1 --- packages/base64/package.json | 2 +- .../console-base-common-typings/package.json | 2 +- .../console-base-conf-account/package.json | 8 +++---- packages/console-base-conf-env/package.json | 8 +++---- .../console-base-conf-locale/package.json | 8 +++---- .../console-base-conf-product-id/package.json | 2 +- .../console-base-demo-helpers/package.json | 6 ++--- .../package.json | 10 ++++----- .../console-base-error-prompt/package.json | 12 +++++----- packages/console-base-global/package.json | 4 ++-- .../package.json | 6 ++--- .../console-base-intl-factory/package.json | 8 +++---- packages/console-base-log-sls/package.json | 8 +++---- packages/console-base-messenger/package.json | 6 ++--- .../console-base-rc-breadcrumb/package.json | 4 ++-- packages/console-base-rc-button/package.json | 6 ++--- packages/console-base-rc-dialog/package.json | 16 +++++++------- .../console-base-rc-dropdown/package.json | 6 ++--- packages/console-base-rc-flex/package.json | 2 +- packages/console-base-rc-icon/package.json | 6 ++--- packages/console-base-rc-input/package.json | 6 ++--- packages/console-base-rc-intl/package.json | 4 ++-- .../console-base-rc-key-value/package.json | 4 ++-- packages/console-base-rc-loading/package.json | 10 ++++----- packages/console-base-rc-marks/package.json | 2 +- .../console-base-rc-pagination/package.json | 10 ++++----- .../console-base-styled-mixin/package.json | 2 +- packages/console-fetcher-basic/package.json | 22 +++++++++---------- .../package.json | 8 +++---- .../package.json | 18 +++++++-------- .../package.json | 10 ++++----- .../package.json | 8 +++---- .../package.json | 8 +++---- .../package.json | 10 ++++----- .../package.json | 20 ++++++++--------- .../package.json | 10 ++++----- packages/console-fetcher-proxy/package.json | 10 ++++----- packages/console-fetcher/package.json | 10 ++++----- packages/console-logger-sls/package.json | 12 +++++----- packages/console-one-conf/package.json | 6 ++--- packages/console-one-config/package.json | 2 +- packages/cookie/package.json | 4 ++-- packages/copy-text/package.json | 4 ++-- packages/demo-rc-elements/package.json | 2 +- packages/dom-event-hijacker/package.json | 4 ++-- packages/eslint-config/package.json | 2 +- packages/fetcher-demo-helpers/package.json | 4 ++-- packages/fetcher-fetch/package.json | 4 ++-- packages/fetcher-jsonp/package.json | 4 ++-- packages/fetcher/package.json | 10 ++++----- packages/logger-sls/package.json | 6 ++--- .../package.json | 2 +- packages/post-message/package.json | 4 ++-- packages/react-hook-is-unmounted/package.json | 2 +- packages/storage-factory/package.json | 2 +- packages/stylelint-config/package.json | 2 +- packages/viper-feature-gen/package.json | 4 ++-- 57 files changed, 191 insertions(+), 191 deletions(-) diff --git a/packages/base64/package.json b/packages/base64/package.json index bbfbb5fc2..666179ed6 100755 --- a/packages/base64/package.json +++ b/packages/base64/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/base64", - "version": "0.0.0", + "version": "0.0.1", "description": "Base64", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-common-typings/package.json b/packages/console-base-common-typings/package.json index f6cb03a90..7506d3f0c 100755 --- a/packages/console-base-common-typings/package.json +++ b/packages/console-base-common-typings/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-common-typings", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase common types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-account/package.json b/packages/console-base-conf-account/package.json index dcdb83da6..6b5f24cb9 100755 --- a/packages/console-base-conf-account/package.json +++ b/packages/console-base-conf-account/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-account", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF.ACCOUNT", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -34,8 +34,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/cookie": "^0.0.0", - "@alicloud/console-one-config": "^0.0.0" + "@alicloud/console-one-config": "^0.0.1", + "@alicloud/cookie": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-conf-env/package.json b/packages/console-base-conf-env/package.json index 01c87f7a3..dc0ad214a 100755 --- a/packages/console-base-conf-env/package.json +++ b/packages/console-base-conf-env/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-env", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF.ENV", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -34,8 +34,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/cookie": "^0.0.0", - "@alicloud/console-one-config": "^0.0.0" + "@alicloud/console-one-config": "^0.0.1", + "@alicloud/cookie": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-conf-locale/package.json b/packages/console-base-conf-locale/package.json index 4b48b9576..6669f5de4 100755 --- a/packages/console-base-conf-locale/package.json +++ b/packages/console-base-conf-locale/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-locale", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF.LOCALE", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/cookie": "^0.0.0", - "@alicloud/fetcher-jsonp": "^0.0.0", + "@alicloud/cookie": "^0.0.1", + "@alicloud/fetcher-jsonp": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-conf-product-id/package.json b/packages/console-base-conf-product-id/package.json index ce4927bcf..eec4b4dfe 100755 --- a/packages/console-base-conf-product-id/package.json +++ b/packages/console-base-conf-product-id/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-product-id", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF product id", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-demo-helpers/package.json b/packages/console-base-demo-helpers/package.json index 4e10d55b3..826d5f006 100644 --- a/packages/console-base-demo-helpers/package.json +++ b/packages/console-base-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-demo-helpers", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase demo 助手", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-messenger": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2" + "@alicloud/console-base-messenger": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.3" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-error-prompt-proxy/package.json b/packages/console-base-error-prompt-proxy/package.json index b779a6cb6..0e9fd9e5e 100644 --- a/packages/console-base-error-prompt-proxy/package.json +++ b/packages/console-base-error-prompt-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt-proxy", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 错误弹窗器(集中代理)", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "@types/styled-components": "^5.1.4", @@ -40,9 +40,9 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-error-prompt": "^0.0.0", - "@alicloud/console-base-global": "^0.0.0", - "@alicloud/console-base-messenger": "^0.0.0" + "@alicloud/console-base-error-prompt": "^0.0.1", + "@alicloud/console-base-global": "^0.0.1", + "@alicloud/console-base-messenger": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-error-prompt/package.json b/packages/console-base-error-prompt/package.json index 80348664d..76c9f7ba8 100644 --- a/packages/console-base-error-prompt/package.json +++ b/packages/console-base-error-prompt/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 错误弹窗器", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/qs": "^6.9.5", @@ -42,10 +42,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/console-base-rc-button": "^0.0.0", - "@alicloud/console-base-rc-dialog": "^0.0.0", - "@alicloud/console-base-rc-pagination": "^0.0.0", + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/console-base-rc-button": "^0.0.1", + "@alicloud/console-base-rc-dialog": "^0.0.1", + "@alicloud/console-base-rc-pagination": "^0.0.1", "lodash": "^4.17.20", "qs": "^6.9.4" }, diff --git a/packages/console-base-global/package.json b/packages/console-base-global/package.json index e69d717d3..8575ed681 100644 --- a/packages/console-base-global/package.json +++ b/packages/console-base-global/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-global", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 唯一官方指定全局变量... 的 API", "license": "MIT", "main": "build/cjs/index.js", @@ -32,7 +32,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-messenger": "^0.0.0" + "@alicloud/console-base-messenger": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-intl-factory-basic/package.json b/packages/console-base-intl-factory-basic/package.json index a65f95601..80f7d666a 100755 --- a/packages/console-base-intl-factory-basic/package.json +++ b/packages/console-base-intl-factory-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory-basic", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Intl Factory Basic, Pure Text, No JSX", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -36,7 +36,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-locale": "^0.0.0", + "@alicloud/console-base-conf-locale": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-intl-factory/package.json b/packages/console-base-intl-factory/package.json index 599bc1ab1..7f3b097fd 100755 --- a/packages/console-base-intl-factory/package.json +++ b/packages/console-base-intl-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Intl Factory", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,8 +37,8 @@ "react": ">=16.8" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/console-base-rc-intl": "^0.0.0" + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/console-base-rc-intl": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-log-sls/package.json b/packages/console-base-log-sls/package.json index 5b5d8d6f9..eedc7b434 100755 --- a/packages/console-base-log-sls/package.json +++ b/packages/console-base-log-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-log-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Log SLS", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-product-id": "^0.0.0", - "@alicloud/console-logger-sls": "^0.0.0" + "@alicloud/console-base-conf-product-id": "^0.0.1", + "@alicloud/console-logger-sls": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-messenger/package.json b/packages/console-base-messenger/package.json index 34b7df066..ab5664ae4 100755 --- a/packages/console-base-messenger/package.json +++ b/packages/console-base-messenger/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-messenger", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 信使 - 与控制台应用之间的交互", "license": "MIT", "main": "build/cjs/index.js", @@ -32,8 +32,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.0", - "@alicloud/post-message": "^0.0.0" + "@alicloud/console-base-common-typings": "^0.0.1", + "@alicloud/post-message": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-breadcrumb/package.json b/packages/console-base-rc-breadcrumb/package.json index 728a8e81b..f774e694a 100644 --- a/packages/console-base-rc-breadcrumb/package.json +++ b/packages/console-base-rc-breadcrumb/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-breadcrumb", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 面包屑", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-button/package.json b/packages/console-base-rc-button/package.json index 081bc4020..ad6765980 100644 --- a/packages/console-base-rc-button/package.json +++ b/packages/console-base-rc-button/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-button", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 按钮", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-rc-icon": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-rc-icon": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-dialog/package.json b/packages/console-base-rc-dialog/package.json index 8e73ad797..3f7ce3d68 100644 --- a/packages/console-base-rc-dialog/package.json +++ b/packages/console-base-rc-dialog/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dialog", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - Dialog", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -45,12 +45,12 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/console-base-rc-button": "^0.0.0", - "@alicloud/console-base-rc-icon": "^0.0.0", - "@alicloud/console-base-rc-input": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0", - "@alicloud/react-hook-is-unmounted": "^0.0.0", + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/console-base-rc-button": "^0.0.1", + "@alicloud/console-base-rc-icon": "^0.0.1", + "@alicloud/console-base-rc-input": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1", + "@alicloud/react-hook-is-unmounted": "^0.0.1", "immutability-helper": "^3.1.1", "lodash": "^4.17.20" }, diff --git a/packages/console-base-rc-dropdown/package.json b/packages/console-base-rc-dropdown/package.json index f28adc587..144b958c1 100644 --- a/packages/console-base-rc-dropdown/package.json +++ b/packages/console-base-rc-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dropdown", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 下拉", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -44,7 +44,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.0", + "@alicloud/console-base-styled-mixin": "^0.0.1", "immutability-helper": "^3.1.1", "lodash": "^4.17.20" }, diff --git a/packages/console-base-rc-flex/package.json b/packages/console-base-rc-flex/package.json index 907183001..b4bc8d728 100644 --- a/packages/console-base-rc-flex/package.json +++ b/packages/console-base-rc-flex/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-flex", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - Flex", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-icon/package.json b/packages/console-base-rc-icon/package.json index 1276e9883..0e87ba09a 100644 --- a/packages/console-base-rc-icon/package.json +++ b/packages/console-base-rc-icon/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-icon", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 图标", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "@types/styled-components": "^5.1.4", @@ -40,7 +40,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-input/package.json b/packages/console-base-rc-input/package.json index 5fdd4f193..e7f5bdc08 100644 --- a/packages/console-base-rc-input/package.json +++ b/packages/console-base-rc-input/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-input", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - Input", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-rc-icon": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-rc-icon": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-intl/package.json b/packages/console-base-rc-intl/package.json index 9a2388fb4..918e7e77c 100644 --- a/packages/console-base-rc-intl/package.json +++ b/packages/console-base-rc-intl/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-intl", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 带样式的国际化文案展示", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-key-value/package.json b/packages/console-base-rc-key-value/package.json index a1eadb4cf..935904d95 100644 --- a/packages/console-base-rc-key-value/package.json +++ b/packages/console-base-rc-key-value/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-key-value", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - key-value 对的展示", "license": "MIT", "main": "build/cjs/index.js", @@ -40,7 +40,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.0", + "@alicloud/console-base-styled-mixin": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index c40156a11..8a2035c75 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-loading", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 加载中", "license": "MIT", "main": "build/cjs/index.js", @@ -40,10 +40,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.0", - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/console-base-rc-icon": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0", + "@alicloud/console-base-common-typings": "^0.0.1", + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/console-base-rc-icon": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-rc-marks/package.json b/packages/console-base-rc-marks/package.json index 6d85d6000..1f42d6fc8 100644 --- a/packages/console-base-rc-marks/package.json +++ b/packages/console-base-rc-marks/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-marks", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - NEW、ALPHA、BETA 等小标签", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-pagination/package.json b/packages/console-base-rc-pagination/package.json index 1547be04a..19b11342f 100644 --- a/packages/console-base-rc-pagination/package.json +++ b/packages/console-base-rc-pagination/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-pagination", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 分页", "license": "MIT", "main": "build/cjs/index.js", @@ -39,10 +39,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/console-base-rc-button": "^0.0.0", - "@alicloud/console-base-rc-icon": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/console-base-rc-button": "^0.0.1", + "@alicloud/console-base-rc-icon": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-styled-mixin/package.json b/packages/console-base-styled-mixin/package.json index eea82c483..79fd094c1 100644 --- a/packages/console-base-styled-mixin/package.json +++ b/packages/console-base-styled-mixin/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-styled-mixin", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台专用的 styled mixin", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-basic/package.json b/packages/console-fetcher-basic/package.json index 36be940b7..d9c9a530a 100644 --- a/packages/console-fetcher-basic/package.json +++ b/packages/console-fetcher-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-basic", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台基础 Fetcher(无风控)", "license": "MIT", "main": "build/cjs/index.js", @@ -23,11 +23,11 @@ "basic" ], "devDependencies": { + "@alicloud/console-base-demo-helpers": "^0.0.1", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/console-base-demo-helpers": "^0.0.0", - "@alicloud/fetcher-demo-helpers": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -37,13 +37,13 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-interceptor-arms": "^0.0.0", - "@alicloud/console-fetcher-interceptor-fecs": "^0.0.0", - "@alicloud/console-fetcher-interceptor-req-security": "^0.0.0", - "@alicloud/console-fetcher-interceptor-res-biz": "^0.0.0", - "@alicloud/console-fetcher-interceptor-res-error-message": "^0.0.0", - "@alicloud/console-fetcher-interceptor-sls": "^0.0.0", - "@alicloud/fetcher": "^0.0.0", + "@alicloud/console-fetcher-interceptor-arms": "^0.0.1", + "@alicloud/console-fetcher-interceptor-fecs": "^0.0.1", + "@alicloud/console-fetcher-interceptor-req-security": "^0.0.1", + "@alicloud/console-fetcher-interceptor-res-biz": "^0.0.1", + "@alicloud/console-fetcher-interceptor-res-error-message": "^0.0.1", + "@alicloud/console-fetcher-interceptor-sls": "^0.0.1", + "@alicloud/fetcher": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-fetcher-interceptor-arms/package.json b/packages/console-fetcher-interceptor-arms/package.json index 21b9becb0..f1acf4bcd 100644 --- a/packages/console-fetcher-interceptor-arms/package.json +++ b/packages/console-fetcher-interceptor-arms/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-arms", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher ARMS 拦截", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.0", - "@alicloud/fetcher": "^0.0.0" + "@alicloud/console-base-common-typings": "^0.0.1", + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-fecs/package.json b/packages/console-fetcher-interceptor-fecs/package.json index e17668acd..f85ffa8b9 100644 --- a/packages/console-fetcher-interceptor-fecs/package.json +++ b/packages/console-fetcher-interceptor-fecs/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-fecs", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 请求 + 响应拦截 - FECS", "license": "MIT", "main": "build/cjs/index.js", @@ -24,11 +24,11 @@ "fecs" ], "devDependencies": { + "@alicloud/console-base-demo-helpers": "^0.0.1", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/console-base-demo-helpers": "^0.0.0", - "@alicloud/fetcher-demo-helpers": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,11 +37,11 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-env": "^0.0.0", - "@alicloud/cookie": "^0.0.0", - "@alicloud/console-one-config": "^0.0.0", - "@alicloud/fetcher": "^0.0.0", - "@alicloud/fetcher-fetch": "^0.0.0" + "@alicloud/console-base-conf-env": "^0.0.1", + "@alicloud/console-one-config": "^0.0.1", + "@alicloud/cookie": "^0.0.1", + "@alicloud/fetcher": "^0.0.1", + "@alicloud/fetcher-fetch": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-req-mock/package.json b/packages/console-fetcher-interceptor-req-mock/package.json index 0c420e042..ab9fa71c9 100644 --- a/packages/console-fetcher-interceptor-req-mock/package.json +++ b/packages/console-fetcher-interceptor-req-mock/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-mock", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 请求拦截 - mock 转接", "license": "MIT", "main": "build/cjs/index.js", @@ -27,8 +27,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -38,8 +38,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-env": "^0.0.0", - "@alicloud/fetcher": "^0.0.0" + "@alicloud/console-base-conf-env": "^0.0.1", + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-req-security/package.json b/packages/console-fetcher-interceptor-req-security/package.json index 6c1d43fd5..adf558c8b 100644 --- a/packages/console-fetcher-interceptor-req-security/package.json +++ b/packages/console-fetcher-interceptor-req-security/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-security", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 请求拦截 - 类 POST 请求添加安全参数", "license": "MIT", "main": "build/cjs/index.js", @@ -27,8 +27,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -38,7 +38,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher": "^0.0.0" + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-biz/package.json b/packages/console-fetcher-interceptor-res-biz/package.json index cee4449c4..8958bee1c 100644 --- a/packages/console-fetcher-interceptor-res-biz/package.json +++ b/packages/console-fetcher-interceptor-res-biz/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-biz", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 响应拦截 - 业务层错误", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,7 +37,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher": "^0.0.0" + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-error-message/package.json b/packages/console-fetcher-interceptor-res-error-message/package.json index 31deb1ec4..86d61f38d 100644 --- a/packages/console-fetcher-interceptor-res-error-message/package.json +++ b/packages/console-fetcher-interceptor-res-error-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-error-message", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 响应拦截 - 一般性错误 message 国际化", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,8 +37,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/fetcher": "^0.0.0" + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-risk/package.json b/packages/console-fetcher-interceptor-res-risk/package.json index 08b0b5cf3..b1151526d 100644 --- a/packages/console-fetcher-interceptor-res-risk/package.json +++ b/packages/console-fetcher-interceptor-res-risk/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-risk", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 响应拦截 - 风控处理", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -42,13 +42,13 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory": "^0.0.0", - "@alicloud/console-base-rc-button": "^0.0.0", - "@alicloud/console-base-rc-dialog": "^0.0.0", - "@alicloud/console-base-rc-flex": "^0.0.0", - "@alicloud/console-base-rc-input": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0", - "@alicloud/fetcher": "^0.0.0", + "@alicloud/console-base-intl-factory": "^0.0.1", + "@alicloud/console-base-rc-button": "^0.0.1", + "@alicloud/console-base-rc-dialog": "^0.0.1", + "@alicloud/console-base-rc-flex": "^0.0.1", + "@alicloud/console-base-rc-input": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1", + "@alicloud/fetcher": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-fetcher-interceptor-sls/package.json b/packages/console-fetcher-interceptor-sls/package.json index bdffb800e..9f253d14c 100755 --- a/packages/console-fetcher-interceptor-sls/package.json +++ b/packages/console-fetcher-interceptor-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "SLS logger interceptor for @alicloud/console-fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -25,8 +25,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -36,8 +36,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-logger-sls": "^0.0.0", - "@alicloud/fetcher": "^0.0.0" + "@alicloud/console-logger-sls": "^0.0.1", + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-proxy/package.json b/packages/console-fetcher-proxy/package.json index eafa33601..436b0beda 100644 --- a/packages/console-fetcher-proxy/package.json +++ b/packages/console-fetcher-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-proxy", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台 fetcher 代理", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,9 +35,9 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-global": "^0.0.0", - "@alicloud/console-base-messenger": "^0.0.0", - "@alicloud/console-fetcher": "^0.0.0" + "@alicloud/console-base-global": "^0.0.1", + "@alicloud/console-base-messenger": "^0.0.1", + "@alicloud/console-fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher/package.json b/packages/console-fetcher/package.json index 0f08e95e0..c4bda0077 100644 --- a/packages/console-fetcher/package.json +++ b/packages/console-fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台 fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -24,8 +24,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-basic": "^0.0.0", - "@alicloud/console-fetcher-interceptor-res-risk": "^0.0.0" + "@alicloud/console-fetcher-basic": "^0.0.1", + "@alicloud/console-fetcher-interceptor-res-risk": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-logger-sls/package.json b/packages/console-logger-sls/package.json index da500cc4d..36c08da0f 100755 --- a/packages/console-logger-sls/package.json +++ b/packages/console-logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-logger-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "SLS logger factory for console", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,10 +35,10 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-account": "^0.0.0", - "@alicloud/console-base-conf-env": "^0.0.0", - "@alicloud/console-base-conf-locale": "^0.0.0", - "@alicloud/logger-sls": "^0.0.0" + "@alicloud/console-base-conf-account": "^0.0.1", + "@alicloud/console-base-conf-env": "^0.0.1", + "@alicloud/console-base-conf-locale": "^0.0.1", + "@alicloud/logger-sls": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-one-conf/package.json b/packages/console-one-conf/package.json index d461cad47..540478f72 100755 --- a/packages/console-one-conf/package.json +++ b/packages/console-one-conf/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-conf", - "version": "0.0.0", + "version": "0.0.1", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", @@ -32,8 +32,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.0", - "@alicloud/viper-feature-gen": "^0.0.0" + "@alicloud/console-one-config": "^0.0.1", + "@alicloud/viper-feature-gen": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-one-config/package.json b/packages/console-one-config/package.json index 49de5200e..20b0cea27 100755 --- a/packages/console-one-config/package.json +++ b/packages/console-one-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-config", - "version": "0.0.0", + "version": "0.0.1", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/cookie/package.json b/packages/cookie/package.json index 15e9b8d57..f7d4c9b12 100755 --- a/packages/cookie/package.json +++ b/packages/cookie/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/cookie", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Cookie", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/copy-text/package.json b/packages/copy-text/package.json index afc37f858..1e0685c96 100755 --- a/packages/copy-text/package.json +++ b/packages/copy-text/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/copy-text", - "version": "0.0.0", + "version": "0.0.1", "description": "Copy Text", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/demo-rc-elements/package.json b/packages/demo-rc-elements/package.json index 41f9d9aab..25504f6b2 100644 --- a/packages/demo-rc-elements/package.json +++ b/packages/demo-rc-elements/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/demo-rc-elements", - "version": "0.0.2", + "version": "0.0.3", "description": "专用于 demo 的元素,为了好看和方便,切不可用于生产", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/dom-event-hijacker/package.json b/packages/dom-event-hijacker/package.json index 35f329aaf..8fac6a874 100644 --- a/packages/dom-event-hijacker/package.json +++ b/packages/dom-event-hijacker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/dom-event-hijacker", - "version": "0.0.0", + "version": "0.0.1", "description": "DOM 事件拦截,类似于 jQuery 的 delegate", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "jest": "^26.6.3", "react": "^16.14.0", diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 71d8acb1b..5e949c3cd 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/eslint-config", - "version": "0.0.1", + "version": "0.0.2", "description": "eslint config based on eslint-config-ali", "license": "MIT", "main": "index.js", diff --git a/packages/fetcher-demo-helpers/package.json b/packages/fetcher-demo-helpers/package.json index f8b267b02..e9269f77f 100644 --- a/packages/fetcher-demo-helpers/package.json +++ b/packages/fetcher-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-demo-helpers", - "version": "0.0.0", + "version": "0.0.1", "description": "fetcher 测试专用包,避免代码冗余", "license": "MIT", "main": "build/cjs/index.js", @@ -37,7 +37,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/demo-rc-elements": "^0.0.2" + "@alicloud/demo-rc-elements": "^0.0.3" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/fetcher-fetch/package.json b/packages/fetcher-fetch/package.json index f0fe26d47..4c24bf8a1 100644 --- a/packages/fetcher-fetch/package.json +++ b/packages/fetcher-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-fetch", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/fetcher 的底层 fetch 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/fetcher-jsonp/package.json b/packages/fetcher-jsonp/package.json index 594d7afc0..823d2309f 100644 --- a/packages/fetcher-jsonp/package.json +++ b/packages/fetcher-jsonp/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-jsonp", - "version": "0.0.0", + "version": "0.0.1", "description": "fetcher 的底层 jsonp 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/fetcher/package.json b/packages/fetcher/package.json index 495d07a8e..cc57abdf8 100644 --- a/packages/fetcher/package.json +++ b/packages/fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher", - "version": "0.0.0", + "version": "0.0.1", "description": "类似 axios,封装 fetch/jsonp,可以加拦截器", "license": "MIT", "main": "build/cjs/index.js", @@ -28,8 +28,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/qs": "^6.9.5", @@ -40,8 +40,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher-fetch": "^0.0.0", - "@alicloud/fetcher-jsonp": "^0.0.0", + "@alicloud/fetcher-fetch": "^0.0.1", + "@alicloud/fetcher-jsonp": "^0.0.1", "lodash": "^4.17.20", "qs": "^6.9.4" }, diff --git a/packages/logger-sls/package.json b/packages/logger-sls/package.json index 8c8b87ea3..600969d41 100755 --- a/packages/logger-sls/package.json +++ b/packages/logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/logger-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "SLS logger factory", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/qs": "^6.9.5", "@types/react": "^16.14.2", @@ -36,7 +36,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher-fetch": "^0.0.0", + "@alicloud/fetcher-fetch": "^0.0.1", "qs": "^6.9.4" }, "scripts": { diff --git a/packages/mixed-black-whitelist-checker/package.json b/packages/mixed-black-whitelist-checker/package.json index bd36a5c56..d1d55749d 100755 --- a/packages/mixed-black-whitelist-checker/package.json +++ b/packages/mixed-black-whitelist-checker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/mixed-black-whitelist-checker", - "version": "0.0.0", + "version": "0.0.1", "description": "混合黑白名单检查器", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/post-message/package.json b/packages/post-message/package.json index 324991c58..8ce07c7e7 100755 --- a/packages/post-message/package.json +++ b/packages/post-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/post-message", - "version": "0.0.0", + "version": "0.0.1", "description": "postMessage 封装,可以用成 Promise", "license": "MIT", "main": "build/cjs/index.js", @@ -27,7 +27,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", diff --git a/packages/react-hook-is-unmounted/package.json b/packages/react-hook-is-unmounted/package.json index 24aecd298..e8eb5de7f 100644 --- a/packages/react-hook-is-unmounted/package.json +++ b/packages/react-hook-is-unmounted/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/react-hook-is-unmounted", - "version": "0.0.0", + "version": "0.0.1", "description": "React Hook - 是否已被 unmount", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/storage-factory/package.json b/packages/storage-factory/package.json index d49160914..4cf94baf1 100755 --- a/packages/storage-factory/package.json +++ b/packages/storage-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/storage-factory", - "version": "0.0.0", + "version": "0.0.1", "description": "Storage factory - use storage with types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/stylelint-config/package.json b/packages/stylelint-config/package.json index 4d2589751..5fc8cd930 100644 --- a/packages/stylelint-config/package.json +++ b/packages/stylelint-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/stylelint-config", - "version": "0.0.1", + "version": "0.0.2", "description": "stylelint configuration", "license": "MIT", "main": "index.js", diff --git a/packages/viper-feature-gen/package.json b/packages/viper-feature-gen/package.json index b13dfaad7..81bce288c 100755 --- a/packages/viper-feature-gen/package.json +++ b/packages/viper-feature-gen/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/viper-feature-gen", - "version": "0.0.0", + "version": "0.0.1", "description": "阿里云控制台(接入 viper)功能开关检查(工厂方法)", "license": "MIT", "main": "build/cjs/index.js", @@ -34,7 +34,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/mixed-black-whitelist-checker": "^0.0.0", + "@alicloud/mixed-black-whitelist-checker": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { From d67df2f86f48b11870a873414685a99273d8d006 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 09:35:01 +0800 Subject: [PATCH 119/135] CHORE back version to puglish again --- packages/base64/package.json | 2 +- .../console-base-common-typings/package.json | 2 +- .../console-base-conf-account/package.json | 8 +++---- packages/console-base-conf-env/package.json | 8 +++---- .../console-base-conf-locale/package.json | 8 +++---- .../console-base-conf-product-id/package.json | 2 +- .../console-base-demo-helpers/package.json | 6 ++--- .../package.json | 10 ++++----- .../console-base-error-prompt/package.json | 12 +++++----- packages/console-base-global/package.json | 4 ++-- .../package.json | 6 ++--- .../console-base-intl-factory/package.json | 8 +++---- packages/console-base-log-sls/package.json | 8 +++---- packages/console-base-messenger/package.json | 6 ++--- .../console-base-rc-breadcrumb/package.json | 4 ++-- packages/console-base-rc-button/package.json | 6 ++--- packages/console-base-rc-dialog/package.json | 16 +++++++------- .../console-base-rc-dropdown/package.json | 6 ++--- packages/console-base-rc-flex/package.json | 2 +- packages/console-base-rc-icon/package.json | 6 ++--- packages/console-base-rc-input/package.json | 6 ++--- packages/console-base-rc-intl/package.json | 4 ++-- .../console-base-rc-key-value/package.json | 4 ++-- packages/console-base-rc-loading/package.json | 10 ++++----- packages/console-base-rc-marks/package.json | 2 +- .../console-base-rc-pagination/package.json | 10 ++++----- .../console-base-styled-mixin/package.json | 2 +- packages/console-fetcher-basic/package.json | 22 +++++++++---------- .../package.json | 8 +++---- .../package.json | 18 +++++++-------- .../package.json | 10 ++++----- .../package.json | 8 +++---- .../package.json | 8 +++---- .../package.json | 10 ++++----- .../package.json | 20 ++++++++--------- .../package.json | 10 ++++----- packages/console-fetcher-proxy/package.json | 10 ++++----- packages/console-fetcher/package.json | 10 ++++----- packages/console-logger-sls/package.json | 12 +++++----- packages/console-one-conf/package.json | 6 ++--- packages/console-one-config/package.json | 2 +- packages/cookie/package.json | 4 ++-- packages/copy-text/package.json | 4 ++-- packages/demo-rc-elements/package.json | 2 +- packages/dom-event-hijacker/package.json | 4 ++-- packages/fetcher-demo-helpers/package.json | 4 ++-- packages/fetcher-fetch/package.json | 4 ++-- packages/fetcher-jsonp/package.json | 4 ++-- packages/fetcher/package.json | 10 ++++----- packages/logger-sls/package.json | 6 ++--- .../package.json | 2 +- packages/post-message/package.json | 4 ++-- packages/react-hook-is-unmounted/package.json | 2 +- packages/storage-factory/package.json | 2 +- packages/viper-feature-gen/package.json | 4 ++-- 55 files changed, 189 insertions(+), 189 deletions(-) diff --git a/packages/base64/package.json b/packages/base64/package.json index 666179ed6..bbfbb5fc2 100755 --- a/packages/base64/package.json +++ b/packages/base64/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/base64", - "version": "0.0.1", + "version": "0.0.0", "description": "Base64", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-common-typings/package.json b/packages/console-base-common-typings/package.json index 7506d3f0c..f6cb03a90 100755 --- a/packages/console-base-common-typings/package.json +++ b/packages/console-base-common-typings/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-common-typings", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase common types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-account/package.json b/packages/console-base-conf-account/package.json index 6b5f24cb9..989b10bed 100755 --- a/packages/console-base-conf-account/package.json +++ b/packages/console-base-conf-account/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-account", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase CONF.ACCOUNT", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -34,8 +34,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.1", - "@alicloud/cookie": "^0.0.1" + "@alicloud/console-one-config": "^0.0.0", + "@alicloud/cookie": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-conf-env/package.json b/packages/console-base-conf-env/package.json index dc0ad214a..7d544104c 100755 --- a/packages/console-base-conf-env/package.json +++ b/packages/console-base-conf-env/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-env", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase CONF.ENV", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -34,8 +34,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.1", - "@alicloud/cookie": "^0.0.1" + "@alicloud/console-one-config": "^0.0.0", + "@alicloud/cookie": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-conf-locale/package.json b/packages/console-base-conf-locale/package.json index 6669f5de4..4b48b9576 100755 --- a/packages/console-base-conf-locale/package.json +++ b/packages/console-base-conf-locale/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-locale", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase CONF.LOCALE", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/cookie": "^0.0.1", - "@alicloud/fetcher-jsonp": "^0.0.1", + "@alicloud/cookie": "^0.0.0", + "@alicloud/fetcher-jsonp": "^0.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-conf-product-id/package.json b/packages/console-base-conf-product-id/package.json index eec4b4dfe..ce4927bcf 100755 --- a/packages/console-base-conf-product-id/package.json +++ b/packages/console-base-conf-product-id/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-product-id", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase CONF product id", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-demo-helpers/package.json b/packages/console-base-demo-helpers/package.json index 826d5f006..4e10d55b3 100644 --- a/packages/console-base-demo-helpers/package.json +++ b/packages/console-base-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-demo-helpers", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase demo 助手", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-messenger": "^0.0.1", - "@alicloud/demo-rc-elements": "^0.0.3" + "@alicloud/console-base-messenger": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-error-prompt-proxy/package.json b/packages/console-base-error-prompt-proxy/package.json index 0e9fd9e5e..b779a6cb6 100644 --- a/packages/console-base-error-prompt-proxy/package.json +++ b/packages/console-base-error-prompt-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt-proxy", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 错误弹窗器(集中代理)", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "@types/styled-components": "^5.1.4", @@ -40,9 +40,9 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-error-prompt": "^0.0.1", - "@alicloud/console-base-global": "^0.0.1", - "@alicloud/console-base-messenger": "^0.0.1" + "@alicloud/console-base-error-prompt": "^0.0.0", + "@alicloud/console-base-global": "^0.0.0", + "@alicloud/console-base-messenger": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-error-prompt/package.json b/packages/console-base-error-prompt/package.json index 76c9f7ba8..80348664d 100644 --- a/packages/console-base-error-prompt/package.json +++ b/packages/console-base-error-prompt/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 错误弹窗器", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/qs": "^6.9.5", @@ -42,10 +42,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/console-base-rc-button": "^0.0.1", - "@alicloud/console-base-rc-dialog": "^0.0.1", - "@alicloud/console-base-rc-pagination": "^0.0.1", + "@alicloud/console-base-intl-factory-basic": "^0.0.0", + "@alicloud/console-base-rc-button": "^0.0.0", + "@alicloud/console-base-rc-dialog": "^0.0.0", + "@alicloud/console-base-rc-pagination": "^0.0.0", "lodash": "^4.17.20", "qs": "^6.9.4" }, diff --git a/packages/console-base-global/package.json b/packages/console-base-global/package.json index 8575ed681..e69d717d3 100644 --- a/packages/console-base-global/package.json +++ b/packages/console-base-global/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-global", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 唯一官方指定全局变量... 的 API", "license": "MIT", "main": "build/cjs/index.js", @@ -32,7 +32,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-messenger": "^0.0.1" + "@alicloud/console-base-messenger": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-intl-factory-basic/package.json b/packages/console-base-intl-factory-basic/package.json index 80f7d666a..a65f95601 100755 --- a/packages/console-base-intl-factory-basic/package.json +++ b/packages/console-base-intl-factory-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory-basic", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase Intl Factory Basic, Pure Text, No JSX", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -36,7 +36,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-locale": "^0.0.1", + "@alicloud/console-base-conf-locale": "^0.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-intl-factory/package.json b/packages/console-base-intl-factory/package.json index 7f3b097fd..599bc1ab1 100755 --- a/packages/console-base-intl-factory/package.json +++ b/packages/console-base-intl-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase Intl Factory", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,8 +37,8 @@ "react": ">=16.8" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/console-base-rc-intl": "^0.0.1" + "@alicloud/console-base-intl-factory-basic": "^0.0.0", + "@alicloud/console-base-rc-intl": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-log-sls/package.json b/packages/console-base-log-sls/package.json index eedc7b434..5b5d8d6f9 100755 --- a/packages/console-base-log-sls/package.json +++ b/packages/console-base-log-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-log-sls", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase Log SLS", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-product-id": "^0.0.1", - "@alicloud/console-logger-sls": "^0.0.1" + "@alicloud/console-base-conf-product-id": "^0.0.0", + "@alicloud/console-logger-sls": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-messenger/package.json b/packages/console-base-messenger/package.json index ab5664ae4..34b7df066 100755 --- a/packages/console-base-messenger/package.json +++ b/packages/console-base-messenger/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-messenger", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 信使 - 与控制台应用之间的交互", "license": "MIT", "main": "build/cjs/index.js", @@ -32,8 +32,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.1", - "@alicloud/post-message": "^0.0.1" + "@alicloud/console-base-common-typings": "^0.0.0", + "@alicloud/post-message": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-breadcrumb/package.json b/packages/console-base-rc-breadcrumb/package.json index f774e694a..728a8e81b 100644 --- a/packages/console-base-rc-breadcrumb/package.json +++ b/packages/console-base-rc-breadcrumb/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-breadcrumb", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 面包屑", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-styled-mixin": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-button/package.json b/packages/console-base-rc-button/package.json index ad6765980..081bc4020 100644 --- a/packages/console-base-rc-button/package.json +++ b/packages/console-base-rc-button/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-button", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 按钮", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-rc-icon": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-rc-icon": "^0.0.0", + "@alicloud/console-base-styled-mixin": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-dialog/package.json b/packages/console-base-rc-dialog/package.json index 3f7ce3d68..8e73ad797 100644 --- a/packages/console-base-rc-dialog/package.json +++ b/packages/console-base-rc-dialog/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dialog", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - Dialog", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -45,12 +45,12 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/console-base-rc-button": "^0.0.1", - "@alicloud/console-base-rc-icon": "^0.0.1", - "@alicloud/console-base-rc-input": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1", - "@alicloud/react-hook-is-unmounted": "^0.0.1", + "@alicloud/console-base-intl-factory-basic": "^0.0.0", + "@alicloud/console-base-rc-button": "^0.0.0", + "@alicloud/console-base-rc-icon": "^0.0.0", + "@alicloud/console-base-rc-input": "^0.0.0", + "@alicloud/console-base-styled-mixin": "^0.0.0", + "@alicloud/react-hook-is-unmounted": "^0.0.0", "immutability-helper": "^3.1.1", "lodash": "^4.17.20" }, diff --git a/packages/console-base-rc-dropdown/package.json b/packages/console-base-rc-dropdown/package.json index 144b958c1..f28adc587 100644 --- a/packages/console-base-rc-dropdown/package.json +++ b/packages/console-base-rc-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dropdown", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 下拉", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -44,7 +44,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.0", "immutability-helper": "^3.1.1", "lodash": "^4.17.20" }, diff --git a/packages/console-base-rc-flex/package.json b/packages/console-base-rc-flex/package.json index b4bc8d728..907183001 100644 --- a/packages/console-base-rc-flex/package.json +++ b/packages/console-base-rc-flex/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-flex", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - Flex", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-icon/package.json b/packages/console-base-rc-icon/package.json index 0e87ba09a..1276e9883 100644 --- a/packages/console-base-rc-icon/package.json +++ b/packages/console-base-rc-icon/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-icon", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 图标", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "@types/styled-components": "^5.1.4", @@ -40,7 +40,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-styled-mixin": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-input/package.json b/packages/console-base-rc-input/package.json index e7f5bdc08..5fdd4f193 100644 --- a/packages/console-base-rc-input/package.json +++ b/packages/console-base-rc-input/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-input", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - Input", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-rc-icon": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-rc-icon": "^0.0.0", + "@alicloud/console-base-styled-mixin": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-intl/package.json b/packages/console-base-rc-intl/package.json index 918e7e77c..9a2388fb4 100644 --- a/packages/console-base-rc-intl/package.json +++ b/packages/console-base-rc-intl/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-intl", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 带样式的国际化文案展示", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-styled-mixin": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-key-value/package.json b/packages/console-base-rc-key-value/package.json index 935904d95..a1eadb4cf 100644 --- a/packages/console-base-rc-key-value/package.json +++ b/packages/console-base-rc-key-value/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-key-value", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - key-value 对的展示", "license": "MIT", "main": "build/cjs/index.js", @@ -40,7 +40,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index 8a2035c75..c40156a11 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-loading", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 加载中", "license": "MIT", "main": "build/cjs/index.js", @@ -40,10 +40,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.1", - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/console-base-rc-icon": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1", + "@alicloud/console-base-common-typings": "^0.0.0", + "@alicloud/console-base-intl-factory-basic": "^0.0.0", + "@alicloud/console-base-rc-icon": "^0.0.0", + "@alicloud/console-base-styled-mixin": "^0.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-rc-marks/package.json b/packages/console-base-rc-marks/package.json index 1f42d6fc8..6d85d6000 100644 --- a/packages/console-base-rc-marks/package.json +++ b/packages/console-base-rc-marks/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-marks", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - NEW、ALPHA、BETA 等小标签", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-pagination/package.json b/packages/console-base-rc-pagination/package.json index 19b11342f..1547be04a 100644 --- a/packages/console-base-rc-pagination/package.json +++ b/packages/console-base-rc-pagination/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-pagination", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 分页", "license": "MIT", "main": "build/cjs/index.js", @@ -39,10 +39,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/console-base-rc-button": "^0.0.1", - "@alicloud/console-base-rc-icon": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-intl-factory-basic": "^0.0.0", + "@alicloud/console-base-rc-button": "^0.0.0", + "@alicloud/console-base-rc-icon": "^0.0.0", + "@alicloud/console-base-styled-mixin": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-styled-mixin/package.json b/packages/console-base-styled-mixin/package.json index 79fd094c1..eea82c483 100644 --- a/packages/console-base-styled-mixin/package.json +++ b/packages/console-base-styled-mixin/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-styled-mixin", - "version": "0.0.1", + "version": "0.0.0", "description": "控制台专用的 styled mixin", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-basic/package.json b/packages/console-fetcher-basic/package.json index d9c9a530a..c57bacbfa 100644 --- a/packages/console-fetcher-basic/package.json +++ b/packages/console-fetcher-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-basic", - "version": "0.0.1", + "version": "0.0.0", "description": "控制台基础 Fetcher(无风控)", "license": "MIT", "main": "build/cjs/index.js", @@ -23,11 +23,11 @@ "basic" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^0.0.1", + "@alicloud/console-base-demo-helpers": "^0.0.0", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -37,13 +37,13 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-interceptor-arms": "^0.0.1", - "@alicloud/console-fetcher-interceptor-fecs": "^0.0.1", - "@alicloud/console-fetcher-interceptor-req-security": "^0.0.1", - "@alicloud/console-fetcher-interceptor-res-biz": "^0.0.1", - "@alicloud/console-fetcher-interceptor-res-error-message": "^0.0.1", - "@alicloud/console-fetcher-interceptor-sls": "^0.0.1", - "@alicloud/fetcher": "^0.0.1", + "@alicloud/console-fetcher-interceptor-arms": "^0.0.0", + "@alicloud/console-fetcher-interceptor-fecs": "^0.0.0", + "@alicloud/console-fetcher-interceptor-req-security": "^0.0.0", + "@alicloud/console-fetcher-interceptor-res-biz": "^0.0.0", + "@alicloud/console-fetcher-interceptor-res-error-message": "^0.0.0", + "@alicloud/console-fetcher-interceptor-sls": "^0.0.0", + "@alicloud/fetcher": "^0.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-fetcher-interceptor-arms/package.json b/packages/console-fetcher-interceptor-arms/package.json index f1acf4bcd..21b9becb0 100644 --- a/packages/console-fetcher-interceptor-arms/package.json +++ b/packages/console-fetcher-interceptor-arms/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-arms", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher ARMS 拦截", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.1", - "@alicloud/fetcher": "^0.0.1" + "@alicloud/console-base-common-typings": "^0.0.0", + "@alicloud/fetcher": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-fecs/package.json b/packages/console-fetcher-interceptor-fecs/package.json index f85ffa8b9..62e16212d 100644 --- a/packages/console-fetcher-interceptor-fecs/package.json +++ b/packages/console-fetcher-interceptor-fecs/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-fecs", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 请求 + 响应拦截 - FECS", "license": "MIT", "main": "build/cjs/index.js", @@ -24,11 +24,11 @@ "fecs" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^0.0.1", + "@alicloud/console-base-demo-helpers": "^0.0.0", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,11 +37,11 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-env": "^0.0.1", - "@alicloud/console-one-config": "^0.0.1", - "@alicloud/cookie": "^0.0.1", - "@alicloud/fetcher": "^0.0.1", - "@alicloud/fetcher-fetch": "^0.0.1" + "@alicloud/console-base-conf-env": "^0.0.0", + "@alicloud/console-one-config": "^0.0.0", + "@alicloud/cookie": "^0.0.0", + "@alicloud/fetcher": "^0.0.0", + "@alicloud/fetcher-fetch": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-req-mock/package.json b/packages/console-fetcher-interceptor-req-mock/package.json index ab9fa71c9..90070e194 100644 --- a/packages/console-fetcher-interceptor-req-mock/package.json +++ b/packages/console-fetcher-interceptor-req-mock/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-mock", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 请求拦截 - mock 转接", "license": "MIT", "main": "build/cjs/index.js", @@ -27,8 +27,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -38,8 +38,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-env": "^0.0.1", - "@alicloud/fetcher": "^0.0.1" + "@alicloud/console-base-conf-env": "^0.0.0", + "@alicloud/fetcher": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-req-security/package.json b/packages/console-fetcher-interceptor-req-security/package.json index adf558c8b..ded07e275 100644 --- a/packages/console-fetcher-interceptor-req-security/package.json +++ b/packages/console-fetcher-interceptor-req-security/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-security", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 请求拦截 - 类 POST 请求添加安全参数", "license": "MIT", "main": "build/cjs/index.js", @@ -27,8 +27,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -38,7 +38,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher": "^0.0.1" + "@alicloud/fetcher": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-biz/package.json b/packages/console-fetcher-interceptor-res-biz/package.json index 8958bee1c..31b6f5db3 100644 --- a/packages/console-fetcher-interceptor-res-biz/package.json +++ b/packages/console-fetcher-interceptor-res-biz/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-biz", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 响应拦截 - 业务层错误", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,7 +37,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher": "^0.0.1" + "@alicloud/fetcher": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-error-message/package.json b/packages/console-fetcher-interceptor-res-error-message/package.json index 86d61f38d..ad068b421 100644 --- a/packages/console-fetcher-interceptor-res-error-message/package.json +++ b/packages/console-fetcher-interceptor-res-error-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-error-message", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 响应拦截 - 一般性错误 message 国际化", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,8 +37,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/fetcher": "^0.0.1" + "@alicloud/console-base-intl-factory-basic": "^0.0.0", + "@alicloud/fetcher": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-risk/package.json b/packages/console-fetcher-interceptor-res-risk/package.json index b1151526d..a1645c93d 100644 --- a/packages/console-fetcher-interceptor-res-risk/package.json +++ b/packages/console-fetcher-interceptor-res-risk/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-risk", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 响应拦截 - 风控处理", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -42,13 +42,13 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory": "^0.0.1", - "@alicloud/console-base-rc-button": "^0.0.1", - "@alicloud/console-base-rc-dialog": "^0.0.1", - "@alicloud/console-base-rc-flex": "^0.0.1", - "@alicloud/console-base-rc-input": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1", - "@alicloud/fetcher": "^0.0.1", + "@alicloud/console-base-intl-factory": "^0.0.0", + "@alicloud/console-base-rc-button": "^0.0.0", + "@alicloud/console-base-rc-dialog": "^0.0.0", + "@alicloud/console-base-rc-flex": "^0.0.0", + "@alicloud/console-base-rc-input": "^0.0.0", + "@alicloud/console-base-styled-mixin": "^0.0.0", + "@alicloud/fetcher": "^0.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-fetcher-interceptor-sls/package.json b/packages/console-fetcher-interceptor-sls/package.json index 9f253d14c..4d3339da1 100755 --- a/packages/console-fetcher-interceptor-sls/package.json +++ b/packages/console-fetcher-interceptor-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-sls", - "version": "0.0.1", + "version": "0.0.0", "description": "SLS logger interceptor for @alicloud/console-fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -25,8 +25,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -36,8 +36,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-logger-sls": "^0.0.1", - "@alicloud/fetcher": "^0.0.1" + "@alicloud/console-logger-sls": "^0.0.0", + "@alicloud/fetcher": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-proxy/package.json b/packages/console-fetcher-proxy/package.json index 436b0beda..eafa33601 100644 --- a/packages/console-fetcher-proxy/package.json +++ b/packages/console-fetcher-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-proxy", - "version": "0.0.1", + "version": "0.0.0", "description": "控制台 fetcher 代理", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,9 +35,9 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-global": "^0.0.1", - "@alicloud/console-base-messenger": "^0.0.1", - "@alicloud/console-fetcher": "^0.0.1" + "@alicloud/console-base-global": "^0.0.0", + "@alicloud/console-base-messenger": "^0.0.0", + "@alicloud/console-fetcher": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher/package.json b/packages/console-fetcher/package.json index c4bda0077..c0a8949ed 100644 --- a/packages/console-fetcher/package.json +++ b/packages/console-fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher", - "version": "0.0.1", + "version": "0.0.0", "description": "控制台 fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -24,8 +24,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-basic": "^0.0.1", - "@alicloud/console-fetcher-interceptor-res-risk": "^0.0.1" + "@alicloud/console-fetcher-basic": "^0.0.0", + "@alicloud/console-fetcher-interceptor-res-risk": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-logger-sls/package.json b/packages/console-logger-sls/package.json index 36c08da0f..da500cc4d 100755 --- a/packages/console-logger-sls/package.json +++ b/packages/console-logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-logger-sls", - "version": "0.0.1", + "version": "0.0.0", "description": "SLS logger factory for console", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,10 +35,10 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-account": "^0.0.1", - "@alicloud/console-base-conf-env": "^0.0.1", - "@alicloud/console-base-conf-locale": "^0.0.1", - "@alicloud/logger-sls": "^0.0.1" + "@alicloud/console-base-conf-account": "^0.0.0", + "@alicloud/console-base-conf-env": "^0.0.0", + "@alicloud/console-base-conf-locale": "^0.0.0", + "@alicloud/logger-sls": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-one-conf/package.json b/packages/console-one-conf/package.json index 540478f72..d461cad47 100755 --- a/packages/console-one-conf/package.json +++ b/packages/console-one-conf/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-conf", - "version": "0.0.1", + "version": "0.0.0", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", @@ -32,8 +32,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.1", - "@alicloud/viper-feature-gen": "^0.0.1" + "@alicloud/console-one-config": "^0.0.0", + "@alicloud/viper-feature-gen": "^0.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-one-config/package.json b/packages/console-one-config/package.json index 20b0cea27..49de5200e 100755 --- a/packages/console-one-config/package.json +++ b/packages/console-one-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-config", - "version": "0.0.1", + "version": "0.0.0", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/cookie/package.json b/packages/cookie/package.json index f7d4c9b12..15e9b8d57 100755 --- a/packages/cookie/package.json +++ b/packages/cookie/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/cookie", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase Cookie", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/copy-text/package.json b/packages/copy-text/package.json index 1e0685c96..afc37f858 100755 --- a/packages/copy-text/package.json +++ b/packages/copy-text/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/copy-text", - "version": "0.0.1", + "version": "0.0.0", "description": "Copy Text", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/demo-rc-elements/package.json b/packages/demo-rc-elements/package.json index 25504f6b2..41f9d9aab 100644 --- a/packages/demo-rc-elements/package.json +++ b/packages/demo-rc-elements/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/demo-rc-elements", - "version": "0.0.3", + "version": "0.0.2", "description": "专用于 demo 的元素,为了好看和方便,切不可用于生产", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/dom-event-hijacker/package.json b/packages/dom-event-hijacker/package.json index 8fac6a874..35f329aaf 100644 --- a/packages/dom-event-hijacker/package.json +++ b/packages/dom-event-hijacker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/dom-event-hijacker", - "version": "0.0.1", + "version": "0.0.0", "description": "DOM 事件拦截,类似于 jQuery 的 delegate", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "jest": "^26.6.3", "react": "^16.14.0", diff --git a/packages/fetcher-demo-helpers/package.json b/packages/fetcher-demo-helpers/package.json index e9269f77f..f8b267b02 100644 --- a/packages/fetcher-demo-helpers/package.json +++ b/packages/fetcher-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-demo-helpers", - "version": "0.0.1", + "version": "0.0.0", "description": "fetcher 测试专用包,避免代码冗余", "license": "MIT", "main": "build/cjs/index.js", @@ -37,7 +37,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/demo-rc-elements": "^0.0.3" + "@alicloud/demo-rc-elements": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/fetcher-fetch/package.json b/packages/fetcher-fetch/package.json index 4c24bf8a1..f0fe26d47 100644 --- a/packages/fetcher-fetch/package.json +++ b/packages/fetcher-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-fetch", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/fetcher 的底层 fetch 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/fetcher-jsonp/package.json b/packages/fetcher-jsonp/package.json index 823d2309f..594d7afc0 100644 --- a/packages/fetcher-jsonp/package.json +++ b/packages/fetcher-jsonp/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-jsonp", - "version": "0.0.1", + "version": "0.0.0", "description": "fetcher 的底层 jsonp 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/fetcher/package.json b/packages/fetcher/package.json index cc57abdf8..df6537fc6 100644 --- a/packages/fetcher/package.json +++ b/packages/fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher", - "version": "0.0.1", + "version": "0.0.0", "description": "类似 axios,封装 fetch/jsonp,可以加拦截器", "license": "MIT", "main": "build/cjs/index.js", @@ -28,8 +28,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^0.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/qs": "^6.9.5", @@ -40,8 +40,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher-fetch": "^0.0.1", - "@alicloud/fetcher-jsonp": "^0.0.1", + "@alicloud/fetcher-fetch": "^0.0.0", + "@alicloud/fetcher-jsonp": "^0.0.0", "lodash": "^4.17.20", "qs": "^6.9.4" }, diff --git a/packages/logger-sls/package.json b/packages/logger-sls/package.json index 600969d41..8c8b87ea3 100755 --- a/packages/logger-sls/package.json +++ b/packages/logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/logger-sls", - "version": "0.0.1", + "version": "0.0.0", "description": "SLS logger factory", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/qs": "^6.9.5", "@types/react": "^16.14.2", @@ -36,7 +36,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher-fetch": "^0.0.1", + "@alicloud/fetcher-fetch": "^0.0.0", "qs": "^6.9.4" }, "scripts": { diff --git a/packages/mixed-black-whitelist-checker/package.json b/packages/mixed-black-whitelist-checker/package.json index d1d55749d..bd36a5c56 100755 --- a/packages/mixed-black-whitelist-checker/package.json +++ b/packages/mixed-black-whitelist-checker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/mixed-black-whitelist-checker", - "version": "0.0.1", + "version": "0.0.0", "description": "混合黑白名单检查器", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/post-message/package.json b/packages/post-message/package.json index 8ce07c7e7..324991c58 100755 --- a/packages/post-message/package.json +++ b/packages/post-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/post-message", - "version": "0.0.1", + "version": "0.0.0", "description": "postMessage 封装,可以用成 Promise", "license": "MIT", "main": "build/cjs/index.js", @@ -27,7 +27,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.2", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", diff --git a/packages/react-hook-is-unmounted/package.json b/packages/react-hook-is-unmounted/package.json index e8eb5de7f..24aecd298 100644 --- a/packages/react-hook-is-unmounted/package.json +++ b/packages/react-hook-is-unmounted/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/react-hook-is-unmounted", - "version": "0.0.1", + "version": "0.0.0", "description": "React Hook - 是否已被 unmount", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/storage-factory/package.json b/packages/storage-factory/package.json index 4cf94baf1..d49160914 100755 --- a/packages/storage-factory/package.json +++ b/packages/storage-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/storage-factory", - "version": "0.0.1", + "version": "0.0.0", "description": "Storage factory - use storage with types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/viper-feature-gen/package.json b/packages/viper-feature-gen/package.json index 81bce288c..b13dfaad7 100755 --- a/packages/viper-feature-gen/package.json +++ b/packages/viper-feature-gen/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/viper-feature-gen", - "version": "0.0.1", + "version": "0.0.0", "description": "阿里云控制台(接入 viper)功能开关检查(工厂方法)", "license": "MIT", "main": "build/cjs/index.js", @@ -34,7 +34,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/mixed-black-whitelist-checker": "^0.0.1", + "@alicloud/mixed-black-whitelist-checker": "^0.0.0", "lodash": "^4.17.20" }, "scripts": { From d91e6d5fcafeb66953d8db21055c8d5839796b70 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 09:35:31 +0800 Subject: [PATCH 120/135] Publish - @alicloud/base64@0.0.1 - @alicloud/console-base-common-typings@0.0.1 - @alicloud/console-base-conf-account@0.0.1 - @alicloud/console-base-conf-env@0.0.1 - @alicloud/console-base-conf-locale@0.0.1 - @alicloud/console-base-conf-product-id@0.0.1 - @alicloud/console-base-demo-helpers@0.0.1 - @alicloud/console-base-error-prompt-proxy@0.0.1 - @alicloud/console-base-error-prompt@0.0.1 - @alicloud/console-base-global@0.0.1 - @alicloud/console-base-intl-factory-basic@0.0.1 - @alicloud/console-base-intl-factory@0.0.1 - @alicloud/console-base-log-sls@0.0.1 - @alicloud/console-base-messenger@0.0.1 - @alicloud/console-base-rc-breadcrumb@0.0.1 - @alicloud/console-base-rc-button@0.0.1 - @alicloud/console-base-rc-dialog@0.0.1 - @alicloud/console-base-rc-dropdown@0.0.1 - @alicloud/console-base-rc-flex@0.0.1 - @alicloud/console-base-rc-icon@0.0.1 - @alicloud/console-base-rc-input@0.0.1 - @alicloud/console-base-rc-intl@0.0.1 - @alicloud/console-base-rc-key-value@0.0.1 - @alicloud/console-base-rc-loading@0.0.1 - @alicloud/console-base-rc-marks@0.0.1 - @alicloud/console-base-rc-pagination@0.0.1 - @alicloud/console-base-styled-mixin@0.0.1 - @alicloud/console-fetcher-basic@0.0.1 - @alicloud/console-fetcher-interceptor-arms@0.0.1 - @alicloud/console-fetcher-interceptor-fecs@0.0.1 - @alicloud/console-fetcher-interceptor-req-mock@0.0.1 - @alicloud/console-fetcher-interceptor-req-security@0.0.1 - @alicloud/console-fetcher-interceptor-res-biz@0.0.1 - @alicloud/console-fetcher-interceptor-res-error-message@0.0.1 - @alicloud/console-fetcher-interceptor-res-risk@0.0.1 - @alicloud/console-fetcher-interceptor-sls@0.0.1 - @alicloud/console-fetcher-proxy@0.0.1 - @alicloud/console-fetcher@0.0.1 - @alicloud/console-logger-sls@0.0.1 - @alicloud/console-one-conf@0.0.1 - @alicloud/console-one-config@0.0.1 - @alicloud/cookie@0.0.1 - @alicloud/copy-text@0.0.1 - @alicloud/demo-rc-elements@0.0.3 - @alicloud/dom-event-hijacker@0.0.1 - @alicloud/fetcher-demo-helpers@0.0.1 - @alicloud/fetcher-fetch@0.0.1 - @alicloud/fetcher-jsonp@0.0.1 - @alicloud/fetcher@0.0.1 - @alicloud/logger-sls@0.0.1 - @alicloud/mixed-black-whitelist-checker@0.0.1 - @alicloud/post-message@0.0.1 - @alicloud/react-hook-is-unmounted@0.0.1 - @alicloud/storage-factory@0.0.1 - @alicloud/viper-feature-gen@0.0.1 --- packages/base64/package.json | 2 +- .../console-base-common-typings/package.json | 2 +- .../console-base-conf-account/package.json | 8 +++---- packages/console-base-conf-env/package.json | 8 +++---- .../console-base-conf-locale/package.json | 8 +++---- .../console-base-conf-product-id/package.json | 2 +- .../console-base-demo-helpers/package.json | 6 ++--- .../package.json | 10 ++++----- .../console-base-error-prompt/package.json | 12 +++++----- packages/console-base-global/package.json | 4 ++-- .../package.json | 6 ++--- .../console-base-intl-factory/package.json | 8 +++---- packages/console-base-log-sls/package.json | 8 +++---- packages/console-base-messenger/package.json | 6 ++--- .../console-base-rc-breadcrumb/package.json | 4 ++-- packages/console-base-rc-button/package.json | 6 ++--- packages/console-base-rc-dialog/package.json | 16 +++++++------- .../console-base-rc-dropdown/package.json | 6 ++--- packages/console-base-rc-flex/package.json | 2 +- packages/console-base-rc-icon/package.json | 6 ++--- packages/console-base-rc-input/package.json | 6 ++--- packages/console-base-rc-intl/package.json | 4 ++-- .../console-base-rc-key-value/package.json | 4 ++-- packages/console-base-rc-loading/package.json | 10 ++++----- packages/console-base-rc-marks/package.json | 2 +- .../console-base-rc-pagination/package.json | 10 ++++----- .../console-base-styled-mixin/package.json | 2 +- packages/console-fetcher-basic/package.json | 22 +++++++++---------- .../package.json | 8 +++---- .../package.json | 18 +++++++-------- .../package.json | 10 ++++----- .../package.json | 8 +++---- .../package.json | 8 +++---- .../package.json | 10 ++++----- .../package.json | 20 ++++++++--------- .../package.json | 10 ++++----- packages/console-fetcher-proxy/package.json | 10 ++++----- packages/console-fetcher/package.json | 10 ++++----- packages/console-logger-sls/package.json | 12 +++++----- packages/console-one-conf/package.json | 6 ++--- packages/console-one-config/package.json | 2 +- packages/cookie/package.json | 4 ++-- packages/copy-text/package.json | 4 ++-- packages/demo-rc-elements/package.json | 2 +- packages/dom-event-hijacker/package.json | 4 ++-- packages/fetcher-demo-helpers/package.json | 4 ++-- packages/fetcher-fetch/package.json | 4 ++-- packages/fetcher-jsonp/package.json | 4 ++-- packages/fetcher/package.json | 10 ++++----- packages/logger-sls/package.json | 6 ++--- .../package.json | 2 +- packages/post-message/package.json | 4 ++-- packages/react-hook-is-unmounted/package.json | 2 +- packages/storage-factory/package.json | 2 +- packages/viper-feature-gen/package.json | 4 ++-- 55 files changed, 189 insertions(+), 189 deletions(-) diff --git a/packages/base64/package.json b/packages/base64/package.json index bbfbb5fc2..666179ed6 100755 --- a/packages/base64/package.json +++ b/packages/base64/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/base64", - "version": "0.0.0", + "version": "0.0.1", "description": "Base64", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-common-typings/package.json b/packages/console-base-common-typings/package.json index f6cb03a90..7506d3f0c 100755 --- a/packages/console-base-common-typings/package.json +++ b/packages/console-base-common-typings/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-common-typings", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase common types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-account/package.json b/packages/console-base-conf-account/package.json index 989b10bed..6b5f24cb9 100755 --- a/packages/console-base-conf-account/package.json +++ b/packages/console-base-conf-account/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-account", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF.ACCOUNT", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -34,8 +34,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.0", - "@alicloud/cookie": "^0.0.0" + "@alicloud/console-one-config": "^0.0.1", + "@alicloud/cookie": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-conf-env/package.json b/packages/console-base-conf-env/package.json index 7d544104c..dc0ad214a 100755 --- a/packages/console-base-conf-env/package.json +++ b/packages/console-base-conf-env/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-env", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF.ENV", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -34,8 +34,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.0", - "@alicloud/cookie": "^0.0.0" + "@alicloud/console-one-config": "^0.0.1", + "@alicloud/cookie": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-conf-locale/package.json b/packages/console-base-conf-locale/package.json index 4b48b9576..6669f5de4 100755 --- a/packages/console-base-conf-locale/package.json +++ b/packages/console-base-conf-locale/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-locale", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF.LOCALE", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/cookie": "^0.0.0", - "@alicloud/fetcher-jsonp": "^0.0.0", + "@alicloud/cookie": "^0.0.1", + "@alicloud/fetcher-jsonp": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-conf-product-id/package.json b/packages/console-base-conf-product-id/package.json index ce4927bcf..eec4b4dfe 100755 --- a/packages/console-base-conf-product-id/package.json +++ b/packages/console-base-conf-product-id/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-product-id", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF product id", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-demo-helpers/package.json b/packages/console-base-demo-helpers/package.json index 4e10d55b3..826d5f006 100644 --- a/packages/console-base-demo-helpers/package.json +++ b/packages/console-base-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-demo-helpers", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase demo 助手", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-messenger": "^0.0.0", - "@alicloud/demo-rc-elements": "^0.0.2" + "@alicloud/console-base-messenger": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.3" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-error-prompt-proxy/package.json b/packages/console-base-error-prompt-proxy/package.json index b779a6cb6..0e9fd9e5e 100644 --- a/packages/console-base-error-prompt-proxy/package.json +++ b/packages/console-base-error-prompt-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt-proxy", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 错误弹窗器(集中代理)", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "@types/styled-components": "^5.1.4", @@ -40,9 +40,9 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-error-prompt": "^0.0.0", - "@alicloud/console-base-global": "^0.0.0", - "@alicloud/console-base-messenger": "^0.0.0" + "@alicloud/console-base-error-prompt": "^0.0.1", + "@alicloud/console-base-global": "^0.0.1", + "@alicloud/console-base-messenger": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-error-prompt/package.json b/packages/console-base-error-prompt/package.json index 80348664d..76c9f7ba8 100644 --- a/packages/console-base-error-prompt/package.json +++ b/packages/console-base-error-prompt/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 错误弹窗器", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/qs": "^6.9.5", @@ -42,10 +42,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/console-base-rc-button": "^0.0.0", - "@alicloud/console-base-rc-dialog": "^0.0.0", - "@alicloud/console-base-rc-pagination": "^0.0.0", + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/console-base-rc-button": "^0.0.1", + "@alicloud/console-base-rc-dialog": "^0.0.1", + "@alicloud/console-base-rc-pagination": "^0.0.1", "lodash": "^4.17.20", "qs": "^6.9.4" }, diff --git a/packages/console-base-global/package.json b/packages/console-base-global/package.json index e69d717d3..8575ed681 100644 --- a/packages/console-base-global/package.json +++ b/packages/console-base-global/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-global", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 唯一官方指定全局变量... 的 API", "license": "MIT", "main": "build/cjs/index.js", @@ -32,7 +32,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-messenger": "^0.0.0" + "@alicloud/console-base-messenger": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-intl-factory-basic/package.json b/packages/console-base-intl-factory-basic/package.json index a65f95601..80f7d666a 100755 --- a/packages/console-base-intl-factory-basic/package.json +++ b/packages/console-base-intl-factory-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory-basic", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Intl Factory Basic, Pure Text, No JSX", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -36,7 +36,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-locale": "^0.0.0", + "@alicloud/console-base-conf-locale": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-intl-factory/package.json b/packages/console-base-intl-factory/package.json index 599bc1ab1..7f3b097fd 100755 --- a/packages/console-base-intl-factory/package.json +++ b/packages/console-base-intl-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Intl Factory", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,8 +37,8 @@ "react": ">=16.8" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/console-base-rc-intl": "^0.0.0" + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/console-base-rc-intl": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-log-sls/package.json b/packages/console-base-log-sls/package.json index 5b5d8d6f9..eedc7b434 100755 --- a/packages/console-base-log-sls/package.json +++ b/packages/console-base-log-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-log-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Log SLS", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-product-id": "^0.0.0", - "@alicloud/console-logger-sls": "^0.0.0" + "@alicloud/console-base-conf-product-id": "^0.0.1", + "@alicloud/console-logger-sls": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-messenger/package.json b/packages/console-base-messenger/package.json index 34b7df066..ab5664ae4 100755 --- a/packages/console-base-messenger/package.json +++ b/packages/console-base-messenger/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-messenger", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 信使 - 与控制台应用之间的交互", "license": "MIT", "main": "build/cjs/index.js", @@ -32,8 +32,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.0", - "@alicloud/post-message": "^0.0.0" + "@alicloud/console-base-common-typings": "^0.0.1", + "@alicloud/post-message": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-breadcrumb/package.json b/packages/console-base-rc-breadcrumb/package.json index 728a8e81b..f774e694a 100644 --- a/packages/console-base-rc-breadcrumb/package.json +++ b/packages/console-base-rc-breadcrumb/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-breadcrumb", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 面包屑", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-button/package.json b/packages/console-base-rc-button/package.json index 081bc4020..ad6765980 100644 --- a/packages/console-base-rc-button/package.json +++ b/packages/console-base-rc-button/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-button", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 按钮", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-rc-icon": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-rc-icon": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-dialog/package.json b/packages/console-base-rc-dialog/package.json index 8e73ad797..3f7ce3d68 100644 --- a/packages/console-base-rc-dialog/package.json +++ b/packages/console-base-rc-dialog/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dialog", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - Dialog", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -45,12 +45,12 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/console-base-rc-button": "^0.0.0", - "@alicloud/console-base-rc-icon": "^0.0.0", - "@alicloud/console-base-rc-input": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0", - "@alicloud/react-hook-is-unmounted": "^0.0.0", + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/console-base-rc-button": "^0.0.1", + "@alicloud/console-base-rc-icon": "^0.0.1", + "@alicloud/console-base-rc-input": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1", + "@alicloud/react-hook-is-unmounted": "^0.0.1", "immutability-helper": "^3.1.1", "lodash": "^4.17.20" }, diff --git a/packages/console-base-rc-dropdown/package.json b/packages/console-base-rc-dropdown/package.json index f28adc587..144b958c1 100644 --- a/packages/console-base-rc-dropdown/package.json +++ b/packages/console-base-rc-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dropdown", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 下拉", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -44,7 +44,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.0", + "@alicloud/console-base-styled-mixin": "^0.0.1", "immutability-helper": "^3.1.1", "lodash": "^4.17.20" }, diff --git a/packages/console-base-rc-flex/package.json b/packages/console-base-rc-flex/package.json index 907183001..b4bc8d728 100644 --- a/packages/console-base-rc-flex/package.json +++ b/packages/console-base-rc-flex/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-flex", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - Flex", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-icon/package.json b/packages/console-base-rc-icon/package.json index 1276e9883..0e87ba09a 100644 --- a/packages/console-base-rc-icon/package.json +++ b/packages/console-base-rc-icon/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-icon", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 图标", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "@types/styled-components": "^5.1.4", @@ -40,7 +40,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-input/package.json b/packages/console-base-rc-input/package.json index 5fdd4f193..e7f5bdc08 100644 --- a/packages/console-base-rc-input/package.json +++ b/packages/console-base-rc-input/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-input", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - Input", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-rc-icon": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-rc-icon": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-intl/package.json b/packages/console-base-rc-intl/package.json index 9a2388fb4..918e7e77c 100644 --- a/packages/console-base-rc-intl/package.json +++ b/packages/console-base-rc-intl/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-intl", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 带样式的国际化文案展示", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-key-value/package.json b/packages/console-base-rc-key-value/package.json index a1eadb4cf..935904d95 100644 --- a/packages/console-base-rc-key-value/package.json +++ b/packages/console-base-rc-key-value/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-key-value", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - key-value 对的展示", "license": "MIT", "main": "build/cjs/index.js", @@ -40,7 +40,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.0", + "@alicloud/console-base-styled-mixin": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index c40156a11..8a2035c75 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-loading", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 加载中", "license": "MIT", "main": "build/cjs/index.js", @@ -40,10 +40,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.0", - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/console-base-rc-icon": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0", + "@alicloud/console-base-common-typings": "^0.0.1", + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/console-base-rc-icon": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-rc-marks/package.json b/packages/console-base-rc-marks/package.json index 6d85d6000..1f42d6fc8 100644 --- a/packages/console-base-rc-marks/package.json +++ b/packages/console-base-rc-marks/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-marks", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - NEW、ALPHA、BETA 等小标签", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-pagination/package.json b/packages/console-base-rc-pagination/package.json index 1547be04a..19b11342f 100644 --- a/packages/console-base-rc-pagination/package.json +++ b/packages/console-base-rc-pagination/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-pagination", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 分页", "license": "MIT", "main": "build/cjs/index.js", @@ -39,10 +39,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/console-base-rc-button": "^0.0.0", - "@alicloud/console-base-rc-icon": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0" + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/console-base-rc-button": "^0.0.1", + "@alicloud/console-base-rc-icon": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-styled-mixin/package.json b/packages/console-base-styled-mixin/package.json index eea82c483..79fd094c1 100644 --- a/packages/console-base-styled-mixin/package.json +++ b/packages/console-base-styled-mixin/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-styled-mixin", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台专用的 styled mixin", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-basic/package.json b/packages/console-fetcher-basic/package.json index c57bacbfa..d9c9a530a 100644 --- a/packages/console-fetcher-basic/package.json +++ b/packages/console-fetcher-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-basic", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台基础 Fetcher(无风控)", "license": "MIT", "main": "build/cjs/index.js", @@ -23,11 +23,11 @@ "basic" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^0.0.0", + "@alicloud/console-base-demo-helpers": "^0.0.1", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -37,13 +37,13 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-interceptor-arms": "^0.0.0", - "@alicloud/console-fetcher-interceptor-fecs": "^0.0.0", - "@alicloud/console-fetcher-interceptor-req-security": "^0.0.0", - "@alicloud/console-fetcher-interceptor-res-biz": "^0.0.0", - "@alicloud/console-fetcher-interceptor-res-error-message": "^0.0.0", - "@alicloud/console-fetcher-interceptor-sls": "^0.0.0", - "@alicloud/fetcher": "^0.0.0", + "@alicloud/console-fetcher-interceptor-arms": "^0.0.1", + "@alicloud/console-fetcher-interceptor-fecs": "^0.0.1", + "@alicloud/console-fetcher-interceptor-req-security": "^0.0.1", + "@alicloud/console-fetcher-interceptor-res-biz": "^0.0.1", + "@alicloud/console-fetcher-interceptor-res-error-message": "^0.0.1", + "@alicloud/console-fetcher-interceptor-sls": "^0.0.1", + "@alicloud/fetcher": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-fetcher-interceptor-arms/package.json b/packages/console-fetcher-interceptor-arms/package.json index 21b9becb0..f1acf4bcd 100644 --- a/packages/console-fetcher-interceptor-arms/package.json +++ b/packages/console-fetcher-interceptor-arms/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-arms", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher ARMS 拦截", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.0", - "@alicloud/fetcher": "^0.0.0" + "@alicloud/console-base-common-typings": "^0.0.1", + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-fecs/package.json b/packages/console-fetcher-interceptor-fecs/package.json index 62e16212d..f85ffa8b9 100644 --- a/packages/console-fetcher-interceptor-fecs/package.json +++ b/packages/console-fetcher-interceptor-fecs/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-fecs", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 请求 + 响应拦截 - FECS", "license": "MIT", "main": "build/cjs/index.js", @@ -24,11 +24,11 @@ "fecs" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^0.0.0", + "@alicloud/console-base-demo-helpers": "^0.0.1", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,11 +37,11 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-env": "^0.0.0", - "@alicloud/console-one-config": "^0.0.0", - "@alicloud/cookie": "^0.0.0", - "@alicloud/fetcher": "^0.0.0", - "@alicloud/fetcher-fetch": "^0.0.0" + "@alicloud/console-base-conf-env": "^0.0.1", + "@alicloud/console-one-config": "^0.0.1", + "@alicloud/cookie": "^0.0.1", + "@alicloud/fetcher": "^0.0.1", + "@alicloud/fetcher-fetch": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-req-mock/package.json b/packages/console-fetcher-interceptor-req-mock/package.json index 90070e194..ab9fa71c9 100644 --- a/packages/console-fetcher-interceptor-req-mock/package.json +++ b/packages/console-fetcher-interceptor-req-mock/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-mock", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 请求拦截 - mock 转接", "license": "MIT", "main": "build/cjs/index.js", @@ -27,8 +27,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -38,8 +38,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-env": "^0.0.0", - "@alicloud/fetcher": "^0.0.0" + "@alicloud/console-base-conf-env": "^0.0.1", + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-req-security/package.json b/packages/console-fetcher-interceptor-req-security/package.json index ded07e275..adf558c8b 100644 --- a/packages/console-fetcher-interceptor-req-security/package.json +++ b/packages/console-fetcher-interceptor-req-security/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-security", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 请求拦截 - 类 POST 请求添加安全参数", "license": "MIT", "main": "build/cjs/index.js", @@ -27,8 +27,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -38,7 +38,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher": "^0.0.0" + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-biz/package.json b/packages/console-fetcher-interceptor-res-biz/package.json index 31b6f5db3..8958bee1c 100644 --- a/packages/console-fetcher-interceptor-res-biz/package.json +++ b/packages/console-fetcher-interceptor-res-biz/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-biz", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 响应拦截 - 业务层错误", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,7 +37,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher": "^0.0.0" + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-error-message/package.json b/packages/console-fetcher-interceptor-res-error-message/package.json index ad068b421..86d61f38d 100644 --- a/packages/console-fetcher-interceptor-res-error-message/package.json +++ b/packages/console-fetcher-interceptor-res-error-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-error-message", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 响应拦截 - 一般性错误 message 国际化", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,8 +37,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.0", - "@alicloud/fetcher": "^0.0.0" + "@alicloud/console-base-intl-factory-basic": "^0.0.1", + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-risk/package.json b/packages/console-fetcher-interceptor-res-risk/package.json index a1645c93d..b1151526d 100644 --- a/packages/console-fetcher-interceptor-res-risk/package.json +++ b/packages/console-fetcher-interceptor-res-risk/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-risk", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 响应拦截 - 风控处理", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -42,13 +42,13 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory": "^0.0.0", - "@alicloud/console-base-rc-button": "^0.0.0", - "@alicloud/console-base-rc-dialog": "^0.0.0", - "@alicloud/console-base-rc-flex": "^0.0.0", - "@alicloud/console-base-rc-input": "^0.0.0", - "@alicloud/console-base-styled-mixin": "^0.0.0", - "@alicloud/fetcher": "^0.0.0", + "@alicloud/console-base-intl-factory": "^0.0.1", + "@alicloud/console-base-rc-button": "^0.0.1", + "@alicloud/console-base-rc-dialog": "^0.0.1", + "@alicloud/console-base-rc-flex": "^0.0.1", + "@alicloud/console-base-rc-input": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.1", + "@alicloud/fetcher": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-fetcher-interceptor-sls/package.json b/packages/console-fetcher-interceptor-sls/package.json index 4d3339da1..9f253d14c 100755 --- a/packages/console-fetcher-interceptor-sls/package.json +++ b/packages/console-fetcher-interceptor-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "SLS logger interceptor for @alicloud/console-fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -25,8 +25,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -36,8 +36,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-logger-sls": "^0.0.0", - "@alicloud/fetcher": "^0.0.0" + "@alicloud/console-logger-sls": "^0.0.1", + "@alicloud/fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-proxy/package.json b/packages/console-fetcher-proxy/package.json index eafa33601..436b0beda 100644 --- a/packages/console-fetcher-proxy/package.json +++ b/packages/console-fetcher-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-proxy", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台 fetcher 代理", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,9 +35,9 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-global": "^0.0.0", - "@alicloud/console-base-messenger": "^0.0.0", - "@alicloud/console-fetcher": "^0.0.0" + "@alicloud/console-base-global": "^0.0.1", + "@alicloud/console-base-messenger": "^0.0.1", + "@alicloud/console-fetcher": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher/package.json b/packages/console-fetcher/package.json index c0a8949ed..c4bda0077 100644 --- a/packages/console-fetcher/package.json +++ b/packages/console-fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台 fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -24,8 +24,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-basic": "^0.0.0", - "@alicloud/console-fetcher-interceptor-res-risk": "^0.0.0" + "@alicloud/console-fetcher-basic": "^0.0.1", + "@alicloud/console-fetcher-interceptor-res-risk": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-logger-sls/package.json b/packages/console-logger-sls/package.json index da500cc4d..36c08da0f 100755 --- a/packages/console-logger-sls/package.json +++ b/packages/console-logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-logger-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "SLS logger factory for console", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,10 +35,10 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-account": "^0.0.0", - "@alicloud/console-base-conf-env": "^0.0.0", - "@alicloud/console-base-conf-locale": "^0.0.0", - "@alicloud/logger-sls": "^0.0.0" + "@alicloud/console-base-conf-account": "^0.0.1", + "@alicloud/console-base-conf-env": "^0.0.1", + "@alicloud/console-base-conf-locale": "^0.0.1", + "@alicloud/logger-sls": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-one-conf/package.json b/packages/console-one-conf/package.json index d461cad47..540478f72 100755 --- a/packages/console-one-conf/package.json +++ b/packages/console-one-conf/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-conf", - "version": "0.0.0", + "version": "0.0.1", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", @@ -32,8 +32,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.0", - "@alicloud/viper-feature-gen": "^0.0.0" + "@alicloud/console-one-config": "^0.0.1", + "@alicloud/viper-feature-gen": "^0.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-one-config/package.json b/packages/console-one-config/package.json index 49de5200e..20b0cea27 100755 --- a/packages/console-one-config/package.json +++ b/packages/console-one-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-config", - "version": "0.0.0", + "version": "0.0.1", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/cookie/package.json b/packages/cookie/package.json index 15e9b8d57..f7d4c9b12 100755 --- a/packages/cookie/package.json +++ b/packages/cookie/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/cookie", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Cookie", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/copy-text/package.json b/packages/copy-text/package.json index afc37f858..1e0685c96 100755 --- a/packages/copy-text/package.json +++ b/packages/copy-text/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/copy-text", - "version": "0.0.0", + "version": "0.0.1", "description": "Copy Text", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/demo-rc-elements/package.json b/packages/demo-rc-elements/package.json index 41f9d9aab..25504f6b2 100644 --- a/packages/demo-rc-elements/package.json +++ b/packages/demo-rc-elements/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/demo-rc-elements", - "version": "0.0.2", + "version": "0.0.3", "description": "专用于 demo 的元素,为了好看和方便,切不可用于生产", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/dom-event-hijacker/package.json b/packages/dom-event-hijacker/package.json index 35f329aaf..8fac6a874 100644 --- a/packages/dom-event-hijacker/package.json +++ b/packages/dom-event-hijacker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/dom-event-hijacker", - "version": "0.0.0", + "version": "0.0.1", "description": "DOM 事件拦截,类似于 jQuery 的 delegate", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "jest": "^26.6.3", "react": "^16.14.0", diff --git a/packages/fetcher-demo-helpers/package.json b/packages/fetcher-demo-helpers/package.json index f8b267b02..e9269f77f 100644 --- a/packages/fetcher-demo-helpers/package.json +++ b/packages/fetcher-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-demo-helpers", - "version": "0.0.0", + "version": "0.0.1", "description": "fetcher 测试专用包,避免代码冗余", "license": "MIT", "main": "build/cjs/index.js", @@ -37,7 +37,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/demo-rc-elements": "^0.0.2" + "@alicloud/demo-rc-elements": "^0.0.3" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/fetcher-fetch/package.json b/packages/fetcher-fetch/package.json index f0fe26d47..4c24bf8a1 100644 --- a/packages/fetcher-fetch/package.json +++ b/packages/fetcher-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-fetch", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/fetcher 的底层 fetch 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/fetcher-jsonp/package.json b/packages/fetcher-jsonp/package.json index 594d7afc0..823d2309f 100644 --- a/packages/fetcher-jsonp/package.json +++ b/packages/fetcher-jsonp/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-jsonp", - "version": "0.0.0", + "version": "0.0.1", "description": "fetcher 的底层 jsonp 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/fetcher/package.json b/packages/fetcher/package.json index df6537fc6..cc57abdf8 100644 --- a/packages/fetcher/package.json +++ b/packages/fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher", - "version": "0.0.0", + "version": "0.0.1", "description": "类似 axios,封装 fetch/jsonp,可以加拦截器", "license": "MIT", "main": "build/cjs/index.js", @@ -28,8 +28,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", - "@alicloud/fetcher-demo-helpers": "^0.0.0", + "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/fetcher-demo-helpers": "^0.0.1", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/qs": "^6.9.5", @@ -40,8 +40,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher-fetch": "^0.0.0", - "@alicloud/fetcher-jsonp": "^0.0.0", + "@alicloud/fetcher-fetch": "^0.0.1", + "@alicloud/fetcher-jsonp": "^0.0.1", "lodash": "^4.17.20", "qs": "^6.9.4" }, diff --git a/packages/logger-sls/package.json b/packages/logger-sls/package.json index 8c8b87ea3..600969d41 100755 --- a/packages/logger-sls/package.json +++ b/packages/logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/logger-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "SLS logger factory", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/qs": "^6.9.5", "@types/react": "^16.14.2", @@ -36,7 +36,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher-fetch": "^0.0.0", + "@alicloud/fetcher-fetch": "^0.0.1", "qs": "^6.9.4" }, "scripts": { diff --git a/packages/mixed-black-whitelist-checker/package.json b/packages/mixed-black-whitelist-checker/package.json index bd36a5c56..d1d55749d 100755 --- a/packages/mixed-black-whitelist-checker/package.json +++ b/packages/mixed-black-whitelist-checker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/mixed-black-whitelist-checker", - "version": "0.0.0", + "version": "0.0.1", "description": "混合黑白名单检查器", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/post-message/package.json b/packages/post-message/package.json index 324991c58..8ce07c7e7 100755 --- a/packages/post-message/package.json +++ b/packages/post-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/post-message", - "version": "0.0.0", + "version": "0.0.1", "description": "postMessage 封装,可以用成 Promise", "license": "MIT", "main": "build/cjs/index.js", @@ -27,7 +27,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", diff --git a/packages/react-hook-is-unmounted/package.json b/packages/react-hook-is-unmounted/package.json index 24aecd298..e8eb5de7f 100644 --- a/packages/react-hook-is-unmounted/package.json +++ b/packages/react-hook-is-unmounted/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/react-hook-is-unmounted", - "version": "0.0.0", + "version": "0.0.1", "description": "React Hook - 是否已被 unmount", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/storage-factory/package.json b/packages/storage-factory/package.json index d49160914..4cf94baf1 100755 --- a/packages/storage-factory/package.json +++ b/packages/storage-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/storage-factory", - "version": "0.0.0", + "version": "0.0.1", "description": "Storage factory - use storage with types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/viper-feature-gen/package.json b/packages/viper-feature-gen/package.json index b13dfaad7..81bce288c 100755 --- a/packages/viper-feature-gen/package.json +++ b/packages/viper-feature-gen/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/viper-feature-gen", - "version": "0.0.0", + "version": "0.0.1", "description": "阿里云控制台(接入 viper)功能开关检查(工厂方法)", "license": "MIT", "main": "build/cjs/index.js", @@ -34,7 +34,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/mixed-black-whitelist-checker": "^0.0.0", + "@alicloud/mixed-black-whitelist-checker": "^0.0.1", "lodash": "^4.17.20" }, "scripts": { From 3f75c0131f80266ce0fe45cdce7ef5008f6d3559 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 09:43:57 +0800 Subject: [PATCH 121/135] CHORE version back for publish --- packages/base64/package.json | 2 +- packages/console-base-common-typings/package.json | 2 +- packages/console-base-conf-account/package.json | 2 +- packages/console-base-conf-env/package.json | 2 +- packages/console-base-conf-locale/package.json | 2 +- packages/console-base-conf-product-id/package.json | 2 +- packages/console-base-demo-helpers/package.json | 2 +- packages/console-base-error-prompt-proxy/package.json | 2 +- packages/console-base-error-prompt/package.json | 2 +- packages/console-base-global/package.json | 2 +- packages/console-base-intl-factory-basic/package.json | 2 +- packages/console-base-intl-factory/package.json | 2 +- packages/console-base-log-sls/package.json | 2 +- packages/console-base-messenger/package.json | 2 +- packages/console-base-rc-breadcrumb/package.json | 2 +- packages/console-base-rc-button/package.json | 2 +- packages/console-base-rc-dialog/package.json | 2 +- packages/console-base-rc-dropdown/package.json | 2 +- packages/console-base-rc-flex/package.json | 2 +- packages/console-base-rc-icon/package.json | 2 +- packages/console-base-rc-input/package.json | 2 +- packages/console-base-rc-intl/package.json | 2 +- packages/console-base-rc-key-value/package.json | 2 +- packages/console-base-rc-loading/package.json | 2 +- packages/console-base-rc-marks/package.json | 2 +- packages/console-base-rc-pagination/package.json | 2 +- packages/console-base-styled-mixin/package.json | 2 +- packages/console-fetcher-basic/package.json | 2 +- packages/console-fetcher-interceptor-arms/package.json | 2 +- packages/console-fetcher-interceptor-fecs/package.json | 2 +- packages/console-fetcher-interceptor-req-mock/package.json | 2 +- packages/console-fetcher-interceptor-req-security/package.json | 2 +- packages/console-fetcher-interceptor-res-biz/package.json | 2 +- .../console-fetcher-interceptor-res-error-message/package.json | 2 +- packages/console-fetcher-interceptor-res-risk/package.json | 2 +- packages/console-fetcher-interceptor-sls/package.json | 2 +- packages/console-fetcher-proxy/package.json | 2 +- packages/console-fetcher/package.json | 2 +- packages/console-logger-sls/package.json | 2 +- packages/console-one-conf/package.json | 2 +- packages/console-one-config/package.json | 2 +- packages/cookie/package.json | 2 +- packages/copy-text/package.json | 2 +- packages/demo-rc-elements/package.json | 2 +- packages/dom-event-hijacker/package.json | 2 +- packages/eslint-config/package.json | 2 +- packages/fetcher-demo-helpers/package.json | 2 +- packages/fetcher-fetch/package.json | 2 +- packages/fetcher-jsonp/package.json | 2 +- packages/fetcher/package.json | 2 +- packages/logger-sls/package.json | 2 +- packages/mixed-black-whitelist-checker/package.json | 2 +- packages/post-message/package.json | 2 +- packages/react-hook-is-unmounted/package.json | 2 +- packages/storage-factory/package.json | 2 +- packages/stylelint-config/package.json | 2 +- packages/viper-feature-gen/package.json | 2 +- 57 files changed, 57 insertions(+), 57 deletions(-) diff --git a/packages/base64/package.json b/packages/base64/package.json index 666179ed6..bbfbb5fc2 100755 --- a/packages/base64/package.json +++ b/packages/base64/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/base64", - "version": "0.0.1", + "version": "0.0.0", "description": "Base64", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-common-typings/package.json b/packages/console-base-common-typings/package.json index 7506d3f0c..f6cb03a90 100755 --- a/packages/console-base-common-typings/package.json +++ b/packages/console-base-common-typings/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-common-typings", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase common types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-account/package.json b/packages/console-base-conf-account/package.json index 6b5f24cb9..fc5a4afe2 100755 --- a/packages/console-base-conf-account/package.json +++ b/packages/console-base-conf-account/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-account", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase CONF.ACCOUNT", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-env/package.json b/packages/console-base-conf-env/package.json index dc0ad214a..75ab22913 100755 --- a/packages/console-base-conf-env/package.json +++ b/packages/console-base-conf-env/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-env", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase CONF.ENV", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-locale/package.json b/packages/console-base-conf-locale/package.json index 6669f5de4..7cd8409ec 100755 --- a/packages/console-base-conf-locale/package.json +++ b/packages/console-base-conf-locale/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-locale", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase CONF.LOCALE", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-product-id/package.json b/packages/console-base-conf-product-id/package.json index eec4b4dfe..ce4927bcf 100755 --- a/packages/console-base-conf-product-id/package.json +++ b/packages/console-base-conf-product-id/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-product-id", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase CONF product id", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-demo-helpers/package.json b/packages/console-base-demo-helpers/package.json index 826d5f006..a1624e809 100644 --- a/packages/console-base-demo-helpers/package.json +++ b/packages/console-base-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-demo-helpers", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase demo 助手", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-error-prompt-proxy/package.json b/packages/console-base-error-prompt-proxy/package.json index 0e9fd9e5e..e4ae82687 100644 --- a/packages/console-base-error-prompt-proxy/package.json +++ b/packages/console-base-error-prompt-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt-proxy", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 错误弹窗器(集中代理)", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-error-prompt/package.json b/packages/console-base-error-prompt/package.json index 76c9f7ba8..33641251f 100644 --- a/packages/console-base-error-prompt/package.json +++ b/packages/console-base-error-prompt/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 错误弹窗器", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-global/package.json b/packages/console-base-global/package.json index 8575ed681..c620c7f0b 100644 --- a/packages/console-base-global/package.json +++ b/packages/console-base-global/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-global", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 唯一官方指定全局变量... 的 API", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-intl-factory-basic/package.json b/packages/console-base-intl-factory-basic/package.json index 80f7d666a..10f7670a4 100755 --- a/packages/console-base-intl-factory-basic/package.json +++ b/packages/console-base-intl-factory-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory-basic", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase Intl Factory Basic, Pure Text, No JSX", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-intl-factory/package.json b/packages/console-base-intl-factory/package.json index 7f3b097fd..ed8730a9c 100755 --- a/packages/console-base-intl-factory/package.json +++ b/packages/console-base-intl-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase Intl Factory", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-log-sls/package.json b/packages/console-base-log-sls/package.json index eedc7b434..b492c0af9 100755 --- a/packages/console-base-log-sls/package.json +++ b/packages/console-base-log-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-log-sls", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase Log SLS", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-messenger/package.json b/packages/console-base-messenger/package.json index ab5664ae4..a4bd13738 100755 --- a/packages/console-base-messenger/package.json +++ b/packages/console-base-messenger/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-messenger", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 信使 - 与控制台应用之间的交互", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-breadcrumb/package.json b/packages/console-base-rc-breadcrumb/package.json index f774e694a..eedd74673 100644 --- a/packages/console-base-rc-breadcrumb/package.json +++ b/packages/console-base-rc-breadcrumb/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-breadcrumb", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 面包屑", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-button/package.json b/packages/console-base-rc-button/package.json index ad6765980..cc2b60138 100644 --- a/packages/console-base-rc-button/package.json +++ b/packages/console-base-rc-button/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-button", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 按钮", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-dialog/package.json b/packages/console-base-rc-dialog/package.json index 3f7ce3d68..e5b10cc37 100644 --- a/packages/console-base-rc-dialog/package.json +++ b/packages/console-base-rc-dialog/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dialog", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - Dialog", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-dropdown/package.json b/packages/console-base-rc-dropdown/package.json index 144b958c1..ec8d1d0c6 100644 --- a/packages/console-base-rc-dropdown/package.json +++ b/packages/console-base-rc-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dropdown", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 下拉", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-flex/package.json b/packages/console-base-rc-flex/package.json index b4bc8d728..907183001 100644 --- a/packages/console-base-rc-flex/package.json +++ b/packages/console-base-rc-flex/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-flex", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - Flex", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-icon/package.json b/packages/console-base-rc-icon/package.json index 0e87ba09a..8f3835dfc 100644 --- a/packages/console-base-rc-icon/package.json +++ b/packages/console-base-rc-icon/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-icon", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 图标", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-input/package.json b/packages/console-base-rc-input/package.json index e7f5bdc08..b1ff76d35 100644 --- a/packages/console-base-rc-input/package.json +++ b/packages/console-base-rc-input/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-input", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - Input", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-intl/package.json b/packages/console-base-rc-intl/package.json index 918e7e77c..40dde8a8d 100644 --- a/packages/console-base-rc-intl/package.json +++ b/packages/console-base-rc-intl/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-intl", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 带样式的国际化文案展示", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-key-value/package.json b/packages/console-base-rc-key-value/package.json index 935904d95..6e86cb9d5 100644 --- a/packages/console-base-rc-key-value/package.json +++ b/packages/console-base-rc-key-value/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-key-value", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - key-value 对的展示", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index 8a2035c75..d94231f0c 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-loading", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 加载中", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-marks/package.json b/packages/console-base-rc-marks/package.json index 1f42d6fc8..6d85d6000 100644 --- a/packages/console-base-rc-marks/package.json +++ b/packages/console-base-rc-marks/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-marks", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - NEW、ALPHA、BETA 等小标签", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-pagination/package.json b/packages/console-base-rc-pagination/package.json index 19b11342f..2205faea8 100644 --- a/packages/console-base-rc-pagination/package.json +++ b/packages/console-base-rc-pagination/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-pagination", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase 组件 - 分页", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-styled-mixin/package.json b/packages/console-base-styled-mixin/package.json index 79fd094c1..eea82c483 100644 --- a/packages/console-base-styled-mixin/package.json +++ b/packages/console-base-styled-mixin/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-styled-mixin", - "version": "0.0.1", + "version": "0.0.0", "description": "控制台专用的 styled mixin", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-basic/package.json b/packages/console-fetcher-basic/package.json index d9c9a530a..c94ceade8 100644 --- a/packages/console-fetcher-basic/package.json +++ b/packages/console-fetcher-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-basic", - "version": "0.0.1", + "version": "0.0.0", "description": "控制台基础 Fetcher(无风控)", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-arms/package.json b/packages/console-fetcher-interceptor-arms/package.json index f1acf4bcd..41e042010 100644 --- a/packages/console-fetcher-interceptor-arms/package.json +++ b/packages/console-fetcher-interceptor-arms/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-arms", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher ARMS 拦截", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-fecs/package.json b/packages/console-fetcher-interceptor-fecs/package.json index f85ffa8b9..eb949a28f 100644 --- a/packages/console-fetcher-interceptor-fecs/package.json +++ b/packages/console-fetcher-interceptor-fecs/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-fecs", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 请求 + 响应拦截 - FECS", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-req-mock/package.json b/packages/console-fetcher-interceptor-req-mock/package.json index ab9fa71c9..04f197979 100644 --- a/packages/console-fetcher-interceptor-req-mock/package.json +++ b/packages/console-fetcher-interceptor-req-mock/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-mock", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 请求拦截 - mock 转接", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-req-security/package.json b/packages/console-fetcher-interceptor-req-security/package.json index adf558c8b..1972c3cc1 100644 --- a/packages/console-fetcher-interceptor-req-security/package.json +++ b/packages/console-fetcher-interceptor-req-security/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-security", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 请求拦截 - 类 POST 请求添加安全参数", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-res-biz/package.json b/packages/console-fetcher-interceptor-res-biz/package.json index 8958bee1c..80ab5d0f7 100644 --- a/packages/console-fetcher-interceptor-res-biz/package.json +++ b/packages/console-fetcher-interceptor-res-biz/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-biz", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 响应拦截 - 业务层错误", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-res-error-message/package.json b/packages/console-fetcher-interceptor-res-error-message/package.json index 86d61f38d..506f0c8d2 100644 --- a/packages/console-fetcher-interceptor-res-error-message/package.json +++ b/packages/console-fetcher-interceptor-res-error-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-error-message", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 响应拦截 - 一般性错误 message 国际化", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-res-risk/package.json b/packages/console-fetcher-interceptor-res-risk/package.json index b1151526d..3c0081449 100644 --- a/packages/console-fetcher-interceptor-res-risk/package.json +++ b/packages/console-fetcher-interceptor-res-risk/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-risk", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/console-fetcher 响应拦截 - 风控处理", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-sls/package.json b/packages/console-fetcher-interceptor-sls/package.json index 9f253d14c..4cfc6d550 100755 --- a/packages/console-fetcher-interceptor-sls/package.json +++ b/packages/console-fetcher-interceptor-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-sls", - "version": "0.0.1", + "version": "0.0.0", "description": "SLS logger interceptor for @alicloud/console-fetcher", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-proxy/package.json b/packages/console-fetcher-proxy/package.json index 436b0beda..19d910c2b 100644 --- a/packages/console-fetcher-proxy/package.json +++ b/packages/console-fetcher-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-proxy", - "version": "0.0.1", + "version": "0.0.0", "description": "控制台 fetcher 代理", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher/package.json b/packages/console-fetcher/package.json index c4bda0077..5ab658f09 100644 --- a/packages/console-fetcher/package.json +++ b/packages/console-fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher", - "version": "0.0.1", + "version": "0.0.0", "description": "控制台 fetcher", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-logger-sls/package.json b/packages/console-logger-sls/package.json index 36c08da0f..c84ae5259 100755 --- a/packages/console-logger-sls/package.json +++ b/packages/console-logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-logger-sls", - "version": "0.0.1", + "version": "0.0.0", "description": "SLS logger factory for console", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-one-conf/package.json b/packages/console-one-conf/package.json index 540478f72..5ed3780c3 100755 --- a/packages/console-one-conf/package.json +++ b/packages/console-one-conf/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-conf", - "version": "0.0.1", + "version": "0.0.0", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-one-config/package.json b/packages/console-one-config/package.json index 20b0cea27..49de5200e 100755 --- a/packages/console-one-config/package.json +++ b/packages/console-one-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-config", - "version": "0.0.1", + "version": "0.0.0", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/cookie/package.json b/packages/cookie/package.json index f7d4c9b12..67317b52d 100755 --- a/packages/cookie/package.json +++ b/packages/cookie/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/cookie", - "version": "0.0.1", + "version": "0.0.0", "description": "ConsoleBase Cookie", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/copy-text/package.json b/packages/copy-text/package.json index 1e0685c96..a4dad3d47 100755 --- a/packages/copy-text/package.json +++ b/packages/copy-text/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/copy-text", - "version": "0.0.1", + "version": "0.0.0", "description": "Copy Text", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/demo-rc-elements/package.json b/packages/demo-rc-elements/package.json index 25504f6b2..41f9d9aab 100644 --- a/packages/demo-rc-elements/package.json +++ b/packages/demo-rc-elements/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/demo-rc-elements", - "version": "0.0.3", + "version": "0.0.2", "description": "专用于 demo 的元素,为了好看和方便,切不可用于生产", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/dom-event-hijacker/package.json b/packages/dom-event-hijacker/package.json index 8fac6a874..b98bd8559 100644 --- a/packages/dom-event-hijacker/package.json +++ b/packages/dom-event-hijacker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/dom-event-hijacker", - "version": "0.0.1", + "version": "0.0.0", "description": "DOM 事件拦截,类似于 jQuery 的 delegate", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 5e949c3cd..71d8acb1b 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/eslint-config", - "version": "0.0.2", + "version": "0.0.1", "description": "eslint config based on eslint-config-ali", "license": "MIT", "main": "index.js", diff --git a/packages/fetcher-demo-helpers/package.json b/packages/fetcher-demo-helpers/package.json index e9269f77f..741737ef3 100644 --- a/packages/fetcher-demo-helpers/package.json +++ b/packages/fetcher-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-demo-helpers", - "version": "0.0.1", + "version": "0.0.0", "description": "fetcher 测试专用包,避免代码冗余", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/fetcher-fetch/package.json b/packages/fetcher-fetch/package.json index 4c24bf8a1..da3a6fb64 100644 --- a/packages/fetcher-fetch/package.json +++ b/packages/fetcher-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-fetch", - "version": "0.0.1", + "version": "0.0.0", "description": "@alicloud/fetcher 的底层 fetch 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/fetcher-jsonp/package.json b/packages/fetcher-jsonp/package.json index 823d2309f..dd351a873 100644 --- a/packages/fetcher-jsonp/package.json +++ b/packages/fetcher-jsonp/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-jsonp", - "version": "0.0.1", + "version": "0.0.0", "description": "fetcher 的底层 jsonp 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/fetcher/package.json b/packages/fetcher/package.json index cc57abdf8..cbc2c396a 100644 --- a/packages/fetcher/package.json +++ b/packages/fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher", - "version": "0.0.1", + "version": "0.0.0", "description": "类似 axios,封装 fetch/jsonp,可以加拦截器", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/logger-sls/package.json b/packages/logger-sls/package.json index 600969d41..6869cc310 100755 --- a/packages/logger-sls/package.json +++ b/packages/logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/logger-sls", - "version": "0.0.1", + "version": "0.0.0", "description": "SLS logger factory", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/mixed-black-whitelist-checker/package.json b/packages/mixed-black-whitelist-checker/package.json index d1d55749d..bd36a5c56 100755 --- a/packages/mixed-black-whitelist-checker/package.json +++ b/packages/mixed-black-whitelist-checker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/mixed-black-whitelist-checker", - "version": "0.0.1", + "version": "0.0.0", "description": "混合黑白名单检查器", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/post-message/package.json b/packages/post-message/package.json index 8ce07c7e7..e6992a288 100755 --- a/packages/post-message/package.json +++ b/packages/post-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/post-message", - "version": "0.0.1", + "version": "0.0.0", "description": "postMessage 封装,可以用成 Promise", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/react-hook-is-unmounted/package.json b/packages/react-hook-is-unmounted/package.json index e8eb5de7f..24aecd298 100644 --- a/packages/react-hook-is-unmounted/package.json +++ b/packages/react-hook-is-unmounted/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/react-hook-is-unmounted", - "version": "0.0.1", + "version": "0.0.0", "description": "React Hook - 是否已被 unmount", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/storage-factory/package.json b/packages/storage-factory/package.json index 4cf94baf1..d49160914 100755 --- a/packages/storage-factory/package.json +++ b/packages/storage-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/storage-factory", - "version": "0.0.1", + "version": "0.0.0", "description": "Storage factory - use storage with types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/stylelint-config/package.json b/packages/stylelint-config/package.json index 5fc8cd930..4d2589751 100644 --- a/packages/stylelint-config/package.json +++ b/packages/stylelint-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/stylelint-config", - "version": "0.0.2", + "version": "0.0.1", "description": "stylelint configuration", "license": "MIT", "main": "index.js", diff --git a/packages/viper-feature-gen/package.json b/packages/viper-feature-gen/package.json index 81bce288c..424137b76 100755 --- a/packages/viper-feature-gen/package.json +++ b/packages/viper-feature-gen/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/viper-feature-gen", - "version": "0.0.1", + "version": "0.0.0", "description": "阿里云控制台(接入 viper)功能开关检查(工厂方法)", "license": "MIT", "main": "build/cjs/index.js", From 81e34106d361e1a6b52ab8b04be475dd834de326 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 09:48:05 +0800 Subject: [PATCH 122/135] Publish - @alicloud/base64@0.0.1 - @alicloud/console-base-common-typings@0.0.1 - @alicloud/console-base-conf-account@0.0.1 - @alicloud/console-base-conf-env@0.0.1 - @alicloud/console-base-conf-locale@0.0.1 - @alicloud/console-base-conf-product-id@0.0.1 - @alicloud/console-base-demo-helpers@0.0.1 - @alicloud/console-base-error-prompt-proxy@0.0.1 - @alicloud/console-base-error-prompt@0.0.1 - @alicloud/console-base-global@0.0.1 - @alicloud/console-base-intl-factory-basic@0.0.1 - @alicloud/console-base-intl-factory@0.0.1 - @alicloud/console-base-log-sls@0.0.1 - @alicloud/console-base-messenger@0.0.1 - @alicloud/console-base-rc-breadcrumb@0.0.1 - @alicloud/console-base-rc-button@0.0.1 - @alicloud/console-base-rc-dialog@0.0.1 - @alicloud/console-base-rc-dropdown@0.0.1 - @alicloud/console-base-rc-flex@0.0.1 - @alicloud/console-base-rc-icon@0.0.1 - @alicloud/console-base-rc-input@0.0.1 - @alicloud/console-base-rc-intl@0.0.1 - @alicloud/console-base-rc-key-value@0.0.1 - @alicloud/console-base-rc-loading@0.0.1 - @alicloud/console-base-rc-marks@0.0.1 - @alicloud/console-base-rc-pagination@0.0.1 - @alicloud/console-base-styled-mixin@0.0.1 - @alicloud/console-fetcher-basic@0.0.1 - @alicloud/console-fetcher-interceptor-arms@0.0.1 - @alicloud/console-fetcher-interceptor-fecs@0.0.1 - @alicloud/console-fetcher-interceptor-req-mock@0.0.1 - @alicloud/console-fetcher-interceptor-req-security@0.0.1 - @alicloud/console-fetcher-interceptor-res-biz@0.0.1 - @alicloud/console-fetcher-interceptor-res-error-message@0.0.1 - @alicloud/console-fetcher-interceptor-res-risk@0.0.1 - @alicloud/console-fetcher-interceptor-sls@0.0.1 - @alicloud/console-fetcher-proxy@0.0.1 - @alicloud/console-fetcher@0.0.1 - @alicloud/console-logger-sls@0.0.1 - @alicloud/console-one-conf@0.0.1 - @alicloud/console-one-config@0.0.1 - @alicloud/cookie@0.0.1 - @alicloud/copy-text@0.0.1 - @alicloud/demo-rc-elements@0.0.3 - @alicloud/dom-event-hijacker@0.0.1 - @alicloud/eslint-config@0.0.2 - @alicloud/fetcher-demo-helpers@0.0.1 - @alicloud/fetcher-fetch@0.0.1 - @alicloud/fetcher-jsonp@0.0.1 - @alicloud/fetcher@0.0.1 - @alicloud/logger-sls@0.0.1 - @alicloud/mixed-black-whitelist-checker@0.0.1 - @alicloud/post-message@0.0.1 - @alicloud/react-hook-is-unmounted@0.0.1 - @alicloud/storage-factory@0.0.1 - @alicloud/stylelint-config@0.0.2 - @alicloud/viper-feature-gen@0.0.1 --- packages/base64/package.json | 2 +- packages/console-base-common-typings/package.json | 2 +- packages/console-base-conf-account/package.json | 2 +- packages/console-base-conf-env/package.json | 2 +- packages/console-base-conf-locale/package.json | 2 +- packages/console-base-conf-product-id/package.json | 2 +- packages/console-base-demo-helpers/package.json | 2 +- packages/console-base-error-prompt-proxy/package.json | 2 +- packages/console-base-error-prompt/package.json | 2 +- packages/console-base-global/package.json | 2 +- packages/console-base-intl-factory-basic/package.json | 2 +- packages/console-base-intl-factory/package.json | 2 +- packages/console-base-log-sls/package.json | 2 +- packages/console-base-messenger/package.json | 2 +- packages/console-base-rc-breadcrumb/package.json | 2 +- packages/console-base-rc-button/package.json | 2 +- packages/console-base-rc-dialog/package.json | 2 +- packages/console-base-rc-dropdown/package.json | 2 +- packages/console-base-rc-flex/package.json | 2 +- packages/console-base-rc-icon/package.json | 2 +- packages/console-base-rc-input/package.json | 2 +- packages/console-base-rc-intl/package.json | 2 +- packages/console-base-rc-key-value/package.json | 2 +- packages/console-base-rc-loading/package.json | 2 +- packages/console-base-rc-marks/package.json | 2 +- packages/console-base-rc-pagination/package.json | 2 +- packages/console-base-styled-mixin/package.json | 2 +- packages/console-fetcher-basic/package.json | 2 +- packages/console-fetcher-interceptor-arms/package.json | 2 +- packages/console-fetcher-interceptor-fecs/package.json | 2 +- packages/console-fetcher-interceptor-req-mock/package.json | 2 +- packages/console-fetcher-interceptor-req-security/package.json | 2 +- packages/console-fetcher-interceptor-res-biz/package.json | 2 +- .../console-fetcher-interceptor-res-error-message/package.json | 2 +- packages/console-fetcher-interceptor-res-risk/package.json | 2 +- packages/console-fetcher-interceptor-sls/package.json | 2 +- packages/console-fetcher-proxy/package.json | 2 +- packages/console-fetcher/package.json | 2 +- packages/console-logger-sls/package.json | 2 +- packages/console-one-conf/package.json | 2 +- packages/console-one-config/package.json | 2 +- packages/cookie/package.json | 2 +- packages/copy-text/package.json | 2 +- packages/demo-rc-elements/package.json | 2 +- packages/dom-event-hijacker/package.json | 2 +- packages/eslint-config/package.json | 2 +- packages/fetcher-demo-helpers/package.json | 2 +- packages/fetcher-fetch/package.json | 2 +- packages/fetcher-jsonp/package.json | 2 +- packages/fetcher/package.json | 2 +- packages/logger-sls/package.json | 2 +- packages/mixed-black-whitelist-checker/package.json | 2 +- packages/post-message/package.json | 2 +- packages/react-hook-is-unmounted/package.json | 2 +- packages/storage-factory/package.json | 2 +- packages/stylelint-config/package.json | 2 +- packages/viper-feature-gen/package.json | 2 +- 57 files changed, 57 insertions(+), 57 deletions(-) diff --git a/packages/base64/package.json b/packages/base64/package.json index bbfbb5fc2..666179ed6 100755 --- a/packages/base64/package.json +++ b/packages/base64/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/base64", - "version": "0.0.0", + "version": "0.0.1", "description": "Base64", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-common-typings/package.json b/packages/console-base-common-typings/package.json index f6cb03a90..7506d3f0c 100755 --- a/packages/console-base-common-typings/package.json +++ b/packages/console-base-common-typings/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-common-typings", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase common types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-account/package.json b/packages/console-base-conf-account/package.json index fc5a4afe2..6b5f24cb9 100755 --- a/packages/console-base-conf-account/package.json +++ b/packages/console-base-conf-account/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-account", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF.ACCOUNT", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-env/package.json b/packages/console-base-conf-env/package.json index 75ab22913..dc0ad214a 100755 --- a/packages/console-base-conf-env/package.json +++ b/packages/console-base-conf-env/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-env", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF.ENV", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-locale/package.json b/packages/console-base-conf-locale/package.json index 7cd8409ec..6669f5de4 100755 --- a/packages/console-base-conf-locale/package.json +++ b/packages/console-base-conf-locale/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-locale", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF.LOCALE", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-product-id/package.json b/packages/console-base-conf-product-id/package.json index ce4927bcf..eec4b4dfe 100755 --- a/packages/console-base-conf-product-id/package.json +++ b/packages/console-base-conf-product-id/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-product-id", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase CONF product id", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-demo-helpers/package.json b/packages/console-base-demo-helpers/package.json index a1624e809..826d5f006 100644 --- a/packages/console-base-demo-helpers/package.json +++ b/packages/console-base-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-demo-helpers", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase demo 助手", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-error-prompt-proxy/package.json b/packages/console-base-error-prompt-proxy/package.json index e4ae82687..0e9fd9e5e 100644 --- a/packages/console-base-error-prompt-proxy/package.json +++ b/packages/console-base-error-prompt-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt-proxy", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 错误弹窗器(集中代理)", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-error-prompt/package.json b/packages/console-base-error-prompt/package.json index 33641251f..76c9f7ba8 100644 --- a/packages/console-base-error-prompt/package.json +++ b/packages/console-base-error-prompt/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 错误弹窗器", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-global/package.json b/packages/console-base-global/package.json index c620c7f0b..8575ed681 100644 --- a/packages/console-base-global/package.json +++ b/packages/console-base-global/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-global", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 唯一官方指定全局变量... 的 API", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-intl-factory-basic/package.json b/packages/console-base-intl-factory-basic/package.json index 10f7670a4..80f7d666a 100755 --- a/packages/console-base-intl-factory-basic/package.json +++ b/packages/console-base-intl-factory-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory-basic", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Intl Factory Basic, Pure Text, No JSX", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-intl-factory/package.json b/packages/console-base-intl-factory/package.json index ed8730a9c..7f3b097fd 100755 --- a/packages/console-base-intl-factory/package.json +++ b/packages/console-base-intl-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Intl Factory", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-log-sls/package.json b/packages/console-base-log-sls/package.json index b492c0af9..eedc7b434 100755 --- a/packages/console-base-log-sls/package.json +++ b/packages/console-base-log-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-log-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Log SLS", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-messenger/package.json b/packages/console-base-messenger/package.json index a4bd13738..ab5664ae4 100755 --- a/packages/console-base-messenger/package.json +++ b/packages/console-base-messenger/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-messenger", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 信使 - 与控制台应用之间的交互", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-breadcrumb/package.json b/packages/console-base-rc-breadcrumb/package.json index eedd74673..f774e694a 100644 --- a/packages/console-base-rc-breadcrumb/package.json +++ b/packages/console-base-rc-breadcrumb/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-breadcrumb", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 面包屑", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-button/package.json b/packages/console-base-rc-button/package.json index cc2b60138..ad6765980 100644 --- a/packages/console-base-rc-button/package.json +++ b/packages/console-base-rc-button/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-button", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 按钮", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-dialog/package.json b/packages/console-base-rc-dialog/package.json index e5b10cc37..3f7ce3d68 100644 --- a/packages/console-base-rc-dialog/package.json +++ b/packages/console-base-rc-dialog/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dialog", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - Dialog", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-dropdown/package.json b/packages/console-base-rc-dropdown/package.json index ec8d1d0c6..144b958c1 100644 --- a/packages/console-base-rc-dropdown/package.json +++ b/packages/console-base-rc-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dropdown", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 下拉", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-flex/package.json b/packages/console-base-rc-flex/package.json index 907183001..b4bc8d728 100644 --- a/packages/console-base-rc-flex/package.json +++ b/packages/console-base-rc-flex/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-flex", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - Flex", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-icon/package.json b/packages/console-base-rc-icon/package.json index 8f3835dfc..0e87ba09a 100644 --- a/packages/console-base-rc-icon/package.json +++ b/packages/console-base-rc-icon/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-icon", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 图标", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-input/package.json b/packages/console-base-rc-input/package.json index b1ff76d35..e7f5bdc08 100644 --- a/packages/console-base-rc-input/package.json +++ b/packages/console-base-rc-input/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-input", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - Input", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-intl/package.json b/packages/console-base-rc-intl/package.json index 40dde8a8d..918e7e77c 100644 --- a/packages/console-base-rc-intl/package.json +++ b/packages/console-base-rc-intl/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-intl", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 带样式的国际化文案展示", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-key-value/package.json b/packages/console-base-rc-key-value/package.json index 6e86cb9d5..935904d95 100644 --- a/packages/console-base-rc-key-value/package.json +++ b/packages/console-base-rc-key-value/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-key-value", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - key-value 对的展示", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index d94231f0c..8a2035c75 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-loading", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 加载中", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-marks/package.json b/packages/console-base-rc-marks/package.json index 6d85d6000..1f42d6fc8 100644 --- a/packages/console-base-rc-marks/package.json +++ b/packages/console-base-rc-marks/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-marks", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - NEW、ALPHA、BETA 等小标签", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-pagination/package.json b/packages/console-base-rc-pagination/package.json index 2205faea8..19b11342f 100644 --- a/packages/console-base-rc-pagination/package.json +++ b/packages/console-base-rc-pagination/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-pagination", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase 组件 - 分页", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-styled-mixin/package.json b/packages/console-base-styled-mixin/package.json index eea82c483..79fd094c1 100644 --- a/packages/console-base-styled-mixin/package.json +++ b/packages/console-base-styled-mixin/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-styled-mixin", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台专用的 styled mixin", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-basic/package.json b/packages/console-fetcher-basic/package.json index c94ceade8..d9c9a530a 100644 --- a/packages/console-fetcher-basic/package.json +++ b/packages/console-fetcher-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-basic", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台基础 Fetcher(无风控)", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-arms/package.json b/packages/console-fetcher-interceptor-arms/package.json index 41e042010..f1acf4bcd 100644 --- a/packages/console-fetcher-interceptor-arms/package.json +++ b/packages/console-fetcher-interceptor-arms/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-arms", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher ARMS 拦截", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-fecs/package.json b/packages/console-fetcher-interceptor-fecs/package.json index eb949a28f..f85ffa8b9 100644 --- a/packages/console-fetcher-interceptor-fecs/package.json +++ b/packages/console-fetcher-interceptor-fecs/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-fecs", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 请求 + 响应拦截 - FECS", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-req-mock/package.json b/packages/console-fetcher-interceptor-req-mock/package.json index 04f197979..ab9fa71c9 100644 --- a/packages/console-fetcher-interceptor-req-mock/package.json +++ b/packages/console-fetcher-interceptor-req-mock/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-mock", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 请求拦截 - mock 转接", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-req-security/package.json b/packages/console-fetcher-interceptor-req-security/package.json index 1972c3cc1..adf558c8b 100644 --- a/packages/console-fetcher-interceptor-req-security/package.json +++ b/packages/console-fetcher-interceptor-req-security/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-security", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 请求拦截 - 类 POST 请求添加安全参数", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-res-biz/package.json b/packages/console-fetcher-interceptor-res-biz/package.json index 80ab5d0f7..8958bee1c 100644 --- a/packages/console-fetcher-interceptor-res-biz/package.json +++ b/packages/console-fetcher-interceptor-res-biz/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-biz", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 响应拦截 - 业务层错误", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-res-error-message/package.json b/packages/console-fetcher-interceptor-res-error-message/package.json index 506f0c8d2..86d61f38d 100644 --- a/packages/console-fetcher-interceptor-res-error-message/package.json +++ b/packages/console-fetcher-interceptor-res-error-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-error-message", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 响应拦截 - 一般性错误 message 国际化", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-res-risk/package.json b/packages/console-fetcher-interceptor-res-risk/package.json index 3c0081449..b1151526d 100644 --- a/packages/console-fetcher-interceptor-res-risk/package.json +++ b/packages/console-fetcher-interceptor-res-risk/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-risk", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/console-fetcher 响应拦截 - 风控处理", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-interceptor-sls/package.json b/packages/console-fetcher-interceptor-sls/package.json index 4cfc6d550..9f253d14c 100755 --- a/packages/console-fetcher-interceptor-sls/package.json +++ b/packages/console-fetcher-interceptor-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "SLS logger interceptor for @alicloud/console-fetcher", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-proxy/package.json b/packages/console-fetcher-proxy/package.json index 19d910c2b..436b0beda 100644 --- a/packages/console-fetcher-proxy/package.json +++ b/packages/console-fetcher-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-proxy", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台 fetcher 代理", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher/package.json b/packages/console-fetcher/package.json index 5ab658f09..c4bda0077 100644 --- a/packages/console-fetcher/package.json +++ b/packages/console-fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher", - "version": "0.0.0", + "version": "0.0.1", "description": "控制台 fetcher", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-logger-sls/package.json b/packages/console-logger-sls/package.json index c84ae5259..36c08da0f 100755 --- a/packages/console-logger-sls/package.json +++ b/packages/console-logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-logger-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "SLS logger factory for console", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-one-conf/package.json b/packages/console-one-conf/package.json index 5ed3780c3..540478f72 100755 --- a/packages/console-one-conf/package.json +++ b/packages/console-one-conf/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-conf", - "version": "0.0.0", + "version": "0.0.1", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-one-config/package.json b/packages/console-one-config/package.json index 49de5200e..20b0cea27 100755 --- a/packages/console-one-config/package.json +++ b/packages/console-one-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-config", - "version": "0.0.0", + "version": "0.0.1", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/cookie/package.json b/packages/cookie/package.json index 67317b52d..f7d4c9b12 100755 --- a/packages/cookie/package.json +++ b/packages/cookie/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/cookie", - "version": "0.0.0", + "version": "0.0.1", "description": "ConsoleBase Cookie", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/copy-text/package.json b/packages/copy-text/package.json index a4dad3d47..1e0685c96 100755 --- a/packages/copy-text/package.json +++ b/packages/copy-text/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/copy-text", - "version": "0.0.0", + "version": "0.0.1", "description": "Copy Text", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/demo-rc-elements/package.json b/packages/demo-rc-elements/package.json index 41f9d9aab..25504f6b2 100644 --- a/packages/demo-rc-elements/package.json +++ b/packages/demo-rc-elements/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/demo-rc-elements", - "version": "0.0.2", + "version": "0.0.3", "description": "专用于 demo 的元素,为了好看和方便,切不可用于生产", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/dom-event-hijacker/package.json b/packages/dom-event-hijacker/package.json index b98bd8559..8fac6a874 100644 --- a/packages/dom-event-hijacker/package.json +++ b/packages/dom-event-hijacker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/dom-event-hijacker", - "version": "0.0.0", + "version": "0.0.1", "description": "DOM 事件拦截,类似于 jQuery 的 delegate", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 71d8acb1b..5e949c3cd 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/eslint-config", - "version": "0.0.1", + "version": "0.0.2", "description": "eslint config based on eslint-config-ali", "license": "MIT", "main": "index.js", diff --git a/packages/fetcher-demo-helpers/package.json b/packages/fetcher-demo-helpers/package.json index 741737ef3..e9269f77f 100644 --- a/packages/fetcher-demo-helpers/package.json +++ b/packages/fetcher-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-demo-helpers", - "version": "0.0.0", + "version": "0.0.1", "description": "fetcher 测试专用包,避免代码冗余", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/fetcher-fetch/package.json b/packages/fetcher-fetch/package.json index da3a6fb64..4c24bf8a1 100644 --- a/packages/fetcher-fetch/package.json +++ b/packages/fetcher-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-fetch", - "version": "0.0.0", + "version": "0.0.1", "description": "@alicloud/fetcher 的底层 fetch 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/fetcher-jsonp/package.json b/packages/fetcher-jsonp/package.json index dd351a873..823d2309f 100644 --- a/packages/fetcher-jsonp/package.json +++ b/packages/fetcher-jsonp/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-jsonp", - "version": "0.0.0", + "version": "0.0.1", "description": "fetcher 的底层 jsonp 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/fetcher/package.json b/packages/fetcher/package.json index cbc2c396a..cc57abdf8 100644 --- a/packages/fetcher/package.json +++ b/packages/fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher", - "version": "0.0.0", + "version": "0.0.1", "description": "类似 axios,封装 fetch/jsonp,可以加拦截器", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/logger-sls/package.json b/packages/logger-sls/package.json index 6869cc310..600969d41 100755 --- a/packages/logger-sls/package.json +++ b/packages/logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/logger-sls", - "version": "0.0.0", + "version": "0.0.1", "description": "SLS logger factory", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/mixed-black-whitelist-checker/package.json b/packages/mixed-black-whitelist-checker/package.json index bd36a5c56..d1d55749d 100755 --- a/packages/mixed-black-whitelist-checker/package.json +++ b/packages/mixed-black-whitelist-checker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/mixed-black-whitelist-checker", - "version": "0.0.0", + "version": "0.0.1", "description": "混合黑白名单检查器", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/post-message/package.json b/packages/post-message/package.json index e6992a288..8ce07c7e7 100755 --- a/packages/post-message/package.json +++ b/packages/post-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/post-message", - "version": "0.0.0", + "version": "0.0.1", "description": "postMessage 封装,可以用成 Promise", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/react-hook-is-unmounted/package.json b/packages/react-hook-is-unmounted/package.json index 24aecd298..e8eb5de7f 100644 --- a/packages/react-hook-is-unmounted/package.json +++ b/packages/react-hook-is-unmounted/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/react-hook-is-unmounted", - "version": "0.0.0", + "version": "0.0.1", "description": "React Hook - 是否已被 unmount", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/storage-factory/package.json b/packages/storage-factory/package.json index d49160914..4cf94baf1 100755 --- a/packages/storage-factory/package.json +++ b/packages/storage-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/storage-factory", - "version": "0.0.0", + "version": "0.0.1", "description": "Storage factory - use storage with types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/stylelint-config/package.json b/packages/stylelint-config/package.json index 4d2589751..5fc8cd930 100644 --- a/packages/stylelint-config/package.json +++ b/packages/stylelint-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/stylelint-config", - "version": "0.0.1", + "version": "0.0.2", "description": "stylelint configuration", "license": "MIT", "main": "index.js", diff --git a/packages/viper-feature-gen/package.json b/packages/viper-feature-gen/package.json index 424137b76..81bce288c 100755 --- a/packages/viper-feature-gen/package.json +++ b/packages/viper-feature-gen/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/viper-feature-gen", - "version": "0.0.0", + "version": "0.0.1", "description": "阿里云控制台(接入 viper)功能开关检查(工厂方法)", "license": "MIT", "main": "build/cjs/index.js", From ef1fbd46143fcd6ce412d7e53b00fcd763102da6 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 09:48:58 +0800 Subject: [PATCH 123/135] Publish - @alicloud/base64@0.0.2 - @alicloud/console-base-common-typings@0.0.2 - @alicloud/console-base-conf-account@0.0.2 - @alicloud/console-base-conf-env@0.0.2 - @alicloud/console-base-conf-locale@0.0.2 - @alicloud/console-base-conf-product-id@0.0.2 - @alicloud/console-base-demo-helpers@0.0.2 - @alicloud/console-base-error-prompt-proxy@0.0.2 - @alicloud/console-base-error-prompt@0.0.2 - @alicloud/console-base-global@0.0.2 - @alicloud/console-base-intl-factory-basic@0.0.2 - @alicloud/console-base-intl-factory@0.0.2 - @alicloud/console-base-log-sls@0.0.2 - @alicloud/console-base-messenger@0.0.2 - @alicloud/console-base-rc-breadcrumb@0.0.2 - @alicloud/console-base-rc-button@0.0.2 - @alicloud/console-base-rc-dialog@0.0.2 - @alicloud/console-base-rc-dropdown@0.0.2 - @alicloud/console-base-rc-flex@0.0.2 - @alicloud/console-base-rc-icon@0.0.2 - @alicloud/console-base-rc-input@0.0.2 - @alicloud/console-base-rc-intl@0.0.2 - @alicloud/console-base-rc-key-value@0.0.2 - @alicloud/console-base-rc-loading@0.0.2 - @alicloud/console-base-rc-marks@0.0.2 - @alicloud/console-base-rc-pagination@0.0.2 - @alicloud/console-base-styled-mixin@0.0.2 - @alicloud/console-fetcher-basic@0.0.2 - @alicloud/console-fetcher-interceptor-arms@0.0.2 - @alicloud/console-fetcher-interceptor-fecs@0.0.2 - @alicloud/console-fetcher-interceptor-req-mock@0.0.2 - @alicloud/console-fetcher-interceptor-req-security@0.0.2 - @alicloud/console-fetcher-interceptor-res-biz@0.0.2 - @alicloud/console-fetcher-interceptor-res-error-message@0.0.2 - @alicloud/console-fetcher-interceptor-res-risk@0.0.2 - @alicloud/console-fetcher-interceptor-sls@0.0.2 - @alicloud/console-fetcher-proxy@0.0.2 - @alicloud/console-fetcher@0.0.2 - @alicloud/console-logger-sls@0.0.2 - @alicloud/console-one-conf@0.0.2 - @alicloud/console-one-config@0.0.2 - @alicloud/cookie@0.0.2 - @alicloud/copy-text@0.0.2 - @alicloud/demo-rc-elements@0.0.4 - @alicloud/dom-event-hijacker@0.0.2 - @alicloud/eslint-config@0.0.3 - @alicloud/fetcher-demo-helpers@0.0.2 - @alicloud/fetcher-fetch@0.0.2 - @alicloud/fetcher-jsonp@0.0.2 - @alicloud/fetcher@0.0.2 - @alicloud/logger-sls@0.0.2 - @alicloud/mixed-black-whitelist-checker@0.0.2 - @alicloud/post-message@0.0.2 - @alicloud/react-hook-is-unmounted@0.0.2 - @alicloud/storage-factory@0.0.2 - @alicloud/stylelint-config@0.0.3 - @alicloud/viper-feature-gen@0.0.2 --- packages/base64/package.json | 2 +- .../console-base-common-typings/package.json | 2 +- .../console-base-conf-account/package.json | 8 +++---- packages/console-base-conf-env/package.json | 8 +++---- .../console-base-conf-locale/package.json | 8 +++---- .../console-base-conf-product-id/package.json | 2 +- .../console-base-demo-helpers/package.json | 6 ++--- .../package.json | 10 ++++----- .../console-base-error-prompt/package.json | 12 +++++----- packages/console-base-global/package.json | 4 ++-- .../package.json | 6 ++--- .../console-base-intl-factory/package.json | 8 +++---- packages/console-base-log-sls/package.json | 8 +++---- packages/console-base-messenger/package.json | 6 ++--- .../console-base-rc-breadcrumb/package.json | 4 ++-- packages/console-base-rc-button/package.json | 6 ++--- packages/console-base-rc-dialog/package.json | 16 +++++++------- .../console-base-rc-dropdown/package.json | 6 ++--- packages/console-base-rc-flex/package.json | 2 +- packages/console-base-rc-icon/package.json | 6 ++--- packages/console-base-rc-input/package.json | 6 ++--- packages/console-base-rc-intl/package.json | 4 ++-- .../console-base-rc-key-value/package.json | 4 ++-- packages/console-base-rc-loading/package.json | 10 ++++----- packages/console-base-rc-marks/package.json | 2 +- .../console-base-rc-pagination/package.json | 10 ++++----- .../console-base-styled-mixin/package.json | 2 +- packages/console-fetcher-basic/package.json | 22 +++++++++---------- .../package.json | 8 +++---- .../package.json | 18 +++++++-------- .../package.json | 10 ++++----- .../package.json | 8 +++---- .../package.json | 8 +++---- .../package.json | 10 ++++----- .../package.json | 20 ++++++++--------- .../package.json | 10 ++++----- packages/console-fetcher-proxy/package.json | 10 ++++----- packages/console-fetcher/package.json | 10 ++++----- packages/console-logger-sls/package.json | 12 +++++----- packages/console-one-conf/package.json | 6 ++--- packages/console-one-config/package.json | 2 +- packages/cookie/package.json | 4 ++-- packages/copy-text/package.json | 4 ++-- packages/demo-rc-elements/package.json | 2 +- packages/dom-event-hijacker/package.json | 4 ++-- packages/eslint-config/package.json | 2 +- packages/fetcher-demo-helpers/package.json | 4 ++-- packages/fetcher-fetch/package.json | 4 ++-- packages/fetcher-jsonp/package.json | 4 ++-- packages/fetcher/package.json | 10 ++++----- packages/logger-sls/package.json | 6 ++--- .../package.json | 2 +- packages/post-message/package.json | 4 ++-- packages/react-hook-is-unmounted/package.json | 2 +- packages/storage-factory/package.json | 2 +- packages/stylelint-config/package.json | 2 +- packages/viper-feature-gen/package.json | 4 ++-- 57 files changed, 191 insertions(+), 191 deletions(-) diff --git a/packages/base64/package.json b/packages/base64/package.json index 666179ed6..ef7489eac 100755 --- a/packages/base64/package.json +++ b/packages/base64/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/base64", - "version": "0.0.1", + "version": "0.0.2", "description": "Base64", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-common-typings/package.json b/packages/console-base-common-typings/package.json index 7506d3f0c..f76ea768d 100755 --- a/packages/console-base-common-typings/package.json +++ b/packages/console-base-common-typings/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-common-typings", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase common types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-account/package.json b/packages/console-base-conf-account/package.json index 6b5f24cb9..563b0468d 100755 --- a/packages/console-base-conf-account/package.json +++ b/packages/console-base-conf-account/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-account", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase CONF.ACCOUNT", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -34,8 +34,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.1", - "@alicloud/cookie": "^0.0.1" + "@alicloud/console-one-config": "^0.0.2", + "@alicloud/cookie": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-conf-env/package.json b/packages/console-base-conf-env/package.json index dc0ad214a..5d709b4b0 100755 --- a/packages/console-base-conf-env/package.json +++ b/packages/console-base-conf-env/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-env", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase CONF.ENV", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -34,8 +34,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.1", - "@alicloud/cookie": "^0.0.1" + "@alicloud/console-one-config": "^0.0.2", + "@alicloud/cookie": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-conf-locale/package.json b/packages/console-base-conf-locale/package.json index 6669f5de4..501592ef1 100755 --- a/packages/console-base-conf-locale/package.json +++ b/packages/console-base-conf-locale/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-locale", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase CONF.LOCALE", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/cookie": "^0.0.1", - "@alicloud/fetcher-jsonp": "^0.0.1", + "@alicloud/cookie": "^0.0.2", + "@alicloud/fetcher-jsonp": "^0.0.2", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-conf-product-id/package.json b/packages/console-base-conf-product-id/package.json index eec4b4dfe..53af4444e 100755 --- a/packages/console-base-conf-product-id/package.json +++ b/packages/console-base-conf-product-id/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-product-id", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase CONF product id", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-demo-helpers/package.json b/packages/console-base-demo-helpers/package.json index 826d5f006..1a384f131 100644 --- a/packages/console-base-demo-helpers/package.json +++ b/packages/console-base-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-demo-helpers", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase demo 助手", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-messenger": "^0.0.1", - "@alicloud/demo-rc-elements": "^0.0.3" + "@alicloud/console-base-messenger": "^0.0.2", + "@alicloud/demo-rc-elements": "^0.0.4" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-error-prompt-proxy/package.json b/packages/console-base-error-prompt-proxy/package.json index 0e9fd9e5e..061cdecf4 100644 --- a/packages/console-base-error-prompt-proxy/package.json +++ b/packages/console-base-error-prompt-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt-proxy", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 错误弹窗器(集中代理)", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "@types/styled-components": "^5.1.4", @@ -40,9 +40,9 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-error-prompt": "^0.0.1", - "@alicloud/console-base-global": "^0.0.1", - "@alicloud/console-base-messenger": "^0.0.1" + "@alicloud/console-base-error-prompt": "^0.0.2", + "@alicloud/console-base-global": "^0.0.2", + "@alicloud/console-base-messenger": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-error-prompt/package.json b/packages/console-base-error-prompt/package.json index 76c9f7ba8..f12540d68 100644 --- a/packages/console-base-error-prompt/package.json +++ b/packages/console-base-error-prompt/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 错误弹窗器", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/qs": "^6.9.5", @@ -42,10 +42,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/console-base-rc-button": "^0.0.1", - "@alicloud/console-base-rc-dialog": "^0.0.1", - "@alicloud/console-base-rc-pagination": "^0.0.1", + "@alicloud/console-base-intl-factory-basic": "^0.0.2", + "@alicloud/console-base-rc-button": "^0.0.2", + "@alicloud/console-base-rc-dialog": "^0.0.2", + "@alicloud/console-base-rc-pagination": "^0.0.2", "lodash": "^4.17.20", "qs": "^6.9.4" }, diff --git a/packages/console-base-global/package.json b/packages/console-base-global/package.json index 8575ed681..f4f5ff83c 100644 --- a/packages/console-base-global/package.json +++ b/packages/console-base-global/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-global", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 唯一官方指定全局变量... 的 API", "license": "MIT", "main": "build/cjs/index.js", @@ -32,7 +32,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-messenger": "^0.0.1" + "@alicloud/console-base-messenger": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-intl-factory-basic/package.json b/packages/console-base-intl-factory-basic/package.json index 80f7d666a..24041c89a 100755 --- a/packages/console-base-intl-factory-basic/package.json +++ b/packages/console-base-intl-factory-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory-basic", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase Intl Factory Basic, Pure Text, No JSX", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -36,7 +36,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-locale": "^0.0.1", + "@alicloud/console-base-conf-locale": "^0.0.2", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-intl-factory/package.json b/packages/console-base-intl-factory/package.json index 7f3b097fd..cf4bf5746 100755 --- a/packages/console-base-intl-factory/package.json +++ b/packages/console-base-intl-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase Intl Factory", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,8 +37,8 @@ "react": ">=16.8" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/console-base-rc-intl": "^0.0.1" + "@alicloud/console-base-intl-factory-basic": "^0.0.2", + "@alicloud/console-base-rc-intl": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-log-sls/package.json b/packages/console-base-log-sls/package.json index eedc7b434..cf74ba1fb 100755 --- a/packages/console-base-log-sls/package.json +++ b/packages/console-base-log-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-log-sls", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase Log SLS", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-product-id": "^0.0.1", - "@alicloud/console-logger-sls": "^0.0.1" + "@alicloud/console-base-conf-product-id": "^0.0.2", + "@alicloud/console-logger-sls": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-messenger/package.json b/packages/console-base-messenger/package.json index ab5664ae4..59bce5a7d 100755 --- a/packages/console-base-messenger/package.json +++ b/packages/console-base-messenger/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-messenger", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 信使 - 与控制台应用之间的交互", "license": "MIT", "main": "build/cjs/index.js", @@ -32,8 +32,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.1", - "@alicloud/post-message": "^0.0.1" + "@alicloud/console-base-common-typings": "^0.0.2", + "@alicloud/post-message": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-breadcrumb/package.json b/packages/console-base-rc-breadcrumb/package.json index f774e694a..f9b3339bb 100644 --- a/packages/console-base-rc-breadcrumb/package.json +++ b/packages/console-base-rc-breadcrumb/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-breadcrumb", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - 面包屑", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-styled-mixin": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-button/package.json b/packages/console-base-rc-button/package.json index ad6765980..b0b3debf0 100644 --- a/packages/console-base-rc-button/package.json +++ b/packages/console-base-rc-button/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-button", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - 按钮", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-rc-icon": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-rc-icon": "^0.0.2", + "@alicloud/console-base-styled-mixin": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-dialog/package.json b/packages/console-base-rc-dialog/package.json index 3f7ce3d68..de89016ef 100644 --- a/packages/console-base-rc-dialog/package.json +++ b/packages/console-base-rc-dialog/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dialog", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - Dialog", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -45,12 +45,12 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/console-base-rc-button": "^0.0.1", - "@alicloud/console-base-rc-icon": "^0.0.1", - "@alicloud/console-base-rc-input": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1", - "@alicloud/react-hook-is-unmounted": "^0.0.1", + "@alicloud/console-base-intl-factory-basic": "^0.0.2", + "@alicloud/console-base-rc-button": "^0.0.2", + "@alicloud/console-base-rc-icon": "^0.0.2", + "@alicloud/console-base-rc-input": "^0.0.2", + "@alicloud/console-base-styled-mixin": "^0.0.2", + "@alicloud/react-hook-is-unmounted": "^0.0.2", "immutability-helper": "^3.1.1", "lodash": "^4.17.20" }, diff --git a/packages/console-base-rc-dropdown/package.json b/packages/console-base-rc-dropdown/package.json index 144b958c1..1d5b4924a 100644 --- a/packages/console-base-rc-dropdown/package.json +++ b/packages/console-base-rc-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dropdown", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - 下拉", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -44,7 +44,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.2", "immutability-helper": "^3.1.1", "lodash": "^4.17.20" }, diff --git a/packages/console-base-rc-flex/package.json b/packages/console-base-rc-flex/package.json index b4bc8d728..6a6ac8028 100644 --- a/packages/console-base-rc-flex/package.json +++ b/packages/console-base-rc-flex/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-flex", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - Flex", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-icon/package.json b/packages/console-base-rc-icon/package.json index 0e87ba09a..198630973 100644 --- a/packages/console-base-rc-icon/package.json +++ b/packages/console-base-rc-icon/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-icon", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - 图标", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "@types/styled-components": "^5.1.4", @@ -40,7 +40,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-styled-mixin": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-input/package.json b/packages/console-base-rc-input/package.json index e7f5bdc08..5309c92bb 100644 --- a/packages/console-base-rc-input/package.json +++ b/packages/console-base-rc-input/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-input", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - Input", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-rc-icon": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-rc-icon": "^0.0.2", + "@alicloud/console-base-styled-mixin": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-intl/package.json b/packages/console-base-rc-intl/package.json index 918e7e77c..e08dcf4f7 100644 --- a/packages/console-base-rc-intl/package.json +++ b/packages/console-base-rc-intl/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-intl", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - 带样式的国际化文案展示", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-styled-mixin": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-key-value/package.json b/packages/console-base-rc-key-value/package.json index 935904d95..4de539028 100644 --- a/packages/console-base-rc-key-value/package.json +++ b/packages/console-base-rc-key-value/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-key-value", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - key-value 对的展示", "license": "MIT", "main": "build/cjs/index.js", @@ -40,7 +40,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.1", + "@alicloud/console-base-styled-mixin": "^0.0.2", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index 8a2035c75..ac9f2c2ba 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-loading", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - 加载中", "license": "MIT", "main": "build/cjs/index.js", @@ -40,10 +40,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.1", - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/console-base-rc-icon": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1", + "@alicloud/console-base-common-typings": "^0.0.2", + "@alicloud/console-base-intl-factory-basic": "^0.0.2", + "@alicloud/console-base-rc-icon": "^0.0.2", + "@alicloud/console-base-styled-mixin": "^0.0.2", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-rc-marks/package.json b/packages/console-base-rc-marks/package.json index 1f42d6fc8..8d5c2dd4a 100644 --- a/packages/console-base-rc-marks/package.json +++ b/packages/console-base-rc-marks/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-marks", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - NEW、ALPHA、BETA 等小标签", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-pagination/package.json b/packages/console-base-rc-pagination/package.json index 19b11342f..94f1e185b 100644 --- a/packages/console-base-rc-pagination/package.json +++ b/packages/console-base-rc-pagination/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-pagination", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase 组件 - 分页", "license": "MIT", "main": "build/cjs/index.js", @@ -39,10 +39,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/console-base-rc-button": "^0.0.1", - "@alicloud/console-base-rc-icon": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1" + "@alicloud/console-base-intl-factory-basic": "^0.0.2", + "@alicloud/console-base-rc-button": "^0.0.2", + "@alicloud/console-base-rc-icon": "^0.0.2", + "@alicloud/console-base-styled-mixin": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-styled-mixin/package.json b/packages/console-base-styled-mixin/package.json index 79fd094c1..951f78555 100644 --- a/packages/console-base-styled-mixin/package.json +++ b/packages/console-base-styled-mixin/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-styled-mixin", - "version": "0.0.1", + "version": "0.0.2", "description": "控制台专用的 styled mixin", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-basic/package.json b/packages/console-fetcher-basic/package.json index d9c9a530a..3aecff2fe 100644 --- a/packages/console-fetcher-basic/package.json +++ b/packages/console-fetcher-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-basic", - "version": "0.0.1", + "version": "0.0.2", "description": "控制台基础 Fetcher(无风控)", "license": "MIT", "main": "build/cjs/index.js", @@ -23,11 +23,11 @@ "basic" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^0.0.1", + "@alicloud/console-base-demo-helpers": "^0.0.2", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -37,13 +37,13 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-interceptor-arms": "^0.0.1", - "@alicloud/console-fetcher-interceptor-fecs": "^0.0.1", - "@alicloud/console-fetcher-interceptor-req-security": "^0.0.1", - "@alicloud/console-fetcher-interceptor-res-biz": "^0.0.1", - "@alicloud/console-fetcher-interceptor-res-error-message": "^0.0.1", - "@alicloud/console-fetcher-interceptor-sls": "^0.0.1", - "@alicloud/fetcher": "^0.0.1", + "@alicloud/console-fetcher-interceptor-arms": "^0.0.2", + "@alicloud/console-fetcher-interceptor-fecs": "^0.0.2", + "@alicloud/console-fetcher-interceptor-req-security": "^0.0.2", + "@alicloud/console-fetcher-interceptor-res-biz": "^0.0.2", + "@alicloud/console-fetcher-interceptor-res-error-message": "^0.0.2", + "@alicloud/console-fetcher-interceptor-sls": "^0.0.2", + "@alicloud/fetcher": "^0.0.2", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-fetcher-interceptor-arms/package.json b/packages/console-fetcher-interceptor-arms/package.json index f1acf4bcd..e5b37c0a0 100644 --- a/packages/console-fetcher-interceptor-arms/package.json +++ b/packages/console-fetcher-interceptor-arms/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-arms", - "version": "0.0.1", + "version": "0.0.2", "description": "@alicloud/console-fetcher ARMS 拦截", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.1", - "@alicloud/fetcher": "^0.0.1" + "@alicloud/console-base-common-typings": "^0.0.2", + "@alicloud/fetcher": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-fecs/package.json b/packages/console-fetcher-interceptor-fecs/package.json index f85ffa8b9..370331b28 100644 --- a/packages/console-fetcher-interceptor-fecs/package.json +++ b/packages/console-fetcher-interceptor-fecs/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-fecs", - "version": "0.0.1", + "version": "0.0.2", "description": "@alicloud/console-fetcher 请求 + 响应拦截 - FECS", "license": "MIT", "main": "build/cjs/index.js", @@ -24,11 +24,11 @@ "fecs" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^0.0.1", + "@alicloud/console-base-demo-helpers": "^0.0.2", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,11 +37,11 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-env": "^0.0.1", - "@alicloud/console-one-config": "^0.0.1", - "@alicloud/cookie": "^0.0.1", - "@alicloud/fetcher": "^0.0.1", - "@alicloud/fetcher-fetch": "^0.0.1" + "@alicloud/console-base-conf-env": "^0.0.2", + "@alicloud/console-one-config": "^0.0.2", + "@alicloud/cookie": "^0.0.2", + "@alicloud/fetcher": "^0.0.2", + "@alicloud/fetcher-fetch": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-req-mock/package.json b/packages/console-fetcher-interceptor-req-mock/package.json index ab9fa71c9..2a4815872 100644 --- a/packages/console-fetcher-interceptor-req-mock/package.json +++ b/packages/console-fetcher-interceptor-req-mock/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-mock", - "version": "0.0.1", + "version": "0.0.2", "description": "@alicloud/console-fetcher 请求拦截 - mock 转接", "license": "MIT", "main": "build/cjs/index.js", @@ -27,8 +27,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -38,8 +38,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-env": "^0.0.1", - "@alicloud/fetcher": "^0.0.1" + "@alicloud/console-base-conf-env": "^0.0.2", + "@alicloud/fetcher": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-req-security/package.json b/packages/console-fetcher-interceptor-req-security/package.json index adf558c8b..c690d700a 100644 --- a/packages/console-fetcher-interceptor-req-security/package.json +++ b/packages/console-fetcher-interceptor-req-security/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-security", - "version": "0.0.1", + "version": "0.0.2", "description": "@alicloud/console-fetcher 请求拦截 - 类 POST 请求添加安全参数", "license": "MIT", "main": "build/cjs/index.js", @@ -27,8 +27,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -38,7 +38,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher": "^0.0.1" + "@alicloud/fetcher": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-biz/package.json b/packages/console-fetcher-interceptor-res-biz/package.json index 8958bee1c..eefdbe055 100644 --- a/packages/console-fetcher-interceptor-res-biz/package.json +++ b/packages/console-fetcher-interceptor-res-biz/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-biz", - "version": "0.0.1", + "version": "0.0.2", "description": "@alicloud/console-fetcher 响应拦截 - 业务层错误", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,7 +37,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher": "^0.0.1" + "@alicloud/fetcher": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-error-message/package.json b/packages/console-fetcher-interceptor-res-error-message/package.json index 86d61f38d..0d8d7cf9a 100644 --- a/packages/console-fetcher-interceptor-res-error-message/package.json +++ b/packages/console-fetcher-interceptor-res-error-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-error-message", - "version": "0.0.1", + "version": "0.0.2", "description": "@alicloud/console-fetcher 响应拦截 - 一般性错误 message 国际化", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,8 +37,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.1", - "@alicloud/fetcher": "^0.0.1" + "@alicloud/console-base-intl-factory-basic": "^0.0.2", + "@alicloud/fetcher": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-risk/package.json b/packages/console-fetcher-interceptor-res-risk/package.json index b1151526d..9911a85f7 100644 --- a/packages/console-fetcher-interceptor-res-risk/package.json +++ b/packages/console-fetcher-interceptor-res-risk/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-risk", - "version": "0.0.1", + "version": "0.0.2", "description": "@alicloud/console-fetcher 响应拦截 - 风控处理", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -42,13 +42,13 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory": "^0.0.1", - "@alicloud/console-base-rc-button": "^0.0.1", - "@alicloud/console-base-rc-dialog": "^0.0.1", - "@alicloud/console-base-rc-flex": "^0.0.1", - "@alicloud/console-base-rc-input": "^0.0.1", - "@alicloud/console-base-styled-mixin": "^0.0.1", - "@alicloud/fetcher": "^0.0.1", + "@alicloud/console-base-intl-factory": "^0.0.2", + "@alicloud/console-base-rc-button": "^0.0.2", + "@alicloud/console-base-rc-dialog": "^0.0.2", + "@alicloud/console-base-rc-flex": "^0.0.2", + "@alicloud/console-base-rc-input": "^0.0.2", + "@alicloud/console-base-styled-mixin": "^0.0.2", + "@alicloud/fetcher": "^0.0.2", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-fetcher-interceptor-sls/package.json b/packages/console-fetcher-interceptor-sls/package.json index 9f253d14c..9889f1608 100755 --- a/packages/console-fetcher-interceptor-sls/package.json +++ b/packages/console-fetcher-interceptor-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-sls", - "version": "0.0.1", + "version": "0.0.2", "description": "SLS logger interceptor for @alicloud/console-fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -25,8 +25,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -36,8 +36,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-logger-sls": "^0.0.1", - "@alicloud/fetcher": "^0.0.1" + "@alicloud/console-logger-sls": "^0.0.2", + "@alicloud/fetcher": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-proxy/package.json b/packages/console-fetcher-proxy/package.json index 436b0beda..42cf8c550 100644 --- a/packages/console-fetcher-proxy/package.json +++ b/packages/console-fetcher-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-proxy", - "version": "0.0.1", + "version": "0.0.2", "description": "控制台 fetcher 代理", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,9 +35,9 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-global": "^0.0.1", - "@alicloud/console-base-messenger": "^0.0.1", - "@alicloud/console-fetcher": "^0.0.1" + "@alicloud/console-base-global": "^0.0.2", + "@alicloud/console-base-messenger": "^0.0.2", + "@alicloud/console-fetcher": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher/package.json b/packages/console-fetcher/package.json index c4bda0077..573e04809 100644 --- a/packages/console-fetcher/package.json +++ b/packages/console-fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher", - "version": "0.0.1", + "version": "0.0.2", "description": "控制台 fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -24,8 +24,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-basic": "^0.0.1", - "@alicloud/console-fetcher-interceptor-res-risk": "^0.0.1" + "@alicloud/console-fetcher-basic": "^0.0.2", + "@alicloud/console-fetcher-interceptor-res-risk": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-logger-sls/package.json b/packages/console-logger-sls/package.json index 36c08da0f..7a46a53f3 100755 --- a/packages/console-logger-sls/package.json +++ b/packages/console-logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-logger-sls", - "version": "0.0.1", + "version": "0.0.2", "description": "SLS logger factory for console", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,10 +35,10 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-account": "^0.0.1", - "@alicloud/console-base-conf-env": "^0.0.1", - "@alicloud/console-base-conf-locale": "^0.0.1", - "@alicloud/logger-sls": "^0.0.1" + "@alicloud/console-base-conf-account": "^0.0.2", + "@alicloud/console-base-conf-env": "^0.0.2", + "@alicloud/console-base-conf-locale": "^0.0.2", + "@alicloud/logger-sls": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-one-conf/package.json b/packages/console-one-conf/package.json index 540478f72..e617110af 100755 --- a/packages/console-one-conf/package.json +++ b/packages/console-one-conf/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-conf", - "version": "0.0.1", + "version": "0.0.2", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", @@ -32,8 +32,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.1", - "@alicloud/viper-feature-gen": "^0.0.1" + "@alicloud/console-one-config": "^0.0.2", + "@alicloud/viper-feature-gen": "^0.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-one-config/package.json b/packages/console-one-config/package.json index 20b0cea27..e5dce7e19 100755 --- a/packages/console-one-config/package.json +++ b/packages/console-one-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-config", - "version": "0.0.1", + "version": "0.0.2", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/cookie/package.json b/packages/cookie/package.json index f7d4c9b12..53a0dbcd2 100755 --- a/packages/cookie/package.json +++ b/packages/cookie/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/cookie", - "version": "0.0.1", + "version": "0.0.2", "description": "ConsoleBase Cookie", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/copy-text/package.json b/packages/copy-text/package.json index 1e0685c96..ff4dc90d3 100755 --- a/packages/copy-text/package.json +++ b/packages/copy-text/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/copy-text", - "version": "0.0.1", + "version": "0.0.2", "description": "Copy Text", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/demo-rc-elements/package.json b/packages/demo-rc-elements/package.json index 25504f6b2..ce6d11955 100644 --- a/packages/demo-rc-elements/package.json +++ b/packages/demo-rc-elements/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/demo-rc-elements", - "version": "0.0.3", + "version": "0.0.4", "description": "专用于 demo 的元素,为了好看和方便,切不可用于生产", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/dom-event-hijacker/package.json b/packages/dom-event-hijacker/package.json index 8fac6a874..3b105c519 100644 --- a/packages/dom-event-hijacker/package.json +++ b/packages/dom-event-hijacker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/dom-event-hijacker", - "version": "0.0.1", + "version": "0.0.2", "description": "DOM 事件拦截,类似于 jQuery 的 delegate", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "jest": "^26.6.3", "react": "^16.14.0", diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 5e949c3cd..9318853ab 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/eslint-config", - "version": "0.0.2", + "version": "0.0.3", "description": "eslint config based on eslint-config-ali", "license": "MIT", "main": "index.js", diff --git a/packages/fetcher-demo-helpers/package.json b/packages/fetcher-demo-helpers/package.json index e9269f77f..b12754c57 100644 --- a/packages/fetcher-demo-helpers/package.json +++ b/packages/fetcher-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-demo-helpers", - "version": "0.0.1", + "version": "0.0.2", "description": "fetcher 测试专用包,避免代码冗余", "license": "MIT", "main": "build/cjs/index.js", @@ -37,7 +37,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/demo-rc-elements": "^0.0.3" + "@alicloud/demo-rc-elements": "^0.0.4" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/fetcher-fetch/package.json b/packages/fetcher-fetch/package.json index 4c24bf8a1..9643bb253 100644 --- a/packages/fetcher-fetch/package.json +++ b/packages/fetcher-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-fetch", - "version": "0.0.1", + "version": "0.0.2", "description": "@alicloud/fetcher 的底层 fetch 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/fetcher-jsonp/package.json b/packages/fetcher-jsonp/package.json index 823d2309f..28fdf48bd 100644 --- a/packages/fetcher-jsonp/package.json +++ b/packages/fetcher-jsonp/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-jsonp", - "version": "0.0.1", + "version": "0.0.2", "description": "fetcher 的底层 jsonp 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/fetcher/package.json b/packages/fetcher/package.json index cc57abdf8..ee6be882e 100644 --- a/packages/fetcher/package.json +++ b/packages/fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher", - "version": "0.0.1", + "version": "0.0.2", "description": "类似 axios,封装 fetch/jsonp,可以加拦截器", "license": "MIT", "main": "build/cjs/index.js", @@ -28,8 +28,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", - "@alicloud/fetcher-demo-helpers": "^0.0.1", + "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/fetcher-demo-helpers": "^0.0.2", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/qs": "^6.9.5", @@ -40,8 +40,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher-fetch": "^0.0.1", - "@alicloud/fetcher-jsonp": "^0.0.1", + "@alicloud/fetcher-fetch": "^0.0.2", + "@alicloud/fetcher-jsonp": "^0.0.2", "lodash": "^4.17.20", "qs": "^6.9.4" }, diff --git a/packages/logger-sls/package.json b/packages/logger-sls/package.json index 600969d41..70265818b 100755 --- a/packages/logger-sls/package.json +++ b/packages/logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/logger-sls", - "version": "0.0.1", + "version": "0.0.2", "description": "SLS logger factory", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/qs": "^6.9.5", "@types/react": "^16.14.2", @@ -36,7 +36,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher-fetch": "^0.0.1", + "@alicloud/fetcher-fetch": "^0.0.2", "qs": "^6.9.4" }, "scripts": { diff --git a/packages/mixed-black-whitelist-checker/package.json b/packages/mixed-black-whitelist-checker/package.json index d1d55749d..da660749e 100755 --- a/packages/mixed-black-whitelist-checker/package.json +++ b/packages/mixed-black-whitelist-checker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/mixed-black-whitelist-checker", - "version": "0.0.1", + "version": "0.0.2", "description": "混合黑白名单检查器", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/post-message/package.json b/packages/post-message/package.json index 8ce07c7e7..e97a40e3f 100755 --- a/packages/post-message/package.json +++ b/packages/post-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/post-message", - "version": "0.0.1", + "version": "0.0.2", "description": "postMessage 封装,可以用成 Promise", "license": "MIT", "main": "build/cjs/index.js", @@ -27,7 +27,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.3", + "@alicloud/demo-rc-elements": "^0.0.4", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", diff --git a/packages/react-hook-is-unmounted/package.json b/packages/react-hook-is-unmounted/package.json index e8eb5de7f..33e26d6a8 100644 --- a/packages/react-hook-is-unmounted/package.json +++ b/packages/react-hook-is-unmounted/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/react-hook-is-unmounted", - "version": "0.0.1", + "version": "0.0.2", "description": "React Hook - 是否已被 unmount", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/storage-factory/package.json b/packages/storage-factory/package.json index 4cf94baf1..f04e2b31b 100755 --- a/packages/storage-factory/package.json +++ b/packages/storage-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/storage-factory", - "version": "0.0.1", + "version": "0.0.2", "description": "Storage factory - use storage with types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/stylelint-config/package.json b/packages/stylelint-config/package.json index 5fc8cd930..261efd081 100644 --- a/packages/stylelint-config/package.json +++ b/packages/stylelint-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/stylelint-config", - "version": "0.0.2", + "version": "0.0.3", "description": "stylelint configuration", "license": "MIT", "main": "index.js", diff --git a/packages/viper-feature-gen/package.json b/packages/viper-feature-gen/package.json index 81bce288c..c3e606ff8 100755 --- a/packages/viper-feature-gen/package.json +++ b/packages/viper-feature-gen/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/viper-feature-gen", - "version": "0.0.1", + "version": "0.0.2", "description": "阿里云控制台(接入 viper)功能开关检查(工厂方法)", "license": "MIT", "main": "build/cjs/index.js", @@ -34,7 +34,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/mixed-black-whitelist-checker": "^0.0.1", + "@alicloud/mixed-black-whitelist-checker": "^0.0.2", "lodash": "^4.17.20" }, "scripts": { From 53eed121738e7598eae7d0eaeee32f577fd90b37 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 10:29:43 +0800 Subject: [PATCH 124/135] CHORE up --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ffc3ba31e..2293e7e08 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "packages/*" ], "devDependencies": { - "@alicloud/eslint-config": "^0.0.1", - "@alicloud/stylelint-config": "^0.0.1", + "@alicloud/eslint-config": "^0.0.3", + "@alicloud/stylelint-config": "^0.0.3", "@types/react": "^16.14.2", "@types/react-dom": "^16.9.10", "eslint": "^7.14.0", From 524686f0ed8b1a46d9ce1deaa4bb520d7ac2abed Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 10:41:47 +0800 Subject: [PATCH 125/135] Publish - @alicloud/base64@1.0.0 - @alicloud/console-base-common-typings@1.0.0 - @alicloud/console-base-conf-account@1.0.0 - @alicloud/console-base-conf-env@1.0.0 - @alicloud/console-base-conf-locale@1.0.0 - @alicloud/console-base-conf-product-id@1.0.0 - @alicloud/console-base-demo-helpers@1.0.0 - @alicloud/console-base-error-prompt-proxy@1.0.0 - @alicloud/console-base-error-prompt@1.0.0 - @alicloud/console-base-global@1.0.0 - @alicloud/console-base-intl-factory-basic@1.0.0 - @alicloud/console-base-intl-factory@1.0.0 - @alicloud/console-base-log-sls@1.0.0 - @alicloud/console-base-messenger@1.0.0 - @alicloud/console-base-rc-breadcrumb@1.0.0 - @alicloud/console-base-rc-button@1.0.0 - @alicloud/console-base-rc-dialog@1.0.0 - @alicloud/console-base-rc-dropdown@1.0.0 - @alicloud/console-base-rc-flex@1.0.0 - @alicloud/console-base-rc-icon@1.0.0 - @alicloud/console-base-rc-input@1.0.0 - @alicloud/console-base-rc-intl@1.0.0 - @alicloud/console-base-rc-key-value@1.0.0 - @alicloud/console-base-rc-loading@1.0.0 - @alicloud/console-base-rc-marks@1.0.0 - @alicloud/console-base-rc-pagination@1.0.0 - @alicloud/console-base-styled-mixin@1.0.0 - @alicloud/console-fetcher-basic@1.0.0 - @alicloud/console-fetcher-interceptor-arms@1.0.0 - @alicloud/console-fetcher-interceptor-fecs@1.0.0 - @alicloud/console-fetcher-interceptor-req-mock@1.0.0 - @alicloud/console-fetcher-interceptor-req-security@1.0.0 - @alicloud/console-fetcher-interceptor-res-biz@1.0.0 - @alicloud/console-fetcher-interceptor-res-error-message@1.0.0 - @alicloud/console-fetcher-interceptor-res-risk@1.0.0 - @alicloud/console-fetcher-interceptor-sls@1.0.0 - @alicloud/console-fetcher-proxy@1.0.0 - @alicloud/console-fetcher@1.0.0 - @alicloud/console-logger-sls@1.0.0 - @alicloud/console-one-conf@1.0.0 - @alicloud/console-one-config@1.0.0 - @alicloud/cookie@1.0.0 - @alicloud/copy-text@1.0.0 - @alicloud/demo-rc-elements@1.0.0 - @alicloud/dom-event-hijacker@1.0.0 - @alicloud/eslint-config@1.0.0 - @alicloud/fetcher-demo-helpers@1.0.0 - @alicloud/fetcher-fetch@1.0.0 - @alicloud/fetcher-jsonp@1.0.0 - @alicloud/fetcher@1.0.0 - @alicloud/logger-sls@1.0.0 - @alicloud/mixed-black-whitelist-checker@1.0.0 - @alicloud/post-message@1.0.0 - @alicloud/react-hook-is-unmounted@1.0.0 - @alicloud/storage-factory@1.0.0 - @alicloud/stylelint-config@1.0.0 - @alicloud/viper-feature-gen@1.0.0 --- packages/base64/package.json | 2 +- .../console-base-common-typings/package.json | 2 +- .../console-base-conf-account/package.json | 8 +++---- packages/console-base-conf-env/package.json | 8 +++---- .../console-base-conf-locale/package.json | 8 +++---- .../console-base-conf-product-id/package.json | 2 +- .../console-base-demo-helpers/package.json | 6 ++--- .../package.json | 10 ++++----- .../console-base-error-prompt/package.json | 12 +++++----- packages/console-base-global/package.json | 4 ++-- .../package.json | 6 ++--- .../console-base-intl-factory/package.json | 8 +++---- packages/console-base-log-sls/package.json | 8 +++---- packages/console-base-messenger/package.json | 6 ++--- .../console-base-rc-breadcrumb/package.json | 4 ++-- packages/console-base-rc-button/package.json | 6 ++--- packages/console-base-rc-dialog/package.json | 16 +++++++------- .../console-base-rc-dropdown/package.json | 6 ++--- packages/console-base-rc-flex/package.json | 2 +- packages/console-base-rc-icon/package.json | 6 ++--- packages/console-base-rc-input/package.json | 6 ++--- packages/console-base-rc-intl/package.json | 4 ++-- .../console-base-rc-key-value/package.json | 4 ++-- packages/console-base-rc-loading/package.json | 10 ++++----- packages/console-base-rc-marks/package.json | 2 +- .../console-base-rc-pagination/package.json | 10 ++++----- .../console-base-styled-mixin/package.json | 2 +- packages/console-fetcher-basic/package.json | 22 +++++++++---------- .../package.json | 8 +++---- .../package.json | 18 +++++++-------- .../package.json | 10 ++++----- .../package.json | 8 +++---- .../package.json | 8 +++---- .../package.json | 10 ++++----- .../package.json | 20 ++++++++--------- .../package.json | 10 ++++----- packages/console-fetcher-proxy/package.json | 10 ++++----- packages/console-fetcher/package.json | 10 ++++----- packages/console-logger-sls/package.json | 12 +++++----- packages/console-one-conf/package.json | 6 ++--- packages/console-one-config/package.json | 2 +- packages/cookie/package.json | 4 ++-- packages/copy-text/package.json | 4 ++-- packages/demo-rc-elements/package.json | 2 +- packages/dom-event-hijacker/package.json | 4 ++-- packages/eslint-config/package.json | 2 +- packages/fetcher-demo-helpers/package.json | 4 ++-- packages/fetcher-fetch/package.json | 4 ++-- packages/fetcher-jsonp/package.json | 4 ++-- packages/fetcher/package.json | 10 ++++----- packages/logger-sls/package.json | 6 ++--- .../package.json | 2 +- packages/post-message/package.json | 4 ++-- packages/react-hook-is-unmounted/package.json | 2 +- packages/storage-factory/package.json | 2 +- packages/stylelint-config/package.json | 2 +- packages/viper-feature-gen/package.json | 4 ++-- 57 files changed, 191 insertions(+), 191 deletions(-) diff --git a/packages/base64/package.json b/packages/base64/package.json index ef7489eac..c49db4fd7 100755 --- a/packages/base64/package.json +++ b/packages/base64/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/base64", - "version": "0.0.2", + "version": "1.0.0", "description": "Base64", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-common-typings/package.json b/packages/console-base-common-typings/package.json index f76ea768d..327f68b66 100755 --- a/packages/console-base-common-typings/package.json +++ b/packages/console-base-common-typings/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-common-typings", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase common types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-conf-account/package.json b/packages/console-base-conf-account/package.json index 563b0468d..fd24a5739 100755 --- a/packages/console-base-conf-account/package.json +++ b/packages/console-base-conf-account/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-account", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase CONF.ACCOUNT", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -34,8 +34,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.2", - "@alicloud/cookie": "^0.0.2" + "@alicloud/console-one-config": "^1.0.0", + "@alicloud/cookie": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-conf-env/package.json b/packages/console-base-conf-env/package.json index 5d709b4b0..ca1f1d7e6 100755 --- a/packages/console-base-conf-env/package.json +++ b/packages/console-base-conf-env/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-env", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase CONF.ENV", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -34,8 +34,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.2", - "@alicloud/cookie": "^0.0.2" + "@alicloud/console-one-config": "^1.0.0", + "@alicloud/cookie": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-conf-locale/package.json b/packages/console-base-conf-locale/package.json index 501592ef1..20785a9ce 100755 --- a/packages/console-base-conf-locale/package.json +++ b/packages/console-base-conf-locale/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-locale", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase CONF.LOCALE", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/cookie": "^0.0.2", - "@alicloud/fetcher-jsonp": "^0.0.2", + "@alicloud/cookie": "^1.0.0", + "@alicloud/fetcher-jsonp": "^1.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-conf-product-id/package.json b/packages/console-base-conf-product-id/package.json index 53af4444e..23002120d 100755 --- a/packages/console-base-conf-product-id/package.json +++ b/packages/console-base-conf-product-id/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-conf-product-id", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase CONF product id", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-demo-helpers/package.json b/packages/console-base-demo-helpers/package.json index 1a384f131..5195bf1b0 100644 --- a/packages/console-base-demo-helpers/package.json +++ b/packages/console-base-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-demo-helpers", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase demo 助手", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-messenger": "^0.0.2", - "@alicloud/demo-rc-elements": "^0.0.4" + "@alicloud/console-base-messenger": "^1.0.0", + "@alicloud/demo-rc-elements": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-error-prompt-proxy/package.json b/packages/console-base-error-prompt-proxy/package.json index 061cdecf4..57e319ca0 100644 --- a/packages/console-base-error-prompt-proxy/package.json +++ b/packages/console-base-error-prompt-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt-proxy", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 错误弹窗器(集中代理)", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "@types/styled-components": "^5.1.4", @@ -40,9 +40,9 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-error-prompt": "^0.0.2", - "@alicloud/console-base-global": "^0.0.2", - "@alicloud/console-base-messenger": "^0.0.2" + "@alicloud/console-base-error-prompt": "^1.0.0", + "@alicloud/console-base-global": "^1.0.0", + "@alicloud/console-base-messenger": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-error-prompt/package.json b/packages/console-base-error-prompt/package.json index f12540d68..a8aa86e34 100644 --- a/packages/console-base-error-prompt/package.json +++ b/packages/console-base-error-prompt/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 错误弹窗器", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/qs": "^6.9.5", @@ -42,10 +42,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.2", - "@alicloud/console-base-rc-button": "^0.0.2", - "@alicloud/console-base-rc-dialog": "^0.0.2", - "@alicloud/console-base-rc-pagination": "^0.0.2", + "@alicloud/console-base-intl-factory-basic": "^1.0.0", + "@alicloud/console-base-rc-button": "^1.0.0", + "@alicloud/console-base-rc-dialog": "^1.0.0", + "@alicloud/console-base-rc-pagination": "^1.0.0", "lodash": "^4.17.20", "qs": "^6.9.4" }, diff --git a/packages/console-base-global/package.json b/packages/console-base-global/package.json index f4f5ff83c..16a4d8693 100644 --- a/packages/console-base-global/package.json +++ b/packages/console-base-global/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-global", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 唯一官方指定全局变量... 的 API", "license": "MIT", "main": "build/cjs/index.js", @@ -32,7 +32,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-messenger": "^0.0.2" + "@alicloud/console-base-messenger": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-intl-factory-basic/package.json b/packages/console-base-intl-factory-basic/package.json index 24041c89a..ce5fe8bcf 100755 --- a/packages/console-base-intl-factory-basic/package.json +++ b/packages/console-base-intl-factory-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory-basic", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase Intl Factory Basic, Pure Text, No JSX", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -36,7 +36,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-locale": "^0.0.2", + "@alicloud/console-base-conf-locale": "^1.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-intl-factory/package.json b/packages/console-base-intl-factory/package.json index cf4bf5746..87da05fca 100755 --- a/packages/console-base-intl-factory/package.json +++ b/packages/console-base-intl-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-intl-factory", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase Intl Factory", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,8 +37,8 @@ "react": ">=16.8" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.2", - "@alicloud/console-base-rc-intl": "^0.0.2" + "@alicloud/console-base-intl-factory-basic": "^1.0.0", + "@alicloud/console-base-rc-intl": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-log-sls/package.json b/packages/console-base-log-sls/package.json index cf74ba1fb..cc94bf3d1 100755 --- a/packages/console-base-log-sls/package.json +++ b/packages/console-base-log-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-log-sls", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase Log SLS", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-product-id": "^0.0.2", - "@alicloud/console-logger-sls": "^0.0.2" + "@alicloud/console-base-conf-product-id": "^1.0.0", + "@alicloud/console-logger-sls": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-messenger/package.json b/packages/console-base-messenger/package.json index 59bce5a7d..216d3c590 100755 --- a/packages/console-base-messenger/package.json +++ b/packages/console-base-messenger/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-messenger", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 信使 - 与控制台应用之间的交互", "license": "MIT", "main": "build/cjs/index.js", @@ -32,8 +32,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.2", - "@alicloud/post-message": "^0.0.2" + "@alicloud/console-base-common-typings": "^1.0.0", + "@alicloud/post-message": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-breadcrumb/package.json b/packages/console-base-rc-breadcrumb/package.json index f9b3339bb..517d32929 100644 --- a/packages/console-base-rc-breadcrumb/package.json +++ b/packages/console-base-rc-breadcrumb/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-breadcrumb", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - 面包屑", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.2" + "@alicloud/console-base-styled-mixin": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-button/package.json b/packages/console-base-rc-button/package.json index b0b3debf0..4af5396db 100644 --- a/packages/console-base-rc-button/package.json +++ b/packages/console-base-rc-button/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-button", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - 按钮", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-rc-icon": "^0.0.2", - "@alicloud/console-base-styled-mixin": "^0.0.2" + "@alicloud/console-base-rc-icon": "^1.0.0", + "@alicloud/console-base-styled-mixin": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-dialog/package.json b/packages/console-base-rc-dialog/package.json index de89016ef..9827d1fba 100644 --- a/packages/console-base-rc-dialog/package.json +++ b/packages/console-base-rc-dialog/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dialog", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - Dialog", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -45,12 +45,12 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.2", - "@alicloud/console-base-rc-button": "^0.0.2", - "@alicloud/console-base-rc-icon": "^0.0.2", - "@alicloud/console-base-rc-input": "^0.0.2", - "@alicloud/console-base-styled-mixin": "^0.0.2", - "@alicloud/react-hook-is-unmounted": "^0.0.2", + "@alicloud/console-base-intl-factory-basic": "^1.0.0", + "@alicloud/console-base-rc-button": "^1.0.0", + "@alicloud/console-base-rc-icon": "^1.0.0", + "@alicloud/console-base-rc-input": "^1.0.0", + "@alicloud/console-base-styled-mixin": "^1.0.0", + "@alicloud/react-hook-is-unmounted": "^1.0.0", "immutability-helper": "^3.1.1", "lodash": "^4.17.20" }, diff --git a/packages/console-base-rc-dropdown/package.json b/packages/console-base-rc-dropdown/package.json index 1d5b4924a..e140cbf5a 100644 --- a/packages/console-base-rc-dropdown/package.json +++ b/packages/console-base-rc-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-dropdown", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - 下拉", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -44,7 +44,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.2", + "@alicloud/console-base-styled-mixin": "^1.0.0", "immutability-helper": "^3.1.1", "lodash": "^4.17.20" }, diff --git a/packages/console-base-rc-flex/package.json b/packages/console-base-rc-flex/package.json index 6a6ac8028..a1eae8d32 100644 --- a/packages/console-base-rc-flex/package.json +++ b/packages/console-base-rc-flex/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-flex", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - Flex", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-icon/package.json b/packages/console-base-rc-icon/package.json index 198630973..fc98bf79a 100644 --- a/packages/console-base-rc-icon/package.json +++ b/packages/console-base-rc-icon/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-icon", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - 图标", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "@types/styled-components": "^5.1.4", @@ -40,7 +40,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.2" + "@alicloud/console-base-styled-mixin": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-input/package.json b/packages/console-base-rc-input/package.json index 5309c92bb..82a7ae25c 100644 --- a/packages/console-base-rc-input/package.json +++ b/packages/console-base-rc-input/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-input", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - Input", "license": "MIT", "main": "build/cjs/index.js", @@ -39,8 +39,8 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-rc-icon": "^0.0.2", - "@alicloud/console-base-styled-mixin": "^0.0.2" + "@alicloud/console-base-rc-icon": "^1.0.0", + "@alicloud/console-base-styled-mixin": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-intl/package.json b/packages/console-base-rc-intl/package.json index e08dcf4f7..e5503a250 100644 --- a/packages/console-base-rc-intl/package.json +++ b/packages/console-base-rc-intl/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-intl", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - 带样式的国际化文案展示", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.2" + "@alicloud/console-base-styled-mixin": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-rc-key-value/package.json b/packages/console-base-rc-key-value/package.json index 4de539028..668a1690b 100644 --- a/packages/console-base-rc-key-value/package.json +++ b/packages/console-base-rc-key-value/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-key-value", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - key-value 对的展示", "license": "MIT", "main": "build/cjs/index.js", @@ -40,7 +40,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-styled-mixin": "^0.0.2", + "@alicloud/console-base-styled-mixin": "^1.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index ac9f2c2ba..58c667c45 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-loading", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - 加载中", "license": "MIT", "main": "build/cjs/index.js", @@ -40,10 +40,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.2", - "@alicloud/console-base-intl-factory-basic": "^0.0.2", - "@alicloud/console-base-rc-icon": "^0.0.2", - "@alicloud/console-base-styled-mixin": "^0.0.2", + "@alicloud/console-base-common-typings": "^1.0.0", + "@alicloud/console-base-intl-factory-basic": "^1.0.0", + "@alicloud/console-base-rc-icon": "^1.0.0", + "@alicloud/console-base-styled-mixin": "^1.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-rc-marks/package.json b/packages/console-base-rc-marks/package.json index 8d5c2dd4a..91ab365a9 100644 --- a/packages/console-base-rc-marks/package.json +++ b/packages/console-base-rc-marks/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-marks", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - NEW、ALPHA、BETA 等小标签", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-base-rc-pagination/package.json b/packages/console-base-rc-pagination/package.json index 94f1e185b..ea978bbcc 100644 --- a/packages/console-base-rc-pagination/package.json +++ b/packages/console-base-rc-pagination/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-pagination", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase 组件 - 分页", "license": "MIT", "main": "build/cjs/index.js", @@ -39,10 +39,10 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.2", - "@alicloud/console-base-rc-button": "^0.0.2", - "@alicloud/console-base-rc-icon": "^0.0.2", - "@alicloud/console-base-styled-mixin": "^0.0.2" + "@alicloud/console-base-intl-factory-basic": "^1.0.0", + "@alicloud/console-base-rc-button": "^1.0.0", + "@alicloud/console-base-rc-icon": "^1.0.0", + "@alicloud/console-base-styled-mixin": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-styled-mixin/package.json b/packages/console-base-styled-mixin/package.json index 951f78555..f6cb103ad 100644 --- a/packages/console-base-styled-mixin/package.json +++ b/packages/console-base-styled-mixin/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-styled-mixin", - "version": "0.0.2", + "version": "1.0.0", "description": "控制台专用的 styled mixin", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-basic/package.json b/packages/console-fetcher-basic/package.json index 3aecff2fe..b6ea90e42 100644 --- a/packages/console-fetcher-basic/package.json +++ b/packages/console-fetcher-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-basic", - "version": "0.0.2", + "version": "1.0.0", "description": "控制台基础 Fetcher(无风控)", "license": "MIT", "main": "build/cjs/index.js", @@ -23,11 +23,11 @@ "basic" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^0.0.2", + "@alicloud/console-base-demo-helpers": "^1.0.0", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/demo-rc-elements": "^1.0.0", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -37,13 +37,13 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-interceptor-arms": "^0.0.2", - "@alicloud/console-fetcher-interceptor-fecs": "^0.0.2", - "@alicloud/console-fetcher-interceptor-req-security": "^0.0.2", - "@alicloud/console-fetcher-interceptor-res-biz": "^0.0.2", - "@alicloud/console-fetcher-interceptor-res-error-message": "^0.0.2", - "@alicloud/console-fetcher-interceptor-sls": "^0.0.2", - "@alicloud/fetcher": "^0.0.2", + "@alicloud/console-fetcher-interceptor-arms": "^1.0.0", + "@alicloud/console-fetcher-interceptor-fecs": "^1.0.0", + "@alicloud/console-fetcher-interceptor-req-security": "^1.0.0", + "@alicloud/console-fetcher-interceptor-res-biz": "^1.0.0", + "@alicloud/console-fetcher-interceptor-res-error-message": "^1.0.0", + "@alicloud/console-fetcher-interceptor-sls": "^1.0.0", + "@alicloud/fetcher": "^1.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-fetcher-interceptor-arms/package.json b/packages/console-fetcher-interceptor-arms/package.json index e5b37c0a0..ec61cc566 100644 --- a/packages/console-fetcher-interceptor-arms/package.json +++ b/packages/console-fetcher-interceptor-arms/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-arms", - "version": "0.0.2", + "version": "1.0.0", "description": "@alicloud/console-fetcher ARMS 拦截", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-common-typings": "^0.0.2", - "@alicloud/fetcher": "^0.0.2" + "@alicloud/console-base-common-typings": "^1.0.0", + "@alicloud/fetcher": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-fecs/package.json b/packages/console-fetcher-interceptor-fecs/package.json index 370331b28..4513bca70 100644 --- a/packages/console-fetcher-interceptor-fecs/package.json +++ b/packages/console-fetcher-interceptor-fecs/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-fecs", - "version": "0.0.2", + "version": "1.0.0", "description": "@alicloud/console-fetcher 请求 + 响应拦截 - FECS", "license": "MIT", "main": "build/cjs/index.js", @@ -24,11 +24,11 @@ "fecs" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^0.0.2", + "@alicloud/console-base-demo-helpers": "^1.0.0", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/demo-rc-elements": "^1.0.0", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,11 +37,11 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-env": "^0.0.2", - "@alicloud/console-one-config": "^0.0.2", - "@alicloud/cookie": "^0.0.2", - "@alicloud/fetcher": "^0.0.2", - "@alicloud/fetcher-fetch": "^0.0.2" + "@alicloud/console-base-conf-env": "^1.0.0", + "@alicloud/console-one-config": "^1.0.0", + "@alicloud/cookie": "^1.0.0", + "@alicloud/fetcher": "^1.0.0", + "@alicloud/fetcher-fetch": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-req-mock/package.json b/packages/console-fetcher-interceptor-req-mock/package.json index 2a4815872..bc3592830 100644 --- a/packages/console-fetcher-interceptor-req-mock/package.json +++ b/packages/console-fetcher-interceptor-req-mock/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-mock", - "version": "0.0.2", + "version": "1.0.0", "description": "@alicloud/console-fetcher 请求拦截 - mock 转接", "license": "MIT", "main": "build/cjs/index.js", @@ -27,8 +27,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/demo-rc-elements": "^1.0.0", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -38,8 +38,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-env": "^0.0.2", - "@alicloud/fetcher": "^0.0.2" + "@alicloud/console-base-conf-env": "^1.0.0", + "@alicloud/fetcher": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-req-security/package.json b/packages/console-fetcher-interceptor-req-security/package.json index c690d700a..ec188c6c7 100644 --- a/packages/console-fetcher-interceptor-req-security/package.json +++ b/packages/console-fetcher-interceptor-req-security/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-req-security", - "version": "0.0.2", + "version": "1.0.0", "description": "@alicloud/console-fetcher 请求拦截 - 类 POST 请求添加安全参数", "license": "MIT", "main": "build/cjs/index.js", @@ -27,8 +27,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/demo-rc-elements": "^1.0.0", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -38,7 +38,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher": "^0.0.2" + "@alicloud/fetcher": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-biz/package.json b/packages/console-fetcher-interceptor-res-biz/package.json index eefdbe055..e0bd9cbad 100644 --- a/packages/console-fetcher-interceptor-res-biz/package.json +++ b/packages/console-fetcher-interceptor-res-biz/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-biz", - "version": "0.0.2", + "version": "1.0.0", "description": "@alicloud/console-fetcher 响应拦截 - 业务层错误", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/demo-rc-elements": "^1.0.0", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,7 +37,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher": "^0.0.2" + "@alicloud/fetcher": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-error-message/package.json b/packages/console-fetcher-interceptor-res-error-message/package.json index 0d8d7cf9a..a01538206 100644 --- a/packages/console-fetcher-interceptor-res-error-message/package.json +++ b/packages/console-fetcher-interceptor-res-error-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-error-message", - "version": "0.0.2", + "version": "1.0.0", "description": "@alicloud/console-fetcher 响应拦截 - 一般性错误 message 国际化", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/demo-rc-elements": "^1.0.0", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -37,8 +37,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-intl-factory-basic": "^0.0.2", - "@alicloud/fetcher": "^0.0.2" + "@alicloud/console-base-intl-factory-basic": "^1.0.0", + "@alicloud/fetcher": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-interceptor-res-risk/package.json b/packages/console-fetcher-interceptor-res-risk/package.json index 9911a85f7..b3a3da794 100644 --- a/packages/console-fetcher-interceptor-res-risk/package.json +++ b/packages/console-fetcher-interceptor-res-risk/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-res-risk", - "version": "0.0.2", + "version": "1.0.0", "description": "@alicloud/console-fetcher 响应拦截 - 风控处理", "license": "MIT", "main": "build/cjs/index.js", @@ -26,8 +26,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/demo-rc-elements": "^1.0.0", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", @@ -42,13 +42,13 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-intl-factory": "^0.0.2", - "@alicloud/console-base-rc-button": "^0.0.2", - "@alicloud/console-base-rc-dialog": "^0.0.2", - "@alicloud/console-base-rc-flex": "^0.0.2", - "@alicloud/console-base-rc-input": "^0.0.2", - "@alicloud/console-base-styled-mixin": "^0.0.2", - "@alicloud/fetcher": "^0.0.2", + "@alicloud/console-base-intl-factory": "^1.0.0", + "@alicloud/console-base-rc-button": "^1.0.0", + "@alicloud/console-base-rc-dialog": "^1.0.0", + "@alicloud/console-base-rc-flex": "^1.0.0", + "@alicloud/console-base-rc-input": "^1.0.0", + "@alicloud/console-base-styled-mixin": "^1.0.0", + "@alicloud/fetcher": "^1.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-fetcher-interceptor-sls/package.json b/packages/console-fetcher-interceptor-sls/package.json index 9889f1608..ad7900e2e 100755 --- a/packages/console-fetcher-interceptor-sls/package.json +++ b/packages/console-fetcher-interceptor-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-sls", - "version": "0.0.2", + "version": "1.0.0", "description": "SLS logger interceptor for @alicloud/console-fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -25,8 +25,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/demo-rc-elements": "^1.0.0", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -36,8 +36,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-logger-sls": "^0.0.2", - "@alicloud/fetcher": "^0.0.2" + "@alicloud/console-logger-sls": "^1.0.0", + "@alicloud/fetcher": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher-proxy/package.json b/packages/console-fetcher-proxy/package.json index 42cf8c550..c3bcfd918 100644 --- a/packages/console-fetcher-proxy/package.json +++ b/packages/console-fetcher-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-proxy", - "version": "0.0.2", + "version": "1.0.0", "description": "控制台 fetcher 代理", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,9 +35,9 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-global": "^0.0.2", - "@alicloud/console-base-messenger": "^0.0.2", - "@alicloud/console-fetcher": "^0.0.2" + "@alicloud/console-base-global": "^1.0.0", + "@alicloud/console-base-messenger": "^1.0.0", + "@alicloud/console-fetcher": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher/package.json b/packages/console-fetcher/package.json index 573e04809..e0852a2d1 100644 --- a/packages/console-fetcher/package.json +++ b/packages/console-fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher", - "version": "0.0.2", + "version": "1.0.0", "description": "控制台 fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -24,8 +24,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/demo-rc-elements": "^1.0.0", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,8 +35,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-basic": "^0.0.2", - "@alicloud/console-fetcher-interceptor-res-risk": "^0.0.2" + "@alicloud/console-fetcher-basic": "^1.0.0", + "@alicloud/console-fetcher-interceptor-res-risk": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-logger-sls/package.json b/packages/console-logger-sls/package.json index 7a46a53f3..64570ac1b 100755 --- a/packages/console-logger-sls/package.json +++ b/packages/console-logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-logger-sls", - "version": "0.0.2", + "version": "1.0.0", "description": "SLS logger factory for console", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", @@ -35,10 +35,10 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-conf-account": "^0.0.2", - "@alicloud/console-base-conf-env": "^0.0.2", - "@alicloud/console-base-conf-locale": "^0.0.2", - "@alicloud/logger-sls": "^0.0.2" + "@alicloud/console-base-conf-account": "^1.0.0", + "@alicloud/console-base-conf-env": "^1.0.0", + "@alicloud/console-base-conf-locale": "^1.0.0", + "@alicloud/logger-sls": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-one-conf/package.json b/packages/console-one-conf/package.json index e617110af..155c8b455 100755 --- a/packages/console-one-conf/package.json +++ b/packages/console-one-conf/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-conf", - "version": "0.0.2", + "version": "1.0.0", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", @@ -32,8 +32,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-one-config": "^0.0.2", - "@alicloud/viper-feature-gen": "^0.0.2" + "@alicloud/console-one-config": "^1.0.0", + "@alicloud/viper-feature-gen": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-one-config/package.json b/packages/console-one-config/package.json index e5dce7e19..ade919d04 100755 --- a/packages/console-one-config/package.json +++ b/packages/console-one-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-one-config", - "version": "0.0.2", + "version": "1.0.0", "description": "OneConsole Config 对象解析与封装", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/cookie/package.json b/packages/cookie/package.json index 53a0dbcd2..985434e2f 100755 --- a/packages/cookie/package.json +++ b/packages/cookie/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/cookie", - "version": "0.0.2", + "version": "1.0.0", "description": "ConsoleBase Cookie", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/copy-text/package.json b/packages/copy-text/package.json index ff4dc90d3..8d2075bf2 100755 --- a/packages/copy-text/package.json +++ b/packages/copy-text/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/copy-text", - "version": "0.0.2", + "version": "1.0.0", "description": "Copy Text", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/demo-rc-elements/package.json b/packages/demo-rc-elements/package.json index ce6d11955..ca54d89f3 100644 --- a/packages/demo-rc-elements/package.json +++ b/packages/demo-rc-elements/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/demo-rc-elements", - "version": "0.0.4", + "version": "1.0.0", "description": "专用于 demo 的元素,为了好看和方便,切不可用于生产", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/dom-event-hijacker/package.json b/packages/dom-event-hijacker/package.json index 3b105c519..ecea0a6fe 100644 --- a/packages/dom-event-hijacker/package.json +++ b/packages/dom-event-hijacker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/dom-event-hijacker", - "version": "0.0.2", + "version": "1.0.0", "description": "DOM 事件拦截,类似于 jQuery 的 delegate", "license": "MIT", "main": "build/cjs/index.js", @@ -26,7 +26,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "jest": "^26.6.3", "react": "^16.14.0", diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 9318853ab..64de986c5 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/eslint-config", - "version": "0.0.3", + "version": "1.0.0", "description": "eslint config based on eslint-config-ali", "license": "MIT", "main": "index.js", diff --git a/packages/fetcher-demo-helpers/package.json b/packages/fetcher-demo-helpers/package.json index b12754c57..0c2cb1e64 100644 --- a/packages/fetcher-demo-helpers/package.json +++ b/packages/fetcher-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-demo-helpers", - "version": "0.0.2", + "version": "1.0.0", "description": "fetcher 测试专用包,避免代码冗余", "license": "MIT", "main": "build/cjs/index.js", @@ -37,7 +37,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/demo-rc-elements": "^0.0.4" + "@alicloud/demo-rc-elements": "^1.0.0" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/fetcher-fetch/package.json b/packages/fetcher-fetch/package.json index 9643bb253..ef68b0715 100644 --- a/packages/fetcher-fetch/package.json +++ b/packages/fetcher-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-fetch", - "version": "0.0.2", + "version": "1.0.0", "description": "@alicloud/fetcher 的底层 fetch 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/fetcher-jsonp/package.json b/packages/fetcher-jsonp/package.json index 28fdf48bd..bd40bfe4a 100644 --- a/packages/fetcher-jsonp/package.json +++ b/packages/fetcher-jsonp/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher-jsonp", - "version": "0.0.2", + "version": "1.0.0", "description": "fetcher 的底层 jsonp 实现,可独立使用", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/react": "^16.14.2", "jest": "^26.6.3", diff --git a/packages/fetcher/package.json b/packages/fetcher/package.json index ee6be882e..293ab659a 100644 --- a/packages/fetcher/package.json +++ b/packages/fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/fetcher", - "version": "0.0.2", + "version": "1.0.0", "description": "类似 axios,封装 fetch/jsonp,可以加拦截器", "license": "MIT", "main": "build/cjs/index.js", @@ -28,8 +28,8 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", - "@alicloud/fetcher-demo-helpers": "^0.0.2", + "@alicloud/demo-rc-elements": "^1.0.0", + "@alicloud/fetcher-demo-helpers": "^1.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/qs": "^6.9.5", @@ -40,8 +40,8 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher-fetch": "^0.0.2", - "@alicloud/fetcher-jsonp": "^0.0.2", + "@alicloud/fetcher-fetch": "^1.0.0", + "@alicloud/fetcher-jsonp": "^1.0.0", "lodash": "^4.17.20", "qs": "^6.9.4" }, diff --git a/packages/logger-sls/package.json b/packages/logger-sls/package.json index 70265818b..342cc0da4 100755 --- a/packages/logger-sls/package.json +++ b/packages/logger-sls/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/logger-sls", - "version": "0.0.2", + "version": "1.0.0", "description": "SLS logger factory", "license": "MIT", "main": "build/cjs/index.js", @@ -25,7 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/qs": "^6.9.5", "@types/react": "^16.14.2", @@ -36,7 +36,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/fetcher-fetch": "^0.0.2", + "@alicloud/fetcher-fetch": "^1.0.0", "qs": "^6.9.4" }, "scripts": { diff --git a/packages/mixed-black-whitelist-checker/package.json b/packages/mixed-black-whitelist-checker/package.json index da660749e..eb6d833f7 100755 --- a/packages/mixed-black-whitelist-checker/package.json +++ b/packages/mixed-black-whitelist-checker/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/mixed-black-whitelist-checker", - "version": "0.0.2", + "version": "1.0.0", "description": "混合黑白名单检查器", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/post-message/package.json b/packages/post-message/package.json index e97a40e3f..133461502 100755 --- a/packages/post-message/package.json +++ b/packages/post-message/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/post-message", - "version": "0.0.2", + "version": "1.0.0", "description": "postMessage 封装,可以用成 Promise", "license": "MIT", "main": "build/cjs/index.js", @@ -27,7 +27,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", - "@alicloud/demo-rc-elements": "^0.0.4", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", diff --git a/packages/react-hook-is-unmounted/package.json b/packages/react-hook-is-unmounted/package.json index 33e26d6a8..4c7ada652 100644 --- a/packages/react-hook-is-unmounted/package.json +++ b/packages/react-hook-is-unmounted/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/react-hook-is-unmounted", - "version": "0.0.2", + "version": "1.0.0", "description": "React Hook - 是否已被 unmount", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/storage-factory/package.json b/packages/storage-factory/package.json index f04e2b31b..7def3f545 100755 --- a/packages/storage-factory/package.json +++ b/packages/storage-factory/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/storage-factory", - "version": "0.0.2", + "version": "1.0.0", "description": "Storage factory - use storage with types", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/stylelint-config/package.json b/packages/stylelint-config/package.json index 261efd081..ad424df6f 100644 --- a/packages/stylelint-config/package.json +++ b/packages/stylelint-config/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/stylelint-config", - "version": "0.0.3", + "version": "1.0.0", "description": "stylelint configuration", "license": "MIT", "main": "index.js", diff --git a/packages/viper-feature-gen/package.json b/packages/viper-feature-gen/package.json index c3e606ff8..0af1a05df 100755 --- a/packages/viper-feature-gen/package.json +++ b/packages/viper-feature-gen/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/viper-feature-gen", - "version": "0.0.2", + "version": "1.0.0", "description": "阿里云控制台(接入 viper)功能开关检查(工厂方法)", "license": "MIT", "main": "build/cjs/index.js", @@ -34,7 +34,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/mixed-black-whitelist-checker": "^0.0.2", + "@alicloud/mixed-black-whitelist-checker": "^1.0.0", "lodash": "^4.17.20" }, "scripts": { From 53dcee9ea00cca0d4837eba3b5b1a1c3f9ba58eb Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 14:45:14 +0800 Subject: [PATCH 126/135] CHORE up --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2293e7e08..bc0875779 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "packages/*" ], "devDependencies": { - "@alicloud/eslint-config": "^0.0.3", - "@alicloud/stylelint-config": "^0.0.3", + "@alicloud/eslint-config": "^1.0.0", + "@alicloud/stylelint-config": "^1.0.0", "@types/react": "^16.14.2", "@types/react-dom": "^16.9.10", "eslint": "^7.14.0", From 28243c2502864a7ff61af1b76c34c2f6a2885acb Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 15:52:38 +0800 Subject: [PATCH 127/135] FIX missing dep --- packages/console-base-messenger/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/console-base-messenger/package.json b/packages/console-base-messenger/package.json index 216d3c590..531d90ee0 100755 --- a/packages/console-base-messenger/package.json +++ b/packages/console-base-messenger/package.json @@ -33,6 +33,7 @@ }, "dependencies": { "@alicloud/console-base-common-typings": "^1.0.0", + "@alicloud/console-base-log-sls": "^1.0.0", "@alicloud/post-message": "^1.0.0" }, "scripts": { From b50bdf97569d0be63d51830ac6c645f6bf24983a Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 15:53:04 +0800 Subject: [PATCH 128/135] Publish - @alicloud/console-base-demo-helpers@1.0.1 - @alicloud/console-base-error-prompt-proxy@1.0.1 - @alicloud/console-base-global@1.0.1 - @alicloud/console-base-messenger@1.0.1 - @alicloud/console-fetcher-basic@1.0.1 - @alicloud/console-fetcher-interceptor-fecs@1.0.1 - @alicloud/console-fetcher-proxy@1.0.1 - @alicloud/console-fetcher@1.0.1 --- packages/console-base-demo-helpers/package.json | 4 ++-- packages/console-base-error-prompt-proxy/package.json | 6 +++--- packages/console-base-global/package.json | 4 ++-- packages/console-base-messenger/package.json | 2 +- packages/console-fetcher-basic/package.json | 6 +++--- packages/console-fetcher-interceptor-fecs/package.json | 4 ++-- packages/console-fetcher-proxy/package.json | 8 ++++---- packages/console-fetcher/package.json | 4 ++-- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/console-base-demo-helpers/package.json b/packages/console-base-demo-helpers/package.json index 5195bf1b0..80d641110 100644 --- a/packages/console-base-demo-helpers/package.json +++ b/packages/console-base-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-demo-helpers", - "version": "1.0.0", + "version": "1.0.1", "description": "ConsoleBase demo 助手", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-messenger": "^1.0.0", + "@alicloud/console-base-messenger": "^1.0.1", "@alicloud/demo-rc-elements": "^1.0.0" }, "scripts": { diff --git a/packages/console-base-error-prompt-proxy/package.json b/packages/console-base-error-prompt-proxy/package.json index 57e319ca0..4d648c9b8 100644 --- a/packages/console-base-error-prompt-proxy/package.json +++ b/packages/console-base-error-prompt-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt-proxy", - "version": "1.0.0", + "version": "1.0.1", "description": "ConsoleBase 错误弹窗器(集中代理)", "license": "MIT", "main": "build/cjs/index.js", @@ -41,8 +41,8 @@ }, "dependencies": { "@alicloud/console-base-error-prompt": "^1.0.0", - "@alicloud/console-base-global": "^1.0.0", - "@alicloud/console-base-messenger": "^1.0.0" + "@alicloud/console-base-global": "^1.0.1", + "@alicloud/console-base-messenger": "^1.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-global/package.json b/packages/console-base-global/package.json index 16a4d8693..a76a09331 100644 --- a/packages/console-base-global/package.json +++ b/packages/console-base-global/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-global", - "version": "1.0.0", + "version": "1.0.1", "description": "ConsoleBase 唯一官方指定全局变量... 的 API", "license": "MIT", "main": "build/cjs/index.js", @@ -32,7 +32,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-messenger": "^1.0.0" + "@alicloud/console-base-messenger": "^1.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-messenger/package.json b/packages/console-base-messenger/package.json index 531d90ee0..2af561645 100755 --- a/packages/console-base-messenger/package.json +++ b/packages/console-base-messenger/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-messenger", - "version": "1.0.0", + "version": "1.0.1", "description": "ConsoleBase 信使 - 与控制台应用之间的交互", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-basic/package.json b/packages/console-fetcher-basic/package.json index b6ea90e42..aff0762c2 100644 --- a/packages/console-fetcher-basic/package.json +++ b/packages/console-fetcher-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-basic", - "version": "1.0.0", + "version": "1.0.1", "description": "控制台基础 Fetcher(无风控)", "license": "MIT", "main": "build/cjs/index.js", @@ -23,7 +23,7 @@ "basic" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^1.0.0", + "@alicloud/console-base-demo-helpers": "^1.0.1", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", "@alicloud/demo-rc-elements": "^1.0.0", @@ -38,7 +38,7 @@ }, "dependencies": { "@alicloud/console-fetcher-interceptor-arms": "^1.0.0", - "@alicloud/console-fetcher-interceptor-fecs": "^1.0.0", + "@alicloud/console-fetcher-interceptor-fecs": "^1.0.1", "@alicloud/console-fetcher-interceptor-req-security": "^1.0.0", "@alicloud/console-fetcher-interceptor-res-biz": "^1.0.0", "@alicloud/console-fetcher-interceptor-res-error-message": "^1.0.0", diff --git a/packages/console-fetcher-interceptor-fecs/package.json b/packages/console-fetcher-interceptor-fecs/package.json index 4513bca70..8c9016019 100644 --- a/packages/console-fetcher-interceptor-fecs/package.json +++ b/packages/console-fetcher-interceptor-fecs/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-fecs", - "version": "1.0.0", + "version": "1.0.1", "description": "@alicloud/console-fetcher 请求 + 响应拦截 - FECS", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "fecs" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^1.0.0", + "@alicloud/console-base-demo-helpers": "^1.0.1", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", "@alicloud/demo-rc-elements": "^1.0.0", diff --git a/packages/console-fetcher-proxy/package.json b/packages/console-fetcher-proxy/package.json index c3bcfd918..7e9f704dd 100644 --- a/packages/console-fetcher-proxy/package.json +++ b/packages/console-fetcher-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-proxy", - "version": "1.0.0", + "version": "1.0.1", "description": "控制台 fetcher 代理", "license": "MIT", "main": "build/cjs/index.js", @@ -35,9 +35,9 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-global": "^1.0.0", - "@alicloud/console-base-messenger": "^1.0.0", - "@alicloud/console-fetcher": "^1.0.0" + "@alicloud/console-base-global": "^1.0.1", + "@alicloud/console-base-messenger": "^1.0.1", + "@alicloud/console-fetcher": "^1.0.1" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher/package.json b/packages/console-fetcher/package.json index e0852a2d1..b781fdc96 100644 --- a/packages/console-fetcher/package.json +++ b/packages/console-fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher", - "version": "1.0.0", + "version": "1.0.1", "description": "控制台 fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -35,7 +35,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-basic": "^1.0.0", + "@alicloud/console-fetcher-basic": "^1.0.1", "@alicloud/console-fetcher-interceptor-res-risk": "^1.0.0" }, "scripts": { From b97d5f1d7ef1cadcfb4b1d086b35cc3cc867fb8d Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 20:20:24 +0800 Subject: [PATCH 129/135] CHORE add WithPromise in loading --- packages/console-base-rc-loading/package.json | 1 + packages/console-base-rc-loading/src/index.ts | 10 ++-- .../src/rc/with-promise/index.tsx | 48 +++++++++++++++++++ .../src/types/index.ts | 20 +++++--- .../stories/demo-default/index.tsx | 46 +++++++++++++++--- 5 files changed, 109 insertions(+), 16 deletions(-) create mode 100644 packages/console-base-rc-loading/src/rc/with-promise/index.tsx diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index 58c667c45..6ee572e11 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -25,6 +25,7 @@ "devDependencies": { "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", + "@alicloud/demo-rc-elements": "^1.0.0", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.165", "@types/react": "^16.14.2", diff --git a/packages/console-base-rc-loading/src/index.ts b/packages/console-base-rc-loading/src/index.ts index 9d1b6ea6e..6e36980f6 100644 --- a/packages/console-base-rc-loading/src/index.ts +++ b/packages/console-base-rc-loading/src/index.ts @@ -1,19 +1,23 @@ import { IPropsLoading as LoadingProps, - IPropsWithLoading as WithLoadingProps + IPropsWithLoading as WithLoadingProps, + IPropsWithPromise as WithPromiseProps } from './types'; import WithLoading from './rc/with-loading'; +import WithPromise from './rc/with-promise'; export { default } from './rc/loading'; export { - WithLoading + WithLoading, + WithPromise }; export type { LoadingProps, - WithLoadingProps + WithLoadingProps, + WithPromiseProps }; diff --git a/packages/console-base-rc-loading/src/rc/with-promise/index.tsx b/packages/console-base-rc-loading/src/rc/with-promise/index.tsx new file mode 100644 index 000000000..9c2b4dd97 --- /dev/null +++ b/packages/console-base-rc-loading/src/rc/with-promise/index.tsx @@ -0,0 +1,48 @@ +import React, { + useState, + useEffect +} from 'react'; + +import { + ELoading, + DataWithLoading +} from '@alicloud/console-base-common-typings'; + +import { + IPropsWithPromise +} from '../../types'; +import WithLoading from '../with-loading'; + +export default function WithPromise({ + promise, + ...props +}: IPropsWithPromise): JSX.Element { + const [stateDwl, setStateDwl] = useState>(null); + + useEffect(() => { + if (!promise) { + setStateDwl(null); + + return; + } + + setStateDwl({ + loading: ELoading.LOADING, + data: null + }); + + promise.then(result => setStateDwl({ + loading: ELoading.SUCCESS, + data: result + })).catch(err => setStateDwl({ + loading: ELoading.ERROR, + data: null, + error: err + })); + }, [promise]); + + return {...{ + ...stateDwl, + ...props + }} />; +} diff --git a/packages/console-base-rc-loading/src/types/index.ts b/packages/console-base-rc-loading/src/types/index.ts index 1ead1d8d1..2d8261978 100644 --- a/packages/console-base-rc-loading/src/types/index.ts +++ b/packages/console-base-rc-loading/src/types/index.ts @@ -6,6 +6,15 @@ import { DataWithLoading } from '@alicloud/console-base-common-typings'; +interface IWithLoading { + messageLoading?: string | JSX.Element; + messageError?: string | JSX.Element; + messageErrorRetry?: string | JSX.Element; + messageEmpty?: string | JSX.Element; + renderLoaded(data: T): JSX.Element; + retry?(): void; +} + export type TStatus = 'loading' | 'error' | 'empty'; export type TAlign = 'l' | 'r' | 'c'; @@ -17,11 +26,8 @@ export interface IPropsLoading extends HTMLAttributes { retry?(): void; } -export interface IPropsWithLoading extends DataWithLoading { - messageLoading?: string | JSX.Element; - messageError?: string | JSX.Element; - messageErrorRetry?: string | JSX.Element; - messageEmpty?: string | JSX.Element; - renderLoaded(data: T): JSX.Element; - retry?(): void; +export interface IPropsWithLoading extends DataWithLoading, IWithLoading {} + +export interface IPropsWithPromise extends IWithLoading { + promise?: Promise | null; } diff --git a/packages/console-base-rc-loading/stories/demo-default/index.tsx b/packages/console-base-rc-loading/stories/demo-default/index.tsx index b84f99ce3..55d9f8200 100644 --- a/packages/console-base-rc-loading/stories/demo-default/index.tsx +++ b/packages/console-base-rc-loading/stories/demo-default/index.tsx @@ -1,18 +1,52 @@ import React, { - useState + useState, + useCallback } from 'react'; +import { + H1, + Button +} from '@alicloud/demo-rc-elements'; + import Loading, { - LoadingProps + LoadingProps, + WithPromise } from '../../src'; import Knobs from '../knobs'; +function randomPromise(): Promise { + return new Promise((resolve, reject) => { + const ram = Math.ceil(Math.random() * 2000); + + setTimeout(() => { + if (ram % 2) { + resolve([1, 2, 3]); + } else { + reject(new Error(`${ram} NOT odd`)); + } + }, ram); + }); +} + export default function DemoDefault(): JSX.Element { const [stateProps, setStateProps] = useState>({}); + const [statePromise, setStatePromise] = useState | null>(null); - return
- - console.info(123456)} /> + const handleRandomPromise = useCallback(() => setStatePromise(randomPromise()), [setStatePromise]); + const renderLoaded = useCallback((result: number[]) =>
+ {result.map(v => item - {v})} +
, []); + + return <> -
; +

Loading - 调整 knobs 看效果

+ +

WithLoading

+ + {...{ + promise: statePromise, + renderLoaded, + retry: handleRandomPromise + }} /> + ; } From 485085142b059631a8804605d2b35f33e7773e5a Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 20:26:52 +0800 Subject: [PATCH 130/135] CHORE WithPromise now respect unmount --- packages/console-base-rc-loading/package.json | 1 + .../src/rc/with-promise/index.tsx | 36 +++++++++++++------ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index 6ee572e11..c3e60d063 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -45,6 +45,7 @@ "@alicloud/console-base-intl-factory-basic": "^1.0.0", "@alicloud/console-base-rc-icon": "^1.0.0", "@alicloud/console-base-styled-mixin": "^1.0.0", + "@alicloud/react-hook-is-unmounted": "^1.0.0", "lodash": "^4.17.20" }, "scripts": { diff --git a/packages/console-base-rc-loading/src/rc/with-promise/index.tsx b/packages/console-base-rc-loading/src/rc/with-promise/index.tsx index 9c2b4dd97..46d6d6864 100644 --- a/packages/console-base-rc-loading/src/rc/with-promise/index.tsx +++ b/packages/console-base-rc-loading/src/rc/with-promise/index.tsx @@ -3,6 +3,7 @@ import React, { useEffect } from 'react'; +import useIsUnmounted from '@alicloud/react-hook-is-unmounted'; import { ELoading, DataWithLoading @@ -17,6 +18,7 @@ export default function WithPromise({ promise, ...props }: IPropsWithPromise): JSX.Element { + const isUnmounted = useIsUnmounted(); const [stateDwl, setStateDwl] = useState>(null); useEffect(() => { @@ -31,18 +33,30 @@ export default function WithPromise({ data: null }); - promise.then(result => setStateDwl({ - loading: ELoading.SUCCESS, - data: result - })).catch(err => setStateDwl({ - loading: ELoading.ERROR, - data: null, - error: err - })); - }, [promise]); + promise.then(result => { + if (isUnmounted()) { + return; + } + + setStateDwl({ + loading: ELoading.SUCCESS, + data: result + }); + }).catch(err => { + if (isUnmounted()) { + return; + } + + setStateDwl({ + loading: ELoading.ERROR, + data: null, + error: err + }); + }); + }, [isUnmounted, promise, setStateDwl]); - return {...{ + return promise ? {...{ ...stateDwl, ...props - }} />; + }} /> : null; } From 47cb988c0f499e39545a4f91bfee99e1b7beb6a8 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 20:28:49 +0800 Subject: [PATCH 131/135] Publish - @alicloud/console-base-rc-loading@1.0.1 --- packages/console-base-rc-loading/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index c3e60d063..7934bed7a 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-loading", - "version": "1.0.0", + "version": "1.0.1", "description": "ConsoleBase 组件 - 加载中", "license": "MIT", "main": "build/cjs/index.js", From 985fa98e2392a354e97d505a83065ebd9ac49a8e Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 20:32:52 +0800 Subject: [PATCH 132/135] CHORE back version --- packages/console-base-rc-loading/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index 7934bed7a..c3e60d063 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-loading", - "version": "1.0.1", + "version": "1.0.0", "description": "ConsoleBase 组件 - 加载中", "license": "MIT", "main": "build/cjs/index.js", From 0d1f02bd9e6dcfa47836dfe8f71ed2053dd48c00 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Tue, 1 Dec 2020 20:33:13 +0800 Subject: [PATCH 133/135] Publish - @alicloud/console-base-rc-loading@1.0.1 --- packages/console-base-rc-loading/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console-base-rc-loading/package.json b/packages/console-base-rc-loading/package.json index c3e60d063..7934bed7a 100644 --- a/packages/console-base-rc-loading/package.json +++ b/packages/console-base-rc-loading/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-rc-loading", - "version": "1.0.0", + "version": "1.0.1", "description": "ConsoleBase 组件 - 加载中", "license": "MIT", "main": "build/cjs/index.js", From 447ee326c98f74165d1ed0007871705f1cd50f12 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Wed, 2 Dec 2020 12:17:18 +0800 Subject: [PATCH 134/135] FIX wrongly changed topic for toolkit --- .../src/messenger/app-broadcast/put-toolkit-item.ts | 2 +- .../messenger/app-subscribe/on-toolkit-item-active-change.ts | 2 +- .../src/messenger/app-subscribe/on-toolkit-item-click.ts | 2 +- .../messenger/app-subscribe/on-toolkit-version-new-click.ts | 2 +- .../messenger/app-subscribe/on-toolkit-version-old-click.ts | 4 ++-- .../console-base-broadcast/toolkit-tool-active-change.ts | 2 +- .../messenger/console-base-broadcast/toolkit-tool-clicked.ts | 2 +- .../src/messenger/console-base-subscribe/on-toolkit-put.ts | 2 +- .../src/messenger/console-base-subscribe/on-toolkit-remove.ts | 2 +- .../console-base-messenger/src/util/compose-toolkit-type.ts | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/console-base-messenger/src/messenger/app-broadcast/put-toolkit-item.ts b/packages/console-base-messenger/src/messenger/app-broadcast/put-toolkit-item.ts index 0702f0b11..017c17d14 100644 --- a/packages/console-base-messenger/src/messenger/app-broadcast/put-toolkit-item.ts +++ b/packages/console-base-messenger/src/messenger/app-broadcast/put-toolkit-item.ts @@ -16,7 +16,7 @@ import { /** * Toolkit 添加或修改一个工具 * - * 原 @alicloud/console-base-sdk-toolkit messenger.putTool + * 原 @ali/console-base-sdk-toolkit messenger.putTool */ export default function putToolkitItem(tool: SettingsToolkitItem): void { broadcastByApp(composeToolkitType(EToolkitTypeShort.ADD), { diff --git a/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-item-active-change.ts b/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-item-active-change.ts index fe5587a70..7a4eff39a 100644 --- a/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-item-active-change.ts +++ b/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-item-active-change.ts @@ -9,7 +9,7 @@ import { /** * 某工具的「激活」时的回调 * - * 原 @alicloud/console-base-sdk-toolkit messenger.subscribeActivated + subscribeDeactivated + * 原 @ali/console-base-sdk-toolkit messenger.subscribeActivated + subscribeDeactivated */ export default function onToolkitItemActiveChange(id: string, fn: (active: boolean) => void): () => void { return subscribeByApp(composeToolkitTypeWithId(EToolkitTypeShort.TOOL_ACTIVATED, id), fn); diff --git a/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-item-click.ts b/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-item-click.ts index 1de3f1b1e..b6e77d5fc 100644 --- a/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-item-click.ts +++ b/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-item-click.ts @@ -9,7 +9,7 @@ import { /** * 某工具的「点击」的回调 * - * 原 @alicloud/console-base-sdk-toolkit messenger.subscribeClicked + * 原 @ali/console-base-sdk-toolkit messenger.subscribeClicked */ export default function onToolkitItemClick(id: string, fn: () => void): () => void { return subscribeByApp(composeToolkitTypeWithId(EToolkitTypeShort.TOOL_CLICKED, id), fn); diff --git a/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-version-new-click.ts b/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-version-new-click.ts index f2b526d71..f358634a9 100644 --- a/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-version-new-click.ts +++ b/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-version-new-click.ts @@ -7,7 +7,7 @@ import onToolkitItemClick from './on-toolkit-item-click'; /** * 「体验新版」工具点击时的回调 * - * 原 @alicloud/console-base-sdk-toolkit messenger.subscribeClickedVersionNew + * 原 @ali/console-base-sdk-toolkit messenger.subscribeClickedVersionNew */ export default function onToolkitVersionNewClick(fn: () => void): () => void { return onToolkitItemClick(EToolkitIdSystem.VERSION_NEW, fn); diff --git a/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-version-old-click.ts b/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-version-old-click.ts index 710f94afb..734ad3946 100644 --- a/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-version-old-click.ts +++ b/packages/console-base-messenger/src/messenger/app-subscribe/on-toolkit-version-old-click.ts @@ -7,12 +7,12 @@ import onToolkitItemClick from './on-toolkit-item-click'; /** * 「体验新版」工具点击时的回调 * - * 原 @alicloud/console-base-sdk-toolkit messenger.subscribeClickedVersionNew + * 原 @ali/console-base-sdk-toolkit messenger.subscribeClickedVersionNew */ /** * 「返回旧版」工具点击时的回调 * - * 原 @alicloud/console-base-sdk-toolkit messenger.subscribeClickedVersionOld + * 原 @ali/console-base-sdk-toolkit messenger.subscribeClickedVersionOld */ export default function onToolkitVersionOldClick(fn: () => void): () => void { return onToolkitItemClick(EToolkitIdSystem.VERSION_OLD, fn); diff --git a/packages/console-base-messenger/src/messenger/console-base-broadcast/toolkit-tool-active-change.ts b/packages/console-base-messenger/src/messenger/console-base-broadcast/toolkit-tool-active-change.ts index c00d7b127..a9d05d141 100644 --- a/packages/console-base-messenger/src/messenger/console-base-broadcast/toolkit-tool-active-change.ts +++ b/packages/console-base-messenger/src/messenger/console-base-broadcast/toolkit-tool-active-change.ts @@ -9,7 +9,7 @@ import broadcastByConsoleBase from '../../util/boradcast-by-console-base'; /** * 通知控制台应用:某工具被激活或取消激活 * - * 原 @alicloud/console-base-sdk-toolkit messenger.broadcastActivated + broadcastDeactivated + * 原 @ali/console-base-sdk-toolkit messenger.broadcastActivated + broadcastDeactivated */ export default function toolkitToolActiveChanged(id: string, payload: boolean): void { broadcastByConsoleBase(composeToolkitTypeWithId(EToolkitTypeShort.TOOL_ACTIVATED, id), payload); diff --git a/packages/console-base-messenger/src/messenger/console-base-broadcast/toolkit-tool-clicked.ts b/packages/console-base-messenger/src/messenger/console-base-broadcast/toolkit-tool-clicked.ts index 277c616ec..5e463a838 100644 --- a/packages/console-base-messenger/src/messenger/console-base-broadcast/toolkit-tool-clicked.ts +++ b/packages/console-base-messenger/src/messenger/console-base-broadcast/toolkit-tool-clicked.ts @@ -9,7 +9,7 @@ import broadcastByConsoleBase from '../../util/boradcast-by-console-base'; /** * 通知控制台应用:某工具被点击 * - * 原 @alicloud/console-base-sdk-toolkit messenger.broadcastClicked + * 原 @ali/console-base-sdk-toolkit messenger.broadcastClicked */ export default function toolkitToolClicked(id: string): void { broadcastByConsoleBase(composeToolkitTypeWithId(EToolkitTypeShort.TOOL_CLICKED, id)); diff --git a/packages/console-base-messenger/src/messenger/console-base-subscribe/on-toolkit-put.ts b/packages/console-base-messenger/src/messenger/console-base-subscribe/on-toolkit-put.ts index 83529a1df..a5df5ae2e 100644 --- a/packages/console-base-messenger/src/messenger/console-base-subscribe/on-toolkit-put.ts +++ b/packages/console-base-messenger/src/messenger/console-base-subscribe/on-toolkit-put.ts @@ -14,7 +14,7 @@ import composeToolkitType from '../../util/compose-toolkit-type'; /** * console-base 响应动态添加或修改某工具 * - * 原 @alicloud/console-base-sdk-toolkit messenger.subscribePutTool + * 原 @ali/console-base-sdk-toolkit messenger.subscribePutTool */ export default function onToolkitPut(fn: (tool: SettingsToolkitItem) => void): () => void { return subscribeByConsoleBase(composeToolkitType(EToolkitTypeShort.ADD), payload => { diff --git a/packages/console-base-messenger/src/messenger/console-base-subscribe/on-toolkit-remove.ts b/packages/console-base-messenger/src/messenger/console-base-subscribe/on-toolkit-remove.ts index ab58f4c22..03ab485a2 100644 --- a/packages/console-base-messenger/src/messenger/console-base-subscribe/on-toolkit-remove.ts +++ b/packages/console-base-messenger/src/messenger/console-base-subscribe/on-toolkit-remove.ts @@ -7,7 +7,7 @@ import subscribeByConsoleBase from '../../util/subscribe-by-console-base'; /** * console-base 响应动态移除某工具 * - * 原 @alicloud/console-base-sdk-toolkit messenger.subscribeRemoveTool + * 原 @ali/console-base-sdk-toolkit messenger.subscribeRemoveTool */ export default function onToolkitRemove(fn: (id: string) => void): () => void { return subscribeByConsoleBase(composeToolkitType(EToolkitTypeShort.REMOVE), id => { diff --git a/packages/console-base-messenger/src/util/compose-toolkit-type.ts b/packages/console-base-messenger/src/util/compose-toolkit-type.ts index ca7fe4794..5e0607411 100644 --- a/packages/console-base-messenger/src/util/compose-toolkit-type.ts +++ b/packages/console-base-messenger/src/util/compose-toolkit-type.ts @@ -6,7 +6,7 @@ import { * 全局事件 */ export default function composeToolkitType(type: EToolkitTypeShort): string { - return `@alicloud/widget-console-base-toolkit/${type}`; // 不要随意改它,因为这个包可能会被别人引用 + return `@ali/widget-console-base-toolkit/${type}`; // 不要随意改它,因为这个包可能会被别人引用 } /** From 37bcac838ba492b08accdb919af46a3fad41b498 Mon Sep 17 00:00:00 2001 From: Jianchun Wang Date: Wed, 2 Dec 2020 12:18:28 +0800 Subject: [PATCH 135/135] Publish - @alicloud/console-base-demo-helpers@1.0.2 - @alicloud/console-base-error-prompt-proxy@1.0.2 - @alicloud/console-base-global@1.0.2 - @alicloud/console-base-messenger@1.0.2 - @alicloud/console-fetcher-basic@1.0.2 - @alicloud/console-fetcher-interceptor-fecs@1.0.2 - @alicloud/console-fetcher-proxy@1.0.2 - @alicloud/console-fetcher@1.0.2 --- packages/console-base-demo-helpers/package.json | 4 ++-- packages/console-base-error-prompt-proxy/package.json | 6 +++--- packages/console-base-global/package.json | 4 ++-- packages/console-base-messenger/package.json | 2 +- packages/console-fetcher-basic/package.json | 6 +++--- packages/console-fetcher-interceptor-fecs/package.json | 4 ++-- packages/console-fetcher-proxy/package.json | 8 ++++---- packages/console-fetcher/package.json | 4 ++-- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/console-base-demo-helpers/package.json b/packages/console-base-demo-helpers/package.json index 80d641110..a2956b3e2 100644 --- a/packages/console-base-demo-helpers/package.json +++ b/packages/console-base-demo-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-demo-helpers", - "version": "1.0.1", + "version": "1.0.2", "description": "ConsoleBase demo 助手", "license": "MIT", "main": "build/cjs/index.js", @@ -39,7 +39,7 @@ "styled-components": ">=5" }, "dependencies": { - "@alicloud/console-base-messenger": "^1.0.1", + "@alicloud/console-base-messenger": "^1.0.2", "@alicloud/demo-rc-elements": "^1.0.0" }, "scripts": { diff --git a/packages/console-base-error-prompt-proxy/package.json b/packages/console-base-error-prompt-proxy/package.json index 4d648c9b8..40d2aa771 100644 --- a/packages/console-base-error-prompt-proxy/package.json +++ b/packages/console-base-error-prompt-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-error-prompt-proxy", - "version": "1.0.1", + "version": "1.0.2", "description": "ConsoleBase 错误弹窗器(集中代理)", "license": "MIT", "main": "build/cjs/index.js", @@ -41,8 +41,8 @@ }, "dependencies": { "@alicloud/console-base-error-prompt": "^1.0.0", - "@alicloud/console-base-global": "^1.0.1", - "@alicloud/console-base-messenger": "^1.0.1" + "@alicloud/console-base-global": "^1.0.2", + "@alicloud/console-base-messenger": "^1.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-global/package.json b/packages/console-base-global/package.json index a76a09331..aa5ee5cc4 100644 --- a/packages/console-base-global/package.json +++ b/packages/console-base-global/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-global", - "version": "1.0.1", + "version": "1.0.2", "description": "ConsoleBase 唯一官方指定全局变量... 的 API", "license": "MIT", "main": "build/cjs/index.js", @@ -32,7 +32,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-messenger": "^1.0.1" + "@alicloud/console-base-messenger": "^1.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-base-messenger/package.json b/packages/console-base-messenger/package.json index 2af561645..dde1749e6 100755 --- a/packages/console-base-messenger/package.json +++ b/packages/console-base-messenger/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-base-messenger", - "version": "1.0.1", + "version": "1.0.2", "description": "ConsoleBase 信使 - 与控制台应用之间的交互", "license": "MIT", "main": "build/cjs/index.js", diff --git a/packages/console-fetcher-basic/package.json b/packages/console-fetcher-basic/package.json index aff0762c2..bd48eb331 100644 --- a/packages/console-fetcher-basic/package.json +++ b/packages/console-fetcher-basic/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-basic", - "version": "1.0.1", + "version": "1.0.2", "description": "控制台基础 Fetcher(无风控)", "license": "MIT", "main": "build/cjs/index.js", @@ -23,7 +23,7 @@ "basic" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^1.0.1", + "@alicloud/console-base-demo-helpers": "^1.0.2", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", "@alicloud/demo-rc-elements": "^1.0.0", @@ -38,7 +38,7 @@ }, "dependencies": { "@alicloud/console-fetcher-interceptor-arms": "^1.0.0", - "@alicloud/console-fetcher-interceptor-fecs": "^1.0.1", + "@alicloud/console-fetcher-interceptor-fecs": "^1.0.2", "@alicloud/console-fetcher-interceptor-req-security": "^1.0.0", "@alicloud/console-fetcher-interceptor-res-biz": "^1.0.0", "@alicloud/console-fetcher-interceptor-res-error-message": "^1.0.0", diff --git a/packages/console-fetcher-interceptor-fecs/package.json b/packages/console-fetcher-interceptor-fecs/package.json index 8c9016019..500dbdfab 100644 --- a/packages/console-fetcher-interceptor-fecs/package.json +++ b/packages/console-fetcher-interceptor-fecs/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-interceptor-fecs", - "version": "1.0.1", + "version": "1.0.2", "description": "@alicloud/console-fetcher 请求 + 响应拦截 - FECS", "license": "MIT", "main": "build/cjs/index.js", @@ -24,7 +24,7 @@ "fecs" ], "devDependencies": { - "@alicloud/console-base-demo-helpers": "^1.0.1", + "@alicloud/console-base-demo-helpers": "^1.0.2", "@alicloud/console-toolkit-cli": "^1.1.10", "@alicloud/console-toolkit-preset-component": "^1.1.10", "@alicloud/demo-rc-elements": "^1.0.0", diff --git a/packages/console-fetcher-proxy/package.json b/packages/console-fetcher-proxy/package.json index 7e9f704dd..2fcf11044 100644 --- a/packages/console-fetcher-proxy/package.json +++ b/packages/console-fetcher-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher-proxy", - "version": "1.0.1", + "version": "1.0.2", "description": "控制台 fetcher 代理", "license": "MIT", "main": "build/cjs/index.js", @@ -35,9 +35,9 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-base-global": "^1.0.1", - "@alicloud/console-base-messenger": "^1.0.1", - "@alicloud/console-fetcher": "^1.0.1" + "@alicloud/console-base-global": "^1.0.2", + "@alicloud/console-base-messenger": "^1.0.2", + "@alicloud/console-fetcher": "^1.0.2" }, "scripts": { "start": "breezr start-storybook", diff --git a/packages/console-fetcher/package.json b/packages/console-fetcher/package.json index b781fdc96..70837bedd 100644 --- a/packages/console-fetcher/package.json +++ b/packages/console-fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@alicloud/console-fetcher", - "version": "1.0.1", + "version": "1.0.2", "description": "控制台 fetcher", "license": "MIT", "main": "build/cjs/index.js", @@ -35,7 +35,7 @@ "typescript": "^4.1.2" }, "dependencies": { - "@alicloud/console-fetcher-basic": "^1.0.1", + "@alicloud/console-fetcher-basic": "^1.0.2", "@alicloud/console-fetcher-interceptor-res-risk": "^1.0.0" }, "scripts": {